aaa1982 发表于 2012-1-19 12:13:01

请教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 这样一下么

sytu_xww 发表于 2012-1-19 12:57:43

#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;
这些变量是编译器定义的,只要声明下就可以使用的,不声明的话是不会定义的。

aaa1982 发表于 2012-1-19 13:10:24

感谢回复,

我想问一下,在MDK里面,是不是所有类似定义

int XXX __attribute__((section(abc))) 就可以自动新生成一个abc 的 section,然后编译器就会自动出现abc$$Base 和abc$$Limit这两个符号?

而不用先定义一下abc这个section的属性,比如大小(SPACE),readonly 还是readwrite等等。

sytu_xww 发表于 2012-1-21 13:28:02

不需要,当然你也可以在链接脚本里面指定链接位置和大小,不然就是编译器自己处理的。

zxb1717 发表于 2012-2-14 09:12:50

读了楼主很久以前的一个帖子,关于“调用Luminary 提供的库文件导致 Fault_ISR”,恳请楼主分享一下经验,最后你的那个问题是怎么解决的,我已经被这个问题折磨三个月了,我还不像楼主那样能准确的进入Fault_ISR,我的程序主要是实现刷IC卡将IC卡数据上传到主机,并进行相关操作,在某一次刷卡后要执行操作时程序就莫名奇妙的会进入Fault_ISR,网上始终没有找到一个合适的解决方法,希望楼主能指点一二,在此等候您的指点了。

zxb1717 发表于 2012-2-14 14:17:16

在这里等待楼主的答复啊....
页: [1]
查看完整版本: 请教shell下面的那个数据section FSymTab ,在mdk下面是怎么建立起来的啊。