1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在UCOSIII的两个任务中做测试,测试atof()函数,放在其中一个atof()能正常将字符串转化为double类型,放在另一个任务中就不行了,两个任务是一样的,只是优先级不同,两个任务里面也没有些其他东西。如图:
放在altitude_task()任务中,能正常打印出转换后的double数 放在wlan_task()任务就不行,打印的全是0.00000 |
|
相关推荐
2个回答
|
|
将任务堆栈8字节对齐,看看。
|
|
|
|
可以了,这原理是什么呢?(网上有说,但是还是不明白具体原因!)网上是这样说的:当ucos运行到Cortex-M3上时候,这个时候使用sprintf进行浮点数格式化输出的时候就会有些问题,无法正常输出浮点数,操作系统也会停止运行,处于崩溃状态。 操作系统崩溃有很多原因,我遇到的两个原因是:堆栈溢出和数据对齐。不知道首先遇到的是哪个问题,如果使用MDK编译器的话请在系统任务堆栈前面进行数据对齐声明,示例:__align(8) static OS_STK TaskStartStk[TASK_START_STK_SIZE];如果你没有修改过arm的启动代码可能就会出现这个问题,启动代码默认使用4字节对齐,而且ARM支持非对齐状态方式(便于在网络通信中优化效率)。而sprintf函数若是使用格式化浮点数就需要进行8字节对齐,这就是问题的所在,只要堆栈声明成8字节对齐就可以了。
C:UsersJevinDesktopData smoothing2018.4.3调试过程-任务堆栈8字节对齐 |
|
|
|
只有小组成员才能发言,加入小组>>
798 浏览 0 评论
1154 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2713 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1083浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 18:18 , Processed in 1.014421 second(s), Total 79, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号