一、准备工作
1. 开发环境: Keil C集成开发环境
2. 源代码:UCOSII的源代码,网上可以自己下载
3. 文件分析:
1)UCOSII文件中与处理器无关的文件:
OS_CORE.C
OS_FLAG.C
OS_MBOX.C
OS_MEM.C
OS_MUTEX.C
OS_Q.C
OS_SEM.C
OS_TASK.C
OS_TIME.C
UCOS_II.C
UCOS_II.H
以上这些文件在c51移植过程中只需给函数加上可重入性即可,即在每个函数后面添加关键字:reentrant
2)与应用相关的文件:
INCLUDES.H——其中包含51单片机头文件和相关应用头文件
OS_CFG.H——这个文件对于要应用系统中的相关工具,如邮箱,信号等,都要在这个头文件中把相关宏设置为1
3)与处理器相关的文件:
OS_CPU.H——相关的数据类型、关中断、任务堆栈方向、任务切换宏定义等
OS_CPU_A.ASM——一堆的汇编和伪指令,我表示没去深究,但是是整个移植的关键所在
OS_CPU_C.C——OSTaskStkInit()函数和系统中断定时器的编写。
还有一个重要的思想就是c51堆栈的设计,我对于这个有点头大,不清楚。
二、开始修改和编写代码移植。
我没有经历过移植的过程,所以我没有发言权,我只参考51单片机牛人的代码,学着应用就行
由于在CSDN上忘记移植者是谁了,我在这将重要文件中的代码贴出参考参考,只做交流使用。
includes.h
#ifndef __INCLUDES__
#define __INCLUDES__
#include “uCosii\os_cpu.h”
#include “uCosii\os_cfg.h”
#include “uCosii\ucos_ii.h”
#include“reg51.h”
#endif
OS_CFG.H
#ifndef __OS_CFG_H
#define __OS_CFG_H
#define MaxStkSize 64 /*根据修改,每个任务使用同样大小的堆栈,这就是每个堆栈的大小*/
#define OS_MAX_EVENTS 1 /* Max. number of event control blocks in your applicaTIon 。.. */
/* 。.. MUST be 》 0 */
#define OS_MAX_FLAGS 1 /* Max. number of Event Flag Groups in your applicaTIon 。.. */
/* 。.. MUST be 》 0 */
#define OS_MAX_MEM_PART 1 /* Max. number of memory parTItions 。.. */
/* 。.. MUST be 》 0 */
#define OS_MAX_QS 1 /* Max. number of queue control blocks in your application 。.. */
/* 。.. MUST be 》 0 */
#define OS_MAX_TASKS 3 /* Max. number of tasks in your application 。.. */
/* 。.. MUST be 》= 2 */
#define OS_LOWEST_PRIO 4 /* Defines the lowest priority that can be assigned 。.. */
/* 。.. MUST NEVER be higher than 63! */
#define OS_TASK_IDLE_STK_SIZE MaxStkSize /* Idle task stack size (# of OS_STK wide entries),使用相同的栈大小*/
#define OS_TASK_STAT_EN 0 /* Enable (1) or Disable(0) the statistics task */
#define OS_TASK_STAT_STK_SIZE MaxStkSize /* Statistics task stack size (# of OS_STK wide entries),使用相同的栈大小*/
#define OS_ARG_CHK_EN 0 /* Enable (1) or Disable (0) argument checking */
#define OS_CPU_HOOKS_EN 1 /* uC/OS-II hooks are found in the processor port files */
/* ----------------------- EVENT FLAGS ------------------------ */
#define OS_FLAG_EN 0 /* Enable (1) or Disable (0) code generation for EVENT FLAGS */
#define OS_FLAG_WAIT_CLR_EN 0 /* Include code for Wait on Clear EVENT FLAGS */
#define OS_FLAG_ACCEPT_EN 0 /* Include code for OSFlagAccept() */
#define OS_FLAG_DEL_EN 0 /* Include code for OSFlagDel() */
#define OS_FLAG_QUERY_EN 0 /* Include code for OSFlagQuery() */
/* -------------------- MESSAGE MAILBOXES --------------------- */
#define OS_MBOX_EN 1 /* Enable (1) or Disable (0) code generation for MAILBOXES */
#define OS_MBOX_ACCEPT_EN 0 /* Include code for OSMboxAccept() */
#define OS_MBOX_DEL_EN 0 /* Include code for OSMboxDel() */
#define OS_MBOX_POST_EN 1 /* Include code for OSMboxPost() */
#define OS_MBOX_POST_OPT_EN 0 /* Include code for OSMboxPostOpt() */
#define OS_MBOX_QUERY_EN 0 /* Include code for OSMboxQuery() */
/* --------------------- MEMORY MANAGEMENT -------------------- */
#define OS_MEM_EN 0 /* Enable (1) or Disable (0) code generation for MEMORY MANAGER */
#define OS_MEM_QUERY_EN 0 /* Include code for OSMemQuery() */