欢迎来到某某舞蹈培训官方网站

服务热线:0938-30735074

μC/OS—II的嵌入式串口通信模块设计-澳门·威斯尼斯网站

本文摘要:在嵌入式应用中,用于RTOS的主要原因是为了提升系统的可靠性,其次是提升研发效率、延长开发周期。

在嵌入式应用中,用于RTOS的主要原因是为了提升系统的可靠性,其次是提升研发效率、延长开发周期。C/OS-II是一个潘顿式动态多任务内核,用于对象是嵌入式系统,对源代码必要削减,很更容易重制到8~32位有所不同框架的微处理器上。但C/OS-II仅有是一个动态内核,它不像其他实时操作系统(如嵌入式Linux)那样获取给用户一些API函数模块。

在C/OS-II动态内核下,对外另设的采访模块没统一完备,有很多工作必须用户自己去已完成。串口通信是单片机测控系统的最重要组成部分,异步串行口是一个比较简单又很不具代表性的中断驱动外设。

本文以单片机中的串口为事例,讲解C/OSII下撰写中断服务程序以及外设驅动程序的一般思路。  1C/OS-II的中断处置及51系列单片机中断系统分析  C/OS-II中断服务程序(ISR)一般用汇编语言撰写。

以下是中断服务程序的步骤。  留存全部CPU寄存器;调用OSIntEnter()或OSIntNesting(全局变量)必要特1;  继续执行用户代码做到中断服务;  调用0SIntExit();  完全恢复所有CPU寄存器;  继续执行中断回到指令。  C/OS-II获取两个ISR与内核接口函数;OSIntEnter()和OSIntExit()。

OSIntEnter()通报C/OSII核,中断服务程序开始了。事实上,此函数做到的工作是把一个全局变量OSIntNesting特1,此中断嵌套计数器可以保证所有中断处置已完成后再行做到任务调度。

另一个接口函数OSIntExit()则通报内核,中断服务已完结。根据适当情况,撤回被中断点(有可能是一个任务或者是被嵌套的中断服务程序)或由内核不作任务调度。  用户撰写的ISR必需被加装到某一方位,以便中断再次发生后,CPU根据适当的中断号运营精确的服务程序。许多实时操作系统都获取了加装和修理中断服务程序的API接口函数,但C/OSII内核没获取类似于的接口函数,必须用户在对CPU的重制中自己构建。

这些接口函数与明确的硬件环境有关,接下来以51单片机下的中断处置回应详尽解释。  51单片机的中断基本过程如下:CPU在每个机器周期的S5P2时刻取样中断标志,而在下一指令周期将对取样的中断展开查找。如果有中断请求,则按照优先级强弱的原则展开处置。

号召中断时,先置适当的优先级转录触发器于适当位,封锁同级或低级中断,然后根据中断源类别,在硬件掌控下,将中断地址压入堆栈,并改向适当的中断向量入口单元。一般来说在入口单元处放一函数调用指令,改向继续执行中断服务程序.当继续执行中断回到指令RETI时,把号召中断时所置位的优先级转录触发器清零后,从堆栈中弹  出有被维护的断点地址,取出程序计数器PC,CPU回到原本被中断处之后执行程序。  在重制的过程中,使用KeilC51作为编译器环境。

KeilC5l构建C编译器和汇编器。中断子程序用汇编语言撰写,放在重制C/0SII后的OS_CPU_A.ASM编撰文件中。下面是以串行口中断为例的重制中断服务子程序代码。  CSEGAT0023H;串口中断号召入口地址  LJMPSerialISR;移往到串口中断子程序入口地址  RSEG?PR?SeriallSR?OS_CPU_A  SerialISR:  USINGO  CLREA;先关中断,防止中断嵌套  PUSHALL;已定义的压栈宏,用作将  ;CPU寄存器的值压入堆栈  LCALL_?OSIntEnter;监控中断嵌套  LCALL_?Serial;串口中断服务程序  LCALL_?。


本文关键词:98858vip威尼斯下载,澳门金威尼斯游戏,澳门威斯尼斯pg电子游戏,澳门·威斯尼斯网站

本文来源:98858vip威尼斯下载-www.sangel.net