单片机如何分散加载文件

本篇文章将通过实际操作介绍如何实现分散加载文件的方法。开发工具为:mdk;开发板:野火stm32f407

一、建立工程

通过实现简单的加法计算的软件算法,来了解分散加载image 的方法。

建立工程,创建文件夹以及相应的文件,设置路径;

c09394d530c7c44878582f2f6a1089ec.png

对应的c文件如下:

4802d7e316532de262785b45535c03bf.png

对应的h文件如下:

b44737a8a1d9e221c1a2801dc8e12a85.png

主函数,测试函数如下:

7e522b9df52f1039bc0d36ab42d585b2.png

编译之后,查看map文件信息,如下:

238fa6e1340404d55a45e67201859842.png

查看工程输出是否正确,结果正确,如下:

d4df290a83ab9b495d14cd8adf0b2341.png

二、设置分散加载的方法

①打开工程的选项页面,设置去掉 Linker 下默认的选项,使用分散加载文

件来分配工程的内存位置。分散加载文件的文件后缀名为sct

ed30d65d4b5c4951c5433b0662131b93.png

修改前内容如下:

4bc6aaabea2b63b010058016e67743d2.png

修改分散文件,因为单片机的rom大小这里是1M,分成了2部分,每部分大小为0x0007FFFF,区域大小需要根据实际进行配置。在默认的分散加载文件中做如下修改,将第一个加载区域LR_IROM1的大小改为0x0007FFFF,将其第一个执行区ER_IROM1大小也改为0x0007FFFF,同时新建一个 LR_MY_ADD 的加载区,其起始地址紧接着 LR_IROM1,大小也是 0x0007FFFF,在其中定义一个执行区 ADD_TEST起始地址与 LR_MY_ADD 一致,并将 myadd.o 所有的代码都放置到该区域。

490c745c4b4a025491cc02e3d0c07434.png

③编译,查看map信息

ca4e01abfa5b833a3e51cefba7f13b94.png

在线仿真,函数地址如下,和map中的信息相匹配

08b73019f8f07584da101041a8ca801d.png

三、总结

    编译器在生成可执行文件时,先将每个.c文件编译成.o文件(此过程叫编译),然后将很多个.o文件链接成可执行文件(此过程叫链接)。在链接的过程中,通过链接文件来指定链接时的行为。通过修改分散加载文件sct,可以将不同的文件放到指定的位置上。

参考:GD32F1x0_ScatterLoading_V3.1.0

欢迎关注公众号:嵌入式学习与实践

猜你喜欢

转载自blog.csdn.net/weixin_46158019/article/details/132310081