基于MicroBlaze的μC/OS-II操作系统移植①
2017-06-07常华利尹震宇
常华利,尹震宇
1(中国科学院大学,北京100049)
2(中国科学院 沈阳计算技术研究所,沈阳 110171)
基于MicroBlaze的μC/OS-II操作系统移植①
常华利1,2,尹震宇2
1(中国科学院大学,北京100049)
2(中国科学院 沈阳计算技术研究所,沈阳 110171)
LT-H10滚齿机数控系统采用基于ARM的系统结构,其处理器等性能、资源比以往基于x86的系统受到很大的限制,所以CPU的占用率也相对较高.为了降低ARM CPU的占用率把系统运行的部分主站控制驱动程序迁移到底板FPGAMicroBlaze软核处理器上运行,本文提出了一种基于MicroBlaze软核处理器的μC/OS-II的移植方案.测试实验结果表明μC/OS-II系统移植到MicroBlaze之后能稳定的运行.快速的任务上下文切换更有利于数控系统的实时性.针对MicroBlaze μC/OS-II系统和ARM Linux系统设计了两个不同的任务调度算法对任务上下文切换的时间开销进行研究、测量和分析.此研究方案不仅可以满足基于ARM的数控系统的应用需要,同时适用于基于x86的数控系统,达到降低系统CPU占用率的目的,在嵌入式数控系统中具有重要的研究意义与应用价值.
FPGA;MicroBlaze;μC/OS-II;移植
LT-H10控制系统是针对滚齿机的专用控制系统,是基于ARM处理器的嵌入式数控系统[1],底层硬件采用了FPGA实现系统主站,完成基本的电平转换、信号采集等功能.系统主站要实现伺服-脉冲控制,总线协议,I/O控制,数字光栅尺控制,计数器,主轴控制等功能.进一步的这些控制功能还需要实现在驱动程序部分,运行这些功能会占用大量ARM主处理器资源[2],而且控制指示灯以及超时报警的检测、处理等也会占用ARM CPU资源.此外,GPMC总线带宽有限,传输原始数据时,也会带来总线的大量开销,并不利于实时性.
本文以LT-H10控制系统为研究对象,提出了一种基于MicroBlaze软核处理器的μC/OS-II的移植[3]方案.把系统运行的部分主站控制驱动程序迁移到底板FPGA MicroBlaze软核处理器上运行,以达到降低ARM CPU占用率的目的.
此研究方案不仅适用于基于ARM的数控系统,同时适用于基于x86的数控系统,达到降低系统CPU占用率的目的,在嵌入式数控系统中具有重要的应用价值.
1 μC/OS-II、MicroBlaze概述及系统移植的可行性分析
1.1 实时操作系统μC/OS-II
μC/OS-II操作系统[4]目前在工业领域中使用的非常广泛,作为一种源代码公开的实时嵌入式操作系统,最多可支持63个任务,其内核为占先式(即执行就绪态中优先级最高的任务)并支持信号量、邮箱、消息队列等多种进程间通信机制;同时用户可以根据需要对内核中的功能模块进行裁剪[5];并且μC/OS-II操作系统代码很简洁,仅有5500行代码,而且其大部分代码是使用C语言编写的,只有与硬件相关的少量代码需要使用目标板支持的汇编语言[6].所以说μC/OS-II具有内核小巧、可裁剪、实时性强、多任务、方便移植到多种嵌入式平台等特点,使得各个任务独立工作,互相不干涉,从而很容易使得任务被准确执行,使实时应用程序的设计和扩展变得简单[7,8].
1.2 软核处理器MicroBlaze
Xilinx首创了现场可编程逻辑阵列(FPGA)这一创新性的技术,随着FPGA的技术的发展,其逻辑容量逐步增大而成本越来越低[9].这种趋势下,FPGA可以代替系统中越来越多的器件,并且发展到FPGA片上系统.Xilinx推出了32位软核处理器MicroBlaze,用来替代片上的微控制器,有效的缩小了PCB板的面积和器件数量,降低了整个系统的成本.该处理器采用32位RISC哈佛存储结构,拥有极其灵活的架构以及丰富的指令集.MicroBlaze软核处理器具有占用资源少、可配置性强的特点,可以和其他外设IP核一起,完成可编程芯片的设计.MicroBlaze软核处理器采用Xilinx公司提供的嵌入式开发套件EDK进行设计开发,设计套件DEK提供了硬件平台开发环境XPS和软件平台开发环境SDK[10].
1.3 μC/OS-II代码结构分析以及处理器相关核心代码
从μC/OS-II移植的过程来看,μC/OS-II代码逻辑上可以分为三大组成部分:与处理器无关的内核代码、与处理器有关的核心代码、与软硬件环境设置有关的配置代码[11].如图1是μC/OS-II操作系统的代码结构.
图1 μC/OS-II的代码结构
其中与处理器无关的内核代码主要实现是任务管理、信号量、内存管理、消息队列、系统调用等功能(主要包括os_core.c、os_flag.c、os_mbox.c、os_mem.c、os_mutex.c、os_q.c、os_sem.c、os_task.c、os_time.c、ucos_ii.h、ucos_ii.c);
与处理器有关的核心代码主要与操作系统的移植相关(主要包括os_cpu.h、os_cpu_a.s、os_cpu_c.c);
与软硬件环境设置有关的配置代码主要用于裁剪和设置操作系统(主要包括os_cfg.h、includes.h).
1.4 μC/OS-II在MicroBlaze上移植的可行性分析
移植的目标是使得这个实时内核能够在软核处理器MicroBlaze上得到运行.要使μC/OS-II能够正常运行,处理器必须要满足:
1)处理器的C编译器能够产生可重入代码,并且使用C语言就可以完成开关中断;
2)处理器支持中断;
3)处理器支持可以容纳一定数据量的硬件堆栈;
4)处理器有把堆栈指针和其他寄存器读出和存储到堆栈或者是内存中的指令.
DEK软件开发套件内置的编译器能够产生可重入代码,并支持内嵌汇编语言,在C语言环境中可进行任意的开关中断操作;MicroBlaze有专门的堆栈指针寄存器,足够大的内部BRAM容量能够完全硬件堆栈;另外,MicroBlaze的指令集包含有丰富的指令对堆栈进行操作,可以方便的对处理器中的寄存器进行堆栈操作.所以,μC/OS-II完全可以移植到软核处理器MicroBlaze上.
2 系统移植设计和相应测试实验
2.1 使用ISE14.7集成软件环境搭建系统移植环境
主要设备和软件:PC机一台、ISE14.7集成软件环境以及图2所示的FPGA测试板.
图2 FPGA测试板、Xilinx JTAG下载器,和FPGA测试板电源盒
利用EDK的板级开发包向导(BSB Wizard)对硬件平台进行定制,处理器时钟频率是50MHZ,内存约束至32KB,添加一个GPIO IP核.
搭建系统移植环境的步骤:
1)使用ISE14.7建立工程
根据所用FPGA芯片设置对应测试板信息:架构是Spartan3e,设备型号是xc3s500e,封装是pq208,速度是-4.
2)向工程添加VHDL Module,修改cpuv01.vhd文件,如图3.
3)向工程添加Embedded processor文件,自动开启EDK板级开发包向导(BSB Wizard)构建硬件平台.如图4所示,处理器时钟频率是50MHZ,内存32KB.
4)IP核地址设置
如图5所示,设置IP核地址:GPIO的基地址是0x90000000,高地址是0x900001FF.
图3 cpuv01.vhd文件
图4 处理器信息设置
图5 设置IP核地址
5)添加UCF约束文件
UCF文件用来添加信号的管脚约束与时序约束,通过文本编辑器来修改.
把串口的输入输出信号与FPGA芯片相应管脚相连,时钟信号引脚为P77,复位引脚为P54,测试板上P96、P97、P98、P99、P100和P102对应测试板上一组LED,并设置输入时钟频率为50MHZ.
通过以上步骤完成硬件平台的建立,导出硬件平台文件到SDK,在SDK中新建 Application Project,就完成了系统移植环境的搭建,接下来就可以开始移植μC/OS-II操作系统到MicroBlaze处理器.
2.2 移植的步骤
1)使用SDK软件开发套件为μC/OS-II操作系统建立一个目录,在该目录下创建工程,加入μC/OS-II内核文件到这个工程.
2)根据测试板硬件环境移植os_cpu.h
os_cpu.h包含和CPU相关的不能通用的数据类型的定义、变量声明、函数代码的声明部分.部分数据类型的定义:
由于不同的处理器有不同的字长,μC/OS-II的移植包括一系列类型定义,以确保可移植性.MicroBlaze是32位处理器,堆栈入口宽度是32位,所以OS_STK被定义为32位,所有的任务堆栈也都用OS_STK来声明,状态寄存器也是32位的,所以OS_CPU_SR也被定义为32位.
μC/OS-II在进入系统临界代码段之前要进行关闭中断,退出临界代码段时要打开中断,从而保证核心数据不被多任务环境下的其他任务中断破坏.在μC/OS-II操作系统中提供了三种针对MicroBlaze的处理中断的方式,这里用到了第三种方式,即OS_CRITICAL_METHOD==3,用户可以取得当前处理器状态字的值,保存在C函数的局部变量中,这个变量就是用来恢复程序状态字的值.另外,MicroBlaze的 堆 栈 地 址 由 低 到 高 增 长 , 故OS_STK_GROWTH==1.
3)根据测试板硬件环境移植移植os_cpu_c.c
需要编写 10个简单的 C函数,分别是OSInitHookBegin() 、 OSInitHookEnd() 、OSTaskCreateHook() 、 OSTaskDelHook() 、OSTaskIdleHook() 、 OSTaskStatHook() 、OSTaskStkInit()、OSTaskSwHook()、OSTCBInitHook()、OStimeTickHook().其 中 唯 一 必 要 的 函 数 是OSTaskStkInit(),此函数用来初始化任务堆栈,初始状态的堆栈模拟发生一次中断后的堆栈结构在初始化堆栈寄存器时用与寄存器号相对应的值进行初始化,目的是便于调试.其余9个必须声明,但不一定要包含任何代码.
4)根据测试板硬件环境移植os_cpu_a.s.
对OS_CPU_A.S进行移植,主要是编写4个汇编语言函数,分别是:多任务启动函数调用的一个函数OSStartHighRdy()、任务切换函数OSCtxSw()、中断任务 切 换 函 数 OSIntCtxSw()和 中 断 服 务 函 数OS_CPU_ISR().μC/OS-II启动时调用OSStart(),而OSStart()又调用OSStartHighRdy()运行优先级最高的任务.OSCtxSw()的调用发生在有更高优先级的任务就绪或者当前任务不可执行的情况下.如果任务执行了某个函数,其结果改变了当前任务的状态,或是改变了别的任务状态都会引起新的任务调度.判断有比中断更重要的任务在运行时,OSIntCtxSw()被OSIntExit()调用.MicroBlaze为每一个中断都提供一个单独的中断向量,Xilinx的XPS工具会自动的生成中断向量表,地址空间为0x00000010-0x00000014.OS_CPU_ISR()用于判断中断源以及执行器件所对应的中断语句和函数.
2.3 编写应用程序测试操作系统
为了验证μC/OS-II操作系统是否成功移植到软核处理器MicroBlaze中,编写应用程序进行测试,具体思路是:
首先建立主程序,如main.c.主程序中的入口函数OSInit执行操作系统初始化函数;
其次是调用OSTaskCreate()创建控制测试板LED的任务AppTaskFirst,其优先级为5用来控制引脚分别为P96、 P98、P100的LED的亮灭;
最后OSStart()开启多任务,调用OSStartHighRdy()运行优先级最高的任务,任务AppTaskFirst优先级最高,会循环执行.
设计测试程序代码如下:
编译应用程序,并通过Program FPGA把软件程序生成的可执行可链接格式文件(.ELF)同硬件比特流文件(.BIT)下载到FPGA的测试板.设置断点调试代码,通过跟踪调试移植的μC/OS-II代码和观察LED的亮暗情况,不断修改代码直到确定操作系统正常运行,至此则μC/OS-II操作系统移植成功.
高职院校的学生营养素摄入少、三餐不合理、进食快、活动量少、经常熬夜,从而造成营养不良、肥胖发生率较高。调查发现,由于学生的营养知识的匮乏与营养意识的淡薄,普遍存在着膳食结构不合理的现象;并且高职院校学生大多数不注意奶制品的摄入,这与他们从小的生活习惯和饮食习惯有关[4]。
3 测量任务切换时间
3.1 在ARM处理器上测量任务切换的时间
实验环境:安装 CentOS Linux系统的 ARM Cortex-A8 TQ335X开发板、安装交叉编译工具链的CentOS Linux系统.
设计一个基于优先级的可抢占的任务调度算法:创建两个具有不同优先级的实时任务taskA和taskB,其中taskA的优先级高于taskB的优先级,两个任务每隔5毫秒发生一次调度.taskA和taskB主体部分均可用如下伪代码表示.
任务开启时,调用clock_gettime()函数取得一次系统时间,接着执行一段延迟代码,再次调用clock_gettime()函数取得一次系统时间(两个时间的差值看做任务一次执行的周期),然后设置任务调度周期(这里设为5毫秒,也可以是其它合理值),最后调用clock_nanosleep()将任务挂起直到这一调度周期结束,将开始下一次循环.
单独运行taskA的进程时的部分结果:
可以看出taskA每隔5毫秒执行一次,并且使用30组数据计算得到taskA的平均执行时间是1334.229微秒.
单独运行taskB的进程时的部分结果:
同时运行taskA和taskB的进程时的部分结果:
可以看出taskA和taskB每隔5毫秒执行一次且运行时发生CPU抢占,taskB的进程运行时发现有优先级更高的taskA的进程就绪时,发生一次任务切换,taskA的进程运行结束退出CPU发生第二次任务切换,taskB的进程接着运行直到进程结束,然后下一调度周期,开始新的一轮的进程调度.所以,两任务共同执行的时间应该包括taskA单独执行的时间、taskB单独执行的时间以及两次任务切换的时间.
表1 19组任务切换的时间及平均时间
13 2047.292 25.878 14 2046.333 25.398 15 2047.000 25.732 16 2046.750 25.607 17 2046.583 25.523 18 2046.583 25.523 19 2046.958 25.711平均值 2053.737 29.100
由表1可以看出,taskA和taskB的共同执行时间是的平均值是2053.737微秒,任务切换的性能:任务切换的平均时间29.100微秒,最差情况下是53.711微秒.
3.2 在MicroBlaze软核处理器上测量任务切换时间
实验环境:ISE14.7集成软件环境、FPGA测试板和示波器.
1)设计基于优先级的任务调度算法
为了测量任务在MicroBlaze软核处理器上切换时间,设计了一个基于优先级的任务调度算法,具体思路是:任务创建时调用OSTaskCreate()创建两个控制测试板LED的任务,任务AppTaskFirst优先级为5用来控制引脚分别为P96、P98、P100的LED的亮灭,任务AppTaskSecond优先级为6用来控制引脚分别为P97、 P99、P102的LED的亮灭;OSStart()开启多任务,调用OSStartHighRdy()运行优先级最高的任务AppTaskFirst,任务AppTaskFirst完成控制引脚分别为P96、P98、P100的LED的亮灭之后调用OSTaskSuspend将自身挂起,进行任务切换,执行系统里优先级最高的任务AppTaskSecond,任务AppTaskSecond完成控制引脚分别为P97、P99、P102的LED的亮灭之后调用OSTaskResume将任务AppTaskFirst唤醒,接下来的时间任务就在AppTaskFirst和AppTaskSecond之间不断来回切换 .
相关程序代码如下:
2)估算任务的切换时间
为了得到任务切换的时间这里使用示波器测量了测试板P96、P98两个管脚对应的I/O口的电平变换.对应不同延迟参数M和N使用示波器来测量LED亮和暗的延迟.如图6和图7分别是延迟参数M和N均为4时使用示波器测得的LED亮的延迟和LED暗的延迟.由图6可知LED亮的延迟是252微秒,由图7可知LED暗的延迟是272微秒.
图6 M和N均为4时LED亮的延迟
图7 M和N均为4时LED暗的延迟
由测试程序的代码可知,LED亮的延迟是调用delay的延迟;LED暗的延迟调用delay的延迟与任务切换时间开销之和.这里LED亮的延迟大小和LED暗的延迟中调用delay的延迟大小应该是相等,故可得到任务切换时间是20微秒.
由于使用示波器测得的数值带一定误差以及电平变换有延迟等原因,所得到的结果也是有误差的.所以为了能够更好的分析LED亮的延迟和LED暗的延迟,这里使用了统计的办法:针对延迟参数M和N,设计了16组不同的实验,每组实验用示波器测得LED亮的延迟T1和LED暗的延迟T2.
表2 针对M和N的16组不同实验及其结果
由于LED亮的延迟是调用delay的延迟和LED暗的延迟中调用delay的延迟是关于M和N对应成比例的,即T1/M=T2/N,故T2-N*T1/M是任务切换的时间.
4 249 521 23 6 2 361 153 33 8 6 345 265 35 6 6 345 377 33 4 6 345 489 29 8 2 505 153 27 8 8 473 281 41 8 6 489 393 27 4 8 8 473 505 32平均值 28.875
由表2可知,(T2-N*T1/M)在落在一个很小的区间[16微秒,41微秒]内,结果是有意义的.这里(T2-N*T1/M)的平均值是28.875微秒,最大值41微秒,据此得到任务切换的性能:任务切换的平均时间28.875微秒,任务切换的最差情况是41微秒.
3.3 实验结论
任务在ARM Linux系统上切换的平均时间29.100微 秒,最 差 情 况 是 53.711微 秒;任 务 在MicroBlazeμC/OS-II系统上切换的平均时间是28.875微秒,与在ARM Linux系统下结果一致,最差情况是41微秒较ARM Linux系统要好一些.实验结果表明μC/OS-II系统移植到MicroBlaze之后,不仅可以稳定的运行,而且可以实现快速的任务切换,符合数控系统的实时性要求,可以满足LT-H10滚齿机控制系统的应用需要.
4 结语
本文以LT-H10滚齿机控制系统为课题背景,针对系统CPU占用率高的问题,为了降低系统CPU占用率,把系统运行的部分主站控制驱动程序迁移到底板FPGA MicroBlaze软核处理器上运行,提出了一种基于MicroBlaze软核处理器的μC/OS-II的移植方案.使用ISE14.7集成软件环境构建移植环境将μC/OS-II移植 FPGA MicroBlaze软核处理器上,通过测试μC/OS-II在 MicroBlaze可以稳定运行.针对MicroBlazeμC/OS-II系统和ARM Linux系统设计了两个不同的任务调度算法对任务的切换时间进行测量和研究.实验结果表明移植到MicroBlaze上的μC/OS-II系统不仅可以稳定的运行,而且可以实现快速的任务切换,符合数控系统的实时性要求,可以满足LT-H10滚齿机控制系统的应用需要.
为了降低ARM CPU的占用率还有许多工作要做,首先要实现ARM处理器Linux操作系统与FPGA MicroBlaze软核处理器μC/OS-II操作系统的通信设计.在LT-H10滚齿机控制系统中主站要实现伺服-脉冲控制,总线协议,I/O控制,数字光栅尺控制,计数器,主轴控制等功能,这些控制功能是实现在驱动程序部分的,为了降低ARM CPU的占用率,需要实现这些驱动从ARM处理器Linux操作系统到FPGAMicroBlaze软核处理器μC/OS-II操作系统的下载.
1费继友,周茉.基于+的嵌入式数控装置设计.制造技术与机床,2010,12(12):61–64.
2季照平.基于单片机ARM嵌入式技术的数控系统的开发研究.轻工科技,2015,(11):47–48,68.
3刘建康,付云忠.基于ARM_FPGA的嵌入式数控系统硬件设计[硕士学位论文].哈尔滨:哈尔滨工业大学,2013.
4张开生,陈明,周子超.实时操作系统μC/OS-II的实现.电子科技,2013,26(10):36–39.
5赵伟国,李文军,梁国伟.实时嵌入式操作系统-在上的移植.中国计量学院学报,2005,16(2):137–139.
6陈果,冯静.系统及其消息队列详析.电子元器件应用,2011, 3(3):38–42.
7王帅,陈金鹰,邹振宇.基于的μC/OS-II移植.中国集成电路, 2011,20(7):80–84.
8邵贝贝等译.嵌入式实时操作系统μC/OS-II.第2版.北京:北京航空航天大学出版社,2003.
9孙丰祥,程玉伟,胡恩俊,等.基于软核的嵌入式最小系统.化工自动化及仪表,2013,8(8):36–39.
10胡志东,韩晓明,马瑞.嵌入式技术在雷达数字接收机中的应用.信息通信,2016,3(3):63–65.
11单超,王萍,朱爱民,等.基于 软核的嵌入式系统设计.单片机与嵌入式系统应用,2011,11(3):18–21.
μC/OS-II System Porting Based on MicroBlaze Processor
CHANG Hua-Li1,2,YIN Zhen-Yu2
1(University of ChineseAcademy of Sciences,Beijing 100049,China)
2(Shenyang Institute of Computer Technology,ChineseAcademy of Sciences,Shenyang 110171,China)
The LT-H10 hobbing machine numerical control system is an embedded system based on ARM processor.The CPU occupancy in ARM-based NC system is always higher than that in x86-based systems for some characteristic of ARM processor itself limits.A μC/OS-II system porting scheme based on MicroBlaze soft-core processor is presented in this paper,to reduce the occupancy of ARM processor by executing some driver programs of master station on the MicroBlaze soft-core processor of FPGA chip on the bottom plate.The experimental test results show that the μC/OS-II system ported on the MicroBlaze processor can run stably.The rapid context-switch benefits to the real-time of the NC system.We design two different tasks scheduling algorithm to measure and research the context-switch time in MicroBlaze-based μC/OS-II system and ARM-based Linux system.This study can not only meet the application needs of CNC system based on ARM,but also can been applied to CNC system based on X86,to achieve the purpose of reducing CPU occupancy,which has important research meaning and application value in Embedded CNC system.
FPGA;MicroBlaze;μC/OS-II;porting
国家科技重大专项(2014ZX04009031)
2016-08-12;收到修改稿时间:2016-09-23
10.15888/j.cnki.csa.005742