打印

提交红外遥控器实验的一个BUG

[复制链接]
411|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丑帅丑帅的|  楼主 | 2018-7-1 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在红外遥控器试验中,按+、2、4这3个键将产生总线Fault然后上访成硬Fault,导致程序卡在硬Fault中断的死循环里。
原因是这3个键的键值小于32(0x20),这样在ascii表里不是字符,在LCD_DispStr函数里“i = ascii - ;”这一句会产生负数,负数作为一个数组的下标将产生精确的数据访问违例(总线Fault的一种)。
解决方法:
main函数中的:
sprintf(lcd_key_val,"key_val:%c",key_val);
LCD_DispStr(30, 40, lcd_key_val, RED);
这两行代码改成:
sprintf(lcd_key_val,"key_val:%d",key_val);
LCD_DispStr(30, 40, "key_val:   ", RED);   
LCD_DispStr(30, 40, (uint8_t *)lcd_key_val, RED);
第一行结果以数字形式显示键值,这样就解决了上述BUG。
再加上第二句,是为了使显示完三位数的键值后再显示两位数或者一位数键值时上一次的三位数字后面的数字还存在。
第三行增加了个数据类型转换。虽然不加效果一样,但是有个warning,毕竟不是什么好事。光盘中的《编程修养.pdf》中第31条:不要忽略Warning.

望采纳!

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

741

主题

742

帖子

0

粉丝