当前位置:首页 > 创业杂谈 > 正文内容

arm嵌入式系统开发

admin2022-11-25 09:40:41创业杂谈370
  

  00-1010嵌入式软件开发是一个软硬件结合非常紧密的专业,门槛高,知识点多(软硬件都要学),汇编,C语言,编译,计算机硬件,操作系统原理,数字电路,驱动等等。   

  

  学习过程中最难的部分是操作系统和处理器的关系。无论是现在流行的linux操作系统,还是ARM微处理器,都有成千上万的源代码和数据手册,过于庞大,在学习的时候很容易迷失在这个“大森林”里,也很容易望而生畏,导致失去兴趣。关于这一点,很多初学者或者将单片机转换成linux的开发者应该深有体会。很多读者可能一学linux内核就从_strart_kernel_ function开始。越是细节展开,他们需要找出的知识点就越多。最后,他们不知道去哪里学习。我也深有感触,学习嵌入式相关和操作系统一定要有一个整体的了解,然后再深入细节。所以想写一些相关的技术文章,一个是总结回顾自己过去的知识,一个是帮助正在学习的嵌入式朋友。   

  

  序为了让读者有更好的学习体验,帮助读者理解操作系统的一些基本概念和实现原理,专门为ARM处理器设计了一个最小化、简单化的操作系统Open OS。在介绍ARM Open OS之前,本文先介绍一些基本概念,为后续的OS编写打下基础。   

  

  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的寄存器中进行。ARM Open OS ARM处理器使用流水线来提高处理器指令执行的速度,无论是3级流水线、5级流水线还是13级流水线。无论指令流水线有多复杂,都包括以下三个执行阶段。   

  

  图3示出了提取解码执行的3阶段流水线。   

g.call(this);">

图3 指令流水线

这里需要重点指出的是:程序计数器(PC)指向被取的指令,而不是指向正在执行的指令。也就是说:PC=当前指令的执行地址+8。这个是ARM所有流水线的结构特征。

CPU正常的操作过程中,在执行一条指令的同时,对下一条指令进行译码,并将第三条指令从存储器中取出。

说明:PC的值非常重要,在异常切换时常常需要通过PC来计算返回地址。

ARM处理器有两种操作状态:

ARM状态和Thumb状态,这两种状态的PC值计算存在区别,后续我们都是围绕ARM状态来学习。

ARM汇编语言基础

本节仅描述gcc内联汇编的基本语法,具体的ARM指令读者可参考其他相关的资料。

GCC内联汇编的一般格式:

asm volatile(

汇编语句

: 输出运算符列表

: 输入运算符列表

: 被更改资源列表

);

volatile:可选

举例:

int main(void){

unsigned int sp=0,ip=0;

asm volatile(

"mov sp,%0\n\t"

"mov pc,%1\n\t"

:

:"r" (sp),"r" (ip)

);

return 0;

}

上面的代码中第一条mov指令,该指令将%0赋值给sp。这里符号%0代表出现在输入运算符列表和输出运算符列表中的第一个值。%1代表出现在列表中的第二个值,依此类推。所以,在该段代码中,%0代表的就是“r”(sp)这个表达式的值了。

“r”(sp)这个表达式中,sp代表的正是C语言向内联汇编输入的变量,操作符“r”则代表sp的值会通过某一个寄存器来传递。在GCC中与之相类似的操作符还包括“m”、“I”,等等,其含义见下表:

表:内联汇编操作符

多任务机制

Windows任务管理器

现实生活中使用电脑,我们能够做到可以一边视频网站看视频,同时一边可以通过社交软件和网友聊天,是因为windows操作系统支持多任务机制。在windows的任务管理器下可以看到多个任务的列表。

图4 windows任务管理器

那么如何简单的理解多任务机制呢?

假设你是雇主,家里只有一个保姆(CPU),那么保姆上班时间干些什么将由你来决定。现在需要给保姆安排两个任务:客厅打扫卫生和厨房洗菜。可按照下图5来安排。

图5 多任务机制演示

在图5中,首先将保姆的上班时间(假设是8个小时)分成等长小段时间,然后按照时间长度轮流执行安排的两个任务(打扫卫生和洗菜)。只要这个保姆做事的速度足够快,切换时间足够短,你会感觉到这名保姆同时在客厅和厨房里干活。这就是宏观上的并行执行,也就是多任务的运行机制。

在T4时刻,两项任务都已经完成了,那么保姆没事可干了,就处于空闲状态,保姆等待雇主重新安排任务。

假设现在需要给这名保姆安排三个任务:客厅打扫卫生和厨房洗菜、洗衣服。多任务机制演示如图6所示。


图6 三任务演示机制

任务上下文

什么是任务上下文?

简单的理解了多任务机制之后,再来看一个关键的概念:任务上下文。

要理解任务上下文,首先就要理解什么是任务?按照上面的例子,任务就是保姆现在正在做的事情(例如正在客厅打扫卫生),是一个动态的概念。

那么任务上下文就是保姆在客厅打扫卫生过程中某一时刻的状态,这个状态就是卫生打扫到那个具体位置数据(例如客厅拖地拖到了一半的位置)。有了这个具体位置的数据,雇主可以随时的打断保姆的客厅任务执行或者安排新的任务。当保姆再次执行客厅打扫任务时,只要按照上次的打扫位置记录继续执行就可以了。

延伸

任务和进程的关系? 其实某种程序进程就是任务,任务就是进程。进程就是进行中的程序。

linux的进程描述符(task命名)task_struct{... ...}

处理器的角度

前文提到了一个非常重要的一点:寄存器的值代表了当前时刻CPU的行为

任务可以看作是用户程序在处理器上的运行,是一个动态的概念。任务上下文可以理解为CPU的“寄存器数据的快照”。任务上下文是和CPU密切相关的概念,不同的处理器有不同的处理器上下文定义。

比如在ARM处理器中,设计多任务操作系统时,会把大部分的硬件寄存器作为任务上下文的内容。ARM处理器的寄存器程序员视图如图7所示。

图7 ARM寄存器程序员视图

寄存器的具体含义这里就不介绍了,感兴趣的读者可查阅相关的资料。

任务切换

有了任务和任务上下文的概念,那么任务切换就很好理解了,任务切换其实就是上下文切换。

任务切换的过程

还是以上文保姆的例子来讲,假设保姆在执行“客厅打扫卫生”的T1时刻,保姆停止任务执行,同时将当前任务的上下文(也就是客厅打扫卫生的具体位置数据记录并保存下来),然后保姆进入厨房查看任务“厨房洗菜”的上下文(菜洗到哪里数据),根据“厨房洗菜”的上下文的内容继续执行“厨房洗菜”任务。这个过程就叫任务切换。

ARM处理器的角度来看下任务切换的具体过程:

从上文我们知道任务的上下文其实就是寄存器的数据快照。那么ARM处理器中比较重要的寄存器是PC和SP。PC是当前任务运行的具体位置,SP寄存器表示的栈的指针,当然还有一些其他的重要寄存器,这里不一一列出。

任务A和任务B的切换

假设系统中有两个任务A和B;当前的处理器正在运行A任务,那么此时任务A的上下文情况如图8所示:

图8 任务A运行时的上下文

这时发生任务切换,那么首先做的就是保存当前任务A的上下文(寄存器数据快照),将CPU的寄存器内容保存到任务A的栈中,这时任务A的运行情况如图9所示:

图9 任务A的上下文保存

任务A的上下文保存完成之后,接下来要做的就是将任务B的上下文内容恢复到ARM处理的寄存器中(退栈操作),图10所示。

图10 任务B的上下文恢复

最后,退栈完成后,ARM CPU开始执行任务B,此时CPU的运行情况入图11所示。

图11 任务B的上下文情况

最后

到了这一步,相信读者已经对多任务操作系统有了一个基本的理解了,那么下一步如何编程去实现呢?

下一步计划:编写汇编代码,使用qemu模拟ARM处理器来实现最简单的OS。敬请期待!

关于操作系统的一些概念的描述,本文描述的不可能尽善尽美,但是基本已经做到了通俗易懂。如有错误或者不妥之处,敬请广大读者批评指正。

参考文献:

ARM System Developer's Guide

ARM汇编程序分析与设计

Ucos操作系统分析

版权声明:本站部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们,如若转载,请注明出处:

本文链接:http://www.hongtuda.net/post/7197.html

标签: "

相关文章

有房产证可以贷款吗

有房产证可以贷款吗

     一、安置房:         回迁房是旧改项目拆迁补偿时开发商支付给拆迁户的房子;商品房是开发商自己卖的房子。深圳每个楼盘基本都有回迁房。一般建的不好的回迁房价格可能会比商品房低。回...

开加工厂创业计划书

开加工厂创业计划书

     隆冬时节,在江西省贵溪市城区唐红镇贾玲村外的田丽果蔬基地,标准大棚在阳光下一字排开,大棚里一排排的白菜、萝卜、香菜长势良好。三年前,温州种菜的村民吴柏峰被请了回来。在村委会的帮助下,他流转...

创业机会和创业风险的案例,把握创业机会的创业成功的案例

创业机会和创业风险的案例,把握创业机会的创业成功的案例

              来源:图宠创意         点击标题查看文档         00-1010文档可以带给你以下内容:         什么是商业模式:它描述了...

创业之星第一步该做什么,创业之星4.0(学生)攻略

创业之星第一步该做什么,创业之星4.0(学生)攻略

              这些项目主要涵盖餐饮、生活服务、零售等。其中不乏流行的创意咖啡、西点、花艺等。   transparent;min-height: 1em;color: rgb(...

创业当中遇到的法律,创业一般需要走哪些法律程序

创业当中遇到的法律,创业一般需要走哪些法律程序

              #本文由作者授权发布,不代表IPRdaily立场,未经作者许可,禁止转载#         来源:IPRdaily中文网(iprdaily.cn)   ...

创业背景模板

创业背景模板

              福建省人力资源和社会保障厅         2022年2月14日         -End-         ...