rt thread, 怎么定义变量到指定内存位置?
OpenCat是由未来可编程机器人宠物制造商Petoi开发的基于Arduino和Raspberry Pi的开源四足机器人宠物框架。
非 gcc 版
- 定义一个宏
c
#ifndef __MEMORY_AT
#if (defined (__CC_ARM))
#define __MEMORY_AT(x) __attribute__((at(x)))
#elif (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
#define __MEMORY_AT__(x) __attribute__((section(".ARM.__AT_"#x)))
#define __MEMORY_AT(x) __MEMORY_AT__(x)
#else
#define __MEMORY_AT(x)
#warning Position memory containing __MEMORY_AT macro at absolute address!
#endif
#endif
- 使用
c
uint8_t blended_address_buffer[480*272*2] __MEMORY_AT(0xC0000000);
gcc 版
- 修改链接文件
c
/* Program Entry, set to mark it as "used" and avoid gc */
MEMORY
{
CODE (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */
RAM1 (rw) : ORIGIN = 0x20000000, LENGTH = 192k /* 192K sram */
RAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 64k /* 64K sram */
SDRAM (rw): ORIGIN = 0xC0000000, LENGTH = 8092k /* 1024KB sdram */
}
SECTIONS
{
... /* 忽略其它内容 */
.sdram :
{
KEEP(*(.sdram_section))
} >SDRAM
}
- 定义一个宏
c
#ifndef __MEMORY_AT
#define __MEMORY_AT(x) __attribute__((section(".#x")))
#endif
- 使用