当前位置: 首页 > news >正文

嘉兴网站建设平台推广之家官网

嘉兴网站建设平台,推广之家官网,哪个电商平台好做,ps 怎么做网站项目场景: 在OTA中,FLASH通常被划分为以下几种类型 bootloaderiapappbootloaderappapp保存区bootloaderapp1app2 不同的分区方式有不同的有点,但是共同点都是需要执行分区跳转 问题1描述 但在分区跳转过程中遇到过使用不同的编译器不能跳转…

项目场景:

在OTA中,FLASH通常被划分为以下几种类型

  • bootloader+iap+app
  • bootloader+app+app保存区
  • bootloader+app1+app2
    不同的分区方式有不同的有点,但是共同点都是需要执行分区跳转

问题1描述

但在分区跳转过程中遇到过使用不同的编译器不能跳转的情况,例如在keil中使用v5编译器可以正常跳转,但是使用v6编译器就无法跳转了。

void JumpToCode(uint32_t addr) {uint32_t *inputAddr = (uint32_t *)addr;uint32_t jumpAddr  = *(uint32_t *)(addr + 4);if ((*inputAddr & 0x2FFE0000) == 0x20000000) {__set_MSP(*inputAddr);((void (*)(void))jumpAddr)();}
}

问题1原因分析:

发现v6和v5的编译优化不一样,v6编译执行__set_MSP后,跳转地址变量jumpAddr被释放,就不能正确跳转了。把地址相关的变量声明为全局变量就可以正常跳转了

uint32_t *inputAddr;  // !声明为全局变量,防止执行__set_MSP后,变量被释放
uint32_t jumpAddr;    // !设置MSP后改变了栈底地址,导致原来的局部变量范围出了新栈的空间,被系统释放void JumpToCode(uint32_t addr) {inputAddr = (uint32_t *)addr;jumpAddr  = *(uint32_t *)(addr + 4);if ((*inputAddr & 0x2FFE0000) == 0x20000000) {__set_MSP(*inputAddr);((void (*)(void))jumpAddr)();}
}

问题2描述

裸机时可以正常跳转,但是开启freertos后分区无法相互跳转,度娘说要跳转前需要关闭全局中断、关闭外设。我采用的分区方式是bootloader+iap+app,boot跳转前关闭中断和外设后,跳转freertos的app分区没有问题,而跳转裸机的iap分区时无法运行,发现卡在初始化中。为什么跳freertos就ok呢?最后发现MX_FREERTOS_Init的时候自动把中断打开了,原来跳转后在main函数中需要重新开启中断,在其他所有裸机的main函数的while前添加__set_FAULTMASK(0)开启中断即可,freertos不需要。修改后的跳转代码如下:

uint32_t *inputAddr;  // !声明为全局变量,防止执行__set_MSP后,变量被释放
uint32_t jumpAddr;    // !设置MSP后改变了栈底地址,导致原来的局部变量范围出了新栈的空间,被系统释放void JumpToCode(uint32_t addr) {inputAddr = (uint32_t *)addr;jumpAddr  = *(uint32_t *)(addr + 4);if ((*inputAddr & 0x2FFE0000) == 0x20000000) {HAL_RCC_DeInit();HAL_DeInit();__set_FAULTMASK(1);__set_MSP(*inputAddr);((void (*)(void))jumpAddr)();}
}

问题3描述

boot可以跳iap和app了,但是!但是app无法跳iap,最后发现FREERTOS运行在PSP模式,而裸机运行在MSP模式,尝试跳转前设定MSP就正常了,添加__set_CONTROL(0),最终的跳转如下:

uint32_t *inputAddr;  // !声明为全局变量,防止执行__set_MSP后,变量被释放
uint32_t jumpAddr;    // !设置MSP后改变了栈底地址,导致原来的局部变量范围出了新栈的空间,被系统释放void JumpToCode(uint32_t addr) {inputAddr = (uint32_t *)addr;jumpAddr  = *(uint32_t *)(addr + 4);if ((*inputAddr & 0x2FFE0000) == 0x20000000) {HAL_RCC_DeInit();HAL_DeInit();__set_FAULTMASK(1);__set_CONTROL(0);__set_MSP(*inputAddr);((void (*)(void))jumpAddr)();}
}
http://www.hrbkazy.com/news/6006.html

相关文章:

  • 学做网站设计爱站网官网关键词
  • dw做的静态网站怎么分享链接建站
  • 今日世界军事新闻seo 专业
  • 成武城乡住房建设局网站网站建设与管理就业前景
  • 网站k网络软营销
  • 用花瓣网站上的图片做游戏行吗策划是做什么的
  • 社保减员要怎么做 国税局网站网络推广平台代理
  • 规划网站站点需要遵循哪些原则沈阳seo团队
  • 内网网站开发报价seo网站推广有哪些
  • 太原市手机微网站建设碉堡了seo博客
  • 成品网站建设咨询软文标题
  • ukidc做电影网站营销策划方案怎么写?
  • 搜索优化网络推广宁波受欢迎全网seo优化
  • 更换网站logo软文代发价格
  • 如何逐步提升网站权重成人速成班有哪些专业
  • 做试卷挣钱的网站什么是网站优化
  • 小程序开发一个多少钱啊本地关键词智能优化排名
  • 网站开发mvc架构网文网站排名
  • 网站要学什么seo实训报告
  • 外贸做的亚马逊网站是哪个新疆疫情最新情况
  • wordpress漏洞利用工具优化关键词方法
  • 如何免费学校建网站百度推广账号出售
  • 网络系统管理学什么二十条优化措施全文
  • 北京营销策划公司英文seo
  • 建设银行网站查余额查询石家庄seo公司
  • 上海网站制作工具重庆百度seo整站优化
  • php网站开发视频教学营销手段有哪些方式
  • 河南建设厅网站网站开发工具
  • 徐州做网站哪个好建立一个企业网站需要多少钱
  • 漳州做网站建设的公司昆山网站制作哪家好