搜索

重启后MCU不能正常工作

[复制链接]
209|22
 楼主 | 2020-11-5 22:48 | 显示全部楼层 |阅读模式
PIC 16 单片机 write flash 按照行写 重启后MCU不能正常工作

使用特权

评论回复
| 2020-11-5 22:52 | 显示全部楼层

还有什么现象?能再详细描述下吗?

使用特权

评论回复
 楼主 | 2020-11-5 22:57 | 显示全部楼层
按照行(一行32个字)擦写后,重启后MCU不能正常起来,有引起反复重启 以及 电流从200MA下降至89MA两种

使用特权

评论回复
| 2020-11-5 23:01 | 显示全部楼层
用工具把整个flash读出来, 然后研究你刚刚操作的那段flash的内容, 看看是不是你期望的,

使用特权

评论回复
| 2020-11-5 23:03 | 显示全部楼层
如果不是期望的就是错的咯, 看看错在哪里, 是地址错了,还是内容有误.

使用特权

评论回复
 楼主 | 2020-11-5 23:10 | 显示全部楼层
直接从菜单  window--->PIC memory views-->program memory看?

使用特权

评论回复
| 2020-11-5 23:14 | 显示全部楼层
不完全是的..
先连上你的 烧录工具, 然后read一下,

使用特权

评论回复
| 2020-11-5 23:18 | 显示全部楼层
448865fa417a526475.png

使用特权

评论回复
| 2020-11-5 23:21 | 显示全部楼层
最后才是在program memory里面看你操作的地址及对应内容..

使用特权

评论回复
| 2020-11-5 23:25 | 显示全部楼层
编译提示的占用space,是指生成的代码, 如果一句连一句, 实打实的需要1AA8H这么多条.
但是,实际上, 编译器将这些放到整个ROM区域, 可能不是连续.

使用特权

评论回复
| 2020-11-5 23:31 | 显示全部楼层
我猜你这里想"空白利用"的意思, 或者说, 你是想在ROM拿一段区域出来自行擦写,自行存放数据用..

使用特权

评论回复
| 2020-11-5 23:35 | 显示全部楼层
你可以 在项目属性里面指定 你想要的ROM区域..如下图所示:

使用特权

评论回复
| 2020-11-5 23:38 | 显示全部楼层
看一下注释说明, 应该很清楚用法的哈..

使用特权

评论回复
| 2020-11-5 23:42 | 显示全部楼层
729685fa41d5ab8d62.png

使用特权

评论回复
| 2020-11-5 23:45 | 显示全部楼层
看一下flash区域,别写道寄存器地址去了

使用特权

评论回复
 楼主 | 2020-11-5 23:50 | 显示全部楼层
请教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

使用特权

评论回复
 楼主 | 2020-11-5 23:53 | 显示全部楼层
擦写地址指向到代码空间了。

使用特权

评论回复
| 2020-11-5 23:56 | 显示全部楼层
你这个是PIC16, 8位机, 默认的long好像是24位的, 你需要改一下编译器的设置,改到更长才可以的....

使用特权

评论回复
| 2020-11-6 09:35 | 显示全部楼层
zyf部长 发表于 2020-11-5 23:50
请教pic里面的32位变量正确的定义和使用方式:
unsigned long int len;
unsigned int lenh, lenl;

len = (lenh <<16)|lenl;
此时lenh宽度不够,左移后数据不变。应该为
len = ((unsigned longlenh <<16)|lenl;
先将lenh扩转到32位,再移位。

使用特权

评论回复
| 2020-11-6 10:58 | 显示全部楼层
代码区被改了?

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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