stm32专题三十六:MDK编译过程和文件类型(四)

发布者:EnchantedDreams最新更新时间:2021-11-01 来源: eefocus关键字:stm32  MDK  编译过程  文件类型 手机看文章 扫描二维码
随时随地手机看文章

sct 分散加载文件的格式与应用


在使用 MDK 新建工程时,MDK 软件会要求选择对应的芯片型号:

然后,MDK会根据选择的芯片型号,自动获取(写入)芯片内部的 FLASH 和 SRAM 存储器概况如下:

然后,MDK 会生成一个后缀名为 sct 的分散加载文件,如下所示:


链接器根据该文件的配置分配各个节区地址,生成分散加载代码,因此我们通过修改该文件可以定制具体节区的存储位置。

下面,来分析一下这个 sct 文件:

在默认的 sct 文件配置中仅分配了 Code、 RO-data、 RW-data 及 ZI-data 这些大区域的地址,链接时各个节区(函数、变量等)直接根据属性排列到具体的地址空间。


sct 文件中主要包含描述加载域及执行域的部分,一个文件中可包含有多个加载域,而一个加载域可由多个部分的执行域组成。同等级的域之间使用花括号“{ }”分隔开,最外层的是加载域,第二层“{ }”内的是执行域,如图所示:

加载域:


sct 文件的加载域格式如下:

执行域:


和加载域的基本语法非常类似。

输入节区描述:


配合加载域及执行域的配置,在相应的域配置 “输入节区描述” 即可控制该节区存储到域中:

模块选择样式:

输入节区样式:

节区属性描述符:

具体举例如下:

通过 MDK 配置选项来修改 sct 文件


了解 sct 文件的格式后,可以手动编辑该文件控制整个工程的分散加载配置,但 sct 文件格式比较复杂,所以 MDK 提供了相应的配置选项可以方便地修改该文件,这些选项配置能满足基本的使用需求。

图中 Device 标签页中选定了芯片的型号为 STM32F103VE,选中后,在 Target 标签页中的存储器信息会根据芯片更新。

下面,我们来尝试重新分配 SRAM 的空间大小,将64KB分成2个32KB,观察编译后 sct 文件的变化。

编译结果如下所示:


可以发现, sct 文件根据 Target 标签页做出了相应的改变,除了这种修改外,在 Target标签页上还控制同时使用 IRAM1 和 IRAM2、加入外部 RAM(如外接的 SRAM),外部FLASH 等。


上面的操作是将内部 SRAM 分成2份,来进行存储数据,接下来,尝试将文件存储到 RAM2 区域:

然后重新编译,可以看到 sct 文件的内容发生了改变:


可以看到在 sct 文件中的 RW_IRAM2 执行域中增加了一个选择 bsp_led.o 中 RW 内容的语句。


关于 MDK 存储器配置选项的描述:

关键字:stm32  MDK  编译过程  文件类型 引用地址:stm32专题三十六:MDK编译过程和文件类型(四)

上一篇:stm32专题三十六:MDK编译过程和文件类型(三)
下一篇:stm32专题三十七:自动分配变量到指定 SRAM 空间

推荐阅读最新更新时间:2024-10-26 10:42

stm32专题三十六:MDK编译过程文件类型(四)
sct 分散加载文件的格式与应用 在使用 MDK 新建工程时,MDK 软件会要求选择对应的芯片型号: 然后,MDK会根据选择的芯片型号,自动获取(写入)芯片内部的 FLASH 和 SRAM 存储器概况如下: 然后,MDK 会生成一个后缀名为 sct 的分散加载文件,如下所示: 链接器根据该文件的配置分配各个节区地址,生成分散加载代码,因此我们通过修改该文件可以定制具体节区的存储位置。 下面,来分析一下这个 sct 文件: 在默认的 sct 文件配置中仅分配了 Code、 RO-data、 RW-data 及 ZI-data 这些大区域的地址,链接时各个节区(函数、变量等)直接根据属性排列到具体的地址空间。
[单片机]
<font color='red'>stm32</font>专题三十六:<font color='red'>MDK</font><font color='red'>编译</font><font color='red'>过程</font>和<font color='red'>文件类型</font>(四)
stm32专题三十六:MDK编译过程文件类型(三)
生成 bin 和 hex文件 若编译过程无误,即可把工程生成前面对应的*.axf 文件,而在 MDK 中使用下载器(DAP/JLINK/ULINK 等)下载程序或仿真的时候, MDK 调用的就是*.axf 文件,它解释该文件,然后控制下载器把*.axf 中的代码内容下载到 STM32 芯片对应的存储空间,然后复位后芯片就开始执行代码了。 然而,脱离了 MDK 或 IAR 等工具,下载器就无法直接使用*.axf 文件下载代码了,它们一般仅支持 hex 和 bin 格式的代码数据文件。默认情况下 MDK 都不会生成 hex 及 bin 文件,需要配置工程选项或使用 fromelf 命令。 fromelf的命令描述:
[单片机]
<font color='red'>stm32</font>专题三十六:<font color='red'>MDK</font><font color='red'>编译</font><font color='red'>过程</font>和<font color='red'>文件类型</font>(三)
stm32专题三十六:MDK编译过程文件类型(二)
MDK工程的文件类型: 1 下图为 Project 目录下的工程文件 实际上,只需要有 unprojx 文件,就可以恢复整个工程。 具体描述: 2 源文件 3 output 和 list 文件 详细分析: 1 uvprojx 文件 uvprojx 文件就是我们平时双击打开的工程文件,它记录了整个工程的结构,如芯片类型、工程包含了哪些源文件等内容。 可以使用vscode直接打开 uvprojx ,来看一下里面的具体内容: 2 uvoptx 文件 uvoptx 文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及当前已打开的文件等。 我们在程序 main.c 的第81行
[单片机]
<font color='red'>stm32</font>专题三十六:<font color='red'>MDK</font><font color='red'>编译</font><font color='red'>过程</font>和<font color='red'>文件类型</font>(二)
Realview MDK编译器对中断处理的过程详解
在ARM程序的开发过程中,对中断的处理是很普遍的、也是相当重要的。Realview MDK使用的RVCT编译器提供了__irq关键字,用此关键字修饰的函数被作为中断出来函数编译,即在编译的过程中,编译器会自动添加中断处理过程中现场保护和恢复的代码,减小程序的开发难度,加快软件的开发过程。 在理解__irq关键字的作用之前,先看一下ARM核对异常的处理过程。当产生异常时, ARM核拷贝CPSR寄存器的内容SPSR_ mode 寄存器中,同时设置适当的CPSR 位、改变处理器状态进入ARM 态和处理器模式,从而进入相应的异常模式。在设置中断禁止位禁止相应中断(如果需要)后,ARM核保存返回地址到LR_ mode ,同时设置PC为相应的异
[单片机]
Realview MDK编译器对中断处理的过程详解
在ARM程序的开发过程中,对中断的处理是很普遍的、也是相当重要的。Realview MDK使用的RVCT编译器提供了__irq关键字,用此关键字修饰的函数被作为中断出来函数编译,即在编译的过程中,编译器会自动添加中断处理过程中现场保护和恢复的代码,减小程序的开发难度,加快软件的开发过程。 在理解__irq关键字的作用之前,先看一下ARM核对异常的处理过程。当产生异常时, ARM核拷贝CPSR寄存器的内容SPSR_ mode 寄存器中,同时设置适当的CPSR 位、改变处理器状态进入ARM 态和处理器模式,从而进入相应的异常模式。在设置中断禁止位禁止相应中断(如果需要)后,ARM核保存返回地址到LR_ mode ,同时设置PC为相应的异
[单片机]
基于MDKstm32实践过程中,debug的总结
做硬件仿真的时候,程序一直停在LDR R0, =SystemInit中的可能原因: 出现最多的情况就是设置的断点过多,STLINK只能设5个断点,可以把断点全部删除试试看,把断点设置在主函数。 在程序中使用了C库(printf),那么进入Option ---target 将 use microLib 勾选上。 硬件原因,主芯片,或者晶振有问题,更换一下就好了
[单片机]
如何使用MDK编译器让STM32程序HEX文件中加入固件版本信息
本文介绍一个小技巧: 使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。 代码 代码如下: //------------------------------------------------------------------------------#include 《absacc.h》 //------------------------------------------------------------------------------#define VERINFO_ADDR_BASE (0x8009F00) // 版本信息在FLASH中的存放地址const char Hardware_Ver[] _
[单片机]
如何使用<font color='red'>MDK</font><font color='red'>编译</font>器让<font color='red'>STM32</font>程序HEX文件中加入固件版本信息
STM32学习之路(二)——MDK-ARM开发过程简介
一,准备MDK-ARM+JLINK+STM32软件包 1,在 http://www.mcu123.com/news/Soft/embsof/arm/200908/505.html 下载RealView MDK-ARM 3.80a(MDK-ARM V3.80a,MDK3.80a)版本 mdk380a_mcu123.rar http://esoft.mcu123.com/MCU123_temp_0080309@/arm/mdk380a_mcu123.rar (注册机自行查找,安装过程略) 2,在 http://www.segger.com/cms/jlink-software.html 下载Software
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved