关于程序中出现的一些问题(容易被忽视的)

问题1:在程序中定义了 u8 num=XXX;(或 u16 或 unsigned char 类型,这些类型都有一个共同特点:都为无符号型),那么我希望在程序中写 if(num<0)num=0; 从而实现num始终保持在0及其以上时,这个程序是有可能有问题的。

原因:举例:若num的原值为200,那么经过程序num-=300;后,由于num为无符号数,num并不会小于0,而是从最大值处开始算起, if(num<0)num=0;这段程序并没有执行。

解决办法:就是用非无符号型就可以了,如int型。


问题2:STM32中,写一个Key_scan()函数,实现对两个或多个按键的检测,程序如下:

                       

其目的是希望检测完PE.3后继续检测PE.4,但实际只会检测到PE.3,而PE.4的检测程序不管如何也不会被执行。

原因:不管KEY1按下与否,KEY1的检测程序是肯定执行的,那么就意味着必定执行到return语句,一旦执行了return语句就退出了Key_scan函数,故其下面的PE.4(也就是KEY0)的检测程序始终没有机会被执行。

修改后的程序如下:

                        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值