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

时间:2019-05-11 07:48:59

标签: c floating-point ucos

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

float f1;

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

会产生这样的输出:

FLOAT:2681561605....

当我在µC-OS-III初始化之前在main()中测试这段代码时,它工作得很好。但是,多任务处理开始后,将无法使用。在任务或启动任务中均无效。

我已经在互联网上搜索了类似的问题,但是找不到任何东西。但是,有一篇文章说“用于ARM的IAR C / C ++编译器要求将堆栈指针对齐为8个字节...”

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

我将堆栈放置在一个8字节对齐的位置。然后代码可以完成任务,但是在打印f之后,操作系统崩溃了。

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

我可能会错过某些OS或编译器配置。我不知道!几年前,我在使用µC-OS-II时遇到了同样的问题,但最终我决定使用定点数学而不是浮点数。

有人可以阐明这一点吗……

1 个答案:

答案 0 :(得分:1)

根据IAR文章,以8字节对齐的方式定位RTOS堆栈将解决此问题。

我将堆栈放置在固定位置:

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