总结
模型 | 事件响应 | 事件处理 | 特点 |
---|---|---|---|
轮询系统 | 主程序 | 主程序 | 轮询响应事件,轮询处理事件 |
前后台系统 | 中断 | 主程序 | 实时响应事件,轮询处理事件 |
多任务系统 | 中断 | 任务 | 实时响应事件,实时处理事件 |
1.轮询系统
结构简单,只适用于顺序执行代码不需要外部事件驱动的情况。
int main(void)
{
HardWareInit();
for(;;){
DoSomething1();
DoSomething2();
DoSomething3();
}
}
2.前后台系统
中断(前台):外部事件响应,处理简短事件
事件处理(后台/main函数中的无限loop):轮询系统执行,处理复杂时间
分离了事件的响应和处理
int flag1 = 0;
int flag2 = 0;
int main(void)
{
HareWareInit();
for(;;){
if(flag1){
DoSomething1();
}
if(flag2){
DoSomething2();
}
}
}
void ISR1(void)
{
flag1 = 1;
DoSomething1();
}
void ISR2(void)
{
flag2 = 1;
DoSomething2();
}
3多任务系统
中断:事件的响应
任务(也存在优先级):事件的处理
任务是把程序主体分割成的独立的、无限循环且不能返回的小程序,由操作系统进行调度
int flag1 = 0;
int flag2 = 0;
int main(void)
{
HardWareInit();
RTOSInit();
RTOSStart();
}
void ISR1(void)
{
flag1 = 1;
}
void ISR2(void)
{
flag2 = 1;
}
void DoSomething1(void)
{
for(;;){
if(flag1){
}
}
}
void DoSomething2(void)
{
for(;;){
if(flag2){
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。