在编写串口iap代码的时候,已经编写好并调试通了串口,接下来编写把接收到的二进制文件写入flash后,跳转的时候不知道该怎么编写,看了正点原子的相关例子。有不明白之处:
1.u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000))); 这句的含义是从0x20001000这个单元开始放置这个数据的元素,但是我不明白的是,为什么要指定这个单元呢?不指定不是一样可以连续的保存数据吗?
2.正点原子的程序中跳转部分不理解,
(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.为什么要这样检查呢?
jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址),这句我明白。 MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址),但是这句的MSR_MSP是什么意思呢? jump2app(); //跳转到APP.还有这个跳转是怎么实现的呢?不太明白,网上说是函数指针实现的,具体是怎么实现的呢???
1、这个地址是自行选定的
2、应用程序堆栈前要检查一下此处堆栈有无其它程序占用