一、裸机系统
1.1 轮询系统
int main(void)
{
HardWareInit();
for (;;) {
DoSomethin1();
DoSomething2();
DoSomething3();
}
}
1.2 前后台系统
- 相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。
- 外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成。
- 中断在这里我们称为前台, main 函数里面的无限循环我们称为后台。
int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
HardWareInit();
for (;;) {
if (flag1) {
DoSomethin1();
}
if (flag2) {
DoSomething2();
}
if (flag3) {
DoSomething3();
}
}
}
void ISR1(void)
{
flag1 = 1;
DoSomethin1();
}
void ISR2(void)
{
flag2 = 1;
DoSomethin2();
}
void ISR3(void)
{
flag3 = 1;
DoSomethin3();
}
二、多任务系统
- 在多任务系统中,任务跟中断一样,优先级高的任务会被优先执行
- 如果一个紧急的时间在中断被标记之后,如果时间对应的任务的优先级足够高,就会立即得到相应
- 实时性显著提高
- 每个任务都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调
度管理。
int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
HardWareInit();
RTOSInit();
RTOSStart();
}
void ISR1(void)
{
flag1 = 1;
}
void ISR1(void)
{
flag1 = 2;
}
void ISR3(void)
{
flag3 = 1;
}
void DoSomethin1(void)
{
for (;;) {
if (flag1) {
}
}
}
void DoSomethin2(void)
{
for (;;) {
if (flag2) {
}
}
}
void DoSomethin3(void)
{
for (;;) {
if (flag3) {
}
}
}
三、轮询、前后台和多任务系统软件模型区别