踩坑STM8s IAP——Bootloader与App互相跳转

背景介绍:
开发环境 STVD,芯片型号STM8S208C8T6
很多步骤网上都讲了,但是有一个重点步骤 - 工程配置没讲,让我摸索了好久

按STM8S208xx芯片手册指导
在这里插入图片描述

我 分别用两个不同工程各自实现IAP和APP功能,由于是小系统,空间还比较充足,计划用2k空间(0x8000 - 0x9FFF)来存放IAP,剩余的空间(0xA000 - 0x17FFF)存放APP。

其中重点设置这两个工程的存放地址,和编写不同的中断向量表
IAP部分:
工程配置截图:
1、存储IAP中断向量表起始地址(0x8000开始 128个字节)
2、存储IAP代码区域起始地址
3、在STVD->Project->Settings->Linker选项卡下,选择目录Category下的Input,在Ram下新建Section,Option填-ic,表示可移至RAM。
在这里插入图片描述
IAP因为只用于刷写flash,尽量不用中断,中断向量表可以上网下一个,我这里也贴一份我的吧,然后记得在某个头文件做个宏定义:

#define APP_START_ADDR				0x00A000ul

并在stm8_interrupt_vector.c把头文件包含进去,比如#include “Includes.h”

/*	Redirected interrupt vector table
 *	Copyright (c) 2008 STMicroelectronics
 */

#include "Includes.h"

typedef void @far (*interrupt_handler_t)(void);

struct interrupt_vector {
   
	unsigned char interrupt_instruction;
	interrupt_handler_t interrupt_handler;
};
#if 0
@far @interrupt void NonHandledInterrupt (void)
{
   
	/* in order to detect unexpected events during development,
	   it is recommended to set a breakpoint on the following instruction
	*/
	return;
}
#endif

extern void _stext();     /* startup routine */
struct interrupt_vector const UserISR_IRQ[32] @ APP_START_ADDR;

//redirected interrupt table
struct interrupt_vector const _vectab[] = {
   
    {
   0x82, (interrupt_handler_t)_stext}, /* reset */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 1)}, /* trap  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 2)}, /* irq0  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 3)}, /* irq1  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 4)}, /* irq2  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 5)}, /* irq3  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 6)}, /* irq4  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 7)}, /* irq5  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 8)}, /* irq6  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+ 9)}, /* irq7  */
    {
   0x82, (interrupt_handler_t)(UserISR_IRQ+10)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值