当前位置:首页 » 编程软件 » 什么时候用编译器

什么时候用编译器

发布时间: 2024-05-05 17:08:20

A. 在DSP的TMS320F2812编程中c编译器の作用是什么。在连链接器中使用的cmd文件的作用是什

DSP芯片以其极高的精度,性能及运算速度等无与伦比的优点使它得到了十分广泛的应用,TMS320F2812是TI公司生产的到目前为止用于数字控制领域的最好的DSP芯片,在对它的仿真开发过程中,编译器生成的代码和数据要由链接器分配到合适的存储空间,通常链接器的命令文件.cmd文件是由用户自己编写的,编写不当,就会使仿真开发不能进行,TI公司虽然在《TMS320C28x Optimizing C/C++ Compiler User’s Guide 6》和《TMS320C28x Assembly Language Tools User’s Guide 6》做了介绍,但内容却比较散乱而且要求读者对整个开发系统要有较全面的认识,这对于初学者来说是比较困难的。下面以TMS320F2812芯片为例,结合具体的仿真调试实例加以说明使大家能够既快速又准确的掌握.cmd文件的分配方法。

1存储空间的配置
TMS320F2812的DSP存储器分为三个独立选择的空间-程序空间、数据空间和I/O空间,其中程序存储器存放待执行的指令和执行中所用的系数(常数),可使用片内或片外的RAM、ROM或EPROM等来构成;数据存储器存放指令执行中产生的数据,可使用片内或片外
的RAM和ROM来构成;I/O存储器存放与映象外围接口相关的数据,也可以作为附加的数据存储空间使用。表1是TMS320F2812的存储空间分布。

2CMD文件的分配方法
TI公司新的汇编器和链接器创建的目标文件采用一种COFF(通用目标文件格式),该目标文件格式更利于模块化编程,为管理代码段和目标系统存储器提供了强有力和灵活的编程方法。用户可以通过编写链接命令文件(.cmd文件)将链接信息放在一个文件中,以便在多次使用同样的链接信息时调用。在命令文件中使用两个十分有用的伪指令MEMORY和SECTIONS,来指定实际应用中的存储器结构和进行地址的映射。Memory用来指定目标存储器结构,Memory下可以通过PAGE选项配置地址空间,链接器把每一页都当作一个独立的存储空间。通常情况下,PAGE0代表程序存储器用来存放程序,PAGE1代表数据存储器,用来存放数据。由编译器生成的可重定位的代码和数据块叫做“SECTIONS”(段),SECTIONS用来控制段的构成与地址分配。对于不同的系统配置,“SECTION”的分配方式也不相同,链接器通过“SECTIONS”来控制地址的分配,所以“SECTIONS”的分配就成了配置.cmd文件的重要环节。以下是对“SECTIONS”的定义及分配的详细介绍。
(1)
被初始化的“SECTIONS”(包括数据表和可执行代码)
.text它包括所有的可执行代码和常数,必须放在程序页;
.cinit它包括初始化的变量和常量表,要求放在程序页;
.pinit它包括全局构造器(C++)初始化的变量和常量表,要求放在程序页;
.const它包括字符串、声明、以及被明确初始化过的全局和静态变量,要求放在低地址的数据页;
.econst它是在使用大存储器模式时使用的,包括字符串、声明、以及被明确初始化过的全局变量和静态变量,可以放在数据页的任何地方。
.switch它包括为转换声明设置的表格,可以放在程序页也可以放在低地址的数据页。
(2)未被初始化的“SECTIONS”(为程序运行中创建和存放的变量在存储器中保留空间)
.bss它为全局变量和静态变量保留空间。在程序开始运行时,C导入路径把数据从.cinit节复制出去然后存在.bss节中,要求放在低地址的数据页;
.ebss它是在远(far)访问(只用于C)和大存储模式下使用,它为全局变量和静态变量保留空间。在程序开始运行时,C导入路径把数据从.cinit段复制出去然后存在.ebss节中,可以放在数据页的任何地方;
.stack为C系统堆栈保留空间,这部分存储器为用来将声明传给函数及为局部变量留出空间,要求放在低地址的数据页;
.system动态存储器分配保留空间。这个空间用于malloc函数,如果不使用malloc函数,这个段的大小就是0,要求放在低地址的数据页;
.esystem动态存储器分配保留空间,这个空间用于外部malloc函数,如果不使用外部malloc函数,这个段的大小就是0,可以放在数据页的任何地方。

3举例说明.cmd文件的分配方法
以下是仿真调试串行通信接口SCI时的.cmd文件的分配,已经在TMS320F2812仿真调试中得到了很好的应用。
MEMORY

{PAGE0:
/*ProgramMemory*/

RAMH0:origin=0x3F8000,length=0x001000

RAML0:origin=0x008000,length=0x001000

RAML1:origin=0x009000,length=0x001000

ROM:
origin=0x3FF000,length=0x000FC0

RESET: origin="0x3FFFC0",length=0x000002M

VECTORS:origin=0x3FFFC2,length=0x00003EM

PAGE1:/*DataMemory*/

RAMM0:origin=0x000000,length=0x000400

RAMM1:origin=0x000400,length=0x000400

RAMH0:origin=0x3F9000,length=0x001000
,,,
}

SECTIONS
{/*Allocateprogramareas:*/

.cinit
:>RAMH0
PAGE=0

.pinit
:>RAMH0
PAGE=0

.text
:>RAMH0
PAGE=0

.reset
:>RESET,PAGE=0,TYPE=DSECT

Vectors :>VECTORS,PAGE=0,TYPE=DSEC

/*:*/

.stack
:>RAMM0
PAGE=1

.ebss
:>RAMH0
PAGE=1

.esysmem :>RAMH0
PAGE=1

.econst :>RAMM1
PAGE=1

.switch :>RAMM1
PAGE=1

,,,
}
为充分利用18k×16位的SARAM,本例将高地址的8k×16位的H0 SARAM区分成两部分,一部分用做存放程序放在PAGE0里,一部分用做存放数据放在PAGE1中以达到合理的分配;对实际仿真调试过程中的外围帧frame0,frame1,frame2等的分配因为篇幅问题就不做具体介绍了。
4查看段的分配及使用情况
在cmd文件中包括各种各样的链接器选项,每种选项代表不同的含义。其中,使用-m选项可以创建一个扩展名为.map的链接器(存储器)分配映射文件,其语法为:-m filename(文件名)。链接器的map文件描述以下内容:
存储器结构输入和输出段的定位在重新定位后外部符号的地址
通过map文件可以查看各段的分配情况,包括段的起始地址,使用的字节数等配合cmd文件的使用,可确定各个段的使用情况,从而保证程序的正常运行和最小的空间使用。
5 VisualLinker可视化链接器
TI公司出品的DSP软件开发环境CCS还提供了一种可视化生成存储器配置文件的工具:VisualLinker可视化链接器。如果程序原来包含了一个链接器命令文件(.cmd文件),则当创
建可视化链接文件的时候,原来cmd文件中的内存配置仍然会被使用。如果读者想修改内存配置,双击.rcp文件就会在CCS中打开可视化链接器的图形界面,调整每个内存模块的大小,直到认为合适,然后只需要重新连编,程序即可生成新的输出文件,重复上面的步骤,直到出现满意的结果。

B. 鏂硅垷缂栬疟鍣ㄦ湁浠涔堜綔鐢

鏂硅垷缂栬疟鍣ㄧ殑浣灭敤锛



銆銆1銆佹彁鍗囱繍琛屾晥鐜


銆銆


銆銆澶ч儴鍒嗗畨鍗揿簲鐢ㄩ兘娑夊强涓嶅悓寮鍙戣瑷锛屼笉钖岃瑷褰㈡垚镄勪唬镰侀渶瑕佸湪杩愯屾佷腑杩涜屽岗钖屼粠钥屼骇鐢熼濆栨秷钥椼傝屾柟鑸熺紪璇戝櫒鏄涓氱晫棣栦釜澶氲瑷镵斿悎浼桦寲镄勭紪璇戝櫒锛屽紑鍙戣呭湪寮鍙戠幆澧冧腑鍙浠ヤ竴娆℃у皢澶氲瑷缁熶竴缂栬疟涓轰竴濂楁満鍣ㄧ爜锛岃繍琛屾椂镞犻渶浜х敓璺ㄨ瑷甯︽潵镄勯濆栨秷钥楋纴骞跺彲浠ヨ繘琛岃法璇瑷镄勮仈钖堜紭鍖栵纴鎻愬崌杩愯屾晥鐜囥



銆銆2銆佹彁鍗囩郴缁熷搷搴旀ц兘锛屾彁鍗囩郴缁熸搷浣沧祦鐣呭害


銆銆


銆銆瀹夊崜镊韬镄勭紪璇戞妧链鍦ㄤ笉鏂镄勫彂灞曪纴浣嗗嬬粓闇瑕佸湪杩愯屼腑渚濊禆铏氭嫙链烘潵杩涜屽姩镐佺紪璇戝拰瑙i喷镓ц岋纴瀵圭郴缁熻祫婧愭秷钥楄缉澶с傝屾柟鑸熺紪璇戝櫒鍦ㄥ紑鍙戠幆澧冧腑灏卞彲浠ュ畬鎴愬叏閮ㄤ唬镰佺殑缂栬疟锛屾坠链哄畨瑁呭簲鐢ㄧ▼搴忓悗镞犻渶渚濊禆铏氭嫙链鸿祫婧愶纴鍗冲彲鍏ㄩ熻繍琛岀▼搴忥纴甯︽潵鏁堢巼涓婄殑鏋佸ぇ鎻愬崌銆备妇涓涓渚嫔瓙锛欵MUI 9.1浠呬粎瀵圭郴缁熺粍浠禨ystem Server搴旂敤浜嗗崕涓烘柟鑸熺紪璇戝櫒钖庯纴灏卞甫𨱒ヤ简绯荤粺镎崭綔娴佺晠搴︽彁鍗24%锛岀郴缁熷搷搴旀ц兘鎻愬崌44%镄勬敹鐩娿



銆銆3銆佽╁洖鏀舵満鍒跺彉寰楅珮鏁



銆銆鍐呭瓨绠$悊鏄绋嫔簭寮鍙戜笌杩愯屾椂闇瑕侀吨镣硅冭槛镄勯儴鍒嗭纴涔熷拰绯荤粺娴佺晠搴︽伅鎭鐩稿叧銆傚畨鍗揿湪鍐呭瓨锲炴敹涓婇噰鐢ㄩ泦涓锲炴敹链哄埗锛屽彂澹板叏灞锲炴敹镞舵洿闇瑕佹殏锅滃簲鐢锛岃繖涔熸槸闅忔満鍗¢】镄勬牴锲犱箣涓銆傝屾柟鑸熺紪璇戝櫒鎻愪緵浜嗘洿楂樻晥镄勫唴瀛桦洖鏀舵満鍒讹纴锲炴敹镞舵棤闇𨱌傚仠搴旂敤锛岄殢镞剁敤闅忔椂锲炴敹锛屽ぇ澶ф彁楂樿繍琛岄熷害銆



銆銆4銆佷紭鍖栧簲鐢ㄧ骇缂栬疟浼



銆銆浠g爜浼桦寲鏄缂栬疟鍣ㄦ渶涓烘牳蹇幂殑锷熻兘锛屼篃鏄璇勫垽涓涓缂栬疟鍣ㄤ紭锷f渶閲嶈佺殑镙囧嗳銆傜敱浜庡畨鍗揿簲鐢ㄤ娇鐢ㄤ简铏氭嫙链烘満鍒讹纴闅句互闱㈠悜涓嶅悓搴旂敤瀵硅櫄𨰾熸満杩涜岄拡瀵规х殑𨱔垫椿浼桦寲銆傚畨鍗揂RT镄𪞝oT鍜孞IT锷ㄦ佺紪璇戝洜涓烘槸杩愯屽湪镓嬫満涓婏纴鍙楄祫婧愭墍闄愶纴锲犺屽彧鑳戒娇鐢ㄧ亩鍗旷殑浼桦寲绠楁硶銆傝屾柟鑸熺紪璇戝櫒鐢变簬鏄鍦ㄥ簲鐢ㄥ紑鍙戦桩娈佃繘琛岀紪璇戯纴镓浠ュ彲浠ュ厑璁镐笉钖屽簲鐢ㄧ伒娲婚噰鐢ㄤ笉钖岀殑缂栬疟浼桦寲鏂规堬纴钥屼笖锲犱负鍦ㄥ紑鍙戠幆澧幂紪璇戜笉浼氩弹鍒版坠链烘ц兘镄勯檺鍒讹纴鍙浠ヤ娇鐢ㄦ洿澶氩厛杩涚殑浼桦寲绠楁硶锛屼粠钥屼娇寰楁疮涓搴旂敤镄勬ц兘杈惧埌链浣炽



銆銆5銆佺亩鍗曟槗鐢锛屽紑鏀惧紑婧



銆銆鍗庝负鍦ㄦ寔缁杩涜屾妧链鍒涙柊镄勫悓镞讹纴涔熸敞閲嶅皢鎶链鎴愭灉锲为堣屼笟锛屽崕涓烘柟鑸熺紪璇戝櫒鍦ㄥ紑鍙戞瀯寤虹殑阒舵典负寮鍙戣呮彁渚涘揩阃熺殑闆嗘垚缂栬疟鐜澧冿纴澶уぇ闄崭绠浜嗗紑鍙戣呯殑瀛︿範鎴愭湰鍜屼娇鐢ㄦ垚链锛屼护浜т笟涓庢洿澶氱敤鎴峰弹鐩娿傚崕涓烘柟鑸熺紪璇戝櫒浼氢粠2019骞村紑濮嫔叏闱㈠紑婧愶纴闾璇锋暣涓浜т笟鍜岀敓镐佹潵涓璧峰叡钖屽叧娉ㄥ拰鎻愬崌瀹夊崜镐ц兘浣挞獙銆傜户鍗庝负P30绯诲垪鍙戝竷浼氭柟鑸熺紪璇戝櫒寮婧愬悗锛屽皢鍦2019骞8链堢殑鍗庝负缁堢寮鍙戣呭ぇ浼氩e竷鏂硅垷缂栬疟妗嗘灦浠g爜寮婧愶纴钖庣画浼氩湪2019骞11链堢殑缁跨洘寮鍙戣呭ぇ浼氩疄鐜板畬鏁存柟鑸熺紪璇戝櫒浠g爜寮婧愩

C. 缂栬疟鍣 鏄浠涔堬纻鐢ㄦ硶鍜岀敤阃旓纻

绠鍗曡诧纴缂栬疟鍣ㄥ氨鏄灏嗏滈珮绾ц瑷钬濈炕璇戜负钬沧満鍣ㄨ瑷锛堜绠绾ц瑷锛夆濈殑绋嫔簭銆

D. c语言的编译器是干什么用的

编译器的作用:将C源程序文件编译生成对应机器的机器码obj文件,再将obj文件连接生成可执行的EXE文件。
推荐你使用Dev-CPP

E. C语言的编译器和普通应用程序有什么区别吗

当然有区别啊,运行方式也不一样。
考虑到你可能不是从事开发工作的人,我就不用专业术语解释了,解释如下:

编译器:将使用开发语言,人工书写的逻辑、函数等,俗称“代码”,翻译成机器能理解的语言,机器只能理解二进制语言,即:0和1。比如:125这个数字在计算机中存储就是“01111101”。具体换算方法要参照计算机书籍中了。

普通应用程序:是使用开发语言,人工书写的逻辑、函数等,俗称“代码”,通过编译器翻译成机器能理解的语言之后,再进行封装打包成:例如exe文件之类的可执行文件,让计算机通过自己的方式显示出来并与用户进行交互。

它们之间最大的区别的,就是:
编译器可以直接与“用户开发的代码”和“计算机”进行数据交互的;
普通应用程序相当于是通过编译器和计算机进行数据交互。

F. 新手写代码用什么软件好

新手写代码,那得看是哪个语言的新手。

本人简单学过四种语言,c语言、c++、javapython,下面我就针对这四种种进行推荐:

c语言和c++

我曾用过两种编译器,到最后发现

dev-c++编译器

用着比较舒服,后来学习一直用它。

java

如果是这门语言,你的电脑配置较好(8G内存,i5以上)可以试试

idea编译器

如果你的电脑配置不好,推荐使用

eclipse编译器

当然,本人学习java进阶网站制作类。

如果你是一个厅燃没前端新人,我推荐你使用

subline编译器

如果你是一个后端新人扮纳,我段袭推荐你使用

notepad编译器或者editplus编译器

python

这门语言学的比较浅,本人用自带的用的还好。

G. 用C语言编程时需不需要编译器

需要。要不.c文件不可能运行。许多C开发工具都带了编译器了,如TuboC什么的,不是有编译的按钮吗

H. 编译器有什么用

简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)
高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。最后运行的时候通过通用语言运行库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。

I. linux中gcc编译器如何使用

2004年4月20日最新版本的GCC编译器3.4.0发布了。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。GCC 3.4.0比以前版本更好地支持了C++标准。本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程。

安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其它Linux和Unix系统。

系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要做一些设置工作才能使编译器工作正常。在本文中我采用这个方案安装GCC 3.4.0,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。

按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装上一个可工作的新版本的GCC编译器。

1. 下载

在GCC网站上()或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 3.4.0。可供下载的文件一般有两种形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

2. 解压

根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

% tar xzvf gcc-3.4.0.tar.gz
或者
% bzcat gcc-3.4.0.tar.bz2 | tar xvf -

新生成的gcc-3.4.0这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

3. 建立目标目录

目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录):

% mkdir gcc-build
% cd gcc-build

以下的操作主要是在目标目录 ${objdir} 下进行。

4. 配置

配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

% ${srcdir}/configure --prefix=${destdir} [其它选项]

例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则${destdir}就表示这个路径。

在我的机器上,我是这样配置的:

% ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java

将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。

5. 编译

% make

这是一个漫长的过程。在我的机器上(P4-1.6),这个过程用了50多分钟。

6. 安装

执行下面的命令将编译好的库文件等拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限):

% make install

至此,GCC 3.4.0安装过程就完成了。

6. 其它设置

GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。

6.1 gcc、g++、gcj的设置

要想使用GCC 3.4.0的gcc等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。

首先,查看原来的gcc所在的路径:

% which gcc

在我的系统上,上述命令显示:/usr/bin/gcc。因此,原来的gcc命令在/usr/bin目录下。我们可以把GCC 3.4.0中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

% cd /usr/bin
% ln -s ${destdir}/bin/gcc gcc34
% ln -s ${destdir}/bin/g++ g++34
% ln -s ${destdir}/bin/gcj gcj34

这样,就可以分别使用gcc34、g++34、gcj34来调用GCC 3.4.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

6.2 库路径的设置

将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了。

例如,如果GCC 3.4.0安装在/usr/local/gcc-3.4.0目录下,在RH Linux下可以直接在命令行上执行或者在文件/etc/profile中添加下面一句:

setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH

7. 测试

用新的编译命令(gcc34、g++34等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

8. 根据需要,可以删除或者保留${srcdir}和${objdir}目录。

热点内容
服务器搭建题目 发布:2024-05-18 23:01:29 浏览:27
下载武装突袭后怎么进服务器 发布:2024-05-18 22:56:17 浏览:825
c语言字符串大写变小写 发布:2024-05-18 22:56:16 浏览:438
重启删除的文件夹 发布:2024-05-18 22:34:11 浏览:638
视频软件源码 发布:2024-05-18 22:22:24 浏览:429
安卓换苹果sim卡去哪里换 发布:2024-05-18 22:21:29 浏览:637
顺丰薪资默认密码是多少 发布:2024-05-18 22:15:04 浏览:791
浏览器打不开服务器通信怎么办 发布:2024-05-18 21:32:22 浏览:961
创建存储空间 发布:2024-05-18 21:20:57 浏览:122
sql日期和时间 发布:2024-05-18 21:16:19 浏览:143