Board logo

标题: μCOS-II在ATmega128单片机上的移植与开发 002 [打印本页]

作者: samwalton    时间: 2013-7-10 09:46     标题: μCOS-II在ATmega128单片机上的移植与开发 002

(3) # definE声明三个宏(OS-CPU. H) 。即进入临界代码段(criTicaLcOdEsecTiOn) 的方法OS-CRITICAL-METHOD定义为3 ,在宏OS-ENTER-CRITICAL() 中得到当前处理器状态字的值,并将其保存在C函数的局部变量中,这个变量在宏OS-EXIT-CRITICAL( ) 中用于恢复PSW。宏OS-TASK-SW() 是在内核从低优先级任务切换到高优先级任务时用到的,它总是在任务级代码中被调用。在ATMEGA128上移植,直接调用OSCTxSw () 任务切换函数就可以了。
        (4) 用C语言编写十个简单的函数(OS-CPU-C. C) ,OS2TAskSTKIniT() ;OSIniTHoOkBegiN() ;OSIniTHoOKEnd () ; OSTAskCreaTeHoOK( ) ;OSTAskDelHoOK( ) ;OSTAskSw HoOK();OSTAskSTaTHoOK() ;OSTimETickHoOk () ;OSTCB IniTHoOK() ;OSTAsKIdleHoOK() ;实际需要修改的只有OSTAskSTKIniT() 函数,其它九个函数都是由用户定义的。如果用户需要使用这九个函数,可将文件OS-CFG. H中的# definEcOnsTAnTOS-CPU-HOOKS-EN设为1,设为0表示不使用这些函数。函数OSTAskSTKIniT( ) 是由OSTAskCreaTE() 或OSTAskCreaTEExT() 调用,用来初始化任务堆栈的。经初始化后的任务堆栈应该跟发生过一次中断后任务的堆栈结构一样。由前叙述可知,ATmega128在发生中断后,自动保存了程序计数器PC。为了保存全部现场,还需要保存状态寄存器SREG ,R0~R31这32个通用寄存器及SP的值。
        (5) 编写四个汇编语言函数(OS-CPU-A. S) ,OSSTARTHighRdy () 使就绪态任务中优先级最高的任务开始运行;OSCTxSw () 完成将处理器的寄存器保存到堆栈中的任务后,将任务指针指向要恢复运行的任务,复制新任务的优先级,得到新任务的堆栈指针,恢复将运行任务的寄存器;OSIntC2TxSw () 完成在ISR中执行任务的切换;OSTicKISR() 提供系统时钟节拍服务;这些函数涉及到出栈和入栈操作,因此需要用汇编语言编写。做完以上工作,就是测试内核的移植是否正确。测试一个实时内核,可以运行一些简单的任务和时钟节拍中断任务,一旦调试成功就可以在上面扩展功能。
        硬件驱动程序的编写
      
        μCOS-II移植完成以后,就要在实时内核之上编写外设驱动程序。外设驱动程序可以提供访问外围设备的接口,把操作系统和外围设备硬件分离开来,当外设改变时,只需修改设备驱动程序,不影响操作系统内核。外设驱动程序主要完成以下功能:
        (1) 对设备初始化和释放;
        (2) 把数据从内核传送到硬件和从硬件读取数据;
        (3) 读取应用程序传送给设备文件的数据和回送应用程序请求的数据;
        (4) 检测和处理设备出现的错误。对于扩展相应的API函数,不同的应用有不同的要求,可以根据硬件结构和实际应用,编写操作系统的API函数。
        基于μCOS-II进行扩展的RTOS的总体结构。在内核上开发应用,在把内核移植到自己的硬件目标板上后,在实时内核的基础上写出相应的驱动程序、内存操作等API函数,建立实时操作系统,最后利用这些API函数编写用户自己的应用程序,就构成了嵌入式系统软件。而应用程序处于整个系统的顶层,根据具体应用要求,其功能有多个任务完成,每个任务可以调用API函数,也可以调用与处理器无关的代码提供的系统服务。
        总    结
        采用μCOS-II内核开发的RTOS具有良好的实时性,可裁剪性,应用它可以使产品更可靠,功能更强大,开发周期更短。该系统目前已在我院开发的护理用体态语言机上成功应用。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0