|
5 `2 S& g+ }( x& ^2 `1 x9 z 大多开发板按键LED例程里面,都用延时来消除抖动。这种方法,简单容易掌握。后来接触了状态机,就重新设计了按键LED代码,并且在官方板STM32L073RZ-Nucleo实验成功。 5 W5 Y2 P8 a' t0 a1 V$ ]- w 1.延时的缺点是:当功能比较多的时候,就会造成系统比较卡顿的现象,使系统运行不流畅,因为在延时里面,CPU是死等在那里。0 I: `% b5 Z- k* H7 r- U 2 m# g ?1 a* ^4 [3 P 2.状态机设计里面就取消了延时:MCU检测到按键后,定时器定时,达到一定时间后,继续扫描按键是否按下,然后计时按键按下的时间,当20ms以后按键还是按下状态,则执行按键操作,反之则认为是抖动。) f7 _$ s$ D! ^! A3 |7 ?% h# q 2 i& I* k- R# k. C 项目代码见附件。# e, z# `8 S4 ~% L' u 3 A+ x. I' w3 u. O: u 5 Z4 Z' t) v! ?3 I |
微信公众号
手机版
多线程编程,一个任务一个线程。当一个线程在进行延时等待时,让CPU处理其他任务。 \8 O$ A, ?& J; J2 {
* I/ {; A9 @; }2 ^ {
线程池,相比一任务一线程,更加节约资源。可以实现多个任务更少线程,比如10个任务3个线程。
并行编程Task Parallel Library,一个线程多个任务,任务中镶嵌其他任务。: Q2 f% q# `* m9 Z5 C4 e* D }) `$ ^
' m) v' h1 Z) l" K" M
原子操作,互斥体,信号量。跑上了操作系统,各种优化设计。
不客气~
本文主要是想通过简单的按键编程,阐述状态机设计的思想。状态机的应用远远不止于此。