浮点值在 uC-OS-III 中不起作用
Float-point values doesn't work in uC-OS-III
用 float
定义的浮点变量似乎在 µC-OS-III 中不起作用。
像这样的简单代码:
float f1;
f1 = 3.14f;
printf("\nFLOAT:%f", f1);
会产生这样的输出:
FLOAT:2681561605....
当我在 µC-OS-III 初始化之前在 main() 中测试这段代码时,它工作得很好。但是,多任务处理开始后,它不起作用。它在任务或启动任务中不起作用。
我已经在互联网上搜索过类似的问题,但没有找到任何内容。但是,有这篇文章说 "The IAR C/C++ Compiler for ARM requires the Stack Pointer to be aligned at 8 bytes..."
https://www.iar.com/support/tech-notes/general/problems-with-printf-floating-point-f-on-arm/
我将堆栈定位在 8 字节对齐的位置。然后代码在任务中工作,但 OS 在 printf 之后立即崩溃。
我的编译器工具链是 IAR EWARM 版本 8.32.1,我正在使用 µC-OS-III V3.07.03 和 STM32F103。
我可能会遗漏一些 OS 或编译器配置。我不知道!几年前我在使用 µC-OS-II 时遇到了同样的问题,但最后我决定使用定点数学而不是浮点数。
有人能解释一下吗...
根据 IAR 文章,以 8 字节对齐定位 RTOS 堆栈将解决问题。
我在固定位置找到了书架:
static CPU_STK task_stk_startup[TASK_CFG_STACK_SIZE_STARTUP] @ (0x20000280u);
用 float
定义的浮点变量似乎在 µC-OS-III 中不起作用。
像这样的简单代码:
float f1;
f1 = 3.14f;
printf("\nFLOAT:%f", f1);
会产生这样的输出:
FLOAT:2681561605....
当我在 µC-OS-III 初始化之前在 main() 中测试这段代码时,它工作得很好。但是,多任务处理开始后,它不起作用。它在任务或启动任务中不起作用。
我已经在互联网上搜索过类似的问题,但没有找到任何内容。但是,有这篇文章说 "The IAR C/C++ Compiler for ARM requires the Stack Pointer to be aligned at 8 bytes..."
https://www.iar.com/support/tech-notes/general/problems-with-printf-floating-point-f-on-arm/
我将堆栈定位在 8 字节对齐的位置。然后代码在任务中工作,但 OS 在 printf 之后立即崩溃。
我的编译器工具链是 IAR EWARM 版本 8.32.1,我正在使用 µC-OS-III V3.07.03 和 STM32F103。
我可能会遗漏一些 OS 或编译器配置。我不知道!几年前我在使用 µC-OS-II 时遇到了同样的问题,但最后我决定使用定点数学而不是浮点数。
有人能解释一下吗...
根据 IAR 文章,以 8 字节对齐定位 RTOS 堆栈将解决问题。
我在固定位置找到了书架:
static CPU_STK task_stk_startup[TASK_CFG_STACK_SIZE_STARTUP] @ (0x20000280u);