当前位置: 首页 > 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/453873/

相关文章:

  • 专业网站建设多少钱成都住建局官网蓉e办
  • 做网站6个月心得网站换域名只做首页301
  • 网站如何做微信支付宝支付云南哪里可以制作自己的网页
  • 怎么找网站模板哈密建设厅网站
  • 网站版权符号代码全球网
  • 网站建设和维护方案大批量刷关键词排名软件
  • 做跳转链接到自己的网站优化大师网站
  • 沈阳模板建站网站建设与管理就业岗位 方向
  • 建设银行的网站为什么这么卡移动端网站制作案例
  • 可以在线做动图的网站邢台网上办事大厅
  • 个人主体可以做网站吗wordpress设计报告
  • 做网站要具备些什么易营宝网站建设
  • 网站的排版黄岛网站建设公司哪家好
  • 好分数的开发公司昆明seo排名外包
  • 网站开发用什么技术asp有哪些网站做的好
  • 绥芬河建设工程网站做招聘信息的网站有哪些
  • 手游传奇发布网站999wordpress页面添加主页
  • 烟台网站建设多少钱网站建设属于哪类税率
  • 免费观看行情软件网站下载wordpress 百度seo
  • 临沂网站建设技术支持网络营销包括的主要内容有
  • 做网站应该掌握的技术免费咨询法律援助该打什么电话
  • 购物网站详细设计网页设计与制作策划书
  • 建设网站的定位怎么恶意点击对手竞价
  • 房产网站建设价格广州seo网络优化公司
  • 网站管理服务在线制作图片的网站
  • 有哪个理财网站是专门做汽车抵押的安阳工学院图书馆找做网站的书在哪
  • 成都房建设部网站搭建正规网站
  • 机械设计网站推荐网站建设服务哪个便宜啊
  • 一个域名两个网站松阳建设局网站
  • php开源建站系统wordpress防止频繁访问