• 从移植的角度看uC/OSII发展变化


    ean J. Labrosse所著《MicroC / OS-II: The Real Time Kernel (Second Edition)(一下简称“宝书”)是基于1999年发布的2.00版本,目前uC/OS-II发展到了2.90(2010年发布),其自身已经发生了很大的变化。当移植新版本uC/OS-II时,会发现很多需要移植的声明、定义、函数等等已经不符合书中介绍的情况和方法了。在这里尝试做一个简单的比较和说明,以便能进一步简化和了解uC/OS-II的移植。本文只阐述涉及移植方面的变化,其它关于新功能、新函数以及各类优化的描述见另文。

    1uC/OS-II中断使能状态的保存

    除了宝书中定义的两种方法,从2.04版开始使用了第三种方法,即将中断使能状态保存在一个临时变量cpu_sr中,并且在OS_CPU.H中定义宏如下:

    #if OS_CRITICAL_METHOD == 3

    #define OS_ENTER_CRITICAL()     cpu_sr = OS_CPU_SR_Save())

    #define OS_EXIT_CRITICAL()      OS_CPU_SR_Restore(cpu_sr))

    #endif

    所以不要忘记实现函数OS_CPU_SR_Save()OS_CPU_SR_Restore()

    2新文件

    2.00版相比uC/OS-II陆续增加了3个新文件。一个是OS_TMR.C,这是一个和处理器无关的内核文件,移植时加到工程/项目中即可。第二个是OS_DBG.C,其中定义了一系列的变量,用于内核调试器(Kernel Aware Debugger),可以按照实际使用情况决定是否包含此文件。第三个文件是APP_CFG.H,建议将用户任务级别,任务堆栈大小的定义放到这个文件中。

    为了方便,uC/OS-II提供了2个原始模板文件OS_CFG_R.HOS_DBG_R.C使用时拷贝成不带_R后缀的文件然后按照使用要求再行修改。

    3新常量

    除了要按照硬件平台具体情况定义OS_TICKS_PER_SEC常量外,还要定义常量OS_TMR_CFG_TICKS_PER_SEC它决定了timer的更新速率。建议值是10也就是100ms更新一次timer

     

    4新函数

    uC/OS-II发展到2.90后,用户要自定义一系列钩子函数,当然在需要使用的情况下

    void App_TaskCreateHook(OS_TCB *ptcb);

    void App_TaskDelHook(OS_TCB *ptcb);

    void App_TaskIdleHook(void);

    void App_TaskReturnHook(OS_TCB *ptcb);

    void App_TaskStatHook(void);

    void App_TaskSwHook(void);

    void App_TCBInitHook(OS_TCB *ptcb);

    void App_TimeTickHook(void);

    void OSTaskReturnHook(OS_TCB *ptcb);

    5.移植实例

    移植的uC/OS-II版本号为2.91,编译环境为WinAVR-20100110

    硬件平台是一个ATmega644最小系统。一个用来显示多任务运行情况的LED接到PB1,另外还利用了644UART来输出当前CPU占用率。644外部晶振14.7456MHz,系统Timetick设置为17.7ms

     

    所有源程序连接如下:

    http://pan.baidu.com/share/link?shareid=130984&uk=1093185800

  • 相关阅读:
    npm --save-dev 与 --save 的区别
    Vue 简单实例 购物车2
    Vue 简单实例 购物车1
    node.js富文本编辑器
    使用jquery操作session
    浏览器窗口之间传递数据
    批量修改文件编码格式
    具有动态效果的响应式设计
    Ajax请求全局配置
    html实体转换
  • 原文地址:https://www.cnblogs.com/skl374199080/p/3107700.html
Copyright © 2020-2023  润新知