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
实时操作系统

小广播

独家专题更多

TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 

何立民专栏

单片机及嵌入式宝典

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

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