请教shell下面的那个数据section FSymTab ,在mdk下面是怎么建立起来的啊。
请教shell下面的那个数据section FSymTab ,在mdk下面是怎么建立起来的啊。看代码
#ifdef __CC_ARM /* ARM C Compiler */
extern int FSymTab$$Base;
extern int FSymTab$$Limit;
extern int VSymTab$$Base;
extern int VSymTab$$Limit;
finsh_system_function_init(&FSymTab$$Base, &FSymTab$$Limit);
是说有了FSymTab$$Base,&FSymTab$$Limit 就一定有FSymTab这个section 了么?
不需要类似 AREA FSymTab, DATA, READONLY 这样一下么 #define FINSH_FUNCTION_EXPORT(name, desc) \
const char __fsym_##name##_name[] = #name; \
const char __fsym_##name##_desc[] = #desc; \
const struct finsh_syscall __fsym_##name SECTION("FSymTab")= \
{ \
__fsym_##name##_name, \
__fsym_##name##_desc, \
(syscall_func)&name \
};
这里在调用的时候会定义一些数据,这些数据都是放在FSymTab中的,在MDK下面会直接生成这个section,
当然还得设置链接参数--keep,不然会被链接器去除掉。
extern int FSymTab$$Base;
extern int FSymTab$$Limit;
extern int VSymTab$$Base;
extern int VSymTab$$Limit;
这些变量是编译器定义的,只要声明下就可以使用的,不声明的话是不会定义的。 感谢回复,
我想问一下,在MDK里面,是不是所有类似定义
int XXX __attribute__((section(abc))) 就可以自动新生成一个abc 的 section,然后编译器就会自动出现abc$$Base 和abc$$Limit这两个符号?
而不用先定义一下abc这个section的属性,比如大小(SPACE),readonly 还是readwrite等等。 不需要,当然你也可以在链接脚本里面指定链接位置和大小,不然就是编译器自己处理的。 读了楼主很久以前的一个帖子,关于“调用Luminary 提供的库文件导致 Fault_ISR”,恳请楼主分享一下经验,最后你的那个问题是怎么解决的,我已经被这个问题折磨三个月了,我还不像楼主那样能准确的进入Fault_ISR,我的程序主要是实现刷IC卡将IC卡数据上传到主机,并进行相关操作,在某一次刷卡后要执行操作时程序就莫名奇妙的会进入Fault_ISR,网上始终没有找到一个合适的解决方法,希望楼主能指点一二,在此等候您的指点了。 在这里等待楼主的答复啊....
页:
[1]