61
447
1347
助理工程师
将数组写入N76E003的eeprom中,然后再下次开机时读取。
使用特权
数据写入后再次读取,发现读取数据错误。通过断点跟踪调试,发现有如下错误,例如:上次写入是00 01 读取后编程了01 00。
void n76e003_flash_num_read(void) { unsigned char block = 0; unsigned char buf_cnt = 0; unsigned char num_buf[8]; unsigned long num_temp = 0; for (block = 0; block < 16; block++) { for (buf_cnt = 0; buf_cnt < 4; buf_cnt++) { num_buf[buf_cnt] = n76e003_flash_read(0x4700 + (block >> 3) + buf_cnt); } num_temp = (num_buf[0] << 24) + (num_buf[1] << 16) + (num_buf[2] << 8) + (num_buf[3]); num_total = (num_total > num_temp) ? num_total : num_temp; } block = num_total / AvrgMaxNum; for (buf_cnt = 0; buf_cnt < 4; buf_cnt++) { num_buf[buf_cnt + 4] = n76e003_flash_read(0x4700 + (block >> 3)); } num_left = (num_buf[4] << 24) + (num_buf[5] << 16) + (num_buf[6] << 8) + (num_buf[7]); }
将4700H+(block>>3)更改为4700H+(block<<3)后,程序正常运行。
上面贴出的程序是错误的程序,仅用于说明问题,请谨慎参考。
181
3257
9898
技术达人
136
1553
4686
中级工程师
发表回复 本版积分规则 回帖后跳转到最后一页
3
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号