如何在STM32 C代码中把全局数组指定内存地址

[复制链接]
8892|5
 楼主| leino11121 发表于 2009-3-20 16:15 | 显示全部楼层 |阅读模式
<br /><br />如题,定义一个全局数组,数组首地址固定在某一个地址(例如0x20000200)&nbsp;<br />&nbsp;<br />
 楼主| leino11121 发表于 2009-3-20 16:18 | 显示全部楼层

我用的编译器是keil

用指针并不能保证地址后的一段内存不被用到,最好能使用数组分出一段内存专用
jxb163 发表于 2009-3-20 17:39 | 显示全部楼层

*(unisgned char *)0x20000200=全局变量;

volaitle&nbsp;*(unisgned&nbsp;char&nbsp;*)0x20000200=全局变量
 楼主| leino11121 发表于 2009-3-23 09:19 | 显示全部楼层

回三楼,

回三楼,<br />你说的是全局变量,数组跟单个变量不同,单个变量可以用上面的方式,更安全的方式是用指针来做,<br />(volatile&nbsp;unsigned&nbsp;short)&nbsp;*p&nbsp;=&nbsp;(volatile&nbsp;unsigned&nbsp;short)0x20000100;<br />这样可以直接引用p,也可引用地址<br /><br />但是数组呢?
 楼主| leino11121 发表于 2009-3-23 09:24 | 显示全部楼层

分散加载

昨天试了一上午,采用分散加载的方式可行。呵呵,曲线救国。<br />在.scat文件中单独开辟一段区域,<br />&nbsp;&nbsp;DATA_TEST&nbsp;0x20000010&nbsp;&nbsp;0x00000500<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;*(TEST_DATA)<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;DATA&nbsp;0x20000510&nbsp;&nbsp;0x00004C00<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,&nbsp;+ZI)<br />&nbsp;&nbsp;}<br />TEST_DATA在.c文件中定义<br />#pragma&nbsp;arm&nbsp;section&nbsp;rwdata&nbsp;=&nbsp;&quot;TEST_DATA&quot;<br />u16&nbsp;Test_Data[640]=<br />{0&nbsp;};<br />#pragma&nbsp;arm&nbsp;section<br />
huangxz 发表于 2012-4-19 16:18 | 显示全部楼层
学习了,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

47

帖子

0

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