C - 浮点值在 uC-OS-III 中不起作用



float定义的浮点变量似乎在µC-OS-III中不起作用。这样的简单代码:

float f1;
f1 = 3.14f;
printf("nFLOAT:%f", f1);

会产生这样的输出:

FLOAT:2681561605....

当我在µC-OS-III初始化之前在Main((中测试这片代码时,它的工作正常。但是,在执行多任务开始之后,它行不通。它在任务或启动任务中不起作用。

我已经搜索了Internet的类似问题,但我找不到任何东西。但是,有一篇文章说:" ARM的IAR C/C 编译器要求将堆栈指针在8个字节处对齐..."

https://www.iar.com/support/tech-notes/general/problems-with-printf-floating-point-point-point-f-on-arm/

i将堆栈位于一个8字节的位置。然后,该代码在任务中起作用,但是OS在PrintF之后立即崩溃。

我的编译器工具链是IAR EWARM版本8.32.1,我使用µC-OS-III v3.07.03与STM32F103。

我可能会错过一些OS或编译器配置。我不知道!几年前,我遇到了同样的问题,但最后我决定使用定点数学而不是浮子。

有人可以阐明这一点...

根据IAR文章,将RTOS堆栈定位为8字节对齐将解决该问题。

我在固定位置找到了堆栈:

static CPU_STK task_stk_startup[TASK_CFG_STACK_SIZE_STARTUP]  @ (0x20000280u);

相关内容

  • 没有找到相关文章

最新更新