This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6748: CCS8.2中,整个C代码的文件被优化掉

Part Number: TMS320C6748


如题:

CCS8.2

使用编译器版本为TI V8.2.4

我实现了一个类似linux驱动注册的机制,伪代码大概如下:

typedef int (*func_t)(void);
#define D_PRAGMA(x) _Pragma(#x)

int vfs_yaffs2_init()
{
    return 0;
}

func_t func_test = vfs_yaffs2_init;

D_PRAGMA( DATA_SECTION(func_test, ".env_reg") );
D_PRAGMA( RETAIN ( func_test ) );

我期望将vfs_yaffs2_init函数的指针,放到func_test 变量中,使用RETAIN 编译指令,将该变量强制放到".env_reg"数据段中。我只需从数据段中取出指针,就可以访问该函数。

但是,此代码会被编译器优化掉,在生成的map文件中,没有func_test 符号。

然后我在一个外部函数中,调用vfs_yaffs2_init函数,在生成的map文件中,有func_test 符号。

我怀疑,当函数没有被外部调用时,编译器发现在以上c文件中,没有任何符号被外部调用,就忽略了RETAIN 编译指令,直接优化掉了整个c文件。

目前我已经把优化等级全都关闭了,还是不行。

请问这个是否是编译器的bug,或者是需要特定的编译指令才能做到,我如何才能让编译器不优化掉这个c文件。将变量通过RETAIN 和DATA_SECTION编译指令放到指定的段中。