• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

各位大神,最近在学习stm32的串口IAP编写,有问题想请教

奔跑的黑蚂蚁 2018-04-11 浏览量:1224

在编写串口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.还有这个跳转是怎么实现的呢?不太明白,网上说是函数指针实现的,具体是怎么实现的呢???

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:5
  • 1、这个地址是自行选定的

    2、应用程序堆栈前要检查一下此处堆栈有无其它程序占用

  • 为是读取数据的时候方便,在固定的地方上,访问可以一直在这个地上

  • 1、这个单元是Flash比较靠后的一部分空间,前面的放程序,后面的放数据,避免冲突。
    2、这里的地址是flash上的一段地址,从这个地址上开始运行一段新的代码。

  • 类似于c中的指针,跳转到函数的入口地址以后顺序执行

  • IAP地址可以自由选择,跳转就是从系统程序地址跳转到你IAP的程序的地址。

相关问题

问题达人换一批

各位大神,最近在学习stm32的串口IAP编写,有问题想请教