欢迎光临散文网 会员登陆 & 注册

嵌入式软件开发的基础知识(3)位移操作-巧妙的计数

2022-07-16 14:38 作者:云汉含星  | 我要投稿

    在嵌入式开发中,总会遇到IO口电平需要滤波。常见的方法就是连续出现N个高/低电平,才认为数据有效。

    一般来说,常见的操作就是用一个变量来计数累加。连续出现到判定阈值就输出信号。如下面代码所示,当电平变化(0变1或者1变0),且稳定45个周期才能够输出。

位移计数:

    位移计数是将uint类型数据看作bit序列。每一次循环,数据都会整体的左移一位(高位抛弃)低位进来一个数据(就是传进来的IO电平数据)所以判定方式就是低位是否全1/0。比如阈值为5,那么只要最低的五个bit全都是1,就可以说明连续进来五个电平都是1,就可以输出1。低电平也是同理,检测最低的5个 bit是否全是0。(就是阈值在1-32的情况)

    以上就是计数的两种方法。高低电平变化都需要稳定一定的时间(累计一定的次数)才会被判定生效。如果只是电平或者按键消抖的话,一般常用的方法就可以了。如果是某些信号需要一个较长时间的脉冲才能够触发。那么可以尝试使用一下位移计数法。(保证让人看得很迷惑哈哈哈)。

小知识:static关键字。上面定义的局部变量都使用了static关键字,因为:①这些变量只在本函数使用。②而且这个变量每一个循环都会用到。所以变量只需要申请一次,就可以一直使用它。如果不加这个static,这些变量每次循环都会重新声明定义这么一个变量(值会变成0)。那么这计数器是不是得声明全局变量才能起到作用呢?全局变量满天飘可不是什么好习惯。

嵌入式软件开发的基础知识(3)位移操作-巧妙的计数的评论 (共 条)

分享到微博请遵守国家法律