用STC的朋友进来给解解迷惑啊

[复制链接]
2909|9
 楼主| hyhjjg 发表于 2008-11-12 12:41 | 显示全部楼层 |阅读模式
自己用的是STC89C58的,看他DATESHEET上说内部有8000H-F200H的E2PROM来给用户放置数据,用了起来不是很好用的,     他们提供的接口函数write_flash_with_protect_in_one_sector(INT16U begin_addr, INT16U counter, INT8U array[])     函数接口中的begin_addr,begin_addr我用INT型变量传递,array[]则是用指针传递的,当在一个扇区内大范围的存取数据就会出错,不知道为什么,编译器是KEIL C51 7.08版本.
 楼主| hyhjjg 发表于 2008-11-12 12:55 | 显示全部楼层

传说中STC不稳定难道是真的吗

怎么没有人帮忙盖世一哈哈呢
lyjian 发表于 2008-11-12 13:00 | 显示全部楼层

这些所谓的E2prom都是Flash

改数据之前是要先整个扇区(512B)擦除的。(你有没先做擦除?)
你不能把它当普通的E2prom来看待。
 楼主| hyhjjg 发表于 2008-11-12 13:14 | 显示全部楼层

我是按他们网上提供的方法做的

写之前要扇区删除,数据的保护我也做了,操作后明明返回OK,,就是写入在读出就不对了,
 楼主| hyhjjg 发表于 2008-11-12 13:42 | 显示全部楼层

刚才我又实验了一下,如果传递地址是数字就可以

如果是通过变量传递地址就不对了,          write_flash_with_protect_in_one_sector(0X8100,128, POTR)就可以了,如果是 write_flash_with_protect_in_one_sector( begin_addr, counter, POTR)通过变量传递地址就不知道储存到那里去了,又不能仿真,错也不知道那里出错了     
winds 发表于 2008-11-12 20:20 | 显示全部楼层

建议编译器的优化设置为7级

 楼主| hyhjjg 发表于 2008-11-12 21:33 | 显示全部楼层

今天实验了一正天了,还是没有结果

以变量传递数据当真不稳定
 楼主| hyhjjg 发表于 2008-11-12 21:34 | 显示全部楼层

怀疑网站上提供的接口函数有不妥的地方

在仔细看看把
gx_huang 发表于 2008-11-12 22:11 | 显示全部楼层

进到汇编里看看生成的代码是否错误

 楼主| hyhjjg 发表于 2008-11-13 13:29 | 显示全部楼层

感谢大伙的关注,搞了3天,今天终于搞定了

原来问题果真是在接口函数里面,提供的存取函数里面有个判断存取长度是否超长的和超扇区的两个句子,而这个阀值是个宏定义替代符,一直没有怀疑接口函数,问题就是出在里面了.我把哪个宏定义替代符直接用数字表示,载下去OK,实验之后是OK了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

118

主题

438

帖子

0

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