gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:19 24 4
gpt4 key购买 nike

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 字节对齐的位置。然后代码在任务中工作,但操作系统在 printf 之后立即崩溃。

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

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

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

最佳答案

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

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

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

关于c - 浮点值在 uC-OS-III 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56088316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com