好文档 - 专业文书写作范文服务资料分享网站

Ucos - II2.52源码中文译注

天下 分享 时间: 加入收藏 我要投稿 点赞

作者: 钟常慰

Ucos_II2.52是一份非常完美的嵌入式开发系统,在学习ARM的基础上,嵌入ucos系统并增加自己的源码是一件不错的选择,目前在市面上已经有了大量的ucos嵌入案例,特别是在arm和dsp的应用当中,已经成为一种主流,虽然和其它的嵌入式系统相比,ucos不是很完善,如没有内存分配、任务级别不多;但却是一个代码简短、条理清晰、实时性及安全性能很高的嵌入式操作系统。

Ucos_II2.52对比2.8版的256个任务而言,任务数量相比过少,但却是目前应用量最大的一个版本,相对而言,能够满足我们的基本要求,而且增加了很多消息处理,特别是在优先级别方面,具有不可比拟的优势;我曾试图阅读ecos的源码,但还是失败了,还有挑战linux0.01版源码的想法,最终我不能不被屈服;对于Ucos而言,很多入门者是一个福音,因为它的代码非常的少,而且能够对应贝贝老师的书本直接参考,他的书本对结构方面讲解的极为xian详细。

在学习Ucos的整个过程中,E文的理解是一个致命的打击,原因是我的E文水平很差,不过Ucos还是给了我尝试的动力,在作者的原基础上增加中文译码,也许是一件非常不错的选择,相信在中国和我这种水平的人多不胜数,中文的注解对源码而言,能够具有极高的理解价值,可以在极短的时间内,能够充分了解ucos的真正含义。

整个翻译过程历时4个月,每每在寒冬腊月坐在计算机前面,不断的查阅贝贝老师的书来对整个Ucos进行理解,对每个源码进行逐条翻译,也是一件非常需要勇气的事情,但E文的翻译过程中很多变量是不能完全理解的,所以在翻译过程中不乏错误译文很多,于此带来的错误还请读者纠正,相信克服种种困难一定会有所了解的。

对于经济窘迫的我来说,曾试图希望卖一点资料来养家糊口,但这种做法根本不现实,很多的读者可能和我一样,习惯了拿不收费的资料,并对变相收费有一种深恶痛绝的感觉;想了很多决定还是把它贡献出来,让更多的人来(更容易)了解ucos,贡献自己的一点力量。

希望更多的人能加入这种高尚的学习氛围当中来,共同的来把一套完整的U系列源码译文早一日与我们分享,祝愿大家能够早日实现自己的梦想。

/*

*************************************************************************************************

* uC/OS-II实时控制内核 * 主要的包含文件 * 文 件: uCOS_II.H ucos内部函数参数设定 * 作 者: Jean J. Labrosse

* 中文注解: 钟常慰 zhongcw @ 126.com 译注版本:1.0 请尊重原版内容

************************************************************************************************* */

/*

*************************************************************************************************

* 混杂的设定

************************************************************************************************* */

#define OS_VERSION 251 // 定义uC/OS-II版本号

#ifdef OS_GLOBALS //如果 OS_GLOBALS 已被声明定义, 紧随代码将会被编译

#define OS_EXT //则定义 OS_EXT #else

#define OS_EXT extern //否则,定义 OS_EXT 为 extern #endif

#ifndef FALSE //是否未定义 FALSE #define FALSE 0 //如果是则定义 FALSE 为 0 #endif

#ifndef TRUE //是否未定义 TRUE #define TRUE 1 //如果是则定义 TRUE 为 1 #endif

#define OS_PRIO_SELF 0xFF //定义 OS_PRIO_SELF 为 0xFF #if OS_TASK_STAT_EN > 0

#define OS_N_SYS_TASKS 2 //任务体系号码 #else

#define OS_N_SYS_TASKS 1 #endif

#define OS_STAT_PRIO (OS_LOWEST_PRIO - 1) //统计任务优先级 #define OS_IDLE_PRIO (OS_LOWEST_PRIO) //空闲任务优先级

#define OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) //事件列表字节 #define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) //就绪列表字节

#define OS_TASK_IDLE_ID 65535 /* I.D. numbers for Idle and Stat tasks */

#define OS_TASK_STAT_ID 65534

#define OS_EVENT_EN (((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0))

/*$PAGE*/ /*

*********************************************************************************************************

* 任务状态字 TASK STATUS (字节定义在 OSTCBStat中)

********************************************************************************************************* */

#define OS_STAT_RDY 0x00 // (将任务的状态字)处于完毕状态 #define OS_STAT_SEM 0x01 // (将任务的状态字)处于SEM状态 #define OS_STAT_MBOX 0x02 // (将任务的状态字)处于MBOX状态 #define OS_STAT_Q 0x04 // (将任务的状态字)处于Q状态

#define OS_STAT_SUSPEND 0x08 // 表示任务被挂起

#define OS_STAT_MUTEX 0x10 // (将任务的状态字)处于MUTEX状态 #define OS_STAT_FLAG 0x20 // (将任务的状态字)处于FLAG状态

/*

*********************************************************************************************************

* 事件类型(OS_EVENT types)

********************************************************************************************************* */

#define OS_EVENT_TYPE_UNUSED 0 // 定义事件类型的种类(无事件类型------------0) #define OS_EVENT_TYPE_MBOX 1 // 定义事件类型的种类(邮箱为数字序列--------1) #define OS_EVENT_TYPE_Q 2 // 定义事件类型的种类(消息队列为数字序列----2) #define OS_EVENT_TYPE_SEM 3 // 定义事件类型的种类(信号量为数字序列------3) #define OS_EVENT_TYPE_MUTEX 4 // 定义事件类型的种类(互斥型信号量为数字序列4)

#define OS_EVENT_TYPE_FLAG 5 // 定义事件类型的种类(事件标志组为数字序列--5)

/*

********************************************************************************************************* * 事件标志(EVENT FLAGS)

********************************************************************************************************* */

#define OS_FLAG_WAIT_CLR_ALL 0 // 定义所有指定事件标志位清0 ------ 0 #define OS_FLAG_WAIT_CLR_AND 0 // 同上一样

#define OS_FLAG_WAIT_CLR_ANY 1 // 定义任意指定事件标志位清0 ------ 1 #define OS_FLAG_WAIT_CLR_OR 1 // 同上一样

#define OS_FLAG_WAIT_SET_ALL 2 // 定义所有指定事件标志位置1 ------ 2 #define OS_FLAG_WAIT_SET_AND 2 // 同上一样

#define OS_FLAG_WAIT_SET_ANY 3 // 定义任意指定事件标志位置1 ------ 3 #define OS_FLAG_WAIT_SET_OR 3 // 同上一样

// 如果需要在得到期望标志后,恢复该事件标志,加入此常量

#define OS_FLAG_CONSUME 0x80 // 定义常量OS_FLAG_CONSUME为0x80 #define OS_FLAG_CLR 0 // 定义 OS_FLAG_CLR 为清0 #define OS_FLAG_SET 1 // 定义 OS_FLAG_SET 为置1

/*

*********************************************************************************************************

* 设置字在'opt'中,适用于 OSSemDel(), OSMboxDel(), OSQDel() 和 OSMutexDel()函数 ********************************************************************************************************* */

#define OS_DEL_NO_PEND 0 // 可以选择只能在已经没有任何任务在等待该信号量时,才能删除该信号量

#define OS_DEL_ALWAYS 1 // 不管有没有任务在等待该信号量,立即删除该信号量

/*

*********************************************************************************************************

* OS???PostOpt() OPTIONS(设置) *

* 这个设置适用用 OSMboxPostOpt() 和 OSQPostOpt()两个函数.

********************************************************************************************************* */

#define OS_POST_OPT_NONE 0x00 // 发送一个消息(或邮箱)给一个等待消息的任务 #define OS_POST_OPT_BROADCAST 0x01 // 发送消息给所有等待队列消息的任务*/ #define OS_POST_OPT_FRONT 0x02 // 以后进先出方式发消息(仿真OSQPostFront())

/*

*********************************************************************************************************

* 任务设置 TASK OPTIONS (查看OSTaskCreateExt())

********************************************************************************************************* */

#define OS_TASK_OPT_STK_CHK 0x0001 // 决定是否进行任务堆栈检查 #define OS_TASK_OPT_STK_CLR 0x0002 // 决定是否清空堆栈

#define OS_TASK_OPT_SAVE_FP 0x0004 // 决定是否保存浮点寄存器的数值。此项操作仅当处理器有浮点硬-

// 件时有效。保存操作由硬件相关的代码完成 /*

********************************************************************************************************* * 错误代码 ERROR CODES

********************************************************************************************************* */

#define OS_NO_ERR 0 // 函数返回成功;

#define OS_ERR_EVENT_TYPE 1 // 不是指向事件(相关)类型的指针;

#define OS_ERR_PEND_ISR 2 // 在中断服务子程序中调用 OS各种信号类Accept()函数.

#define OS_ERR_POST_NULL_PTR 3 // 用户发出空指针。根据规则,这里不支持空指针; #define OS_ERR_PEVENT_NULL 4 // 'pevent'是指空指针;

#define OS_ERR_POST_ISR 5 // 试图在中断服务子程序中调用OSMutexPost()函数[释放一个mutex];

#define OS_ERR_QUERY_ISR 6 // 试图在中断子程序中调用OSMutexQuery()[得到mutex当前状态信息]

#define OS_ERR_INVALID_OPT 7 // 定义的opt参数无效;

Ucos - II2.52源码中文译注

作者:钟常慰Ucos_II2.52是一份非常完美的嵌入式开发系统,在学习ARM的基础上,嵌入ucos系统并增加自己的源码是一件不错的选择,目前在市面上已经有了大量的ucos嵌入案例,特别是在arm和dsp的应用当中,已经成为一种主流,虽然和其它的嵌入式系统相比,ucos不是很完善,如没有内存分配、任务级别不多;但却是一个代码简短、条理清晰、实时性及安全性能很高的嵌入式操作系
推荐度:
点击下载文档文档为doc格式
3rfgf33p5w3gznb0fxdn
领取福利

微信扫码领取福利

微信扫码分享