Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
链接脚本_lds_sct_icf_分散加载
外部flash
程序分散加载到外部QSPI FLASH 启动问题
发布于 2020-07-02 11:38:53 浏览:3788
订阅该版
现在手上有一块原子 北极星 STM32H750 的板子,片上flash 128k,裸机的例程都是通过分散加载的方式把程序分两部分下载到片上和片外flash ```c #define m_stmflash_start 0X08000000 #define m_stmflash_size 0X20000 #define m_qspiflash_start 0X90000000 #define m_qspiflash_size 0X800000 #define m_stmsram_start 0X24000000 #define m_stmsram_size 0X80000 LR_m_stmflash m_stmflash_start m_stmflash_size { ER_m_stmflash m_stmflash_start m_stmflash_size { *.o (RESET, +First) * (InRoot$$Sections) * (Veneer$$Code) libinit.o libinit2.o libshutdown.o libshutdown2.o __rtentry.o __rtentry2.o __rtentry4.o rtexit.o rtexit2.o use_no_semi_2.o heapauxi.o use_no_semi.o sys_stackheap_outer.o exit.o libspace.o fpinit.o lludivv7m.o startup_stm32h750xx.o rt_locale_intlibspace.o lc_numeric_c.o lc_ctype_c.o startup_stm32h750xx.o system_stm32h7xx.o stm32h7xx_hal.o stm32h7xx_hal_cortex.o stm32h7xx_hal_rcc.o stm32h7xx_hal_gpio.o stm32h7xx_hal_msp.o main.o sys.o usart.o delay.o } RW_m_stmsram m_stmsram_start m_stmsram_size { .ANY (+RW +ZI) } } LR_m_qspiflash m_qspiflash_start m_qspiflash_size { ER_m_qspiflash m_qspiflash_start m_qspiflash_size { .ANY (+RO) } } ``` 把一些通用的.o文件都放到片上,其他的都放在片外,这样自己写的应用程序都会放到片外 现在我想使用RT-thread操作系统,更改link.scf文件, ```c LR_IROM1 0x08000000 0x00020000 { ; load region size_region ER_IROM1 0x08000000 0x00020000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) * (Veneer$$Code) libinit.o libinit2.o libshutdown.o libshutdown2.o __rtentry.o __rtentry2.o __rtentry4.o rtexit.o rtexit2.o heapauxi.o use_no_semi.o sys_stackheap_outer.o exit.o libspace.o fpinit.o lludivv7m.o startup_stm32h750xx.o system_stm32h7xx.o stm32h7xx_hal.o stm32h7xx_hal_cortex.o stm32h7xx_hal_rcc.o stm32h7xx_hal_gpio.o stm32h7xx_hal_msp.o stm32h7xx_hal_dma.o stm32h7xx_hal_uart.o stm32h7xx_hal_uart_ex.o stm32h7xx_hal_rcc_ex.o stm32h7xx_hal_pwr.o stm32h7xx_hal_pwr_ex.o clock.o components.o device.o idle.o ipc.o irq.o kservice.o mem.o object.o scheduler.o thread.o timer.o board.o drv_mpu.o drv_gpio.o drv_usart.o cpuport.o indicate_semi.o msh.o dataqueue.o sys_exit.o cmd.o serial.o drv_common.o completion.o pin.o strlen.o strcat.o strncmp.o rt_memcpy_v6.o rt_memcpy_w.o context_rvds.o memcmp.o strncpy.o rt_memclr.o rt_memclr_w.o main.o Led.o } RW_IRAM1 0x24000000 0x00080000 { ; RW data .ANY (+RW +ZI) } } LR_m_qspiflash 0X90000000 0X800000 { ER_m_qspiflash 0X90000000 0X800000 { .ANY (+RO) } } ``` 编译完成后生成两个.bin文件ER_IROM1和ER_m_qspiflash,这种情况下程序运行正常, ```c #include "Led.h" int main(void) { rt_kprintf("hello world\r\n"); LED_Init(); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); LED0_Toggle; //LED1_Toggle; while (1) { rt_thread_mdelay(1000); LED1_Toggle; } return RT_EOK; } ``` 在上面的加载过程中,文件Led.o被加载到了片上flash,但是这个文件是自己编写的程序,希望被加载到外部,所以在上面的把Led.o删掉,重新编译无错,运行时先打印了hello world , 执行LED_Init()时,报错了 ~~~text \ | / - RT - Thread Operating System / | \ 4.0.2 build Jul 2 2020 2006 - 2019 Copyright by rt-thread team hello world psr: 0x61000000 r00: 0x00000000 r01: 0x40011000 r02: 0x0800cce9 r03: 0x00000000 r04: 0x00000000 r05: 0xdeadbeef r06: 0xdeadbeef r07: 0xdeadbeef r08: 0xdeadbeef r09: 0xdeadbeef r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x9000014d lr: 0x08007ebb pc: 0x9000014c hard fault on thread: main thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- tidle0 31 ready 0x00000048 0x00000400 07% 0x00000020 000 main 10 running 0x00000044 0x00000800 07% 0x00000012 000 bus fault: SCB_CFSR_BFSR:0x01 IBUSERR ~~~ 刚刚接触这个分散加载,还不是很理解,哪位帮忙看看,如何能够把类似Led.c等自己的程序加载到外部,并运行,谢谢
查看更多
6
个回答
默认排序
按发布时间排序
小鳄鱼
2020-07-07
rt-thread脑残粉
外部QSPI初始化了吗,qspi需要初始化,并且设置成内存映射模式。
aozima
2020-07-02
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
请把贴子中的代码用代码标签框起来,方便大家阅读。
andychen
2020-07-02
这家伙很懒,什么也没写!
建议用markdown排下版吧 https://club.rt-thread.org/ask/article/2.html
whj467467222
认证专家
2020-07-03
开源,分享,交流,共同进步
期待楼主的研究成果哦。 我目前的做法是直接暴力的把128K作为boot,直接跳转到0x9000 0000地址运行。
SimpleFan
2020-08-12
这家伙很懒,什么也没写!
楼主 解决问题了吗?我现在也想这样做,可是修改好分散加载文件后,死活运行不起来了
Jarvis65536
2021-07-05
这家伙很懒,什么也没写!
最近也在搞stm32H750的分散加载,参考了art-pi和正点原子的,生成两个bin单独烧录可以运行,但是用MDK调试下载(自动一起下载),内部128k Flash 的前1K数据全是FF,其它部分正常,导致程序无法运行和调试。不知道什么问题,很崩溃
撰写答案
登录
注册新账号
关注者
1
被浏览
3.8k
关于作者
416889496
这家伙很懒,什么也没写!
提问
1
回答
0
被采纳
0
关注TA
发私信
相关问题
1
stm32f429如何下载程序到外部flash
2
安卓手机不能识别挂载w25q flash
3
rtthread stlink加载外部算法问题
4
flashdb kv value的最大字节
5
关于F1使用通用BOOT+片外FLASH升级SFUD初始化失败的问题
6
文件系统挂载到指定内存区域
7
ART-Pi的APP运行在外部Flash,那还能对内部flash进行读写操作吗?
8
外部flash是nm25q128挂载不上有大神指点嘛
9
挂载外部flash出现这个问题有大神解决吗
10
铁电存储器MB85RS16 驱动是否有呢
推荐文章
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部