单片机编程,为什么要用C语言

随着技术的发展,电子产品越来越多,方便了我们的日常生活,大多数电子产品上都有单片机,而单片机是通过执行软件逻辑来实现功能的。而单片机编程最合适的编程语言是汇编语言,但是最常用、最普及的却是C语言。单片机为什么要用C语言来编程?

C语言最早是在1972年的时候在DEC PDP-11计算机上首次跑起来的,它的设计者是美国人丹尼斯·麦卡利斯泰尔·里奇,他在贝尔实验室为UNIX操作系统设计的。后来他和同事共同编写了C语言编程标准–K&R。没想到日后C语言会成为广泛的编程语言并风靡全球。而之所以叫做C语言,是因为它是在B语言的基础上而设计出来的。

UNIX操作系统、Linux操作系统、MySQL等都是使用C语言编程实现的。

单片机是可编程器件,他的控制逻辑是通过软件来实现的。在单片机之前,控制逻辑是通过纯硬件来实现的,受硬件逻辑的约束无法实现太复杂的逻辑。而单片机是有指令集的,最开始通过使用汇编来编程,虽然汇编执行效率非常高,但是汇编的可读性和移植性非常差,而C语好能弥补汇编的不足。

汇编语言举例

  1. 单片机的寄存器配置。对单片机编程其实就是配置单片机的寄存器和端口配置,而这都是具有时许的,需要精准的控制。
  2. 单片机存储和执行程序需要Flash和RAM,而这些资源非常有限。所以,代码的占用空间情况非常重要。
  3. 单片机都是有指令集的。学习过单片机汇编的朋友可能会有印象,8051单片机具有111条指令集,并且有7种不同的寻址方式。

冒泡排序的C语言实现

前文所说,单片机的汇编指令比较难记,可能存在两种情况:1)更换硬件平台,这要重新适配指令集、更新寄存器访问地址,比较麻烦;2)换人维护程序,汇编的可读性比较差需要较长的时间才能理解别人的程序。

而C语言就比较灵活了,正好能弥补汇编的劣势。

  1. 不需要记忆单片机的指令集,只需要通过寄存器的配置就能让单片机正常工作;
  2. C语言有指针、数组、结构体、联合体、枚举等各种类型,大大增强了编程的灵活性和程序处理能力;
  3. C语言方便模块化编程,可以实现代码的规范化。

C语言编程

你用C语言编程吗?来评论区讨论一下吧。

从事单片机工作,C语言要达到什么水平?

大家好,我是无际,鸽了将近1个月我又回来啦…

最近实在太忙了…每天基本工作到晚上12点多,感觉额头凉飕飕的(发际线又变高了…)

今天趁有时间来写一篇经验分享,希望对大家有帮助哇!

记得在2011年的时候我刚毕业,专业是电梯,考了高级维修证,但是对维修一窍不通,所有知识都是建立在理论层面。

当时我还是比较排斥这个行业的,风险高、工资低、工作时间24小时待命。

误打误撞我接触到了单片机,觉得挺有意思,玩硬件编程最大的好处就是,能让你体会到你学的东西真的能干点实事。

但是兴趣归兴趣,现实是现实,面临毕业,我最大的困境还是找工作。

干电梯是不可能了,别的行业又不会,只能盲目坚持自学单片机看能否转行成功。

当时我也不知道自己非对口专业、学历又不高的情况下,会不会有公司要。

更不知道自己学到什么程度能出去找工作,一切都是摸着石头过河,走一步算一步。

不过,最后还是被我摸对了,成功自学进入单片机开发这个行业,以前写的技术博客还历历在目。

10年前的任职要求和现在还是有挺大差别的,我找工作的时候只会下面几点:

1. C语言

2. 51单片机

3. 用51单片机做过智能小车项目

4. Protel99看原理图

5. 插件焊接能力

如果放到现在,你只会这些,估计很难找到工作,单片机开发也不单纯地只看C语言水平

所以,下面我根据自己这10年被面试和面试的经历来跟大家分享下,现在如果你想从事单片机开发,需要具备哪些能力比较有竞争力。

很多人以为从事单片机开发,主要是学单片机。

这是一个误区,要改,单片机只是工具,掌握这门工具是必须的,但重点不是研究工具

单片机厂家和型号太多了,我们不可能每个都去学习,我们只需要学习主流的就可以了,比如说:

1. STC单片机

2. STM32单片机

会用这两个,基本其他品牌型号的单片机,你1-2周就能把它用起来。

学习这些单片机最好的办法就是买开发板,把常用的外设都用起来就够了,工具会用了你就没必要去深究工具是怎么造出来的。

然后开始锻炼你的功能实现能力(简称产品思维),同时提升C语言编程水平

这些从开发板上都无法学习到,只能做项目。

即便你没系统学过STM23,给你做几个基于STM32单片机的项目,你都用得溜溜的,我就是这样学会STM32的。

锻炼产品思维需要你多做项目,学习不同的产品功能,要如何去实现。

锻炼C语言编程水平就不一定看你做过的项目数量了,而是看你能不能碰到一个好老师,能不能接触到一些不错的代码。

如果没有,也接触不到,STM32的标准库就是你最好的老师。

很多人不知道C语言编程的水平的好坏会体现在哪里,反正写的好坏,最终都能实现功能,从产品运行来上看不到任何区别。

确实,如果是一些小项目,不管你代码写得怎么样,都不影响产品正常运行。

但是一旦项目代码量上去以后,比如说上万行代码,编译出来有30K左右的代码量的时候,你就能体会到,C语言编程水平有多么地重要。

没有一定的水平,你根本写不出中大型项目代码,最直接的体现就是写着写着发现功能之间有冲突,然后改,改完以后又跟另外的功能有冲突,最后砸键盘泄愤!

别问我怎么知道的,我就是这么过来的。

所以,C语言的编程水平,主要体现在两个方面:

1. 架构

2. 算法

架构是你整个代码的架构,是不是模块化的,移植性怎么样,扩展性怎么样。

关于架构,我自己在19年录制了一套还比较系统的教程,这个架构做过编译后60K以上代码量的项目,稳定性没问题,也解决了很多产品的痛点,可以无偿提供给大家学习。

算法是你程序整体执行的效率,实时性怎么样,比如用左移代替乘法执行的机器周期会更短,一般的产品对算法没太高的要求,即便整型数据你用浮点数据方式运算,都功能效果上都体现不出来。

所以,提升C语言的编程水平,首先是提高代码的架构水平,然后才是算法(如果有需要的话),毕竟算法的沉淀,不是一朝一夕的,有时候一个算法就够你折腾一个月。

除了单片机、产品思维、C语言编程能力,你还需要具备基本的电路分析能力,要会使用画图软件看原理图等等。

下面我大概来总结下,到底需要哪些能力?

1. 掌握51和STM32单片机这两个工具使用。

2. 掌握C语言。

3. 会用AD软件看原理图。

4. 懂基本的电路分析(至少要知道是什么信号和协议进到单片机)。

5. 做过2个项目。

重点就是第4,也是公司招聘最看重的,项目可大可小。

所以,想从事这个工作,不是说单纯看C语言水平的,而是你的综合能力,这个综合能力就是给你一个项目,你懂不懂分析电路原理,懂不懂软件怎么去实现它,哪怕是会维护程序也行。

如果你能达到这个水平,我相信找个工作还是没问题的,前面不要要求薪资多少,先入行,有资本了再去提要求,通常半年跳槽工资至少翻一倍。

学单片机之前要学什么?C语言和单片机有什么关系?

学习单片机之前要学什么?提起这个就想起我当年开始学习单片机的血泪史了。

08年我加入学校的电子实验室,为08年的全国电子大赛做准备。

08年的电子大赛分类3类,硬件设计类、单片机软件类、产品的调试动手类

现在的大赛应该有所改动。

我选择的是软件类,选择这个的原因是我觉得这个更加的神秘,就是这个神秘感让我对软件更加的有兴趣。

刚开始真的是一窍不通,我买了一本C语言书,独自学习了2个月,做了3本笔记,然后又学习了1个月的数字电路,到这个时候,我都快奔溃了,3个月过去了,还是啥都不懂!

这个时候我已经做好放弃的准备了,最后想想:自己选的路,跪着也要走完。

正好那段时间每天也闲得,就抱着边玩边学的态度,说出来你可能不信,不知不觉就把单片机的IO口、定时器、中断、串口通讯这些学会了。

那一刻,我就在想原来单片机开发也没有这么神秘!哈哈!

回顾一下自己的这个学习过程,到现在还是非常的难忘,相信很多的伙伴们可能还和我当年一样,坚持了一段时间,没有进展,一直处于一个入门前期的困惑当中。

其实单片机就是一个工具,在学习这个工具之前还是需要有别的知识作为铺垫。

比如说基本的数字电路基础简单的C语言编程基础

一、电路基础和C语言基础要学习的内容

1.数字电路基础需要学习什么?

掌握电阻、电容,三极管的基本用法,掌握单片机的高低电平的概念基本上就差不多了。

最好的学习渠道就是开发板的原理图,把开发板原理图搞懂基本上就能做一些项目了。

2. C语言编程基础

C语言基础的学习,必须要掌握一些基本的语法,和变量的定义。

具体的学习路径,可以到小破站找无际单片机编程比较系统全面,也是针对单片机来讲的。

学完单片机、电路基础、C语言的知识以后,就可以开始着手做一些项目了,前期先通过小项目开始,比如说电子时钟啥的。

二、C语言和单片机有什么关系?

通过前面的讲解,相信大家已经有一点概念了。

下面再给大家深入讲解下C语言和单片机的关系。

单片机支持C语言汇编来编写程序。

1. 通过C语言来编写

C语言编写的程序,最终需要通过keil工具编译成单片机可以识别的.hex文件的过程:

C程序源码->C编译器->汇编代码->汇编编译器->机器码(.HEX 或.BIN)

2.通过汇编来编写

单片机的程序早期都是汇编代码,汇编代码最接近硬件底层的低级语言,运行的效率比较高。

但汇编语言很很多比较明显的缺点:不方便阅读,移植性差,开发难度大等,随着技术的不断进步,大家就开始逐步的的使用C语言来代替汇编语言,(比较低端的芯片还是需要汇编来开发)。

所以,一般产品开发都是使用C语言,汇编一般是用来做很小的产品,或者单片机的启动文件。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。