一、轮询式系统
轮询式系统 : 在裸机开发的程序运行时,先对所有的硬件进行初始化,然后在主程序中写一个死循环,顺序地处理各种事件。
- 优点:简单可靠的方式,适用于在只需要按照顺序执行,并且没有外部事件的影响的情况下。
- 缺点:实时性差。程序的运行过程中出现如按键等需要外部检测的事件,轮询系统的实时响应能力变得很差。
int main()
{
//1. 对所有的硬件进行初始化(LED、BEEP、KEY......)
while(1)
{ //点灯
//警报
//按键
}
}
二、前后台系统
前后台系统增加中断的概念。
如果++外部事件发生,则在中断中进行处理;主程序在轮询系统中运行++。
中断被称为前台 ,主程序中的while(1)就称为后台。
执行顺序 : 发生异常中断,中断会终止后台程序的运行**→** 跳转到对应的中断服务函数中处理,处理完成后 **→**继续执行后台的程序。
- 优点:提高程序的实时响应能力,避免造成外部事件的缺失。
//中断被称为前台
void IRQ(void)
{
//
}
//轮询式主程序
int main()
{
//对所有的硬件进行初始化(LED、BEEP、KEY......)
//对中断配置和使能
//轮询式系统
while(1)
{
//
}
}
三、多任务系统
多任务系统的外部事件也是在中断中进行响应,但是++外部事件的处理是任务中进行处理++。
任务具有优先级,优先级高的任务先处理。
程序就会被分割为一个个的任务,++任务是一个独立的死循环,并且不能返回++,可以由操作系统进行任务的调度。
//任务1
void * task1(void *arg)
{
while(1)
{
//
}
}
//任务2
void * task2(void *arg)
{
while(1)
{
//
}
}
int main()
{
//2.创建任务,并设置任务的属性(优先级、内存分配、时间片)
}