功率电感生产厂家
联系我们
热门搜索
点击排行
推荐阅读
猜猜你喜欢的
研发资讯 您所在的位置: 首页 > 研发资讯

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

来源:    作者:    发布时间:2016-06-13 16:13:47    浏览量:

  *--stk = 0;/*R1*/
  *--stk = (OS_STK)pdata;/* R0,参数*/
  *--stk = (USER_USING_MODE|0x00);/*SPSR,允许IRQ、FIQ中大电流电感断*/

按此在新窗口浏览图片
图2 堆栈增长的方向

3.4 任务上下文切换

  任务上下文管理负责嵌入式操作系统内核中任务管理部分对任务寄存器上下文的创建、删除以及切换等操作。任务的寄存器上下文是操作系统内核所管理的任务的重要组成部分,是CPU内核的寄存器中内容的映像,因此上下文管理的实现依赖于CPU 内核中寄存器的组织,是与体系结构密切相关的。通用硬件抽象层的任务上下文管理统一定义体系结构中的寄存器上下文的保护格式,提供了任务管理对任务上下文的基本操作的API接口。

  μC/OS-II的任务切换其实就是通过改变PC中的内容来实现的。将PC指向新任务开始运行的地方,同时将当前任务(被抢占任务)环境保存到相应的任务堆栈中,将新任务环境从任务堆栈中恢复到相应的寄存器中。

  μC/OS-II用OS_TASK_SW()完成任务级切换。将μC/OS-II移植到LPC2292上,其任务切换代码如下:

  ;OS_TASK_SW
  ;/************************************************
  ;① 在当前任务(被抢占任务)的堆栈保存当前任务环境
  ;/************************************************
  STMFDSP!, {LR};LR中其实是任务切换时对应的PC值
  STMFDSP!, {LR}
  STMFDSP!, {R0R12}
  MRSR0,CPSR
  STMFDSP!,{R0}
  ;/************************************************
  ;② 获取当前任务(被抢占任务)控制块地址,地址在R0;获取当
  ;前任务(被抢占任务)SP地址,在R1;保存大电流电感器新SP到当前任务(被
  ;抢占任务)的TCB
  ;/************************************************
  LDRR0,=OSTCBCur
  LDRR1,[R0]
  STRSP,[R1]
  ;/**********************************************
  ;③ 获取新最高优先级任务控制块地址,保存最高优先级任务
  ;地址到当前任务地址
  ;/************************************************
  LDRR2,=OSTCBHighRdy
  LDRR1,[R2]
  STRR1,[R0]
  ;/************************************************
  ;④ 获取当前新任务SP
  ;/************************************************
  LDRSP,[R1]
  ;/************************************************
  ;⑤ 恢复任务环境
  ;/************************************************
  LDMFDSP!,{R0}
  MSRSPSR_csxf,R0
  LDMFDSP!,{R0R12,PC}^

3.5 中断结构和中断处理程序的设计

  中断结构和中断处理程序的设计是嵌入式操作系统HAL中最重要的组成部分。中断机制是操作系统内核实现与外部设备通信、任务系统调用、进行出错处理,以及实现对任务的实时调度的重要手段。因此,硬件抽象层中断系统的管理部分是整个硬件抽象层中的关键。

  μC/OS-II采用了二次跳转的办法。首先在ARM处理器定义的中断向量处安放跳转指令,跳转到电感器生产厂家指定位置后,再进行位置的第二次映射。其中位置的映射是通过一个汇编定义的宏来实现的。将μC/OS-II移植到LPC2292中,其宏汇编的定义如下:

MACRO
  $IRQ_Label HANDL电感厂家ER $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
  LDRR一体成型电感1, [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中定义:

  • 基于FPGA的三轴伺服控制器设计与实现0 引言在运动控制系统中,多轴伺服控制器的设计一直是该领域的重要内容之一。目前伺服控制器的设计多以DSP或MCU为控制核心,但DSP的灵活性不如FPGA,且在某些环境比较恶劣的条件如高温高压下DSP的

  • CHY103D,SC0163D这两个QC3.0的IC,性能怎样?哪颗性CHY103,SC0163都是PI出的QC3.0协议的识别IC。CHY103D,SC0163D两个功能是一样的。这两个是较早的QC3.0协议IC。 考虑到产品,和客户的应用,功能方面大家觉得OK不OK?或者有更好的

  • 基于Zigbee的CMOS无线射频芯片的设计考虑本文将以笙科电子的2.4GHz IEEE 802.15.4射频收发器(适用于Zigbee标准,RF4CE则是基于Zigbee的遥控器应用规范)为例,介绍超低功率CMOS无线射频芯片的设计概要,从电路设

  •