Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
BSP
STM32L1
stm32L151
stm32l151 boot成功引导rt-thread,不能创建main线程
发布于 2020-04-15 18:43:17 浏览:1545
订阅该版
* 本帖最后由 jinfa_joe 于 2020-4-15 19:35 编辑 * 我用cubeMx创建一个stm32l151工程其中boot部分是: ```c void TaskBootProcess(void) { DRV_SystemJump(JUMP_ADDR); } //THUMBÖ¸Áî²»Ö§³Ö»ã±àÄÚÁª //²ÉÓÃÈçÏ·½·¨ÊµÏÖÖ´Ðлã±àÖ¸ÁîWFI void WFI_SET(void) { __ASM volatile("wfi"); } //¹Ø±ÕËùÓÐÖÐ¶Ï void INTX_DISABLE(void) { __ASM volatile("cpsid i"); } //¿ªÆôËùÓÐÖÐ¶Ï void INTX_ENABLE(void) { __ASM volatile("cpsie i"); } //ÉèÖÃÕ»¶¥µØÖ· //addr:Õ»¶¥µØÖ· __asm void MSR_MSP(u32 addr) { MSR MSP, r0 //set Main Stack value BX r14 } /******************************************************************************* * Function : DRV_SystemJump * Description : ϵͳÌøת * Input : jumpAddr -- Ìøתµ½µÄµØÖ· * Output : * Return : * Others : *******************************************************************************/ void DRV_SystemJump(u32 jumpAddr) { pFunction Jump_To_Application; u32 JumpAddress; // ¹Ø±ÕËùÓÐÖÐ¶Ï INTX_DISABLE(); #define RT_APP_PART_ADDR 0x08004000 //app #define NVIC_VTOR_MASK 0x3FFFFF80 /* Set the Vector Table base location by user application firmware definition*/ SCB->VTOR = RT_APP_PART_ADDR & NVIC_VTOR_MASK; JumpAddress = *(u32*) (jumpAddr + 4); //×¢Ò⸴λÏòÁ¿²»ÊÇ0£¬¶øÊÇ4 Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ __set_MSP(*(__IO u32*) jumpAddr); /* Jump to user application */ Jump_To_Application(); } ``` ``` TaskBootProcess: #define JUMP_ADDR 0x08004000//boot-16K app-244K param-16K ``` ===rt-thread用gcc开发 按照[an0028-rtboot/](https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/) 制作app固件的要求 1,link.lds配的是 ```c MEMORY { ROM (rx) : ORIGIN = 0x08004000, LENGTH = 224k /* 256 - 16 - 16KB flash */ RAM (rw) : ORIGIN = 0x20000000, LENGTH = 32k /* 32K sram */ } ``` 2,main.c 文件中重新设定中断向量跳转地址为 app 分区的地址。。我在main.c某个角落放置了ota_app_vtor_reconfig并设置了INIT_BOARD_EXPORT(不过没有主动调用ota_app_vtor_reconfig) === 通过st-link utility并配置烧写地址为0x08004000启动后的串口如下: === 串口打印log是: ``` ========================================================================= [boot] struct app \ | / - RT - Thread Operating System / | \ 4.0.3 build Apr 15 2020 2006 - 2020 Copyright by rt-thread team (tid != RT_NULL) assertion failed at function:rt_application_init, line number:200 ========================================================================= ``` 这时估计rt-thread进入了RT_ASSERT。。想和大家沟通下为啥rt-thread找不到main函数的?
查看更多
2
个回答
默认排序
按发布时间排序
jinfa_joe
2020-04-16
这家伙很懒,什么也没写!
[i=s] 本帖最后由 jinfa_joe 于 2020-4-16 09:40 编辑 [/i] 根据log打印执行流程应该是: rt_thread_create rt_object_allocate RT_KERNEL_MALLOC rt_malloc if (size > mem_size_aligned) RT_DEBUG_LOG(RT_DEBUG_MEM, ("no memory\n")); 应该是malloc申请内存出问题了。 备注:在引入boot前rt-thread基于”小内存管理“stm32l151rc是能够起来的。现在的问题是为啥引入boot后rt-thread的内存管理就出问题了?
jinfa_joe
2020-04-16
这家伙很懒,什么也没写!
好吧,自己解决了。修改 ``` board\CubeMX_Config\Drivers\CMSIS\Device\ST\STM32L1xx\Include\stm32l151xc.h libraries\STM32L1xx_HAL\CMSIS\Device\ST\STM32L1xx\Include\stm32l151xc.h ``` 将FLASH_BASE改为`0x08004000UL` 将FLASH_END改为`(0x08004000UL + 256*1024 - 1)` 就引导起来的,不过好像app分区后不能加分区。不然新增的分区擦除不了。(本人尝试过) 这是启动log: ``` [boot]. [boot] struct app \ | / - RT - Thread Operating System / | \ 4.0.3 build Apr 16 2020 2006 - 2020 Copyright by rt-thread team [D/FAL] (fal_flash_init:63) Flash device | onchip_flash | addr: 0x08000000 | len: 0x00040000 | blk_size: 0x00000100 |initialized finish. [I/FAL] ==================== FAL partition table ==================== [I/FAL] | name | flash_dev | offset | length | [I/FAL] ------------------------------------------------------------- [I/FAL] | boot | onchip_flash | 0x00000000 | 0x00004000 | [I/FAL] | app | onchip_flash | 0x00004000 | 0x0003c000 | [I/FAL] ============================================================= [I/FAL] RT-Thread Flash Abstraction Layer (V0.5.0) initialize success. <-joe-> count:2 msh ><-joe-> count:3 <-joe-> count:4 <-joe-> count:5 msh >free total memory: 29024 used memory : 4876 maximum allocated memory: 7076 msh > ```
撰写答案
登录
注册新账号
关注者
0
被浏览
1.5k
关于作者
jinfa_joe
这家伙很懒,什么也没写!
提问
2
回答
4
被采纳
0
关注TA
发私信
相关问题
1
STM32 407 串口接收数据 系统卡死
2
RTT nrf24l01 设备驱动程序
3
stm32f10x串口只能发送数据,无法接收
4
第一次尝试移植rt-thread 到stm32F103系列问题
5
有人把stm32L07xx的bsp移到rtt上来了吗?求一个
6
rt-thread线程调度异常在stm32f103芯片上
7
RTT是否支持STM32F429
8
请问谁有 STM32F40x HAL + RT-THREAD 模板
9
rt-thread在stm32f411下的移植问题
10
针对STM32F7系列平台的MPU,Cache特性,需要注意哪些问题?
推荐文章
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-thred的stm32h723对应bsp包CubeMX添加其他外设报错
2
RT-Thread中的time溢出问题,时间戳溢出,解决方法
3
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
4
SystemView线程名字不显示
5
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
8
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
chenyaxing
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
3
次点赞
YZRD
1
篇文章
2
次点赞
Days
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部