我把已经写好的一个测试程序,编译生成hex文件以后,用一个工具把这个文件转换成了数组文件,然后就把这个数组定义成全局的变量,打算把这个数组写进flash里,理论上如果IAP执行成功了,我的测试程序就可以运行了,但是现在出现了很奇怪的问题。以下是我的数组(只是贴个一小部分,示意一下)
unsigned char ctest[] =
{
0x3a, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x46, 0x41, 0x0d,
0x0a, 0x3a, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x38, 0x46, 0x30, 0x39, 0x46,
0x45, 0x35, 0x31, 0x38, 0x46, 0x30, 0x39, 0x46, 0x45, 0x35, 0x31, 0x38, 0x46, 0x30, 0x39, 0x46
}
然后在主函数里定义了一个指针k,然后k = ctest,我通过观察k的值得到数组的起始地址,然后在进行IAP的ramtoflash的函数时候,我把源地址写成数组的地址
RamToFlash(0x00002000,0x40001800,512);这个函数在debug里显示执行正确,但是在Compare(0x00002000,0x40001800,512);的时候就不正确了,
还有就是假如我没有定义那个数组,我执行Compare(0x00002000,0x40001800,512);这个还是不正确,只要源地址起始是400018000就出问题,不是这个就没问题,但是要是定义数组的话,不管是那个地址,在比对的过程中都有问题,是不是我们哪里理解有点问题呢 |