嵌入式系统μC/OS-II在LPC2119上的移植方法和技巧

[11-20 15:54:28]   来源:http://www.88dzw.com  arm嵌入式   阅读:8723

文章摘要:图2 系统基本初始化Tar get Peset1 ni t()流程图由于启动代码的编写很长,而本文只是想指出编写启动代码是移植前必须做的准备工作并对其进行简要说明,因此在这里就不具体列出所有代码(具体的启动代码见参考文献[1]),而给出一个很重要的目标板初始化程序中的函数TargetResetInit()的流程图,从中可以看出在进入main ()函数前对系统进行的基本初始化工作的具体步骤。移植有了上面的知识和编写启动代码这项准备工作完成后,就可以进入具体移植阶段了。主要完成以下工作:① 为了增强代码的可移植性,所有C文件添加头文件includes.h。② 用户程序添加config.h。③ 在

嵌入式系统μC/OS-II在LPC2119上的移植方法和技巧,标签:arm嵌入式系统,arm系统,http://www.88dzw.com


  图2  系统基本初始化Tar get Peset1 ni t()流程图

  由于启动代码的编写很长,而本文只是想指出编写启动代码是移植前必须做的准备工作并对其进行简要说明,因此在这里就不具体列出所有代码(具体的启动代码见参考文献[1]),而给出一个很重要的目标板初始化程序中的函数TargetResetInit()的流程图,从中可以看出在进入main ()函数前对系统进行的基本初始化工作的具体步骤。

  移植

  有了上面的知识和编写启动代码这项准备工作完成后,就可以进入具体移植阶段了。主要完成以下工作:

  ① 为了增强代码的可移植性,所有C文件添加头文件includes.h。

  ② 用户程序添加config.h。

  ③ 在文件OS_CPU.H中需要添加或修改的主要代码有:

  定义不依赖于编译器的数据类型:

  typedef unsigned char   INT8U;

  typedef unsigned short  INT16U;

  typedef unsigned int    INT32U;

  typedef INT32U       OS_STK;

  使用软中断SWI作底层接口:

  __swi(0x00) void OS_TASK_SW(void);          /*  任务级任务切换函数  */

  __swi(0x01) void _OSStartHighRdy(void);        /*  运行优先级最高的任务 */

  __swi(0x02) void OS_ENTER_CRITICAL(void);   /*关中断 */

  __swi(0x03) void OS_EXIT_CRITICAL(void);     /*  开中断 */

  __swi(0x80) void ChangeToSYSMode(void);      /*  任务切换到系统模式 */

  __swi(0x81) void ChangeToUSRMode(void);     /* 任务切换到用户模式 */

  #define OS_STK_GROWTH    1          /* 堆栈是从上往下长的*/

  定义工作模式:

  #define     USR32Mode       0x10             /* 用户模式 */

  #define     SYS32Mode       0x1f              /*  系统模式*/

  #define     NoInt            0x80

  #ifndef     USER_USING_MODE

  #define   USER_USING_MODE  USR32Mode   /*  任务缺省模式*/

  #endif

  定义开关信号量:    extern  OS_STK  OsEnterSum

  ④ 在文件OS_CPU_C.C中需要添加或修改的代码:

  OS_ENTER_CRITICAL()代码

  __asm

  {    MRS     R0, SPSR

  ORR     R0, R0, #NoInt

  MSR     SPSR_c, R0

  }

  OsEnterSum++;

  OS_EXIT_CRITICAL()代码

  if (--OsEnterSum == 0)

  {  __asm

  {    MRS     R0, SPSR

  BIC     R0, R0, #NoInt

  MSR     SPSR_c, R0

  }

  }

  编写任务堆栈的初始化代码:

  OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)

上一页  [1] [2] [3]  下一页


Tag:arm嵌入式arm嵌入式系统,arm系统arm嵌入式
分类导航
最新更新
热门排行