本文引用自:
CPU 能理解的机器语言
单片机的CPU从内存中读取程序,但每次只能读取一条指令,然后解释每一条指令并执行。内存中存储的内容,无论是程序还是数据,都是一串“0”和“1”的二进制码。指令二进制码告诉CPU要做什么,数据二进制码则是CPU操作或处理指令时要用到的值。CPU的操作包括加法、减法等指令。这些像密码一样排列的一串“0”和“1”就是机器语言。例如,图1左侧显示的是一条机器语言指令,意思是“将2放入寄存器A中(寄存器是CPU内部的存储区域)。
CPU 总是按照内存地址的顺序读取指令代码,除非遇到跳转指令。例如复位后的地址为 0000,则从 0000 开始按照 0001、0002、0003 的顺序读取并执行指令。也就是说,程序就是按照处理要求排列的一系列机器语言。
CPU只能理解上面说的机器语言,因此要想让CPU运行,必须使用机器语言编写程序。然而机器语言不易于人们识别和读写,因此人们就用一种更简单、更容易理解的字符串来代替机器语言,这就是汇编语言。例如,在处理“将2赋值给寄存器A”时,如果用汇编语言来表示就很简单了。请看图1的右侧部分。在汇编语言中,用MOV字符串来表示赋值,因此“将2赋值给寄存器A”的处理可以表示为“MOV A,#02”。
620)这个.宽度=620;” />
图1:机器语言与汇编语言的比较
虽然汇编语言比机器语言更简单易懂,但人们还是很难理解。此外,汇编语言还有一个问题,那就是不同的 CPU 对机器语言的描述方式不同。因此,如果更换 CPU,与机器语言密切相关的汇编语言就必须重写,工作量很大。(上述例子中的机器语言和汇编语言都是瑞萨 RL78 系列微控制器中的语言。)
正如上面所说,每次更换CPU,就必须重新组织程序,这样不仅降低了生产效率,也增加了程序员的负担。
人性化的C语言
能够解决上述问题的编程语言就是C语言。C语言具有不依赖特定CPU、程序可移植性高的特点。再加上编程时可以使用熟悉的英文单词,所以C语言对于程序员来说是最容易上手的编程语言。下面我们来简单比较一下C语言和汇编语言。(图2)
620)这个.宽度=620;” />
图2:汇编语言与C语言的比较
C语言虽然不依赖于CPU,是人们最容易使用的编程语言,但它却是CPU根本无法理解的语言。因此需要一个能把C语言翻译成机器语言的软件,这个软件叫做编译器(compiler)。编译器翻译出来的程序的文件格式叫做目标文件格式。如果目标文件格式没有最终配置到内存中,CPU就无法执行这个程序。
此外,随着程序变得越来越复杂,它们几乎都以将一个程序拆分成多个 C 语言程序文件的形式出现。因此需要一个工具将多个目标文件格式编译成机器语言并配置到内存中。链接编辑器(也称为“链接器”)就是负责这项任务的。
可以查找程序错误的调试器
人类编写的应用程序难免会有错误(bug)。用来发现并帮助人们纠正程序错误的工具被称为调试器。下面简单介绍一下调试器的种类。
在线仿真器(ICE):ICE可以代替实际的微控制器,连接评估芯片进行仿真和调试。“在线仿真器”是美国Intel公司的注册商标。瑞萨将其命名为“Full-spec Emulators”并提供给市场。
J-TAG仿真器:J-TAG仿真器是利用微控制器中预先预留的调试电路进行调试,即通过实际使用的微控制器进行调试。与ICE相比,J-TAG仿真器的价格较低,瑞萨将其命名为“On-chip Debug Emulator”并提供给市场。
简易仿真器:简易仿真器在单片机上运行调试用的监控程序,在与PC机通信的同时进行调试。除要调试的程序外,还必须启动其他监控程序。因此与ICE或J-TAG仿真器相比,简易仿真器的程序运行速度较慢,且有各种功能限制。它的最大优点是价格非常便宜。
集成开发环境
如上所述,在开发微控制器的软件时,会使用编译器、链接编辑器、调试器等各种工具。过去,这些软件以单独的软件形式提供,一般通过命令提示符或批处理程序调出各个程序。但最近,它们开始以集成开发环境的形式提供,将各种程序集成到一个包中,可以通过 Renesas CS+ 等程序轻松调出并使用。
例如瑞萨针对RL78系列产品提供了“CS+”集成开发环境,其特点是“简便”、“快速”、“安全”,在集成开发环境中,只需简单的操作即可使用各种功能,因此该集成开发环境最适合提高软件开发的效率。
* 自2014年10月1日发布以来,瑞萨电子集成开发环境CubeSuite+的产品名称已从V3.00.00更改为“C++”。