OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4986|回复: 2

uCOS调用printf()函数打印float数据出错

[复制链接]

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-4-26
在线时间
3 小时
发表于 2015-5-10 09:01:29 | 显示全部楼层 |阅读模式
5金钱
在一个任务中,我想利用printf()函数打印一些数据至PC,在打印整形数据时正常。
但是,当打印的数据为浮点型时 ,数据出错,打印出来的是-2.00000
代码如下:
                adcx=T_Get_Adc_Average(ADC_CH_TEMP,10);
                printf("adcx:%d\r\n",adcx);   //此处adcx打印正常  值为1752
                temp=(float)adcx*(3.3/4096);    //数据经过计算处理后  强制转化为float类型
                temperate=temp;
                adcx=temp;
                temp-=(u8)temp;                                                                                                                              
                temperate=(1.43-temperate)/0.0043+25;                
                printf(" CPU Temperature:%f\r\n",temperate);  //在这里打印出来的数据就不对了 但是我将1752带入计算公式计算出                                                                                         //来数据时21.7多  所以我怀疑是打印函数在打印浮点数的时候出现了问题。

经过查阅资料:网上说法如下
1.需要各个任务堆栈8字节对齐。
2.printf()中断函数问题。
3.配置NVIC寄存器的STKALIGN置位。
我尝试了1,无果。第二种情况OS中已经处理得当。现在对3不明白  希望大神指教

最佳答案

查看完整内容[请看2#楼]

已经搞定 堆栈的定义修改成这样就OK了 __align(8) static  OS_STK  CPUT_TASK_STK[CPUT_STK_SIZE]; 谢谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-4-26
在线时间
3 小时
 楼主| 发表于 2015-5-10 09:01:30 | 显示全部楼层
已经搞定
堆栈的定义修改成这样就OK了
__align(8) static  OS_STK  CPUT_TASK_STK[CPUT_STK_SIZE];
谢谢
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2020-4-26
在线时间
40 小时
发表于 2020-7-9 18:11:03 | 显示全部楼层
韦护的护 发表于 2015-5-10 09:01
已经搞定
堆栈的定义修改成这样就OK了
__align(8) static  OS_STK  CPUT_TASK_ST ...

在哪修改呀,我的堆栈定义是 CPU_STK TESTUART_TASK_STK[TEST485_STK_SIZE];,加了也不行呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表