重启后MCU不能正常工作
本帖最后由 pzsh 于 2022-6-25 15:54 编辑PIC 16 单片机 write flash 按照行写 重启后MCU不能正常工作
还有什么现象?能再详细描述下吗?
按照行(一行32个字)擦写后,重启后MCU不能正常起来,有引起反复重启 以及 电流从200MA下降至89MA两种
用工具把整个flash读出来, 然后研究你刚刚操作的那段flash的内容, 看看是不是你期望的,
如果不是期望的就是错的咯, 看看错在哪里, 是地址错了,还是内容有误.
直接从菜单window--->PIC memory views-->program memory看?
不完全是的..
先连上你的 烧录工具, 然后read一下,
最后才是在program memory里面看你操作的地址及对应内容..
编译提示的占用space,是指生成的代码, 如果一句连一句, 实打实的需要1AA8H这么多条.
但是,实际上, 编译器将这些放到整个ROM区域, 可能不是连续. 我猜你这里想"空白利用"的意思, 或者说, 你是想在ROM拿一段区域出来自行擦写,自行存放数据用..
你可以 在项目属性里面指定 你想要的ROM区域..如下图所示:
看一下注释说明, 应该很清楚用法的哈..
看一下flash区域,别写道寄存器地址去了
请教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 擦写地址指向到代码空间了。
你这个是PIC16, 8位机, 默认的long好像是24位的, 你需要改一下编译器的设置,改到更长才可以的....
len = (lenh <<16)|lenl;
此时lenh宽度不够,左移后数据不变。应该为
len = ((unsigned longlenh <<16)|lenl;
先将lenh扩转到32位,再移位。 代码区被改了?
页:
[1]
2