嵌入式实时操作系统μcos原理与实践7.pptVIP

  • 1
  • 0
  • 约3.99千字
  • 约 22页
  • 2021-01-03 发布于天津
  • 举报

嵌入式实时操作系统μcos原理与实践7.ppt

《嵌入式实时操作系统原理与实践》 嵌入式实时操作系统 μC/OS原理与实践 教材:嵌入式实时操作系统 μC/OS 原理与实践 电子工业出版社 luyl@ 作者卢有亮 图书 PPT 和全部代码下载 /15441 第 7 章 移植 ? 7.1 移植说明 ? 7.2 在 VC6 上实现基于 Windows 的虚拟 μC/OS -II 移植 ? 7.3 在基于 NIOS 软核的 FPGA 嵌入式系统下 的 μC/OS -II 移植 ? 习题 7.1 移植说明 μC/OS -II 作为嵌入式实时操作系统,最终要应用在嵌入式系统上,如单片 机、 ARM 、 FPGA 、 DSP 等。本章中首先给出的就是说明如何移植到虚拟 WINDOWS 平台。接下来就是在一个实际的嵌入式系统,基于软核的 FPGA 系统下的移植。在掌握了这两个平台的移植后,移植到其他的平台 都是不难实现。 7.1.1 μC/OS -II 的代码结构 与 CPU 无关的代码 操作系统配置文件 os_config.h 操作系统头文件 内核代码 任务管理 时间管理 信号量管理 互斥信号量管理 消息邮箱管理 消息队列管理 事件标志组管理 内存管理 定时器管理 ucos_ii.h os_core.c os_task.c os_time.c os_sem.c os_mutex.c os_mbox.c os_q.c os_flag.c os_mem.c os_tmr.c 与 CPU 相关的代码 处理器相关头文件 处理器相关 C 代码 处理器相关汇编代码 os_cpu.h os_cpu.c os_cpu_a.asm 移植必看的重要代码: 1. 操作系统配置文件 os_config.h 2. 操作系统头文件 ucos_ii.h 3. 操作系统内核 C 文件 4. 与 CPU 相关代码部分 7.1.2 操作系统中与 CPU 相关的代码解析 头文件 os_cpu.h 表 7.2os_cpu.h 定义的数据类型 表 7.3 os_cpu.h 除类型定义外的其他代码示例 进入临界区有三种方法 : 方法 1 :定义一个全局变量 FlagEn ,进入临界区时中断服务程序判定该值 为 0 ,就不进行中断服务。离开临界区时将 FlagEn 置 1 。这种方法只在虚拟 平台上使用时使用。其缺点是不能进行中断嵌套。 方法 2 : OS_ENTER_CRITICAL() 时将 CPU 状态寄存器(如 PSW )入栈, 关中断,定时器中断被禁止。 OS_EXIT_CRITICAL() 时退栈即可恢复 CPU 状态寄存器的值,这样中断也恢复到了原来的状态。 方法 3 : OS_ENTER_CRITICAL() 时将 CPU 状态寄存器(如 PSW )的值保 存到局部变量,关中断,定时器中断被禁止。 OS_EXIT_CRITICAL() 时从 局部变量恢复 CPU 状态寄存器的值,这样中断也恢复到了原来的状态。这 需要编译器支持处理状态寄存器的值的函数。 包含汇编的 C 文件 os_cpu.c 1.OSTaskStkInit 是由 OSTaskCreate 或 OSTaskCreateExt 在创建任务的时 2.OSStartHighRdy 在多任务启动函数 OSStart 中被调用。这时候没有任务 3.OSCtxSw 是非中断处理情况下的任务切换函数。它在任务被阻塞、删除、 4. OSIntCtxSw 是中断处理情况下的任务切换函数。例如系统的每 10 毫秒进 候,在对控制块进行初始化之前,对任务堆栈进行初始化时调用。它实现 5. 用户时钟中断服务程序 OSTickISRuser 。用户时钟中断服务程序也就是时 在运行, OSStartHighRdy 开始启动多任务。在 OSStartHighRdy 运行前, 创建等多种情况下被调用。直接调用它的函数就是 OS_Sched 。 行时钟中断,那么都要使用它进行任务切换。因为在中断产生后,所以 的功能是将任务参数地址、任务函数入口地址、各 CPU 寄存器地址压入任 钟节拍服务程序,是系统的心脏跳动。 指向优先级最高的就绪任务的 OSStart 已将任务控制块指针 OSTCBCur TCB , PSW 、 CS 、 IP ( 80x86 )已经被压入了堆栈 ( 在其他硬件环境下应是不同的 务堆栈。需要注意的是,虽然这时候任务还没有运行过,不需要保存当前 OSStartHighRdy 首先将 OSR

文档评论(0)

1亿VIP精品文档

相关文档