网站大量收购闲置独家精品文档,联系QQ:2885784924

μcos移植分析.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UC/OS-II的启动过程和在ARM7上的移植 主讲:王华斌 一、UC/OS-II的启动过程 典型启动过程如下: 1、程序进入main函数以后,首先执行 OSInit()函数,来初始化OS所有的变量 和数据结构。同时OSInit还创建空闲任 务和统计任务。 2、在初始化之后,用户至少要创建 一个任务,来保证多任务系统的正确 启动,另外,用户还可以在此创建其 他系统资源,如信号量、邮箱等,或 者可能用户还需要在此完成UC运行环 境的一些初始化工作,如系统时间的 设置、处理器的设置、外围器件的设置等。 3、在上述工作完成之后,程序调用OSStart函数来启动多任务操作系统,此函数将启动已经创建的任务中的处于就绪态的优先级最高的任务。 在该任务中,用户 需要启动时钟节拍、可以 初始化统计任务、创建其 他任务、信号量、邮箱等 然后进入无线循环的函数 主体。 程序范例: OS_STK Task1Stk[1024]; OS_STK Task2Stk[1024]; Void main() { OSInit(); //初始化UC/OS-II OSTaskCreate(Task1, (void *)0, Task1Stk[1023], 0); //创建任务1 OSTimeSet(0); //设置系统时间 OSStart(); //启动 } Static void Task1(void *p_arg) { INT8U err; (void) p_arg; //去除编译器报警错误 System_Init(); //硬件系统设置 TickTimerStart(); //启动Tick OSTaskCreate(Task2, (void *)0, Task2Stk[1023], 10); //创建任务1 OSStatInit() // 初始化统计任务 for( ; ; ) //进入无限循环 { …… }; } 二、UC/OS-II的移植 1、UC/OS-II的体系结构 a、处理器无关的代码 提供了OS大部分的资源,实现了任务管理、时 间管理等功能; b、处理器相关的代码 移植的重点,它提供了OS和硬件平台的接口, 操作系统运行过程中需要的一些操作,如任务切换时 的堆栈操作等,都在这部分代码中实现; c、系统配置代码 定义了一些配置UC的选项。 2、移植条件 UC/OS-II并不是能移植到所有处理器上,它要求目标处理器必须满足一定的条件: (1)处理器的C编译器能产生可重入代码 (2)支持使用C语言来打开和禁止中断 (3)处理器支持中断,并且能产生定时中断 (4)支持能够容纳一定数量的硬件堆栈 (5)处理器有将堆栈指针和其它CPU寄存器读出并存储到堆栈或内存中的指令。 尽管目前大部分处理器都满足以上5个条件,但是在移植之前,用户有必要进行仔细确认。 3、移植内容 涉及3个文件 (1)OS_CPU.H 处理器相关数据类型的定义,3个宏定义(中断开关、堆栈属性和任务切换) (2)OS_CPU_C.C 主要是任务堆栈初始化和OS功能扩展等函数。 (3)OS_CPU_A.ASM 编写4个汇编程序,完成任务执行、任务切换、Tick时钟、ISR的相关处理。 (1)OS_CPU.H 编译器相关的数据类型定义 为了移植方便,UC/OS-II没有直接采样编译器相关的数据类型定义,如short\int\long等,而是通过typedef定义了统一的数据类型,如INT16U数据类型总是代表16位的无符号整数。 typedef unsigned char BOOLEAN; typedef unsigned char INT8U; /* 无符号8位数*/ typedef signed char INT8S; /* 带符号8位数 */ typedef unsigned short INT16U; /* 无符号16位数 */ typedef signed short INT16S; /* 带符号16位数 */ typedef unsigned int INT32U;

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档