裸机:英文名是Bare machine, Bare metal,指没有配置操作系统和其他软件的电子计算机。
裸机系统通常分成轮询系统和前后台系统。
轮询系统即是在裸机编程的时候(例如:51的main函数),先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情.结构简单,只适用于顺序执行代码不需要外部事件驱动的情况。当有外部事件驱动时,实时性就会降低。
(例如:按下按键时(事件3),程序需要立刻响应。如果这个时候当前事件(事件1)还没有完成,一直到按键释放事件1还没有完成,按键的事件3就没有执行,当事件1完成会执行事件2。)
(示例):
int main(void)
{HardWareInit();for(;;){DoSomething1();//事件1DoSomething2();//事件2DoSomething3();//事件3}
}
相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里称为前台(外部事件响应,处理简短事件), main 函数里面的无限循环称为后台(轮询系统执行,处理复杂时间)。
代码如下(示例):
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();
}
相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。
中断:事件的响应
任务(也存在优先级):事件的处理
任务是把程序主体分割成的独立的、无限循环且不能返回的小程序,由操作系统进行调度。
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){}}
}
模型 | 事件响应 | 事件处理 | 特点 |
---|---|---|---|
轮询系统 | 主程序 | 主程序 | 轮询响应事件,轮询处理事件 |
前后台系统 | 中断 | 主程序 | 实时响应事件,轮询处理事件 |
多任务系统 | 中断 | 任务 | 实时响应事件,实时处理事件 |
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态