• Ucos_II2.52源码中文译注


    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参数无效;

  • 相关阅读:
    python(day1-11)
    如何进行测试管理
    为什么你参加了那么多培训,却依然表现平平?
    数据库总结
    为何大量网站不能抓取?爬虫突破封禁的6种常见方法
    re--读书笔记【转】
    re--findall 【转】
    re--参考手册
    bs4--官文--遍历文档树
    rhel6+apache2.4+mysql5.7+php5.6部署LAMP架构
  • 原文地址:https://www.cnblogs.com/fengyv/p/3033590.html
Copyright © 2020-2023  润新知