《嵌入式实时操作系统μCOS原理与实践7.ppt》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统μCOS原理与实践7.ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践嵌入式实时操作系统COS原理与实践7 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践第7章 移植7.1 移植说明7.2 在VC6上实现基于Windows的虚拟C/OS-II移植7.3 在基于NIOS软
2、核的FPGA嵌入式系统下的C/OS-II移植习题作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践 7.1 移植说明移植说明C/OS-II作为嵌入式实时操作系统,最终要应用在嵌入式系统上,如单片机、ARM、FPGA、DSP等。本章中首先给出的就是说明如何移植到虚拟WINDOWS平台。接下来就是在一个实际的嵌入式系统,基于软核的FPGA系统下的移植。在掌握了这两个平台的移植后,移植到其他的平台都是不难实现。7.1.1 C/OS-II的代码结构的代码结构作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下
3、载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践移植必看的重要代码:1.操作系统配置文件os_config.h 2.操作系统头文件ucos_ii.h 3.操作系统内核C文件 4.与CPU相关代码部分 作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.1.2操作系统中与操作系统中与CPU相关的代码解析相关的代码解析7.1.2.1 头文件头文件os_cpu.h表7.2os_cpu.h定义的数据类型表7.3 os_cpu.h除类型定义外的其他代码示例进入临界区有三种方法:方法1:定义一个全
4、局变量FlagEn,进入临界区时中断服务程序判定该值为0,就不进行中断服务。离开临界区时将FlagEn置1。这种方法只在虚拟平台上使用时使用。其缺点是不能进行中断嵌套。方法2:OS_ENTER_CRITICAL()时将CPU状态寄存器(如PSW)入栈,关中断,定时器中断被禁止。OS_EXIT_CRITICAL()时退栈即可恢复CPU状态寄存器的值,这样中断也恢复到了原来的状态。方法3:OS_ENTER_CRITICAL()时将CPU状态寄存器(如PSW)的值保存到局部变量,关中断,定时器中断被禁止。OS_EXIT_CRITICAL()时从局部变量恢复CPU状态寄存器的值,这样中断也恢复到了原来
5、的状态。这需要编译器支持处理状态寄存器的值的函数。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.1.2.2 包含汇编的包含汇编的C文件文件os_cpu.c1.OSTaskStkInit 是由OSTaskCreate或OSTaskCreateExt在创建任务的时候,在对控制块进行初始化之前,对任务堆栈进行初始化时调用。它实现的功能是将任务参数地址、任务函数入口地址、各CPU寄存器地址压入任务堆栈。需要注意的是,虽然这时候任务还没有运行过,不需要保存当前CPU寄存器的真实值到任务堆栈,但初始化的结果是将堆栈
6、看起来好像刚刚发生了中断一样。请参考本书中2.4.1和2.4.2。2.OSStartHighRdy在多任务启动函数OSStart中被调用。这时候没有任务在运行,OSStartHighRdy开始启动多任务。在OSStartHighRdy运行前,OSStart已将任务控制块指针OSTCBCur指向优先级最高的就绪任务的TCB,OSStartHighRdy首先将OSRunning的值设置为真,然后使用汇编语句将堆栈寄存器的值设置为该任务堆栈的地址,然后将各堆栈中内容退栈给各寄存器,接着是任务地址和任务参数,并转到任务地址去执行。3.OSCtxSw是非中断处理情况下的任务切换函数。它在任务被阻塞、删除
7、、创建等多种情况下被调用。直接调用它的函数就是OS_Sched。4.OSIntCtxSw是中断处理情况下的任务切换函数。例如系统的每10毫秒进行时钟中断,那么都要使用它进行任务切换。因为在中断产生后,所以PSW、CS、IP(80 x86)已经被压入了堆栈(在其他硬件环境下应是不同的寄存器),而ISR服务程序首先需将其他的寄存器也压入堆栈,所以不需要再去保存环境,所以中断中任务切换和非中断的情况下是不同的。5.用户时钟中断服务程序OSTickISRuser。用户时钟中断服务程序也就是时钟节拍服务程序,是系统的心脏跳动。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/
8、嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.1.3 C/OS-II移植步骤移植步骤1.选择合适的开发软件,为C/OS-II操作系统建立一目录,将操作系统内核代码拷贝到一个目录,最好是该目录下一个子目录。2.在该目录下创建工程。加入C/OS-II内核文件到这个工程。3.建立主程序,如main.c。在主文件中编写TaskStart代码,该代码能设置定时器中断。在主文件中声明用户堆栈数组,创建用户堆栈。主程序中的入口函数应先执行操作系统初始化函数os_init,然后使用OsTaskCreate或OsTaskCreateExt创建TaskStart。之后如果有用户任务应使用OsTask
9、Create或OsTaskCreateExt创建所有用户任务。然后调用OSStart()启动多任务。注意TaskStart的优先级必须是最高的。4.根据7.1.2中对os_cpu.h的说明,根据用户硬件环境修改os_cpu.h。5.根据7.1.2中对os_cpu.c的说明,根据用户硬件环境修改os_cpu.c。6.编译,下载到硬件运行,查看结果和进行修改,直到成功。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.2 在在VC6上实现基于上实现基于Windows的虚拟的虚拟C/OS-II移植移植 作者卢有亮
10、作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践代码修改代码修改表7.6 移植代码os_cpu.h解析os_cpu.c中修改的代码 1.堆栈初始化堆栈初始化OSTaskStkInit代码实现代码实现 表7.7 堆栈初始化函数OSTaskStkInit在虚拟
11、平台下的移植2.启动高优先级任务启动高优先级任务OSStartHighRdy代码实现代码实现 表7.8 启动高优先级任务函数OSStartHighRdy在虚拟平台下的移植 3.任务切换任务切换OSCtxSw代码实现代码实现 表7.9 OS_TASK_SW在虚拟平台下的移植4.中断中的任务切换中断中的任务切换OSIntCtxSw代码实现代码实现 表7.10 OSIntCtxSw 在虚拟平台下的移植5.时钟中断服务时钟中断服务OSTickISRuser代码实现代码实现 表7.11 OSTickISRuser 在虚拟平台下的移植6.主程序代码实现主程序代码实现 表7.12虚拟平台下的移植中主程序的实
12、现表7.12虚拟平台下的移植中主程序的实现作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.3 在基于在基于NIOS软核的软核的FPGA嵌入式系统下的嵌入式系统下的C/OS-II移植移植 大规模可编程逻辑器件FPGA开发技术已经成为我们这个时代先进的和普遍应用的技术。在QUARTUS下可以编写硬件描述语言Verilog或其他语言实现对FPGA的编程,这是所谓的纯硬件设计。除此之外,在FPGA的内部可以采用SOPC技术编制CPU,即NIOS-II处理器,并在NOIS IDE应用程序环境下编写C和汇编软件,实现
13、类似于带有处理器和存储器的系统的编程,这就是软核技术。在软核下,一些需要提供快速处理的子功能同样可以用硬件实现,而软核的优点在于便于实现比较复杂的功能。而软核下最显著的优势就在于移植嵌入式操作系统。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.3.1系统结构系统结构系统结构包含系统整体硬件的结构和系统CPU的结构。实际上硬件包含了FPGA及其他的接口和功能器件,集中在电路板上,这一部分将给出原理框图;另外,使用SOPC技术在FPGA内部设计NIOS-II处理器。作者卢有亮作者卢有亮 图书图书PPT和全部
14、代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.3.1系统结构系统结构NIOS-II CPU的设计 作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.3.1系统结构系统结构Quartus II 8.1下的整体结构设计 作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.3.2 NIOS II寄存器寄存器作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:
15、/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.3.2 NIOS II寄存器寄存器作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践7.3.3 os_cpu.h的移植代码的移植代码表7.15INCLUDES.H的移植代码7.3.4 os_cpu.c的移植代码的移植代码表7.16 os_cpu.c的移植代码 7.3.5 os_cpu.s的移植代码的移植代码表7.16 os_cpu.s的移植代码 作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实
16、践嵌入式实时操作系统原理与实践7.3.6 工程的创建和移植测试工程的创建和移植测试 在在NIOS下,最方便的方法是直接创建一个下,最方便的方法是直接创建一个C/OS-II的工程。如下图,选择我们编的工程。如下图,选择我们编译好的硬件系统文件译好的硬件系统文件niostestreal.ptf,并在,并在Name域给工程命名,然后按域给工程命名,然后按“Finish”即可。即可。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时
17、操作系统原理与实践嵌入式实时操作系统原理与实践这时候,NIOS已为C/OS-II系统构建了环境,这体现了NIOS与C/OS-II的良好接口,我们将C/OS-II 2.91版的操作系统C文件复制到“D:altera81nios2edscomponentsmicrium_uc_osiiUCOSIIsrc”目录,将头文件复制到“D:altera81nios2edscomponentsmicrium_uc_osiiUCOSIIinc”目录。然后编写主文件表7.18包含测试任务的主程序代码运行结果如图作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践习题习题1.操作系统移植部分需要改动的代码有哪些,为什么。操作系统移植部分需要改动的代码有哪些,为什么。2.论述操作系统移植的步骤。论述操作系统移植的步骤。3.论述将操作系统移植到软核论述将操作系统移植到软核FPGA系统的过程。系统的过程。4.在在FPGA上构建软核,移植操作系统,实现本书中信号上构建软核,移植操作系统,实现本书中信号量管理和邮箱管理的例程。量管理和邮箱管理的例程。5.FPGA上构建软核,移植操作系统,实现频率为上构建软核,移植操作系统,实现频率为10赫兹赫兹的的LED流水灯。(从左到右再从右到左)流水灯。(从左到右再从右到左)
限制150内