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")));