打印

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

[复制链接]
1954|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,,就是写入在读出就不对了,

使用特权

评论回复
5
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)通过变量传递地址就不知道储存到那里去了,又不能仿真,错也不知道那里出错了     

使用特权

评论回复
6
winds| | 2008-11-12 20:20 | 只看该作者

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

使用特权

评论回复
7
hyhjjg|  楼主 | 2008-11-12 21:33 | 只看该作者

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

以变量传递数据当真不稳定

使用特权

评论回复
8
hyhjjg|  楼主 | 2008-11-12 21:34 | 只看该作者

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

在仔细看看把

使用特权

评论回复
9
gx_huang| | 2008-11-12 22:11 | 只看该作者

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

使用特权

评论回复
10
hyhjjg|  楼主 | 2008-11-13 13:29 | 只看该作者

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

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

118

主题

438

帖子

0

粉丝