常见系统名称及其含义
后台有小伙伴问,这里附带介绍,小伙伴们可能听过,不知道定义细节的系统。
轮询系统
轮询系统指在,裸机编程状态下,首先完成各种硬件的初始化,然后死循环中,按照顺序执行各种命令,这种系统仅引用在非常简单的要求中,没有实时响应能力。
int main(void)
{
HardWareInit(); // 初始化硬件
while(1)
{
if(CheckCondition1()) { // 检查是否需要执行任务1
Do_Something(); // 执行任务1
Delay_ms(1000);
}
if(CheckCondition2()) { // 检查是否需要执行任务2
Do_Something2(); // 执行任务2
Delay_ms(1000);
}
if(CheckCondition3()) { // 检查是否需要执行任务3
Do_Something3(); // 执行任务3
Delay_ms(1000);
}
}
}
这里假设每个任务触发条件是三个不同的按键,跑代码的时候就能发现,疯狂按下按键3(任务3触发条件),2S以后才有反应,也就是说,在这个系统中, Do_Something3();,在急也要等前面的执行完,才能执行,这个就是轮询系统,这个就是没有实时响应能力。
前后台系统
前后台系统,是在轮询系统的基础上加入了中断,中断用来相应外部紧急事件,普通功能的执行在轮询系统中,在这个系统中中断称为前台,main()函数中的无限循环称为后台。
// 全局标志位
volatile uint8_t flag_1 = 0;
volatile uint8_t flag_2 = 0;
volatile uint8_t flag_3 = 0;
int main(void)
{
HardWareInit(); // 初始化硬件
while(1)
{
// 任务1
if(flag_1) { // 检查标志位是否由中断设置
flag_1 = 0; // 清除标志位
Do_Something(); // 执行任务1
}
// 任务2
if(flag_2) { // 检查标志位是否由中断设置
flag_2 = 0; // 清除标志位
Do_Something2(); // 执行任务2
}
// 任务3
if(flag_3) { // 检查标志位是否由中断设置
flag_3 = 0; // 清除标志位
Do_Something3(); // 执行任务3
}
}
}
// 中断服务程序 (ISR) 用于后台处理
void IRQ_Handle(void)
{
flag_1 = 1; // 设置任务1的标志位
Do_IRQ_Function(); // 后台处理任务1相关的中断
}
void IRQ_Handle2(void)
{
flag_2 = 1; // 设置任务2的标志位
Do_IRQ_Function2(); // 后台处理任务2相关的中断
}
void IRQ_Handle3(void)
{
flag_3 = 1; // 设置任务3的标志位
Do_IRQ_Function3(); // 后台处理任务3相关的中断
}
前后台系统,有了实时响应能力,但是这种裸机系统,还是有缺陷,使用中断函数来充当前台,当中断响应函数执行的之后,while()循环中的函数是没有办法正常执行的,所以要求中断响应函数只能执行,简单快速的功能,如果反之,后台系统不能正常执行,也会导致系统没有功能运行。
多任务系统
这个是常说的操作系统,有很多种FreeRtos,RT_Thread,Linux,μC/OS-II / μC/OS-III,都有一个特性,支持多种任务并发执行,有人经常会说同时执行,这里细扣是并发执行,只是切换Task的速度比较快。
// 全局标志位
volatile uint8_t flag_1 = 0;
volatile uint8_t flag_2 = 0;
volatile uint8_t flag_3 = 0;
int main(void)
{
HardWareInit(); // 初始化硬件
RTOSInit();//RTOS初始化
RTOSStart();//开启RTOS任务调度器
}
// 中断服务程序 (ISR) 用于后台处理
void IRQ_Handle(void)
{
flag_1 = 1; // 设置任务1的标志位
Do_IRQ_Function(); // 后台处理任务1相关的中断
}
void IRQ_Handle2(void)
{
flag_2 = 1; // 设置任务2的标志位
Do_IRQ_Function2(); // 后台处理任务2相关的中断
}
void IRQ_Handle3(void)
{
flag_3 = 1; // 设置任务3的标志位
Do_IRQ_Function3(); // 后台处理任务3相关的中断
}
多任务系统中的Task是,无限循环不能返回的小程序,由操作系统调度器,管理调度,没有什么硬性缺点,但是移植操作系统使用在工程中,对单片机Flash和Ram有要求,因为操作系统本身有占用flash大小。在一些内存小的单片机上跑不了操作系统。
表格特点
系统 | 紧急事件 | 事件处理 | 缺点 |
轮询系统 | 主程序 | 主程序 | 没有实时响应能力 |
前后台系统 | 前台中断 | 主程序 | 前台只能处理简单事件 |
多任务系统 | 前台中断 | 主程序 | 无 |
我是大狗,希望对你,有所帮助,欢迎指正!!!