历史上的今天
今天是:2025年04月02日(星期三)
2020年04月02日 | STM8S bootloader中断向量重定向 INTVEC exceeds maximum size 问题解决
2020-04-02 来源:eefocus
最近重装了系统,然后重装了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版本信息如下:
史海拾趣
|
这是二种目前顶级的100M,1300V高压差分探头,如果你用这此类探头,从参数上来分析,你认为哪款要好点,探头分为标号1和标号2,点评时不要把标号搞错了,凡是参加的人员,我将把国内市埸上的同一等级(P5205为参照点)共六款在不同频率下所测出的波形与参数提 ...… 查看全部问答> |
|
本人有全套车载导航程序,有需要的请 联系我。VC开发,无需控件。QQ:626149468 本人有全套车载导航程序,有需要的请 联系我。底层开发,无需控件。QQ:626149468 能用于WINCE平台。… 查看全部问答> |
|
我用STM32f101c6t6和STM32f103vbt6各做20台仪表,复位电路10K电阻和1UF电容组成复位电路,发现103VBT6有时不能顺利 ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:36 编辑 #ifndef _AD_func #define _AD_func void main(); void SystemInit(void); void AdInit(void); #endif 一个头文件 但是不知道什么意思 … 查看全部问答> |
|
多个pio的中断可以不可以写在一起,这样 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_BRK_BASE | PIO_FR_BASE | PIO_QS_BASE | PIO_EN_BASE, 1); 一个pio写一句?这样是不是很麻烦… 查看全部问答> |




