首页 > 文章中心 > 正文

嵌入式芯片软件设计探讨

嵌入式芯片软件设计探讨

摘要:随着计算机和微电子技术的飞速发展,嵌入式系统作为计算机应用的一个重要领域,己深入到社会的方方面面。本文在ARM9硬件平台的基础上,加强操作系统的实时性,设计满足数控磨床加工需求的软件系统。

关键词:嵌入式芯片;软件设计

一、嵌入式软件开发方式

绝大多数的Linux或软件开发都是以native方式进行的,即本机开发、调试,本机的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足资源在本机(即板子上系统)运行开发工具和调试工具。通常的嵌入式系统的软件开发采用交叉编译调试的方式。简单的说,交叉编译就是在一个平台上生成另一个平台上的可执行代码,如在x86的PC机上生成ARM平台的可执行代码。

交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发板叫做目标板。开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可执行并不能在宿主机上执行,而只能在目标板上执行。)然后把可执行文件下载到目标机上运行。交叉开发技术己成为嵌入式软件开发的主要方式。其开发步骤如下:在宿主机平台上面编写程序代码;)使宿主机与目标机连接,如使用交叉网线;使用交叉编译器等工具编译、连接应用程序,生成可执行代码;目标机挂载(mount)宿主机的方式(或将可执行代码下载到目标机):开发人员使用交叉调试器进行调试;如果程序调试没有发现异常,则转至第(10)步;调试程序时发现错误,则利用交叉调试器定位错误;修改错误代码;重复(3)—(9)步;将目标机程序固化至目标机上。

二、数控系统软件任务研究

控软件的功能大致可分为两种,一种是控制功能,另一种是管理功能。其中,管理功能包括信息的输入功能、输出输入输出的处理功能、显示功能和诊断功能,控制功能包括译码功能、刀具补偿功能、速度控制功能、和位置控制功能。

从任务的特征来看,与通用实时系统相比,数控系统有以下特点:

数控系统是一个混合任务系统,其任务按是否具有实时性要求和周期性要求可分为:实时周期性任务、实时突发性任务和非实时任务。实时周期性任务是指严格以定长时间间隔定时触发,并且在规定的时间内必须完成处理的任务。在数控系统中主要指加工过程中的插补控制、位置控制、数据采样等需快速响应的机床逻辑状态;实时突发性任务的发生是时间的随机函数,要求有很高的实时性,它包括机床紧急停止、系统故障中断等;非实时性任务是指实时性要求很低的任务,如:人机界面监控,这类任务对于机床运行和加工质量的影响较小,其主要作用是让操作者了解机床运行状况,增强机床的易操作性。

任务之间具有相关性。数控系统的实时任务除了自身的时限要求以外,任务之间通常也不是完全独立的,一般存在时序约束、资源约束等约束关系。

系统在某一确定时刻的并发任务数量不多,与通用实时操作系统不同,数控系统的功能单一,因此调度程序几乎不需要处理较大数量的并发任务。三、需求分析

数控控制系统通过良好的人机交互界面,完成显示工作状态、操作人员进行参数设定等任务,主要有以下几个方面的综合要求:

系统界面要求:图形用户界面可以实时显示加工状态、当前时间、开机时间、加工时间、各个轴的坐标位置,正在运行的关键G代码程序段等信息;

系统功能要求:操作人员可以在符合国际标准的条件下,无需了解嵌入式数控系统的专用编程代码,直接使用符合国际标准的G代码和M代码,即可编制数控程序;

系统的运行要求:操作人员可以根据需要点击触摸屏和键盘或机床面板按钮,随时监控数控系统的工作状态;还可以通过参数设置实现对电机的控制,如电机的启停,正反转等等;

异常处理要求:在正常生产条件下,每天运行16小时,数控系统的无故障率P(t)≥99%,这要求其MTBF值(数控系统的平均无故障时间,是衡量可靠性的重要指标)大于3万时;在硬件不受损坏的情况下,系统软件要有较强的容错能力。

未来可能提出的扩展要求:如能实现远程的联网控制、故障自诊断等、加工仿真、重要数据的备份、中英文界面切换等。

把上述提出的直观需求转化为具体的软件功能需求,即为:

完成电机的启动,制动和换向控制,实现加工过程中的主轴、近给速度实时调整。实现六轴的高精度联动,并通过插补,完成工件的加工、磨削;在能够满足一定精度的前提下,实现自由曲线的粗插补和精插补;

图形用户界面要求:实现参数的图形菜单输入,加工过程的仿真,并实时显示加工图形和各轴坐标值,用户可以通过触摸屏和键盘进行参数设置,实现对电机的控制;实现伺服信号、开关量信号、和辅助信号的宏指令控制,且符合G代码和M代码功能定义;

实现各功能电路的PLC控制,包括机床面板功能实现、主轴的起停、自动润滑控制以及过载、超载、碰撞、掉电等紧急情况的处理;

为了方便用户操作,还应提供操作提示和帮助文档,同时,系统具有一定的抗干扰能力,即使受到干扰使系统控制失灵或程序运行异常时,也能够从错误或故障中恢复,保证系统的正常工作。

从以上功能需求分析得知,一个功能满足六轴数控磨削系统基本需要的系统,必须包括以下几个模块:电机控制、图形界面、译码、PLC、CAN通讯、硬件驱动等。

四、模块划分

模块划分的一条原则是尽量降低软件模块间的祸合度,高祸合度的系统是很难维护的。一处的修改引起另一处甚至更多处的变动。藕合度低的软件可以很容易被重用、维护和扩充。另一条原则是提高软件的内聚性,如果一个软件的模块只实现一个功能,那么该模块具有高内聚性。高内聚性的软件更容易维护和改进。判断一个模块是否有高的内聚性,是看能否用一个简单的句子描述它的功能。如果用了一段话或者需要使用类似“和”,“或”等连词,则说明需要将该模块细化。只有高内聚性的模块才可能被重用。遵循上述原则,将系统软件划分为如图1所示的子模块。

嵌入式操作系统是嵌入式系统的灵魂,它的出现大大提高了嵌入式系统开发的效率,减少了系统开发的总工作量,而且提高了嵌入式应用软件的可移植性。

本系统采用了嵌入式操作系统:Linux。系统各模块在Linux的统一控制管理下有效的协调的工作。由图1可知,本系统软件主要由以下几个功能模块组成:

设备驱动模块、译码模块、图形界面模块等。这些模块在操作系统的管理调度下协调一致的运行。

五、软件初始化及总程序流程

本系统采用s3c2410(ARM9核)作为控制核心,在用户的应用程序之前,需要有一些专门的代码完成对系统的初始化。由于这类代码直接面对ARM9处理器内核和硬件控制器,一般都使用汇编语言完成。系统上电或复位后,程序从位于地址0x0的ResetExceptionVector处开始执行(这里放置Bootloader的第一条指令:bResetHandler),跳转到标号为ResetHandler处进行第一阶段的硬件初始化,主要内容为:关看门狗定时器,关中断,初始化PLL和时钟,初始化存储器系统。执行完以上程序后,系统进行堆栈和存储器的初始化。系统堆栈初始化取决于用户使用了哪些中断,以及系统需要处理哪些错误类型。一般情况下,管理者堆栈必须设置,如果使用了IRQ中断,则IRQ堆栈也必须设置。如果系统使用了外设,则需要设置相关的寄存器,以确定其刷新频率、总线宽度等信息。然后是初始化有特殊要求的端口和设备,初始化应用程序的运行环境。最后是调用主应用程序:

数控系统的应用程序初始化流程如图2所示:

系统初始化以后,程序的大体流程为:首先加载G/M代码解释器、初始化参数,然后创建人机界面,G/M代码经解释后,再调用响应的例程完成I/O控制、插补、位置控制等,最后调用底层硬件的控制例程,完成对电机的控制。

参考文献

[1]刘艳霞,李淑芬.基于ARM的嵌入式数控系统[J].微计算机信息.2006,22

[2]武汉理工大学.基于ARM和DsP的嵌入式数控系统.中华人民共和国国家知识产权局,200610124742.0,2007-03-28

[3]金展,傅建中,陈子辰基于ARM的嵌入式数控系统设计[J].机电工程,2005,22(2)