嵌入式系统开发实验一

2024-09-07

嵌入式系统开发实验一(共15篇)

1.嵌入式系统开发实验一 篇一

南京信息工程大学 实验(实习)报告

实验(实习)名称

电机转动控制及中断实验 实验(实习)日期

2016.5 得分

指导教师 谢胜东

学院 计算机与软件 专业 计算机科学与技术 年级

2013 班次 3 姓名

叶正舟 学号

20131308072 实验名称

电机转动控制及中断实验 实验目的

(1)熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置

(2)编程实现 ARM系统的PWM 输出和I/O 输出,前者用于控制直流电机,后者用于控制步进电机。

(3)了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。

(4)掌握带有PWM 和I/O 的CPU 编程实现其相应功能的主要方法。实验环境

(1)ADS1.2开发环境(2)PC(3)串口线 实验内容及要求

学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM知识,掌握PWM 的生成方法,同时也要掌握I/O 的控制方法。

(1)编程实现ARM芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速

(2)编程实现ARM的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。

(3)通过超级终端来控制直流电机与步进电机的切换。实验设计与实验步骤

(1)新建工程,将“电机转动控制实验”中的文件添加到工程(2)编写直流电机初始化数(MotorCtrl.c)(3)控制直流电机与步进电机 实验过程与分析

(1)通过把从串口中得到控制信息的代码修改成从zlg7289芯片中读取小键盘信息,从而利用试验台的小键盘来控制步进电机和直流电机的切换

(2)A/D转换可以把电信号转换成数字信号来控制电机的转速。for(;;)

{ loop:

//if((rUTRSTAT0 & 0x1))//有输入,则返回

if(rPDATG&ZLG7289_KEY)//17键小键盘控制电机

{

*Revdata=RdURXH0();

goto begin;

}

Delay(10);ADData=GetADresult(0);

if(abs(lastADData-ADData)<20)

goto loop;Delay(10);count=-(ADData-lastADData)*3;

//(ADData-lastADData)*270/1024为ad旋钮转过的角度,360/512为步距角,//由于接了1/8减速器,两者之商再乘以8为步进电机相应转过的角度

if(count>=0)

{//转角大于零

for(j=0;j

{

for(i=0;i<=7;i++)

{

SETEXIOBITMASK(stepdata[i], 0xf0);

Delay(200);

}

}

}

lastADData=ADData;

} } 实验结果总结

利用A/D转换器实现了对直流电机和步进电机的控制,利用实验设备上自带的小键盘实现了A/D转换器对两个电机控制的切换。心得体会

通过本次实验,熟悉了ARM自带的六路(三对)PWM,并对直流电机和步进电机的工作原理有了进一步的了解。

2.嵌入式系统开发实验一 篇二

语音信号处理[1,2,3,4,5]是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科, 是目前发展最为迅速的信息科学研究领域的核心技术之一,也是信息高速公路、多媒体技术、办公自动化、现代通信等新兴领域应用的核心技术之一。用数字化的方法进行语音的传送、存储、分析、识别、合成、增强等是整个数字化通信网和通信设备中的最 重要和最基本的组成部分之一。

目前,语音信号处理是各高校信息类专业中一门必修的专业课程,主要内容为语音信号处理的基础知识以及语音信号的各种分析和处理技术,包括时域及频域处理、同态处理、线性预测分析、矢量量化、隐马尔可夫模型技术、语音检测分析等;语音信号处理的各种应用,包括波形编码、参数编码、语音合成、语音识别、说话人识别及语音增强等。

语音信号处理算法的运算量很大,而且要满足实时的快速高效处理要求。最新的嵌入式系统和嵌入式芯片技术的发展,为语音信号的处理提供了优质可靠的平台。另外,嵌入式操作系统[6,7,8,9,10,11,12,13,14]软件编程的灵活性为各种不同的应用实现提供了方便,利用嵌入式系统硬件平台和嵌入式应用软件实现实时语音信号处理的各种功能已成为一种趋势[5]。为了满足高等院校培养本科生和研究生教学需要以及科研开发人员进行语音信号处理实验和开发的需要, 本文对语音信号处理嵌入式实验平台进行了研究和开发,提出了一种新的基于高端嵌入式系统的语音信号处理教学平台。

本项目所提出的语音信号处理嵌入式教学实验平台采用双路/多路麦克风进行语音信号实时采集, 采用高性能的Cortex-A8微处理器[7,8]实现语音处理算法,采用的嵌入式操作系统为uCLinux系统[13]和Android系统[14],可对用户开放二次编程接口, 可满足高等院校本科生、研究生及科研开发人员进行语音信号处理实验和开发的需要。

1语音信号处理嵌入式教学实验平台的总 体设计

本项目所开发的语音信号处理嵌入式教学实验平台主要可完成如下功能:

(1)多路语音信号的采集、预处理、模拟/数字 (A/D)转换、立体声播放和输出。

(2)提供数字语音处理各类算法(语音编解码、语音增强、语音识别、说话人识别、语言识别、语音合成、生源定位等)的实时实验。

(3)提供语音信号处理实时应用系统综合性实验。

(4)开放二次编程接口,提供开发示例源代码, 可进行二次开发。

语音信号处理嵌入式教学实验平台的总体设计框图如图1所示。首先,多路麦克风采集语音信号,采集到的语音信号经预处理后,通过多路24位A/D转换模块 获得数字 语音信号,然后采用CortexA8微处理器对获得的多路数字语音信号进行编码、增强、合成、压缩、识别以及声源定位等语音信号算法处理,通过电容触摸屏和键盘以及个人计算机与CortexA8微处理器的接口可实现上述语音信 号算法处 理的编程 和二次开 发。最后,经CortexA8微处理器处理过的数字语音信号经立体声D/A转换模块转换成连续语音信号,并通过扬声器输出。

图1中各模块的主要硬件设备如下。

(1)麦克风:一路驻极体麦克风/耳机接口用于常规语音信号采集、处理和回放实验,四路硅微麦克风阵列用于声源定位、语音增强等实验。

(2)A/D转换模块:不使用编解码芯片(CO- DEC),采用CS5368高速八路音频A/D转换器。

(3)D/A转换模块:采用CS4382芯片将串行数字信号转换成八路音频模拟信号。

(4)Cortex-A8微处理器模块:采用Samsung公司出品的被业界广泛使用的S5PV210微处理器。

(5)用户交互接口。

(6)7寸电容触摸屏和板载键盘。

(7)计算机接口:UART串口、I2S音频接口以及其他接口。

(8)立体声D/A转换模块:CS4382八声道D/ A转换芯片。

(9)扬声器:高保真(Hi-Fi)扬声器。

2语音信号处理嵌入式教学实验平台的实 验功能列表

本研究所开发的语音信号处理嵌入式教学实验平台主要可完成如下功能:

(1)多路语音信号的采集、预处理、A/D转换、立体声播放和输出。

(2)提供数字语音处理各类算法(语音编解码、语音增强、语音识别、说话人识别、语言识别、语音合成、生源定位等)的实时实验。

(3)提供语音信号处理实时应用系统综合性实验。

(4)开放二次编程接口,提供开发示例源代码, 可进行二次开发。

本教学实验平台可以开设实验如下:

(1)实时语音采集、语音波形显示、采样率变换等语音信号采集回放基础实验。

(2)FFT、语谱图、基因周期分析、共振峰检测等语音信号参数分析实验。

(3)语音编码、说话人识别、语言识别、声调检测、语种检测等高级语音信号处理实验。

(4)语音识别—合成—补偿数字助听系统综合实验。

表1列出了语音信号处理嵌入式教学实验平台可以开设的部分实验列表。

3语音信号处理嵌入式教学实验平台的部 分电路

3.1音频调理电路

NE5532是高性能低噪声双运算放大器(双运放)集成电路。与很多标准运放相似,但它具有更好的噪声性能、优良的输出驱动能力及相当高的小信号带宽、电源电压范围大等特点。因此很适合应用在高品质和专业音响设备、仪器、控制电路及电话通 道放大器。采用NE5532作音频放大时音色温暖, 保真度高。

3.2音频采集电路

系统采用CS5368进行4路语音信号的采集。CS5368是业界第一个支持高速TDM接口的8轨音频A/D转换器,它可在单 数据流内 提供高达192kHz采样率的8轨数据串行输出。这种能力降低了设计难度和数字信号处理器的输入/输出限制。此外,CS5368芯片的低延迟数字滤波特性,也使其成为现场声效和实时音频应用的最佳选择。

3.3Cortex-A8核心处理器

系统选用Cortex-A8处理器作为系统的主控芯片。Cortex-A8处理器是ARM的第一款超标量处理器,具有提高代码密度和性能的技术,用于多媒体和信号处理的NEONTM技术[15],以及高效地支持预编译和即时编译Java及其他字节码语言;运行时间编译目标(RCT)技术。Cortex-A8强大的数据处理能力是音频系统实时工作的保证。

4语音信号处理嵌入式教学实验平台的部 分预处理算法

系统背景噪声的影响,在很大程度上增加了语音处理的难度。我们开发的语音信号处理嵌入式教学实验平台利用对于传统的谱相减(SS)降噪声技术[16]和倒谱均值规整(CMN)降噪声技术[17]的修改以及一种简单实用的LPC美尔倒谱系数求取算法, 实现了高性能低成本的语音信号预处理功能。

4.1具有输入幅值谱自适应的SS方法

利用SS法进行降噪处理仍然是当今主要的降低环境噪声的方法。设对于第t帧幅值谱的第i元素,噪声下的语音功率是yi(t)2,推定的噪声功率是ni - 2,除噪后语音的功率是si -(t)2,则传统的SS法如式(1)所示。

由于传统的SS方法考虑噪声为平稳噪声,所以对于整个语音段,噪声功率以及权系数α一般取相同的值。而实际环境下的噪声,例如展览会中的展示隔间内的噪声是非平稳噪声,所以用相同的噪声功率值是不确切的。同样,传统的SS方法用相同的权值α,有可能发生减除过度或过少的问题,使得有的区段要么噪声消除不够,要么减除过多产生si -(t)2失真。为此,本文对传统的SS方法进行了如下修改。首先,对于噪声功率估计,采用如下(2) 式,在整个区域用语音以外的输入帧功率xi(t)2, 对噪声功率进行逐帧逐次更新。

其次,让权值α和输入语音功率相适应,按如下 (3)式随输入语音功率谱值改变。以避免产生减除过多或过少的问题。式中θ1和θ2为门限阈值,C1 和C2为常数。

4.2基于 MAP的CMN方法

对于由输入和传输电路系统引起的乘法性噪声,利用CMN方法可以得到比较好的抑制效果。设对于第t帧倒谱的第i元素,噪声下的语音倒谱是Ci(t)、除噪后语 音的倒谱 是C i(t),则传统的CMN法如(4)式所示。

式中C为整个输入语句的倒谱平均值。这种长时CMN方法存在两个问题,一是由于输入语句中音素的出现频度会改变C的大小,直接影响规整的效果。二是必须到终点为止计算完成以后,才能算出C,影响了实时性。为此,我们仿照HMM参数的最大后验概率(MAP)学习算法[17],利用MAP算法来提高计算C的精度,公式如(5)式所示。

MAP算法是渐进自适应方式,样本是逐个输入的。式中γ是自适应训练系数,可由实验确定。Ci0是表示先验分布的初始估计值,可由学习数据确定。

4.3LPC美尔倒谱系数特征参数提取

特征参数提取是模式识别的关键问题,因为特征参数的好坏对于语音识别精度有很大影响。我们根据人的听觉特性把常用的识别参数LPC倒谱系数(LPCC)进一步按 符合人的 听觉特性 的美尔 (MEL)尺度进行非线性变换[17],求出如下所示的LPC美尔倒谱系数(LPCMCC)。

这里,CK表示倒谱系数,MCk表示美尔倒谱系数,当n>order时MCk(n)=0,并且当抽样频率为8kHz时,α取0.31。

5结束语

本文介绍了一种比较完备的语音信号处理嵌入式教学实验平台,已在实验室通过验证,它可满足高等院校本科生、研究生及科研开发人员进行语音信号处理实验和开发的需要。

摘要:本文介绍了一种语音信号处理嵌入式教学实验平台,该系统可采用多路麦克风进行语音信号实时采集,并通过高性能的Cortex-A8微处理器实现语音处理各种核心算法。该教学平台采用uCLinux嵌入式操作系统和Android系统结合,可对用户开放二次编程接口。作为语音信号处理教学的实验平台,也可以作为语音信号处理应用项目的开发平台。

3.嵌入式系统开发实验一 篇三

关键词:多任务操作系统;嵌入式系统;开发;应用

中图分类号:TP316.2 文献标识码:A 文章编号:1674-7712 (2014) 18-0000-01

所谓多任务系统,顾名思义就是指能够满足实时控制系统的实时性要求,可以有效地管理系统及资源的操作系统软件,随着近些年来对互联网技术的需求,凭借其在企业管理之中的重要地位,获得了飞速发展的机会,一般说来多应用在嵌入式系统之中,两者相辅相成。众所周知,嵌入式系统是用来控制或者监视机器、装置、工厂等大规模设备的系统,并以计算机作为运行基础,如何才能够将两者有机的结合,已经成为越来越多专业人士密切关注的人们话题之一,本文仅代表个人观点,片面偏颇之处,还望不吝指正。

一、项目概述

(一)任务及多任务

就计算机技术工程之中,任务是指独立执行的一个功能或这个处理的过程,是RTOS调度的基本单位。一般说来,在一个多任务处理的环境之下,只有当其它程序认可的时候,一个运行程序才可获得处理的时间。在现实的生活之中,这种技术的应用可以表现为在计算机上多程序的运行,可以较大程度的提高人们利用互联网的效率,提高居民幸福指数,此外在企业的应用之中,通常表现为对机器、装置多种工况的实时监测,可以有效地提高机器、装置运行效率,促进生产力的进一步提升。

(二)调度方式

随着时代的不断快速发展,激烈的市场竞争要求任务及多任务技术的应用必须更加精确的采样和实时反馈信息,所以,多任务操作系统的优势可以说是十分显著的。任务调度在一个任务的完成、中断处理结束以及任务被阻塞时执行。调度的时候首先要得到最高优先级的就绪任务,然后再进行现场的保存和恢复。

(三)发展趋势

正如上文所述,城市化进程的加剧,使人类对于计算机的运行做出了更高的要求,多任务操作系统在嵌入式系统开发中的应用,可以有效、及时的反馈信息,不仅仅对于民用互联网技术的提高,具有非常重要的意义,且在企业中的意义也十分的显著,主要表现在促进企业管理的方面,有鉴于此,其发展一直备受关注,然而随着时间的逐渐推移,其中也逐渐暴露出一些问题,正日益阻碍该领域成果的取得,所以,必须要及时的提出切实可行的方案,才能够为其发展重新注入活力,促进生活质量及综合竞争力的更好提高。

二、多任务操作系统在嵌入式系统应用的不足之处

(一)技术层面

就我国互联网的发展现状而言,技术方面的缺陷是当前首要处理的问题之一。计算机的起源可以追溯到1946年,由美国人率先研制并使用,第三次工业革命的爆发,促进了以互联网技术为基础的计算机行业的蓬勃发展,至今计算机互联网已经成为科技的象征,并在国民经济之中占据重要的成分。然而由于我国在该领域的发展和起步都比较的晚,且起初的重视程度不够高,一些居民对待其态度也有失准确,导致其发展还远远不如其他发达国家,甚至更多的互联网技术都只是舶来品,没有多少能代表我国技术的标志性产品。此外,由于我国教育制度的不足,大多数学校培养的人才缺乏创新,使技术瓶颈也很难得到大的突破。

(二)管理层面

在管理层面导致计算机互联网技术不足,主要表现在软件开发企业和应用该技术的企业。在软件开发企业之中,由于上文所提及的技术性缺陷,导致在人员的管理上存在缺陷,笔者通过对相关数据的整理和分析发现,众多计算机软件开发公司在职员的录用上,大多忽视对高校专业人士的重视,因为他们缺乏一定的实践经验,对职员的学习机会也不加把握,往往只是培养少数骨干,所以,在整个业内难以形成浓郁的学习成长氛围,此外各软件公司之间的竞争也属于一种混乱无序的状态。在一般企业的应用中,由于内部关系逐渐呈现复杂化的趋势,企业经营者一味追求利益,也忽视该技术的运用及升级,尤其是中小型企业,该技术的应用近乎空白,这些客观因素的存在,无疑都在一定程度上阻碍多任务操作系统在嵌入式系统之中的应用。

三、多任务操作系统在嵌入式系统应用的相应对策

(一)技术层面

正如上文所述,我国计算机互联网技术仍然处于起步阶段,针对技术不足的现象,个人认为不妨通过政策予以大力的扶持与鼓励,改变从前的教育模式,实现企业和高校之间的密切合作,形成一股有效的合力,共同推动人才的成长,为计算机互联网技术的发展提供坚实的技术保证;在企业内部,重视职员的学习机会,使每个职员都有机会为企业的发展贡献才智;通过现代传媒的手段,普及互联网的知识,吸引更多专业人士的关注,共同致力于互联网技术的更好发展;建立软件开发区,通过各个企业之间的良性竞争,激烈共同发展。

(二)管理层面

在管理層面,必须革新企业经营者的发展观念,通过各种符合时代发展要求的观念理念,为多任务操作系统在嵌入式系统的应用保驾护航;加强和高校之间的联系,使最新的研究成果更加有效地运用到现实生活当中,促进该技术的升级;建立健全、完备的监督制度,规范企业内部的管理,为计算机技术的应用提供一定的制度保证。

四、结束语

正如上文所述,随着时代的不断快速发展,计算机技术的应用不仅仅能够为居民的生活品质提高做出相应的保障,还能够在较大程度上提升企业的综合竞争力,有鉴于此,必须对其有正确的认知,并能够积极分析其存在的不足,技术予以妥善的解决,促进该领域的健康、稳定发展,本文仅结合个人多年的工作实践经验,就多任务操作系统在嵌入式系统之中的应用展开了论述,旨在促进该行业的更好发展,观点片面不足之处,还望专业人士不吝指正。

参考文献:

[1]荣国平,刘天宇,谢明娟.嵌入式系统开发中敏捷方法的应用研究综述[J].科学学报,2014(02).

[2]喻亮.嵌入式系统的结构特征与研究概况[J].企业科技与发展,2010(08).

4.嵌入式指纹识别系统开发 篇四

摘要:介绍了指纹识别技术的基本原理,嵌入式操作系统的选择及定制。计算机控制单元的软件及硬件设计包括:指纹并口采集板设计及初始化程序,前台指纹建档(比对程序,局域网通讯程序,数据处理程序等。

关键词:指纹识别 嵌入式 通讯 操作系统

生理测定技术是当前研究的热点之一。目前,有很多技术等生物测定技术可用于身份认证,包括:虹膜识别、视网膜识别、面部识别、签名识别、声音识别技术、指纹识别技术等。其中指纹因具有终生不变性及稳定性,是目前应用前景较好的生物识别系统。但指纹识别目前在国内乃至世界仍未普及的主要原因是:(1)速度慢:目前一般系统辨别需要数秒钟甚至更长;(2)性能差:错误拒识率(FRR)和错误接受率(FAR)过高,目前市场上出现的系统一般FRR<3%,FAR<1/106;(3)价格高:由于目前国内主要引用国外成熟的指纹识别技术,并且比对系统采用PC机处理,体积庞大,不便移动。本系统在对指纹识别技术优化的基础上,与嵌入式技术相结合,可较好地解决上述问题。

1 指纹识别原理

指纹识别的基本原理为:采用细节点坐标模型来做细节匹配,即对指纹的脊线末梢和指纹的脊线分支点提取特征点鉴定指纹。具体的自动指纹识别系统框图见图1。

指纹图像的预处理:目的是去除指纹图像中的噪音,将其转化为一幅清晰的点线图,便于提取正确的指纹特征。预处理影响指纹识别的效果,具有重要的意义。它分四步进行,即灰度滤波、二值化、二值去噪、细化。

对图像细化后,采用细节点模反提取出指纹图像的脊线末梢和脊线分支点的位置,将指纹认证问题转化成为点模式匹配问题。建档时将特征位置点坐标转化为极坐标后存入数据库,作为建档模板。指纹比对时,采用同样的`方法,得到比对模板。由于要考虑指纹的平移和旋转(对极坐标只考虑旋转),对每个关键点A,在指纹图像上寻找两个与其最后的关键点R、S,把A、R、S点的类型(末梢或分支点)分别纪录为nType1、nType2、nType3;把连接点A与点R、点A与点S、点R与点S的3条虚拟线段所跨越的脊线数分别记为nCrossNum1、nCrossNum2、nCrossNum3。如果这两点满足一定茶杯条件,则认为点A与点B初匹配成功,如此可选择出最好的3组对应点,计算出比对模板相对建档模板的旋转角度,将比对模板矫正后,再进行细节点的精细匹配,根据隶属函数可计算两个指纹的相似度。如大于某个阈值,则认为是同一指纹。

2 系统的定制

2.1 选择嵌入式操作系统

随着微电子技术的进步,芯片的制造成本和销售价格都大大降低了,而功能和内部支持的端口却大大扩展了,16位和32位嵌入式处理器逐渐成为电子产品设计的主流。为了缩短产品设计周期和运行时间,使工作更稳定、更可靠和更高效并实现需要的复杂功能,需要运行于嵌入式处理器上的嵌入式操作系统,才能形成完整的系统平台。当前嵌入式操作系统包括Microsoft Embedded NT 4.0、Microsoft Windows CE、Nucleus PLUS、pSOSystem等。由于指纹识别对系统计算能力要求较高,需要具有强大的

5.嵌入式系统开发实验一 篇五

按照电气工程师协会的一个定义:嵌入式系统是用来控制或监视机器、装置或工厂等的大规模系统的设备。具体说来,它是电脑软件和硬件的综合体;是以应用为中心,以计算机技术为基础,软硬件可裁减,从而能够适应实际应用中对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。一般来说,嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,终端用户很难或者不可能改变固件。而Linux也早已成为IT界家喻户晓的一个名字。概括说来,将Linux应用于嵌入式系统的开发有如下一些优点:

① Linux自身具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越在嵌入式系统开发中仿真工具(ICE)的障碍。

② 内核的完全开放,使得可以自己设计和开发出真正的硬实时系统;对于软实时系统,在Linux中也容易得到实现。

③ 强大的网络支持,使得可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。

2 嵌入式系统设计的过程

按照嵌入式系统的工程设计方法,嵌入式系统的设计可以分成三个阶段:分析、设计和实现。分析阶段是确定要解决的问题及需要完成的目标,也常常被称为“需求阶段”;设计阶段主要是解决如何在给定的约束条件下完成用户的要求;实现阶段主要是解决如何在所选择的硬件和软件的基础上进行整个软、硬件系统的协调实现。在分析阶段结束后,通常开发者面临的一个棘手的问题就是硬件平台和软件平台的选择,因为它的好坏直接影响着实现阶段的任务完成。

通常硬件和软件的选择包括:处理器、硬件部件、操作系统、编程语言、软件开发工具、硬件调试工具、软件组件等。

在上述选择中,通常,处理器是最重要的,同时操作系统和编程语言也是非常关键的。处理器的选择往往同时会限制操作系统的选择,操作系统的选择又会限制开发工具的选择。

3 硬件平台的选择

3.1 处理器的选择

嵌入式系统的核心部件是各种类型的嵌入式处理器。据不完全统计,目前全世界嵌入式处理器的品种总量已经超过1000多种,流行体系结构有30几个系列。但与全球PC市场不同的是,没有一种微处理器和微处理器公司可以主导嵌入式系统,仅以32位的CPU而言,就有100种以上嵌入式微处理器。由于嵌入式系统设计的差异性极大,因此选择是多样化的。

调查上市的CPU供应商,有些公司如Motorola、Intel、AMD很有名气,而有一些小的公司,如QED(Santa Clara.CA)虽然名气很小,但也生产很优秀的微处理器。另外,有一些公司,如ARM、MIPS等,只设计但并不生产CPU,他们把生产权授予世界各地的半导体制造商。ARM是近年来在嵌入式系统有影响力的微处理器制造商,ARM的设计非常适用于小的电源供电系统。Apple在Newton手持计算机中使用ARM,另外有几款数字无线电话也在使用ARM。

设计者在选择处理器时要考虑的主要因素有:

① 处理性能。一个处理器的性能取决于多个方面的因素,如时钟频率,内部寄存器的大小,指令是否对等处理所有的寄存器等。对于许多需用处理器的嵌入式系统设计来说,目标不是在于挑选速度最快的处理器,而是在于选取能够完成作业的处理器和I/O子系统。如果是面向高性能的应用设计,那么建议考虑某些新的处理器,其价格相对低廉,如IBM和Motorola Power PC。

② 技术指标。当前,许多嵌入式处理器都集成了外围设备的功能,减少了芯片的数量,降低了整个系统的开发费用。开发人员首先考虑的是,系统所要求的一些硬件能否无需过多的胶合逻辑(GL,Glue Logic)就可以连接到处理器上。其次是考虑该处理器的一些支持芯片,如DMA控制器,内存管理器,中断控制器,串行设备、时钟等的配套。

③ 功耗。嵌入式微处理器最大并且增长最快的市场是手持设备、电子记事本、PDA、手机、GPS导航器、智能家电等消费类电子产品。这些产品中选购的微处理器,典型的特点是要求高性能、低功耗。许多CPU生产厂家已经进入了这个领域。今天,用户可以买到一颗嵌入式的微处理器,其速度像笔记本中的Pentium一样快;而它仅使用普通电池供电即可,并且价格很便宜。如果用于工业控制,则对这方面的考虑较弱。

④ 软件支持工具。仅有一个处理器,没有较好的软件开发工具的支持也是不行的,因此选择合适的软件开发工具对系统的实现会起到很好的作用。

⑤ 是否内置调试工具。处理器如果内置调试工具可以大大缩小调试周期,降低调试的难度。

⑥ 供应商是否提供评估板。许多处理器供应商可以提供评估板来验证理论是否正确,决策是否得当。

3.2 硬件部件选择的其它因素

① 生产规模。打算做1套?多套?还是规模生产?如果生产规模比较大,可以自己设计和制备硬件,这样可以降低成本。反之,最好从第三方购买主板和I/O板卡。

② 开发的市场目标。如果想使产品尽快发售,以获得竞争力,此时要尽可能买成熟的硬件;反之,可以自己设计硬件,降低成本

③ 软件对硬件的依赖性。软件是否可以在硬件没有到位的时候并行设计或先行开发。

④ 只要可能,尽量选择使用普通的硬件。在 CPU 及架构的选择上,一个原则是:只要有可替代的方案,尽量不要选择 Linux 尚不支持的硬件平台。

4 软件平台的选择

图1所示的嵌入式软件的开发流程,主要涉及到代码编程、交叉编译、交叉连接、下载到目标板和调试等几个步骤,因此软件平台的选择也涉及到以下几个方面。

4.1 操作系统的选择

(1)操作系统选择应考虑的因素

硬件方案确定之后,操作系统的选择就相对轻松了。硬件的不同,会影响操作系统的选择。低端无MMU(Memory Management Unit,存储器管理单元)的CPU,要使用uClinux 操作系统;而相对高端的硬件,则可以用普通的嵌入式 Linux 操作系统。uClinux 和普通的 Linux 有各自的优势和缺点。可用于嵌入式系统软件开发的操作系统很多,但关键是如何选择一个适合开发项目的操作系统。经过多年的开发实践,笔者认为应该从以下几点进行考虑:

① 操作系统提供的开发工具。有些实时操作系统(RTOS)只支持该系统供应商的开发工具,因此,还必须向操作系统供应商获取编译器、调试器等;而有些操作系统使用广泛,且有第三方工具可用,因此,选择的余地比较大。

② 操作系统向硬件接口移植的难度。操作系统到硬件的移植是一个重要的问题,是关系到整个系统能否按期完工的一个关键因素。因此,要选择那些可移植性程度高的操作系统,避免操作系统难以向硬件移植而带来的种种困难,加速系统的开发进度。

③ 操作系统的内存要求。均衡考虑是否需要额外花钱去购买RAM或EEPROM来迎合操作系统对内存的较大要求。

④ 开发人员是否熟悉此操作系统及其提供的API。

⑤ 操作系统是否提供硬件的驱动程序,如网卡等。

⑥ 操作系统的可剪裁性。有些操作系统具有较强的可剪裁性,如嵌入式Linux、Tornado/VxWorks等等。

⑦ 操作系统的实时性能。

(2)几类嵌入式Linux系统的比较

(本网网收集整理)

嵌入式Linux系统方面的产品主要分为三类:

第一类是专门为Linux的嵌入式应用而做的。如何让Linux更小、更容易嵌入到体积要求和功能、性能要求更高的硬件中去,是他们的产品开发方向,如MontaVista的MontaVista Linux等。第二类是专门为Linux的实时特性设计的产品。将Linux开发成实时系统尤其是硬实时系统,应用于一些关键的控制场合(不仅仅是信息电器)。如,Fsmlabs公司开发出来的RT-Linux产品已经用在工业控制的很多方面;葡萄牙的Coimbra大学已经利用RT-Linux实现了化工生产控制厂里用来控制反应和程序控制的系统。第三类的产品是将实时性和嵌入式方案结合起来的方案。很多公司都这么做,并且提供集成化的开发方案,如Lineo、TimeSys等等。

因此选择操作系统时,要根据自己的嵌入式要求和实时性要求,选择适合自己的嵌入式Linux;同时,和选择硬件的原则一样,如果可能,尽量选择使用普通的嵌入式 Linux 系统。

4.2 编程语言的选择

编程语言的`选择主要考虑以下因素:

① 通用性。不同种类的微处理器都有自己专用的汇编语言。这就为系统开发者设置了一个巨大的障碍,使得系统编程更加困难,软件重用无法实现。而高级语言一般和具体机器的硬件结构联系较少,多数微处理器都有良好的支持,通用性较好。

② 可移植性程度。汇编语言和具体的微处理器密切相关,为某个微处理器设计的程序不能直接移植到另一个不同种类的微处理器上使用,移植性差;而高级语言对所有微处理器都是通用的,程序可以在不同的微处理器上运行,可移植性较好。

③ 执行效率。一般来说,越是高级的语言,其编译器和开销就越大,应用程序也就越大、越慢;但单纯依靠低级语言,如汇编语言来进行应用程序的开发,带来的问题是编程复杂、开发周期长。因此,存在一个开发时间和运行性能间的权衡问题。

④ 可维护性。低级语言如汇编语言,可维护性不高。高级语言程序往往是模块化设计,各个模块之间的接口是固定的。当系统出现问题时,可以很快地将问题定位到某个模块内,并尽快得到解决。另外,模块化设计也便于系统功能的扩充和升级。

几种开发语言的比较:

在嵌入式系统开发过程中使用的语言种类很多,比较广泛应用的高级语言有:Ada、C/C++、Modula-2和Java等。Ada语言定义严格,易读易懂,有较丰富的库程序支持,目前在国防、航空、航天等相关领域应用比较广泛,未来仍将在这些领域占有重要地位。C语言具有广泛的库程序支持,目前在嵌入式系统中是应用最广泛的编程语言,在将来很长一段时间内仍将在嵌入式系统应用领域占重要地位。C++是一种面向对象的编程语言,目前在嵌入式系统设计中也得到了广泛的应用,如GNU C++。Visual C++,是一种集成开发环境,支持可视化编程,广泛应用于GUI程序开发。但C与C++相比,C++的目标代码往往比较庞大和复杂,在嵌入式系统应用中应充分考虑这一因素。Modula-2定义清晰,支持丰富,具有较好的模块化结构,在教学科研方面有较广泛的应用。虽然该语言的开发应用一直比较平缓,但近两年在欧洲有所复苏。J

ava语言相对年轻,但有很强的跨平台特性,目前发展势头较为强劲。Java语言的“一次编程,到处可用”的特性,使得它在很多领域备受欢迎。随着网络技术和嵌入式技术的不断发展,Java及嵌入式Java的应用也将越来越广泛,但是Java消耗硬件资源较大。

4.3 集成开发环境考虑的因素

集成开发环境IDE(Integrated Development Environment)应考虑以下因素:

① 系统调试器的功能。系统调试特别是远程调试是一个重要的功能。

② 支持库函数。许多开发系统提供大量使用的库函数和模板代码,如大家比较熟悉的C++编译器就带有标准的模板库。它提供了一套用于定义各种有用的集装、存储、搜寻、排序对象。与选择硬件和操作系统的原则一样:除非必要,尽量采用标准的 glibc。

③ 编译器开发商是否持续升级编译器。

④ 连接程序是否支持所有的文件格式和符号格式。

4.4 硬件调试工具的选择

好的软件调试程序可以有效地发现大多数的错误,但是如果再选择一个好的硬件调试就会达到事半功倍的效果。常用的硬件调试工具有以下几种:

① 实时在线仿真器(ICE,In-Circuit Emulator)。用户从仿真插头向ICE看,ICE应是一个可被控制的MCU。ICE是通过一根短电缆连接到目标系统上的。该电缆的一端有一个插件,插到处理器的插座上,而处理器则插到这个插件上。ICE支持常规的调试操作,如单步运行、断点、反汇编、内存检查、源程序级的调试等等。

② 逻辑分析仪。逻辑分析仪最常用于硬件调试,但也可用于软件调试。它是一种无源器件,主要用于监视系统总线的事件.

③ ROM仿真器。ROM仿真器用于插入目标上的ROM插座中的器件,用于仿真ROM芯片。可以将程序下载到ROM仿真器中,然后调试目标上的程序,就好像程序烧结在PROM中一样,从而避免了每次修改程序后直接烧结的麻烦。

④ 在线调试OCD或在线仿真(on-chip emulator)

特别的硅基材料以及定制和CPU引脚的串行连接,在这种特殊的CPU芯片上使用OCD (On-Chip Debugging),才能发挥出OCD的特点。用低端适配器就可以把OCD端口和主工作站以及前端调试软件连接起来。从OCD的基本形式看来,它的特点和单一的ROM监测器是一致的,但是不像后者那样,需要专门的程序以及额外的通信端口。

4.5 软件组件的选择

有些软件组件是免费的,有些软件组件是授权的。授权软件组件的费用一般都很高,但大都经过严格的测试,可靠性高,调试时间短。现在也有一些免费的自由软件组件,它们的性能、可靠性也很好。因此开发人员在选择的时候要加以权衡,确定哪种方案更好。

5 展 望

6.嵌入式系统开发实验一 篇六

嵌入式产业现已成为中国IT产业中的一个重要的新兴产业和经济增长点,嵌入式技术正在越来越广泛地被应用在通信、电子、工业、交通等各个领域,大到石油提炼和相关的贮运设施、建筑设备、计算机辅助制造系统、能源控制系统、核电站硬件机器人系统,小到我们日常使用的智能手机、电话交换系统,以及数字电视、掌上电脑、DVD、MP4、数码相机、网络冰箱、网络空调、可视电话等,嵌入式技术正在我们的生活中占据着越来越重要的地位,如下图所示,但随着国内嵌入式系统的飞速发展,嵌入式软件人才的缺乏已经成为了国内嵌入式产业可持续发展的瓶颈之一,据统计,每年的嵌入式人才缺口约有50万人。

目前,我国嵌入式软件复合型人才基数小、队伍不稳定,缺口较大。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件,对软件专业水平要求较高,而且必须懂得硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现,掌握这些新技术的人当然很找。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。

因此,为了适应当前社会对嵌入式人才的需求,我们应该尽快建立起“嵌入式系统实验室”,为培养嵌入式人才搭建起坚实的软硬件平台。

二、嵌入式系统实验室的功能

由于要将该实验室建设为标准型实验室,因此要采用较高的配置标准,以适应10—技术发展和使用的要求,且具有开放性、灵活性和可扩展性。

该实验室建成之后,除了满足日常嵌入式学科教学之外,还要实现如下功能:

学生学期课题设计;

全国嵌入式大学生电子竞赛实训基地;

学生相关课题的毕业设计;

本校教师科研开发基地;

社会嵌入式系统工程师培训基地。

三、嵌入式系统实验室的建设

实验室的建设包括嵌入式实验室环境、嵌入式实验室硬件环境建设,软件环境的建几个方面内容。

3.1 嵌入式实验室环境

容纳40人左右的实验室机房,建议使用面积80m2以上;实验桌椅40套,每个学生实验桌面140×60(mm)以上,方便学生在桌面上放置实验箱等设备。

Windows客户机+Linux服务器的方式,对实验室而言,应该是最适合的方案了。只需多一台Linux服务器就可以了。

3.2 嵌入式实验室硬件环境配置清单

嵌入式实验室设备清单,如下表所示:(。。。。。)

2、嵌入式实验箱的技术参数指标要求

嵌入式实验箱是嵌入式系统实验室的关键组成部分,具体参数指标要求如下:

Intel Xscale PXA270嵌入式实验箱

硬件要求:PXA270实验箱由核心板+教学底板组成

核心板硬件参数

处理器: Intel XScale PXA270 520MHz

SDRAM:64Mbyte

FLASH: 32Mbyte

底板硬件参数

LCD接口: 配TFT 8” (640*480)屏。

VGA输出接口:可接模拟CRT显示器或液晶显示器

触摸屏: UCB1400BE,四线电阻式

以太网接口:10M/100M 自适应接口1个

Audio: AC97标准音频输入/输出

USB HOST:1个

USB CLIENT:1个

摄像头接口:1个

红外通信接口:1个

串口:5个RS232(其中3个为全功能)

485通信接口:1个

JTAG接口:20pin

PCMCIA接口:1个

IDE接口:可接笔记本硬盘

SD/MMC卡接口:可接SD卡或MMC卡

SMC卡:可扩展NAND FLASH

LED阵列:8×8发光二极管阵列

七段数码管: 4个7段数码管

AD:1个电位器电压输入,一个温度传感器输入

RTC:实时钟

键盘:4×5键盘矩阵

扩展接口:2×96pin欧式座,引出所有总线信号:可扩展以下模块:

DSP6713&USB2.0高速数据采集板

FPGA扩展板

GPS&GPRS扩展板

CAN&485通信扩展板

电机扩展模块

射频卡&IC卡扩展板

热敏滑动指纹传感模块

802.15.4扩展模块

3.3 嵌入式实验室软件资源清单

1、提供嵌入式Linux2.4以及Windows CE5.0操作系统。

⑴Windows CE.NET 5.0 BSP

BootLoader源代码;以太网驱动源代码;音频驱动:提供音频AC’97驱动程序源代码;LCD驱动源代码;触摸屏驱动源代码;USB Host驱动源代码;USB Slave驱动源代码;摄像头驱动源代码;IrDA红外接口驱动源代码;RS232串口驱动源代码;RS485驱动源代码;PCMCIA 接口驱动源代码;SD/MMC 接口驱动源代码;LED数码管驱动源代码;Keypad驱动源代码。

⑵Linux 2.4内核

BootLoader源代码;Linux内核源代码;文件系统,提供基于日志的文件系统Jffs2;支持图形用户界面:QT;以太网驱动源代码;音频驱动:提供音频AC’97驱动程序源代码;LCD驱动源代码;触摸屏驱动源代码;USB Host驱动源代码;摄像头驱动源代码; RS232串口驱动源代码;RS485驱动源代码; PCMCIA接口驱动源代码;SD/MMC接口驱动源代码; LED数码管驱动源代码;Keypad驱动源代码。

2、必须提供硬件测试程序,可以快速验证实验平台的硬件接口,方便产品验收和日常维护。

3、嵌入式教学开发平台的实验内容:

基础实验:Boot实验;7段数码管实验;串口传输实验;中断处理实验;触摸屏实验;LCD控制器实验。

7.嵌入式系统开发实验一 篇七

嵌入式系统的关键是由一个或几个预先设定编程好的,用来完成少数特定任务的微处理器或者单片机组成。嵌入式系统所设定的系统软件是不会轻易改变的,所以通有很大区别。

1 嵌入式系统的发展历史

20世纪70年代随着单片机的出现,各种嵌入式微处理器逐渐产生,微控制器被广泛应用到众多领域,这也带来了嵌入式技术30年的蓬勃发展。嵌入式技术最早是因为单片机的出现,被广泛应用到信息通信技术、汽车技术、工业机器、家电设施等众多领域,人们可以通过内嵌特定的装置来达到理想的使用功能,这也使得各种设备在使用时更加安全、便捷、节能、环保。那时的设备已经达到了初步的嵌入式技术要求,但是所使用的是8位芯片以及单线程程序,所以也不能称之为“系统”。

最早的单片机是Intel公司的8048,它出现在1976年。在8048基础上又研制成功了8051单片机,51系列的单片机可以说是迄今为止较为成功的技术,它被广泛应用到众多的领域。8051也成为了单片机历史上最值得纪念的伟大成果。

从80年代开始,嵌入式编程人员开始用商业级的操作系统来编写嵌入式系统操作程序。这大大缩短了编程开发所用的时间周期,由此也降低了开发费用,提高了开发效率。这个时期的操作系统实际上是一个实时核,其中包含了众多的传统操作系统特征,例如任务管理、任务间通讯、内存管理、间断支持等功能。但那时的操作系统已经可以被称为“嵌入式系统”了。

90年代随着计算机技术的飞跃更新,嵌入式系统的应用也越发广泛和功能细化,这也就对嵌入式系统的要求更加高端化、具体化、程式化。随着实时性要求水平的不断提升,软件规模的不断扩大,在众多研究者的努力下,该技术逐渐成长为实时多任务操作系统,随着国际的大规模推广应用,成为嵌入式系统的主流技术。在这期间嵌入式系统也逐渐被各大相关企业重视,纷纷大力开发自己的嵌入式系统。除了传统的几家老牌公司外,还出现了Palm OS、WinCE、嵌入式Linux、Lynx、Nucleux以及国内的Hopen、Delta OS等嵌入式操作系统[1]。

2 嵌入式系统的特点

嵌入式系统应用热潮的产生原因主要包括以下几点:第一,芯片技术的发展和提升,使得单个芯片拥有了更为强大的处理功能,其应用的领域也可以通过不同集成接口得以推广扩大,这也使得众多的芯片生产厂商将开发重心投入到嵌入式系统开发上来。第二,满足市场需求的不断变化。由于现在人们对于产品的安全性、便捷性、稳定性、可靠性和低成本性的要求,嵌入式系统无疑是最好的选择,它可以预先设计特定编程来完成这些特殊功能。因此,嵌入式系统逐渐从纯硬件实现和使用通用计算机实现中脱颖而出,成为广大生产商和用户广为关注的焦点[2]。嵌入式系统具备以下几点特征。

2.1 系统内核小

嵌入式系统通常被应用到较小的设施设备上,其具有的系统资源相对有限,所以其系统内核较之传统的操作系统要小很多。

2.2 专用性强

嵌入式系统是为实现特定功能而设计编程的,具有极强的专用性,他的软件系统和硬件功能紧密结合,没有严格在同一机型、同一产品上进行操作,也要根据硬件设置的不同来进行不断的修改更新。

2.3 系统精练

由于嵌入式系统的系统软件和应用软件紧密融合,没有明确的区分,在功能设计上也就不要求进行复杂的编程,因此其操作系统就变得非常精练,生产成本也大大降低,此外也有利于系统的安全操作。

除以上特征外,嵌入式系统还具备较高的实时性和开发标准化等优点。

3 嵌入式系统的组成

嵌入式系统的主要组成包括硬件设备和软件系统两个层面。

3.1 嵌入式系统的硬件组成

嵌入式系统的硬件组成包括硬件层中嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和1/O接口(A/D、D/A、1/O)等[3]。

3.2 嵌入式系统的软件组成

系统软件层由实时多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台[4]。

4 结束语

科技的发展带动着技术应用领域的不断进步,嵌入式系统的产生与迅猛发展,处处体现着科学技术进步推动的身影。随着嵌入式系统应用层面的不断扩大,给人们带来的工作和生活方面的便利性也被极大地发挥出来。嵌入式系统核心技术的开发与创新,也将随着人们生产生活需求

摘要:嵌入式系统是一个以计算机为硬件基础,以应用程序为软件中心,兼具软硬件都可裁剪特点的专用计算机系统。该系统适用于对功能、尺寸、成本、可靠性、能耗等具有严格要求的操作系统。嵌入式系统一般可以分为嵌入式微处理器、嵌入式操作系统、配套硬件设备以及系统用户四部分,主要为了实现对其他设备进行监督、控制、管理等目的。嵌入式系统广泛应用于所有带有数字接口的设备中,包括手表、汽车、电视、录像机、手机等众多设备。

关键词:嵌入式系统,关键技术,开发应用

参考文献

[1]夏玮玮.嵌入式系统关键技术分析与开发应用[J].业界论坛,2003,(02):7-11.

[2]廖娜.嵌入式系统关键技术分析与开发应用探讨[J].电子测试,2013,(07):86-87.

[3]耿玉菊.嵌入式系统开发技术[J].牡丹江教育学报,2009,(01):126.

8.嵌入式系统开发实验一 篇八

【关键词】电子病历; 嵌入式; XML; 设计; 开发

【中图分类号】F416.63【文献标识码】A【文章编号】1672-5158(2013)07-0076-01

1 XML技术简介

扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。XML与Access,Oracle和SQL Server等数据库不同。数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:它极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

XML的前身是SGML(The Standard Generalized Markup Language),是自IBM从60年代就开始发展的GML(Generalized Markup Language)。同HTML一样,XML (可扩展标识语言)是通用标识语言标准(SGML)的一个子集,它是描述网络上的数据内容和结构的标准。尽管如此,XML不象HTML,HTML仅仅提供了在页面上显示信息的通用方法(没有上下文相关和动态功能),XML则对数据赋予上下文相关功能,它继承了SGML的大部分功能,却使用了不太复杂的技术。

XML技术的优点主要表现在三个方面,分别为可扩充性、内容和表现形式的分离以及数据处理方便,具体情况见表1所示:

2 基于XML的嵌入式电子病历书写系统设计

2.1 系统结构

本系统结构设计为三层架构,见图1所示:

三层架构的结构设计具有一定的优点,主要表现为在三层架构之下的各个逻辑层既相互独立,彼此之间又存在着较为密切的联系,这样一来,就对系统的扩充造成有利的影响,这也更加适应了医疗业务不断变化的趋势。就嵌入式电子病历系统与一般电子病历系统来看,两者之间存在着一定的差异,前者运行于双重环境之下,而后者往往只在单一环境下进行运行。

三层架构分别为前端客户表现层、中间应用服务层以及后端数据资源层:

①前端客户表现层:这一层主要是为嵌入式电子病历系统提供方便有效的操作方式,客户并不需要对知道其中具体的细节。一般用户通过客户表现层可以对病历进行一定程度上的查询;而对于高级用户而言,他们则享有更多的权限,例如新建病历、查询病历以及修改病历等;系统管理员可以对用户进行管理,对嵌入式系统存储空间进行管理。

②中间应用服务层:这一层的主要任务是对病历处理任务进行有效的执行,它所设计的内容较为广泛,主要包含有执行用户管理模块、执行病历数据存取的数据操作模块、病历数据库的维护和更新模块、基于节阳 web Service的信息交换模块、XML文档解析、XML文档与应用数据库的相互转换模块、电子病历安全考虑模块以及嵌入式系统存储空间管理模块等。

③后端数据资源层:对于后端数据资源层而言,它主要是由两个部分组成的,分别是XML文档库以及HIS系统数据库,后端数据资源层的主要作用是为电子病历操作提供相应的后台数据支持,一般情况下,对数据库的读写通过ADO.NET接口进行访问,对XML文档使用节几 Web Service技术保存和读取。

2.2 系统模块

用户管理模块:包含两个方面的工作,其一,管理员对用户进行一定程度的管理;其二,系统用户管理登录ID与密码,以及对用户的基本信息进行修改。

病历录入模块:对录入的病历信息进行接收,系统为病历信息的接收提供一个良好的界面;

病历信息表示与存储模块:使用XML记录的病历是文本格式,可直接对其进行阅读,并不会局限于计算机平台、软件以及数据库形式;

病历信息共享模块:病历信息与医院内部HIS子系统的信息集成以及医院之间信息的交换。

3 结束语

本文就针对基于XML的嵌入式电子病历书写系统设计与开发进行研究与分析。首先对SML技术及其优点进行了一定程度的介绍,然后在此基础之上从从系统结构与系统模块两个方面分析了基于XML的嵌入式电子病历书写系统设计。希望我们的研究能够给读者提供参考并带来帮助。

参考文献

[1] 胡业发,陈娟,陶飞,杨朝阳.基于XML的电子病历数据模式研究[J].计算机工程与设计.2007(04)

[2] 昇高昭,孙文东.电子病历-医院信息系统的发展方向[J].医学信息.2007(01)

[3] 孟健,曹立明,王小平,姚亮.基于XML电子病历多重签名方案的设计与实现[J].计算机工程.2006(19)

[4] 齐卫东.强化行业规范 促进医院信息化建设[J].解放军医院管理杂志.2006(03)

9.嵌入式系统开发实验一 篇九

项目名称:“arm嵌入式教学实验系统”

甲方:深圳信息职业技术学院

乙方:深圳市旋极历通科技有限公司

甲乙双方经友好协商,同意以“深圳市旋极历通科技有限公司”作为产业化基地,进行“arm嵌入式教学实验系统”的产业化实施,具体条款如下:

1、甲乙双方同意将该项目技术作价人民币贰佰万元;由甲方及参与研发人员提供技术服务,乙方负责产品化及市场营销的实施。

2、乙方每支付技术费人民币贰万元给甲方,将取得该项目的1%股权。乙方具体出资金额及控股比例,双方另行沟通并签定合作合同书,本合作意向于甲乙双方的合作合同书签定后生效。

3、若乙方支付的技术费高于人民币壹佰零贰万元,即乙方对该项目的控股比例高于51%,甲方不得对项目剩余作价比例进行再转让等处理;若乙方支付的技术费低于人民币肆拾万元,即乙方对该项目的控股比例低于20%,甲方有权独自继续对项目剩余作价比例进行再转让等处理。

4、在合作意向书生效后,该项目所有知识产权属甲乙双方共同所有。甲方不得再对该项目的扩充版、升级版、变形版本单独转让,且对该项目的核心及相差技术负有保密的义务,违约将追究法律责任。

5、甲乙双方将根据具体情况签署阶段性实施计划书。

6、未尽事宜,将友好协商解决。

甲方:深圳信息职业技术学院乙方:深圳市旋极历通科技有限公司

代表签字: 代表签字:

10.实验1管理软件系统的开发 篇十

管理软件系统的开发

一、实验题目:

设计一个简单实用图书管理系统。

二、实验要求

1.该实验的课内学时是4个课时。

2.程序完成后应该完成如下基本功能:

1)用自定义结构体typedef struct设计该软件的数据结构; 2)用链表将所有的图书按照图书编号顺序链接起来。

3)程序能够输入图书名称、图书编号、ISBN号、单价、作者、出版社。4)程序能够显示已经输入的指定图书编号的图书的信息。5)程序能够统计某一类图书(ISBN号相同)的数量。6)能够判断输入的ISBN号以及图书编号的有效性。

3.1)程序能够按要求显示指定作者或者指定出版社的图书的数量。2)允许添加、修改、删除图书信息。

3)设计一个通用模块,能够根据图书的任何一项信息进行排序,并且根据图书编号进程排序(升序或者降序)。

4)能够输入的数据长期存储在文件中,再次运行程序时从文件中读取数据,无须重复输入。

5)在程序的提示语言清晰明确,界面美观并且适用。

三、实验说明

1.互相之间可以进行算法的讨论,但文档以及程序每个人必须独立完成,如果发现雷同,则重做。

2.认真准备,实验前做好准备工作,准备工作包括完成实验报告中的(1)~(6)的部分,实验报告中(6)~(8)部分在实验结束后继续填写。

3.程序要上机调试成功并形成可执行的程序,记录调试过程中出现的错误现象以及如果改正

4.程序的运行结果要结合程序测试数据进行分析。

5.提交实验报告(报告格式见附录B)和源程序以及可以运行的程序。

五、实验报告内容(1)实验题目

(2)实验设计的数据结构及说明

(3)用层次图描述程序结构,并说明程序各函数的名称、功能,图示各函数之间相互的调用关系。

(4)各个函数的设计及说明

(5)测试数据的设计及预期结果

(6)调试过程记录:在程序调试过程中可能会出现许多问题,对这些问题要逐个记录错误位置、编译的描述(英文以及中文的含义)、如何解决。(7)实验结果记录以及与预期结果比较以及分析:在实验过程中除非一次成功,否则会有多个实验结果,对这些实验结果要逐个记录,并且与预期结果进行比较并分析。

(8)总结及心得体会:

六、实验成绩评定

11.嵌入式系统开发实验一 篇十一

关键词:嵌入式系统,WindowsCE,Boot Loader

Windows CE5.0是微软公司向嵌入式领域推出的一款操作系统。它最大程度继承了桌面版Windows操作系统的功能, 又副入了新特性, 以适应嵌入式领域的情况和要求。无论是商业应用需求, 还是人们的多媒体消费需求, 都能被采用CE操作系统的设备很轻松的满足。最新的5.0版本, 在实时性和稳定性上有大幅度提高, 广泛地被平板电脑、数码相机、彩屏手机、PDA等多种高性能产品采用。CE并不是一个通用的安装版操作系统, 在嵌入式硬件设备世界里, 一款CE系统通常只会针对某一种硬件平台生成。所以, 作为原始设备生产商, 必须根据自己的硬件平台和应用场合定制CE, 最主要的工作就是编写适合于自己的板级支持包 (BSP) 。在BSP中, 包含了一个重要的组成部分——Boot Loader。创建一功能完善的BootLoader, 是开发Win CE系统的第一步, 也是关键的一步。

1 Boot Loader的实现原理

Boot Loader是定制Windows CE操作系统过程中一个重要的开发环节。Boot Loader的作用正如名字中的两个单词:Boot, 即引导系统, 如果基于CE的产品采用BIOS实现硬件初始化和配置, 那么Boot Loader只需引导软件系统。如果没有采用BIOS, 那么Boot Loader的作用还包括实现BIOS的基本功能;Loader, 即加载操作系统, 在整个系统正常启动后Boot Loader通过不同的方式加载CE的内核文件nk.bin。当Boot Loader把nk.bin解压到RAM后就把CPU控制权交给CE内核。

根据一般的Boot Loader源码来分析一下Boot Loader的组成:

Boot Loader由两部分组成:OEM启动代码 (OEM startup code) 和主代码 (main code) 。OEM启动代码是最先执行的部分, 它的功能是初始化内存寄存器、设置CPU频率、初始化高速缓存等。之后它跳转到主代码中执行。一般OEM启动代码都是用汇编编写。主代码一般用C语言编写, 它负责其它所有任务, 在执行的同时还能够将执行的相关信息显示在屏幕上。一般添加公司LOGO或者其它启动LOGO都在此修改。

一般的Boot Loader的执行流程见下图:

上图中每个函数的功能如下:

Start Up () :CPU最先执行的函数。也就是启动代码。

Boot Loader Main () :先后调用Kernel Relocate、OEMDebug Init、OEMPlatform Init、OEMPreDownload等函数。此函数源码文件路径为%_WINCEROOT%publiccommonoakdriversethd bgblcommon。

OEMDebug Init () :初始化窗口。

OEMPlatform Init () :执行特定平台的初始化工作, 如一些驱动程序。

OEMPre Download () :做下载前的准备工作。一般用于反馈给用户信息。

Download Image () :下载操作系统镜像到RAM或Flash。

OEMLaunch () :负责启动镜像。

OEMRead Data () :从远程计算机读取数据。

OEMMap Mem Addr () :专用于写Flash时使用。

OEMShow Progress () :从函数名就能看出。

OEMIs FLash Addr () :判断一个地址是否是Flash的地址。

OEMFinish Erase Flash () :判断是否完成了擦除Flash内容工作。

OEMWrite Flash () :写镜像到Flash。

OEMStart Erase Flash () :开始擦除Flash。

OEMContinue Erase Flash () :继续擦除Flash工作。

2 Boot Loader不同的作用与实现方式

Boot Loader是一段单独的程序代码, 它存放于目标平台的非易失存储介质中, 如ROM或Flash。在开发CE的过程中, 它主要用于启动硬件和下载nk.bin到目标板上, 并有一定的监控作用。一般来说, 对于Boot Loader的功能要求并不是严格定义的, 不同的场合区别很大。比如, 在PC的硬件平台上, 由于硬件启动根本就不是通过Boot Loader, 所以Boot Loader就不需对CPU加电后的初始化做任何工作;Boot Loader是最先被执行的程序, 必须包含下载CE映像文件的功能。另外, 管理监控硬件设备通常也是必须的, 因这可以极大地方便工程开发。由于Boot Loader涉及到基本的硬件操作, 如CPU的结构、指令等, 同时又涉及到以太网下载协议和策软设定的映像文件格式。

3 如何编写Boot Loader源程序

3.1 启动部分

首先要实现初台化硬件的功能。在参考板的Boot Loader目录下, 会发现一些.s文件, 可能会是init.s或reset.s等, 这样的文件是CPU加电后最先执行的代码。由于此处是用汇编语言编写的, 所以与CPU关系紧密。一般参考板CPU与开发平台CPU会是相同或同一个架构。笔者使用的是属于同一种CPU的情况, 所以对寄存器的定义和初始化流程都可以不加改动。接着就是对于平台配置的分析, 包括平台存储空间的分配、外围设备的工作设定等。一般这里的区别是非常大的。所以必须要对CPU寄存器的值作相应设定。

3.2 主控部分

从这一部分开始, 均用C语言编写。

为了增加Boot Loader对平台的控制, 一般Boot Loader都会设计成支持命令输入的方式, 通过串口来接收用户的命令。这种机制中, 如果参考板有Loader支持的话, 那么可以自己添加有实用价值的命令, 完成一些需要的功能。

一般在平台调试完毕后, 可以在不用人工干预的情况下自动加载CE;而在调试阶段, 基本上是通过Loader所支持的命令来进行操作的。提供足够丰富的命令, 能极大简化和全面测试开发平台。

3.3 下载部分

在用Platform Builder编译生成CE的映像文件后, 接下来就需将文件下载到目标板上。如果说硬件调试功能可由其它程序代替而不放入Boot Loader中, 但是下载映像文件却是BootLoader必需的功能。

4 Boot Loader的编译、链接和下载

Boot Loader程序可以通过PB的集成编译环境编译链接, 控制文件为.bib文件。CONFIG部分:COMPRESSION是否对目标代码进行压缩;SRE是否生成格式为sre的目标代码;ROMSTART与ROMSIZE、ROMWIDTH、RO-MOFFSET共同定义开发平台上存放Boot Loader物理介质的起始地址、大小、宽度和偏移量。

结束语

12.嵌入式系统开发实验一 篇十二

12003242664马文波引言

1.1 编写的目的人性化的设计,科学开放的管理思想,集中管理,解决了学院机房考勤、设备管理现代化,课外上机科学计费化。更好的适应高校实验室的科学管理。

1.2背景

在计算机越来越多的应用于各行各业,社会的经济发展水平也随着计算机的发展而稳步向前。我们各高校也越加重视学校的计算机课程的开设,为了使学生摆脱以前只会靠两杆笔头工作的现状,将计算机课程引入学校的必修课程也成为现实。

我校的实验室建设已经基本完成并投入了使用,各个实验室都拥有一套自己的资料管理系统,因此也都存在着一些缺陷,为了完善和加强对实验室的科学管理,从而产生了本系统。

1.3 参考资料

该文档主要参考,教材《软件工程-理论与实践》(作者:美 Shari Lawrence Pfleeger,清华大学出版社,2003年8月第一版)与某些项目实例而写

ASP---电子工业出版社

数据库原理---电子工业出版社

SQL Server---电子工业出版社

2.项目概述

2.1工作内容

项目各项主要工作包括:需求分析,系统设计,程序设计,程序实现,测试,维护。该系统又分为设备管理系统和上机管理系统。

上机管理系统包括:上机管理(教学任务外的业余上机)、上机课表管(根据教务处已安排的课表进行管理)、帐务管理、系统功能、查询统计等几大子系统。

设备管理系统包括:卡片管理、仪器设备检索、未报帐卡片检索、统计、信息分析等。

2.2条件与限制

硬件背景:现有校园网及计算机设备

开发小组只能利用学校现有硬件资源包括服务器、主机和网络资源,不能修改现有的网络拓扑结构。新系统必须支持导入原有系统中的数据,如果设计中需要对业务流程进行修改,需征得需求方的同意,开发完成后需要对办公人员进行相应的培训。

2.3产品

2.3.1程序

程序系统名称:实验室资料管理系统

开发者:第六小组李宏益 阎飞 马文波 谢永福 石冬梅 胡倩倩使用语言:ASP,SQLServer

2.3.2文档

(1)项目开发计划

(2)需求分析

(3)概要设计说明书

(4)详细设计说明书

(5)用户操作手册、(6)测试计划

(7)测试分析报告

(8)开发进度月报

(9)项目开发总结报告

(10)程序维护手册

(11)软件问题报告

(12)软件修改报告

2.4运行环境

硬件背景:现有校园网及计算机设备

操作系统:Microsoft Windows 2000 Advanced Server

支持环境:IIS 5.0

数 据 库:Microsoft SQL Server 2000

2.5服务

查询课时安排及消费金额等。

3.实施计划

3.1任务分解

第一阶段:跟随实验室人员进行日常的管理工作,了解管理机制,分析数据流程。

第二阶段:进行系统功能的归类和分析,涉及系统的模块和相应功能。

第三阶段:编写代码,开发程序。并调试通过。

第四阶段:上机测试,通过了解实验室人员试用后的反馈完善功能。

第五阶段:正式移交软件并投入使用,使用前对用户进行培训工作。

3.2进度

阶段与上面一致。

第一阶段:该阶段大概需要两周左右的时间。

第二阶段:该阶段需要时间两周天

第三阶段:需用时间六周。

第四阶段:需用时间四周。

第五阶段:需用3天时间。

3.3预算

由于利用了现有校园网及计算机设备,所以除了购买管理系统外,不用额外开支。

3.4关键问题

项目的前期设计

项目任务的分配

项目的界面设计

4.人员组织及分工

本组共有人员六名:为发挥团队协作精神,不安排具体的分工,只有侧重点不同

5.交付期限

13.嵌入式系统开发实验一 篇十三

一、实验目的

1.观察系统的不稳定现象。

2.研究系统开环增益和时间常数对稳定性的影响。

二、实验仪器

1.自动控制系统实验箱一台 2.计算机一台

三、实验内容

系统模拟电路图如图

系统模拟电路图 其开环传递函数为:

G(s)=10K/s(0.1s+1)(Ts+1)

式中 K1=R3/R2,R2=100K,R3=0~500K;T=RC,R=100K,C=1f或C=0.1f两种情况。

四、实验步骤

1.连接被测量典型环节的模拟电路。电路的输入U1接A/D、D/A卡的DA1输出,电路的输出U2接A/D、D/A卡的AD1输入,将纯积分电容两端连在模拟开关上。检查无误后接通电源。

2.启动计算机,在桌面双击图标 [自动控制实验系统] 运行软件。3.在实验项目的下拉列表中选择实验三[控制系统的稳定性分析]

5.取R3的值为50K,100K,200K,此时相应的K=10,K1=5,10,20。观察不同R3值时显示区内的输出波形(既U2的波形),找到系统输出产生增幅振荡时相应的R3及K值。再把电阻R3由大至小变化,即R3=200k,100k,50k,观察不同R3值时显示区内的输出波形, 找出系统输出产生等幅振荡变化的R3及K值,并观察U2的输出波形。

五、实验数据 1模拟电路图

2.画出系统增幅或减幅振荡的波形图。C=1uf时: R3=50K K=5:

R3=100K

K=10

R3=200K

K=20:

等幅振荡:R3=220k:

增幅振荡:R3=220k: R3=260k:

C=0.1uf时:

R3=50k:

R3=100K:

14.嵌入式系统开发实验一 篇十四

为了推动移动数字嵌入式系统产业的发展,支持国内外高等院校、研究机构、产品厂商的嵌入式系统的技术研发和技术学习,深圳市爱国者嵌入式系统科技有限公司于2009年在此开辟技术园地,为期一年。正式推出R&D aigo EMD系列移动多媒体/移动数字电视/无线网络WiFi/全球定位导航嵌入式系统开发与学习平台,欢迎交流。同时针对高等院校还可提供S D K配套资料的讲解、学习与培训,安排工程师协助老师按照课程要求设计实验指导书,针对具体要求提供部分硬件设计更改和实验指导书按要求设计,并且可与高校建立联合教学实验室,共同推动嵌入式系统学习与科研。

E M D系列S D K功能简介

·用于嵌入式移动多媒体开发与学习

·用于GPS开发与学习

·用于嵌入式移动数字电视开发与学习

·用于无线网络WIFI/Bluetooth开发与学习

·用于嵌入式linux内核开发与学习

·用于嵌入式linux应用软件 (产品界面) 开发与学习

应用范围

不仅可以用于高校教学和技术培训,而且可以用以开发医疗仪器、消费电子、工业控制、军事应用、汽车电子、多媒体等嵌入式终端设备的技术开发。

E M D系列S D K产品简介

1.R&D aigo EMD1001 ARM9/Linux/Multilmedia/WALN SDK

2.R&D aigo EMD1002 ARM11/Linux/Multilmedia SDK

3.R&D aigo EMD1003 ARM11/Linux/GPS SDK

4.R&D aigo EMD1004 ARM11/Linux/DTV SDK

5.R&D aigo EMD1005 ARM11/Linux/WIFI SDK

SDK平台套件的技术资源提供

1.Linux内核源代码

2.平台各个硬件驱动源代码

3.硬件驱动设计学习指导书及驱动测试程序源代码

4.基于EmTK的linux UI界面开发环境

5.丰富的UI开发例程及实验指导书

6.实验教学培训

联系电话:0755-26037899

15.嵌入式底层开发总结 篇十五

51单片机应该是大部分搞嵌入式最先接触的,也是学生时期接触的第一款单片机,本人是电子信息工程毕业的,接触的第一个单片机也是51,然后是STM32.51和STM32 STM32比51 难一点,不过本质上都是单片机,STM32片上外设多很多,定时器啥的复杂多的多。STM32片上外设多,功能强大,可以说学了STM32之后基本上所有的单片机应该都能马上上手的,虽然我也只是只接触到51 和STM32.。大四全国电子设计大赛之后就再也没有接触到单片机了。后来工作就一直是ARM+linux,android。

------------------任何计算机系统都是软件和硬件的结合体,如果只有硬件而没有软件,则硬件是没有灵魂的躯壳;如果只有软件没有硬件,则软件就是一堆无用的字符。在底层硬件的基础上,操作系统覆盖一层驱动,屏蔽底层硬件的操作,通过特定的软件接口去操作底层硬件,用户在用户空间可以很容易的把软件设计目标放在策略与需求上,可以很方便的屏蔽掉底层实现,从而很好的完成客户功能需求。计算机系统是软件和硬件的结合体。而软件又分为应用层软件和驱动层软件。驱动层软件是应用层软件和底层硬件的纽带。通过驱动层软件实现对底层硬件屏蔽。

在裸机时代,比如单片机系统,程序员往往是直接操作硬件寄存器,直接设置硬件。而在Linux操作系统中,硬件驱动程序中实现对硬件直接操作,而用户空间,通过通用的系统调用接口,实现对硬件操作,应用程序没有直接操作底层设备,通过posix标准,应用程序的系统调用往往是被规定和限值,用户只能通过规定的接口实现对底层硬件的操作,导致了应用程序在类UINIX操作系统具有非常好的可移植性。

图2.1 直接操作硬件程序

上图2.1 是裸机时代,应用程序和硬件操作糅合在一起,应用程序和硬件操作高度耦合的框图,上述代码一般很难有良好的代码互用和移植性。往往从一个平台移植到另一个平台,甚至是同一平台不同硬件配置都要求很大的代码改动,另外从应用层来说,应用与驱动高度耦合,应用程序也几乎难以移植,甚至说是没有应用程序概念,原因在于应用与驱动的纠缠不清。

图2.2 无操作系统应用程序和设备驱动程序关系

上图2.2所示,良好的裸机代码框架,设备驱动层和应用层之间有良好的分层思想,用户可以较好的实现策略和需求,例如:客户要求实现流水灯程序,程序员在底层机制实现(硬件操作)的基础下,可以充分在用户应用程序中把主要精力方法流水灯的实现,即策略。但是在良好的裸机程序设计,代码移植性可能从一个平台移植到另外一平台只需要修改少量的底层驱动,例如:LED_ON()的实现。但是在用户空间,没有系统调用概念,函数接口千差万别。应用程序移植性差。

图2.3 Linux系统调用框图

操作系统中,需求决定应用程序,通过系统调用,调用底层驱动,此外,在驱动程序中,把一部分公用的驱动接口抽象出来,如此,程序员只需修改很少量的驱动资源,形成特定的驱动框架。导致用户只需添加专用的硬件属性作为平台资源,在内核中获取资源,大大解放了设备驱动开发,提高了设备驱动的通用型。在用户空间,由于遵循posix标准,类UNIX操作系统中,所有操作接口基本一样,从而方便了应用程序的移植,应用程序几乎不要做修改。如图2.3所示。

Linux操作系统对于所有的硬件都是当做一个文件来操作:一切设备皆文件。Linux设备文件一般分为字符设备,块设备,网络设备。在Linux系统中,除了网络设备之外,所有的设备都被映射到Linux的文件系统中。如图2.4所示。

图2.4 Linux操作系统与应用程序关系

----------------讲讲51,linux,安卓之间的差别。先申明一下,我是实际工作中没有使用过单片机,我使用单片机仅仅是用来参加全国电子设计大赛。工作主要在android driver这一块。我们这一行很多人说单片机是有瓶颈的,我也不是很清楚。但是实话实说,这鸟东西太简单了,没啥技术含量的,你要之后android的庞大。

欢迎点赞。后面会说说android,linux,51,32单片机之间的联系与学习方法,虽然我也是菜鸟,如果你现在看不懂也没关系,有个映像就行。以后就有方向去学习了。想当初我真的是一个人孤孤学习linux ================= 补充一个:单片机要点亮一个led等,同样在安卓上你点亮一个灯也要驱动的,不然怎么亮呢,只是我们只看到了app。背后驱动,怎么实现的,安卓架构,跟单片机有啥区别,相同的地方。其实手机arm芯片跟单片机都是嵌入式微处理器,单片机叫做微控制器。高通,mtk啥的也是嵌入式微处理器~都是一样的~但是难度你想想看就知道了。

51单片机大家都知道了,裸机,直接操作硬件,直观,简单,没有框架,没有系统。STM32,可以学习一下RTOS了,实时的小系统,ucos II等等许多实时系统,STM32+ucos II这种组合学习方式还是挺好的。STM32比较难的在我印象中一个是时钟树,因为我们从51,没有时钟树的概念12M晶振,时钟不要你配置,而比较新的ARM框架,外设都是有时钟的。可能刚刚接触概念不是很清楚,但是也是很简单的。另外一个是定时器,什么输入捕获模式,定时器模式,编码器模式。。。强大的多,比起51。总的来说还是简单的。因为是没有框架的原因,代码量真的很少。你要知道,MTK android 5.1 所有的东西加起来 10G多,包括bootloader,linux kernel,android framework,定制的部分。等等。我们接触的就那些目录,当你去看C++,java代码时,你就知道面向过程的代码真的很容易看。可能有些朋友不知道android的框架,以及android 与linux之间的关系,以及linux驱动与裸机的关系,联系与区别。你现在只要知道linux驱动比较大,android框架更大。单片机简单。单片机一般是C语言,而android一般涉及三种语言:底层linux内核C,中间的JNI层是C++,framework和app是java。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 学过51单片机的朋友知道,我们要点亮一个LED灯,是这样子的P0 = xxx,我们就点亮了一个,好。一烧写,好,灯亮了。linux,上我们要亮一个灯,有点难了,有了操作系统,没那么容易了。一般人搞不定了。好,到android,更加难了。但是你想一想手机芯片也是ARM。亮灯这种肯定都是CPU的管脚操作。上了系统了,难了,点个灯都费劲的。本质上是一样的。很多人都知道单片机有瓶颈的。原因是会点硬件,会点C,轻轻松松就可以亮灯的。入门容易。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 我举一个小的例子说明一下51,linux,android三者的之间的差别。你就知道是啥区别。下面是51单片机: 大概是这样: int main(void)//一个main函数搞定 { P0 = 0xxx;while(1);return 0;} linux: 驱动程序: #include #include #include //file_operatios

//class_create/device_create #include #include //kmalloc #include //ioremap #include #include“led.h”

struct s5pv210_device *s5pv210_dev;

volatile unsigned long *gpc0con = NULL;volatile unsigned long *gpc0dat = NULL;

staticintled_open(structinode *inode, struct file *file){ printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);

/*初始化GPC0_3,GPC0_4引脚功能为输出功能*/ *gpc0con &= ~((0xf<<12)|(0xf<<16));*gpc0con |=((0x1<<12)|(0x1<<16));return 0;} staticintled_close(structinode *inode, struct file *file){ printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);//iounmap(S5PV210_PA_GPC0CON);return 0;}

staticssize_tled_read(struct file *file, char __user *buf, size_t count, loff_t *offset){ printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);return 0;}

//write(fd, &val, 4)static ssize_tled_write(struct file *file, const char __user *buf, size_t count, loff_t *offset){ int ret;unsignedintval;printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);

/*获取用户空间数据*/ ret = copy_from_user(&val,buf,count);if(ret){ printk(KERN_ERR“copy data from user failed!n”);return-ENODATA;}

printk(KERN_INFO“copy data from user: val=%dn”,val);if(val){ //点亮LED *gpc0dat |=((0x1<<3)|(0x1<<4));} else { //熄灭LED *gpc0dat &= ~((0x1<<3)|(0x1<<4));} return ret?0:count;}

staticstructfile_operationsled_fops={.owner = THIS_MODULE,.open = led_open,.read = led_read,.write = led_write,.release = led_close, };

staticint __initled_init(void){ int ret;printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);s5pv210_dev = kmalloc(sizeof(struct s5pv210_device),GFP_KERNEL);if(s5pv210_dev==NULL){ printk(KERN_INFO“no memory malloc for s5pv210_dev!n”);return-ENOMEM;} /*注册*/ led_major = register_chrdev(0,“led”,&led_fops);if(led_major<0){ printk(KERN_INFO“register major failed!n”);ret =-EINVAL;goto err1;}

/*创建设备文件*/ s5pv210_dev->led_class = class_create(THIS_MODULE,“led_class”);if(IS_ERR(s5pv210_dev->led_class)){ printk(KERN_ERR “class_create()failed for led_classn”);ret =-EINVAL;goto err2;}

s5pv210_dev->led_device = device_create(s5pv210_dev->led_class,NULL,MKDEV(led_major,0),NULL,“led”);if(IS_ERR(s5pv210_dev->led_device)){ printk(KERN_ERR “device_create failed for led_devicen”);ret =-ENODEV;goto err3;}

/*将物理地址映射为虚拟地址*/ gpc0con = ioremap(S5PV210_PA_GPC0CON,8);if(gpc0con==NULL){ printk(KERN_INFO“ioremap failed!n”);ret =-ENOMEM;goto err4;} gpc0dat = gpc0con + 1;

return 0;err4: device_destroy(s5pv210_dev->led_class,MKDEV(led_major,0));err3: class_destroy(s5pv210_dev->led_class);err2: unregister_chrdev(led_major,“led”);err1: kfree(s5pv210_dev);return ret;} static void __exit led_exit(void){ printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);unregister_chrdev(led_major,“led”);device_destroy(s5pv210_dev->led_class,MKDEV(led_major,0));class_destroy(s5pv210_dev->led_class);iounmap(gpc0con);kfree(s5pv210_dev);} module_init(led_init);module_exit(led_exit);MODULE_LICENSE(“GPL”);

应用程序:

#include #include #include #include #include #include #include #include /* **./led_test on 点亮LED **./led_test off 熄灭LED */ int main(intargc, char **argv){ intfd;intval =0;fd = open(“/dev/led”, O_RDWR);if(fd<0){ perror(“open failed!n”);exit(1);}

if(strcmp(argv[1], “on”)==0){ val = 1;} else { val = 0;}

if(write(fd, &val, 4)!=4){ perror(“write failed!n”);exit(1);} close(fd);return 0;}

android:

不知道大家清不清楚android与linux之间的关系。

android是基于linux内核的,linux操作系统的5大组件:驱动,内存管理,文件系统,进程管理,网络套接字。android是基于linux kernel上的,大家平时只看到了app。app是java语言的,其实每运行一个java应用程序,实际上是fork一个linux应用程序。android四大组件,activity,service,Broadcast Receiver,Content Provider。这是android的主要框架,java应用开发是基于这开发的。android平台是基于linux内核的。在linux运行之后才建立起java世界。

直接上代码:上面的linux的驱动在android是一样的,适用于android。驱动ok之后是应用层了,也就是应用程序。我下面就是最直接的应用,不包含任何android框架性的东西,大家可以直接看到,应用app->jni->linux驱动这三层调用关系。下面是jni代码是c++; #define LOG_TAG “led-jni-log” #include

#include “jni.h”

#include #include #include #include #include #include #include

staticintfd =-1;jintopen_led(JNIEnv *env, jobjectthiz){ LOGD(“$$%sn”, __FUNCTION__);fd = open(“/dev/led1”, O_RDWR);if(fd< 0){ LOGE(“open : %sn”, strerror(errno));return-1;} return 0;}

jintled_on(JNIEnv *env, jobjectthiz){ LOGD(“$$%sn”, __FUNCTION__);intval = 1;jint ret = 0;ret = write(fd, &val, 4);if(ret!= 4){ LOGE(“write : %sn”, strerror(errno));return-1;} return 0;}

jintled_off(JNIEnv *env, jobjectthiz){ LOGD(“$$%sn”, __FUNCTION__);intval = 0;jint ret = 0;ret = write(fd, &val, 4);if(ret!= 4){ LOGE(“write : %sn”, strerror(errno));return-1;} return 0;}

jintclose_led(JNIEnv *env, jobjectthiz){ LOGD(“$$%sn”, __FUNCTION__);if(fd> 0)close(fd);return 0;}

staticJNINativeMethodmyMethods[] ={ {“openDev”, “()I”,(void *)open_led}, {“onDev”, “()I”,(void *)led_on}, {“offDev”, “()I”,(void *)led_off}, {“closeDev”, “()I”,(void *)close_led}, };jintJNI_OnLoad(JavaVM * vm, void * reserved){ JNIEnv *env = NULL;jint ret =-1;ret = vm->GetEnv((void **)&env, JNI_VERSION_1_4);if(ret < 0){ LOGE(“GetEnv errorn”);return-1;}

jclassmyclz = env->FindClass(“com/ledtest/LedActivity”);if(myclz == NULL){ LOGE(“FindClass errorn”);return-1;} ret = env->RegisterNatives(myclz, myMethods, sizeof(myMethods)/sizeof(myMethods[0]));if(ret < 0){ LOGE(“RegisterNatives errorn”);return-1;}

return JNI_VERSION_1_4;} 然后是java app: packagecom.ledtest;

importandroid.os.Bundle;importandroid.app.Activity;importandroid.util.Log;importandroid.view.Menu;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;

public class LedActivity extends Activity {

final String TAG = “LedActivity”;public Button btn_on = null;public Button btn_off = null;

public void init(){ btn_on =(Button)this.findViewById(R.id.btn1);btn_on.setOnClickListener(clickListener);

btn_off =(Button)this.findViewById(R.id.btn2);btn_off.setOnClickListener(clickListener);}

OnClickListenerclickListener = new OnClickListener(){ public void onClick(View v){ switch(v.getId()){ case R.id.btn1: Log.d(TAG, “led on in app”);onDev();break;case R.id.btn2: Log.d(TAG, “led off in app”);offDev();break;default: break;} } };

@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_led);init();openDev();}

@Override publicbooleanonCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_led, menu);return true;}

@Override protected void onDestroy(){ // TODO Auto-generated method stub super.onDestroy();

closeDev();} static { System.loadLibrary(“led_jni”);}

public native intopenDev();

public native intonDev();

public native intoffDev();

public native intcloseDev();}

框架是这样的:最上层是java,点开app,点击一下一个button,点亮了LED,调用onDev();onDev调用c++的led_on,然后led_on是调用驱动的led_write,明白不?这样说吧:linux驱动是最下层的,驱动嘛。然后是c++层,c++包装一下是给java调用的,然后到java层。下面是android比价经典的一张框架图。

上一篇:改革开放以来中央与地方关系的变化下一篇:小学数学课堂核心素养的几点实践和思考

本站热搜

    相关推荐