zoukankan      html  css  js  c++  java
  • ucosII移植

    移植ucos II 到一个芯片上,只需要修改下面三个文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。

       具体来说,移植主要包括以下几项内容

       (1).OS_CPU.H :用#define设置一些常量的值,声明10个数据类型,用#define声明三个宏。

       (2).OS_CPU_C.C : 用C语言编写六个简单的函数。

       (3).OS_CPU_A.ASM : 编写四个汇编语言函数。

    下面以移植到lPC2292上为例,理解下移植过程。

    1).首先看OS_CPU.H这个文件

      下图是我项目中的OS_CPU.H文件,可以看到,它包括两部分的代码,第一部分是定义与编译器无关的数据类型,第二部分是与ARM7体系结构相关的定义。

      为什么要定义数据类型呢?

      因为不同的微处理器有不同的字长,所以μC/OS-Ⅱ的移植包括了一系列的类型定义以确保其可移植性。这也是第一部分程序的作用。

      程序用有这样的一句

      #define OS_STK_GROWTH    1        

      这一句程序有什么作用?

      它的作用是定义堆栈方向,绝大多数的微处理器和微控制器的堆栈是从上往下长的。但是某些处理器是用另外一种方式工作的。μC/OS-Ⅱ被设计成两种情况都可以处理,只要在结构常量OS_STK_GROWTH中指定堆栈的生长方式(如下所示)就可以了。置OS_STK_GROWTH为0表示堆栈从下往上长。置OS_STK_GROWTH为1表示堆栈从上往下长。

    (2).其次看OS_CPU_C.C这个文件

     在这个文件里我们需要编写以下六个函数

    OSTaskStkInit()     

    //初始化任务堆栈结构

    OSTaskCreateHook()

     //允许用户或使用用户的移植实例的用户扩展μC/OS-Ⅱ的功能

    OSTaskDelHook() 

    //该函数在把任务从μC/OS-Ⅱ的内部任务链表中解开之前被调用

    OSTaskSwHook()  

    //当发生任务切换的时候调用OSTaskSwHook()

    OSTaskStatHook() 

    //用户可以用OSTaskStatHook()来扩展统计功能

    OSTimeTickHook()

     OSTaskTimeHook()在每个时钟节拍都会被OSTaskTick()调用

    事实上,上面的六个函数只有OSTaskStkInit()是必须编写的,而其它的五个函数只需定义就可。

    在我的项目里OS_CPU_C.C,也编写了OSTaskStkInit()这个函数。

    3).最后看OS_CPU_A.ASM这个文件

       这个文件都是汇编,绝对可以让你看得醉生欲死,欲罢不能,你懂我的。

    OS_CPU_A.ASM这个文件要求用户编写四个简单的汇编语言函数:

        OSStartHighRdy()

        OSCtxSw()

        OSIntCtxSw()

       // OSIntCtxSw()是μC/OS-Ⅱ(和μC/OS)中唯一的与编译器相关的函数

        OSTickISR()

      编写上面四个函数要求对cpu的工作原理有深入的理解。

  • 相关阅读:
    dp,路径保存,最大公共上升子序列——ZOJ
    简单dp——HDU
    扫描线,线段树,离散化——HDU
    c++版本的opencv3.4.1里分类器输出值异常
    win10家庭版openssh连接远程服务器显示connetion reset
    生活感悟一
    Teradata简介
    kettle 无法正常启动问题
    kettle实现同构单表增量同步
    kettle数据库连接使用变量
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/4843315.html
Copyright © 2011-2022 走看看