用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);