新闻中心

EEPW首页 > 光电显示 > 设计应用 > 基于ARM7支持触摸屏和实时操作系统的开发与应用

基于ARM7支持触摸屏和实时操作系统的开发与应用

—— Development and Application of Touching Screen and RTOS Based on ARM7
作者:李广荣 宗文波 韩建超 杨丹 于海滨 刘锏泽 北京卫星制造厂时间:2011-02-22来源:电子产品世界收藏

  C/OS-II嵌入式操作系统的移植

本文引用地址:http://www.eepw.com.cn/article/117094.htm

  C/OS-II作为操作系统的内核,主要的任务就是完成多任务之间的调度和同步,协调各个硬件源不会冲突。与其它嵌入式操作系统相比,它具有系统透明、可拆减、接口简单的特点。下面就如何在进行操作系统移植和修改作简要的描述:

  (1)重新修改OS_CPU.H文件

  a)定义数据类型:C/OS-Ⅱ不使用C语言中的short、int、long等与处理器类型有关的数据类型,而代之以移植性强的数据类型,这样既直观又便于移植;

  b)定义堆栈增长类型和ARM运行的模式:虽然ARM处理器对堆栈向上与向下的两种增长方式都予以支持,但由于编译器ADS仅支持堆栈从上往下,并且必须是满递减堆栈,所以在文件中用来定义堆栈增长方式的常量OS_STK_GROWTH 的值为1;

  c)需对外部函数声明:如在C/OS-II.h头文件中,有些要移植的函数已经声明,包括:OSTaskStkInit()、OSIntCtxSw(void)、OSStartHighRdy(void) 。

  (2)修改OS_CPU_C.C文件

  a)任务堆栈初始化函数OSTaskStkInit():在编写任务堆栈初始化函数OSTaskStkInit()之前,必须先根据处理器的结构和特点确定任务的堆栈结构;

  b)钩子函数:C/OS-II为了用户在系统函数中书写自己的代码而预置了一些钩子函数(如OSTimeTickHook),这些函数在移植时可全为空函数,可根据用户的需要添加。

  (3)重点编写OS_CPU_A.S文件

  a)开/关中断函数:在处理器核中可利用改变程序状态寄存器CPSR中的相应控制位实现;

  b)OSStartHighRdy(void):OSStart()函数调用OSStartHighRdy()来使就绪态任务中优先级最高的任务开始执行;

  c)OS_TASK_SW(void):μC/OS-II通过调用OSSched()函数来完成任务调度的,OSSched()先将最高优先级任务的地址装载到OSTCBHighRdy,再通过调用OS_TASK_SW()执行任务级的任务切换,OS_TASK_SW主要完成保护现场,完成用于的任务,恢复现场;

  d)OSIntCtxSw(void):OSIntExit()通过调用OSIntCtxSw(),在中断服务程序中执行任务切换功能。

  e)时钟节拍函数:在本移植中,只使用了ARM的IRQ中断。由于不同的ARM芯片的中断系统并不完全一样,因此不可能编写出对所有使用ARM核的处理器通用的中断及节拍移植代码,但是这是后续任务管理中重点需要操作系统进行处理的,OSTickISR的实现代码见程序清单。

  程序清单 OSTickISR()

  OSTickISR

  STMFD SP!, {R0-R3,R12,LR}

  BL      OSIntEnter

  BL      user_function    ;调用用户

             处理的中断处理程序

  BL      OSIntExit

  LDMFD SP!,{R0-R3,R12,LR}

  SUBS PC,LR,#4


上一页 1 2 3 4 下一页

关键词: 触摸屏 ARM7 S3C44B0

评论

技术专区

关闭