GD32F303 フラッシュメモリ

GD32f303 フラッシュ

ここに画像の説明を挿入

チップ 大きい 総RAM容量 フラッシュサイズ ページ スタートアップファイル
GD32F303RCT6 GD32F30x_HD 48K (256K) 高密度製品(256K~512K)に属する スタートアップ_gd32f30x_hd.s
GD32F303RET6 GD32F30x_HD 64K (256K+256K) 高密度製品(256K~512K)に属する スタートアップ_gd32f30x_hd.s
GD32f303RGT6 GD32F30x_XD 96K (256K+768K) 0~127、256~448ページ 超高密度製品(512K以上)に属する スタートアップ_gd32f30x_xd.s
GD32F305xx GD32F307xx GD32F30x_CL 接続された製品 スタートアップ_gd32f30x_cl.s
  • GD32F30x_CL および GD32F30x_XD では、2 つのフラッシュ メモリが使用されます。最初の 512KB の容量は最初のフラッシュ メモリ (バンク 0) にあり、後続の容量は 2 番目のフラッシュ メモリ (バンク 1) にあります。
  • フラッシュ メモリの最初の 256K バイトでは、CPU は待ち時間ゼロで命令を実行します。この範囲外では、CPU が命令を読み取るまでに長い遅延が発生します。
  • 主記憶フラッシュメモリ容量が 512KB 以下の GD32F30x_CL および GD32F30x_HD では、bank0 のみが使用されます。
  • GD32F30x_CL および GD32F30x_HD、GD32F30x_XD の場合、バンク 0 のフラッシュ ページ サイズは 2KB、バンク 1 のフラッシュ ページ サイズは 4KB です。

FLASHの読み取りおよび書き込み操作

ビデオリンク

画像データとフォントライブラリを指定したフラッシュアドレスに保存

チップGD32f303RGT6を使用

ここに画像の説明を挿入
FLASHアドレス配布
ここに画像の説明を挿入

GD32 の場合、背後に遅い FLASH がある場合は、静的リソースをblank1に置きます。

散乱読み込みを使用する

方法1(定義時にアドレスを指定)

LVGL イメージの image_comp_map (シンボルを格納するイメージ) 配列を 0X8040000 に定義します。

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_COMP uint8_t image_comp_map[] __attribute__((at(0X8040000))) = {
    
    
}

LVGL ピクチャの image_ language_map (シンボルを格納するためのイメージ) 配列を 0X8042000 に定義します。

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_LANGUAGE uint8_t image_language_map[] __attribute__((at(0X8042000))) = {
    
    
}

LVGL イメージ image_laser_map (シンボルを格納するイメージ) 配列を 0X8044000 に定義します。

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_LASER uint8_t image_laser_map[] __attribute__((at(0X8044000))) = {
    
    
}

LVGL イメージの image_rotate_map (シンボルを格納するイメージ) 配列を 0X8046000 に定義します。

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_ROTATE uint8_t image_rotate_map[] __attribute__((at(0X8046000))) = {
    
    
}

LVGL イメージ image_touch_map (シンボルを格納するイメージ) の配列を 0X8048000 に定義します

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_TOUCH uint8_t image_touch_map[] __attribute__((at(0X8048000))) = {
    
    
}

LVGLフォント(シンボルを格納した画像)の配列を0X804A000に定義します。

static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] __attribute__((at(0X8040000))) = {
    
    
  /* U+20 " " */
    0x0,

    /* U+2b "+" */
    0x0, 0x1, 0xe5, 0x0, 0x0, 0x0, 0x1e, 0x50,
    0x0, 0x0, 0x1, 0xe5, 0x0, 0x7, 0xaa, 0xbf,
    0xca, 0xa7, 0x7a, 0xab, 0xfc, 0xaa, 0x70, 0x0,
    0x1e, 0x50, 0x0, 0x0, 0x1, 0xe5, 0x0, 0x0,
    0x0, 0x1e, 0x50, 0x0,

    /* U+2d "-" */
    0x7a, 0xaa, 0xaa, 0xaa, 0x77, 0xaa, 0xaa, 0xaa,
    0xa7,
};

マップファイルを参照すると、指定したアドレスにフォント配列(グローバル変数領域)と画像配列(静的ローカル変数)が格納されています
ここに画像の説明を挿入
ここに画像の説明を挿入

方法 2 (スキャッタロード ファイルを使用する)

ここに画像の説明を挿入

LR_IROM1 0x08000000 0x00040000  {
    
        ; load region size_region
  ER_IROM1 0x08000000 0x00040000  {
    
      ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20000000 0x00018000  {
    
      ; RW data
   .ANY (+RW +ZI)
  }
}

LR_IROM2 0x08040000 0x000c0000   {
    
                  ;load region size_region
  ER_IROM2 0x08040000 0x000c0000 {
    
                  ;load address = execution address
    lcd.O (LCD_Clear) 						
    ili9320.O(ili9320_Initializtion)        ; ili9320.O 表示函数所在的文件生成的.O 文件
    ili9320.O(ili9320_Clear)                ;ili9320_Clear 表示需要分散加载的目标,名字可以随,
  }                                           ;为了方便区分,我们都按照原本的函数名或者是数组名命名。
} 

関数にセクション宣言を追加し、関数定義の外側に次のコードを追加します。

void LCD_Clear(void) __attribute__((section ("LCD_Clear")));
void ili9320_Initializtion(void) __attribute__((section ("ili9320_Initializtion")));
void ili9320_Clear(void) __attribute__((section ("ili9320_Clear")));

おすすめ

転載: blog.csdn.net/m0_37187962/article/details/125788614