主页 文档 下载 莱特 沙龙 English

RTESM文档
RTEMS精彩应用
RTEMS版权说明
其他RTOS
ARM/DSP专区
AVR/FPGA/PCB
嵌入式文件系统
ARM AVR仿真器DIY
莱特电子工作室
联系我们
 


板支持包BSP概述

作者 Ray

RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray

22.1: 介绍

板支持包 (BSP) 是一组用户提供的软件用于让RTEMS以及应用程序访问对应的硬件平台。这些软件包括硬件初始化代码,设备驱动程序,用户扩展,多处理器接口等。然而,最小的BSP可以只包括处理器复位,初始化。

22.2: 复位和初始化

当处理器被复位时,基于RTEMS的应用就会重新初始化。初始化代码负责初始化硬件平台的各个器件。虽然在不同的硬件平台上,初始化代码不同,但是这些代码的逻辑功能却是大同小异。

一般来说,初始化被分成两部分完成初始化,调用rtems_initialize_executive(重新设定应用初始化)函数前的工作和rtems_initialize_executive函数调用后的用户初始化任务(本地和全局应用初始化)。启始过程是按照下面的次序进行的:

•  重新进行应用初始化设置

•  调用rtems_initialize_executive

•  本地和全局应用初始化

处理器复位时,初始化代码就会执行。所有的设备必须在RTEMS初始化前进行必要的设置,这些初始化工作使用BSP的初始化模块完成。

由于RTEMS将会使用处理器的中断向量表,这些向量表必须在使用前初始化。由于中断是在RTEMS调用rtems_initialize_executive函数时启用的,所以必须在此以前正确的设置中断向量表以确保系统正确工作。此后RTEMS的初始化过程中,会使用rtems_interrupt_catch函数修改向量表。在一些处理器上面,RTEMS将会自动在初始化时设置自己的中断向量表,这样就不需要手工初始化。

在rtems_initialize_executive后的代码需要完成下面的工作。

•  初始化完成前不能调用RTEMS系统函数

•  如果处理器支持多重优先级,那么必须让处理器运行在最高优先级上(对于ARM来说应该在supervisory态执行)。

•  必须为rtems_initialize_executive函数分派空间大于 RTEMS_MINIMUM_STACK_SIZE的栈而且初始化栈指针。

•  必须初始化处理器的中断向量表。

•  必须屏蔽所有中断。

•  如果处理器支持多个中断堆栈,那么必须为每个栈分配空间并且初始化栈顶指针。

rtems_initialize_executive 函数不返回到初始化代码,只是启动最高优先级的初始化任务。该任务初始化本地和全局的应用。 一般来说该任务将会创建应用所需要的所有任务。

22.2.1 : 中断栈需求

进行应用设计的时候,为中断ISR分配的栈空间大小应该考虑到最坏的情况。如果对应的处理器允许中断嵌套,栈空间的大小必须与处理器允许的中断嵌套层次成正比。通常来说,栈空间的大小和下面的因素有关:

处理器中断栈帧(stack frame,可以看成堆栈中的小单元)大小

处理器使用栈帧的子例程

RTEMS 系统调用

需要在堆栈中保存的寄存器

应用子例程调用

中断栈的大小一定本能小与系统定义的RTEMS_MINIMUM_STACK_SIZE。

22.2.2 : 具有中断栈的处理器

一些处理器为中断提供了专门的堆栈(和应用程序堆栈区分)。当中断以向量形式存在,并且不支持嵌套,那么处理器将最自动从当前堆栈切换到中断堆栈。中断堆栈的大小依赖于中断处理程序使用堆栈的最大值。

共整个应用使用的堆栈在系统复位或者初始化时由BSP负责初始化。由于所有的ISR都会使用该堆栈。由于所有的ISR都会使用该中断堆栈,那么堆栈的大小应该考虑各种中断嵌套组合时使用堆栈的最大值。

 

 
嵌入式软硬件设计咨询 • 8位 16位 32位 64位 RISC DSP
主页文章 方案 产品 下载反馈
 
2004 RTEMS.NET 版权所有