原文:https://www.cnblogs.com/CodeWorkerLiMing/p/12501934.html在单片机的裸机转换方法中,状态机方法更好,经典方法是按钮的检测和判断。
。
实际上,在很多地方都可以使用此想法。
例如传感器的数据采集,由于单片机无法一直等待运行,效率非常低,通常采用组合fsm + timer的方法来提高CPU的利用率。
在传感器中使用fsm的方法每个人都知道ds18b20的获取相对较慢。
发送转换命令后,最慢的需要等待720ms,这个时间有点长。
简直难以忍受。
如下图所示:我使用11位分辨率,0.125分辨率就足以作为温度参考。
9位分辨率93.75 ms 0.510位分辨率187.5 0.2511位分辨率375 0.12512位分辨率750 0.0625那么我肯定不是在等待,等待和浪费更多的CPU,效率太低,在实际工作中根本无法接受。
因此,将创建一个状态机:int main(int argc,char const * argv []){while(1){ds18b20_discope();} return 0;} void ds18b20_discope(void){switch(ds18b20状态的全局状态机器变量){case send command:发送转换命令分配以等待安装中断;案例等待安装:判断是否存在超时,如果存在超时,则:读取,清除计数器,并返回发送命令状态,否则,不做任何中断;默认值:break; }}计时器的基准中断可以自己完善,我的中断是50ms:void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef * htim){如果ds18b20已经处于等待状态,请计数++}这是一个简单的传感器状态机定时采样的想法不死,高效稳定。
请注意,ds18b20的时序相对严格。
在互联网上据说它不能被打断,但是也有可能迁移到freertos。
温度采样仍然稳定,但是考虑到后续程序相对较大,因此仍然是裸机。
状态机的思想基本上可以解决。
-END-猜猜你喜欢它。
阅读本文后,您仍然不知道如何制造平衡车。
过来打我为什么中国的电子工程师从事软件更好?谈论指针。
最后,如果您认为本文不错,那么转发和共享也是我们继续更新的动力。
5T资源正在销售中!包括但不限于:C / C ++,Linux,Python,Java,PHP,人工智能,PCB,FPGA,DSP,labview,微控制器等!回复“更多资源”在官方帐户中,您可以免费获得它,并期待您的关注〜长按识别图片中的QR码关注