keil rt-thread link.sct 解析

吃透 Keil .sct 文件!嵌入式工程师必备:从语法到实战的内存布局指南 在嵌入式开发中,你是否遇到过这些问题:想把关键函数放到 RAM 中提速却不知如何操作?多块 Flash/RAM 的芯片不知如何分配代码?Bootloader 和应用程序共存时总出内存冲突? 其实解决这些问题的核心,就藏在 Keil MDK-ARM 的一个特殊文件里 ——Scatter-Loading 文件(.sct 文件)。今天这篇文章,我们就从基础到实战,手把手教你玩转.sct 文件,彻底掌控单片机的内存布局。 阅读详情

link.sct 解析

#define m_flash_config_start           0x60000000
#define m_flash_config_size            0x00001000

#define m_ivt_start                    0x60001000
#define m_ivt_size                     0x00001000

#define m_interrupts_start             0x60002000
#define m_interrupts_size              0x00000400

#define m_text_start                   0x60002400
#define m_text_size                    0x1fffdbff

#define m_data_start                   0x20000000
#define m_data_size                    0x00020000

#define m_data2_start                  0x20200000
#define m_data2_size                   0x00040000

/* Sizes */
#if (defined(__stack_size__))
  #define Stack_Size                   __stack_size__
#else
  #define Stack_Size                   0x0400
#endif

#if (defined(__heap_size__))
  #define Heap_Size                    __heap_size__
#else
  #define Heap_Size                    0x0400
#endif

#define RTT_HEAP_SIZE (m_data_size-ImageLength(RW_m_data)-ImageLength(ARM_LIB_HEAP)-ImageLength(ARM_LIB_STACK))

#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
/*
    LR_m_text:  加载域名称
    m_flash_config_start: 加载域 LR_m_text 起始地址; 0x60000000
    m_text_start+m_text_size-m_flash_config_start: 加载域 LR_m_text 空间大小; (m_flash, m_ivt, m_interrupts, m_text这四个空间加在一起)
*/
LR_m_text m_flash_config_start m_text_start+m_text_size-m_flash_config_start {   ; load region size_region
  RW_m_config_text m_flash_config_start FIXED m_flash_config_size { ; load address = execution address
    * (.boot_hdr.conf, +FIRST)  //所有目标文件和库的.boot_hdr.conf段, 第一个被加载到执行域, 从起始地址开始
  }

  RW_m_ivt_text m_ivt_start FIXED m_ivt_size { ; load address = execution address
    * (.boot_hdr.ivt, +FIRST)   //所有目标文件和库的.boot_hdr.ivt段, 第一个被加载到执行域, 从起始地址开始
    * (.boot_hdr.boot_data) //所有目标文件和库的.boot_hdr.boot_data段, 被加载到执行域, 紧跟着.boot_hdr.ivt段后
    * (.boot_hdr.dcd_data)  //所有目标文件和库的.boot_hdr.dcd_data段, 被加载到执行域, 紧跟着.boot_hdr.boot_data段后
  }
  
#else
/*
    LR_m_text:  加载域名称
    m_interrupts_start: 加载域 LR_m_text 起始地址; 0x60002000
    m_text_start+m_text_size-m_interrupts_start: 加载域 LR_m_text 空间大小; (m_interrupts, m_text这两个空间加在一起)
*/
LR_m_text m_interrupts_start m_text_start+m_text_size-m_interrupts_start {   ; load region size_region
#endif
//FIXED: 固定地址
  VECTOR_ROM m_interrupts_start FIXED m_interrupts_size { ; load address = execution address
    * (RESET,+FIRST)    //所有目标文件和库的RESET段, 第一个被加载到执行域, 从起始地址开始
  }
  ER_m_text m_text_start FIXED m_text_size { ; load address = execution address
    * (InRoot$$Sections)    //InRoot$$Sections段的所有目标文件和库, 被加载到执行域, 从起始地址开始
    .ANY (+RO)  //所有目标文件和库的RO段, 被加载到执行域, 紧跟着InRoot$$Sections段后
  }
  RW_m_data m_data_start m_data_size-Stack_Size-Heap_Size { ; RW data
    .ANY (+RW +ZI)  //所有目标文件和库的RO,ZI段, 第一个被加载到执行域, 从起始地址开始
    * (NonCacheable.init)   //所有目标文件和库的NonCacheable.init段, 被加载到执行域, 紧跟着上一段后
    * (NonCacheable)    //所有目标文件和库的NonCacheable段, 被加载到执行域, 紧跟着上一段后
  }

/*
    ARM_LIB_HEAP: 堆区执行域名称
    +0: 前一个加载区域尾地址+offset 做为当前的起始地址, 且"offset"应为"0"或"4"的倍数
    EMPTY: 表示这段空间留空,防止其它应用占用或编译提示warning
    Heap_Size: 长度是正值,说明向高地址增长, 大小是Heap_Size
    
    ARM_LIB_STACK: 栈区执行域名称
    Stack_Size: 如果值为正,则栈向高地址增长;否则,栈向低地址增长
    
    RTT_HEAP: rt-thread堆区执行域名称
    RTT_HEAP_SIZE: 同Heap_Size
*/
  ARM_LIB_HEAP +0 EMPTY Heap_Size{}    ; Heap region growing up
  ARM_LIB_STACK +0 EMPTY Stack_Size{} ; Stack region growing down
  RTT_HEAP +0 EMPTY RTT_HEAP_SIZE{}
}

参考链接:
KEIL MDK链接脚本详解
Keil sct分散加载文件
STM32 分散加载文件 .sct 解析

RT-Thread在Keil5上的调试环境搭建与内核感知调试实战 实时操作系统(RTOS)为嵌入式设备提供了多任务调度、资源管理等核心能力,其原理在于通过内核管理任务状态与系统资源。在ARM Cortex-M等微控制器上开发时,集成开发环境(IDE)与RTOS的协同配置是实现高效开发与调试的技术关键,直接影响开发效率和系统稳定性。对于RT-Thread这类功能完整的RTOS,其工程结构与构建系统(如SCons)与传统裸机项目存在显著差异,这使得在Keil MDK这类流行IDE中搭建可深度调试的环境成为一项必备的工程实践技能。通过精确配置设备选项、链接脚本以及调试器,开发者 阅读详情

相关推荐

野火RT1052开发板新手必看:用J-Link和Keil MDK烧录第一个LED闪烁程序(保姆级图文)

本文详细介绍了如何使用J-Link和Keil MDK为野火RT1052开发板烧录第一个LED闪烁程序,涵盖开发环境配置、工程导入、烧录设置及常见问题排查。通过保姆级图文教程,帮助新手快速上手RT1052开发,解决实际开发中的常见问题。

angzhan5306的博客 376

link.sct解析

keill默认对通过链接文件link.sct(分散加载文件)放到指定的位置。 分为加载区和执行区 加载区:程序复位和加载的代码和数据 执行区:程序执行过程中,从每个加载区可创建一个或多个执行区 ; ************************************************************* ; *** Scatter-Loading Description File ...

kayshi的博客 849

使用Keil MDK RTE一键搭建RT-Thread工程:从环境配置到调试实践

实时操作系统(RTOS)为嵌入式开发提供了任务调度、资源管理等核心机制,其原理在于通过内核管理多个并发任务,提升系统响应效率与资源利用率。在ARM Cortex-M系列MCU开发中,RT-Thread作为国产开源RTOS,凭借其组件化设计及丰富软件包生态,显著降低了物联网设备开发的复杂度。Keil MDK的运行时环境(RTE)作为可视化包管理工具,通过图形化勾选自动集成内核源码、驱动及头文件路径,解决了手动搭建工程时常见的版本冲突与配置错误问题。该方式尤其适用于STM32、GD32等平台的原型验证与快速上手

weixin_34342207的博客 428

link.sct文件修改笔记

https://blog.csdn.net/qq_40888343/article/details/86223609

sqeasww的博客 778

STM32F429 + RT-Thread 动态加载APP实战:Keil5配置3步实现位置无关代码

本文详细介绍了在STM32F429平台上结合RT-Thread实时操作系统,通过Keil MDK的特定编译选项实现可动态加载的应用程序模块。重点讲解了位置无关代码(PIC)的实现方法,包括Keil关键配置步骤、系统与APP交互实现以及实战调试技巧,为嵌入式系统开发提供灵活的动态加载解决方案。

418

RT-Thread构建系统解析:SConstruct与SCons自动化构建原理与实践

在嵌入式系统开发中,构建系统是连接源代码与可执行固件的关键桥梁,其核心作用是将分散的模块、库和配置文件自动化地编译、链接为最终程序。构建系统通过解析配置依赖、管理编译工具链、处理条件编译,实现了项目配置与物理代码的分离。基于Python的SCons构建工具,以其声明式脚本和跨平台特性,为嵌入式开发提供了灵活的自动化解决方案。在RT-Thread实时操作系统中,SConstruct文件作为构建入口,协同Kconfig配置解析与组件SConscript脚本,实现了高度模块化与可裁剪的系统构建。通过环境初始化、依

weixin_30378623的博客 389

【C语言常识】Keil MDK的分散加载文件.sct

出处:http://blog.csdn.net/tracing/article/details/9720157 面对这样一个新东西,先去官网看看,或者看看IDE的帮助,基本上你想要的东西都有了, BAIDU来的都不全面,这是一种学习方法。 http://www.keil.com/support/man/docs/armlink/armlink_BABDDHBF.htm ...

ps824959330的博客 2398

STM32CubeMX+EIDE双工具链移植RT-Thread Nano实战指南

实时操作系统(RTOS)是嵌入式开发中实现多任务调度与资源管理的核心技术,其核心原理在于通过任务调度器管理多个并发任务,提升系统响应效率与资源利用率。在资源受限的微控制器(MCU)如STM32上,RT-Thread Nano以其极简内核与低资源占用,成为RTOS入门的理想选择。其技术价值在于为裸机程序提供了清晰的任务管理与同步机制,有效解决了中断优先级混乱与调度逻辑复杂等工程难题。在应用场景上,RTOS广泛用于物联网设备、工业控制等需要并发处理的领域。本文聚焦于如何利用STM32CubeMX进行硬件初始化,

weixin_30298497的博客 402

CCRAM使用

https://blog.csdn.net/zcshoucsdn/article/details/79176306

貌似稿手的博客 1722

STM32F103移植RT-Thread 3.0.3实战:从零构建嵌入式实时系统平台

实时操作系统(RTOS)是嵌入式开发中实现多任务调度和资源管理的核心软件层,其原理在于通过任务调度器管理多个执行线程,确保关键任务能在确定时间内响应。在物联网终端、工业控制等场景中,RTOS的技术价值在于提供可靠的任务管理、同步机制和硬件抽象,从而提升开发效率和系统可靠性。RT-Thread作为一款国产开源实时操作系统,以其小而美的内核和丰富的组件生态著称,特别适合资源受限的MCU平台。本文以广泛应用的STM32F103 Cortex-M3 MCU为例,详细解析如何将RT-Thread 3.0.3版本移植到

weixin_33747129的博客 350

STM32嵌入式开发入门:从环境搭建到核心外设实战指南

在嵌入式系统开发领域,微控制器(MCU)是连接硬件与软件的核心。其工作原理基于处理器内核、存储器和丰富的外设接口协同工作,通过执行存储在闪存中的指令来控制硬件行为。这项技术的核心价值在于实现对物理世界的精准感知与控制,广泛应用于物联网设备、工业自动化、消费电子和智能家居等场景。掌握MCU开发,尤其是基于ARM Cortex-M内核的系列,是进入嵌入式行业的关键。本文聚焦于STM32这一生态成熟、社区活跃的硬件平台,详细解析如何从零搭建开发环境,并深入探讨GPIO、时钟系统、中断以及串口、定时器、ADC等核心

weixin_33968104的博客 354

RT-Thread Keil项目编译文件清理:自动化脚本与Git集成实践

在嵌入式开发中,编译过程会产生大量中间文件,如目标文件和依赖文件,这些文件由源代码通过编译工具链派生而来。理解其生成原理有助于管理项目结构和版本控制。自动化清理这些文件不仅能释放磁盘空间,更能有效净化代码仓库,避免无关文件干扰协作与提交。通过编写批处理或Shell脚本,开发者可以一键清除Objects、Listings等目录中的过程文件,并将此流程集成到Keil IDE或Git的.gitignore配置中,从而提升开发效率和项目整洁度。本文以RT-Thread项目为例,详解如何安全、高效地实现编译文件的自动

weixin_34296641的博客 310

Cortex-M3开发套件实战:从架构到调试排错全解析

32位MCU与C语言工具链是嵌入式开发的基石。ARM Cortex-M3处理器基于ARMv7-M架构与Thumb-2指令集,凭借统一内存映射和NVIC嵌套中断控制器,成为工业控制、物联网节点等场景的热门选择。面对STM32、GD32等开发套件,理解启动文件、时钟树与总线矩阵原理,是构建最小系统的关键。开发环境常用Keil MDK配合ST-Link/SWD调试器,掌握SWD协议接线、Flash下载失败排查以及printf重定向等调试技巧,能显著提升工程效率。寄存器操作、标准外设库与HAL库的取舍,则需结合产品

weixin_30608503的博客 420

RT-Thread目录结构解析:从内核到BSP的嵌入式开发地图

嵌入式实时操作系统(RTOS)是连接硬件与复杂应用软件的桥梁,其核心价值在于提供任务调度、内存管理和设备驱动等基础服务,确保系统在资源受限的微控制器(MCU)环境中可靠、实时地运行。理解RTOS的目录结构是掌握其设计哲学和进行高效开发、调试及定制的关键。以RT-Thread为例,其源码组织清晰体现了“内核最小化、组件可裁剪、BSP分离”的模块化思想。内核核心(src/)专注于调度、IPC等基础机制;组件层(components/)以可配置方式提供文件系统、网络协议栈等丰富功能;而板级支持包(bsp/)则封装

weixin_30430169的博客 387

STM32嵌入式开发入门:从核心概念到实战进阶指南

微控制器(MCU)作为嵌入式系统的核心,其开发涉及硬件抽象层、实时操作系统等关键技术。理解MCU的工作原理,如通过寄存器或硬件抽象层(HAL)操作外设,是嵌入式开发的基础。这些技术能显著提升代码可移植性和开发效率,其价值在于快速构建稳定可靠的智能硬件。在物联网终端、工业控制等场景中,MCU发挥着关键作用。本文聚焦STM32,这一基于ARM Cortex-M内核的流行MCU系列,探讨其HAL库开发、外设驱动等实战内容,并融入**STM32F103**和**FreeRTOS**等热词信息,为开发者提供从入门到进

weixin_34367257的博客 373

AGX Orin 部署PyTorch与Torchvision 2026避坑指南

本文提供了2026年在AGX Orin开发板上部署PyTorch与Torchvision的详细避坑指南。针对ARM64架构和JetPack 6.2系统,重点解决了Python 3.10环境配置、官方wheel包安装、torchvision源码编译等关键步骤,并分享了常见问题解决方案和性能优化技巧,确保深度学习环境稳定运行。

sky77的博客 752

RT-Thread Env工具保姆级指南:从软件包管理到一键生成MDK工程(避坑大全)

本文详细解析RT-Thread Env工具的核心功能,从软件包管理到一键生成MDK工程的全流程操作指南。通过实战演示如何规避嵌入式系统开发中的常见问题,提升开发效率,特别适合RT-Thread开发者和嵌入式系统工程师参考。

weixin_30932215的博客 526

【异常】OpenClaw 连接异常This site can‘t be reached 127.0.0.1 refused to connect Try: Checking the proxy

在访问OpenClaw相关服务时,浏览器提示如下异常信息,无法正常加载页面:Try:补充说明:该报错仅出现于本地访问场景(127.0.0.1为本地回环地址),涉及OpenClaw核心服务的本地连接交互,无外部网络及敏感信息泄露风险。

奶爸的编程之路,也就一周冷个三天 1484

STM32到GD32的RT-Thread迁移实战:Pin to Pin替换的避坑指南

在嵌入式开发领域,微控制器(MCU)的选型与替换是常见的工程实践,尤其是当供应链或成本因素驱动时,寻找硬件兼容的替代方案成为关键。其核心原理在于理解不同MCU厂商的芯片虽然在引脚和基础外设上可能宣称兼容,但在内核架构、时钟系统、存储器特性和外设寄存器层面往往存在细微差异。这种差异的技术价值在于,成功的迁移不仅能保障项目连续性、控制成本,还能提升团队对底层硬件的深度理解能力。在实际应用场景中,这种迁移常见于消费电子、工业控制和物联网设备开发。当项目基于实时操作系统(RT-Thread)构建时,系统滴答定时器、

weixin_30247307的博客 496

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

LuciferLiu_DBA 2190

2024年电气工程师最新面试题及答案

1. **基本电气工程原理**:包括电流、电压、电阻、功率等基本概念。2. **欧姆定律**:V = IR,描述电压、电流和电阻之间的关系。42. **风力发电系统组成**:包括风力涡轮机、发电机、控制系统等。44. **智能电网技术**:包括自动化控制、通信技术、数据分析等。10. **减少EMI**:使用屏蔽、滤波、合理布线等方法。40. **光伏系统组成**:包括光伏板、逆变器、控制器等。48. **能量存储技术**:包括电池、超级电容器、飞轮等。

guo162308的博客 6563

RT-Thread内核移植实战:从CPU架构适配到驱动开发的完整指南

内核移植是嵌入式实时操作系统开发中的核心技术,它涉及将操作系统内核适配到特定硬件平台的过程。其原理在于实现CPU架构的上下文切换、中断管理和内存布局等底层机制,确保操作系统能正确调度任务和管理硬件资源。这项技术的价值在于让开发者从框架使用者转变为系统塑造者,能深度优化性能、功耗和稳定性。在应用场景上,无论是将RT-Thread移植到新的国产MCU,还是为现有BSP进行定制化开发,内核移植都是实现硬件与软件完美结合的关键步骤。通过掌握上下文切换、中断处理和内存管理等核心机制,开发者可以解决系统不稳定、驱动不兼

weixin_30735745的博客 444

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码

天天酷科研的博客 243
上一篇: rtthread 线程同步量之间的调度
下一篇: rt-thread UART 驱动注册IO设备管理器的调用关系
returningprodigal
博客等级 码龄12年 53粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值