[ZLG-ARM] 请问下,我想指定一个地址给一个全局数组,该怎么写?

[复制链接]
 楼主| liuyu305 发表于 2008-3-12 14:36 | 显示全部楼层 |阅读模式
&nbsp;SelSector(8,8);&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;选择扇区8<br />&nbsp;RamToFlash((0x00008000+flag[3]*256),(uint32)dd,&nbsp;256);&nbsp;&nbsp;&nbsp;//&nbsp;写数据到扇区8<br />err&nbsp;=&nbsp;Compare((0x00008000+flag[3]*256),&nbsp;(uint32)dd,&nbsp;256);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;比较数据<br /><br />我没有设置dd这个数组的地址,运行的时候比较数据是对的<br /><br />uint8&nbsp;*p&nbsp;=&nbsp;((uint8*)0x00008000);<br />while&nbsp;(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取FLASH,并通过UART0发送到上位机<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uart0_sendstr(&nbsp;p&nbsp;,1&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />我用上面的程序读FLASH,结果发现出来的全是FF,<br /><br />有哪位大哥,大姐熟悉IAP的。。。给指点下啊<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
zlgarm 发表于 2008-3-12 16:16 | 显示全部楼层

IAP

LIUYU305&nbsp;您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;1、RamToFlash(uint32&nbsp;dst,uint32&nbsp;src,uint32&nbsp;no);其中dst为Flash扇区的起始地址,如果再加(flag[3]*256)就非起始地址了<br />&nbsp;&nbsp;&nbsp;&nbsp;2、在对Flash操作之前首先执行擦除操作<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;By&nbsp;zlgarm_lijintao
 楼主| liuyu305 发表于 2008-3-12 17:09 | 显示全部楼层

回ZLGARM

非常感谢ZLGARM的解答。<br /><br /><br />我在《深入潜出》的书上看到的是<br />其中dst为要写入数据字节的目标FLASH地址,<br />因为我每次采集数据的为256字节,那么我要连续存储的时候就需要步进个地址了,所以我才加了(flag[3]*256)。我的flag[]起始是0,而且我也把(flag[3]*256)给去掉,结果发现读出来的还是FF。<br /><br />我在对Flash操作之前已经对扇区8擦除了,(我用的是2142)很奇怪的是,我用了比较校准的操作了,返回的也是成功的。<br /><br />我现在怀疑的问题是<br />1。SRC要求字对准,我的(uint32)dd指针没有设置,也许在编译的时候没字对准,但是效验返回的是成功。<br />2。我的读FLASH的函数是错误的。<br /><br />谢谢ZLGARM的解答。希望知道我错误地方的大哥大姐,小弟想占用您几分钟,请您帮我指出来。。。<br /><br />谢谢<br /><br />
 楼主| liuyu305 发表于 2008-3-13 10:03 | 显示全部楼层

回LS

我现在用的是LPC2142,ADS1。2用的是在网上找的LPC214X的模板
zlgarm 发表于 2008-3-13 10:06 | 显示全部楼层

to liuyu305

liuyu305,您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;您的程序没错,刚才我做了同样的实验,UART串口波特率设置为115200bps,看到的也是0xFF,主要是读Flash的速度太快了,一下就把您有用的数据读完,等您反应过来,已经读到无效数据了,当然是0xFF了。建议您把波特率改小点,例如1200bps,就可以通过串口调试软件观察到。你也可以通过设置一个数组,把读Flash的数据放在数组中,单步调试,观察起来更明显。<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;&nbsp;By&nbsp;zlgarm_wuzhijian
 楼主| liuyu305 发表于 2008-3-13 12:55 | 显示全部楼层

回ZLGARM

谢谢zlgarm_wuzhijian,您的验证。让我放心了很多,对于我的程序。<br /><br />我现在找到错误的地方了,现在发现不是波特率的问题,而是我程序初始化部分的问题,我在main初始化的部分加了对扇区的擦除和查空的语句,结果发现是这个语句导致的错误,我现在把这几个语句给去掉,就是可以正确读出我存的数据了。<br /><br /><br />uint8&nbsp;i;<br />uint8&nbsp;*p&nbsp;=&nbsp;((uint8&nbsp;*)0x00008000);<br />IAP_Entry&nbsp;=&nbsp;(void(*)())IAP_ENTER_ADR;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;初始化函数指针IAP_Entry<br />SelSector(8,8);&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;//&nbsp;在对FLASH进行擦除或者写入前必须先选择扇区,选择扇区8<br />EraseSector(8,8);&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;擦除扇区8<br />BlankCHK(8,8)&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;&nbsp;//&nbsp;查空扇区8<br />PINSEL0&nbsp;=&nbsp;0x00000025;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置UART,CAP0.0<br />PINSEL1&nbsp;=&nbsp;0x1A040000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置AD0.3,AD0.4,CAP0.2,CAP0.3<br /><br />上面的就是那部分的。现在我还是不知道为什么这个就会错误,不过我可以把这几个语句转移到其他地方,应该就可以解决了。<br /><br />再次感谢您的回答,让我解决了问题。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

108

主题

1889

帖子

6

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