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.
我正在评估 Hercules Launchpad 评估板的 FreeRTOS 端口、以查看它是否可用于与 Cubesat 类似的项目。当从默认的非 FreeRTOS HalCoGen 代码转换到默认的 FreeRTOS HalCoGen 代码时、我发现很难诊断各种症状的问题 (我很乐意提供我迄今为止观察到的症状的描述。)
最简单的问题包含在使用 sprintf 系列字符串格式函数时遇到的以下主程序代码中。 我已`此程序在非 FreeRTOS HalCoGen 上运行、但我可以通过切换 FreeRTOS HalCoGen 第22行中的`#if 1 μ s 来解决此问题。 由于问题表现为第19行的系统复位、取决于第22行之后执行的代码、 我只能得出这样的结论:问题源于 ELF 文件的编译、或者可能是由于存储器位置或与 FreeRTOS 端口相关的存储器访问限制。
如果您想获得有关此问题的任何提示、我们将不胜感激!
此外、您可以提供有关 FreeRTOS 端口历史记录和 TI 当前此操作系统维护计划的任何信息、这将大大有助于我确保 Hercules + FreeRTOS 是我的应用系列的理想选择。
#include "string.h" #include "stdio.h" int main(void) { char buffer[36]; // Fixed Length sprintf sprintf(buffer, "abcdef"); snprintf(buffer, 36, "abcdef"); // strlen size_t string_length = strlen(buffer); // assert == 6 // default int type { int number = -123; sprintf(buffer, "int: %d\n", number); // Works snprintf(buffer, 36, "int: %d\n", number); // Does not work if following code block is enabled } #if 0 // Toggle this to 1 to recreate the issue // default unsigned int type { unsigned int number = 123; sprintf(buffer, "unsigned: %u\n", number); snprintf(buffer, 36, "unsigned: %u\n", number); snprintf(buffer, 36, "unsigned: %4u\n", number); } // double precision { double number = 123.456; sprintf(buffer, "double: %lf\n", number); snprintf(buffer, 36, "double: %lf\n", number); snprintf(buffer, 36, "double: %4.4lf\n", number); } #endif while(true){;} }