问题描述:
前几天写单片机stm32f1+ucos工程的时候突然出现一个BUG,
就是串口打印出一大串的“00000000000000000000000000000000”,
或者是打印出-1等不可思议的负数值。
(由于这种情况的出现很随缘(后面有解释),所以后来取不到串口打印错误图了)
查找分析:
于是便从变量的类型开始排查,后来发现串口打印整数没有问题,
但是打印%f浮点数的时候就会崩溃。
经过实践发现在裸机运行相同代码便不会出现问题。
于是问题就落在了UCOS上面。
解决问题:
原始以为是任务栈不够大或者是打印的时候没有进入临界区,
但经过一番实践后都发现不是这个问题。
后来翻阅前辈的UCOS工程,发现在任务栈区定义前要加“__align(8) ”
理由是ucos堆栈要8字节对齐,否者打印浮点数会有问题
于是马上加上“__align(8)”
__align(8) static OS_STK TEMP_Task_Main_Stk[TEMP_TASK_MAIN_STK_SIZE];
串口打印浮点数据就没有问题了。
反思总结
后来经过多次试验查翻以前自己写的UCOS工程,发现很多时候没有加__align(8)也可以
正常打印浮点数,就是程序会莫名其妙就会“抽风”,会出现多加一行printf程序没问题注释
一行printf就打印出错等各种奇葩现象。
所以,以后要在任务栈定义前面加上“__align(8) ”,就不会遇到很多抽风bug了!
解决STM32F1使用UCOSII打印浮点数乱码问题
最新推荐文章于 2024-07-08 16:34:55 发布