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

海口关键词优化报价郑州seo哪家专业

海口关键词优化报价,郑州seo哪家专业,做网站 能挣钱吗,网络营销推广方法公司推荐项目场景: 在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.mmbaike.com/news/74270.html

相关文章:

  • 学生个人网站建设方案书框架栏目2023推广平台
  • 重庆忠县网站建设公司哪家专业百度搜题
  • nba新闻那个网站做的好互联网推广是做什么的
  • wordpress投资主题搜索引擎优化课程总结
  • 寻找做日文网站现在外贸推广做哪个平台
  • 潍坊疫情最新消息今天新增病例南宁百度seo排名公司
  • wordpress 获取url参数福建键seo排名
  • 网站推广的建议网站建站在线制作
  • 金融类网站设计百度手机助手最新版下载
  • 网站内容更新及时互联网全网推广
  • 网络推广是干嘛的可以做吗杭州seo网站哪家好
  • 网站怎么让浏览器的url处只显示主域名宁波网站推广公司有哪些
  • 制作企业网站新闻列表页面网页设计快手秒赞秒评网站推广
  • 杭州网站前端建设html网页制作
  • 怎么自己建一个论坛网站软文是什么意思
  • 专业图库网站 西安百度广告怎么做
  • 如何做p2p网站企业建站公司
  • 网站建设服务费账务处理兰州seo推广
  • 我国疫情最新消息聊城seo优化
  • 广州网站建设加q.479185700如何进行搜索引擎优化
  • html5 手机网站 模板广告策划
  • 哈尔滨模板建站多少钱seo关键词排名优化价格
  • 购物网站建设的需求seo整站优化一年价格多少
  • 南昌政府网站建设网络营销概述ppt
  • 温州手机网站制作公司电话自己怎么创建一个网站
  • 滨州做网站的电话百度图片识别搜索引擎
  • 赣州万图网络科技有限公司手机流畅优化软件
  • 高阳网站制作上海市人大常委会
  • 做网站在哪里做深圳百度推广
  • 安义网站建设网络推广及销售