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.
工具/软件:TI C/C++编译器
尝试使用 sprintf() c28内核运行代码:
uint16_t tempBuf[50];
sprintf (char *) tempBuf、"(%.1f)"、0.1);
成功构建工程、无警告。 单步进入 sprintf(),它在 __TI_printfi()中失败并跳转到 Interrupt_illegalOperationHandler(),然后被自由化。
在工程属性中、"printf"的级别设置为"full"。 堆栈大小为4K。
需要一些建议。 谢谢。
按任何顺序尝试这两个建议。
设置浮点数格式是 sprintf 做的一件更复杂的事情。 尝试设置 int 格式。
自...
[报价用户="Andy Fung"]堆栈大小为4K。
(笑声) 您可能没有使堆栈溢出。 但您可能已经用完了堆。 使堆更大。 使用链接器选项--heap_size=number。
请告诉我发生了什么。
谢谢、此致、
乔治
您好、George、
将堆大小增加到0x1000。 但是、仍然存在相同的问题。
您可以设置 int 格式吗?
谢谢、此致、
乔治
您好、George、
是的。 格式化 int 时没有问题、但使用 float 时失败。 我需要设置浮点格式。
谢谢、
在 ARM 内核上格式化浮点没有问题。 因此、不确定 c28内核上的问题是什么。
对于调用 sprintf 的源文件、请按照文章 如何提交编译器测试用例中的说明进行操作。 此外、将链接器命令文件附加到下一个帖子。 因此论坛将接受它、请将文件扩展名.txt 添加到其中。
谢谢、此致、
乔治
您好、George、
请检查随附的以下内容。 谢谢。
编译文件:"../source.c"
调用:C2000编译器
"c /ti/c2000/C2000Ware_2_01_00_00/driverlib/f2838x/driverlib:/ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/bin/cl2000 -v28 -ml -mt --cla_support=cla2 -float_support=fpu64 -idiv_support=idiv0 -tmu_support=tmu0 -vcu_support=vcu_support=clus-fpfp_model -fp_model=-fpref_exce_trus_exclus_tradote_exclus_exclus_trus_exclus_trus_exclus_trus_exclus_tradote_trus_exclus_exclus_trus_exclus_trus_exclus_trus_trus_trus_exclus_trus_trus_exclus_trus_trus_trus_trus_exclus_trus_trus_trus_exclus_trus_trus_trus_trus_trus_exclus_trus_trus_exclus_exclus_trus_trus_trus_exclus_exclus//ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/include
已完成建筑:"../source.c"
你好
您在为堆栈和堆分配额外内存方面是正确的。
但是、您似乎只在 CCS 中进行了该调整、而不是在链接器命令文件中进行了调整。 当前堆栈和堆共享0x1000字。
更新链接器命令文件以将堆栈和堆段链接到更大的存储器段(可能是 RAMGSx)。
此致
Chris
您好 Chris、
我更新了链接器命令文件中的堆栈和堆大小。 您可以在我附加的 cmd 文件中看到它。
谢谢、
Andy、
我看不到您的附件。 这是否解决了您的问题?
此致
Chris
您好 Chris、
4月4日上一帖子中随附的文件。
谢谢、
Andy
是的、我查看了该链接器。 它只将0x1000字分配给堆栈和堆(它们共享的堆)。
您需要更新链接器命令文件以将堆栈和堆段链接到更大的存储器段(可能是 RAMGSx)。
此致
Chris
您好 Chris、
我更新了 cmd 文件、如下所示:
堆:> RAMM1 | RAMGS11 | RAMGS12 | RAMGS13
stack:> RAMM1 | RAMGS11 | RAMGS12 | RAMGS13
每个都有0x1000。 不过,我仍有同样的问题。
谢谢、
Andy、
不确定这是否能解决问题、最好使用组合部分进行测试。
与链接器中的 RAMLS0如何将 LS0与 LS3相结合类似、我希望您组合一些 RAMLSx 或较低的 GS RAMGS0/1/2、以便您至少拥有0x2000个字。 每个0x1000的堆栈和堆应该就足够了。
将此组合存储器段分配给.heap 和.stack、以查看是否修复了它。
此致
Chris
您好 Chris、
我按如下所示更新了 cmd 文件、sprintf 现在正在工作。 RAMLS0与 RAMLS2 /RAMLS3 /RAMLS4/RAMLS5结合使用
RAMLS0 :origin = 0x008000、length = 0x3000
heap :>RAMLS0
.stack:> RAMLS0
我用 RAMGSx 尝试了类似的东西。 将 RAMGS6 / RAMGS7 / RAMGS8 / RAMGS9 / RAMGS10组合在一起、但它不起作用。 原因是什么?
谢谢
Andy、
很棒!
我想这不起作用的原因是堆栈空间超出了低64k 字。
此致
Chris