初级会员

- 积分
- 58
- 金钱
- 58
- 注册时间
- 2020-4-13
- 在线时间
- 14 小时
|
3金钱
最近在学习stm32H750板子上的QSPI FLASH,在片内flash存放boot程序,然后设置QSPI flash为内存映射模式,然后跳转到QSPI flash执行用户程序。用户程序从0x90000000也就是QSPI FLash的起始地址开始执行,目前都是测试运行都正常了。但是有一个疑问希望原子哥能解惑一下。我这种做法是在boot里主动初始化了QSPI,然后进行跳转才能在qspi flash执行用户程序。但是北极星开发板上的很多例程都是通过分散加载文件把部分程序放在了qspi flash区。就比如最简单的跑马灯例程,工程里没有执行任何qspi初始化和设置相关的代码,为什么也能将程序放到qspi flash上运行。 那我用片内boot 片外应用程序的方法是不是多此一举,直接用分散加载文件就能达到同样的效果?- #define m_stmflash_start 0X08000000 //m_stmflash(STM32内部FLASH)域起始地址
- #define m_stmflash_size 0X20000 //m_stmflash(STM32内部FLASH)大小,H750是128KB
- #define m_qspiflash_start 0X90000000 //m_qspiflash(外扩QSPI FLASH)域起始地址
- #define m_qspiflash_size 0X800000 //m_qspiflash(外扩QSPI FLASH)大小,W25Q64是8MB
-
- #define m_stmsram_start 0X24000000 //m_stmsram(STM32内部RAM)域起始地址,定义在D1,AXI SRAM
- #define m_stmsram_size 0X80000 //m_stmsram(STM32内部RAM)大小,AXI SRAM共512KB
-
-
- LR_m_stmflash m_stmflash_start m_stmflash_size { //LR_m_stmflash加载域
- ER_m_stmflash m_stmflash_start m_stmflash_size { //ER_m_stmfalsh运行域,起始地址为:m_stmflash_start,大小为:m_stmflash_size
- *.o (RESET, +First) //优先(+FIRST)将RESET(中断向量表)段放这个域,实际上就是把中断向量表拷贝到m_stmflash_start
- //RESET是一个段名,表示中断向量表(在.s文件定义);+FIRST表示时第一个要加载的.
- * (InRoot$Sections) //将所有的库段(C/C++标准库)放在root region.如__main.o,__scatter*.o等
- * (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 { //RW_m_stmsram运行域,起始地址为:m_stmsram_start,大小为:m_stmsram_size.
- .ANY (+RW +ZI) //将所有用到的RAM都放在这个区域
- }
- }
- LR_m_qspiflash m_qspiflash_start m_qspiflash_size { //LR_m_qspiflash加载域
- ER_m_qspiflash m_qspiflash_start m_qspiflash_size { //ER_m_qspiflash加载域,起始地址为:m_qspiflash_start,大小为:m_qspiflash_size
- .ANY (+RO) //将只读数据(+RO)放这个域,任意分配.相当于程序就是存放在这个域的.
- }
- }
复制代码
|
|