分享

为什么单片机选择了C语言而C语言又选择了单片机(操作寄存器需要使用汇编已经被抽象和封装为库函数形态方式实现直接使用如GPIO口配置串口收发ADC/DAC数据采集输出等都整合为公用的头文件并拥有偏移地址

 山峰云绕 2023-07-14 发布于贵州

https://www.toutiao.com/article/7233655939772252728/?log_from=5d95943a33ae_1689304482225


(操作寄存器需要使用汇编已经被抽象和封装为库函数形态方式实现直接使用如GPIO口配置串口收发ADC/DAC数据采集输出等都整合为公用的头文件并拥有偏移地址定义)


(操作寄存器需要使用汇编实现方式已经被抽象和封装为库函数形态以方便软件开发人员直接使用如GPIO口配置IO扩展芯片操作时钟引脚启停串口收发ADC/DAC数据采集输出等都归纳整合为公用的头文件并拥有偏移地址定义)


单片机是在单个芯片上集成了微处理器、存储器以及各种外设和接口的微控制器。单片机是嵌入式系统的重要组成部分,常用于家电、汽车、医疗等各行各业的电子设备。单片机编程语言的选择对于嵌入式系统的性能、开发成本和开发周期等方面有着重要的影响。但是为什么单片机总是使用的是C语言呢?今天就一篇文章帮你搞懂!

1.面向汇编语言的挑战与限制

在单片机编程领域的早期,主要使用的是汇编语言进行编程。汇编语言是一种底层的编程语言,直接操作硬件,对于资源受限的嵌入式系统来说,汇编语言可以发挥出很高的效能。但是,面向汇编语言的编程方式具有以下几个挑战和限制:

汇编语言具有很高的复杂性,因为程序员需要精通底层硬件和寄存器的运作原理,设计并编写出高效的指令,需要程序员深入了解CPU、内存等计算机硬件。汇编语言的语法非常简单,并且没有像高级编程语言那样的结构化形式,以至于代码难以理解和维护。汇编语言与具体的硬件相关,无法在不同的平台上通用,而且编写的汇编代码很难重用。不同的 CPU 架构有很多不同的指令集,这意味着程序员需要学习不同的指令集并理解如何将它们组合在一起实现所需功能。

2.C语言的历史和优势

随着单片机技术的不断发展,使用更高层次的编程语言来替代汇编语言也变得越来越普遍。C语言是一种高级编程语言,它具有以下优点:

C语言是一种底层的编程语言,它与汇编语言相比具有更高的可读性和可维护性,同时也有很高的执行效率。它具有很好的可移植性,因为它的语法规范是在ANSI C或ISO C标准下定义的,可以在不同的平台上使用,并且可以很方便地进行代码重用。C语言的语法规范很简单,对于程序员来说,学习和使用C语言相对于汇编语言更加容易。



3.C语言在单片机中的应用

单片机系统的资源非常有限,因此在编写单片机程序时,要尽可能减少对资源的占用。C语言代码可以编译成机器码,直接在CPU上运行,无需任何解释和转换,因此速度和效率都非常高。

  1. 控制逻辑: 单片机主要任务就是控制逻辑,而C语言正是可以很好地表达各种控制逻辑的工具之一。例如当传感器实时读数后,可通过C语言来判断采取何种动作,或开发一个带状态流转的状态机对其他模块进行调度。

  2. 低层驱动功能: C语言与硬件直接交互起来更加便捷,大量操作寄存器的需要使用汇编实现方式最初已经被抽象和封装为库函数形态,以方便软件开发人员直接使用,如GPIO口配置、IO扩展芯片操作、时钟引脚启停、定时器计数设置、串口收发、ADC/DAC数据采集输出等等都归纳整合为公用的头文件,并拥有偏移地址定义。

  3. 资源占用少: 由于单片机容量有限,因此需要在程序设计上尽可能节省资源。相比C++及其他面向对象语言,C语言代码精练补充标准化类型定义让内存友好地布局和管理,而且这种特性使得编写的程序更容易调试、校准以及维护。C语言在单片机编程中可以使用丰富的编程库,包括标准C库和第三方库。这些库可以方便地完成许多基本任务,从而节省程序员编写代码的时间和精力。

  4. 快速开发:使用C语言,单片机的快速原型及小批量化研发变得十分便捷。在实际项目中,放弃一些高级功能可以大大减少单片机出错可能性,加快上市进程。并且C语言代码的可移植性非常高,因为它的语法规范是在ANSI C或ISO C标准下定义的。只要保证代码符合C语言标准,就可以在不同的平台上编译和运行,使得代码可以轻松地迁移到其他单片机芯片或开发板上使用。

(操作寄存器需要使用汇编实现方式已经被抽象和封装为库函数形态以方便软件开发人员直接使用如GPIO口配置IO扩展芯片操作时钟引脚启停串口收发ADC/DAC数据采集输出等都归纳整合为公用的头文件并拥有偏移地址定义)

山青水秀77352

单片机实际上是位和寄存器操作,而操作寄存器的是汇编语言,而封装汇编的是C语言。

回复

05月17日

光明右使8787

实际上用汇编是最简单的,看datasheet就能直接开干,用C还得去看API。但是如果指令集较复杂,比如32位机,用汇编是要吐血的。还有一个就是汇编不好维护,自己写的代码,过个一年半载的就像看天书一样了。

回复

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多