你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8S105 IAP Bootloader与APP都中断

[复制链接]
bobzhan 提问时间:2019-2-22 17:38 /
最近在搞STM8的IAP,想在Bootloader与APP中都用中断,看来网上的大神说的方案,可以将中断向量重定向到RAM,可是搞了两天仍然没有搞定,按如下的方法,BOOT单独可以正常串口中断(屏蔽了跳转到APP)而BOOT跳转到APP就不能中断,感觉APP中的中断向量重定向有点问题,但是又不知道问题在哪,特来求助各位大神
boot:
icf文件
define region NearData = [from 0x0000 to 0x077F];
define region Eeprom = [from 0x4000 to 0x43FF];
define region BootROM = [from 0x6000 to 0x67FF];
define region NearFuncCode = [from 0x8000 to 0xA7FF];
define region FarFuncCode = [from 0x8000 to 0xA7FF];
define region HugeFuncCode = [from 0x8000 to 0xA7FF];
bOOT里的主要代码:
#if 1
typedef void(*isr_type_t)(void);
typedef struct{
       uint16_t interrupt_instuction;
       isr_type_t interrupt_handler;
}interrupt_vector;
#pragma location=0x0780
interrupt_vector vector_table_[32];
#endif
#pragma vector=23
__interrupt void UART2_RX_IRQ(void)
{
  ........//中断
}
void main(void)
{
    vector_table_[23].interrupt_instuction=0x8200;
    vector_table_[23].interrupt_handler=(isr_type_t)&UART2_RX_IRQ;
}
APP:
icf文件
define region NearData = [from 0x0000 to 0x077F];
define region Eeprom = [from 0x4000 to 0x43FF];
define region BootROM = [from 0x6000 to 0x67FF];
define region NearFuncCode = [from 0xA800 to 0xFFFF];
define region FarFuncCode = [from 0xA800 to 0xFFFF];
define region HugeFuncCode = [from 0xA800 to 0xFFFF];
APP中部分代码
重定向
#pragma location=0x0780
uint32_t vector_table_[32];

   vector_table_[0]=0x82008080;
   for(i=1;i<32;i++)
    {
     vector_table_=(0X82000000+0xA800+(i*4));
    }

收藏 评论1 发布时间:2019-2-22 17:38

举报

1个回答
原来的你 回答时间:2019-2-23 13:41:52
可以参考stm8s tinyboot

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版