MDK 代码烧录到RAM区运行

news2024/11/26 11:31:50

MDK 代码烧录到RAM区运行

  • 环境
  • 配置
  • 设置分散加载文件
  • 启动文件修改
    • 设置外部调试器烧录
  • 建立函数入口
  • 半主机问题导致BKPT 0xAB

有一个需求,除了IAR以及GCC的版本工程还需要MDK版本,为了实现最小的工程环境,flash烧录算法也没有,这时需要直接跑在RAM中

这里以一个最小的平台为例(不含外设驱动)

关联 制作flash算法文件参考

环境

MDK:v5.39
编译器:armclang
平台:arm cortex-m3

配置

我的内存地址:0x10000000 - 0x100FFFFF

编写调试配置文件(设置栈、PC、中断向量表)RAM_Debug.ini

/*----------------------------------------------------------------------------
 * Name:    RAM_Debug.ini
 * Purpose: RAM Debug Initialization File
 * Note(s):
 *----------------------------------------------------------------------------
 * This file is part of the uVision/ARM development tools.
 * This software may only be used under the terms of a valid, current,
 * end user licence from KEIL for a compatible version of KEIL software
 * development tools. Nothing else gives you the right to use this software.
 *
 * This software is supplied "AS IS" without warranties of any kind.
 *
 * Copyright (c) 2008-2011 Keil - An ARM Company. All rights reserved.
 *----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
  Setup()  configure PC & SP for RAM Debug
 *----------------------------------------------------------------------------*/
FUNC void Setup (void) {
  SP = _RDWORD(0x10000000);          // Setup Stack Pointer
  PC = _RDWORD(0x10000004);          // Setup Program Counter
  _WDWORD(0xE000ED08, 0x10000000);   // Setup Vector Table Offset Register
}

FUNC void OnResetExec (void)  {      // executes upon software RESET
  Setup();                           // Setup for Running
}

load %L incremental                 // load %L incremental  增量下载模式节省时间

Setup();                             // Setup for Running

g, main

设置应用
在这里插入图片描述

设置分散加载文件

前512KB用于代码段只读
后512KB用于变量
命名xxx.sct

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x10000000 0x80000  {    ; load region size_region
  ER_IROM1 0x10000000 0x80000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }

  RW_IRAM1 0x10080000 0x7F000  { ; 512KB Data
      ;*(USE_VAR_SPACE)
      .ANY (+RW +ZI)
    }

  ;ARM_LIB_HEAP  0x100FF000 EMPTY  0x800 {

  ;}

  ;ARM_LIB_STACK 0x100FF800 EMPTY  0x800 {

  ;}

  ;ARM_LIB_STACKHEAP 0x100FF000 EMPTY  0x1000 {

  ;}
}

设置应用
在这里插入图片描述
这里保持一致
在这里插入图片描述

启动文件修改

命名为xxx.s


Stack_Size		EQU     0x400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size      EQU     0x400

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                PRESERVE8
                THUMB


; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size
                IMPORT  SysTick_Handler

__Vectors       DCD     __initial_sp                      ; Top of Stack
                DCD     Reset_Handler                     ; Reset Handler
                DCD     NMI_Handler                       ; NMI Handler
                DCD     HardFault_Handler                 ; Hard Fault Handler
                DCD     MemManage_Handler                 ; MPU Fault Handler
                DCD     BusFault_Handler                  ; Bus Fault Handler
                DCD     UsageFault_Handler                ; Usage Fault Handler
                DCD     0                                 ; Reserved
                DCD     0                                 ; Reserved
                DCD     0                                 ; Reserved
                DCD     0                                 ; Reserved
                DCD     SVC_Handler                       ; SVCall Handler
                DCD     DebugMon_Handler                  ; Debug Monitor Handler
                DCD     0                                 ; Reserved
                DCD     PendSV_Handler                    ; PendSV Handler
                DCD     SysTick_Handler                   ; SysTick Handler

                ; External Interrupts
                ;DCD     WWDG_IRQHandler                   ; Window WatchDog interrupt ( wwdg1_it)


__Vectors_End

__Vectors_Size  EQU  __Vectors_End - __Vectors

                AREA    |.text|, CODE, READONLY

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler                    [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

; Dummy Exception Handlers (infinite loops which can be modified)

NMI_Handler     PROC
                EXPORT  NMI_Handler                      [WEAK]
                B       .
                ENDP
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler                [WEAK]
                B       .
                ENDP
MemManage_Handler\
                PROC
                EXPORT  MemManage_Handler                [WEAK]
                B       .
                ENDP
BusFault_Handler\
                PROC
                EXPORT  BusFault_Handler                 [WEAK]
                B       .
                ENDP
UsageFault_Handler\
                PROC
                EXPORT  UsageFault_Handler               [WEAK]
                B       .
                ENDP
SVC_Handler     PROC
                EXPORT  SVC_Handler                      [WEAK]
                B       .
                ENDP
DebugMon_Handler\
                PROC
                EXPORT  DebugMon_Handler                  [WEAK]
                B       .
                ENDP
PendSV_Handler  PROC
                EXPORT  PendSV_Handler                    [WEAK]
                B       .
                ENDP
; SysTick_Handler PROC
;                 EXPORT  SysTick_Handler                   [WEAK]
;                 B       .
;                 ENDP

Default_Handler PROC

                ;EXPORT  WWDG_IRQHandler                   [WEAK]


;WWDG_IRQHandler


                B       .

                ENDP

                ALIGN

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
                 IF      :DEF:__MICROLIB

                 EXPORT  __initial_sp
                 EXPORT  __heap_base
                 EXPORT  __heap_limit

                 ELSE

                 IMPORT  __use_two_region_memory
                 EXPORT  __user_initial_stackheap

__user_initial_stackheap

                 LDR     R0, =  Heap_Mem
                 LDR     R1, =(Stack_Mem + Stack_Size)
                 LDR     R2, = (Heap_Mem +  Heap_Size)
                 LDR     R3, = Stack_Mem
                 BX      LR

                 ALIGN

                 ENDIF

                 END

设置外部调试器烧录

在这里插入图片描述

建立函数入口

/**
 * @brief 函数主入口
 *
 */
int main(void)
{
	return 0;
}

半主机问题导致BKPT 0xAB

MDK开启系统函数重定向功能
ref: https://developer.arm.com/documentation/ka002219/latest
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1832605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三分钟搞懂AI Agent!

0 前言 无需为不同任务使用单独软件使用日常语言来命令你的设备“代理”是人工智能的高级形式未来五年将成为现实人人都有的私人助理Agent应用在干行百业之中(医疗、教育、娱乐....) 1 Agents 是什么&#xff1f; Al Agents是基于LLM的能够自主理解、自主规划决策、执行复杂任…

复旦发布开源版本的EMO,只需输入一段音频和一张照片就可以让人物开始说话。

之前和大家介绍过阿里的EMO&#xff0c;用户只需要提供一张照片和一段任意音频文件&#xff0c;EMO即可生成会说话唱歌的AI视频。最长时间可达1分30秒左右。感兴趣的小伙伴可以点击下面链接阅读。 近日&#xff0c;复旦发布了一个开源版本的 EMO。 通过输入音频让面部照片开始…

示例:WPF中绑定枚举到ComboBox的方式

一、目的&#xff1a;在开发过程中&#xff0c;经常会需要把枚举绑定到ComboxBox下拉列表中&#xff0c;其实方法有很多&#xff0c;这里面通过MarkupExtension扩展GetEnumSourceExtension去绑定到列表 二、实现 定义GetEnumSourceExtension类 public class GetEnumSourceExte…

前端菜鸡流水账日记 -- git管理工具(多版本)

哈喽哇&#xff0c;我又又又来了&#xff0c;其实之前就挺想进行一篇关于git管理工具的分享的&#xff0c;但是一直都没有来的及&#xff0c;直到今天&#xff0c;在学习的时候&#xff0c;&#xff0c;一个朋友新发现了一个vscode中的小插件&#xff0c;所以我就决定一起来分享…

DPDK环境配置

DPDK环境配置 DPDK&#xff08;Data Plane Development Kit&#xff09;是一个开源的软件框架&#xff0c;最初由Intel开发&#xff0c;旨在提升数据包处理性能&#xff0c;尤其是在Intel架构的处理器上。它允许开发者在用户空间&#xff08;user space&#xff09;而不是传统…

EasyRecovery2024你的电脑数据恢复神器!

EasyRecovery电脑数据恢复软件&#xff0c;简直是我的数据救星啊&#xff01;&#x1f64c;以前不小心删除了一些重要的文件&#xff0c;整个人都慌了神。但自从有了它&#xff0c;再也不用担心数据丢失的问题啦&#xff01;&#x1f481;‍♀️ 这款神奇的软件不仅可以恢复误…

持续学习的综述: 理论、方法与应用

摘要 为了应对现实世界的动态&#xff0c;智能系统需要在其整个生命周期中增量地获取、更新、积累和利用知识。这种能力被称为持续学习&#xff0c;为人工智能系统自适应发展提供了基础。从一般意义上讲&#xff0c;持续学习明显受到灾难性遗忘的限制&#xff0c;在这种情况下…

个人在家如何获取World Scientific文献的经验分享

今天有位同学求助一篇World Scientific文献&#xff0c;他的学校虽然有这个数据库&#xff0c;但订购的该数据库资源内容有限&#xff0c;这位同学所需的文献不在学校订购范围内所以下载不了。今天小编就分享一个在家就可获取各个数据库文献的方法。本文以这篇求助文献为例&…

TC3xx A\B SWAP机制的小细节(2)

目录 1.引入 2.TC3xx Swap机制小细节 3.小结 1.引入 上文TC3xx A\B SWAP机制的小细节(1)-CSDN博客主要把OTA的概念&#xff0c;以及MCU的硬件A\B Swap机制做了简单介绍&#xff0c;下面我们来聊聊TC3xx的SWAP机制 2.TC3xx Swap机制小细节 英飞凌TC3xx提供了硬件SOTA机制&…

一招解决家里粉尘螨虫太多难题?家用空气净化器哪款品牌效果好?

一到夏天&#xff0c;两天不打扫家里&#xff0c;家里就会布满一层粉尘。而且春夏的气候也是粉尘螨虫生长和繁殖疯狂时期&#xff0c;一不注意室内空气污染卫生的情况下&#xff0c;就会加剧尘螨的滋生&#xff0c;体质弱、敏感的人群生活在这样的空气环境下&#xff0c;还会增…

Web数据提取:Python中BeautifulSoup与htmltab的结合使用

1. 引言 Web数据提取&#xff0c;通常被称为Web Scraping或Web Crawling&#xff0c;是指从网页中自动提取信息的过程。这项技术在市场研究、数据分析、信息聚合等多个领域都有广泛的应用。Python社区提供了丰富的工具和库来支持这一技术&#xff0c;其中BeautifulSoup和htmlt…

五大维度大比拼:ChatGPT比较文心一言,你的AI助手选择指南

文章目录 一、评估AI助手的五个关键维度二、ChatGPT和文心一言的比较 评估AI助手的五个关键维度&#xff0c;以及ChatGPT和文心一言的比较如下&#xff1a; 一、评估AI助手的五个关键维度 界面友好性 &#xff1a; 评估标准&#xff1a;用户界面是否直观易用&#xff0c;是否…

NVIDIA发布Nemotron-4 340B 用于生成高质量的合成数据

Nemotron-4 340B 是一系列为 NVIDIA NeMo 和 NVIDIA TensorRT-LLM 优化的模型&#xff0c;包括最先进的指令和奖励模型&#xff0c;以及用于生成式 AI 训练的数据集。 英伟达今日宣布推出 Nemotron-4 340B&#xff0c;这是一系列开放模型&#xff0c;开发者可以使用它们生成用于…

MySQL Server和Server启动程序(一)

MySQL Server mysqld&#xff0c;也称为MySQL Server&#xff0c;是一个单线程多任务的程序&#xff0c;它在MySQL安装中执行大部分工作。它不会生成额外的进程。MySQL Server管理对包含数据库和表的MySQL数据目录的访问。数据目录也是其他信息&#xff08;如日志文件和状态文…

小区噪音监测管理系统设计

一、引言 随着城市化进程的加快&#xff0c;小区居民对于居住环境的要求日益提高。其中&#xff0c;噪音污染已成为影响居民生活质量的重要因素。因此&#xff0c;设计一套小区噪音监测管理系统&#xff0c;对于提升居民的生活品质和小区管理效率具有重要意义。本文将详细阐述…

中国星网时空信息集团春招Offer面经

本文介绍2024届春招中&#xff0c;中国卫星网络集团有限公司下属中国时空信息集团有限公司中&#xff0c;业务助理岗位1场面试的基本情况、提问问题等。 2024年04月投递了中国卫星网络集团有限公司下属中国时空信息集团有限公司中的业务助理岗位&#xff0c;所属部门为运营中心…

如何使用nginx部署https网站(亲测可行)

公司本来有网站sqlynx.com是http运行的&#xff0c;但因为产品出海&#xff0c;基本上都要求使用https&#xff0c;但又需要兼容已有的http服务&#xff0c;所以我自己尝试做了一次https的部署&#xff0c;目前是正常可用的。 目录 步骤 1&#xff1a;安装 Nginx 步骤 2&…

关于从大平台跳转各个应用,更新应用前端包后,显示的仍是旧的内容,刷新应用页面后方才显示新的内容的问题的排查和解决

我们从绿洲物联平台跳转智能锁应用&#xff0c; 如下&#xff0c;我们可以看到&#xff0c;我们是通过a标签去跳转应用的。但是我们打开控制台的话&#xff0c;因为a标签是另外新开一个页面&#xff0c;我们看不到新页面的html文档的加载情况。 我们可以临时把_blank改成_sel…

MySQL约束详解:构建数据完整性基石

目录 MySQL约束1.1 约束1.1 数据类型1.2 主键约束[重要]1.3 自增约束1.4 唯一约束1.5 非空约束1.6 默认值代码演示 1.7 外键约束[了解]思维导图最后 MySQL约束 MySQL作为广泛使用的开源关系型数据库管理系统&#xff0c;其强大的数据约束功能对于维护数据的一致性和准确性至关…

鸿蒙原生App开发之:套用混合app开发思路

2024年&#xff0c;似乎华为迎来了新的企业机遇--鸿蒙独立操作系统。 受到全球国际形势的影响&#xff0c;加之第四次科技革命&#xff08;AI革命&#xff09;冷不丁的出现&#xff0c;在他国AI技术领先的前提下&#xff0c;中国自主研发的独立操作系统再次提上新的战略高度。…