Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
qboot
5
qboot使用经历小结,以及一个非常疑惑的点请教网友
发布于 2022-02-21 10:52:09 浏览:3320
订阅该版
2022.2.21 qboot软件包如何使用,如果你有sfud软件包、fal软件包、RTThread官方bootloader的使用经验,那么转而使用qboot,参考下下面的文章就可以了。 rt thread studio使用QBOOT和片外flash实现OTA升级 https://blog.csdn.net/qq_25186745/article/details/113512172 文章里使用的是rt studio这个IDE,我用的是env,这不影响。 小结下我遇到的问题, 我开发时总是在keil内直接烧录qboot工程和应用程序工程,遇到的问题: 1. 遇到几次qboot无法启动app的情况 2. OTA升级时,擦除app成功,但是在写入app时,写到75%的时候,出错了,根据软件包的串口打印信息定位了下,是解压出错。 为了解决这个问题,我的尝试: 1.尝试更换压缩方式由quicklz切换为fastlz,实测还是失败; 2.尝试在keil内全片擦除FALSH,要注意观察,有时擦除失败,就再全片擦除一次。如下图, ![image.png](https://oss-club.rt-thread.org/uploads/20220221/8a4018e49902613329f60f282722a22d.png.webp) 3.烧录qboot工程,让qboot跑起来,使用fal软件包的shell指令对各fal分区进行读写测试,如下图, ![image.png](https://oss-club.rt-thread.org/uploads/20220221/92ba7ce79b9b7e09616fd2ca08fc4d1c.png.webp) 注意事项如下图, ![image.png](https://oss-club.rt-thread.org/uploads/20220221/b8a2804cdfa6223cc868fece4f1b4cb3.png.webp) 经过步骤2 3 的折腾,原来不能启动app, 偶偶折腾能启动app应用程序但是OTA又不行的情况,都得到了解决。 大工告成了,后续我又在qboot和app应用程序内加入了看门狗操作,经过测试,各功能也顺利运行。 于是我又想在app应用程序的main线程内加一句RT_ASSERT(0),我想做个测试,跑到这句代码时,程序会死机,看门狗应该会复位单片机。 于是我就多写了一个下图函数,测试看门狗能否成功复位。 ![image.png](https://oss-club.rt-thread.org/uploads/20220221/5d18b2450bcf78950fc75366a774c087.png.webp) 问题都在上图了,qboot又无法启动app了, ![image.png](https://oss-club.rt-thread.org/uploads/20220221/95a699442f02cc93ad59612538543148.png) 对上述问题的分析,如果是多定义了一堆全局变量,那我可能去关注下ram消耗。但是实测函数内的这句static char i=0; 是不会影响qboot启动app的。 一旦加上i++;这句代码,就不行了。 非常疑惑,请教大神。 . ================================================================= 2022.2.22(今天够2的哈! 两百年以后就是全2日了,可惜我不能再活两百年! 向天再借五百年!) 刚用RTThread的官方bootload来测试了一下我的app程序,不仅可以启动,app里甚至定义了一个1K的全局数组并使用,都是正常的。 PS:虽然我使用的官方bootloader的分区表app大小和download大小,与qboot内的分区表不一样,但是app的地址是一样的。 经过这么一对比,看来问题是出在bootload身上。 . ===================================================================== 2022.2.28 最近把这块功能调试顺利了,但也没具体总结出来到底是什么原因... 还是说一下注意事项,小结下经验吧,供自己备忘,供大家参考。 1. bootloader和app内的fal版本,最好保持一致,最好使用同一个RTThread版本。 2. 裁剪bootloader,参考博文 https://blog.csdn.net/victor_zy/article/details/122844572 我给bootloader预留的flash空间是128KB,之前实际占用大小是90KB,参考上述博文裁剪后,现在是51.7KB. ![image.png](https://oss-club.rt-thread.org/uploads/20220228/f9528d158c6ae4d4c0485811a84c4709.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20220228/d4991cd82b10ef30de4beb0f9bb464d8.png.webp) 3.将bootloader分区和app分区隔开一点,不要紧挨着。(这点我实际没尝试,我目前分区表里的bootloader分区范围和app分区范围,并没有隔开。但是我觉得这方法有一定价值) 4.本次的问题,应该还是处在bootloader身上。
查看更多
crystal266
2022-02-22
嵌入式
可以试试这样看能不能查到出现问题的原因。 1. 查看map文件,看看定义的全局变量或者静态变量的位置。 2. bootload 跳转到 app 使用的是函数指针的方式,直接跳转到绝对地址进行执行。在你的 jump_to_app 的函数中,使用单步调试跟踪一下 app_func 的地址是否发生了改变,如果没有发生改变,数值正确并且运行到了 **app_func();//Jump to application running** 这一行就没有问题了。如果没有运行到这一行看看是卡在哪个位置了,或者是不是 app_func 的值改变了,不是预设的值导致跳转位置错了。 ```c void qbt_jump_to_app(void) { typedef void (*app_func_t)(void); u32 app_addr = QBOOT_APP_ADDR; u32 stk_addr = *((__IO uint32_t *)app_addr); app_func_t app_func = (app_func_t)(*((__IO uint32_t *)(app_addr + 4))); if ((((u32)app_func & 0xff000000) != 0x08000000) || (((stk_addr & 0x2ff00000) != 0x20000000) && ((stk_addr & 0x2ff00000) != 0x24000000))) { LOG_E("No legitimate application."); return; } rt_kprintf("Jump to application running ... !!!!!\n"); rt_thread_mdelay(200); __disable_irq(); HAL_DeInit(); for(int i=0; i<128; i++) { HAL_NVIC_DisableIRQ(i); HAL_NVIC_ClearPendingIRQ(i); } SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; HAL_RCC_DeInit(); __set_CONTROL(0); __set_MSP(stk_addr); app_func();//Jump to application running LOG_E("Qboot jump to application fail."); } ```
2
个回答
默认排序
按发布时间排序
红枫
认证专家
2022-02-21
这家伙很懒,什么也没写!
关注下各线程堆栈使用情况,看是否有溢出可能
撰写答案
登录
注册新账号
关注者
1
被浏览
3.3k
关于作者
大话西游2018
这家伙很懒,什么也没写!
提问
36
回答
40
被采纳
1
关注TA
发私信
相关问题
1
qboot使用ymodem上传固件升级失败。
2
qboot ymodem上传固件后release失败
3
使用qboot制作BootLoader,下载APP后不能跳转执行
4
使用RTT 跳转进入app区后,无法调度
5
QSPI FLASH W25Q64,在进入映射模式后,如何退出?
6
制作极简版Bootloader过程中遇到无法解决的错误
7
qboot使用中程序跳转不成功
8
如何将qboot裁剪到通用Bootloader的32k大小?
9
qboot跳转app后卡在app的系统调用处,有人碰到过吗?
10
使用RTStudio添加qboot组件保存后,软件包没有显示,一直添加不了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
组件 lwip v2.0.3 版本使用 netdev网卡的 ping 功能
2
简单两步配置RTT源码阅读环境 vsc+clangd
3
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
4
LVGL使用字库IC芯片显示中文
5
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部