zyf部长 发表于 2022-6-11 17:15

重启后MCU不能正常工作

本帖最后由 pzsh 于 2022-6-25 15:54 编辑

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

llljh 发表于 2022-6-11 17:17

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

zyf部长 发表于 2022-6-11 17:19

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

jlyuan 发表于 2022-6-11 17:23

用工具把整个flash读出来, 然后研究你刚刚操作的那段flash的内容, 看看是不是你期望的,

kangzj 发表于 2022-6-11 17:27

如果不是期望的就是错的咯, 看看错在哪里, 是地址错了,还是内容有误.

zyf部长 发表于 2022-6-11 17:30

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

dengdc 发表于 2022-6-11 17:32

不完全是的..
先连上你的 烧录工具, 然后read一下,

zwll 发表于 2022-6-11 17:34


supernan 发表于 2022-6-11 17:37

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

juventus9554 发表于 2022-6-12 12:01

编译提示的占用space,是指生成的代码, 如果一句连一句, 实打实的需要1AA8H这么多条.
但是,实际上, 编译器将这些放到整个ROM区域, 可能不是连续.

dengdc 发表于 2022-6-12 12:03

我猜你这里想"空白利用"的意思, 或者说, 你是想在ROM拿一段区域出来自行擦写,自行存放数据用..

jlyuan 发表于 2022-6-12 12:05

你可以 在项目属性里面指定 你想要的ROM区域..如下图所示:

pengf 发表于 2022-6-12 12:07

看一下注释说明, 应该很清楚用法的哈..

huangchui 发表于 2022-6-12 12:09


dengdc 发表于 2022-6-12 12:12

看一下flash区域,别写道寄存器地址去了

zyf部长 发表于 2022-6-12 12:16

请教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;
//打印出来lenhlenl分别是0000 FFEE

zyf部长 发表于 2022-6-12 12:20

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

xxrs 发表于 2022-6-12 12:22

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

huangchui 发表于 2022-6-12 12:25

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

yszong 发表于 2022-6-12 12:28

代码区被改了?
页: [1] 2
查看完整版本: 重启后MCU不能正常工作