真空炉控制系统具有数据采集、处理、动作实施、监控、保护和网络通信等功能。在正常工作时,负责采集真空炉的运行参数,例如温度、真空度、加热元件的电压、电流等相关参数。并对数据进行处理,把处理结果与给定的工艺设置进行比较后,发出相关执行命令,在系统发生故障时,控制系统还提供检测、记录、保护等功能。该基于ARM的工业嵌入式系统价格便宜,功能强大,维护操作简单,运行稳定,安全可靠。软件部分工作,主要包括μC/OS
真空炉控制系统具有数据采集、处理、动作实施、监控、保护和网络通信等功能。在正常工作时,负责采集真空炉的运行参数,例如温度、真空度、加热元件的电压、电流等相关参数。并对数据进行处理,把处理结果与给定的工艺设置进行比较后,发出相关执行命令,在系统发生故障时,控制系统还提供检测、记录、保护等功能。
该基于ARM的工业嵌入式系统价格便宜,功能强大,维护操作简单,运行稳定,安全可靠。软件部分工作,主要包括μC/OS-II的移植以及应用软件的编写。
μC/OS-II的移植
移植μc/OS-II的主要工作是处理器和编译器相关代码及BSP的编写。
前提条件
移植μC/OS-II的微处理器必须满足以下要求:
(1) 处理器的c编译器支持可重人函数;
(2) 程序中打开和关闭中断;
(3) 处理器支持中断,并且能产生定时器中断(uC/OS-II是通过定时器中断来实现多任务的调度,即时间片的产生);
(4) 处理器要具有一定的硬件堆栈数量。
(5) 处理器要有将堆栈指针和其他CPU寄存器存储和读出堆栈(或者内存)的指令。
在此次系统改造中,使用的Atmel工业级处理器AT91RM9200(ARM920T)完全满足以上条件。
BSP设计
UCOS肩动中,系统在完成最初的硬件初始化以后便转入由开发者提供的main(),在main()中再调用一个内核函数OSInit()来完成内核的初始化,然后在完成了与应用相关的初始化以后,就可以调用一个内核函数OSStart()启动内核的进程调度。从上面的过程看出,main()函数其实是一个回调函数,整个系统的人口是建立在特定CPU(汇编语言编写的底层函数和数据结构)硬件初始化环境的程序中。
UCOS内核引导装入程序与硬件初始化程序连接,或者说在其上构建内核引导装入程序。
引导程序针对具体的微处理器及其配置,完成系统内存映射、中断向量初始化、系统堆栈空间的分配和C语言变量初始化。最后,通过跳转指令转向C语言主程序main,在主程序中CPU的控制权交给操作系统。其中,内存映射是对系统所使用的外部存储器以及内部使用的所有功能模块的初始化,以便程序能正确地操作。中断向量的初始化是将中断处理程序存储在相应的中断向量位置。系统堆栈空间的分配主要是对处理器的7种工作模式分别设置栈底和堆栈大小,这保证多任务切换或者异常中断时,当前CPU的运行状态被保存,从而保证系统正常运行。
主要包括如下步骤:标志整个代码的初始人口点;设置异常中断向量表;初始化存储系统;初始化MMU;将已经初始化的数据搬运到可写的数据区;初始化各个模式下的数据栈;初始化一些特殊外围接口;中断处理程序;使能IRQ异常中断等。以上的步骤中根据处理器中相应的寄存器,进行数据的读写即可。
μC/OS-II移植
虽然μC/OS-II的大部分代码是用C语言编写,但还存在了一些与处理器相关的汇编语言代码,从而实现对处理器寄存器的访问以及堆栈的操作。μC/OS-II的体系结构如图1所示,可以看出μC/OS-II操作系统的移植主要是改写如下3个文件:
C语言头文件,OS_CPU.H
C语言源文件,OS_CPU_C.C
汇编源文件程序,OS_CPU_A.ASM