原创 内存与IO访问

2011-5-24 11:37 2696 5 5 分类: MCU/ 嵌入式

CPU与内存IO

内存空间与IO空间

 在x86处理器中还存在着I/O空间的概念,I/O空间是相对内存空间而言的,它通过特定的指令in,out来访问。

IN 累加器,{端口号|DX }

OUT {端口号|DX},累加器

大多数嵌入式微控制器并不提供I/O空间,而公有存在内存空间。内存空间可以直接通过地址、指针来访问,程序和程序运行中使用的变量和其他数据都存在于内存空间中。

unsigned char *p = (unsigned char *))0xF000FF00

*p = 10;

在绝对地地址0xF000+oxFF00写入10.

typed void(* lpFunction)(); /*定义一个无参数、无返回类型的函数指针类型*/

lpFunction lpReset = (ipFunction)0xF000FF00;/*定义一个函数指针,指向CPU启动后执行第一条指令的位置*/

lpReset();/*调用函数*/

以上程序中,没有定义任何一个函数实体,但是在程序中却执行lpReset()调用,实际上起到软重启的作用,跳转到CPU启动后第一条指令的位置。因此可以通过函数指针调用一个没有函数实体的函数,本质上是换一个地址开始执行。

内存空间是必须,而I/O空间是可先的。


内存管理单元MMU

MMU单元辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射、内存权限保护和Cache缓存控制等硬件支持。操作系统内核借助MMU,可以让用户感觉到好像程序可以使用非常大的内存空间,从而使编程人员不用考虑物理内存的实际容量。
  • TLB:Translation Lookaside Buffer,,旁路缓存,TLB中MMU的核心部件,它缓存少量的虚拟地址与物理地址的转换关系,是转换表的Cache,也被称为"快表"。
  • TTW:Translation Table walk,转换表漫游,当TLB中没有缓冲对应的地址转换关系时,需要对内存中的转换表的访问来获得虚拟地址与物理地址的对应关系。TTW成功后,结果应写入TLB。

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条