重构单片机与C语言和汇编语言以及编译原理的系统认知

对于单片机:

以经典8051单片机为例,我曾经看不懂的是,51单片机能用来做什么?为什么51单片机可以用去做看起来高大上的自动化机器人,为什么它在家电领域,等等领域发挥作用。这种面向使用场景的了解让我很摸不着头脑。

我现在懂了,流水灯的本质就是,定时输出某种信号,自动机器人的各个动作,也不过就是对于某种指令,定时的发送一种信号来驱动伺服电机。这就是时序控制电路。

还有一些用不到时序控制的小伎俩,比如对于一种输入信号,产生一种输出信号,即不使用51单片机里的定时器模块的场景。这里的应用就是,温度控制系统,或者小车的巡线运动系统。

对于C语言与汇编语言:

我曾经学微机原理的时候没有学会,学不明白,我不懂为什么那个老教材上用的是汇编语言,而实验课上却是用C语言+keilC编译器。

我现在理解了,C语言的每个指令,都有一个对应的硬件模块来处理,也可以是有编译器分解其语言的信号模型,输入的信号与输出的信号的对应编译。

那么汇编语言在哪里呢?汇编语言就是中间的过程,数字信号以什么样的状态被处理的,就是汇编语言。

还是以51单片机为例,其运算器以算术逻辑单元(Arithmetic Logic Unit, ALU)为核心,还包括累加器A (Accumu-lator)、程序状态字寄存器( Program Status Word, PSW)、 B寄存器、两个8位暂存器TMP1和TMP2等部件。其中,ALU的运算功能很强,可以运行加、减、乘、除、加1、减1、BCD数十进制调整、比较等算术运算,也可以进行与、或、非、异或等逻辑运算,同时还能完成循环移位、判断和程序转移等控制功能。

两个8位暂存器(TMP1和TMP2)不对用户开放,但可以用来为加法器、逻辑处理器暂存两个8位二进制数。在进行数据运算时,两个参与运算的数据分别通过TMP1和TMP2同时进入ALU进行运算,运算的结果一般再返回给累加器ACC。

一大串,所说的不过就是,这个单片机的运算处理单元集成了这些功能,以实现数字信号的处理。

汇编语言就是表达一下数字信号处理的过程,在某时,对某个信号进行怎样的处理。

当然,其实51单片机,或者keilC都没有那么智能,能识别高级的C语言,我注意到我的51单片机实验指导书里所示例的C语言,仍然是一段对数字信号如何处理的程序。

单片机(Microcontroller),C语言,汇编语言与编译系统之间的关系可以描述如下:

 

1. **单片机(Microcontroller)**:

   - 单片机是一种集成了CPU、内存、I/O接口等功能于一体的微型计算机。它被广泛应用于嵌入式系统中,如家电、汽车电子、工业控制等。

   - 单片机常用的系列包括8051、AVR、PIC、ARM等。

 

2. **C语言**:

   - C语言是一种高级编程语言,常用于编写单片机程序。它具有结构化、易于理解和移植性强的特点。

   - 使用C语言编写单片机程序的主要优点是开发效率高,代码可读性好。

 

3. **汇编语言**:

   - 汇编语言是一种低级编程语言,直接与机器语言对应。每条汇编指令几乎一一映射到机器指令。

   - 使用汇编语言编写程序能够更好地控制硬件,提高代码执行效率,但代码的可读性和移植性较差。

 

4. **编译系统**:

   - 编译系统的作用是将高级语言(如C语言)转换为机器可以直接执行的低级语言(机器语言或汇编语言)。

   - 编译过程通常包括以下几个步骤:

     1. **预处理**:处理宏定义、文件包含等预处理指令。

     2. **编译**:将C语言代码转换为汇编语言代码。

     3. **汇编**:将汇编语言代码转换为目标文件(机器码)。

     4. **链接**:将多个目标文件及库文件链接为一个可执行文件或固件。

 

具体操作流程可以描述如下:

1. **编写代码**:开发人员使用C语言或汇编语言编写程序。

2. **预处理**:编译器对C语言代码进行预处理,如宏展开、头文件包含等。

3. **编译**:预处理后的C语言代码被编译器转换为汇编语言代码。

4. **汇编**:汇编器将汇编语言代码转换为目标文件(机器码)。

5. **链接**:链接器将多个目标文件和库文件链接成最终的可执行文件或固件。

6. **烧录**:将生成的固件通过编程器烧录到单片机的存储器中。

7. **运行**:单片机开始执行存储器中的程序,实现预期功能。

 

例如,对于一个基于ARM架构的单片机,典型的工具链可能包括:

- **编译器**:如GCC(GNU Compiler Collection),用于将C代码编译为汇编代码。

- **汇编器**:如GNU Assembler(as),将汇编代码转换为目标文件。

- **链接器**:如GNU Linker(ld),将目标文件链接为可执行文件或固件。

- **烧录工具**:如OpenOCD,用于将固件烧录到单片机上。

 

总之,单片机开发涉及从编写高级语言代码到最终在硬件上运行的一整套流程。使用C语言和汇编语言分别有其优势,而编译系统是将高级语言代码转换为机器可以执行的形式的关键工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值