51单片机成功运行UCOSII实时操作系统

2017-01-06 14:19:27来源: eefocus 关键字:51单片机  运行UCOSII  实时操作系统

         怀着好奇的心情在网上搜索关于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    "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()                            */



[1] [2] [3] [4] [5] [6]

关键字:51单片机  运行UCOSII  实时操作系统

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2017010633028.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STC89C52单片机内部EEPROM驱动
下一篇:最后一页

论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
51单片机
运行UCOSII
实时操作系统

小广播

独家专题更多

迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved