**
单片机开发的两种类型**
最近学了一下ROS *** 作系统的工作原理和使用方法,想到了对于单片机来说的 *** 作系统RTOS开发的一些概念,觉得有必要在细说一下单片机开发的两种方式。
首先,单片机开发一般有两种类型,一种是状态机编程,一种是 *** 作系统编程。这里,我们在学习单片机的时候一般使用的都是状态机编程。
什么是状态机编程?
状态机编程的一个显著特点就是要放置大量的标志变量。比如,我为单片机编写一个程序,我要实现的功能是,按下某个按键,然后某个程序执行。这个程序估计大家都做过吧,有使用按键扫描实现的,有使用中断实现的。但是有没有发现不管是那种实现方法,都是要使用一个变量用来说明检测到了按键,然后另一部分程序检测这个标志,如果检测到了就执行程序,如果没检测到就继续检测。这个信息的传递过程是通过共享一个变量的状态实现的。这个就叫做状态机编程。
状态机编程有状好处也有坏处,好处是不用关心程序执行过程的内存分配问题,坏处也很明显,就是程序在及其复杂的时候,你会创建非常多的状态变量,会使得程序变得很乱,以至于到后期没办法维护。而能完美解决这一个缺点的编程方式是使用RTOS。
什么是ROTS编程:
RTOS为实时 *** 作系统。为什么单片机程序复杂的时候要使用这一种开发方式呢?因为这一种开发方式不需要使用状态机,也就是各个程序间通信依靠的不是状态变量。而是依靠的叫做通信的机制。
RTOS在程序执行时和我们的状态机编程不一样,状态机编程时典型的从上到下一条一条程序地执行,哪怕是进入中断了也得等中断执行完后才能执行下面的语句。而RTOS编程则可以看作是多个程序可以同时运行。就好像你可以一边听歌一边看电视,两者互不干扰地执行。
这样的程序执行方式再与通信配合到一起就使得程序的开发效率显著提升了。比如刚才的检测按键的程序在RTOS中就可以这么编程。1、创建两个进程,一个进程是按键检测程序,另一个进程是按键处理程序 2、给两个进程分别写入程序,对于按键检测程序来说,如果检测到按键按下,则发送一个消息给按键处理程序进程。对于按键处理程序来说,则是接收到消息后则运行程序。
好像看起来没有什么不同对吧。但是实际用起来的时候差距很大,大家都知道中断程序有着一个优先级的问题,就是高优先级的中断可以打断低优先级的中断,这就造成一个问题。比如说我需要用中断不停接收电脑发来的数据,一刻都不能停。但是我有需要另一个中断能及时接收手机通过蓝牙发过来的数据。你会发现,不管这两个中断的优先级怎么分配,总会出现其中一个无法正常工作的状况。要么是接收的电脑数据因为被蓝牙打断导致数据丢失。
要么是蓝牙因为没有电脑中断的优先级高,导致蓝牙无法进入中断。
其实导致这种情况产生的原因还是程序只能一条一条执行的问题,但是如果用RTOS的话,创建两个进程,一个处理电脑数据,一个处理蓝牙数据,互不干扰,就可以同时处理两个数据了,这就是RTOS的优势。
其实在学完stm32后的单片机开发,基本上都要与RTOS打交道,因为很多情况下我们要开发的系统并不是单一流程的,就比如是开发一个无人机,我们需要获取陀螺仪数值,计算各个pid,驱动电机,姿态解算,远程遥控数据解析。。。。。。这些功能要使用状态机编程可以说是难上加难,得创建一大堆的状态变量,而且各个中断优先级也要仔细斟酌。如果用RTOS的话,对每个功能创建一个进程,让各个过程同步处理,将处理完后的数据通过发送消息的方式,在各个进程间通信。这样可以大幅提高开发效率。
而且近些年火起来的物联网概念,其实也是RTOS的应用,中国出名的RTOS有RT-Thread ,华为的LiteOS,腾讯的Tencent OS,阿里的Alios, 外国的FREERTOS ,UCOS 等。都是单片机上的RTOS。
当然,至于RTOS和单片机裸机编程的区别还是要自己试过才知道。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)