uCOS-II在51单片机上的移植

激光雕刻机 | 2021-07-07

火狐体育-章:在各种电子系统中的应用变得复杂,随着系统实时性市场需求的提高,但实际使用中不存在很多8位的单片机,从经济性的观点出发,有些应用中使用8位的MCU进行操作从自学OS的观点来看,uC/OS-IIfor51非常简单全面,自学成本低廉,有点推广。 结语: C/OS-II具有免费、非常简单、可靠性低、实时性好等优点,但也存在缺乏方便的研究开发环境等缺点,特别是像商用嵌入式系统那样普遍使用,得不到持续的研究改版。

但是,开放性还允许开发者自己削减和增加必要的功能,在很多应用领域充分发挥了自己的作用。 当然,是否将C/OS-II映射到单片机系统取决于开发的项目。 非常简单、成本低的项目不适用于嵌入式操作系统。 uC/OS-II原理: uCOSII还包括任务调度、时间管理、内存管理、资源管理(信号量、邮箱、消息队列)四大部分,包括文件系统、网络接口、输入输出接口其副本仅与编辑文档(OS_CPU_A.ASM )、处理器相关C文档(OS_CPU.H、OS_CPU_C.C )和配置文件(OS 有64个优先级,系统处于8个空闲状态,用户可以创建56个任务而不反对时间片。

其基本想法总是接近于使优先顺序最低的准备任务总是处于运营状态。 为了确保这一点,调用系统API函数,在中断完成、定点中断完成时总是继续执行调度算法。

火狐体育直播

原作者通过事先计算数据,修正运算量,精心设计准备表的结构,从而可以预测延迟。 任务的变换是通过模拟在一次中断中构建的。 uCOSII的工作核心原理是使最低优先级的准备任务几乎处于运营状态。

操作系统展开API函数的调用(用户驱动的调用)、中断(系统空闲的时间片中断OsTimeTick (),用户使用的中断)的任务调度。 调度算法书上说得很准确,但我主要谈谈整体的想法。 (1)在调用api函数时有可能引起堵塞,在注意到系统api函数不满足运用条件的情况下,系统自动完成,需要调用用户没有参加的OSSched ()调度函数。

OSSched ()判断有无转换,需要转换时调用OS_TASK_SW ()。 这个函数模拟一次中断(51中没有软中断,在子程序中调用模拟。 效果完全一样)。

程序好像中断停止了,只不过是OS故意生产的幻想。 目的是转换任务。 既然是中断,地址(即存储在OS_TASK_SW ()中的下一个编辑命令的PC地址)就会自动被按入堆栈,在中断程序中保留CPU寄存器(PUSHALL )。 堆栈结构不是给定的,严格遵守uCOSII标准。

OS每次转换都会保留所有轮询,完全恢复,在RETI中返回任务断点继续执行。 此断点是OSSched ()函数OS_TASK_SW ()中下一个编辑指令的PC地址。

转换的整体过程是用户任务程序调用系统API函数,API调用OSSched (),OSSched ()调用软中断OS_TASK_SW ()的OSCtxSw,地址(PC值)堆栈相反,转换程序调用RETI返回到OS_TASK_SW ()中的下一个编辑命令的PC地址,然后返回到OSSched ()中的下一个语句,即用户程序断点。 因此,任务从运营到准备好到运营,那意味着在日程前的断点进行运营。 (2)中断不引起条件变化,必须在解散前开展任务调度。 uCOSII拒绝中断的堆栈结构符合规范,可以正确协商中断解散和任务转换。

虽然已经说任务转换实际上是模拟中断事件,但是在可靠的中断中可以省略模拟(本身就是中断吧)。 如果中断堆栈结构与uCOSII模拟的堆栈结构相同,就可以在中断中展开正确的转换。 任务切换在中断解散前再次发生,此时还没有返回中断断点。 仔细观察中断程序和转换程序的最后两句话。

那些是一样的。 POPALL RETI。 也就是说,必须从中断程序中解散,返回断点。 或者把现场留到TCB,从转换函数回到原来的中断断点,直到现场完全恢复(因为中断和转换函数遵循联合的堆栈结构,所以解散作业者完全一样,效果也完全一样)。

用户创建的中断子程序必须按照uCOSII规范进行描述。 任务日程再次发生在中断解散前,非常及时,等到下一个时间再处理。 OSIntCtxSw ()函数非常简单地调整了堆栈指针,以便所有悬挂任务的堆栈结构看起来都一样。

(在uCOSII中,任务需要写两种形式之一(《uCOSII中文版》 p99页)。 有些RTOS的研发环境不拒绝明确调用OSTaskDel ()。

这是因为研究开发环境自动进行处理,实际原理相同。 uCOSII的研究开发依赖于编译器,现在没有专用的研究开发环境,所以这些不便经常出现和解读。 复制过程: (1)复制书后,将sourcecode目录下的内容附加到C:\YY,删除不需要的文件和EX1L.C,只保留p187(《uCOSII》 )中列出的文件。

(2)改写最简单的OS_CPU.H数据类型的原作新闻c51.PDF176页。 请注意,布尔被定义为unsignedchar类型。 bit型是C51特有的,所以不能用于结构体。

EA=0关闭中断EA=1进制中断。 这样定义会增加程序行数,防止因解散临界区域后的门中断而引起的恐慌。 MCS-51堆栈从下向上快速增长(1=向上,0=向下),OS_STK_GROWTH被定义为0#defineOS_TASK_SW()OSCtxSw 两者的堆栈格式完全相同,RETI命令使中断系统退位,没有RET。

实际上,对MCS-51在子程序中调用堆栈,指出通过中断返回命令RETI发出堆栈是没有问题的,相反,不敢中断堆栈RET的堆栈。 也就是说,要进入堆栈,子程序调用和中断调用的效果是一样的,可以混合使用。 在没有中断的情况下再次发生时,使系统退位而中断也会影响系统的长时间运行。。

本文来源:火狐体育直播-www.sierrapol.com