概述
1、裸机系统
裸机系统通常分为轮询系统和前后台系统,
1.1、轮询系统
轮询系统伪代码
int main(void)
{
//硬件相关初始化
HardWareInit();
//无限循环
for( ; ;)
{
//处理事情1
DoSomething1();
//处理事情2
DoSomething2()
}
}
轮询系统只适合顺序执行的功能代码,当有外部驱动时,实时性就会降低。
1.2、前后台系统
相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称之为前台,main函数里面的无限循环我们称之为后台。
前后台系统伪代码
int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
//硬件相关初始化
HardWareInit();
//无限循环
if(flag1)
{
//处理事情1
DoSomething1();
}
if(flag2)
{
//处理事情2
DoSomething2();
}
if(flag3)
{
//处理事情3
DoSomething3();
}
}
void ISR1(void)
{
flag1=1;
//如果时间处理时间很短,则在中断里面处理
//如果时间处理时间很长,再回到后台处理
DoSomething1();
}
void ISR2(void)
{
flag1=2;
//如果时间处理时间很短,则在中断里面处理
//如果时间处理时间很长,再回到后台处理
DoSomething2();
}
void ISR3(void)
{
flag3=1;
//如果时间处理时间很短,则在中断里面处理
//如果时间处理时间很长,再回到后台处理
DoSomething3();
}
前后台系统确保了事件不会丢失,再加上中断的嵌套功能,这可以大大提高程序的实时响应能力
2、多任务系统
相比前后台系统,多任务系统的时间响应也是在中断中完成的,但是事件的处理是在任务中完成的。在多任务系统中,任务跟中断一样,也具有优先级,优先级高的任务会优先执行。当一个紧急的事件在中断被标记之后,如果时间对应的任务的优先级足够高,就会立马得到响应。相比前后台系统,多任务系统的实时性又提高了
多任务系统伪代码:
int flag1 = 0 ;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
//硬件相关初始化
HardWareInit();
//OS初始化
RTOSInit();
//OS启动,开启多任务调度,不再返回
RTOSStart();
}
void ISR1(void)
{
flag1=1;//置标志位
}
void ISR2(void)
{
flag2=1;//置标志位
}
void ISR3(void)
{
flag1=3;//置标志位
}
void DoSomething1(void)
{
//无限循环,不能返回
for(; ;)
{
if(flag1) {}
}
}
void DoSomething2(void)
{
//无限循环,不能返回
for(; ;)
{
if(flag2) {}
}
}
void DoSomething3(void)
{
//无限循环,不能返回
for(; ;)
{
if(flag3) {}
}
}
参考资料:野火UCOSIII手册
最后
以上就是单纯酒窝为你收集整理的UCOSIII--嵌入式系统、轮询系统和前后台系统的全部内容,希望文章能够帮你解决UCOSIII--嵌入式系统、轮询系统和前后台系统所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复