c语言开发范文

时间:2023-03-10 12:32:31

c语言开发

c语言开发范文第1篇

引言

长期以来,在DSP系统开发中,一直把汇编语言作为主要的开发工具;但汇编语言与自然语言差距很大,不易常,而且汇编语言是依赖于处理器的,不利于软件的可重复利用和系统的稳定性,程序不易移植,给开发工作带来了很大的困难。随着嵌入式系统复杂程度的不断提高,用汇编语言编写一个巨大的程度将是困难,甚至是不可能的。为此,AD公司推出了针对ADSP21XX系列DSP的嵌入式C和C++语言集成开发工具,分别是VisualDSP和VisualDSP++系列,这些开发工具提供了C语言和C++语音的开发功能。以下就以笔者在实际开发中的一些经验,结合VisualDSP6.1版本,介绍用C语言开发VisualDSP6.1版本,介绍用C语言开发ADSP21XX的方法。VisualDSP提供了一个开放源码软件组织GNU的C编译器,和一套成熟稳定的C运行时间库(C Run time Library)等。GNU的编译器一向以编译效率高著称,在编译后的代码长度和运行速度方面非常优秀;C运行时间库则把很多重复性的工作,如浮点运行、三角函数、FFT等作为C语言的库函数,提供给用户,大大提高了用户的开发效率和程序的稳定性,降低了开发难度,另外,由于把这些库函数的源代码提供给了用户,还提高了C语言与汇编语言之间的透明性,使用户开发的程序兼具两者的优点。

1 Visual DSP简介

VisualDSP是AD公司的DSP开发工具,主要由可执行文件、库文件和各种帮助文档组成。6.1版本还带有一个基于图形界面,针对21XX系列DSP的软件仿真和调试工具。

VisualDSP的可执行文件包括汇编、编译、链接工具以及可执行文件重新格式化工具等,见表1。

表1 VisualDSP的可执行文件及用途

可执行文件名用 途

Asmpp.exe*汇编预处理程序Asm2.exe*21XX系列汇编程序的汇编程序Asm21.exe21XX系列命令行汇编程序Ld21.exe21XX系列链接工具G21.exe基于GNU的21XX系列C编译器Bld21.exe系统编译工具,产生相应于不同硬件体系的.ACH文件Lib21.exe21XX系列的库管理工具Hspl21.exe把21XX系列可执行文件变成HIP口可加载的格式Spl21.exe把21XX系列可执行文件变成PROM可烧写的格式注:“*”代表该程序一般不单独使用,而昌由G21.exe或Asm21.exe调用。

VisualDSP套件中的软件仿真调试工具DEBUGAPP,采用Windows图形界面,使用方便。它的主要特点是:可以仿真调试从ADSP2101~2189全系列的DSP;支持断点、单步、全速运行等各种常见调试方法;可以随时查询和修改DSP的程序RAM(PM)、数据RAM(DM)和各寄存器的内容;可以仿真中断,进行可执行程序性能评估(Profile),因此可以进行时序仿真。DEBUGAPP是调试程序和验证复杂算法的极好工具。

VisualDSP6.1还提供了丰富的帮助文档,包括21XX系列的用户手册、汇编和C语言工具以及仿真调试程序的使用手册;还有C运行库的参考手册,列出了所有可用的C库函数。用C语言开发DSP的典型流程如图1所示。

2 C语言运行库结构

C语言运行时间库是位于LIB目录下的*.a文件,是整个C开发工具的核心之一,提供了大量的可以直接调用的库函数。这些库函数的函数原型包含在INCLUDE目录下的头文件中。这些头文件有的还包含一些宏定义。另外,VisualDSP还把这些库函数的汇编语言源代码提供给出了用户,方便了用户从中提取有用的代码,甚至修改源代码,生成新的库,来适应自己的要求。利用LIB21程序,还可以把自己的常用汇编子程序做成库,或是将实时性要求较高的代码用汇编语言来写,做成库,供C语言程序调用。

VisualDSP的C语言运行库由两部分组成:应用程序框架和预定义的各种库函数。

不同的DSP型号有不同的硬件结构、中断向量表,所以对应的应用程序框架库也不同,相应的文件是21*_HDR.DSP.其中*代表不同的DSP型号。应用程序框架的主体是中断向量处理部分,把中断向量引到合适的地址。其中最重要的是对系统复位(RESET_VECTOR)的中断向量的处理:

_Reset_vector:CALL_lib_setup_everything;

CALL main_;

JUMP_lib_prog_term;

NOP;

第一条指令是调用C库函数中的_ _lib_setup_everything函数作程序启动时的初始化工作。接下来,调用C语言程序中的main_函数,进入C程序的主体,也就是进入用户自己程序,开始正常工作。主程序结束后,再调用_lib_prog_term函数,作程序退出时的结尾工作。由于嵌入式系统的特性,系统绝大多数都在主程序运行时被继电了,所以_lib_prog_term得到执行的机会很小。

其它的中断向量由C运行库来管理,汇编指令如下:

_Interrupt2:JUMP_lib_int2_ctrl;NOP;NOP;NOP;

其中的_lib_int2_crtl就是C语言库中控制INT2的函数。如果用户要使用该中断,应先把中断服务程序用一个C库函数Interrupt()把服务函数指针设定好,并打开相应的中断允许位,当该中断发生时,_lib_int2_ctr1函数就会控制DSP跳转到相应的指针位置。

VisualDSP预定义的C语言库函数包括数学函数、FFT函数、ANSI标准内存管理和字符串管理函数的一个子集。所有的函数列表可参考VisualDSP的联机文档。这些库函数以二进制代码的形式,打包集合在lib*.a文件中,用户的C语言程序可以像使用自己的子程序一样方便地调用这些库函数。下面是调用库函数的一个例子。

#include //包含所需的头文件

……

float a,b,c; //定义所需的变量

……

c=a*sin(b); //数学运算

编译后产生的汇编源代码中有call sin_指令,就是调用sin库函数的汇编语言指令语句。

从嵌入式开发的角度讲,VisualDSP的C语言工具已经提供了一个操作系统雏形的功能。在AD公司的ADMC系列DSP中,已经把这些库函数和一些电机控制专用的函数,以及程序加载功能,集成在了DSP的片内ROM中。

3 C语言与汇编语言混合编程方法

用C语言开发的缺点是不能精确控制程序运行的时间,对于实时性要求较高的应用,必须用汇编语言。VisualDSP为用户提供了两种与汇编语言的接口方法:用ASM()方法,直接嵌入汇编语言语句;用汇编语言编写子程序,供C语言程序调用。为了支持C语言与汇编程序程序的接口,VisualDSP预定义了诸如FUNCTION_ENTRY、EXIT、SAVE_REG、RESTORE_REG等13个宏。限于篇幅,不详细介绍其功能。使用这些宏以前,要包含asm_sprt.h头文件。

3.1 使用ASM()嵌入行的方法

使用这一方法时,一定要注意各寄存器和堆栈当前的状态,以免破坏程序运行的环境,产生错误的结果。VisualDSP保留了一些内部寄存器供用户的汇编代码使用。用户可以自由地修改其内容,而不会对程序造成破坏。这些寄存器包括AR、AF、AY1、M5、11、16、MF、MR0等18个。如果不够用,可以用系统定义的宏save_reg和restore_reg保护现场,得到另外11个可用寄存器。另外要注意的是,在汇编语言中操作C语言中定义的变量时,要在变量名后加下划线。下面是一个嵌套汇编语言的例子:

int img228; //定义C语言变量

asm("ax0=0x5c;")

asm("dm(ing228_)=ax0"); //用汇编语言赋值要将Img228变成Img228_

img228=0x5c; //直接用C语言赋值

编译后的汇编语言代码是

ax0=0x5c;

dm(img228_)=ax0

my1=92;

dm(img228_)=my1;

注意前者可能会破坏程序结构,因为它使用了未经保护的寄存器AX0;而由C语言产生的汇编代码,则会自动选择合适的临时寄存器MY1。

3.2 使用汇编子程序的方法

使用汇编子程序是C语言程序与汇编语言接口的另一种方法。用户定义的子程序放在单独的汇编文件中,或是做成二进制的库文件,并将子程序的定义用GLOBEL输出,汇编后就可以供C语言程序调用。下面是一个不需要参数的子程序的例子:

.MODULE/RAM_delay_;

.external del_cycle; //声明del_cycle是外部变量

.global delay; //声明delay为全局函数

delay_:

runction_entry; //子程序开始标志,必须要的

ar=dm(del_cycle_);

cntr=ar;

do d_loop until ce;

d_loop:nop;

exit; //子程序结束标志,必须要的

.ENDMOD;

如果汇编语言子程序中用到了参数,情况就复杂些。子程序中的入口参数前两个一定要保存在AR、AY1中。如果参数多于两个就要把其余的放在堆栈中。所有子程序的第一个返回值放在AR中。如果返回值不止一个,就要用到变量型参数或者指针来获得取所有的返回值了。下面是一个有5个输入参数、1个返回值的子程序例子。

add5_:

function_entry;

ar=ar+ay1; //前面的两个变量放在AR、AY1中

readsfirst(ay1); //从程序堆栈中读取第三个变量

ar=ar+ay1;

ay1=readsnext; //从程序堆栈中读取第四个变量

ar=ar+ay1;

ay1=readsnext; //从程序堆栈中读取第五个变量

ar=ar+ay1; //返回值放在AR中

exit;

注意其中的readsfirst和readsnext都是汇编语言接口宏。其功能是从堆栈中读取所有的参数。

4 C运行库的汇编源代码

如果只用C语言来开发21XX程序,只要有C运行库的二进制版就够了。幸运的是,AD公司把所有C运行库的汇编源代码随VisualDSP提供给了用户,所以对那些用汇编语言开发的工程师来说,这些源代码也提供了很大的帮助。因此这代表很多功能的子程序不需要自己去编码、调试,用到某功能时只要把相应的汇编代码链接进自己的程序就可以。C运行库的源代码是扩展名为DSP的文本文件。基本上一个库函数对应一个文件,文件名就是函数名。比如说sin.dsp是正弦、余弦查找、使用都很方便,但是对于其中的交叉调用要注意。

反过来,用户也可以把自己已经调试、验证过的汇编子程序,做成二进制库文件,供C程序调用,这样可以大大提高软件的可重复利用率。要制作二进制库文件,只要用lib21.exe工具处理就行了。注意,生成的二制库文件的名字必须以.a作为文件扩展名。

笔者在实际的开发中,遇到这样的情况,自制的2181目标板上有一个自己开忍气吞声驻留程序,通过软件模拟的异步串口与PC通信,加载程序。但是这个驻留程序占据了0~0x500的空间,用户开发的程序只能加载到从0x500开始的空间内,而用C语言开发的程序起始地址都是从0开始的。为了解决这个问题,只能自己修改2181_hdr.dsp源文件。首先把第一行的.MODULE/ABS=0改成.MODULE/ABS=0x500,然后汇编成obj文件,代替原来的文件。另外,在自己的程序中定义一个从0开始0x500大小的PM区域,并初始化成0,就可以防止编译器在该区域内分配别的变量或程序代码,这样编译后的可执行文件的0~0x500空间都是0,加载时把它剔除,而其它有用的指令代码都在0x500之后,解决了这一个问题。

5 总结

c语言开发范文第2篇

关键词: C语言;单片机;开发;应用

作为一种智能化工具,单片机的开发在传统上来说更倾向于使用汇编语言,而高级语言一直使用的甚少。但面对目前计算机领域技术发展的最新环境,汇编语言对于单片机开发来说已经不是最适合的编程语言了。从长远来看,将类似于C语言这样的高级计算机语言运用于单片机开发的技术虽然目前尚未成熟,但却是单片机开发技术更为完善和发展的大势所趋。

1 单片机的开发

近代计算机技术发展的突出特点是微电子技术的蓬勃兴起,作为微电子技术发展的代表,单片机逐渐被应用于生活的各个领域。它的出现使近代计算机技术向前迈进了一大步,更从系统分支上使计算机形成了两大系统分支:通用系统和嵌入系统。在现代电子系统中,单片机有其无可比拟的优越性:成本低、芯片体积小、性能好,因此,单片机的适用领域也非常广泛。在我们如今的生活中,单片机技术已成功被渗入到仪器仪表、家用电器、汽车机械等领域,是智能化工具的代表。

1.1 单片机开发的特征

目前单片机的开发主要具有以下特征:“扩展的串行方式、广泛的运用在片程序储存器技术、全盘CMOS化、8位机的主导地位、逐步使用C语言”[1]。上述特征概括性的展示了单片机技术目前的发展状况,其中,C语言的使用已经开始成为单片机技术开发的主要语言。

1.2 单片机开发的语言

应用于单片机开发的语言主要有两种:汇编语言与高级语言,其中高级语言以C语言为代表。汇编语言相较C语言来说具有较高的可控性,使用起来较为简便,因此在单片机开发中运用的较为广泛。随着目前处理器对C语言的运用逐渐增多,结合C语言相较于汇编语言来说具有更强的可移植性的特点,在对处理器内部结构的具体情况不甚清楚的状况下,处理C语言的编译器也可很快上手,因此,C语言比汇编语言更加适用于目前的单片机开发系统。

2 C语言应用于单片机开发

作为编译型语言,C语言兼具高级语言和汇编语言的特点和功能,因其自身强大的可移植性,C语言在单片机的开发应用中有很大的便捷性。C语言主导结构化的程序设计方式,自顶向下展开。使用C语言进行单片机开发,即使没有对单片机的硬件结构的详细了解,编译器也可以按照自顶向下的设计方式使变量储存单元得到合理有效的分配,如此设计出的单片机程序十分可靠易行。

2.1 特点

作为程序设计语言中的一种,C语言以其结构化的特征被广泛运用于程序开发。C语言具有以下特点:功能性强、结构性好、高度的可移植性(不同的机型都可运行,面向用户)。此外,相比于汇编语言,C语言这种编译型程序设计语言具有更强的可读性,这主要是得益于该种语言有功能强大的库函数、高效的编译能力和迅捷简便的运算。

使用C语言进行单片机开发程序的编写,程序开发者不用时时与硬件接触,能够将精力全部集中于思考程序的算法和功能,对于一些琐碎的细节问题可以大而化之不必过于在意,因此C语言比汇编语言更适应一般人的思维习惯,更能节省程序编写的时间。

除了上述两点之外,C语言在自身改进和扩充方面也是十分便捷的,这主要得益于它功能完善的程序结构,此种强大的程序结构很适合用来设计模块化程序。“自顶向下、逐步求精”是结构化程序设计的主要原则,C语言在应用于单片机系统开发时主要采用该种设计方法。这种方法的优势就在于可以使模块功能得到系统化的分工,每个模块有每个模块的任务。

2.2 C语言对单片机的优化

单片机开发目前被广泛应用于工业测控领域中的嵌入式系统,这是利用C语言对单片机系统资源的优化,这样的应用使得单片机开发所面对的工作环境和内容日趋复杂,最繁琐的便是软件的设计。由于工作任务艰巨,设计人员尤其需要考虑控制系统单片机的资源分配(软硬件方面),而单片机系统的资源量却不够充裕。这种不充裕主要体现为结构简单的CPU和片内结构以及缺少程序存储器等方面的资源。

基于以上原因,利用有限的资源做好C语言的程序设计成为单片机开发的关键环节。C语言作为高级计算机语言利弊并存,虽然优点很多,但是不能忽视的是,C语言由于生成代码长,造成占用存储空间大,基本在20%~50%左右,这就要求我们在具体操作的时候要知晓软硬件的任务所属,根据其不同的优势来分配任务,对系统任务也要做到预先分析。因此,当C语言运用于单片机开发时,对程序的优化是需要适当进行的。这不仅是C语言本身的特点所决定的,也是单片机开发的现状所决定的。

2.3 开发环境

以C语言编程的单片机应用开发软件有很多,其中KEILC51

以其完善的性能成为这其中的佼佼者。“这款软件既能编辑仿真,又能编译,它同时支持不同公司的以MCS51为架构的芯片,也支持汇编和C语言的程序设计”[2]。这款软件功能强大,尤其是在程序的调试和仿真软件方面具有卓越的功能,方便学习使用和投入工作。在这种单一却不失灵活的开发环境中,C语言被集成于统一的开发环境,“这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器”[3]。这种单一却不失灵活的开发环境有如下特点:

该软件的工程由三部分组成:源文件、开发工具选项、编程说明。该软件的特点就是一对多(一个工程对应产生一个或N个目标程序),从而构成多个组。

该软件可以满足用户浏览源文件的需求,且方便快速,可以寻找文件,全局搜索文件,在集成开发的环境下也可保证用户功能得以启动。“另外KEILC51可以在编辑器内编辑、调试程序,它能提供一种自然的调试环境,使你更快速地检查和修改程序”[4]。

2.4 C语言在单片机开发中运用的步骤

C语言在单片机开发中运用的步骤主要有:编写编译源程序和连接转换目标代码。除了这两方面的主要内容之外,当程序设计结束之后,还应该将“源程序转换成在单片机上能运行的HEX件,使单片机能执行编写好的程序”[5]。具体的C语言在单片机开发中的步骤如下所述:

1)安装软件。作为商业软件,我们在KEIL的网站上可以下载到软件的安装包,这个过程很简单,只要跟随软件提示安装即可。首先对安装包进行解压,然后打开SETUP.EXE文件,点击安装,按照提示输入序列号并在询问是否接受版权信息时点击接受按钮,最后按要求完成安装。

2)进行C源文件的创建工作。第一步建立新项目,在新项目中添加以前就有的程序文件或者建立新文件。第二步建立一个新的程序文件,找到新文件的文字编辑窗口,在其中编写程序,即可生成C源文件。

3)编译并调试。编译调试是C语言运用于单片机开发的中间阶段。这一阶段首先要求软件操作者调整到调试模式,然后使用仿真器在源程序的一级进行程序调试,调试的时候要注意对已建立的源文件纠错,同时编译源程序,在使用C51编译器的基础上生成目标文件或浮动的目标码模块。最后,将编译好的模块连接,生成文件。

4)最后进行生成HEX文件的工作。作为整个步骤的最后一步。生成文件对C语言的运用有着非常重要的作用,也使单片机开发在性能、功效上有了现实的意义。进行这一步首先要把目标文件生成HEX文件,该文件的主要功能是烧写芯片。该文件以Intel公司所提出的数据宽度为字节,“文件转换后所生成的HEX文件可以通过编程器写入单片机的程序存储器,也可以用仿真器进行调试”[6]。

3 总结

C语言在单片机开发中的运用目前比较广泛,它使单片机应用于生产生活的时候更为有效,同时极高的开发效率将单片机的使用推广到了生产生活的各个方面。面对目前计算机领域技术发展的最新环境,汇编语言对于单片机开发来说已经不是最适合的程序编写技术了。综上所述,C语言应用于单片机的开发对单片机在未来运用于更广阔的空间具有很大的促进作用。

参考文献:

[1]居水荣,单片机开发系统综述[J].半导体情报,2011(01).

[2]张亚力、贾英布,基于C语言在单片机技术的应用[J].农业网络信息,2011(05).

[3]董蕴宝、潘旭君,浅谈C语言在单片机中的程序设计[J].科学与技术信息,2009(11).

[4]牛余朋,谈谈C语言在单片机开发中的应用[J].电子制作,2009(01)

[5]赵亮、候国锐,单片机C语言编程与实例[M].北京:人民邮电出版社,2009.

[6]范寿康、王宁,单片微型计算机的应用开发技术[M].北京:人民邮电出版社,2009.

作者简介:

胡建红,江西省电子信息技师学院,高级讲师,华中科技大学工程硕士。

c语言开发范文第3篇

关键词 微机原理与接口 汇编语言与C语言比较

中图分类号:TP368.1 文献标识码:A

0 引言

“微机原理与接口”是信息学科的一门必修课,主要介绍8086微处理器的原理及其扩展接口的应用。然而8253芯片是接口芯片中的一个重要组成部分,因此本文就从8253出发,阐述用汇编语言和C语言对其开发,让学生更好地用软件对硬件进行开发。

1 8253知识点进行描述

8253工作方式:

1.1 频率发生器

在该方式下,计数器装入初值,开始工作后,计数器的输出OUT将连续输出一个时钟周期宽的负脉冲。两负脉冲之间的时钟周期数就是计数器装入的初值。在这种初始方式下,门控信号GATE用作控制信号。当GATE为低电平时,强迫OUT输出高电平。当GATE为高电平时,分频开始。时序波形如图1所示。

1.2 方波产生器

当装入数值为N时,若N为偶数,则完成N/2计数时OUT为高电平,完成另外N/2计数时OUT低电平,一直进行下去。若N为奇数,则(N+1)/2计数时OUT保持高电平,而(N-1)/2计数期间OUT为低电平。在GATE为高电平的时,产生对称方波。时序波形如图2所示。

1.3 C语言的优点

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。由于C语言的易可移植性,在嵌入式系统里面应用广泛。

1.4 汇编语言的优点

汇编语言是面向机器的程序设计语言。汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。

总之,虽然汇编语言执行起来速度比较快,但开发起来比较麻烦,尤其是8086架构里面只有有限的寄存器,在开发大型的软件时就会显得捉襟见肘,采用C语言开发就可以提高代码的质量,用一句C就可以代替好几句汇编语言,会让开发人员轻松很多,更会让很多初学者对嵌入式系统的开发产生兴趣。

2 实例:C语言方式下和汇编语言下控制8253

8253控制端口地址为 203H;计数器0地址为 200H;计数器1地址为 201H;计数器2地址为 202H。

outportb(0x203, 0x56)

//56H(01010110B).选择计数器1,低八位读写,方式3(方波发生器),二进制计数.

outportb(0x201, 8); // 向计数器1写入低八位初值8H(00001000B).

outportb(0x203, 0x94); // 向8253控制端口写控制字94H(10010100B)。选择计数器2,低八位后读写,方式2(分频脉冲发生器),二进制计数。

outportb(0x202, 6); // 向计数器2写入低八位初值6H(00000110B).

如果使用汇编语言程序,则变成

MOV DX,203H;指向控制端口

MOV AL, 56H ;设置工作方式

OUT DX, AL;往端口送数据

MOV DX, 201H;指向计数器1

MOV AL, 8;给计数值

OUT DX, AL;往端口送数据

MOV DX,203H;指向控制端口

MOV AL,94H;设置工作方式

OUT DX,AL;往端口送数据

MOV DX,202H;指向计数器2

MOV AL,6;给计数值

OUT DX,AL;往端口送数据

从中可以直观地可以看出,如果使用汇编语言对8253写入控制字MOV DX,203H,MOV AL,36H,OUT DX,AL,需要三条语句完成,而且需要3个寄存器,并且寄存器本来就是很少的了,这样很浪费资源;用C语言只需调用outport函数:outport(0x203,0x36),C语言的代码长度短了很多,并且也方便学生们掌握,使学生在嵌入式软件开发上产生更多的兴趣,为大型嵌入式软件的开发奠定坚实的基础。

3 结束语

根据本文比较C语言和汇编语言对8253的开发,会让更多的学生明白C语言作为一种面向结构的语言对嵌入式系统开发的优胜性,希望越来越多的学生在微机原理和接口的实验课上,采用C语言进行开发,削减代码量,提高效率。由于目前我国正处于信息化高速建设的时代,对嵌入式系统的开发水平也决定着我国在世界上的影响力。因此,让更多的学生学会用更高效的语言进行嵌入式系统软件的开发显得尤其重要,本文就此发表自己的看法。

参考文献

[1] 马义德,张在峰,徐光柱,杜桂芳.微型计算机原理及应用(第二版).北京:高等教育出版社,2001.

[2] 王永山,杨宏五.微型计算机原理与应 用(第二版).西安:西安电子科技大学出版社,1999.5.

[3] 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005.

c语言开发范文第4篇

C++语言在计算机语言内使用频率最高,与其他语言相比,编程速度更快,在实际应用中具有更大优势。在应用C++语言来进行跨平台软件开发时,需要充分发挥其所具有的优势,对存在的缺陷进行规避,提高开发设计效果。本文基于跨平台软件开发要求,对C++语言应用要点进行了简单分析。

【关键词】C++ 跨平台软件 软件开发

应用C++语言来开发跨平台软件,即将应用程序代码处理成能够在已有平台下使用和执行的文件,但是对于其他平台,处理后的文件无法正常使用,尤其是Windoes与Unix平台,是C++语言的应用缺陷。为改善此缺陷,需要对源程序代码翻译成各平台下均可正常使用的文件,面对不同平台来选择编译方法,手动设计控制和管理编译条件,应用脚本文件和环境变量,以及第三方软件来对代码进行动态编译,降低跨平台软件开发难度。

1 跨平台软件开发环境要求

跨平台为现代软件开发的重要概念,可以降低对操作系统和硬件环境的依赖性,在实际开发应用程序中,想要实现跨平台软件的有效运行,就需要确定跨平台开发要求,支持各种不同平台,为发挥市场潜力提供动力。在构成开发环境时,需要软件编辑器、程序编译器与程序调试器作为支持,但是对于Sandbox软件来说,其可以同时实现代码编译和代码调试,并且内部各种平台需要有多种代码库和依赖库。程序开发过程中,源代码类型不同,在C++语言软件开发与编译时,需要对最终结果质量进行有效控制,产生最好代码,对错误捕捉与调试过程需要一定支持。跨平台软件开发即将抽象实现的过程,需要利用先进手段来对抽象以及相关设计进行研究,保证可以在不同平台上实现特殊编译。

2 C++语言跨平台软件开发设计要点

2.1 避免语言扩展特性

无论是选择应用那种语言进行编程,均需要选择应用较老的程序或者文件作为基础,因为其程序库内某些原有程序和公式具有规范性与标准性,完全区别于现在新程序库内杂乱无章的情况。在跨平台软件开发过程中,经常会出现各种故障,部分情况在获得支持后,依然会存在没有定义精神的事故。对于跨平台软件开发来说,有非常高的异常灵敏度,可以对新特性进行无限利用,这样就造成软件在排除异常情况时难度更大。这样在应用C++语言进行跨平台软件开发时,可以调用C++标准函数模型,提高已开发软件与产品的稳定性。

2.2 实现动态处理

就C++语言跨平台软件开发来说,需要有多种环境运行可移植代码库进行编写。在实际软件开发过程中,要对常见问题进行有效避免,且处理一个平台在另一个平台没有特性这一问题,实现动态性处理。

2.3 脚本文件管理

在应用C++语言开发跨平台软件时,需要做好脚本文件的基本管理,在保证所编写代程序代码简单易懂前提下,降低其复杂性,达到简洁目的,完成合理软件结构的构建。会与平台相关文件以及数据库进行有效隔离,在软件项目开发阶段,通过脚本文件来对进行一定程度上的编译,对其在各个部位进行合理分配。在使用应用程序时,需要将配置文件内相关配置选项调配出来,读取内部程序,然后在跨平台软件开发时,利用页数手段来将平台相关关联文件进行全部分隔。

2.4 串行化使用

就C++语言开发跨平台软件时,需要做好跨平台数据存储安全性与可靠性研究和管理,消除项目开发过程中存在的缺陷。C++语言在开发跨平台软件时,可以利用软件fread指令,来综合处理各编译器与单一目标平台,并在实际跨平台操作环境中,通过实际方法来对数据进行不同程度的存储与加载,实现平立性的有效保障。其中,在利用跨平台对数据在目标文件中的存储时,不同平台间具有一定差异性,并且在实际应用中,也会产生多种结果特征。

2.5 编译与测

C++语言跨平台软件开发中的编译与测试,需要保证存在关联的代码在长时间使用中,可以在其他平台中进行有效检测,并利用不同平台来完成测试,确定软件项目是否存在bug,并及时调整处理,保证软件可以正常运行。

2.6 实现抽象

实现抽象对跨平台应用程序中被移植过程中存在一定有效性,应用此特点可以实现对软件的单独性开发,确定具有单独性与简洁性的程序,利用多种函数进行开发设计。C++语言则是应用封装方法,来实现抽象过程,且要根据实际情况进行分析,如果存在特殊情况,还需要通过其他程序来进行调用,并做好功能基础明明。在实现抽象阶段,如果该程序以及公式使用后,需要对该功能进行直接调用,确保其功能可以有效实现。

3 结束语

基于C++语言来进行跨平台软件开发,需要基于C++语言特点,确定跨平台软件开发要求与要点,做好每个环节控制,保证项目开发过程的规范性与有效性,实现软件在不同平台的有效执行。

参考文献

[1]罗云青.C++语言下的跨平台软件开发[J].电子技术与软件工程,2015(09):62-63.

c语言开发范文第5篇

任何一个好的跨平台软件开发的实现,主要还是对整体设计的把握,跨平台程序设计要求实现与平台无关的代码,在设计和编写的过程中,还要对软件的架构和整体配置的合理性问题作出考虑。思路,我们可以结合自身学习和实践经验在程序设计方面充分利用开源的代码和程序,就可以让跨平台的设计更加地趋于成功。

2C++程序设计语言跨平台开发的策略

我们在编写程序代码的时候,总是要把编辑策略放在首位,针对于不同的OS,在其上创建和编辑文本文件,就要遵循不同的规则。比如行结束符,在Windows操作系统和DOS操作系统中普遍采用回车键,而在Unix中却使用的是换行符号。这种细微的差别就是跨平台软件开发必须考虑的问题。那么当我们要想把其中一个平台上编写的代码放在另一个操作系统上运行,极有可能出现不被正确解释的现象。另外,对于不同的操作平台其tab键的功能也有很大的区别,主要体现在间距上。那么我们在编程的时候要注重这些差别,保证代码的书写和阅读对于不同的操作平台都是一致的,增加程序的可读性,进而也就实现了跨平台的思想。所以在每次开发之前都需要针对开发策略制定相应的规则:统一使用四个空格键来代替tab,也就是\t格式。Windows下的源文件代码需要存储在UNIX的文件格式,或者说是在Windows下的文件编写完成之后,通过DOS2UNIX命令实现文本格式的转换。

3处理器差异的控制

鉴于C++语言自身语言的特点,建立了一个跨平台的抽象代码库,在不同的平台和编译器上进行合理的规划代码。C++语言里普遍使用了抽象,像BOOST和StardardTemplateLibrary。Boost标准类在不断的发展和改进过程中,完全能够帮助跨平台操作中的软件和程序来适应OS系统库的内部接口的不同,可惜这些不足以解决全部问题,主要是因为目前Boost没有包含所有的库函数的类库,又会出现不确定的情况,那么关于C++语言的部分也应该及时的维护和更新。在平台上,利用库封装代码,又在不同的平台下调用已达到统一代码的目的。

4利用wxWidgets开发跨平台软件

wxWidgets是一种跨平台开发的软件包,目前使得在跨平台的图像设计方面使用自身的程序。因为其兼容性相当的好,对于Windows,Linux,Unix等都兼容。而且,wxWidgets的底层是用C++程序设计语言实现的。下面用一个实例将说明wxWidgets的跨平台问题。首先创造一个wxFrame的实例,并制定长宽和屏幕上的位置。然后,新建一个垂直的sizewidget和顶层窗口的子sizer。然后,再创建一个垂直sizerwidget和一个水平子sizer。最后创建wxStatic实例以及为这个敞口应用中添加事件响应。以下将展示一部分核心代码。在设置完这个窗口之后,还需要新建一个类实现一写功能。

5结论

伴随着跨平台开发方式的不断发展,以及C++语言的不断壮大,在设计和开发项目的时候,工程师要想一次性完成能在不同的设备上通用执行的代码是比较困难的,我们要不断的借鉴自身和别人开发的经验,从各种各样的设计思想和软件工程中汲取知识,进行相对应的调整和修改。在实际的开发过程中,利用多线程的实现为实例和实际软件项目的需求,配合C++程序设计语言提供的日志管理的具体说明来意义解决出现的问题。C++程序设计语言在未来有着巨大的市场潜力,并伴随着计算机科技的不断发展,跨平台软件开发在C++程序设计语言的支持下,可以在不同的软件工程师和开发人员的操作中呈现出许多之前从未有过的功能,因此,我相信,C++语言下的跨平台软件开发前程似锦。

c语言开发范文第6篇

关键词:DSP;嵌入式系统;C语言开发

中图分类号:TP311文献标识码:A文章编号:1009-2374 (2010)12-0037-02

随着信息处理技术的飞速发展,DSP在电子信息、通信、软件无线电、自动控制、仪器仪表、信息家电等高科技领域获得了越来越广泛的应用。

以往开发DSP嵌入式产品时首先会想到用控制器的汇编语言编写软件,主要原因有:(1)控制器问世时,只配有相应的汇编语言开发工具,没有相应的高级语言开发工具可供使用;(2)汇编语言生成的程序对应的二进制代码少,执行速度较快;(3)存储器寻址空间和价格的限制。随着技术的发展,上述问题已基本解决。而且用C语言开发DSP嵌入式系统,具有开发周期段、可移植性好、调试和维护方便等优点。目前在许多应用领域,大家已经逐渐开始用C语言开发嵌入式产品。

现在,世界上的DSP芯片有300多种,生产DSP的公司有80多家,主要厂家有TI公司、AD公司、Lucent公司和Motorola公司。TI公司作为DSP生产厂商的代表,品种最多,大约占60%的市场份额。TI公司还推出了与其生产的DSP配套的软件集成开发环境Code Composer,用户可在该环境下用汇编语言和C语言进行软件开发。TMS320VC33作为TI公司第二代芯片的高速低功耗改进型浮点型TMS320VC33,在工业控制领域得到了广泛应用。目前,很少见到DSP系统下的C语言开发资料,本文以TMS320VC33为例,在TI公司提供的软件集成开发环境Code Composer下(版本4.10.36),向大家介绍如何用C语言开发DSP嵌入式系统。

一、TMS320VC33芯片的C语言开发过程

整个过程主要分为以下4个步骤:编辑C语言源程序;编译和链接;在线仿真;固化程序。

在Code Composer下,新建一个工程CSRJ.MAK;新建一个C源代码文件CSRJ.C(其内容为C语言源程序)和一个头文件VC33.H(程序设计中用到的TMS320VC33寄存器的定义),将这两个文件添加进CSRJ.MAK工程。

(二)编译和链接

1.TI公司的COFF文件格式。Code Composer的汇编器和编译器建立的目标文件格式为公共目标文件格式COFF(Common Object File Format)。这种格式易于进行模块化编程,增强程序的可读性和可移植性,为代码段和存储器的管理提供了更有力和灵活的方法,也为高级语言和汇编语言程序的编写提供了极大的便利。

在COFF目标文件格式中,最关键的概念便是段(SECTION)。段是COFF目标文件格式中的最小单位,在存储器中占据连续空间的代码或数据块。一个目标文件中的每一个段都是分开的和各不相同的。所有的段分为两大类:已初始化段和未初始化段。已初始化段包含程序代码或数据,未初始化段为未初始化的数据保留存储空间。C编译器对C程序编译后产生已初始化段(如:.text段、.cinit段)和未初始化段 (如:.bss段)。

2.链接器对段的处理。链接器对段的处理任务有两个:一是将COFF目标文件中的块用来建立程序块和数据块,并将这些块组合成可以被DSP芯片执行的COFF输出模块;二是为各输出块指定存储地址。

链接器有两条命令支持上述任务:MEMORY和SECTIONS。MEMORY命令定义目标系统的存储器各部分命名并指定起始地址和长度;SECTIONS命令用于指定如何组织输入段以及在存储器何处存放输出段。若不用这两个命令,则链接器采用缺省分配算法。推荐使用这两个命令,一般在链接器命令文件 (扩展名为.CMD)中确定。

下面分析一个TMS320VC33芯片的典型CMD文件(文件名为CSRJ.CMD)。

csrj.obj/* 源程序编译后对应的目标文件 */

-l Rts30.lib/* 链接Rts30.lib库*/

-stack 0x800/* 设定系统堆栈2K大小 */

MEMORY /* MEMORY命令规定系统的存储器配置*/

{

STACKRAM: origin = 0x00807000, length = 0x00001000 /* 内部RAM*/

RAM: origin = 0x00800000, length = 0x00007000 /* 内部RAM*/

VECTORS: origin = 0x00809fc1, length = 0x63/* 中断向量表区间*/

}

SECTIONS/* SECTIONS命令规定程序中段的具体分配分配方法*/

{

.text: { } > RAM/* 系统程序存放位置 */

.cinit: { } > RAM/* C初始化表存放位置 */

.bss: { } > RAM /* 未初始化数据存放位置 */

.stack: { } > STACKRAM /* 堆栈存放位置 */

vectors: { } > VECTORS /* 中断向量表存放位置*/

}

程序若要使用中断,可按如下方法在csrj.c中进行定义。

asm(" .sect \"vectors\" "); /* 中断向量表定义*/

asm(" br _c_int01 ");

asm(" br _c_int02 ");

asm(" br _c_int03 ");

asm(" br _c_int04 ");

asm(" br _c_int05 ");

asm(" br _c_int06 ");

asm(" br _c_int07 ");

asm(" br _c_int08 ");

asm(" br _c_int09 ");

asm(" br _c_int10 ");

interrupt void c_intX() /* 中断处理函数,其中X为01~10之一*/

{

中断处理程序语句

}

3.编译选项等设置。(1)添加前述命令文件CSRJ.CMD和库文件RTS30.LIB到CSRJ工程中;(2)选择“Project”下的“Option”选项,在“Compiler”菜单下设置“Target Processor”为“C33”;在“Assembler”菜单下设置“Target Processor”为“C3X”(其它选项根据需要设置);(3)单击界面“Rebuild All”按钮,即可编译链接,生成CSRJ.OUT文件。

(三)在线仿真

将仿真器与目标板连接,打开“Option”菜单下的“Program Load…”选项菜单,选择所有选项后单击界面“Rebuild All”按钮,可编译链接生成CSRJ.OUT文件并将该文件载入;点击界面按钮“Run”,即可仿真运行。

(四)固化程序

TMS320VC33芯片一般外挂FLASH或EPROM来存储固化程序,因此程序固化前要根据外挂的FLASH或EPROM的具体要求,将CSRJ.OUT文件转换成相应格式后写入FLASH或EPROM。

二、DSP系统下的C语言编程应注意的问题

(一)内存依赖关系

为了最大化代码性能,编译器尽可能将指令并行处理。但是要做到这一点,就要确定指令间的关系。如果一条指令需在另一条指令执行后才能执行,那么这两条指令就存在依赖关系。当编译器不能识别指令间是否独立时,就要告诉编译器他们之间的关系,可以通过关键字“restrict”声明变量或优化命令选项来通知编译器。

Code Composer提供了四个优化命令选项:Level 0寄存器级别、Level 1局部级别、Level 2函数级别、Level 3文件级别。从表面看,直接使用Level 3最简捷,可以一步到位。然而在实际中,选择时应根据系统实际情况而定。一般较大的系统软件不宜采用Level 3级优化,因为这样一般容易造成系统死循环。在实际工作中,一般根据系统实时性要求,对于关键处的函数选用Level 2级,对于次要的可以选用Level 1级、Level 0级或不选,这样不会造成系统程序不执行或程序混乱的现象。

(二)变量的声明

函数调用时,尽可能使用全局变量,这样可以减少对变量的堆栈处理,同时也节省了寄存器的使用。

另外,在 Code Composer环境下全局变量的声明和初始化要占用约双倍的存储区域。因此,为了节省资源,对于数据量较大的查表常数数据,要采用特殊方法定义,使其只占用自身大小的存储资源。对表1所示数据的全局定义进行举例。

表1

1.22 3.55 4.67 9.53 8.11

6.97 9.45 7.54 8.16 1.08

若用常规方法如下定义:

biao_xyx[2][5]={1.22,3.55,4.67,9.53,8.11,6.97,9.45,7.54,8.16,1.08};

编译后查看.map文件,发现该数据在.cinit段占用12个字,在.bss段占用了10个字。

若用如下特殊方法定义

asm(" .global _biao_xyx ");

asm(" .sect \".data_chabiao\" ");

asm("_biao_xyx : .float 1.22, 3.55, 4.67, 9.53, 8.11 ");

asm(" .float 6.97, 9.45, 7.54, 8.16, 1.08 ");

extern float biao_xyx[2][3];

编译后查看map文件,发现该数据在只在.data_chabiao段占用了10个字。

(三)多调用TI提供的固有函数和功能函数

TI基于C语言开发提供了很多实际有效的固有函数。如果采用一般C语言自己编的函数,可能会需要更多语句,耗时可能增加。

(四)合理编写循环体

在数据处理过程中,循环体用得较多,处理量较大,坏的编程风格会浪费不必要的时间。一般应注意:在循环体内不要包含调用;循环体不要有过多指令;对于多重循环,如果内层循环体较短,可以考虑打破该循环体,与外部循环结合;将与循环变量无关的判断语句移到循环体外。

(五)注意浮点格式转换

为使硬件获得更高的效率,TMS320VC33芯片采用了不同与IEEE标准的浮点格式。在开发DSP系统通信软件模块时,若采用浮点格式进行数据传输,一定要注意外部系统使用的哪种格式,必要时要进行相应的格式转换。

三、结语

本文以TMS320VC33芯片的开发为例,介绍了用C语言开发DSP嵌入式系统的过程和注意事项,希望能对读者有所帮助。

参考文献

[1]杜普选,马庆龙.实时DSP技术及浮点处理器的应用[M].北京:清华大学出版社,2007.

[2]汪安名,程笠,徐宝根.DSP嵌入式系统开发典型案例[M].北京:人民邮电出版社,2007.

[3]TMS320C3x/C4x Assembly Language Tools User’s Guide[S].Texas Instruments,1997.

[4]TMS320C3x/C4x Optimizing C Compiler User’s Guide.Texas Instruments,1998.

c语言开发范文第7篇

关键词:C语言;DSP;嵌入系统

中图分类号:TP301 文献标识码:A 文章编号:16727800(2012)011002602

________________________________________

作者简介:罗莎(1982-),女,北海职业学院讲师,研究方向为计算机软件。1 DSP系统国内外发展现状

自1978年AMI公司世界上第一个单片DSP芯片及1980年日本NEC公司推出第一块单片DSP器件以后,美国TI公司于1982年推出了第一代DSP芯片即TMS32010系列,到目前为止已研发了第六代DSP芯片——TMS320C62X/C67X、TMS320C64X等;而美国Analog Device公司也推出了一系列有自己特色的定点、浮点的DSP芯片。随着芯片生产技术的发展,DSP嵌入式系统也相应得到大力发展,无论是国际或是国内,对于DSP系统的研发都有了一定成就。

1.1 国外发展现状

最早的DSP嵌入式系统是从国外发展起来的,而且随着国外先进技术的迅速发展,国际DSP系统始终保持着良好的发展势头,尤其是以欧美为主的国际市场,发展极其迅猛。如美国的Pentek公司、DSP research公司、Motorola公司以及加拿大的Dy4公司等,都是发展规模相当大的DSP生产公司,很多DSP系统的情况都可以从这些知名公司推出的产品信息来获得。比如说Pentek公司的4293处理板,用8片TI公司生产的300MHz、有19200MIPS处理能力的TMS320C6203芯片,集成了同等数量的32M同步动态随机存储器(SDRAM),而数据吞吐为每秒600M。

上个世纪80年代以来,DSP系统随着数字信息处理技术的发展被迅速推入市场,伴随着日趋激烈的竞争,各DSP生产公司不断调整、优化发展规划,深化了DSP系统产业化进程,DSP系统进入产业化是DSP应用程序成功的一个重要标志。

1.2 国内发展现状

近些年来,随着我国信息技术产业的飞速发展,DSP嵌入式系统也有了较好的发展,并已被我国数字信号处理、数字通信、雷达以及图像处理等高科技领域广泛应用,为我国高新技术产业乃至整个国民经济发展做出了很大贡献。

目前,我国许多高校以及科研机构都在致力于DSP嵌入式系统的研发,同时取得了相当大的成就。但是,我国主要的核心处理器件几乎都是从国外进口,相较于国际先进技术水平,我国在数字信号处理理论方面以及对高速率、高性能处理器的设计和制造方面都还有很大差距。因此,我国在半导体研究领域更要投入大量的研发力度、人才及资金等,这就要求我国科研人员要有敢于拼搏、艰苦奋斗的精神和坚持不懈的毅力。

2 DSP嵌入式系统应用情况

目前,全球生产DSP的公司有80多家,而生产出来的DSP芯片也多达300多种。生产DSP的公司主要有TI公司、Lucent公司、Analog Device公司以及Motorola公司,其中TI公司以及AD公司极具代表性,被以高新技术生产领域为主的各个生产领域广泛使用。

自从TI公司研发了第一代DSP芯片以来,其在业界始终处于领军地位,尤其是到现在为止生产到第六代DSP芯片系列,都促进了DSP系统的发展。其中以:TMS320C2000、TMS320C5000和TMS320C6000系列被我国引进并广泛投入数字信号处理领域。其中TMS320C2000系列的高性能、高效率被广泛应用于工业控制领域,该系列处理控制能力强外,还提供了方便与高性能器件相连的接口,其主要型号有TMS320C24X/28X系列;TMS320C5000系列性能高但功耗低,最低功耗可以达0.33mA/MHz,而最高达到900MIPS的处理速度,适用于移动、手持系统,其主要有TMS320C54X/55X系列型号;TMS320C6000系列可以说是高端DSP系统的代表,其浮点运算可达600~1 800MFLOPS、定点运算可达1 200~8 000MIPS的运算速度,其中浮点系列主要型号为TMS320C64X,是TI公司最新研发的高性能定点DSP处理器,浮点系列主要型号为TMS320C67X。

另外一个DSP生产势头良好并发展迅速的是美国AD公司,其所生产的DSP系统主要有SHARC、TigerSHARC以及Blackfin系列。其中SHARC系列被广泛应用于商用或军用雷达、声纳信号处理等领域,虽然其单片处理能力不高,但连接组成DSP阵列便能提高速率及性能;而从SHARC改进的TigerSHARC为高端DSP,其不仅处理能力极高,而且有容量极大的随机存储器(RAM),适用于软件无线电领域;至于Blackfin则是功耗低但性能高的DSP,适用于便携式的通信产品。

我国某高校研发的基于TMS320C6201的高速实时DSP处理平台,其允许输入数据的动态范围为16比特,若512点的FFT可以在59微秒内完成,若是1 024点的FFT,也可以在130微秒内完成。我国某电子技术研究所研发的DSP雷达数字信号处理通用模块用6片美国AD公司生产的ADSP21060芯片和大量可编程器件构建而成。以快速傅里叶变换(FFT)算法来看,以FFT、IFFT及复数乘法3个流水处理过程实行DSP组成的并行处理,若在33MHz的时种下,0.7毫秒就可以实现1 024点处理,而实现的单通道数据率是1MHz,双通道的并行工作率是2MHz。

3 C语言开发下DSP系统应用技术分析

TI公司DSP芯片的硬件编程主要有:用汇编语言、用C语言及用DSP/BIOS可视化编程工具。其中汇编语言程序指令不易读懂,且通用性极差,而对于底层的硬件控制,DSP/BIOS可视化编程工具又显得极为抽象难懂,相较于此二者,C语言适当平衡了二者的优缺点。首先,它作为一种高级语言,以其自上而下的模块化设计原则发挥了可移植性强、易读懂的优势,其次,它可以取代汇编语言的硬件控制能力,极细致地改写硬件寄存器数值。

本文以TI公司生产的TMS320VC33为例,介绍C语言开发下的DSP嵌入式系统在TI公司提供的与DSP芯片相匹配的软件集成开发环境Code Composer下的研发技术情况。

对TMS320VC33芯片的C语言开发,主要从以下几个步骤来实现:

(1)编辑C语言源程序。在Code Composer环境下,新建一个CSRJ.MAK工程,然后再新建一个以C语言源程序为内容的C源代码文件CSRJ.C以及一个程序设计时对TMS320VC33寄存器定义的头文件VC33.H,并将这两个文件添加到CSRJ.MAK工程。

(2)编译和链接。Code Composer环境下的汇编器及编译器建立的公共目标文件格式COFF极易于实行模块化编程,而且提高了编写程序的可读性及可移植性,使代码段以及存储器的管理更加灵活而有力,也提高了C语言程序编写的便捷性。公共目标文件格式中最小单位段在COFF目标文件中是及其重要的,它在存储器中占据着连续空间的数据块或代码。而链接器对段的处理主要是将公共目标文件中建立起的数据块以及程序块组合成可以被DSP芯片执行的COFF输出模块以及为每一个输出块指定存储地址。以下是—个TMS320VC33芯片的被命名为CSRJ.CMD的典型CMD文件:

csrj.obj /*源程序编译后对应的目标文件*/

-1Rts30.1ib /*链接Rts30.1ib库*/

-stack0x800 /*设定系统堆栈2K大小*/

MEMORY /*命令规定系统的存储器配置*/

{STACKRAM: origin=0x00807000,1ength=0x00001000 /*内部RAM*/

RAM: origin=0x00800000,1ength=0x00007000 /*内部RAM*/

VECTORS:origin=0x00809fcl,length=0x63 /*中断向量表区间*/}

SECTIONS /*SECTIONS命令规定程序中段的具体分配分配方法*/

{.text:{}>RAM /*系统程序存放位置*/

.cinit:{}>RAM /*初始化表存放位置*/

.bss:{}>RAM /*未初始化数据存放位置*/

.stack:{}>STACKRAM /*堆栈存放位置*/

vectors:{}>VECTORS /*中断向量表存放位置*/}

(3)在线仿真。连接仿真器与目标板。打开Option菜单下的Program Load选项,将所有选项全选,若要编译或载入链接生成的CSRJ.OUT文件,单击界面上Rebuild All按钮即可,而单击界面上的Run按钮,则为仿真运行。

(4)固化程序。TMS320VC33芯片要存储固化程序,通常是外挂FLASH或EPROM,也就是说,固化程序前要按照外挂的具体要求,把CSRJ.OUT文件转换为相应的格式,然后将其写入FLASH或EPROM。

4 DPS系统发展趋势

首先,目前生产的DSP主要基于精简指令集(RISC)结构,具有功耗低性能高并且尺寸小的优点,将MPU核、DSP核、专用处理单元以及电路单元并存储单元汇集在一个芯片上,向着集成DSP方向发展是未来DSP系统的一个发展趋势;其次,会在高性能处理器占主要地位的为单指令多数据流(SIMD)和多通道结构、超长指令字结构(VLIM)、多流水标量结构以及可并行的超级哈佛结构;并且,为使DSP系统在各个生产、生活领域更方便应用,进一步降低功耗和尺寸,提高速率及性能,尤其是便携式手持系统方面的应用,更应在保证性能的基础上注重减小尺寸;最后,可与可编程器件形结合,DSP系统在实际应用时经常需要借助其他器件,比起单独的DSP系统应用,能够更好地提高工作速率。

5 结语

综上所述,数字信号处理(DSP)系统在科学技术与社会经济发展中起着不可替代的作用,DSP处理器不仅速率快、性能高,而且功耗低、尺寸小,被许多高新技术产业广泛认可并大规模投入应用。而相较于汇编语言编写的DSP应用程序,用高级C语言研发的DSP嵌入式系统可移植性高、可读性强,并且易于修改及维护。因此,以高级C语言编写的DSP应用程序有很大的可开发性,是以后DSP系统的重要发展方向,对高新技术产业乃至于整个国民经济建设的发展有极大的促进作用。

参考文献:

[1] 周华.DSP嵌入式系统下的C语言开发[J].中国高新技术企业,2010(8).

[2] 李从宇,王宝光.嵌入式DSP系统C语言硬件编程技术[J].测控技术,2007(4).

[3] 苏延川.基于ADSP-TS101的嵌入式系统混合编程及优化方法[J].现代电子技术,2009(20).

[4] 胡世锋,张海涛.用C语言实现DSP程序设计的新方法[J].河北北方学院学报,2009(3).

[5] 张晓林,路程,崔迎炜.DSP技术的应用现状和发展[J].测控技术,2004(21).

[6] 顾颖.浅谈如何借鉴MISRA规范减少DSP程序设计的隐患[J].信息化研究,2009(10).

[7] 常丹华,贺树猛.基于DSP的嵌入式视频监测系统的设计与实现[J].电子技术,2009(3).

[8] 肖宛昂,曾为民.如何用C语言开发DSP嵌入式系统[J].单片机与嵌入式系统应用,2003(1).

c语言开发范文第8篇

【关键词】单片机;C语言;指针

C是一种编译型语言.有高级语言的特点,并具备汇编语言的功能,移植性能好,便于自顶向下结构化程序设计,C语言在单片机中的应用,给开发者带来了很大的方便.软件开发者不需要对单片机硬件的结构有很深人的了解,编译器可以自动完成变量存储单元的分配.使得单片机的程序设计更加简单可靠。指针、地址、数组及其相互关系是C语言中最有特色的部分。在编写单片机的应用程序时,常常需要对端口及存储单元进行寻址.因此,掌握指针在这些寻址过程的工作原理是很有必要的,这有利于编写灵活高效的程序。

一、指针结构声明

C语言中,对于指针的声明采用如下形式:类型标识符*指针变量名;由于单片机存储区的关系,所以单片机C语言的指针声明格式有别于普通C语言指针的声明格式,其格式为:

类型标识符[存储区类型]

指针变量名[指针变量存储区类型]

单片机C语言的指针的定义比普通C语言指针的定义多两个部分:存储区类型是指指针变量所指向的数据的存储区,可以是所有的数据存储类型;指针变量存储区类型是指指针变量的存放区域的数据,可以是data、ldata、xdata或pdata如下声明:

unsigned char xdata *data yc;

上声明语句是指在RAM(data)内声明一指针变量yc,该指针变量指向一无符号字符型数据,该无符号型字符存在xdata区内。 该指针变量的应用格式如下:

unsigned char xdata indata[6];

unsigned char xdata *data yc;

yc=indata;

其编译后的的汇编为:MOV 08H,#00H;0x08和0x09是在片内RAM存储区分配的yc指针变量的地址空间。

二、指针寻址的实现

单片机C语言的数组的寻址和普通C语言的寻址基本上是一样的,只是当数组存储在片内时,由于片内RAM资源十分有限,所以很难有比较复杂的数据结构,而且在编程过程中也尽量避免在片内RAM中使用较大的数组。

1.指向data区的指针寻址的实现

这是最基本的寻址方法,比如一个检测系统中,通过A/D转换把外部数据输入单片机中,单片机对这6次采样数据求和,具体程序如下:

unsigned char data inputdata[6];

unsigned int data sum,i;

unsigned char data * data yc;

void main()

{ sum=0;

collectdata( );/*采集数据函数,输入到数组inputdata中*/

yc=inputdata;

for(i=0;i

sum+=*yc;

}

2.指向程序存储区的指针寻址实现

指针指向数据存储区其其实质就是C语言中指向函数的指针这一概念,可以利用这种指针来实现函数指针调用函数。指向函数的指针变量定义格式为:类型标识符(*指针变量名)([参数1],[参数2]……);定义好后用(*指针变量名)([参数],[参数]……)即可调用这个函数。例如,主程序中要引用一个键盘扫描函数scan,程序如下所示:

Void scan()

Void main()

{ void (*yc)();

Yc=scan;

For(;;)

{(*yc)( );}

}

三、C51热启动代码的编制

对于工业控制计算机,往往设有看门狗电路,当看门狗动作使计算机复位,这就是热启动。热启动时,一般不允许从头开始,这将导致现有的已测量到或计算到的值复位,导致系统工作异常。因而在程序中必须判断是热启动还是冷启动,常用的方法是:确定某内存单位为标志位(如0x7f位和0x7e位),启动时首先读该内存单元的内容,如果它等于一个特定的值(例如两个内存单元的都是0xaa),就认为是热启动,否则就是冷启动,程序执行初始化部份,并将0xaa赋与这两个内存单元。

根据以上的设计思路,编程时,设置一个指针,让其指向特定的内存单元如0x7f,然后在程序中判断,程序如下:

void?main()

{?char?data?*HotPoint=(char?*)0x7f;

if((*HotPoint==0xaa)&&(*(--HotPoi-nt)==0xaa))

{?/*热启动的处理?*/??}

else

{?HotPoint=0x7e;/*冷启动的处理*/

*HotPoint=0xaa;

*(++HotPoint)=0xaa;

}

/*正常工作代码*/

}

然而实际调试中发现,无论是热启动还是冷启动,开机后所有内存单元的值都被复位为0,当然也实现不了热启动的要求。这是为什么呢?原来,用C语言编程时,开机时执行的代码并非是从main()函数的第一句语句开始的,在main()函数的第一句语句执行前要先执行一段“起始代码”。正是这段代码执行了清零的工作。C编译程序提供了这段起始代码的源程序,名为“startup.a51”,打开这个文件,可以看到如下代码:

IDATALEN?EQU?80H;the?length?of?IDATA?memory?in?bytes.

STARTUP1:

IF?IDATALEN??0

MOV?R0,#IDATALEN-1

CLR?A

IDATALOOP:MOV?@R0,A

DJNZ?R0,IDATALOOP

ENDIF

可见,在执行到判断是否热启动的代码之前,起始代码已将所有内存单元清零。如何解决这个问题呢?好在启动代码是可以更改的,方法是:修改startup.a51源文件,然后用编译程序所附带的a51.exe程序对startup.a51编译,得到startup.obj文件,然后用这段代码代替原来的起始代码。具体步骤是(设C源程序名为HOTSTART.C):

修改startup.a51源文件(这个文件在C51\LIB目录下)。

执行如下命令:

A51?startup.a51得到startup.obj文件。将此文件拷入HOTSTART.C所在目录。

将编好的C源程序用C51.EXE编译好,得到目标文件HOTSTART.OBJ。

用L51?HOTSTART,STARTUP.OBJ命令连接,得到绝对目标文件HOTSTART。

用OHS51?HOTSTART得到HOTSTART.HEX文件,即可。

对于startup.a51的修改,根据自已的需要进行,如将IDATALEN?EQU?80H中的80H改为70H,就可以使6F到7F的16字节内存不被清零。

四、结束语

单片机C语言的应用是十分灵活的,要充分发挥C语言的优势,对内外部数据和程序进行方便自如的操作,必须要掌握好指针的应用。

参考文献

[1]马忠棒.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2001.

[2]曹聪,岳继光.单片机C语言指针的应用[J].微型电脑应用,2003.

c语言开发范文第9篇

户口所在: 汕头 国 籍: 中国

婚姻状况: 未婚 民 族: 汉族

培训认证: 未参加 身 高: 167 cm

诚信徽章: 未申请 体 重:

人才 测评: 未测评

我的特长:

求职 意向

人才 类型: 应届毕业生

应聘职位: 软件工程师:,互联网软件开发工程师:

工作年限: 2 职 称: 初级

求职 类型: 实习 可到职日期: 随时

月薪要求: 2000--3500 希望工作地区: 广州,深圳,

工作经历

志愿者经历

教育背景

毕业院校: 东北师范大学

最高学历: 本科 获得学位: 毕业日期: 2011-07

专 业 一: 软件工程 专 业 二:

起始年月 终止年月 学校(机构) 所学专业 获得证书 证书编号

2007-07 2011-07 东北师范大学 软件工程 - -

语言能力

外语: 英语 良好 粤语水平: 一般

其它外语能力: 研读过 日语 三级教材

国语水平: 精通

工作能力及其他专长

能够充分理解面向对象的设计思想。

熟练掌握Java、C/C++ 程序设计语言,掌握基本的算法原理,会利用开发平台编写高级语言程序。

能熟练使用JSP+JavaBean开发模式。

能熟练使用Eclipse、MyEclipse、Microsoft Visual Studio。

能熟练配置、调试Java应用服务器Apache Tomcat并进行Java程序的开发部署。

熟悉MySql、Oracle、SQLServer2000数据库,掌握基于SQLServer2000的数据库编程。

熟悉和了解OOA,OOD能操作Power Designer等工具。

熟悉JavaScript。

在校期间做过若干项目: 系统平台:Windows XP

开发环境:MyEclipse+TOMCAT6.0+SQLServer2005

项目描述:后台数据库管理酒店人员、物资;前台界面实现酒店的信息查询、预定。

开发团队: 小组开发,共四位成员。

角色定位: 项目组长,负责网站前台界面设计、JSP程序的编写以及后台数据库的设计,

协调小组成员的设计、开发工作,参与测试。 系统平台:Windows XP

开发环境:MyEclipse

项目描述:使用C++语言开发,采用面向对象设计,实现该语言的词法分析,语法分析及语义分析三个部分。

开发团队: 小组开发,共四位成员。

角色定位:主要负责词法分析及语法分析部分面向对象的设计与开发。

在校担任职务:

曾任东北师范大学校报学生记者团记者,以及东北师范大学软件工程学院社团联合会 求职 协会副会长

详细个人自传

学习成绩良好,有自主学习与钻研的精神,对软件开发有很浓厚的兴趣;

热爱集体生活,善于与人合作;

性格乐观开朗,幽默风趣,善于与人交流沟通,有良好的表达能力;

具备较强的文字书写功底和文档编写能力;

热爱生活,积极向上,我的座右铭是“朝阻力最大的方向走”;

爱好音乐,健美操、游泳等运动;

c语言开发范文第10篇

关键词:UPS 监控系统 EATON DXRT RS232

中图分类号:TN86 文献标识码:A 文章编号:1672-3791(2016)1(a)-0000-00

1 研究目的及软件功能

节传机房目前担负着节目源接收、传输的重要职责,而弱电间内的设备包括了大部分的核心设备,UPS是为这些核心设备提供持续、稳定、不间断的电源供应的重要外部设备。一旦UPS发生异常没有及时处理,会对安全播出构成隐患。因此,当前我们需要一个可以实时监测UPS状态,并对UPS的状态异常进行报警的方案,而本方案就是在这个背景下产生的。本方案对节传机房弱电间及500机房内的伊顿DX-RT UPS设备采取集中式监控的方法,通过一台计算机连接到串口服务器与各个UPS的串口间进行通信,从而达到与各个UPS进行通信的目的。

2 监控系统设计构思

(1) 对串口接收到的信息进行分析,将需要的参数显示在软件界面

(2)当接收分析后的参数低于或超过设定的阈值,软件将通过界面提示和声音报警提示管理人员。

(3)软件对市电或UPS的异常状态进行记录,提供查询功能

(4)软件提供初始化工具,管理人员能够根据实际情况调整一些参数(包括轮询UPS的时间、各个UPS所对应的串口号、软件界面字体的大小,告警提示的声音等)

(5)具备实时性,准确性,可兼容性和简洁的界面。

3 总体设计思路

软件采用C语言开发,图形界面使用GTK+图形工具开发。由于软件有实时性的要求,但是该UPS串口最高的传输速率为9600bps,每台UPS发送并接收完所需的命令字和反馈字的时间约在10s,因此软件的通信模块采用多进程技术进行编写,如此每台UPS的通信便互相独立,从而将每台UPS的通信时间控制在可接受的范围内。此外还必须考虑到软件长时间运行的稳定性,对内存的使用和释放,对异常操作的鲁棒性。

使用串口服务器作为监控计算机的串口扩展来连接各个UPS,相对使用多串口卡连接各个UPS可扩展性更强,考虑到以后如果增加监控UPS的数量,不需要对整体线路再做改动,也无需再购买硬件,另外针对RS232传输距离短的特点,对于距离较远的UPS,考虑到弱电间内已铺设光缆,因此采用RS232-光纤转换器转换成光信号后再通过光纤进行传输。

4 模块功能简介

通信模块:负责发送命令字并接收回答的状态信息,并对接收到的信息进行校验。

显示及声光告警模块:负责将通信模块得到的状态信息通过UI进行显示,并对异常信息进行告警。

日志记录模块:对异常状态进行记录并保存为文件。

4 结语

监控软件与各个UPS保持实时通信,及时的获取了各UPS当前关键参数的数据,并通过软件界面显示出来,使值班人员能方便掌握UPS状态和及时发现设备异常。同时监控软件也提供了查阅设备异常记录的功能,为安全播出提供了良好的技术支持。

参考文献:

[1] 江荣彻,何黔勇.大功率UPS在广播电视发射台的应用[J].数字传媒研究,2015(3).

[2] 杨鸿.C语言在WinCC语音报警中的应用[J].自动化应用.2016(3).

上一篇:视听语言范文 下一篇:网络语言范文

友情链接