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

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

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

否则,在中断退出时需要进行任务切换,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语言实现编写的功能函数名。该函数供汇编宏调用,用户可以按实际的中断源来命名,即把XXXX换为具体的中断源名称。
  3.6 定时管理
  μC/OS-II需要一个周期性的中断源来产生系统时钟节拍。μC/OS-II利用了LPC2292的Timer0作为定时器产生时钟节拍。其实现步骤为:
  添加中断句柄Timer0_HandlerHANDLER Timer0_Exception配置中断源定时器T0IR = 0xffffffff;T0TC = 0;T0TCR = 0x01;T0MCR = 0x03;T0MR0 = (Fpclk / OS_TICKS_PER_SEC);配置向量中断控制器extern void Timer0_Handler(void);VICVectAddr0 = (uint32)Timer0_Handler;VICVectCntl0 = (0x20 | 0x04);使能中断VICIntEnable = 1<<4;
  4 总结
  硬件抽象层的出现,使得嵌入式操作系统的设计者不需要考虑嵌入式系统硬件环境差异较大的问题,可以专心设计通用的操作系统,而将与硬件的接口部分留给硬件抽象层来实现,这样大大提高了嵌入式操作系统在不同硬件平台之间的移植能力。本文基于LPC2292硬件平台,详细介绍了μC/OS-II的硬件抽象层的构建方法,对其向其他平台的移植提供了参考。
返回列表