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.

[参考译文] TMS570LS0432:sprintf 函数的 FreeRTOS 端口稳定性

Guru**** 2024750 points
Other Parts Discussed in Thread: HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/997120/tms570ls0432-freertos-port-stability-for-sprintf-functions

器件型号:TMS570LS0432
主题中讨论的其他器件:HALCOGEN

我正在评估 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 是我的应用系列的理想选择。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    增大堆栈大小是否会使问题消失?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alex、您好!

    对于用户、HAL 生成的代码的堆栈大小为0x300。 您可以从 HALCOGEN GUI -> RAM 中调整堆栈大小

    我将堆栈大小增加到0x600、但未看到错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、这适用于此示例。 谢谢!

    我将详细介绍 FreeRTOS 存储器配置、看看堆栈空间不足是否会导致我观察到的平台不稳定。

    对于 HalCoGen 和 FreeRTOSConfig.h 之间的存储器配置、是否有任何种类的文档或入门资料-对于终端用户而言、我何时可以更改 FreeRTOS 设置以及何时必须重新生成 HalCoGen 设置尚不清楚。