工具与软件:
(对于不完整的错误报告、我很抱歉;我会在发现时添加更多数据。)
我们使用最新的 CGT (MSP430 C/C++编译器 v21.6.0.LTS)和最新 Code Composer Studio (CCS 2002)附带的库创建一些 MSP430测试程序、我们遇到了问题。
我们编译 时使用了以下限定符:
Bin/cl430.exe --c11. \
-- silicon_version=mspx \
-- use_hw_mpy=F5 \
-- printf_support=nofloat \
-- c_src_interlist \
--include_path=./include \
--include_path=../ccs2002/ccs/ccs_base/msp430/include/\
-- output_file=hello_cgt_1.elf \
hello.c \
-- run_linker \
-- search_path=./lib/ \
--output_file=hello_cgt_2.elf \
-- map_file=hello_cgt.map \
lnk_msp430f5359.cmd
我们的发现是、如果我们的测试程序声明.bss 项总共985字节或更多、则程序永远无法启动。 它似乎干扰了_TI_zero_init ()中的某个位置,因为它试图在程序启动时将.bss 区域清零。 但是、如果.bss 为984个字节或更少、一切都顺利。 此外、如果我们在没有使用--silicon_version=mspx 限定符的情况下进行编译(因此它将成为16位程序而不是20位程序)、一切都顺利。
我还不能告诉您(尚未)传递给 __TI_zero_init ()的参数、但我可以告诉您、如果我将.txt 文件修改为 NOP 而不使用对__TI_zero_init ()的调用、程序将正常启动(当然、.bss 尚未初始化除外)。 在读取.txt 文件时、__TI_cinit_table (及其亲属)似乎包含了有效数据:它指向的地址是 RAM 中正确的位置、它调用__TI_zero_init ()、并传递了正确的初始化大小。
是否有人识别此症状?
如果我的 hello.c 版本有用、但我的程序没有任何特别之处、只能定义和访问将放置在.bss 中的一些全局数组、我可以发布该版本。