00-1010嵌入式软件开发是一个软硬件结合非常紧密的专业,门槛高,知识点多(软硬件都要学),汇编,C语言,编译,计算机硬件,操作系统原理,数字电路,驱动等等。
学习过程中最难的部分是操作系统和处理器的关系。无论是现在流行的linux操作系统,还是ARM微处理器,都有成千上万的源代码和数据手册,过于庞大,在学习的时候很容易迷失在这个“大森林”里,也很容易望而生畏,导致失去兴趣。关于这一点,很多初学者或者将单片机转换成linux的开发者应该深有体会。很多读者可能一学linux内核就从_strart_kernel_ function开始。越是细节展开,他们需要找出的知识点就越多。最后,他们不知道去哪里学习。我也深有感触,学习嵌入式相关和操作系统一定要有一个整体的了解,然后再深入细节。所以想写一些相关的技术文章,一个是总结回顾自己过去的知识,一个是帮助正在学习的嵌入式朋友。
00-1010计算机的通用模型
在嵌入式编程之前,我们首先要清楚地了解处理器的大致型号,这需要从程序员编程的角度去理解。通用处理器模型(存储程序计算机)如图1所示:
图1存储程序计算机模型
中央处理器(CPU),或俗称CPU,通过寄存器运行程序和处理数据。不同处理器包含的寄存器的数量和名称都不一样,但是CPU的寄存器的作用基本相同,所以CPU寄存器的值基本决定了CPU的行为。比如CPU内部有一个寄存器PC程序计数器,PC寄存器的值决定程序的方向(CPU根据PC寄存器的值取指令,程序状态寄存器决定指令的相关跳转等等。).
上述可以得出一个很重要的结论,相关寄存器的值代表了当前时刻CPU的行为。
ARM处理器型号
ARM处理器内核如图2所示。箭头代表数据流方向,上下两边的直线代表总线。
图2 ARM内核结构
有两条总线,数据和地址。数据通过数据总线进入寄存器(这里的数据包含指令和数据)。和数据命令共享数据总线(Von。Yun-Iman结构)。对于内存访问,只有加载、存储和交换指令可以访问内存中的数据。Load指令将数据从内存复制到CPU寄存器。存储指令将数据从CPU寄存器复制到内存。没有直接操作存储器中数据的指令,数据处理只能在CPU的寄存器中进行。
图3示出了提取解码执行的3阶段流水线。
g.call(this);">图3 指令流水线