Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
app
bootload跳转到app
Bootloader
10
hc32f460自己写了个bootloader,rt-thead app就无法运行哪位大佬知道问题点吗
发布于 2023-06-15 14:38:38 浏览:1473
订阅该版
第一步,自己写了bootloader,然后用华大官方库写了一个APP,是没有问题的,SCB->VTOR中断向量已经偏移,华大的偏移函数在SystemInit函数中,SystemInit是在S,汇编文件中调用的,然后才会去到main函数.才会执行rtthread_startup函数。翻了好久rt-thread的源码,也没找到有重复修改SCB->VTOR的地方,特地来论坛求助。 1:不用rt-thread写的app没有问题的; 2:把rt-thread源码编译进来,就跑不了了; 3:取消APP程序,不使用跳转应用程序,不偏移中断向量,带rt-thread的程序是没有问题的,只是出在了偏移rom地址后,无法运行 4:app跳转方式,也不能用debug看在哪里跑错了.
查看更多
红枫
认证专家
2023-06-15
这家伙很懒,什么也没写!
app除须“修改连接配置文件中的Flash起始地址”和“重映射中断向量”外,还须关闭ICG部分参与编译,即要配置DDL_ICG_ENABLE为DDL_OFF ```c #define DDL_ICG_ENABLE (DDL_OFF) ```
3
个回答
默认排序
按发布时间排序
mii
2023-06-16
这家伙很懒,什么也没写!
我使用MDK分散加载文件如下配置,偏移地址是0x00020000 ```c ; **************************************************************** ; Scatter-Loading Description File ; **************************************************************** LR_IROM1 0x00020000 0x00058000 { ; load region size_region ER_IROM1 0x00020000 0x00058000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_IRAM1 0x1FFF8000 0x0002F000 { ; RW data .ANY (+RW +ZI) } } ``` app偏移自己写就是了,参考这个,地址根据自己偏移地址就好了。 ```c /** * Function ota_app_vtor_reconfig * Description Set Vector Table base location to the start addr of app(RT_APP_PART_ADDR). */ static int ota_app_vtor_reconfig(void) { //#define NVIC_VTOR_MASK 0x3FFFFF80 /* Set the Vector Table base location by user application firmware definition */ SCB->VTOR = RT_APP_PART_ADDR ; return 0; } INIT_BOARD_EXPORT(ota_app_vtor_reconfig); ``` boot程序配置,可以参考楼上写的QBOOT代码,其中跟平台相关配置我是这样处理的 ```c /* * qboot_stm32.c * * Change Logs: * Date Author Notes * 2020-08-31 qiyongzhong first version */ #include
#define CHIP_FAMILY_HC32 #define IAP_PERIPH_WP (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \ LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM) #ifdef CHIP_FAMILY_HC32 #include
#include
#include
#include
//#include "hc32_ddl.h" //#define QBOOT_APP_RUN_IN_QSPI_FLASH //#define QBOOT_DEBUG #define QBOOT_USING_LOG #define DBG_TAG "Qboot" #ifdef QBOOT_DEBUG #define DBG_LVL DBG_LOG #else #define DBG_LVL DBG_INFO #endif #ifdef QBOOT_USING_LOG #ifndef DBG_ENABLE #define DBG_ENABLE #endif #ifndef DBG_COLOR #define DBG_COLOR #endif #endif #include
#ifdef QBOOT_APP_RUN_IN_QSPI_FLASH static void qbt_qspi_flash_init(void) { //waiting realize } void qbt_jump_to_app(void) { qbt_qspi_flash_init(); //waiting realize } #else /** * @brief Systick De-Initialize. * @param None * @retval None */ static void SysTick_DeInit(void) { SysTick->CTRL = 0UL; SysTick->LOAD = 0UL; SysTick->VAL = 0UL; } /** * @brief IAP clock De-Initialize. * @param None * @retval None */ void IAP_CLK_DeInit(void) { CLK_SetSysClockSrc(CLK_SYSCLK_SRC_MRC); /* Switch driver ability */ (void)PWC_HighPerformanceToLowSpeed(); /* Set bus clk div. */ CLK_SetClockDiv(CLK_BUS_CLK_ALL, (CLK_HCLK_DIV1 | CLK_EXCLK_DIV1 | CLK_PCLK0_DIV1 | CLK_PCLK1_DIV1 | CLK_PCLK2_DIV1 | CLK_PCLK3_DIV1 | CLK_PCLK4_DIV1)); CLK_XtalCmd(DISABLE); CLK_PLLCmd(DISABLE); /* sram init include read/write wait cycle setting */ SRAM_SetWaitCycle(SRAM_SRAM_ALL, SRAM_WAIT_CYCLE0, SRAM_WAIT_CYCLE0); SRAM_SetWaitCycle(SRAM_SRAMH, SRAM_WAIT_CYCLE0, SRAM_WAIT_CYCLE0); /* 0 cycles */ GPIO_SetReadWaitCycle(GPIO_RD_WAIT0); /* flash read wait cycle setting */ EFM_SetWaitCycle(EFM_WAIT_CYCLE0); } static void qbt_reset_periph(void) { // #define ENABLE_FCG0_REG_WRITE() (M4_MSTP->FCG0PC = 0xa5a50001u) // #define DISABLE_FCG0_REG_WRITE() (M4_MSTP->FCG0PC = 0xa5a50000u) // #define DEFAULT_FCG0 (0xFFFFFAEEul) // #define DEFAULT_FCG1 (0xFFFFFFFFul) // #define DEFAULT_FCG2 (0xFFFFFFFFul) // #define DEFAULT_FCG3 (0xFFFFFFFFul) // ENABLE_FCG0_REG_WRITE(); // M4_MSTP->FCG0 = DEFAULT_FCG0; // M4_MSTP->FCG1 = DEFAULT_FCG1; // M4_MSTP->FCG2 = DEFAULT_FCG2; // M4_MSTP->FCG3 = DEFAULT_FCG3; // DISABLE_FCG0_REG_WRITE(); SysTick_DeInit(); // IAP_CLK_DeInit(); /* Peripheral registers write protected */ EFM_FWMC_Cmd(DISABLE); LL_PERIPH_WP(IAP_PERIPH_WP); } 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) != 0x00000000) || (((stk_addr+0x00010000) & 0x2ff00000) != 0x20000000)) { LOG_E("No legitimate application."); return; } rt_kprintf("Jump to application running ... \n"); rt_thread_mdelay(200); __disable_irq(); qbt_reset_periph(); for(int i=0; i<144; i++) { NVIC_DisableIRQ(i); NVIC_ClearPendingIRQ(i); //enIrqResign(i); } // SysTick->CTRL = 0; // SysTick->LOAD = 0; // SysTick->VAL = 0; // CLK_MrcCmd(Enable); // CLK_SetSysClkSource(ClkSysSrcMRC); // EFM_Unlock(); // EFM_SetLatency(0); // EFM_Lock(); // __set_CONTROL(0); __set_MSP(stk_addr); app_func();//Jump to application running LOG_E("Qboot jump to application fail."); } #endif #endif ``` 跳转时注意时钟切换问题,我是发现在boot跳转前把时钟切换到内部8M,在app切换成外部时钟时,尽管已经检测时钟稳定标志,但实际切换运行不起来。所以我BOOT直接不切换了,直接把BOOT跟APP时针配置得一样。
心无旁骛
2023-11-02
这家伙很懒,什么也没写!
你好,你解决了这个问题吗,我想参考下,谢谢
撰写答案
登录
注册新账号
关注者
0
被浏览
1.5k
关于作者
nczywq
这家伙很懒,什么也没写!
提问
1
回答
1
被采纳
0
关注TA
发私信
相关问题
1
Linux下通过USBTinyISP为Arduino开发板烧?写Bootloader
2
请教修改NVIC后RTT调度函数失效的问题[已解决 bootloader中打开了不必要的中断]
3
进入bootloader的方式探讨
4
求助:IAP里的APP使用的RTT,跳转后出错。[已解决]
5
有没有人在STM32F103上用UART IAP跑过RT-Thread?
6
想做网口的IAP远程升级,不知可不可行
7
IAP问题
8
[已解决]请教基于RTT的IAP程序切换到应用程序不成功的问题(基于STM32F4)?
9
stm32f4xx-----IAP移植APP程序需要注意的地方
10
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
推荐文章
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
RT-Thread项目助手v0.2.0 - 支持Env Windows
2
RttreadV5.10上,GD32F450Z RTC时间显示问题
3
rt-smart启动流程分析
4
EtherKit快速上手PROFINET
5
RTThread USB转串口无法接收数据
热门标签
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
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部