uCOSII在ARM处理器上移植过程中的中断处理

2021-04-14 13:57 亚博取现

 扫码分享

本文摘要:uCOSII是一个源代码公布发布、生命期、可煅烧、可裁剪和守好式的动态性多个任务电脑操作系统,其绝大多数源代码是用ANSIC编写,与CPU硬件配置涉及到的一部分用以汇编程序编写。总产量大概200讫的汇编程序一部分被传送到小于程度,便于于重制到一切一种其他的CPU上。

亚博取现到账超快

uCOSII是一个源代码公布发布、生命期、可煅烧、可裁剪和守好式的动态性多个任务电脑操作系统,其绝大多数源代码是用ANSIC编写,与CPU硬件配置涉及到的一部分用以汇编程序编写。总产量大概200讫的汇编程序一部分被传送到小于程度,便于于重制到一切一种其他的CPU上。

uCOSII至少可抵制56个每日任务,其核心为潘顿式,一直继续执行就绪态的优先最少的每日任务,并抵制Semaphore(信号量)、Mailbox(电子邮箱)、MessageQueue(消息队列)等多种多样常见的进程间通信体制。与大多数商业RTOS各有不同的是,uCOSII公布发布全部的源码.并能够完全免费获得,只对商业服务运用于交纳小量License花费。uCOSII重制跟OS_CUP_C.C、OS_CPU_A.S、OS_CPU.H3个文档相关,中断处置的重制占据了非常大一部分內容。

做为重制的一个关键,文中以规范中断(IRQ)为例证争辩了重制中的中断处置。1uCOSII体系结构uCOSII的硬件软件系统架构如图所示1。应用软件正处在全部系统软件的高层.每一个每日任务都能够强调自身称霸了CPU,因此能够设计方案沦落一个不断循环。绝大多数编码是用以ANSIC语言撰写的,因而uCOSII的可扩展性不错。

即便如此,仍然务必用以C和汇编程序写成一些CPU涉及到的编码。uCOSII的重制务必合乎下列回绝:1)CPU的Cc语言编译器能够造成可工作交接编码:能够用以C启用转到和散伙CriticalCode(临界区编码);2)CPU必不可少抵制硬件配置中断,而且务必一个指定中断源;3)CPU需要能容下一定数据信息的硬件配置局部变量;4)CPU必不可少能在CPU存储器与运行内存和局部变量相互交换数据信息的命令。重制uCOSII的关键工作中便是CPU和c语言编译器涉及到编码及其BSP(BoardSupportPackage)的编写。uCOSIICPU涉及的编码获得uCOSII的服务程序,应用软件能够用以这种API函数进行代码优化、每日任务间通信及其开创、清除每日任务等。

2uCOSII重制全过程中务必注意的好多个难题uCOSII重制的中断处置跟ARM系统架构和uCOSII处置中断的全过程相关,必不可少注意这两个层面的难题才可以高效率重制。2.1ARMCPU7种作业者模式客户模式(USERMODE)是ARM一般来说继续执行情况,作为继续执行大部分应用软件;比较慢中断模式(FIQMODE)抵制传输数据或地下隧道处置;中断模式(IRQMODE)作为规范化中断处置;忠实用户模式(SVCMODE)是一种电脑操作系统受维护的模式:数据信息停止模式(ABTMODE)指令预取指停止、数据信息停止时转到该模式;未定义模式(UNDMODE)当继续执行未定义的命令时转到该模式;系统软件模式(SYSMODE)是电脑操作系统一种受权的客户模式。

除开客户模式以外,别的模式都不属于权利模式,权利模式作为中断服务项目、发现异常或是访谈受维护的資源。权利模式中除系统软件模式以外另5种模式又被称为作发现异常模式,在重制全过程中必不可少设定中断空间向量表来处置发现异常。uCOSII的重制关键处置规范中断(IRQ)、比较慢中断(FIQ)和手机软件中断(SWI)。2.2uCOSII中断呼吁的全过程以IRQ中断为例证,假定CRPS中I_bit位为0,当有IRQ中断时,CPU逼迫转到IRQ模式,当今的CPSR拷到SPSR_irq中,PC值存留在LR_irq中,改置CPSR中的I位以再开IRQ中断。

亚博取现到账超快

数据信息存留以后,CPU私自从0X00000018刚开始继续执行,PC值存留了OS_CPU_IRQ_ISR()的详细地址,随后继续执行OS_CPU_IRQ_ISR()。在OS_CPU_IRQ_ISR()中OS_CPU_IRQ_ISR_Handler()被启用来检验中断源并继续执行中断。OS_CPU_IRQ_ISR_Handler()返回之后,OS_CPU_IRQ_ISR()又启用OSIntExit()来确认否有比ISR优先高些的每日任务要继续执行。

假如当今中断每日任务仍然是优先最少的每日任务,OSIntExit()返回,OS_CPU_IRQ_ISR()炮弹出有中断局部变量,假如优先高些的每日任务务必继续执行,OSIntExit()启用OSIntCtxSw()继续执行优先高些的每日任务。2.3uCOSII的临界值段编码uCOSII用以大关中断来维护保养临界值编码。它界定了两个宏来进中断(OS_EXIT_CRITICAL()),大关中断(OS_ENTER_CRITICAL())。

OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()有3种方式来搭建,uCOSII提议用以第三种方式能够存留当今CPU情况的值。3uCOSII重制全过程中的中断处置uCOSII中断处置跟CRT.S、OS_CPU_A.S和BSP.C相关,其重制全过程关键有下列好多个流程。

亚博取现

3.1在CRT.S中设定中断空间向量报表ARM的中断空间向量报表位于ROM的最底端,其详细地址范畴为0X00000000~0X0000001C,设定以下:VECTORS:LDRPC,RESET_ADDRLDRPC,UNDEF_ADDRLDRPC,SWI_ADDRLDRPC,PABT_ADDRLDRPC,DABT_ADDRNOP/*享有空间向量*/LDRPC,IRQ_ADDRLDRPC,FIQ_ADDRRESET_ADDR:.WORDRESET_HANDLERUNDEF_ADDR:.WORDUNDEFHANDLERSWI_ADDR:.WORDSWIHANDLERPABT_ADDR:.WORDPABT_HANDLERDABT_ADDR:.WORDDABT_HANDLER.WORD0/*享有详细地址*/IRQ_ADDR:.WORDIRQ_HANDLERFIQ_ADDR:.WORDFIQHANDLERUNDEF_HANDLER:BUNDEF_HANDLERSWI_HANDLER:BSWI_HANDLERPABT_HANDLER:BPABT_HANDLERDABT_HANDLER:BDABT_HANDLERIRQ_HANDLER:BOS_CPU_IRQ_ISR/*函数启用到OS_CPU_IRQ_ISR(在OS_CPU_A.S中)*/FIQ_HANDLER:BOS_CPU_FIQ_ISR/*函数启用到OS_CPU_FIQ_ISR(在OS_CPU_A.S中)*/这儿设定了规范中断发现异常(IRQ)和比较慢中断发现异常(FIQ)的中断通道,其他发现异常都设定为无限循环,当再次出现这种发现异常的情况下,必不可少使系统软件废黜才可以散伙无限循环。3.2重制中断每日任务变换中断每日任务变换(OSIntCtxSw)和每日任务变换函数(OSCtxSw)比较相仿,关键有下列两步组成:1)启用OSTaskSwHook()2)OSPrioCur=OSPrioHighRdy3)OSTCBCur=OSTCBHighRdy4)SP=OSTCBHighRdy-OSTCBStkPtr//出示低优先级队列的每日任务堆栈指针5)从低优先级队列的每日任务的局部变量中枪出高优先的每日任务前后文6)继续执行低优先级队列的每日任务3.3重制中断系统服务以IRQ中断为例证中断系统服务(OS_CPU_IRQ_ISR)关键根据上边所描述的uCOSII中断呼吁的全过程编写,其关键编码以下:LDRR0,OS_IntNestingLDRBR1,[R0]ADDR1,R1,#1STRBR1,[R0]CMPR1,#lBNEOS_CPU_IRQ_ISR_1LDRR4,OS_TCBCurLDRR5,[R4]STRSP,[R5]OS_CPU_IRQ_ISR_1:MSRCPSR_c,#(NO_INT|IRQ32_MODE)//变换到SVC模式LDRR0,OS_CPU_IRQ_ISR_HandlerMOVLR,PCBXR0MSRCPSR_c,#(NO_INT|SVC32_MODE)//变换到SVC模式LDRR0,OS_IntExit//OSIntExit()MOVLR,PCBXR0在编码中省去了当场工作中存储器的维护保养与彻底恢复及工作中模式的变换。3.4重制中断程序处理以IRQ中断为例证,重制中断程序处理:C程序流程voidOS_CPU_IRQ_ISR_Handler(void){PFNCTpfnct;//界定中断函数表针pfnct=(PFNCT)VICVectAddr;//出示函数详细地址while(pfnct!=(PFNCT)0){(*pfnct)();//启用中断函数pfnct=(PFNCT)VICVectAddr;//出示新的中断函数}//全部中断都继续执行完散伙}中断程序处理仰仗中断控制板的中断呼吁次序,因此 uCOSII把OS_CPU_IRQ_ISR_Handler()属于可执行程序的一部分。

在中断返回以前,中断程序处理要处置完后全部的中断呼吁,以避免 在好几个中断另外呼吁或中断处理方式中呼吁中断的状况下,转到OS_CPU_IRQ_ISR()和散伙OS_CPU_IRQ_ISR()时,OS_CPU_IRQ_ISR()耗费存留CPU存储器的局部变量室内空间。此外,在OS_CPU_IRQ_ISR_Handler()中不必清CPSR的I位来扩大开放中断,由于没适度用以中断嵌入,OS_CPU_IRQ_ISR_Handler()在返回以前不容易查验并处置全部的中断。3.5编写中断函数中断函数一般应用C语言编写,uCOSII提议中断函数不可尽量较短,一般做法是在中断函数中缓存文件,给每日任务发送至一个数据信号来处置数据信息。

中断函数的详细地址在系统软件复位的情况下要改置人中断空间向量存储器(VICVectAddr0~15)。因为空间向量中断控制板(VIC)的相近构造,在中断函数时要写成一次中断空间向量存储器(VICVectAddr)。4中断处置的运用于实例uCOSII要获得规律性信号源,作为搭建時间廷时和确认请求超时。

节奏感亲率不正确10~100Hz。数字时钟节奏感源能够由专业的硬件配置计时器造成,下列就以IRQ中断方法造成节奏感源为实例。复位中断控制板:C程序流程voidVICInit(void){VICIntEnClr=0xfffff;VICDefVectAddr=-(INT32U)Non_Vect_IRQ_Handler;VICVectAddr0=(INT32U)OSTickISR;VICVectCntl0=(0x20|0x04);VICIntEnable=14;}计时器0中断函数:C程序流程voidOSTickISR(void){TO_IR=0xff;OSTimeTick();//启用OSTimeTick()VICVectAddr=0;//通告中断控制板中断完成}当指定中断再次出现时启用OS_CPU_IRQ_ISRHandler(),得到 OSTickISR()的详细地址并继续执行,在OSTickISR()中启用OSTimeTick()为uCOSII获得规律性信号源。

此编码在GNU专用工具链ARM-GCC下c语言编译器根据,并在EasyARM2100产品研发试验板上得到 检测。5结语根据实例描绘了在uCOSII重制全过程中的中断处置所务必注意的好多个难题和规范化方式,经小编在GNU专用工具链下c语言编译器、调节,并在试验板上得到 非常好的检测。这类重制计划方案的中断函数都用以C语言编写,具有不错的可移植性,不利对各有不同市场的需求的客户进行中断拓展,加强了中断嵌入时uCOSII经营的可靠性,使重制具有更优的实用性。


本文关键词:uCOSII,在,ARM,处理器,上,移植,过程,中的,中断,亚博取现到账超快

本文来源:亚博取现-www.nbhchq.com

返回顶部