[PIC®/AVR®/dsPIC®产品]

PIC 16 单片机 write flash 按照行写 重启后MCU不能正常工作

[复制链接]
1473|14
手机看帖
扫描二维码
随时随地手机跟帖
yhy08090|  楼主 | 2019-7-10 13:52 | 显示全部楼层 |阅读模式
本帖最后由 yhy08090 于 2019-7-22 18:52 编辑

PIC 16 18346 单片机 write flash  按照行写 重启后MCU不能正常工作,求助大神:

按照行(一行32个字)擦写后,重启后MCU不能正常起来,有引起反复重启 以及 电流从200MA下降至89MA两种


使用特权

评论回复
麦小播| | 2019-7-10 14:44 | 显示全部楼层
帮顶,大神们快来

使用特权

评论回复
CoolSilicon| | 2019-7-11 09:11 | 显示全部楼层
用工具把整个flash读出来, 然后研究你刚刚操作的那段flash的内容, 看看是不是你期望的,
如果不是期望的就是错的咯, 看看错在哪里, 是地址错了,还是内容有误.
不难找到原因的啊

使用特权

评论回复
yhy08090|  楼主 | 2019-7-11 09:38 | 显示全部楼层
CoolSilicon 发表于 2019-7-11 09:11
用工具把整个flash读出来, 然后研究你刚刚操作的那段flash的内容, 看看是不是你期望的,
如果不是期望的就 ...

直接从菜单  window--->PIC memory views-->program memory看?

使用特权

评论回复
CoolSilicon| | 2019-7-11 09:45 | 显示全部楼层
不完全是的..
先连上你的 烧录工具, 然后read一下,
839135d26948a7fe33.png

最后才是在program memory里面看你操作的地址及对应内容..

细心一点, 很容易找到问题的..加油!

使用特权

评论回复
评论
yhy08090 2019-7-11 11:02 回复TA
能读整个flash,如有神助,问题解决了,谢谢 还有个地方有问题: 编译提示:Program space used 1AA8h ( 6824) of 4000h words ( 41.7%) 但烧录的时候信息: 以下存储器区域将被编程: 程序存储器: 起始地址 = 0x0, 结束地址 = 0x20df 这0x1aa8--->0x20df之间还有好大一段空白的地方, 这个0x20df能否被更改 
CoolSilicon| | 2019-7-11 11:11 | 显示全部楼层
@yhy08090
编译提示的占用space,是指生成的代码, 如果一句连一句, 实打实的需要1AA8H这么多条.
但是,实际上, 编译器将这些放到整个ROM区域, 可能不是连续.
我猜你这里想"空白利用"的意思, 或者说, 你是想在ROM拿一段区域出来自行擦写,自行存放数据用..
你可以 在项目属性里面指定 你想要的ROM区域..如下图所示:
看一下注释说明, 应该很清楚用法的哈..
97115d26a8b5961d5.png

使用特权

评论回复
wqiang_qdu| | 2019-7-11 13:46 | 显示全部楼层
看一下flash区域,别写道寄存器地址去了

使用特权

评论回复
评论
yhy08090 2019-7-11 16:49 回复TA
是写到代码空间去了 
小卡| | 2019-7-12 14:01 | 显示全部楼层
加分类

使用特权

评论回复
奔波儿熊| | 2019-7-12 15:29 | 显示全部楼层
楼主解决了的话分享一下, 这种问题我很好奇

使用特权

评论回复
yhy08090|  楼主 | 2019-7-15 15:53 | 显示全部楼层
@CoolSilicon
请教pic里面的32位变量正确的定义和使用方式:
unsigned long int len;
unsigned int lenh, lenl;
lenh = 0x9988;
lenl = 0x7766;
//以上打印出来正确
len = (lenh <<16)|lenl;
lenh = (len & 0xffff0000) >> 16;
lenl = len&0x0000ffff;
//打印出来lenh  lenl分别是0000 FFEE

使用特权

评论回复
yhy08090|  楼主 | 2019-7-15 15:56 | 显示全部楼层
奔波儿熊 发表于 2019-7-12 15:29
楼主解决了的话分享一下, 这种问题我很好奇

擦写地址指向到代码空间了。

使用特权

评论回复
CoolSilicon| | 2019-7-22 11:07 | 显示全部楼层
yhy08090 发表于 2019-7-15 15:53
@CoolSilicon
请教pic里面的32位变量正确的定义和使用方式:
unsigned long int len;

你这个是PIC16, 8位机, 默认的long好像是24位的, 你需要改一下编译器的设置,改到更长才可以的....

使用特权

评论回复
评论
yhy08090 2019-7-22 14:01 回复TA
谢谢 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

47

帖子

0

粉丝