整理了下当时学习单片机不明白的概念,自己总结和百度整理来的,所以有可能会有不当之处,希望大家见谅
硬件篇
MCU:微控制器,就是指单片机这类,控制是mpu最根本的区别
MPU:微处理器,就是cpu这一类,用于处理数据和运算;当然单片机也有处理和运算能力,但是在能力上弱了很多,更大的区别是相比单片机体系不是那么完整,他更像是单片机的一个内核,缺少相应的ROM RAM之类,这些都要外扩
SOC:和mpu和接近 但是他在内核的基础上集成了些外设,比如说S3C2440他在上面集成了USB接口TFT控制器等,ARM9等嵌入式芯片就是这类。
寄存器:这是初识单片机最常听见的词汇,其实他就是可以保持数据同时又能输入新的状态数据,51的很多寄存器就是从RAM中划分出来的一些单元,对他进行数值的设置可以得到不同的反应;单片机中通过对寄存器设置来得到所需要的功能。
RAM,ROM:ROM程序存储器,RAM临时数据存储器,程序是下载到ROM内,再有cpu读取到RAM,运算的过程当中的中间数据也是保存在RAM中,RAM的大小会对运算速度有很大的影响,类似于电脑内存,如果内存条过小的话cpu就必须在内存数据满了的时候去读取新的数据到里面,很大程度降低了速度。
API函数:提供了对硬件或者是操作系统进行访问的一些接口,其实就是一些对对象操作或反馈状态对象当前工作状态的函数和变量之类的东西。
晶振:类似于人类的心脏,他给单片机提供着一个有规律的周期,如同心脏间歇性的跳动推动血液的流动。他的频率快慢决定了时钟周期,和机械周期。
时钟周期:一个时钟脉冲所需要的时间。在计算机组成原理中又叫T周期或节拍脉冲。是CPU和其他单片机的基本时间单位。
机器周期:通常用从内存中读取一个指令字的最短时间来规定CPU周期(机器周期),也即CPU完成一个基本操作所需的时间。
指令周期:指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。
推挽、开漏、强上拉、弱上拉、强下拉、弱下拉输出:这些都是单片机I\O口的工作模式,不同的外设对应不同的工作模式,比如不用驱动芯片驱动点阵的话就必须把io口设置成推挽模式,而对于无线芯片不加上拉电阻的话就要选择上拉或者是推挽,一般模式的话无线芯片不能正常工作,而开漏好像是用与io口作为输入口,因为去阻值会很大所以通过他的电流会很小,功率损失也可以很好地控制
串口:串行接口SerialInterface是指数据一位位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信
并口:并行接口中各位数据都是并行传送的,它通常是以字节(8位)或(16位)为单位进行数据传输。
控制器和驱动器:驱动器顾名思义就是驱动硬件工作的电路,而控制器是控制其如何工作,就比如S3C2440内部集成了TFT控制器,但是光控制器无法让TFT工作的,在TFT上有驱动他工作的电路,拆过舵机的就知道里面就是个普通的直流电机和块电路板,那电路板就是驱动器,而让舵机工作则需要单片机输出PWM(相当于控制器)
字节(Byte):字节是指一小组相邻的二进制数码。通常是8位作为一个字节。字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。网络上的所有信息都是以“位”(bit)为单位传递的,一个位就代表一个0或1,每8个位(bit)组成一个字节(Byte)。
算法:算法以我的理解就是完成某项工作或者是某项运算所采用的处理方式,比如搬运物品的话可以采用手搬,或者是小推车推运,同一问题算法多种多样,效率也不敬相同;
驱动:驱动是在操作系统与硬件之间搭建桥梁,使硬件正常工作的一种软件程序。如果广泛的认为就是让硬件发挥作用正常工作的程序的话,那单片机流水灯之类的也都是驱动程序。
时序电路:实施一连串逻辑操作,在任一给定瞬时的输出值取决于其输入值和在该瞬时的内部状态,且其内部状态又取决于紧邻着的前一个输入值和前一个内部状态的器件。
组合电路:组合逻辑电路由最基本的的逻辑门电路组合而成,输出值只与当时的输入值有关,即输出惟一地由当时的输入值决定。
软件
于51开始学习单片机的人的话最早书写的应该就是#include<reg52.h>
#include就是文件包含命令,51用到的头文件很少,而且很多都是系统定义的,当你学习ARM就会发现要有很多的头文件,而且很多都是自己定义的,这个时候我们必须知道文件的路径,把他添加到调用它的c文件当中,如果找不到这个文件就会报错,添加的方法有两种,一种是在编译器中设置(不是所以编译器有效),还有是在包含命令中加入路径(详解请看#include的使用)。而reg51.h这个文件里面把各个寄存器和可以位操作的寄存器的各位定义一下。所以单片机芯片要操作都要对寄存器进行定义,s3c2440也有自己的寄存器定义文件2440addr.h,不过S3c2440同51单片机不同的是要包含启动代码,初始化s3c2440。否则2440无法工作
++a与a++的区别在于前一个是自加1之后参与运算,而另一个是参与运算之后加1,也就是说a++的话,在那一行代码中,a的值是不变的,下一行才发生变化,++a则是在那一行已经发生了变化。
刚从8 bit单片机玩32 bit会很不不习惯,原因是操作方式变化了,之前的51单片机的话改变寄存器直接位操作或者是寄存器操作赋值就好了,但是32位处理器就不同了,因为位有32位那么多,不可能清楚每一位应该操作的数值,直接赋值务必造成误操作。
X bit置1:(寄存器标示符)=(寄存器标示符)||(1<<X)或者是(寄存器标示符)II=(1<<X) 后一种其实是前一种的简化写法 (1向左移动X位,再同寄存器进行或运算之后赋值给原来的寄存器)
X bit置0:(寄存器标示符)=(寄存器标示符)&& ~(1<<X)或者是 (寄存器标示符)&&=~(1<<X) 后一种也是前一种的简化写法(1向左移动X位之后取反同寄存器进行与操作)
指针在c中是个很重要的部分,其实也不要把它看得太难,他其实就是一个存取地址数据的一个量,可以通过*号读写他地址当中的内容,也可以通过&给他取新的地址,在没有对指针取地址的情况下不要对地址里的内容进行操作,因为没有取地址的情况下指针所指的地址是随机的,在草率操作的情况下可能会破坏之前的数据导致出错。指针最常见的就是对数组进行操作了,当指针指向的是一维数组的时候指针变量每次自加1之后就指向都是原来数的下一个(需要注意的是指针如果指向的是数组的最后一位的时候再加1的话他不会又跑到第一位,而是未知的数据,这时候需要做的是重新取地址),对数组操作的方法除了不断自加1的方法还有*(p+5),*p表示指向的数组的那位,*(p+5)表示在*P的基础上移动5个数。二维也类似,可以通过自加操作,和*(*(p+x)+y)的方式操作,指针除了在数组上用还可以当函数的参数啊,指向函数啊,详细还是看谭浩强的c经典教程 哈哈
……O……