STM8S bootloader中断向量重定向 INTVEC exceeds maximum size 问题解决

本文详细记录了解决IARforSTM8编译时遇到的中断向量溢出错误的过程,包括尝试更新IAR版本、调整中断向量定义等方法,最终在旧版本IAR中找到了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近重装了系统,然后重装了IAR for STM8软件(由于找不到之前的安装软件,就用了剑齿虎开发板提供的IAR安装包),发现以前正常编译的bootloader工程文件,再次编译时出现如下问题:
Error[Lp004]: actual size (0x100) exceeds maximum size (0x80) for block “INTVEC”

在icf文件中,INTVEC块确定定义为0x80大小,这是单片机固定的,不能修改,因此应该是编译产生的中断向量代码超出了实际范围。
define block INTVEC with size = 0x80 { ro section .intvec };

中断向量的重定向的代码如下:

__root const long reintvec[]@".intvec"= 
{ 
    0x82008080,                    0x82000004 + MEMORY_APP_START, 0x82000008 + MEMORY_APP_START, 0x8200000C + MEMORY_APP_START,  
    0x82000010 + MEMORY_APP_START, 0x82000014 + MEMORY_APP_START, 0x82000018 + MEMORY_APP_START, 0x8200001C + MEMORY_APP_START, 
    0x82000020 + MEMORY_APP_START, 0x82000024 + MEMORY_APP_START, 0x82000028 + MEMORY_APP_START, 0x8200002C + MEMORY_APP_START,  
    0x82000030 + MEMORY_APP_START, 0x82000034 + MEMORY_APP_START, 0x82000038 + MEMORY_APP_START, 0x8200003C + MEMORY_APP_START,  
    0x82000040 + MEMORY_APP_START, 0x82000044 + MEMORY_APP_START, 0x82000048 + MEMORY_APP_START, 0x8200004C + MEMORY_APP_START,  
    0x82000050 + MEMORY_APP_START, 0x82000054 + MEMORY_APP_START, 0x82000058 + MEMORY_APP_START, 0x8200005C + MEMORY_APP_START,  
    0x82000060 + MEMORY_APP_START, 0x82000064 + MEMORY_APP_START, 0x82000068 + MEMORY_APP_START, 0x8200006C + MEMORY_APP_START,  
    0x82000070 + MEMORY_APP_START, 0x82000074 + MEMORY_APP_START, 0x82000078 + MEMORY_APP_START, 0x8200007C + MEMORY_APP_START,  
}; 

一开始以为是编译器的库解压不成功(安装IAR后一直提示STM8的lib不能成功解压),后来发现在正常的电脑也是同样的。
后来又以为是编译器把long定位为64bit(因为电脑同时安装了iar for ARM,以为有混乱),导致reintvec数组容量变成256字节,实际把long改成Int,发现编译出来INTVEC所需空间为0xC0,还是超过0x80。最后完全屏蔽reintvec数组定义就可以了。因此推测是编译没有把reintvec覆盖默认的中断向量,而是叠加上去了。

又从IAR官网下载了最新的IAR for STM8(3.x版本),发现还是相同问题。

最后安装了一个较旧的版本,OK搞定,IAR版本信息如下:
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值