CH32V IAP备忘

本文介绍了CH32V307单片机中IAP和APP的内存分配区别,重点讲解了如何在IAP和APP间通过中断进行程序切换。开发者需在LD文件中设置正确的ORIGIN和LENGTH,并利用中断处理机制在复位后自动跳转至APP。
摘要由CSDN通过智能技术生成

以CH32V307为例,LD文件, IAP和APP此处有区别,其它地方相同
MEMORY// (iap)
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 288K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
}

MEMORY APP 主要就是ORIGIN 起始点的区别,相当于KEIL中选择起始地址的设置
{
FLASH (rx) : ORIGIN = 0x00005000, LENGTH = 228K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
}
编译器会自动加上0X8000000的绝对地址的偏移,上电后程序先运行IAP,然后跳转到APP,跳转部分如下
int main(void)
{
Delay_Init();
USART_Printf_Init(115200);
printf(“SystemClk:%d\r\n”,SystemCoreClock);
if (PA0_Check() == 0)
{
printf(“jump APP\r\n”);
NVIC_EnableIRQ(Software_IRQn);
NVIC_SetPendingIRQ(Software_IRQn); //---------跳转APP实际由中断完成如下中断函数
while(1);
}
else
{此处添加IAP的代码
}
}

void SW_Handler(void) {
// USART_Printf_Init(115200);
__asm(“li a6, 0x5000”);-------------此处地址一定要和LD文件中对应上
__asm(“jr a6”);
while(1);
}

从以上来看,IAP中是允许使用中断的哈,那APP部分就设好LD就行了,正常的去写程序就OK了,执行复位,就又自然回到IAP了。

可以参考这篇贴文
https://www.wch.cn/bbs/thread-110504-1.html

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值