uCOS-III内核实现与应用开发实战指南-01- 裸机系统与多任务系统

uCOS-III内核实现与应用开发实战指南-01- 裸机系统与多任务系统

1 裸机系统

裸机系统通常分成轮询系统和前后台系统。

1.1 轮询系统

轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。

轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。如果只是实现 LED 翻转,串口输出,液晶显示等这些操作,那么使用轮询系统将会非常完美。但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。

轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。

/*轮询系统伪代码*/
int main(void)
{
	/* 硬件相关初始化 */
	HardWareInit();c
	
	/* 无限循环 */
	for (;;) {
	/* 处理事情 1 */
	DoSomething1();
	/* 处理事情 2 */
	DoSomething2();
	/* 处理事情 3 */
	DoSomething3();
	}
}

1.2 前后台系统

相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台,main 函数里面的无限循环我们称为后台。

在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回到后台程序里面处理。虽然事件的响应和处理是分开了,但是事件的处理还是在后台里面顺序执行的,相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大的提高程序的实时响应能力。在大多数的中小型项目中,前后台系统运用的好,堪称有操作系统的效果。

前后台系统伪代码
int flag1=0;
int flag2=0;
int flag3=0;
int main(void)
{
	/* 硬件相关初始化 */
	HardWareInit();
	
	/* 无限循环 */
	for (;;) {
	if(flag1)
	{
		/* 处理事情 1 */
		DoSomething1();
	}
	if(flag2)
	{
		/* 处理事情 2 */
		DoSomething2();
	}
	if(flag3)
	{
		/* 处理事情 3 */
		DoSomething3();
	}
	}
}

void ISR1(void)
{
	/* 置位标志位 */
	flag1 = 1;
	/* 如果事件处理时间很短,则在中断里面处理
	如果事件处理时间比较长,在回到后台处理 */
	DoSomething1();
}
void ISR2(void)
{
	/* 置位标志位 */
	flag2 = 1;
	/* 如果事件处理时间很短,则在中断里面处理
	如果事件处理时间比较长,在回到后台处理 */
	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)
{
	/* 置位标志位 */
	flag3 = 1;
}

voidDoSomething1(void)
{
   /* 无限循环,不能返回 */
   for (;;)
   {
   		/* 任务实体 */
   		if (flag1)
   		{
   		}
   }
}
voidDoSomething2(void)
{
   /* 无限循环,不能返回 */
   for (;;)
   {
   		/* 任务实体 */
   		if (flag2)
   		{
   		}
   }
}
voidDoSomething3(void)
{
   /* 无限循环,不能返回 */
   for (;;)
   {
   		/* 任务实体 */
   		if (flag3)
   		{
   		}
   }
}

3 总结

相比前后台系统中后台顺序执行的程序主体,在多任务系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为任务。每个任务都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,我们在编程的时候不需要精心地去设计程序的执行流,不用担心每个功能模块之间是否存在干扰。

表1 轮询、前后台和多任务系统软件模型区别

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式实时操作系统μC/OS-III是一款非常流行且广泛应用的实时操作系统。它被设计用于嵌入式系统中,满足实时性要求高的应用程序的需求。 uCos-III的电子书是对该实时操作系统的详细介绍和使用指南。这本电子书可以帮助读者了解嵌入式系统的基本概念、实时操作系统的工作原理和应用开发方面的技术。它提供了一系列有关uCos-III的知识和实例,使读者能够快速了解和掌握该实时操作系统的使用方法。 这本电子书主要涵盖以下内容: 1. uCos-III的基本概念:介绍了实时操作系统的定义、特点和应用领域,让读者了解操作系统在嵌入式系统中的重要性和作用。 2. uCos-III的架构和特性:介绍了uCos-III的体系结构和主要特性,如任务调度、时钟管理、内存管理、同步与通信等。 3. uCos-III的安装和配置:详细介绍了如何安装和配置uCos-III实时操作系统,包括编译器设置、硬件支持、内核配置等。 4. uCos-III的任务管理:讲解了任务的创建、删除、挂起和恢复等管理操作,同时介绍了任务优先级和实时调度算法。 5. uCos-III的管理服务和通信机制:介绍了信号量、互斥锁、消息队列、事件标志等管理服务和通信机制,帮助读者实现任务间的同步和通信。 6. uCos-III的中断处理和硬件驱动:讲解了中断处理的机制和方法,以及如何编写硬件驱动程序与uCos-III集成。 这本电子书适合嵌入式系统开发人员、学生以及对实时操作系统感兴趣的人阅读。通过学习这本电子书,读者可以准确理解uCos-III实时操作系统的概念和工作原理,并掌握如何使用uCos-III开发和调试嵌入式应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值