1

所以,我正在尝试编译代码,用 C 语言编写,用于 linux SO 中的 msp430fx。我最近重新编译了一个新版本的 mspgcc,因为以前使用的是 4.3,并且它与扩展模式(20 位 -mlarge)不兼容/稳定。

我关注了这个网站

安装后我运行一个简单的(主要,调用一些随机函数)并且它编译得很好,但是现在,编译这个大项目我最后有这个错误:

msp430-gcc -o build/MoteISTv5_mspgcc/projects/common/03oos_macpong_prog -mmcu=msp430f5438a -Wall -Wno-main -mlarge -O0 -g -ggdb build/MoteISTv5_mspgcc/projects/common/03oos_macpong/03oos_macpong.o -Lbuild/MoteISTv5_mspgcc/ bsp/boards -Lbuild/MoteISTv5_mspgcc/kernel/openos -Lbuild/MoteISTv5_mspgcc/drivers -Lbuild/MoteISTv5_mspgcc/openstack -Lbuild/MoteISTv5_mspgcc/openapps -lopenstack -lopenapps -lkernel -ldrivers -lbsp /opt/msp430-toolchain/lib/gcc/ msp430-none-elf/4.9.1/../../../../msp430-none-elf/bin/ld:无法打开链接描述文件msp430f5438a.ld:没有这样的文件或目录collect2:错误: ld 返回 1 个退出状态 scons:*** [build/MoteISTv5_mspgcc/projects/common/03oos_macpong_prog] 错误 1 ​​scons:构建因错误而终止。

由于我对编译器不太了解,因此我需要一些帮助来解决这个问题。有人可以帮忙吗?

提前感谢,

迪奥戈·格拉

4

1 回答 1

0

编辑:在这个新版本的 msp430-elf-gcc 中,这个函数被命名为 _read_SR() 而不是 __read_status_register()。

=======================/======================/=== ===================

好吧,显然我不得不使用 -L 强制将 .ld 文件的目录放入编译器标志中。

但是现在使用新的 msp430-gcc v4.9.1 他无法识别 __read_status_register 函数,而在 mspgcc-legacy (4.6.3) 中他编译没有问题......

我做了一些浏览,显然 bin 库不支持大多数 __“特殊处理器功能”。他们说我们必须使用内联汇编来访问特殊寄存器,这很尴尬。“他们为什么要取消这种支持?

如果您需要使用内联汇编,这里是 __read_status_register() 的示例

static inline __attribute__((always_inline))
unsigned int __read_status_register( void){
    unsigned int xReturn;
    asm volatile( "MOV  R2, %0"
                : "=r"  (xReturn)); // output parameters
    return xReturn;
}

要了解更多信息,您可以使用我发现非常有用的这个网站。

于 2015-07-29T22:54:22.557 回答