[ZLG-ARM] #define VECTOR_RAM ((unsigned char *)0x40000000)是什么意思?

[复制链接]
4144|7
 楼主| zjb800zjb 发表于 2007-1-28 22:31 | 显示全部楼层 |阅读模式
本人初学,有问题想问!<br />程序在《ARM嵌入式系统实验教程一》的P99,程序开头先写了<br />#define&nbsp;VECTOR_RAM&nbsp;((unsigned&nbsp;char&nbsp;*)0x40000000)<br />然后后面用到 <br />uint8&nbsp;*addr;<br />addr=VECTOR_RAM;<br /><br />我知道uint8&nbsp;*addr这句定义了一个指针addr,但是后面那句addr=VECTOR_RAM到底是令指针指向了0x40000000,还是指向了0x40000000中的内容所指向的存储空间?<br />谢谢!!!<br />
 楼主| zjb800zjb 发表于 2007-1-28 22:37 | 显示全部楼层

我又想了一下

我又想了一下,(unsigned&nbsp;char&nbsp;*)0x40000000是不是把0x40000000转换成了一个指针?那么这个指针是指向什么?而且0x40000000是32位(二进制),unsigned&nbsp;char是8位的啊。我把源程序发给大家看:<br />是《ARM嵌入式系统实验教程一》的P99的一个用于存储器重映射实验的程序<br />#include&nbsp;&quot;config.h&quot;<br />#define&nbsp;VECTOR_RAM&nbsp;((unsigned&nbsp;char&nbsp;*)&nbsp;0x40000000)<br /><br />int&nbsp;main(void)<br />{<br />&nbsp;uint8&nbsp;i;<br />&nbsp;uint8&nbsp;*addr;<br />&nbsp;<br />&nbsp;MEMMAP=0x02;<br />&nbsp;addr=VECTOR_RAM;<br />&nbsp;for(i=0;i&lt64;i++)<br />&nbsp;{<br />&nbsp;&nbsp;*addr=0x55;<br />&nbsp;&nbsp;addr++;<br />&nbsp;}<br />&nbsp;addr=VECTOR_RAM;<br />&nbsp;for(i=0;i&lt64;i++)<br />&nbsp;{<br />&nbsp;&nbsp;*addr=0xAA;<br />&nbsp;&nbsp;addr++;<br />&nbsp;}<br />&nbsp;MEMMAP=0x00;<br />&nbsp;while(1);<br />&nbsp;return(0);<br />}
 楼主| zjb800zjb 发表于 2007-1-28 22:41 | 显示全部楼层

是不是这样的

(unsigned&nbsp;char&nbsp;*)0x40000000就是制造出了一个指向地址为0x40000000的存储空间(0x40000000~0x4000003F是片内RAM)的指针?是这样的吗?
zlgARM 发表于 2007-1-29 08:24 | 显示全部楼层

RE

那个语句说明了某内存地址对应的内存单元用来存放无符号字节类型数据。<br /><br />简单地说,就是规定了某内存单元用来放什么数据,该内存单元用它的地址来指代。
db10 发表于 2007-1-29 21:32 | 显示全部楼层

这个是学C最基本的东西了

  
 楼主| zjb800zjb 发表于 2007-1-30 00:11 | 显示全部楼层

谢谢!

以前没见过这样的句子。。。这回记住啦。我加到自己的笔记里去。谢谢回复的朋友
hnmajl 发表于 2007-1-31 22:55 | 显示全部楼层

看我的理解,C语言我也没学过,是否正确?也正学习

&nbsp;/*****************************************************<br />文件名:&nbsp;REMAP.c<br />功能:&nbsp;&nbsp;&nbsp;将存储器重新映射到片内RAM(0x40000000~0x40000003F),然后更改0x40000000~0x4000003F的内容.<br />说明:&nbsp;&nbsp;&nbsp;观察&nbsp;0x40000000~0x40000003F地址上的数据有何变化.<br />***************************************************************/<br />#include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;config.h&quot;<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VECTOR_RAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unsigned&nbsp;char&nbsp;*)0x40000000&nbsp;&nbsp;&nbsp;//定义一个无符号字符型常量指针(地址)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//重点理解如下:因为不能将一个整型量或任何其它非地址类型的数据赋值给<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//一个指针变量或常量,故用&quot;unsigned&nbsp;char(无符号字符型,其实质也是整数数据)&quot;定义,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//为了说明该字符型变量(常量)为指针(地址)用*定义,同&nbsp;int&nbsp;*ip,该语句意思为定义<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//一个指针变量,同样(unsigned&nbsp;char&nbsp;*)0x40000000为一个无符号型常量指针(地址),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用&quot;*&quot;来说明该常量为一个指针(地址)型,<br />/*****************************************************************<br />**名称:main()<br />**功能:存储器映射<br />******************************************************************/<br /><br />int&nbsp;&nbsp;&nbsp;&nbsp;main(void)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;定义一个变量<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;&nbsp;&nbsp;*addr&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定义指针类型变量addr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MEMMAP&nbsp;=0X02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中断向量从静态RAM重映射(用户RAM模式)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr=VECTOR_RAM;&nbsp;&nbsp;&nbsp;&nbsp;//为指针变量赋初值,指向地址为0X40000000.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;*addr=0x55;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//为指针变量此时所指向的地址处赋值,该值为该地址处的内容&nbsp;.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//指针(地址)加一.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr=VECTOR_RAM;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;*addr=0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MEMMAP&nbsp;=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中断向量从Boot&nbsp;Block&nbsp;重映射(Boot装载程序模式)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(0);<br />}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
hnmajl 发表于 2007-1-31 22:57 | 显示全部楼层

db10讲的对,我们基本功不行,我用了一天的时间理解

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部