TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2652RSIP: 如何修改CCS工程的*.cmd文件,用于分配一段rodata的空间存储自己的数据

Part Number:CC2652RSIP

如题,我想在编译的时候将一段数据放入自定义的flash空间,如下,其中第14-26行是我自己添加的,想在_shell_command_start和_shell_command_end之间开辟一段空间,用于存储我的自定义的一段数据,这段数据的大小由KEEP (*(shellCommand))计算,其中shellCommand是在C的源代码中定义的一个结构体类型(共16个字节),可能会在这段空间添加多个(数量不定)。但是编译的时候KEEP (*(shellCommand))这一行报错。而在stm32CubeIDE(也是基于eclipse开发的一款IDE)中,这个语法是可以正常执行的

SECTIONS
{.intvecs:>  FLASH_START.text:>> FLASH | FLASH_LAST_PAGE.const:>> FLASH | FLASH_LAST_PAGE.constdata:>> FLASH | FLASH_LAST_PAGE.rodata:>> FLASH | FLASH_LAST_PAGE.cinit:>  FLASH | FLASH_LAST_PAGE.pinit:>> FLASH | FLASH_LAST_PAGE.init_array:>  FLASH | FLASH_LAST_PAGE.emb_text:>> FLASH | FLASH_LAST_PAGE.ccfg:>  FLASH_LAST_PAGE (HIGH)/* Constant data goes into FLASH */.rodata :{. = ALIGN(4);*(.rodata)/* .rodata sections (constants, strings, etc.) */. = ALIGN(4);. = ALIGN(4);_shell_command_start = .;KEEP (*(shellCommand))_shell_command_end = .;. = ALIGN(4);} >FLASH... ...
}

shellCommand的类型定义如下:

typedef struct shell_command
{
	int value;
	struct
	{
		const char *name;	/**< 命令名 */
		int (*function)();	/**< 命令执行函数 */
		const char *desc;	/**< 命令描述 */
	} cmd;					/**< 命令定义 */
} ShellCommand;

通过调用如下宏定义添加自定义数据

#define SHELL_EXPORT_CMD(_attr, _name, _func, _desc, ...) \const char shellCmd##_name[] = #_name; \const char shellDesc##_name[] = #_desc; \SHELL_USED const ShellCommand \shellCommand##_name SHELL_SECTION("shellCommand") =  \{ \.value = _attr, \.cmd.name = shellCmd##_name, \.cmd.function = (int (*)())_func, \.cmd.desc = shellDesc##_name, \##__VA_ARGS__ \}

wei wang:

解决了,改为如下代码即可

shellCommand :{. = ALIGN(4);_shell_command_start = .;*(shellCommand)_shell_command_end = .;. = ALIGN(4);} >FLASH

赞(0)
未经允许不得转载:TI中文支持网 » CC2652RSIP: 如何修改CCS工程的*.cmd文件,用于分配一段rodata的空间存储自己的数据
分享到: 更多 (0)