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版本信息如下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STM8S BootloaderSTMicroelectronics公司为其STM8S系列微控制器设计的一种引导程序。它的作用是在系统启动时,加载和执行用户应用程序代码。与常规的应用程序代码不同,引导程序位于芯片的内部Flash存储器中,并且在芯片上电复位时自动执行。 STM8S Bootloader具有以下主要功能: 1. 芯片编程:它允许通过串口或其他通信接口将用户应用程序代码加载到芯片的Flash存储器中。用户可以使用ST提供的专用软件工具或第三方工具来进行编程。 2. 固件更新:在芯片运行时,可以通过引导程序进行固件更新,以便修复错误、添加新功能或改进性能。这样,用户不需要使用额外的编程器设备即可更新固件。 3. 引导模式切换:引导程序还允许用户通过特定的硬件引脚或其他方式切换到引导模式,以便在应用程序代码出现问题时可以新加载或更新固件。 4. 应用程序跳转:一旦用户应用程序代码加载到Flash存储器中,引导程序负责正确地跳转到应用程序的入口点,并使其开始正常的执行流程。 使用STM8S Bootloader,用户可以方便地进行固件更新和调试,而无需专用的硬件编程器。这为开发人员提供了更高的灵活性和便利性,同时也提升了产品的可维护性和升级性。STM8S Bootloader在各种应用领域中广泛应用,包括工业自动化、汽车电子、家电和消费电子等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值