1. 程式人生 > 其它 >RISC-V MCU CH32V103將常量定義到指定的Flash地址

RISC-V MCU CH32V103將常量定義到指定的Flash地址

Keil MDK開發ARM 核心的MCU時,將常量定義到指定的Flash地址中,使用 _attribute_( at(絕對地址) )即可,如:

const u32 myConstVariable_1[128] __attribute__((at(0x08001000))) = {0x12345678,0x22221111};//定位在flash中,其他flash補充為0 

沁恆RISC-V MCU,通過Mounriver Studio(MRS)開發時,暫時不支援_attribute_( at(絕對地址) )命令。可通過如下步驟實現:

1、編輯ld連結檔案,新增SECTIONS段

	.flash_test_address :
	{
		. = ALIGN(4);              /*4位元組對齊*/
		. = ORIGIN(FLASH)+0x1000;  /*ORIGIN(FLASH)為 MEMORY定義的FLASH的起始地址(CH32V103為0x08000000),指定到從FLASH起始的0x1000長度的位置*/
		KEEP(*(SORT_NONE(.test_address_1)))  /*連結時*KEEP()可以使得被標記段的內容不被清除*/
		. = ALIGN(4);
	} >FLASH AT>FLASH 

如需將變數定義到Flash的最後,將此段新增到 .text段後面,注意指定的Flash地址要大於程式編譯大小。

2、函式中使用__attribute__((section(".xxx")))定義常量

const uint8_t myConstVariable_1 __attribute__((section(".test_address_1"))) = 0x12;

編譯檢視map檔案,常量地址如下