裸机系统
裸机系统一般分为包括轮询系统和前后台系统:
(1)轮询系统:轮询系统是指在开发程序时,在main函数里先初始化需要的硬件,然后在一个死循环(while)中不断循环、按照程序的顺序的执行各种动作,这种架构的伪代码可表示如下:
int main(void)
{
/* 硬件相关初始化 */
HardWareInit();
* 无限循环 */
While(1)
{
/* 处理事情 1 */
DoSomething1();
/* 处理事情 2 */
DoSomethingg2();
}
}
轮询系统是一种最简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情,当有外部事件驱动时(例如按键),实时性就会降低。
(2)前后台系统
前后台系统是在轮询系统的基础上采用了中断处理,外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断响应称为前台, main 函数里面的无限循环称为后台,相应的伪代码可表示如下:
int flag1 = 0,flag2=0;
int main(void)
{
HardWareInit(); /* 硬件相关初始化 */
/* 无限循环 */
While(1)
{
if (flag1){
DoSomething1(); /* 处理事情 1 */
}
if (flag2) {
DoSomethingg2(); /* 处理事情 2 */
}
}
}
void ISR1(void)
{
flag1 = 1; /* 置位标志位 */
/* 如果事件处理时间很短,则在中断里处理 如果事件处理时间比较长,则回到后台 */
DoSomething1();
}
void ISR2(void)
{
flag2 = 2; /* 置位标志位 */
/* 如果事件处理时间很短,则在中断里处理,如果事件处理时间比较长,则回到后台*/
DoSomething2();
}
虽然事件的响应和处理是分开了,但是事件的处理还是在后台里顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大的提高程序的实时响应能力。在一般简单的中小型项目中,使用前后台的软件架构效果更好。
RTOS:Real Time Operating System,实时操作系统
RTOS也称为多线程系统,相比前后台系统,多线程系统的事件响应也是在中断中完成的,但事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,当一个紧急的事件在中断被标记之后,如果事件对应的线程的优先级足够高,就会立马得到响应。相比前后台系统,多线程系统的实时性更高。相应的伪代码如下:
int flag1 = 0;
Int flag2=-0
int main(void)
{
HardWareInit(); /* 硬件相关初始化 */
RTOSInit(); /* OS 初始化 */
RTOSStart(); /* OS 启动,开始多线程调度,不再返回 */
}
void ISR1(void)
{
flag1 = 1; /* 置位标志位 */
}
void ISR2(void)
{
flag2 = 2; /* 置位标志位 */
}
void DoSomething1(void)
{
while(1){
/* 线程实体 */
if (flag1) {
}
}
}
void DoSomething2(void)
{
while(1){
/* 线程实体 */
if (flag2) {
}
}
}
在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,称之为线程。每个线程都是独立的,互不干扰的,且具备自身的优先级,由操作系统进行调度管理。
对于一些复杂的需求,加入操作系统反而使我们的编程变得简单了。整个系统随之带来的额外开销是操作系统占据的FLASH 和 RAM。如今单片机的 FLASH 和 RAM 是越来越大,完全能够满足RTOS那点开销。
轮询、前后台、RTOS软件架构特点对比
目前市面上主流的RTOS有uC/OS、FreeRTOS、RT-Thread,使用的人数相对较多,这三款RTOS对比如下:
(1)基本功能:差异很小,但具体代码的实现存在不同。
(2)组件丰富性:uC/OS和FreeRTOS都属于国外的操作系统,RT-Thread是一款国产操作系统,相比传统的UCOS、FreeRTOS不仅仅在基础功能上多而全,多达400个以上的可重用软件组件,还有很多物联网组件,对于物联网产品几乎做到开箱即用,随着物联网的快速发展,RT-Thread的使用客户越来越多。
(3)开发资料:μC/OS 做的最好,有配套相关的书籍,FreeRTOS、RT-Thread属于后起之秀,网上也有很多相关资料和视频。
(4)版权:μC/OS 、FreeRTOS 和 RT-Thread 都是使用了开源协议,版权都很宽松。
RTOS 协议
uC/OS Apache 2.0
FreeRTOS MIT
RT-Thread Apache 2.0
(5)生态:这三款 RTOS 的社区都比较活跃,uC/OS发展最早,还有一部分人在使用,RT-Thread 和 FreeRTOS 用的人都在增多,RT-Thread作为最早的国产操作系统,也发展了十几年,其生态丰富足以媲美其他RTOS。