如何将UCOSII移植到51单片机上

发布时间:2023-07-26  

一、准备工作

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

如何将UCOSII移植到51单片机上

以上这些文件在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 “uCosiios_cpu.h”

#include “uCosiios_cfg.h”

#include “uCosiiucos_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() */


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>