打印
[应用相关]

IAP 如何设定AP的其实地址?

[复制链接]
3117|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ningzb|  楼主 | 2009-7-3 19:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要做一个IAP的系统,将程序分成2部分:boot和AP,boot负责引导系统和更新AP部分的程序,AP部分是实际需要程序。boot程序相当于普通程序,编译后下载到0x8000000开始的地址,中断向量表从0开始。AP的开始地址要在boot部分的后面,比如从0x8008000开始的地址,我问题是AP如何指定到0x8008000的位置?主要是中断向量地址,NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x8000)是否可以?
沙发
arm_fan168| | 2009-7-3 19:22 | 只看该作者

连接文件

把连接定义文件改了,把flash的起始地址改成0x8008000,再把中断向量表偏移到0x8008000.

使用特权

评论回复
板凳
ningzb|  楼主 | 2009-7-4 15:41 | 只看该作者

谢谢,你说的都做了,但还是有问题

主程序如下:
int main(void)
{

    int i;

    NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x8000);

    /* Setup STM32 system (clock, PLL and Flash configuration) */
    SystemInit();
    
    /* Add your application code here
    */

    LedInit();
    while(1)
    {    
        LedOn();
        for(i=0;i<1000000;i++);
        LedOff();    
        for(i=0;i<1000000;i++);
    }
}

编译时指定了程序的起始地址是0x8008000,但是还是不能工作,是不是还有别的什么地方需要修改?

使用特权

评论回复
地板
arm_fan168| | 2009-7-4 16:24 | 只看该作者

boot程序

应该还需要在boot程序里,定义一下应用程序的起始地址吧

使用特权

评论回复
5
ningzb|  楼主 | 2009-7-4 17:35 | 只看该作者

谢谢 arm_fan168问题已解决

可能还是对M3的向量中断理解不深,问题是跳转引起的,0x8008004存放的应该是应该程序复位的程序的地址,而不是复位程序,所以需要跳转到8008004所存储的地址的位置,而不是直接从8008004的地方开始执行,这是和普通的ARM的主要区别,这个问题困惑了我好几天!
谢谢arm_fan168给的思路,这个思路是正确的!!!

使用特权

评论回复
6
arm_fan168| | 2009-7-4 18:18 | 只看该作者

呵呵,不客气!

使用特权

评论回复
7
starm| | 2009-7-4 22:53 | 只看该作者

st提供的一个例子

是通过UART进行IAP的, 可以参考一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

132

帖子

1

粉丝