首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LPC2292的μC/OS-II硬件抽象层构建 05

LPC2292的μC/OS-II硬件抽象层构建 05

 中断结构和中断处理程序的设计是嵌入式操作系统HAL中最重要的组成部分。中断机制是操作系统内核实现与外部设备通信、任务系统调用、进行出错处理,以及实现对任务的实时调度的重要手段。因此,硬件抽象层中断系统的管理部分是整个硬件抽象层中的关键。
  μC/OS-II采用了二次跳转的办法。首先在arm处理器定义的中断向量处安放跳转指令,跳转到指定位置后,再进行位置的第二次映射。其中位置的映射是通过一个汇编定义的宏来实现的。将μC/OS-II移植到LPC2292中,其宏汇编的定义如下:
MACRO
  $IRQ_Label HANDLER $IRQ_Exception_Function
  EXPORT$IRQ_Label; 输出的标号
  IMPORT$IRQ_Exception_Function; 引用的外部标号
$IRQ_Label
  SUBLR, LR, #4; 计算返回地址
  STMFDSP!, {R0R3, R12, LR}; 保存任务环境
  MRSR3, SPSR; 保存状态
  STMFDSP, {R3, SP, LR}^; 保存用户状态的R3、SP、LR,注意不能回写
  BL$IRQ_Exception_Function; 调用C语言的中断处理程序
  ;/************************************************
  ;比较当前任务控制块和最高优先级任务控制块是否一致,如果一致则直接恢复任务环境;否则,在中断退出时需要进行任务切换,CPU将运行优先级最高的任务,而不是中断前运行的任务
  ;***********************************************
  LDRR0, =OSTCBHighRdy
  LDRR0, [R0]
  LDRR1, =OSTCBCur
  LDRR1, [R1]
  CMPR0, R1
  ADDSP, SP, #4*3
  MSRSPSR_cxsf, R3
  LDMEQFDSP!, {R0R3, R12, PC}^; 恢复环境
  LDRPC, =OS_TASK_SW; 调用进行任务切换
MEND
  为了使用ISR的汇编宏,每个受μC/OS-II管理的ISR都必须按宏汇编要求的格式,在文件IRQ.S中定义:
  XXXX_HANDLERHANDLERXXXX_Exception
  其中:
  XXXX_HANDLER是ISR的起始地址,即汇编宏的起始地址,在初始化向量中断控制器时作为中断向量的地址使用。用户按中断源来命名,即把其中的XXXX换为具体的中断源名称。
  XXXX_Exception是用户用C语言实现编写的功能函数名。该函数供汇编宏调用,
返回列表