主题中讨论的其他器件:CC1314R10、 SysConfig
工具/软件:
在 nortos 下运行代码时、一切看起来都正常。
当我尝试将该代码移植到 FreeRTOS 时、sprintf ()中出现异常。 我正在使用 GCC 并为该函数假设相同的库
两种情况下都使用、这对我来说似乎很奇怪。 当我逐步执行代码时、FreeRTOS 版本会继续运行、直到我点击 sprintf ()语句。
void xprint_int (int a){
// 内名;
char outbuf[16];
sprintf (outbuf、"%d"、a);
xprint(outbuf);
}
xprint 只是 uart_write 的包装器、可以在此程序中用作纯文本。
当语句出现时、调试器似乎失去与电路板的接触、并且没有响应。
无法执行步骤 Ito sprintf 语句。
如果我在 sprintf 语句中"查看反汇编"、则可以执行机器指令。 下一步我要到 siprintf (), sprintf ():
然后再转到_svfiprintf_r (),_svfprintf_r ():
svfiprintf_r (),_svfprintf_r ():
0000c330:E92D4FF0 push.w{R4、R5、R6、r7、R8、 R9、R10、r11、r14}
0000c334:4698 mov R8、R3
0000c336:898B ldrh R3、[r1、#0xc]
0000c338:B09D SUB R13、#0x74 //这是导致 faultISR 的指令。
我无法想象减去寄存器会导致出现故障 ISR
没有源代码、因此必须了解编译器策略并使用 ARM 汇编器才能解决此问题。
这里发生了什么???
sprint f 尝试 sprint f ("%d"、a)、其中 AIS 是一个整数
Gullik