自己写启动程序 自己写链接文件(linux下的.ld文件,Keil中的分散加载文件(.sct文件)) 内存分区(flash ram) Reset_Handler()函数 去升级stm32 应用程序

连接脚本 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)
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止境2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值