当前位置:首页 > 单片机 > 单片机
[导读] 在我们对DSP编程的时候,相信没有人会把所有的代码都放在同一个源文件里面:光各种寄存器的初始化代码就有几百上千行了,再加上我们自己书写的代码,想想假如一个.c文件里面有一万行,该如何管理、调试呢?所以要按照

 在我们对DSP编程的时候,相信没有人会把所有的代码都放在同一个源文件里面:光各种寄存器的初始化代码就有几百上千行了,再加上我们自己书写的代码,想想假如一个.c文件里面有一万行,该如何管理、调试呢?所以要按照功能、寄存器分类等进行划分,这样一个工程就包含了很多的头文件、源程序等等,每个源程序经过编译、汇编之后都会产生单独的目标文件。因为对于程序的任何一点修改,都需要编译器进行编译,如果每次都把所有的程序进行重新编译的话,是对时间和资源的极大浪费:特别是那些基于Eclipse的编译环境,因为基于Java这样的技术,本身就很慢,如果一次编译的文件很多,编译过程是非常痛苦的等待,甚至经常怀疑编译环境是不是已经挂掉了?所以为了提高效率,我们可以使用增量编译技术只对有修改的文件进行重新编译和汇编,而没有修改的则不需要更新目标文件。但是因为编译器和汇编器对每个源文件是单独汇编的,它们并不知道某个模块中的数据和程序相对于另一个模块而言,具体位置在哪里,所以接下来我们就需要使用链接器把所有的目标文件给“拼接”起来,最终生成一个可以独立运行的文件,即可执行文件。它的功能包括三个主要的步骤:

(1)将代码和数据放入“假想”中的内存:链接器基于.cmd文件中对存储器地址的划分,按照不同的段把代码和数据分别装入对应的地址中;当然这完全是在电脑上完成的,不需要实际的DSP和RAM“出面”。

(2)为数据和指令分配内存地址:最简单的例子,为函数中断的入口制定一个地址,这样在进中断的时候,程序指针直接跳转到中断入口的地址就行了。

(3)修改内部和外部的引用:链接器使用每个目标文件中的重定位信息和符号表,来解析某个目标文件中未定义的符号,因为它有可能是在别的目标文件中定义的。

为了更好地理解链接器的行为,我们就需要了解一下它的配置选项。链接器的配置选项也很多,但是和程序优化的那些选项相比,其含义要更容易理解一些。表1是链接器的最基本选项,定义了链接器正常工作所必须的参数。

链接器的文件搜索选项则是链接器用来寻找文件时使用的,例如查找某个和FPU运行有关的浮点库函数,如表2所示。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

【2024年5月8日,德国慕尼黑讯】Rust编程语言凭借其独特的内存安全特性,已经成为汽车软件开发中C/C++的有效补充和潜在替代品。全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OT...

关键字: 编译器 微控制器

MIKROE增加了图形功能,CLANG支持ARM和RISC-V以及许多其他功能

关键字: 编译器 RISC-V架构 工业自动化

IAR Embedded Workbench for Arm已全面支持恩智浦最新的S32系列,可加速软件定义汽车的车身和舒适性应用的开发

关键字: 电机控制 电动汽车 编译器

这款新编译器专为dsPIC®数字信号控制器 (DSC)优化设计,可为实时应用定制许可选项

关键字: 编译器 数字信号控制器 自动驾驶

C语言编译器是一种用于将C语言源代码转换为可执行程序的软件工具。它的主要功能是将C语言代码翻译成机器语言,以便计算机能够理解和执行。C语言编译器通常包括预处理器、编译器、汇编器和链接器等多个组件,它们协同工作以完成编译过...

关键字: C语言 编译器 Microsoft Visual C++

IAR Embedded Workbench 9.40版本引入了与指针验证和分支目标识别(PACBTI)扩展的无缝兼容性,保护嵌入式应用程序免受各种安全攻击。

关键字: 代码 嵌入式应用程序 编译器

在过去数十年,摩尔定律一直支配着半导体的发展。随着MCU的性能越来越强,嵌入式产品也越来越智能,嵌入式软件也变得越来越复杂。编译器作为嵌入式软件开发的基础工具,将程序员编写的源代码转换为底层硬件可以执行的机器指令。一款优...

关键字: 摩尔定律 嵌入式 软件开发 编译器

Python的创始人是一位荷兰籍的程序员——吉多·范罗苏姆(Guido van Rossum),江湖外号“龟叔”。据说这个外号是由于Guido的开头与龟的拼音gui相同得来的,所以Guido也被程序员们戏称为“龟叔”。在...

关键字: Python 编译器 人工智能

从汇编角度来说,如果“test %al, %al”能改成“test %0x1, %al”就没有匪夷所思的问题了,如此一来应该会降低CPU的效率,毕竟执行指令还需要一个立即数,我没搞过编译器也没设计过CPU,纯属瞎猜,能搞...

关键字: 汇编 CPU 编译器

ZigBee 无线网络节点开发平台软件开发平台 IAR Embedded Workbench(简称 EW)的 C/C++交叉编译器和调试器是今天世界最完整的和最容易使用专业嵌入式应用开发工具。EW 对不同的微处理器提供一...

关键字: IAR 无线网络 编译器
关闭
关闭