硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5529|回复: 3
收起左侧

[BOOT/IAP] stm32h7 的boot和应用可以使用同一个中断向量表吗

[复制链接]

10

主题

19

回帖

49

积分

初级会员

积分
49
发表于 2021-1-5 16:56:52 | 显示全部楼层 |阅读模式
问题:stm32h7 的boot和应用可以使用同一个中断向量表吗?
问题2:
boot地址 0x8000000;
app1地址 0x8020000;
app2地址 0x8040000;

我想让boot跳转到app1地址,或者app2地址,而且app1和app2是一个固件,该如何实现?

目前app1中断向量表地址是0x8020000,app2是0x8040000,这样的话编译出来就是两个固件了,不方便。



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107643
QQ
发表于 2021-1-5 17:05:38 | 显示全部楼层
1、不可以,程序不同,中断服务程序地址是不同的。
2、向量表的设置比较简单,直接在你的APP程序里面的main函数做个处理即可,读取任意函数地址在范围0x8020000还是0x8040000里面即可,然后动态设置向量表地址。

而所有函数和变量也要保持与地址无关的独立性略麻烦。
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2021-5-18 17:05:23 | 显示全部楼层
我也想实现上面的功能  不知道楼主现在实现没   碰到一个问题  跳转后不能运行

boot跳转:
    __disable_irq();
    if(((*(uint32_t*)APP_BIN_ADDR)&0x2FF00000)==0x20000000)        //检查栈顶地址是否合法.
    {
        printf("addr = %02x\r\n", (unsigned int *)(APP_BIN_ADDR));
        Jump_To_Application = (int (*)(void))(APP_BIN_ADDR+4);
        /* Initialize user application's Stack Pointer */
        __set_MSP(*(__IO uint32_t*) APP_BIN_ADDR);
//        /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */
//        __set_CONTROL(0);
        printf("start jump\r\n");
        Jump_To_Application();
        printf("jump fail\r\n");
    }

IAP:
        SCB->VTOR = APP_BIN_ADDR;
        __enable_irq();
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-5-18 17:52:23 | 显示全部楼层
不行,要从flahs里面加载中断向量去ram,你两个程序地址不一样,除非你每个app都改,两个app功能不一样还可以。一样的话想做备份功能实现不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-10 10:24 , Processed in 0.221689 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表