嵌入式系统入门及一些逻辑解析

时间:2021-08-14 11:52:34

 很多人刚开始进入嵌入式领域,会认为嵌入式系统仅仅属于某门技术或者某门学科。其实嵌入式系统是一个整体的计算器系统,其组成类似于PC机,他们都包含CPU、总线、内存、外设。区别在于前者为专用,后者为通用软硬件系统。这两者是并列的存在,只是处理能力和具体软硬件不同。    

    正因为嵌入式系统是个整体软硬件体系所以入门有一定难度,初学者(我现在依然是)容易困在其中,很多东西绕不清,更要命的是可能连自己哪里不懂都不知道。而市面上的嵌入式书籍大多写的浅而全,无法带领初学者入门。

    先说一下SOC(System on chip),人们常混淆嵌入式系统中的处理器和PC机的*处理器,即CPU和SOC。SOC是包含CPU、总线、内存、一些外设在内的一个整体系统,单片机也属于SOC,CPU是SOC的一部分。拆过PC机,看过PC机内部CPU的同学会发现PC机的CPU比很多嵌入式板子中的SOC芯片还大。那是因为面向通用机的CPU需要有很强的计算能力,它的晶体管集成度更高,它没有把一些外设和CPU集成在一个芯片中。SOC中的CPU核主要功能是控制外设,计算能力相对薄弱。CPU是一个系统的核心,目前世界被划分为通用PC机和专用嵌入式系统两个部分。PC机的CPU以Intel、AMD为主导。嵌入式世界ARM公司一家独大。

    针对嵌入式的构成,可以把现在大多数企业的工作方向分成三个部分:1、利用某些公司的SOC搭建特定需求的系统。2、利用ARM公司的CPU核,设计SOC架构设计自己的芯片。3、研究CPU架构,设计CPU核。这里1、2、3难度逐级上升,因此从事的公司和人员数量逐级下降。对于ARM,嵌入式系统行业的人对此应该不陌生,现在市面上的嵌入式产品如手机在内,它们的处理器大多是基于ARM核设计的SOC。

    CPU的功能通常包括:取指、译码、执行。一般我们在IDE(集成开发环境)中编写C代码,然后根据CPU核使用指令集的不同,编译C代码为汇编代码(生成.s文件,这部分工作由IDE完成),汇编代码进一步汇编成二进制机器码(生成.o目标文件),最后再将多个目标文件链接到一起(生成可执行文件)。这里的编译、汇编、链接在IDE中合成一步也叫编译。只是这里大多数的工作由IDE自动完成。把生成的二进制可执行文件烧到存储器中,上电后CPU一般直接从零地址的处开始取出指令,翻译,然后执行即控制外设实现特定的功能。

    初学者非常容易对ARM体系架构和ARM处理器的名称造成混淆,因为它们的前缀都是ARM。体系架构指的是CPU核使用的指令集的版本,而指令集就是软硬件的桥梁。ARM体系架构(指令集版本)如下:ARMv4、ARMv4、ARMv5、ARMv6、ARMv7。ARM处理器系列(即搭配了一些不同的组件)ARM7、ARM9、ARM10、ARM11、Cortex系类:Cortex-M,Cortex-R、Cortex-A。ARM7属于ARMv4架构,Cortex系列属于ARMv7架构。不同的后缀代表附加了不同的功能如:

    T Thumb16位译码器

    D JTAG调试器

    M 快速乘法器

    I 嵌入式跟踪宏单元

    E 增强指令

    J Java加速器

    F 向量浮点单元

    S 可综合版本

    电子行业芯片的命名包括代码中变量和函数的命名都存在一定的规则和意义。很多时候理解它们的意义对我们理解这些产品很有帮助。比如STM32F103C8T6,ST:意法半导体公司;M32:ARM的Cortex-M内核,32位微控制器;F:通用产品;103:增强型;C:48引脚;8:2^8=64KFlash;T:LQFP封装;6:工业级温度范围-40~85