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

最近重装了系统,然后重装了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版本信息如下:
STM8S bootloader中断向量重定向 INTVEC exceeds maximum size 问题解决_第1张图片

你可能感兴趣的:(STM8)