当前位置:首页 > 单片机 > 单片机
[导读] 怀着好奇的心情在网上搜索关于UCOSII移植到51单片机的资料,步骤都是一样的,好多都是转载、转载,但是具体的内容并没有说清楚,好不容易搜到一个把移植过程说的很清楚的帖子,但是后面又说编译和运行过程中出现

怀着好奇的心情在网上搜索关于UCOSII移植到51单片机的资料,步骤都是一样的,好多都是转载、转载,但是具体的内容并没有说清楚,好不容易搜到一个把移植过程说的很清楚的帖子,但是后面又说编译和运行过程中出现很多问题,我又绝望了。因为之前对51单片机只是简单的学了一下,对于移植UCOSII系统,还是得花点功夫的。由于我快毕业了,如果专研于UCOSII移植到51单片机,又得花上我一周的时间,想想那我的移动机器人得多久才能成功啊,于是,在CSDN上下载已经移植到51单片机上的源代码,起初我只是试着下来学习一下,学习怎样编写那些与cpu有关的函数的,我下载的那个源代码是将UCOSII移植到AT91系列上的,我果断编译了一下,成功编译,看一下输出的hex文件,才19kb。果然我又对源代码产生兴趣。我从始至终还是没有靠自己一步一步的将原版的UCOSII移植到51单片机上。我下面说说移植UCOSII需要做哪些工作吧,也是看书知道的。


一、准备工作


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 "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() */



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭