单片机是什么?单片机编程怎么入门?
我不是电子专业毕业,后面是通过自学的单片机进入了这个行业。
当初我和很多人一样,不知道单片机是什么。
网上搜集了一些资料,说得太学术化,看得云里雾里。
今天我用大白话来给大家讲解一下。
单片机是我在自学java,然后在网上找教程无意间看到有这门技术存在。
当时一下就提起了我的兴趣。
因为单片机编程比java这些有趣多了,它能程序来控制硬件完成自己想要的行为,比如开灯、关灯。
最后也促使我放弃学习java而转向单片机编程领域。
下面我从2个方面来详细介绍下。
1.单片机是什么?
2.单片机能做什么?
3.单片机编程怎么入门?
一、单片机是什么?
单片机是一个可编程芯片,类似于电脑的CPU,只不过性能、成本、功耗都比cpu要低很多。
那我们通过编写汇编或者C语言程序,下载到基于单片机设计的电路板里面,就能完成相应的产品功能。
比如说打开/关闭灯、温湿度监控、自动加热制冷等功能。
具体功能呢是根据电路的设计和程序设计来区分的,不同的产品电路和程序都不一样。
二、单片机能做什么?
小到家用电器,大到飞机火箭,都有单片机的应用。
给大家举几个例子,比如说:
1. 带电压电流显示充电器
2. 电动车充电桩
3. 大家骑的共享单车
4. 空调、冰箱、电饭煲、电磁炉、消毒柜等等。
太多太多了,简单来说凡是有电路板,带智能控制的都可以用单片机来实现。
三、单片机编程怎么入门?
关于单片机编程怎么入门我历史文章里有写,每个环节学到什么程度,都写得很清楚,包含了全部教程和工具。
单片机入门到高级开挂学习路径(附教程+工具)
这里就只给大家大概介绍一下。
单片机编程入门有3个必备知识点:
1. 基础电路
2. C语言
3. 单片机
1. 基础电路
要熟悉常用的电子元器件、比如电阻电容、二极管、三极管等原理,熟悉串联并联电路原理等等。
2.C语言
前期通常只需要学习常用的一些数据类型和条件语句就可以了,像指针这种可以后期在项目中慢慢沉淀。
2. 单片机
入门建议先学51,再学STM32。
学习51是为了让大家对单片机有一个系统的认识,而学STM32是因为市场的需求很大,有助于以后找工作。
我是无际,最后祝大家学有所成!
详解单片机程序的运行过程
从单片机上知道,在上电的那一刻,MCU的程序指针PC会被初始化为上电复位时的地址,从哪个地址处读取将要执行的指令,由此程序在MCU上开始执行(当然在调用程序的 main之前,还有一系列其他的的初始化要做,如堆栈的初始化,不过这些我们很少回去修改)。PC在上电时,和MCU差不多,不过读取的是BIOS,有它完成了很多初始化操作,最后,调用系统的初始化函数,将控制权交给了操作系统,于是我们看到了Windows,Linux系统启动了。
如果将操作系统看作是在处理器上跑的一个很大的裸机程序(就是直接在硬件上跑的程序,因为操作系统就是直接跑在CPU上的,这样看待是可以的,不过这个裸机程序功能很多,很强大),那么操作系统的启动很像MCU程序的启动。前者有一个很大的初始化程序完成很复杂的初始化,后者有一段不长的汇编代码完成一些简单的初始化。这一点看,它们在流程上是很相似的。
详解单片机程序的运行过程
如果是系统上的程序启动呢?它们是由系统来决定的。Linux上在shell下输入。/p后,首先检查是否是一个内建的shell命令;如果不是,则shell假设他是一个可执行文件(Linux上一般是elf格式),然后调用一些相关的函数,将在硬盘上的p文件的内容拷贝到内存(DDR RAM)中,并建立一个它的运行环境(当然这里边还有内存映射,虚拟内存,连接与加载,等一些其他东西),准备执行。
由以上可知,单片机上的程序和平时在系统上运行的程序,在启动时差异是很大的(如果将程序调用main以前的动作,都抽象为初始化的话,程序的启动可以简化为:建立运行环境+调用main函数,这样程序的执行差异是不大的)。因为单片机上跑的程序(裸机程序),是和操作系统一样跑在硬件上的,它们属于一个层次的。过去之所以没有区分出单片机上的程序和PC机上的程序的一些差异,就是没有弄明白这一点。
由此,以前的一些疑惑也就解开了。为什么在单片机上的程序不怎么使用malloc,而PC上经常使用?因为单片机上没有已经写好的内存管理算法的代码,而在PC上操作系统里运行的程序,libc已经把这些都做了,只需要调用就可以了。如果在单片机上想用动态内存,也可以,但是这些代码要自己去实现,并定义一个相应的malloc,有时候一些公司会给提供一些库函数可能会实现malloc,但是因为单片机上RAM内存十分有限,如果不知道它的运行方式,估计会很危险。同样,因为在PC的系统上运行的程序与逻机程序的不同,裸机程序不会有动态链接,有的只是静态链接。
关于程序在执行时,从哪里读取指令,哪里读取数据,也曾因为没有弄清楚系统上的程序和裸机程序之间的区别,而疑惑了很久。虽然在《微型计算机原理》课上知道程序运行时,从内存中读取指令和数据进行执行和回写。但是单片机上只有几K的RAM,而flash一般有几十K甚至1M,这个时候指令和数据都在内存中吗(这里指的内存仅指RAM,因为PC上我们常说的内存就是DDR RAM memory,先入为主以至于认为单片机上也是这样,还没有明白其实RAM和Flash都是内存)?这不可能,因为课上老师只说内存,但是PC上内存一般就是DDR RAM,不会是硬盘,硬盘是保存数据的地方;由此类比时,自己把自己弄晕菜了,单片机的RAM对应于DDR RAM,那Flash是不是就对应于硬盘了呢?在CSAPP上明白了,PC上之所以都在DDR RAM上,是速度的因素。
硬盘的速度太慢,即使是即将到来的SSD比起DDRRAM,还是差着几个数量级,所以拷贝到DDRRAM中。这时,一个程序的代码和数据是连续存放的,其中代码段是只读区域,数据段是可读写区域(这是由操作系统的内存管理机制决定的)。运行时,再将它们拷贝到速度更快的SRAM中,以得到更快的执行速度。而对于,单片机而言工作频率也就几M,几十M,从Flash中与从RAM中读的差异可能并不明显,不会成为程序执行的瓶颈(而对于PC而言,Flash的速度太慢,DDRRAM的速度也是很慢,即使是SRAM也是慢了不少,于是再提高工作频率也提高不了程序的执行速度,所以现在CPU工作频率最快是在2003左右。一个瓶颈出现了。
为了提高CPU的使用率,换个角度想一下,既然不能减少一段程序的执行时间,就在同样的时间执行更多的程序,一个核执行一段程序,两个核就可以执行两段程序,于是多核CPU成为了现在的主流)。所以裸机程序指令就在Flash(Flash memory)中存放,而数据就放在了RAM中(flash的写入次数有限制,同时它的速度和RAM还是差很多)。更广泛说,在单片机上RAM存放data段,bss段,堆栈段;ROM(EPROM,EEPROM,Flash等非易失性存储设备)存放代码,只读数据段。本质上说,这和PC上程序都在RAM中存放是一样的,PC 上是操作系统规定了可读与可写,而单片机上是依靠不同的存储设备区分了可读与可写(当然现在的Flash是可读写的,如果Flash没有写入次数限制,速度又可以和RAM相差不多,单片机上是不是只要Flash就可以了呢(直接相当于PC上的DDRRAM)?这样成本也会比一个RAM,一个Flash低,更节省成本,对于生产商更划算)。
对于单片机的程序执行时指令和数据的存放与读取,理解如下:
对单片机编程后,程序的代码段,data段,bss段,rodata段等都存放在Flash中。当单片机上电后,初始化汇编代码将data段,bss段,复制到RAM中,并建立好堆栈,开始调用程序的main函数。以后,便有了程序存储器,和数据存储器之分,运行时从Flash(即指令存储器,代码存储器)中读取指令 ,从RAM中读取与写入数据。RAM存在的意义就在于速度更快。
无论是单片机也好,PC也罢,存在的存储器金字塔都是一致的,速度的因素,成本的限制导致了一级级更快的存储器的更快速度与更高的成本。应该说,对于它们的理解,就是存储器金字塔的理解。
相关问答
单片机程序 讲解?单片机程序是由中央处理器、存储器、输入输出端口(包括并行I/O、串行I/O、模数转换器)、计时器和计数器等组成,具有完整数字处理功能的大规模集成电路。单片...
单片机程序是 如何执行的?单片机从这里取第一条指令,开始执行。3、按指令PC逐次增加或跳转4、中断被触发时,PC指向中断向量,从这里取指令。5、中断服...1、单片机复位。2、PC指向000...
单片机 的 程序 属于?单片机的程序是用C语言写的单片机的程序是用C语言写的
单片机 算法 是什么 ?单片机算法是用于单片机程序设计的算法,通常用于控制和操作嵌入式系统中的硬件设备。单片机算法基于计算机科学和数学原理,使用编程语言和逻辑控制来实现特定...
单片机 的编程?单片机c语言编程是基于C语言的单片机编程。单片机的C语言采用C51编译器(简称C51)。由C51产生的目标代码短,运行速度高,存储空间小,符合C语言的ANSI标准,生成的...
程序是 怎么写入 单片机 的?先在电脑中把程序写好,接着通过一个RS232的串口连接至电脑,最后用ISP下载器把程序导入到单片机中就行了。单片机是一种集成电路芯片,是采用超大规模集成电路技...
单片机是 如何实现自动运行 程序 的?单片机实现自动运行程序的过程如下:首先,将程序代码编写并存储在单片机的存储器中。然后,通过设置单片机的复位电路,使其在上电或复位时自动开始执行程序。...
单片机 里的 程序 这么读出来,菜鸟求传授?现在的单片机都是加密的,不可能把里面的程序读出来。但是有各别的单片机可以破解,破解后可以读出来,你需要花钱的,在网上找专业单片机解密的。破解后,读出...
单片机 编写 程序 ?编写单片机程序需要熟悉单片机的指令集和编程语言,例如C、Assembly等。首先,确定程序的功能和需求,然后按照流程图或伪代码编写程序逻辑。接着,将程序转换...
单片机 和 单片机 的区别?没啥区别。stc单片机很多就是51单片机。只是功能比51的强大些。如有的STC单片机有自带ad等等。基本上,MCS-51单片机都可以通用。另外就是STC单片机可以通过串...