[讨论] msp430 bootloader中断向量重映射问题

wateras1   2015-7-21 12:01 楼主
           最近项目需要用msp430f149整IAP升级,涉及到了bootloader的设计。目前遇到一个比较棘手的问题就是中断向量地址重映射问题。我目前的方法是在boot程序中通过asm("br &0xxxxx");指令来跳转到app的中断向量地址,但是这种方法有个局限性,只能开辟一个app空间,对于开辟两个app空间,这种方法有问题。我之前也采用网上的方法用一个全局变量去判断跳转到A还是B的虚拟中断向量地址,但是我发现一个问题,就是全局变量可能会被app区域的全局变量改写导致app程序运行不正常,我看网上有网友说将中断向量地址映射到ram中,不知道这个具体怎么做?还有一个问题,目前我遇到的boot,基本都是不使用串口中断接收更新固件,除非app中不使用串口中断,不知道有没更好的解决办法?





#pragma vector=PORT1_VECTOR

__interrupt void PORT1_ISR(void)

{

    if(AddrFlag==0)

    {

        asm("br &0xF7E8");

    }

    else

    {

        asm("br &0x84E8");

    }

}



淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目

回复评论 (21)

那你先试试标志位放在rom,const unsigned char AddrFlag;
点赞  2015-7-21 13:49
引用: weizhongc 发表于 2015-7-21 13:49
那你先试试标志位放在rom,const unsigned char AddrFlag;

这个不行,我之前也这样修改过,但是你的变量就不能修改了
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2015-7-21 14:01
那你就申请内存吧, 把这个标志位的内存地址指向最后的地址试试吧。我不信覆盖了 本帖最后由 weizhongc 于 2015-7-21 14:19 编辑
点赞  2015-7-21 14:10
引用: weizhongc 发表于 2015-7-21 14:10 那你就申请内存吧, 把这个标志位的内存地址指向最后的地址试试吧。我不信覆盖了
msp430f149的ram才2k,现在我的app ram就快到2k了很可能被覆盖掉,以后更新下固件就更不用说了,这个方法不太可行。 本帖最后由 wateras1 于 2015-7-21 14:22 编辑
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2015-7-21 14:21
不是所有的系列都能够把vector放到RAM中的,f5是支持的,ti官方有例子,找个看看吧
  1.     /*
  2.      * 将中断向量表移动到RAM中
  3.      * 注意只有部分系列芯片才会有这个寄存器
  4.      */
  5.     SYSCTL |= SYSRIVECT;


电工
点赞  2015-7-21 14:26
1.jpg

我曾经尝试的一些记录,may help you

官方的代码包好像是这个名字,我没有备份,自己的boot不能上传,抱歉

尝试找找这种名字的官方包吧,ti的工程师维护的代码,MSP430F5438A_RAM_INT_VECT_IAR

电工
点赞  2015-7-21 14:29
引用: lyzhangxiang 发表于 2015-7-21 14:26
不是所有的系列都能够把vector放到RAM中的,f5是支持的,ti官方有例子,找个看看吧

兄弟,我已经说了是msp430f149,没有硬件寄存器将中断向量表搞到ram中
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2015-7-21 15:09
帮顶一下,看了两遍还是不太明白,为什么要重映射中断向量,是因为 APP里会用到中断吗?
点赞  2015-7-21 16:19
引用: bobde163 发表于 2015-7-21 16:19
帮顶一下,看了两遍还是不太明白,为什么要重映射中断向量,是因为 APP里会用到中断吗?

是的
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2015-7-21 16:38
引用: wateras1 发表于 2015-7-21 14:01
这个不行,我之前也这样修改过,但是你的变量就不能修改了

可以像51单片机那样,将这个常量固定在某个地址上,然后要更改的时候就进行擦除再写,这个方法可不可行?
点赞  2015-7-21 16:50
引用: wateras1 发表于 2015-7-21 15:09
兄弟,我已经说了是msp430f149,没有硬件寄存器将中断向量表搞到ram中

不好意思没仔细看,仅看到楼主位有这样的字样
我看网上有网友说将中断向量地址映射到ram中,不知道这个具体怎么做?
仅针对这个简单的说了两点,没有帮到你实在抱歉

现在提问的都这么霸气,以后还是少掺和这种事

电工
点赞  2015-7-22 09:04
楼主是在探讨新的方法解决 双APP区的切换问题,以及bootloader 中不使用中断的问题。                我在一篇文章里看到不使用中断,通过判断寄存器是否变化来解决中断问题。目前我是刚刚寻找这方面资料。帮不上你。
点赞  2015-9-28 11:29
引用: wanzsxit 发表于 2015-9-28 11:29
楼主是在探讨新的方法解决 双APP区的切换问题,以及bootloader 中不使用中断的问题。                我在 ...

boot中段地址重映射有两种方法:一种就是跳转指令,另外一种就是寄存器来设置
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2015-9-28 12:16
"(boot 里不用中断,串口接收用判断寄存器的方法)" 出自的评论里http://www.deyisupport.com/quest ... 0/f/55/t/51847.aspx 串口接收中断要在BOOT里用 ,判断寄存器的方法。 本帖最后由 wanzsxit 于 2015-9-28 13:37 编辑
点赞  2015-9-28 13:36
你好,想请问,你这个问题解决了么,我在做G2553的时候也碰到这个问题了,不知道怎样去映射中断到RAM中?
点赞  2016-4-27 15:53
引用: anring 发表于 2016-4-27 15:53
你好,想请问,你这个问题解决了么,我在做G2553的时候也碰到这个问题了,不知道怎样去映射中断到RAM中?

建议单独发帖,会有更多的人来关注你的问题!
点赞  2016-4-27 15:55
引用: anring 发表于 2016-4-27 15:53
你好,想请问,你这个问题解决了么,我在做G2553的时候也碰到这个问题了,不知道怎样去映射中断到RAM中?

这个需要寄存器配合的,像ARM类都带了相关寄存器,msp430f149没带
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2016-4-27 17:33
对的,我发现msp430g2553也没有带类似的寄存器,那应该怎么处理这个中断的问题呢?想问问你是怎么解决的?
点赞  2016-4-27 20:55
引用: anring 发表于 2016-4-27 20:55
对的,我发现msp430g2553也没有带类似的寄存器,那应该怎么处理这个中断的问题呢?想问问你是怎么解决的?

我做的是不带串口中断,使用的是循环等待来接受串口数据
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2016-4-28 11:12
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复