初级会员

- 积分
- 157
- 金钱
- 157
- 注册时间
- 2015-11-26
- 在线时间
- 31 小时
|
1金钱
IAP的程序跟原子提供的程序类似。APP工程的IROM和IRAM的地址我都设置在SRAM中。
固化程序的时候:IAP+APP都存在flash中,(存SRAM岂不是掉电就没了)
在IAP中,先将APP程序从flash复制到ram的对应地址中。
修改中断向量表->SRAM对应地址。
区别和疑问点***:
第一种操作: appxaddr地址传入的是 flash中APP的地址。
第二种操作: appxaddr地址传入的是 sram中APP的地址,跟原子哥工程一样。
//appxaddr:用户代码起始地址.void iap_load_app(u32 appxaddr) {
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{jump2app=(iapfun)*(vu32*)(appxaddr+4);//用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)appxaddr);
//初始化 APP 堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app(); //跳转到 APP.
}
}
求证实一下,两种程序都可以运行,所以就郁闷了,按理第一种运行不了吧。毕竟工程构建的时候地址都设置在了ram中。
第一种是调用在flash的程序,中断向量在sram?还是在ram中程序,中断在sram?
|
|