ucosII 移植
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 启动文件和目标板配置文件
3.1 startup_ewarm.c文件
• Target目录中startup_ewarm.c文件是微控 制器的启动代码和中断向量表,用户要做 其中加入需要的终端服务函数首地址。 • ARM Contex-M3从地址0x00000000开始存 放一张异常向量表,每个目录存放对应的 异常或中断处理程序的入口地址。
说明: 1.3 OS_CPU.H 文件
• OS_CPU.H中包含与编译器相关的数据类 型定义和与处理器相关的常量、宏以及类 型的定义。如:
1. 数据类型定义:使用数据定义之前,应参 考所使用的C编译器手册,找到所使用的 类型定义。注意到语句(1.1)和(1.2), 由于ARM处理器的一条堆栈记录总是32位 的,状态寄存器也是32位的,所以应该像 图中所示相应地声明。
1.4 OS_CPU_C.C文件
Hook函数的功能就是扩展ucos操作系统的功能,这十个函 数中最重要的是任务堆栈初始化函数OSTaskStkInit()。其 他的Hook函数可以不包含代码,但必须声明。
1.4.1 OSTaskStkInit()
OS_STK *OSTaskStkInit (void (*task)(void *parg), void *parg, OS_STK *ptos, INT16U opt) { OS_STK *stk; *(--stk) = (INT32U)0x01010101L; /* R1 */ (void)opt; = (INT32U)parg;/* 'opt' is not used, prevent /* R0 : argument 输入参 */ *(--stk) /* warning 没有用'opt', */ 数 */ /* 防止编译警告 */ /* Remaining registers saved on*/ stk = ptos; /* Load stack pointer /* process stack */ */ /* 装载堆栈指针 */ /* 剩下的寄存器保存到堆栈 */ /* Registers stacked as if /* R11 */ *(--stk) = (INT32U)0x11111111L; */ /* auto-saved on exception */ R10 *(--stk) = (INT32U)0x10101010L; /* */ /* 模拟成异常,自动把寄存器压栈*/ *(--stk) = (INT32U)0x09090909L; /* R9 */ *(stk) = (INT32U)0x01000000L; /* xPSR /* R8 */ *(--stk) = (INT32U)0x08080808L; */ *(--stk) = (INT32U)task; Point *(--stk) = (INT32U)0x07070707L; /* Entry/* R7 of the task */ */ /* 任务入口地址 */ *(--stk) = (INT32U)0x06060606L; /* R6 */ *(--stk) = (INT32U)0xFFFFFFFEL; /* R14 (LR) (init value will */ *(--stk) = (INT32U)0x05050505L; /* R5 */ /* cause fault if ever used) */ *(--stk) = (INT32U)0x04040404L; /* R4 */ *(--stk) = (INT32U)0x12121212L; /* R12 */ return(stk); /* R3 */ }*(--stk) = (INT32U)0x03030303L; *(--stk) = (INT32U)0x02020202L; /* R2 */
μC/OS-II移植
μC/OS-II正常运行,处理器必须满 足以下条件:
处理器的C编译器能产生可重入型代码; 用C语言就可以使能和禁止中断; 处理器支持中断,并且能产生定时中断 处理器能支持容纳一定量数据存储的硬件 堆栈; 5. 处理器包含能操作堆栈的指令,可把CPU 寄存器的内容读出并保存到堆栈或内存中。 1. 2. 3. 4.
1.3 OS_CPU.H 文件
2. μC/OS-II操作系统需要临界区的管理, μC/OS-II提供了3种方法以在进入临 界区前,禁止所有可能破坏临界代码 3. 由于ARM Cortex-M3的堆栈都是从高地 执行的中断。但在本移植中定义了4 址向低地址生长,所以设置为1,否则 中,详见OS_CUP_A.ASM中。 设置为0。 4. 定义OS_TASK_SW()上下文切换宏实际 上是调用了函数OSCtxSw()。 5. 定义了开关中断的函数原型和其他函数 原型。
1.1 一直代码说明
1.2 includes.h文件
• μC/OS-II中可以用includes.h文件将所有文 件包含进去,可以使用如下语句轻松解决: • #include”includes.h” • 该文件位于用户目录中: \lm3s_ μC/OS-II\ μC/OS-II\Users • 这种方式方便,但会包含一些不相关的头 文件而增加编译时间。
startup_Байду номын сангаасwarm.c文件
3.2 target.h文件
• 这部分可以根据目标板改写。
3.3 Target.c文件
• 此文件主要实现了Target.H中声明的各个 API函数。 Target.H和Target.c提供微控制 器初始化函数targetInit()和其他简单的外 设控制API函数,包括LED控制、蜂鸣器控 制、按键检测和定时器0中断服务等,以方 便用户调试程序。