OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6093|回复: 38

为什么Flash的读写程序,在主程序为32K左右, 在地址为0x8010008,写入6个数据,会出现一堆数据,不止6个数据

[复制链接]

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
发表于 2015-8-17 19:36:43 | 显示全部楼层 |阅读模式
5金钱
  在STM32F103VCT6的平台下的
Data[0] = 0x5555;
   Data[1] = 0x6666;
   Data[2] = 0x7777;
   Data[3] = 0x8888;
   Data[4] = 0x9999;
   Data[5] = 0xAAAA;
STMFLASH_Write(0x8010008,Data,6);

#if STM32_FLASH_SIZE<256
#define STM_SECTOR_SIZE 1024 //字节
#else 
#define STM_SECTOR_SIZE 2048
#endif  
u16 STMFLASH_BUF[STM_SECTOR_SIZE/2];//最多是2K字节
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)
{
u32 secpos;   //扇区地址
u16 secoff;   //扇区内偏移地址(16位字计算)
u16 secremain; //扇区内剩余地址(16位字计算)   
  u16 i;    
u32 offaddr;   //去掉0X08000000后的地址
if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址
FLASH_Unlock(); //解锁
offaddr=WriteAddr-STM32_FLASH_BASE; //实际偏移地址.
secpos=offaddr/STM_SECTOR_SIZE; //扇区地址  0~127 for 
secoff=(offaddr%STM_SECTOR_SIZE)/2; //在扇区内的偏移(2个字节为基本单位.)
secremain=STM_SECTOR_SIZE/2-secoff; //扇区剩余空间大小   
if(NumToWrite<=secremain)secremain=NumToWrite;//不大于该扇区范围
while(1) 
{
STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//读出整个扇区的内容
for(i=0;i<secremain;i++)//校验数据
{
if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;//需要擦除    
}
if(i<secremain)//需要擦除
{
FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);//擦除这个扇区
for(i=0;i<secremain;i++)//复制
{
STMFLASH_BUF[i+secoff]=pBuffer;  
}
STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//写入整个扇区  
}
else STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);//写已经擦除了的,直接写入扇区剩余区间.   
if(NumToWrite==secremain)break;//写入结束了
else//写入未结束
{
secpos++; //扇区地址增1
secoff=0; //偏移位置为0  
  pBuffer+=secremain;   //指针偏移
WriteAddr+=secremain*2; //写地址偏移,乘以2 
// WriteAddr+=secremain; //写地址偏移   
  NumToWrite-=secremain; //字节(16位)数递减
if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//下一个扇区还是写不完
else secremain=NumToWrite;//下一个扇区可以写完了
}  
};
FLASH_Lock();//上锁
}
#endif

F~ASQZ@`T@XD{%NHZ[Q_UWU.jpg

最佳答案

查看完整内容[请看2#楼]

应该是const unsigned char DataSave_Rom[1024*2] __attribute__((at(0x8010000))) = {0x00};
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-17 19:36:44 | 显示全部楼层
应该是const unsigned char DataSave_Rom[1024*2] __attribute__((at(0x8010000))) = {0x00};
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-17 22:15:52 | 显示全部楼层
其他数据是以前就有的吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 09:42:46 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我每次编译的时候都会擦除整个Flash的,然后DEBUG进去,写入数据,但看memory里面有一堆数据,我是从 STMFLASH_Write(0x8010008,Data,6);开始写的,但在0x8010000都有数据。搞了4天了,还是没找到原因。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 09:45:27 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我在一个只有8K的工程里没有出现这个问题,在这个30K的工程里就出现了,我这个数组是单独定义的,没有被其他地方调用,就是为了测试用的,好奇怪
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2015-8-18 09:58:15 | 显示全部楼层
将Flash读出来与源固件比对一下
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 10:09:27 | 显示全部楼层
回复【5楼】emWin:
---------------------------------
那几个地址的数据都对的,但它周围的一些地址不知道为何都被写上了数据,我那个附件上有 memory的数据
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-18 12:46:48 | 显示全部楼层
回复【6楼】ZGFZGF:
---------------------------------
仿真,在进入写的时候,先看一下这个区域的数据。然后写完之后,再看此区域数据,这就知道问题在哪里了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 13:09:03 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
我在main函数的While(1)

while(1)
{
if(E2promWriFlag & 0x01) // StepMotor Set Zero
    {
       E2promWriFlag &= 0xFE;

Mag_Zero[0] =0x1111;
Mag_Zero[1] =0x2222;
Mag_Zero[2] =0x3333;
Mag_Zero[3] =0x4444;
   STMFLASH_Write(0x8010000,Mag_Zero,4); // 0x803FF00


  GetMagFeedback()
   SysStatus &= 0xFFBF;
    }

else if(E2promWriFlag & 0x04) // TZ Set Zero
{
   E2promWriFlag &= 0xFB;
   SysStatus &= 0xEFFF;
   Data[0] = 0x5555;
    Data[1] = 0x6666;
    Data[2] = 0x7777;
    Data[3] = 0x8888;
    Data[4] = 0x9999;
    Data[5] = 0xAAAA;
STMFLASH_Write(0x8010008,Data,6);//  

}
   }
写一次当E2promWriFlag == 0x04时,写的数据在memory是对的 ,但当我在仿真的watch里再次给E2promWriFlag ==0x04,写前数据都对的,但当STMFLASH_Write(0x8010008,Data,6);后memory里的数据就变成附件里其他周围地址都被写了一些其他数据了。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 13:12:45 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原因难道是Flash里,不能连续写吗?,求原子大神分析下。我前几天E2promWriFlag == 0x05时,就相当于连续操作了写了两个数组在0x8010000,,0x8010008,
STMFLASH_Write(0x8010000,Mag_Zero,4);
STMFLASH_Write(0x8010008,Data,6);//
就出现附件里截图的情况了
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-18 16:25:29 | 显示全部楼层
你的程序不是每次都全部擦除扇区,而是判断剩余扇区够不够写,每次你进入flash 都判断偏移地址,后面的全是0xff,所以每次都不执行擦除。如果你要写在固定地址就不要判断了,每次写都擦除就行了。函数里开一个u16 STMFLASH_BUF[STM_SECTOR_SIZE/2]那么大的数组........
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 17:50:32 | 显示全部楼层
回复【10楼】ArchiChain:
---------------------------------
如果每次的都擦除的话,那么我当E2promWriFlag == 0x05时,就相当于连续操作了写了两个数组在0x8010000,,0x8010008, 
STMFLASH_Write(0x8010000,Mag_Zero,4); 
STMFLASH_Write(0x8010008,Data,6);//
那些只能写入一个数组了,当if(E2promWriFlag & 0x01)执行时,写完一个数组,当else if(E2promWriFlag & 0x04)下一个数组都擦除Flash那一页的话,那上次写的数值不就没有了吗,我再次上电的话,只能读到一个一个数组的值了,另一个肯定被覆盖了吧
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-18 18:04:24 | 显示全部楼层
回复【11楼】ZGFZGF:
---------------------------------
对于这种多个参数需要写到固定相邻flash地址的工程,我觉得你应该设个结构体把Maz 和Data这两个数组都包含进去,因为擦除命令是对整个扇区的,所以写操作也应该一起写,擦除前把之前的参数读出来,改了要改的部分再写回去。另外就是你可以把u16 STMFLASH_BUF[STM_SECTOR_SIZE/2];这个设为全局变量或者用static声明一下试试。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 22:49:31 | 显示全部楼层
回复【12楼】ArchiChain:
---------------------------------
我明天试试看,我有个疑问,写一次当E2promWriFlag == 0x04时,写的数据在memory是对的 ,但当我在仿真的watch里再次给E2promWriFlag ==0x04,写前数据都对的,但当STMFLASH_Write(0x8010008,Data,6);后memory里的数据就变成附件里其他周围地址都被写了一些其他数据了,我仿真也是这样的结果在main函数的While(1) 第一次STMFLASH_Write(0x8010008,Data,6);是对的,第二次再次STMFLASH_Write(0x8010008,Data,6);就发现不对了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-18 22:50:58 | 显示全部楼层
回复【9楼】ZGFZGF:
---------------------------------
可以的,你用我们例程试试吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 22:54:53 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
我那个void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) 就是和的你的IAP例程的那个函数一样的了,是不是跟我工程有关系?你的那个Flash的例程的下载地址能发我下吗,我去看看
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-18 23:23:15 | 显示全部楼层
 回复【15楼】 ZGFZGF :
---------------------------------
http://openedv.com/posts/list/13912.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 23:30:00 | 显示全部楼层
回复【16楼】正点原子:
---------------------------------

回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-18 23:30:41 | 显示全部楼层
回复【17楼】ZGFZGF:
---------------------------------
回复【16楼】正点原子:
---------------------------------
谢谢原子了,但我那个函数就是你的那个,一模一样的,是不是跟我工程有关,写一次是对的,接着仿真下再重新写一次相同的位置相同数据就不对了,碰过这样的情况吗
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 10:10:07 | 显示全部楼层
回复【13楼】ZGFZGF:
---------------------------------
你试试吧,说不定有奇效,就是把我说的那个数组定义成全局变量或者static声明一下,你现在的错误很可能是堆栈溢出造成数据出错。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 10:14:58 | 显示全部楼层
回复【19楼】ArchiChain:
---------------------------------
我刚试过了,还是不行,static u16 STMFLASH_BUF[STM_SECTOR_SIZE/2];//最多是2K字节,结果还是附件截图一样,好奇怪,写一次是对 的,在While(1)再写一次,就乱了
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 10:56:56 | 显示全部楼层
回复【20楼】ZGFZGF:
---------------------------------
我在之前的公司做过的项目需要把4K的参数保存到flash里面,印象中调试过程中出现过类似问题,我就是用static声明一下那个变量解决的。flash的的读写操作不支持单步?好像仿真的结果也不太对?如果你有液晶显示或者串口输出,你可以把程序下载到单片机上上电测试,看掉电后读取的数据正确不正确。或者你把STMFLASH_BUF定义为全局变量,在第二次写flash之前设个断点观察STMFLASH_BUF,写完之后观察一下STMFLASH_BUF,看STMFLASH_BUF的内容是不是你预计的状态?其实解决问题的过程也是个让你提升的过程,如果都是顺顺利利移植了也就是加快自己的开发速度,自己提升有限。我水平也就那样,现在的工作变动了,没有SMT32的硬件平台,不是很方便帮你调程序,请理解。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 11:02:23 | 显示全部楼层
回复【20楼】ZGFZGF:
---------------------------------
你在确保程序逻辑正常的情况下按我20楼的说法操作一次看看,还有就是flash的读写擦除好像仿真的情况不是很正常?你还是把程序下载到单片机里面看看运行结果。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 11:03:09 | 显示全部楼层
回复【21楼】ArchiChain:
---------------------------------
好,谢谢了,还是非常感谢你的帮忙。我再试试,多调试下
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 11:05:46 | 显示全部楼层
回复【22楼】ArchiChain:
---------------------------------
好,我也感觉奇怪,这个函数在小工程师可以的,但在这里连续写一个位置的相同数据时,虽然那个地址位置的写入数据时对的,但周围地址被写了乱七八杂的数据进去。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 11:15:27 | 显示全部楼层
回复【22楼】ArchiChain:
---------------------------------
我发现在整个工程里在执行STMFLASH_Write(0x8010008,Data,6)前,我在watch看到STMFLASH_BUF这个数组里的前面89个数有数值而且一直在跳变,不是0x00,
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 11:27:41 | 显示全部楼层
回复【25楼】ZGFZGF:
---------------------------------
如果你要观察这个数组,要先设成全局变量,如果是局部变量仿真是看不到的。如果全局变量一直在变,你搜一下整个工程哪里给这个数组赋值了,把赋值的语句都设断点,运行的时候看进入了那个断点,这样就好找问题了。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 11:36:14 | 显示全部楼层
回复【25楼】ZGFZGF:
---------------------------------
如果再不行你试一下定义个数组分配到固定flash地址,先把这个flash地址“占住”,这样编辑器生产代码的时候就不会把运行程序写到这些扇区。
const unsigned char DataSave_Rom[1024*2] __attribute__((at(0x8011000))) = {0x00};
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 11:41:02 | 显示全部楼层
顺便说一句, 先把当前的问题解决,但片内flash的读写是有寿命的,你不能频繁地去擦写,如果你保存的参数比较简单又比较频繁地操作,不妨加个24Cxx eeprom,最便宜的才几毛钱。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 12:10:32 | 显示全部楼层
回复【27楼】ArchiChain:
--------------------------------
我先去试试哈
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 13:47:02 | 显示全部楼层
回复【29楼】ArchiChain:
---------------------------------
u16 STMFLASH_BUF[1024*2] __attribute__((at(0x803F800))) = {0}; 这样定义后好像可以了,不会出现乱码数据,我再多试试,我仔细查看了这个工程,u16 STMFLASH_BUF在其他地方没有运用和赋值,那之前怎么会出现不断在变化的数据
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 15:45:50 | 显示全部楼层
回复【31楼】ZGFZGF:
---------------------------------
具体为什么会随便变化我不太清楚,这个要看你的编译信息,堆栈溢出什么的都有可能,如果用内部存储器做数据保存,最好还是做这种定义,随便擦除一段flash不是个好的做法,你擦除的可能是程序区。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 16:24:53 | 显示全部楼层
回复【32楼】ArchiChain:
---------------------------------
u16 STMFLASH_BUF[1024*2] __attribute__((at(0x803F800))) = {0};赋值后,应该是都0,怎么watch里STMFLASH_BUF数组里一直都是0xFF
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 16:42:23 | 显示全部楼层
回复【33楼】ZGFZGF:
---------------------------------
数组不能这么赋值,这只是个简单写法,真要全部赋值要用for来把所有元素填满0x0000,另外我对仿真的时候flash区域的显示数值准确性表示怀疑.如果逻辑什么的跑通了可以下载程序到片子上试试。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 17:08:56 | 显示全部楼层
回复【34楼】ArchiChain:
---------------------------------
为什么有这样的怀疑?我到时候下到片子试试
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 17:14:30 | 显示全部楼层
回复【35楼】ZGFZGF:
---------------------------------
 这个是我猜的,不一定对,你可以问问高人,我之前调试和你类似保存参数到flash的时候好像出现过类似问题,watch Flash区的数据好像不太准确,至于现实是不是这样我现在验证不了。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 17:30:37 | 显示全部楼层
回复【36楼】ArchiChain:
---------------------------------
我下到片子里去了,用串口打印出的数据时对的,我再好好研究下,非常感激,谢谢你的一路指点哈
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2015-8-19 17:43:13 | 显示全部楼层
回复【37楼】ZGFZGF:
---------------------------------
不要客气,刚好我之前做过类似工作自己比较了解而已,你验证的时候除了打印正常的数据,那些“不正常”的地址你也验证一下,是不是0xff,如果都正常程序就没问题了。至于我说的watch flash数据异常这个只是个人的印象,你没必要深究。我当年51转STM32也是马上上个大项目,液晶 USB flash存数据.......最后差不多200K代码,在这里得到很多帮助,也希望以后你有机会在这里帮助得到别人的时候尽自己的能力,难得原子运行这么个好的论坛,需要大家用心来维护。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2015-8-17
在线时间
20 小时
 楼主| 发表于 2015-8-19 22:01:48 | 显示全部楼层
回复【38楼】ArchiChain:
---------------------------------
恩,那些不正常的地址都是0XFF了,都对的,原子的论坛是个很不错的地方,大家可以一起交流
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 07:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表