当前位置: 首页 > article >正文

STM32 SCF文件

文章目录

  • 1 SCF文件
  • 2 SCT分散加载文件
  • 3 SCF文件编写

1 SCF文件

keil编译器在链接的时候,是根据分散加载(.scf后缀的文件)来确定程序的加载域和运行域的。

  • 加载域就是程序运行前在flash中具体分区情况
  • 执行域就是程序运行后,程序在flash和ram中的分区情况。
    在这里插入图片描述当程序运行后,RW段中的数据会被复制到RAM中,同时还会初始化一个ZI段用来存放没有初始化和被初始化为零的相关变量。

2 SCT分散加载文件

打开一个STM32的工程,找到工程配置的入口,选择Target。
在这里插入图片描述再选择Linker
在这里插入图片描述我们去掉第一个勾,看到Scatter File那一行可以修改和编辑,以下是分散加载文件的具体内容:
在这里插入图片描述分号后面是注释。

LR_IROM1 0x08000000 0x00040000  {

这是代码的加载域,从Target的配置看,ROM的起始地址和范围分别就是0x08000000 0x00040000,而LR_IROM1为加载域名称,代表这块存储区域。

加载域括起来的,为执行域。本文件有两个执行域:ER_IROM1和RW_IRAM1。类似的,0x08000000和0x00040000为ER_IROM1的起始地址和大小。

*.o (RESET, +First)

*.o表示选择所有的.o文件,均放在这里,RESET为节区名,+First表示将RESET节区放在最前面。RESET在启动文件.s文件可以看到。

 (InRoot$$Sections)

这是将标准库里,有使用到的相关文件或节区,放到这里,挨着上面的*.o

 .ANY (+RO)

表示将剩下的,所有的RO(readeonly,只读的)属性的节区放这里

 .ANY (+RW +ZI)

表示剩下的,所有的RW、ZI属性的节区

3 SCF文件编写

一:什么时候使用scatter file:

1、存在复杂的地址映射:例如代码和数据需要分开存放在多个区域。

2、存在多个存储器类型:包含Flash, ROM, SDRAM,快速SRAM。我们根据代码与数据的特性把他们发在不同的存储器中,比如中断处理部分放在快速SRAM内部来提高响应速度,而把不常用到的代 码放到速度比较慢的Flash内。

3、函数的地址固定定位:可以利用Scatter file实现把某个函数放在固定地址,而不管其应用程序是否已经改变或重新编译。

4、利用符号确定堆和堆栈。

5、内存映射的IO:利用scatter file可以实现把某个数据段放在精确的地址处。因此对于嵌入式系统来说scatter file是必不可少的,因为嵌入式系统采用了ROM, RAM和内存映射的IO。

如:堆放到SDRAM里面去

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)
}
}

http://www.kler.cn/news/155786.html

相关文章:

  • 有什么值得推荐的node. js练手项目吗?
  • Redis 数据结构详解
  • 共享智能指针shared_ptr
  • windows 映射 webdav 为本地磁盘
  • ChatGPT 的 18 种玩法,你还不会用吗?
  • 31-WEB漏洞-文件操作之文件包含漏洞全解
  • 前端下拉框select标签的插件——select2.js
  • Python与GPU编程快速入门(二)
  • springboot centos集成 OpenOffice 实现 在线预览 doc excel docx 成pdf的 并且包含中文包和英文包和安装
  • WPF MVVM模式下如何将UI窗口变量传参到Viewmodel层
  • 【Web安全】拿到phpMyAdmin如何获取权限
  • mysql面试题——日志与MVCC
  • solidity实现ERC721代币标准发布NFT
  • 28.线段树与树状数组基础
  • 谈谈MYSQL索引
  • 数据库-MySQL之数据库必知必会22-26章
  • 工具网站:随机生成图片的网站
  • Fiddler抓包工具之fiddler的composer可以简单发送http协议的请求
  • 【数据库】数据库元素的层次,树形结构的下的多粒度加锁,以及幻象的正确处理
  • FIORI /N/UI2/FLP 始终在IE浏览器中打开 无法在缺省浏览器中打开
  • Facebook做外贸推广如何?
  • vue3高雅的使用useDialog
  • 设计模式-结构型模式之代理设计模式
  • 前端分片上传
  • TimeGPT:时序预测领域终于迎来了第一个大模型
  • 栈和队列OJ题——15.循环队列
  • Docker—更新应用程序
  • 【开源存储】glusterfs分布式文件系统部署实践
  • 学习TypeScrip5(函数扩展)
  • 数据结构之堆排序以及Top-k问题详细解析