4074|0

9

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

液晶浮点值显示的一种解决方法 [复制链接]

液晶浮点值显示的一种解决方法

 

在以ucOS-II为系统搭建的工程中,需要在液晶LCD上显示浮点型值,但液晶的驱动函数中仅编写了一个显示字符串的函数GUI_DispStringAt(); 所以需要一个函数把浮点型值转化成字符串,然后以字符串的形式输出到LCD上,sprintf()可以完成这个功能。[1][2]

但使用sprintf()时遇到一个问题——经过sprintf()转换后,即使不为零的浮点值也变成0.0,我尝试着把整型值转为字符串,可以正常显示,然后我就纳闷了。

搜索后,可能正确的解释如下:UCOSII的任务堆栈没有8字节对齐,在声明任务堆栈时,强制8字节对齐就可以了,系统默认是4字节对齐[3]。按照此种方法尝试后,编译出现30多个错误,鉴于自个不懂ucOS,便尝试了另一种方法[4],把浮点型值通过强制类型转换为2个整型值,一个是整数部分,另一个是小数部分(2位小数),例如,

char tempbuf[20];

float temp ;         /*要显示的浮点值*/

int temp_decimal;    /*浮点值的小数部分,2*/

temp=3.141;

temp_decimal = (int)(temp*100) - ((int)temp)*100;       /* temp_decimal =14*/

sprintf(tempbuf, "%d.%02d%", (int)temp, temp_decimal);  /*显示结果为 3.14%*/

 

另外一个怪异的错误是,

sprintf使用格式"%2.2f%s"时程序在此处跑飞,而"%d%s"不会跑飞,"%s%2.2f%s"也不会飞。

这个错误原因还不懂,也许也和ucOS的堆栈字节数有关系吧,期待明白人儿指点。

 

参考:

[1]. 《在液晶上显示浮点数的方法》, wolf19860612, ourdev.cn,  http://goo.gl/17jxX

[2]. Sprintf, 互动百科,  http://www.hudong.com/wiki/sprintf

[3]. 《求助:MDK sprintf输出浮点数据出错》, Shandong, ourdev.cn,  http://goo.gl/TKnSe

[4]. 《使用Cortex-M3 uCOS-II LPC1768工程模板时sprintf浮点数打印错误》,  http://goo.gl/ZDuYs

[5]. 《浮点数转字符串 怎么转啊?》, kekele, ourdev.cn,  http://goo.gl/V7Dsu

 

此帖出自ARM技术论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表