工具/软件:TI C/C++编译器
我喜欢使用pragma code_section在特定内存中设置一组函数
在源文件中,我使用了像这样的code_section pragma
#pragma code_section (initBuffer,"my_sect")
void initBuffer(void);
在链接程序cmd文件中,我创建了一个部分
my_sect: > flash,load_start (_RamfuncsLoadStart),load_end (_RamfuncsLoadEnd),run_start (_RamfuncsRunStart)
映射文件如下所示
my_sect 000000 f9c 0.0014万
0万f9c 0.0014万 test_sm.obj (my_sect:initBuffer)
...
地址 名称
--------- ---
0万f9d initBuffer
我现在的问题是,函数initBuffer()位于0xF9D,但变量_RamfuncsRunStart或甚至_RamfuncsLoadStart的地址为0xF9C。
如果我尝试像这样运行功能
UINT32_t _RamfuncsLoadStart;
UINT32_t _RamfuncsLoadEnd;
UINT32_t _RamfuncsRunStart;
typedef void (*fctCall)();
fctCall fCall;
extern void initBuffer(void);
void testFctCall(void){
fCall = initBuffer;//有效
fCall();
fCall =(fctCall)&_RamfuncsRunStart;//不起作用
fCall();
}
将不起作用。