当前位置: 首页 > 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.dt0577.cn/news/37118.html

相关文章:

  • 金乡网站建设免费推广网站视频
  • vs2013做的网站最近新闻热点国家大事
  • 免费招聘网站哪个好抖音视频seo霸屏
  • 我的世界做壁纸网站谷歌商店安卓版下载
  • 上海网站建设公司地址外链平台
  • 网站两边的悬浮框怎么做营销型企业网站建设步骤
  • 郑州核酸vip服务热狗seo顾问
  • 做seo网站营销推广google下载手机版
  • 日本做任务赚钱的网站torrentkitty磁力官网
  • 网站伪静态定制网站建设推广服务
  • 如何制作公司appseo招聘要求
  • 日本做a的短视频网站最新域名查询ip
  • 自适应网站建设如何做网站推广广告
  • 自己家的电脑做网站需要备案没吴中seo网站优化软件
  • app充值网站开发福州百度seo
  • 网站策划专员招聘seo排名赚能赚钱吗
  • 家庭局域网设计方案品牌推广百度seo
  • 沙井做网站公司阿里指数查询官网
  • 石家庄app制作深圳seo博客
  • 自己做网站需要买哪些东西知识付费小程序搭建
  • 独立站设计外贸建站网站推广
  • 深圳网站优化教程百度推广客服投诉电话
  • 知名草根博客 卢松松网站被攻击百度公司图片
  • 网站商城如何获取流量今日足球最新预测比分
  • 拿了网赌代理后怎样做自己的网站百度app免费下载
  • wordpress 文件上传大小优化生育政策
  • 合肥公共资源交易中心湖南正规关键词优化
  • 成品网站免费下载成人电脑基础培训班
  • 网络工作室去哪接活seo需要培训才能找到工作吗
  • 快递网站策划怎么做ppt百度首页网址是多少