在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空间是可先的。
文章评论(0条评论)
登录后参与讨论