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

μC/OS-II操作系统在各种处理器上的移植 02

μC/OS-II操作系统在各种处理器上的移植 02

2 目标处理器硬件支持
  51单片机、LPC2210、NiosII三种处理器在硬件方面均能满足μC/OS-II操作系统的移植要求。
  51单片机:选择Keil公司的集成开发环境作为开发工具,因为该集成开发环境的C51编译器能产生可重入型代码,且用C语言就可以开/关中断。同时具有一定数量的堆栈和操作相关寄存器的指令。
  LPC2210:采用arm7微控制器可以满足上述②、④、⑤,而ADS1.2的C编译器可以满足①、③的要求。
  NiosII处理器:Nios处理器可以配置成最多支持64个中断,包括外部硬件中断、内部中断以及TRAP(调试中断)。Nios II处理器可以配置使用32位内部定时器,通过用软件控制写入几个控制寄存器的内容来获得定时工作,与一般的定时器工作原理相同,可以产生定时中断。Nios处理器可以外接存储器。以使用的DE2开发板为例,外接512 KB SRAM资源,可提供足够的数据硬件堆栈。NioslI 8.0 IDE采用GNU编译器,支持C/C++的编译、链接产生重入代码,允许在C语言中嵌入汇编语言。
  3 软件移植过程
  3.1 OS_CPU.H的实现
  OS_CPU.H文件包括了用#define语言定义的与处理器相关的常数、宏以及数据类型。
  在上述三种处理器采用的不同编译器中,数据类型的定义是相同的,在此不做具体介绍。
  在OS_CPU.H中定义与处理器相关的宏,主要是进入临界区的OS_ENTER_CRITICAL()和退出临界区的OS_EXIT_CRITICAL()。
  在Keil编译器中,EA是总中断。
  #define OS_ENTER_CRITICAL() EA="0";//关中断
  #define OS_EXIT_CRITICAL() EA="1";//开中断
  在ADS编译器中定义为软件中断函数,并编写软件中断处理代码实现开/关中断。
  _swi(0x00)viod OS_TASK_SW(viod);//任务级任务切换函数
  _swi(0x00)viod OS_ENTER_CRITICAL(viod);//关中断
  _swi(0x00)viod OS_EXIT_CRITICAL(viod); //开中断
  在NiosII 8.0 IDE编译器中:
  #define OS_ENTER_CRITICAL() asm(“PFX 8\n WRCTL%g0;”) //关中断
  #define OS_EXIT_CRITICAL() asm(“PFX 9\n WRC TL%g 0;”) //开中断
  堆栈的增长方向通过设置OS_STK_GROWTH为0或者1来确定。51单片机中只能设置为0,表示堆栈是从下往上增长的。LPC2210中则可以设置成0或者1。NiosII中则只能设置成1,表示堆栈是从上往下增长的。
返回列表