rt thread, 怎么定义变量到指定内存位置?
OpenCat是由未来可编程机器人宠物制造商Petoi开发的基于Arduino和Raspberry Pi的开源四足机器人宠物框架。
非 gcc 版
- 定义一个宏
#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
- 使用
uint8_t blended_address_buffer[480*272*2] __MEMORY_AT(0xC0000000);
gcc 版
- 修改链接文件
/* 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}
- 定义一个宏
#ifndef __MEMORY_AT#define __MEMORY_AT(x) __attribute__((section(".#x")))#endif
- 使用