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-11-19 15:09

STM32几种IO设置模式
在 STM32中选用 IO 模式 (1) 浮空输入 _IN_FLOATING —— 浮空输入,可以做 KEY 识别, RX (2)带上拉输入 _IPU—— IO 内部上拉电阻输入 (3)带下拉输入 _IPD—— IO内部下拉电阻输入 (4) 模拟输入 _AIN —— 应用 ADC 模拟输入,或者低功耗下省电 (5)开漏输出 _OUT_OD —— IO 输出 0接 GND , IO 输出 1,悬空,需要外接上拉电阻,才能 实现输出高电平。当输出为 1时, IO 口的状态由上拉电阻拉高电平,但由于是开漏输出模式, 这样 IO 口也就可以由外部电路改变为低电平或不变。 可以读 IO 输入电平变化, 实现 C51的 IO 双向功能 (6)
[单片机]
STM32微控制器的技术特点和性能指标
一、引言 STM32微控制器是ST公司推出的一款基于ARM Cortex-M内核的32位微控制器,具有高性能、低功耗、高集成度等特点,广泛应用于各种嵌入式系统。本文将对STM32微控制器的技术特点、性能指标、开发流程以及应用领域进行详细解析,帮助读者更好地了解和掌握STM32微控制器技术 二、STM32微控制器技术特点 1.高性能 STM32微控制器采用了ARM Cortex-M内核,具有单精度浮点运算能力,最高主频可达72MHz,能够满足各种高速数据处理需求。此外,STM32还具有丰富的外设资源,如GPIO、USART、SPI、I2C等,可满足各种通信和控制需求。 2.低功耗 STM32微控制器采用了先进的低功耗技术,如休眠
[单片机]
STM32定时器的TRGO信号
定时器的框图中有一个TRGO信号输出,此信号可以用来触发ADC、DAC、其他定时器等。 此信号怎么产生呢? 要使用 TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); 函数来选择TRGO信号的事件源,这个函数给TIMx_CR2寄存器的位6到位4赋值,位6到位4是MMS ,描述如下: 如果MMS 值为000:当TIMx_EGR寄存器的UG位有效,就会触发TRGO输出。 如果MMS 值为010:当产生更新事件时,就会触发TRGO输出。 另外: 当配置MMS 值为010:当产生更新事件时,就会触发TRGO输出。还可以配合重复计数寄存器来使用: 即重复多少
[单片机]
<font color='red'>STM32</font>定时器的TRGO信号
stm32调试模式下运行正常,上电自启动后运行不正常排查分析
最近用到STM32F103的芯片,芯片单步正常,直接上电不能正常工作,加上程序中里面有点bug.然后就各种莫名奇妙。 后面,单步状态把bug找完之后,理论上上电就可以正常跑了。但是总会出现莫名其面的问题。 比如,①单步正常,直接跑就异常。 ② 异常指的是程序不是死机或者hardfault而是不按照预想的逻辑,但是还是看似正常的运行。 ③用镊子复位,其可以正常起来, 百度了一下:https://blog.csdn.net/weibo1230123/article/details/80664466 多数是查时钟复位电源,但是无效。最后发现是外设启动慢导致的。 首先,明白一个道理,单步逻辑对的,那么程序就是对的
[单片机]
STM32开发板+机智云IoT+智能远程健康监护仪
摘要: 为了能让患者在家中长期地监测自身的各种生理参数,随时捕捉突发性心率失常,同时能将生理参数反映给医疗机构,方便医务人员用于指导和协助治疗,机智云开发者设计了一款基于单片机的智能远程多生理参数健康监护仪。通过血氧、脉搏和体温等数字信号采集模块采集原始数据,由单片机进行算法处理,在显示模块显示人体的血氧值、心率值和体温值等,用户还可通过按键配置生理参数的阈值报警、按键发送生理参数至云端。最后,与标准医用监护仪进行对比测试,验证了该设计的准确性与可行性。 1 总体框架 本设计的总体框架如图1 所示。 图1中, 监护仪采用以 ARM Cortex-M3 为内核 STM32 单片机作为核心处理单元, 分别将数字集成心率血
[单片机]
<font color='red'>STM32</font>开发板+机智云IoT+智能远程健康监护仪
STM32为什么需要位带操作呢?
为什么需要位带操作? 因为编程需要操作某个bit位来达到我们想要的功能,比如点灯需要操作GPIOA- ODR 的某个bit假设是第2bit,写1就可以让GPIO输出一个高电平。 GPIOA- ODR |= 1 2; 这样写其实有三个隐含的操作: //1.读取ODR寄存器的值到内存//2.改写第2bit的值//3.再把改写后的值写进ODR寄存器 这样的缺点:效率低 位带操作就是为了解决这个问题,前提是硬件支持这么做。 位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见。51 单片机中通过关键字 sbit 来实现位定义,STM32没有这样的关键字,而是通过访问位带别名区来实现,例如 sbit LED P1^2LE
[单片机]
<font color='red'>STM32</font>为什么需要位带操作呢?
STM32系统时钟 CAN UART
在调试USB-CAN的适配器的过程中,采用库函数开发,在调试串口的过程中串口数据始终乱码。 思考一番,发现由于外部晶振的原因,在 Keil 中Ctrl + Shift + F 查找 HSE_VALUE: #if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*! Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)8000000) /*! Value of the External oscil
[单片机]
STM32 TIM1 PWM 输出
GPIO_InitTypeDef GPIO_InitStructure2; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //第一步:配置时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_TIM1,ENABLE); //第二步,配置goio口
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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