【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

不管是什么样的嵌入式cpu,它必然有自己的访问地址空间。至于这个具体的访问空间是什么,那cpu就不知道了。它可以是ram,当然也可以是flash、uart、ide、i2c等。当然cpu不仅需要地址总线,它还需要数据总线和控制总线。这三个总线的目的都非常明确,控制总线主要是为了实现cpu对外设接口的控制,地址总线是为了实现地址的输出,数据总线则是为了实现数据内容的获取或者设置。所以,对于一般的嵌入式cpu来说,它的基本架构应该是这样的,

在x86的cpu上,很多对外设的操作是需要通过北桥或者通过南桥芯片完成的。而在嵌入式硬件中,我们就把经常使用到的接口芯片集成到了cpu里面。所以在嵌入式cpu功能上面,你除了看到cpu的字长、时钟、指令集、运算速率这些通常的数据之外,你还会看到很多的接口控制寄存器,比如说定时器寄存器,lcd寄存器,uart寄存器,i2c寄存器。这些都表明了此时的cpu完成的不仅仅是简单的计算功能,它还需要完成对外设接口的设置。通过对应的寄存器设置,我们就可以对外设的接口状态进行控制。

说了这么多,我们接下来要看看嵌入式系统在地址空间里面是怎么设计的啊?其实一个完整的嵌入式软件系统并不复杂。一般来说,一个完整的系统需要有boot、kernel、文件系统三部分。其中boot主要放在norflash里面,而kernel和文件系统是存放在nandflash里面。在系统上电之后,cpu会有一个初始地址,这个地址要么是0x00000001,或者是0xFFFF0000。通常这个地址会指向Norflash,下面开始执行的代码当然就是boot代码。因为Norflash的访问速度要比Ram速度慢很多,所以boot代码很快会把自己拷贝到Ram中,然后跳到Ram中继续运行。boot的功能比较简单,主要就是为了获取芯片参数,设置芯片属性,设置堆栈空间,加载操作系统内核等。在boot完成自己的功能之后,它会把系统内核加载到Ram中,然后jump到系统的运行首地址处运行。系统内核主要完成整个系统的初始化工作,比如说内存分配,信号量初始化,net初始化,驱动结构初始化等工作。在内核即将完成初始化的时候,它会进行最后一步操作,mount一个文件系统,加载文件系统的脚本数据,开启相关的系统进程,最后一步就是开启shell进程,接受用户的命令输入。至此,一个系统算是真正跑起来了。

前面,我们说过cpu需要数据总线、地址总线和控制总线才能与外设接口打交道。既然cpu是通过状态寄存器设置外设接口的状态的,那么cpu是如何通过地址总线与外界联系的呢?这里面就涉及到片选信号的问题。我们知道,一个32位的cpu有32条地址线和外界相连,那么也就是说如果没有其他的方法,它只能外设32个接口。那么有没有什么办法可以扩大外设接口呢?说到这里,你应该知道了,它就是解码器和片选信号了。比如说,现在有4个外设接口,我们可以怎么从地址总线中挑出两条线,00表示外设1,01表示外设2,10表示外设3,11表示外设4。这样有了解码器的帮助,我们就可以用两个地址线实现对4个外设接口的控制了。

有了cpu状态寄存器,我们可以设置当前外设接口的执行状态。如果是读命令,首先设置外设接口的状态模式为读状态,然后发送地址,此时片选信号选中的芯片就会处于使能状态,一会cpu就可以从数据总线上获得数据,存储在寄存器或者是内存当中;如果是写命令,那么cpu首先设置外设接口为写模式,然后在地址总线上输出地址,在收到芯片ready信号后,cpu再将数据从寄存器上传输到数据总线上,在等到外设芯片的ack信号后,整个数据的传输过程才算完成。我们看到,一个汇编指令的操作竟然涉及到这么多信号的操作,可见cpu的处理过程还是很复杂的。有的时候,中间还会涉及到信号完整性或者是时序的问题,那么这时候逻辑分析仪就可以派上用场了。

嵌入式操作系统内核原理和开发(地址空间)相关推荐

  1. 嵌入式操作系统内核原理和开发

    嵌入式操作系统内核原理和开发(开篇) 操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的windows系统已经开始运行了.如果问大家操作系统是什么?可能有的人会 ...

  2. 嵌入式操作系统内核原理和开发(总结篇)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 很多朋友都喜欢嵌入式操作系统的内容,但是如何实现和仿真这样一个系统一直是困扰我们的难题.现在郑 ...

  3. 嵌入式操作系统内核原理和开发(cpu的那些事)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] cpu是数字处理系统中的一个重要环节.在我看来,单片机.微处理器.dsp都可以称作是cpu,只 ...

  4. 嵌入式操作系统内核原理和开发(信号量)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 之前因为工作的原因,操作系统这块一直没有继续写下去.一方面是自己没有这方面的经历,另外一方面就 ...

  5. 嵌入式操作系统内核原理和开发(头文件调整)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 很长一段时间,我个人对头文件的功能了解得不是很明白.虽然在平时的开发中,对于头文件也没有犯过什 ...

  6. 嵌入式操作系统内核原理和开发(任务创建和堆栈溢出检查)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 虽然写操作系统的博客要比写普通的技术点要麻烦一些,但是心中还是挺开心的.一方面,通过几行代码就 ...

  7. 嵌入式操作系统内核原理和开发(基础)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在编写我们的操作系统之前,我们需要明确一些事情.比如说,这个系统的运行环境是什么?怎么编译?基 ...

  8. 嵌入式操作系统内核原理和开发(开篇)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的wi ...

  9. 嵌入式操作系统内核原理和开发(实时系统中的定时器)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 关于定时器的内容,其实我们之前也讨论过,也书写过相应的代码,但是表达得比较晦涩,效率也比较低. ...

最新文章

  1. SAP MM 事务代码MRKO触发的财务凭证不会出现在PO History里
  2. Linux视频选用的版本,Ubuntu 及衍生版本用户安装视频播放器 SMPlayer 14.3.0
  3. 面试题:SSH 和 SSM 两个框架的浅显的区别?
  4. log4j 源码解析_Log4j源码解析--框架流程+核心解析
  5. leetcode 1. 两数之和(map)
  6. 【POJ - 3126】Prime Path(bfs)
  7. java中飞飞检查异常_Springboot项目如何在controller层统一返回数据以及处理异常
  8. 湖南第一师范计算机科学与技,湖南第一师范学院2019年各省各专业录取分数线...
  9. 51NOD-1090-3个数和为0
  10. ajax 怎么添加,添加功能(Ajax版)
  11. oracle表空间查询6,oracle表空间查询
  12. 二分查找算法(Java版)
  13. 管理者要会讲的六十八个故事
  14. 学生管理系统实训报告
  15. 电磁场理论基础 01-17
  16. vue结合vue-amap调用高德地图行政区划分
  17. java流意外结束_SyntaxError:输入节点js的意外结束
  18. MATLAB图像变换四
  19. python爬取付费漫画_Python爬虫---爬取腾讯动漫全站漫画
  20. 核心骨干需要具备的能力

热门文章

  1. 【云计算的1024种玩法】10分钟轻松设置出 A+ 评分的 HTTP/2 网站
  2. android 获取手机信息工具类
  3. [收藏]实践参考:parted创建硬盘分区并创建LVM
  4. lucene3.0_IndexSearcher排序
  5. [USACO13DEC]牛奶调度Milk Scheduling
  6. 程序读取计算机设备管理器中各设备的状态(启用/禁用)?(转自大富翁)
  7. ubuntu 16.04 搭建无线共享热点(PC 无线直连Android移动终端 调试,监控屏幕)
  8. 轻量级过程改进项目启动
  9. swift-01-利用元组判断字符串出现次数
  10. NEUACM 2015年一月月赛