首页 > 其他分享 >hc32f4a0 bootloader跳转app后中断异常

hc32f4a0 bootloader跳转app后中断异常

时间:2023-10-24 10:35:12浏览次数:37  
标签:__ uint32 app SCB FPU VTOR hc32f4a0 跳转 void

起因

从HC32F460上移植bootloader到HC32F4A0上后,应用程序无法正常使用。主要代码如下:

void execute_user_code(uint32_t appxaddr)
{
  uint32_t JumpAddress;
  sram_size = (*(uint32_t *)appxaddr) -0x1FFF8000;//different sram adress with other MCU
  if (sram_size <= 0x2F000)//栈地址合法
  {
    LogPrint("[run app]\n");
    __disable_irq();
    JumpAddress = *(__IO uint32_t *)(appxaddr + 4);
    jump2app = (iapfun)JumpAddress;
    __set_MSP(*(__IO uint32_t *)appxaddr);
    
    for(int Cnt = 0; Cnt < Int143_IRQn; Cnt++)
   {
     enIrqResign(Cnt);
    }//取消注册所有中断
    SCB->VTOR = ((uint32_t) APP_CODE_ADDR & SCB_VTOR_TBLOFF_Msk);//重设向量表
    __enable_irq();//使能中断
    jump2app();
  }
  else
  {
    LogPrint("[run ota]\n");
    is_upgrade_firmware = true;//需要升级
  }
}

定位到systick_handler中断始终无法执行。必须将重设向量表放到APP中才能正常启动。
SCB->VTOR = ((uint32_t) APP_CODE_ADDR & SCB_VTOR_TBLOFF_Msk);//重设向量表

原因

对比HC32460和HC32F4A0的启动代码后,发现以下区别:

HC32F460

void SystemInit(void)
{
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 20) | (3UL << 22)); /* set CP10 and CP11 Full Access */
#endif

    SystemCoreClockUpdate();
}

HC32F4A0

void SystemInit(void)
{
    /* FPU settings */
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 20) | (3UL << 22)); /* set CP10 and CP11 Full Access */
#endif
    SystemCoreClockUpdate();
#if defined (ROM_EXT_QSPI)
    SystemInit_QspiMem();
#endif /* ROM_EXT_QSPI */
    /* Configure the Vector Table relocation */
    SCB->VTOR = VECT_TAB_OFFSET;    /* Vector Table Relocation */
}

区别在于F4A0初始化时,手动设置了SCB-VTOR的值。

标签:__,uint32,app,SCB,FPU,VTOR,hc32f4a0,跳转,void
From: https://www.cnblogs.com/USTHzhanglu/p/17784138.html

相关文章

  • uniapp项目引入uView-ui
    通过npm下载//如果您的根目录没有package.json文件的话,请先执行如下命令://npminit-ynpminstalluview-ui//更新//npmupdateuview-ui配置步骤1.引入uView主JS库在项目根目录中的main.js中,引入并使用uView的JS库,注意这两行要放在importVue之后。//main.j......
  • [924] ArcGIS Pro Mapping Module - arcpy.mp
    ref:Introductiontoarcpy.mpref:Gettingstartedwitharcpy.mptutorialref:Guidelinesforarcpy.mpref:Alphabeticallistofarcpy.mpfunctionsref:Alphabeticallistofarcpy.mpclassesref:SQLreferenceforqueryexpressionsusedinArcGISThefol......
  • uboot配置usbhost及代码初步分析--Apple的学习笔记
    一,前言之前uboot没配置过usb,但是现在uboot基于DM模型基本和linuxdriver类似了。那么为了学习linuxdriver,我可以先学习uboot来做技术储备也是一样的。而且usb在uboot上应该也有用武之地,所以有必要进行刻意练习。二,分析1,之前对发现driver用了wraper的方式来打包进行绑定,我理解唯一......
  • Niushop中uniapp的访问接口
    Niushop中uniapp的访问接口直接上代码 this.$api.sendRequest({ url:'/pintuan/api/order/isbuy', success:res=>{ console.log(res) if(res.code==1){ //跳转VIP } }, fail(){ //联网失败的回调 } });......
  • 一文详解|支付宝小程序跳转(超详细版)
    开发过程中经常遇到支付宝小程序跳转的问题,这里总结一下支付宝小程序跳转的常见场景和方式,希望可以对大家有所帮助。话不多说,上干货!     支付宝小程序跳转的三种行为支付宝小程序跳转可以拆分为三种行为,即:外部跳转支付宝小程序支付宝小程序内部页面之间跳转......
  • uniapp视频封面层级问题
    1、app端建议使用视频的第一帧作为视频封面,自定义封面遮罩无法显示,当封面图是白色背景时看不到视频播放按钮。2、h5直接使用封面属性可正常展示。 <!--#ifdefAPP-PLUS--><!--app使用视频的第一帧作为封面,自定义封面没显示遮罩,浅色封面看不到按钮-->......
  • 同城服务app有哪些功能
     随着移动互联网的普及,同城服务app成为了人们生活中不可或缺的一部分。同城服务app可以为人们提供各类便民服务,如商品购物、社区互动、线下服务等,使得人们的生活更加便捷和高效。本文将介绍同城服务app开发的的一些常见功能。用户中心用户中心是APP的基础设施之一,它提供了个......
  • swagger配置后,系统无法启动,报Failed to start bean 'documentationPluginsBootstrappe
    swagger与springboot版本不兼容解决方案:1.swagger依赖版本过高,可以降低版本。2.在swagger配置类的application.yml配置文件中添加如下内容:spring:mvc:pathmatch:matching-strategy:ant_path_matcher我使用的方法二,完美解决。......
  • 【已应用】落地项目中使用的JdbcTemplate-包含application.properties配置 【JdbcTemp
    JdbcTemplatedemo2:是某落地项目中使用的JdbcTemplate。是来检测JdbcTemplate合规性。包含JdbcTemplate封装、sql操作、application.properties数据连接配置等。GitLab项目地址:liuguiqing/JdbcTemplateDemo2·GitLab相关截图:   ......
  • CSAPP 第一章 笔记
    硬件组成总线I/O设备键盘,鼠标,显示器,磁盘...主存处理器(CPU)寄存器hello程序的生命周期源文件hello.c文本文件:位序列字节:8个位为一组ASCII码可执行目标文件Unix:通过编译器驱动程序完成编译系统预处理器‘#’,hello.i编译器‘main’,hello.s汇编器翻译成......