我正在制作一个bootloader。在向该块中的那些寄存器写入任何内容之前,我必须擦除1024字节的内存。即使我想写2个字节,我也不得不擦除1024个字节。我的问题是我不知道每个块的起始位置。例如,假设我想将以下字节写入此地址。
地址: 0x198F0
字节: C80E00010001616FDFECD6F08C8C92EC
当我尝试从地址0x198F0
开始擦除1024个字节时,我注意到它开始从0x19800
删除。
我如何知道每个块的起始位置,以便我可以用软件计算它?
我想知道这个的原因是我可以在擦除之前将整个块复制到ram中,然后修改它,然后将其写回到同一个块中。我正在使用PIC18f87J11和MPLAB XC8编译器。我希望清楚我想要做什么,否则请在评论中告诉我。
谢谢!
答案 0 :(得分:5)
PIC18f87J11的FLASH存储器模块对齐1024字节。要计算某个块的起始地址,请将最后10位地址设置为0,这样就可以使用:
StartAddress = AddressPtr and 0xFFFC00
在你的情况下:
0x198F0 and 0xFFFC00 = 0x19800