TI的Red Hat mspgcc-430编译错误
TI's Red Hat mspgcc-430 compilation error
所以,我正在尝试编译代码,用 C 语言为 linux SO 中的 msp430fx 编写。我最近重新编译
一个新版本的 mspgcc,因为之前使用的是 4.3 而不是 compatible/stable 扩展模式(20 位 -mlarge)。
我关注了这个site。
安装后我 运行 一个简单的(主要的,调用一些随机函数)它编译得很好,但是现在,编译这个大项目我最后遇到了这个错误:
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:
cannot open linker script file msp430f5438a.ld: No such file or
directory collect2: error: ld returned 1 exit status scons: ***
[build/MoteISTv5_mspgcc/projects/common/03oos_macpong_prog] Error 1
scons: building terminated because of errors.
由于我对编译器了解不多,所以我需要一些帮助来解决这个问题。有人可以帮忙吗?
提前致谢,
迪奥戈·格拉
编辑: 在这个新版本的 msp430-elf-gcc 中,此函数被命名为 _read_SR() 而不是 __read_status_register()。
=======================/===================== = / =====================
好吧,显然我不得不使用 -L 强制将 .ld 文件的目录放入编译器标志中。
但是现在使用新的 msp430-gcc v4.9.1 他无法识别 __read_status_register 函数,而在 mspgcc-legacy (4.6.3) 中他编译没有问题...
我浏览了一下,显然 bin 库不支持大部分 __"spetial processor funcions"。他们说我们必须使用内联汇编来访问特殊寄存器,这很尴尬。 “他们为什么要取消这种支持?
如果您需要使用内联汇编,这里是 __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;
}
要了解更多信息,您可以使用 this site,我发现它非常有用。
所以,我正在尝试编译代码,用 C 语言为 linux SO 中的 msp430fx 编写。我最近重新编译 一个新版本的 mspgcc,因为之前使用的是 4.3 而不是 compatible/stable 扩展模式(20 位 -mlarge)。
我关注了这个site。
安装后我 运行 一个简单的(主要的,调用一些随机函数)它编译得很好,但是现在,编译这个大项目我最后遇到了这个错误:
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: cannot open linker script file msp430f5438a.ld: No such file or directory collect2: error: ld returned 1 exit status scons: *** [build/MoteISTv5_mspgcc/projects/common/03oos_macpong_prog] Error 1 scons: building terminated because of errors.
由于我对编译器了解不多,所以我需要一些帮助来解决这个问题。有人可以帮忙吗?
提前致谢,
迪奥戈·格拉
编辑: 在这个新版本的 msp430-elf-gcc 中,此函数被命名为 _read_SR() 而不是 __read_status_register()。
=======================/===================== = / =====================
好吧,显然我不得不使用 -L 强制将 .ld 文件的目录放入编译器标志中。
但是现在使用新的 msp430-gcc v4.9.1 他无法识别 __read_status_register 函数,而在 mspgcc-legacy (4.6.3) 中他编译没有问题...
我浏览了一下,显然 bin 库不支持大部分 __"spetial processor funcions"。他们说我们必须使用内联汇编来访问特殊寄存器,这很尴尬。 “他们为什么要取消这种支持?
如果您需要使用内联汇编,这里是 __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;
}
要了解更多信息,您可以使用 this site,我发现它非常有用。