Matlab嵌入式系统的底层驱动

时间:2022-09-28 11:41:19

Matlab嵌入式系统的底层驱动

摘要:嵌入式系统是计算机技术,通信技术,半导体技术,微电子技术,语音图象数据传输技术,甚至传感器等先进技术和具体应用对象相结合后的更新换代产品。Matlab作为美国 MathWorks公司开发的用于概念设计,算法开发,建模仿真,实时实现的理想的集成环境。其强项就是其强大的矩阵计算以及仿真能力。该文简要介绍了Matlab嵌入式系统的特点和发展历史,以及驱动程序的编写方法。

关键词:Matlab; 嵌入式系统; 驱动程序

中图分类号:O445文献标识码:A文章编号:1009-3044(2010)11-2663-02

The Matlab First Floor Drive

YU Dan, WANG Guang

(Basic Course Department of Aviation University of Air Force, Changchun 130022, China)

Abstract: The built-in system is the product of renewal changes generation that combined with calculator technique, correspondence technique, semi-conductor technique, micro-electronics technique, speech portrait data delivers technique, spreadfeeling machine and so on..The Matlab is the ideal integrated environment that was developed by the American MathWorks company which was used forthe concept design the development of calculate way set up mimicry true the realization Of solid hour. Its strong item is the matrix calculation and the ability of imitating true.This text synopsis introduced the characteristics the development history the write method of drive procedure.

Key words: Matlab; built-in system; built-in system

Matlab是英文MATrix LABoratory(矩阵实验室)的缩写,它是由美国MathWorks公司推出的用于数值计算和图形处理计算系统环境,专门以矩阵的形式处理数据。除了具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能,是国际公认的和Mathematica、Maple并列的三大数学软件之一,其强项就是其强大的矩阵计算以及仿真能力。

1 嵌入式系统概述

嵌入式系统是指操作系统和功能软件集成于计算机硬件系统之中。简单的说就是系统的应用软件与系统的硬件一体化,类似与BIOS的工作方式。它是计算机技术, 通信技术, 半导体技术, 微电子技术, 语音图象数据传输技术, 甚至传感器等先进技术和具体应用对象相结合后的更新换代产品,具有软件代码小、高度自动化、响应速度快等特点,特别适合于要求实时的和多任务的体系,因此往往是技术密集,投资强度大, 高度分散, 不断创新的知识密集型系统,反映当代最新技术的先进水平。

2 嵌入式系统驱动程序编写

2.1 驱动程序编写的方法

写驱动程序,第一个要件就是先读懂规格书,并且能够存取每一个装置的管脚。第二个动作就是跟系统注册中断的服务函数,让操作系统了解中断产生的时候要跑哪些函数。第三个动作就是将驱动程序的界面加到一般用户存取截面函数中,让用户通过一定的函数调用来存取装置。其中,第二项跟第三项必须依据操作系统本身的规定来作,第一项就是依据该平台的硬件说明书来做。下面以一个简单的例子讲述第一项的程序编写方式:

这是一个在DragongBall EZ328的RS-232简单版驱动程序。它做了几件事情,首先就是写了一个中断服务程序(ISR),当产生中断的时候,将收到的数据防到一个缓冲区(buffer)里去,这个buffer我们声明叫做m_pBuffer,我们通过两个变量来维护这个buffer,一个是声明m_wStartBuf,另一个是声明m_wEndBuf,让buffer以一种环状数据的方式存在。

驱动程序举例如下:

#include “device.h” //声明硬件的对应地址

#define RX_BUFFER_SIZE 16384//2的次方倍数

#define RX_BUFS_MASK 0x3FFF //buffer size减一

extern voidfun IntHandlerTable[54];//中断向量表

unsigned char m_pBuffer[RX_BUFFER_SIZE]; //BUFFER声明

unsigned long m_wStartBuf=0; //环状指针起始位置

unsigned long m_wEndBuf=0; //环状指针结束位置

unsigned short UART_InData;//收到的数据

unsigned long BuffEndTemp; //暂存数据

2.2 编写驱动程序时的注意事项

我们在编写驱动程序时必须注意下面的事项:

1) 程序所占用的内存空间不能太大。针对嵌入式系统开发成本与体积的要求,驱动程序本身不能使用太多的内存,以免影响其他模块可以利用的资源。

2) 程序架构所需的计算资源要低。驱动程序本身只是为了方便其他模块能够简易的操作硬件,不使用大量精密复杂的数值分析运算,以减少影响其他模块执行时间的考虑为原则。

3) 驱动程序对其他模块的反应要即时。驱动程序的执行需考虑不影响其他模块调用驱动程序模块后的行为与反应时间。

4) 中断程序的执行时间要足够短。实时操作系统能即时反映外界信号缘于它对中断信号处理的能力。若有一个中断程序长期占住处理器执行期间又不允许其他中断的进入,该操作系统便失去即时反应能力。

5) 驱动程序内对类似设计的移植性要高。驱动程序不同于一般的系统调用,针对硬件的不同我们会设计出不同的驱动程序库。但每个驱动程序库内,我们仍应该仔细分出与厂商设计相关或与芯片相关的部分。

6) 程序接口与硬件规格相关性低。若我们定义的驱动程序接口参数与硬件的规格息息相关,当我们转换一个平台,原规划的参数在新的平台上找不到对应,程序接口便会变得很难理解与转换。

7) 与浮点运算无关。小型的系统所使用的处理器常常都没有浮点运算的功能,而我们希望我们编写的驱动程序具备重复使用的能力。所以于程序当中,对于需要浮点计算的场合,我们必须尽量避免。

8) 减少状态变量。驱动程序本身是控制硬件,所谓的状态往往是硬件的状态,我们应该竭力的反应硬件的状态,而不是假设一个状态变量可以符合目前硬件的状态,如此驱动程序才能减少错误动作。

9) 减少状态常数所要表达的意义。尤其要避免设计出一个状态常数所表示的是两种以上事件同时发生,很容易就会有例外事件没有机会被处理到,从此状态变量便进入不可预期的状况。

2.3编写驱动程序的准备

在写驱动程序之前,下面这些事情必须要先做好准备:

1) 基底地址常数声明的建立。建立所有存取寄存器的基底地址,包括控制寄存器、数据寄存器与系统内内存分布的基底地址。

2) 遮罩常数声明的建立。驱动程序内存在着许多使用位表示某种功能的场合,将每个Bit以常数名称定义,于驱动程序中针对不同的应用场合组或不同遮罩组合,增加可阅读性。

3) 状态常数声明的建立。驱动程序内不可避免存在着一些状态变量,而状态变量会有许多可能的状态可选,我们将它以专有的常数名称取代,避免程序当中有张冠李戴之情形,增加可读性也减少出错的危险。

4) 常用功能宏的建立。驱动程序内常常有许多类似智能的功能,但需要许多行程序代码来表示,使用宏声明可让我们的程序更简洁,也避免不必要的认为错误。

参考文献:

[1] 探矽工作室.嵌入式系统开发圣经[M].北京:中国青年出版社,2002.

[2] Barr M.C/C++嵌入式系统编程[M].北京:中国电力出版社,2001.

[3] 张晓辉.嵌入式操作系统驱动程序开发[J].安徽电气工程职业技术学校学报,2005(1).

上一篇:客户细分中聚类的应用 下一篇:基于光线投射算法的医学图像三维重建方法综述