连接脚本 xxxxxx.ld

这个描述文件叫做链接文件,如linux下的.ld文件,Keil中的分散加载文件(.sct文件)。

https://blog.csdn.net/xianjian1990/article/details/54293349?ops_request_misc=&request_id=&biz_id=102&utm_term=stm32%20%E4%BD%BF%E7%94%A8%20sct%E6%96%87%E4%BB%B6%E5%90%AF%E5%8A%A8&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-54293349.142v68control,201v4add_ask,213v2t3_control1&spm=1018.2226.3001.4187

成功修改STM32启动程序(自定义的分散加载模式)

话说启动代码,没什么神秘的,往简单里说不外乎3个功能部分
1,做个AREA放置向量表,异常/中断跳转的地址表。
2,初始化SP的值,初始化内核的状态(比如工作在用户模式或超级模式,STM启动默认在高权限模式)
3,如果使用的是简单的分散加载,IMAGE(映像文件)也就由1个RO,1个RW,1个ZI组成,并且RO的load region和execution region相同,那么只需要COPY RW区到RAM,然后再RW区后面创建ZI区,只部分可以用汇编代码自己实现。当然库里的__main函数就包含这些功能,但是如果不用__main,那就要自己写这部分了。

何为简单的分散加载?

MDK的HELP文档里有很详细的说明。

首先编译器设置要改

要是勾了,编译器要报错,问你启动库函数找不到。

勾了就是使用默认的分散加载描述文本,.SCT文件是不让改的,所以想改就不要勾。
在这里插入图片描述

STM32F4的sct文件理解

https://blog.csdn.net/weixin_34008805/article/details/92955664?ops_request_misc=&request_id=&biz_id=102&utm_term=stm32%20%E4%BD%BF%E7%94%A8%20sct%E6%96%87%E4%BB%B6%E5%90%AF%E5%8A%A8&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-92955664.142v68control,201v4add_ask,213v2t3_control1&spm=1018.2226.3001.4187

我现在的板子是STM32F429,外接了SDRAM,NandFlash,我想用sct文件的主要原因是要用到了nandflash,想把yaffs移植上去,但yaffs里面有大量的malloc,STM32F429的片内sram不足以完成这些malloc,故想到把堆放到SDRAM里面去,因此我的sct文件如下:

LR_IROM1 0x08000000 0x00100000 { ; load region size_region 加载域,起始地址是0x08000000,大小是0x00100000
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address 执行地址,就是链接地址
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00030000 { ; RW data
.ANY (+RW +ZI)
}
}

ARM_LIB_HEAP 0xC0000000 0x80000 { ; 指定堆栈地址
RW_HEAP 0xC0000000 0x80000 {
.ANY (HEAP)
}
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐