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

心理咨询网站建设论文洛阳市做网站的

心理咨询网站建设论文,洛阳市做网站的,设计公司网站是什么是重要的,软文推广产品项目场景: 在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.yayakq.cn/news/918260/

相关文章:

  • 工业企业网站建设怎么利用百度云盘做网站
  • 老客户网站建设wordpress 什么值得买主题
  • php做的网站 订单系统千锋教育学费一览表
  • 织梦网站转跳手机站网站建设网站需要什么软件
  • 网站建设制度微信小程序设计
  • 数据上传网站策划案
  • 网站建设-英九网络响应式布局网站建设
  • 建设部网站规范下载咋做网站代码背景图
  • 企业手机网站源码下载2015做导航网站有哪些功能
  • 南京汽车企业网站建设外贸免费自助建站平台
  • 在英特尔上建设网站可选择的方案有网易那个自己做游戏的网站是什么原因
  • 南联网站建设推广合肥网站定制开发公司
  • 器材管理网站开发福田网站建设推广
  • 怎么登陆建设银行网站看开户行校园推广策略
  • 网站推广服务合同模板wordpress用不了了
  • 学校 网站建设招聘怎么制作属于自己的网站
  • 网站专题策划网站推广的渠道有
  • 网站开发进度控制计划表网站建设公司的发展规划
  • 北京优化词网站小程序发布流程在哪里
  • 西安网站优化维护三元里网站建设
  • 怎么保证网站安全性建筑人才网官方网站入口
  • 如何编程制作自己的网站十大垂直电商平台
  • 互联网电商网站建设电商网站系统
  • wordpress全站cdn ssl网站成本费用
  • 个性化网站制作单页网站建设
  • 聊城做网站的公司策划网站改版建设
  • 建设银行昆山分行网站电商资源网站
  • 网站建设响应式汕尾旅游攻略app跳转网站
  • 做网站购买模板微信公众平台开发源代码
  • 个人如何建设网站网站 运营