因为最近一段时间可能会带学生做一些关于嵌入式的开发,所以总结了一些关于嵌入式学习要注意的事项,这里与大家分享一下。
说到嵌入式,我只能说概念太大了,我们不说网上查到的或者是书籍中的描述,先谈谈我自己这么多年对嵌入式的理解吧。
在我看来,嵌入式开发需要一个开发人员具有软硬件的整体设计、编程、调试能力。
而这样的开发人员需要兼备的一些基本能力:
- 硬件知识阅读能力:包括电路原理图理解,芯片手册的阅读能力,芯片时序图的理解等。
- 核心编码语言:C语言,这个是没法越过的坎。
- 一门必要的面向对象语言:例如C++,当然Java、python、C#等也不是不可以。
- 电子硬件的测试流程及其方法。
- 一定基本的焊接技术。
一个软硬件能力兼备的开发人员,对于任何一个企业来说都是很珍贵的,他可以主导一个项目的研发,甚至独立完成一个简单项目。但目前如果企业想从国内院校中寻找这样的人才是不太容易的,体制下的教育很难出现这类能力者。所以往往需要时间来磨炼。
让我们具体看看这几个能力需要掌握哪样的知识吧。
硬件知识阅读能力
1、电路原理图
最低程度,我们不需要知道电子的结构原理,但是我们需要知道每个管脚代表的含义,能做一些基本的硬件连接。


2、芯片手册
大部分芯片手册都是英文,从目前的国际局势来看,起码短时间内,我们在研究新技术的时候,一些技术文档还是以英文为主,所以这里需要我们看懂这类的文档。


其实文档看懂了,嵌入芯片内的代码写起来很容易,只需要根据文档中的定义,来写代码。例如下列代码:
#define SO_IN PB0_IN
#define SOin PB0in //IO状态读取数据线
#define CLK_OUT PB1_OUT
#define CLK_H PB1=1
#define CLK_L PB1=0 //IO状态读取时钟线
#define PL_OUT PB2_OUT
#define PL_H PB2=1
#define PL_L PB2=0 //IO状态读取功能使能线
#define DS_OUT PB3_OUT
#define DS_IN PB3_IN
#define DS_H PB3=1
#define DS_L PB3=0
#define DSin PB3in //IO状态输出数据线
#define SH_OUT PB4_OUT
#define SH_H PB4=1
#define SH_L PB4=0 //IO状态输出数据移位时钟线
#define ST_OUT PB5_OUT
#define ST_IN PB5_IN
#define ST_H PB5=1
#define ST_L PB5=0
#define STin PB5in //IO状态输出数据锁存时钟线
#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int
u32 EXTGPIOSTATE; //扩展IO状态缓存
void EXTGPIO_SEND(u32 exdata)
{
u8 i;
DS_OUT;//DS配置为输出状态
SH_OUT;//SH配置为输出状态
ST_OUT;//ST配置为输出状态
EXTGPIOSTATE=exdata;//保存IO口状态
for(i=0;i<32;i++)
{
if((exdata<<i)&0x80000000) DS_H;
else DS_L;
SH_L;
SH_H; //上升沿,bit数据移位进入移位寄存器
}
ST_L;
ST_H; //上升沿,移位寄存器数据进入数据寄存器
DS_H; //拉高数据线
}
3、芯片时序图
我们以LCD1602为例,这是一个小型lcd显示屏。

读懂原理图,读懂接口的含义

对应的芯片手册中也是有关于如何操作的说明,如:
① 当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
② 当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
发现了么,写指令和写数据,差别仅仅在于RS的电平不一样而已。以下是LCD1602的时序图:

时序图的目的是给那些晦涩的文字一个更容易理解的形式。
核心编码语言
C语言,一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。
很多简单的芯片设备都会嵌入一些C语言实现的可执行程序,同时我们的操作系统开发和设计也都会使用C语言,不管是老牌的window、linux,还是新贵android、mac,甚至萌芽期的华为"鸿蒙",基本都离不开c语言,所以院校以c语言作为理工类专业的第一门语言还是也很有道理的,目的就是为了让大家有一个基本的认识。
一门必要的面向对象语言
- C++:传统的软件客户端设计语言,非常强大,但同时也非常难学透,网络的学习资源基本都是在一种肤浅的程度,不是没人共享,而且这个才是真正都要赚钱的,没人能拿这些项目去做开源。嵌入式同样需要一个人机的交互界面,而C++是大多数通用PC平台设计软件界面使用的语言。
- Java:最初的设计是为了针对机顶盒的开发,同样这是一种为了嵌入式而生的语言,只不过后来互联网引领了B/S的架构的实现,给Java带来了新生。但如果你是做android,同样需要使用Java的方式调用底层的驱动,控制硬件。
其他的编程语言道理一样,这里就不去具体说明了。
电子硬件的测试流程及其方法
这块是比较偏向硬件的知识,一般是院校中电子类专业需要掌握的基本技能。
当然,这里还要包含一些工具的使用,如万用表、示波器、频谱仪等。
除此之外,例如:
1)数字信号区与逻辑信号区的分离,测试。
2)芯片的检测。
3)电路中的电流和电压测试
4)电路虚焊的确认
这类的信息还是较多的,至于流程我们可以看做一条河流需要进行水质检测,每一段都需要设置检测点,这同我们的电路板测试是十分类似的。
一定基本的焊接技术
这其实不是必要的能力,当如果会,可以给我们的底层硬件开发提高很大的效率,毕竟我们不可能因为一个不确定的想法就单独找,硬件焊接人员给我们反复焊接电路,这种于人于己都是很麻烦的。所以有些小问题我们完全可以自己独立地搭一个简单的电路进行尝试。
网友评论