在Keil调试内存中的程序

在Keil调试内存中的程序

目录

  • 在Keil调试内存中的程序
    • 1. 问题引出
    • 2. 测试工程
    • 3. 工程和Keil配置

实验环境:

  • MCU:STM32F103C8T6 (Flash 64K RAM 20K)
  • Keil:uVision V5.27.0.0
  • 仿真器:ST-Link

参考源码:https://download.csdn.net/download/studyingdda/89925096

  • 基于STM32F103C8T6在Keil调试内存中的程序参考源码,同一个测试程序在Flash上运行时调试和在RAM中运行调试。

1. 问题引出

最近在使用STM32F103C8T6学习bootloader时遇到这样一个问题:

实现bootloader程序把flash上app程序copy到RAM中,然后跳转到RAM执行app程序时,bootloader运行完后无法正常执行app的工程,想要单步调试分析问题,由于是在内存中运行,所以在Keil中就需要相应配置,实现在内存中调试的功能

2. 测试工程

使用一个能够正常运行起来的工程,先烧录到Flash上运行,确保测试工程能够在STM32F103C8T6上运行起来。

使用ST-Link仿真器Debug:

在这里插入图片描述

程序能够正常运行起来。

3. 工程和Keil配置

基于测试工程进行配置。
参考文章:https://blog.51cto.com/u_4029519/5423341

  • 修改链接脚本(散列文件)把测试程序的链接地址指定为RAM

    • 配置工程使用散列文件,目的是更改程序的加载地址和运行地址为内存中

    • 在这里插入图片描述

    • 散列文件内容:

    LR_IROM1 0x20000000 0x00005000  {    ; load region size_regionER_IROM1 0x20000000 0x00005000  {  ; load address = execution address*.o (RESET, +First)*(InRoot$$Sections).ANY (+RO).ANY (+XO).ANY (+RW +ZI)}
    }
    
  • 创建新的调试配置:

  • 在这里插入图片描述

  • 配置ST-Link下载算法

  • 在这里插入图片描述

  • 配置初始化脚本,目的是设置栈和异常向量表,然后复位初始化

    先编写一个ram.ini文件,内容如下:

    FUNC void Setup (void) {SP = _RDWORD(0x20000000);          // Setup Stack PointerPC = _RDWORD(0x20000004);          // Setup Program Counter_WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register
    }LOAD  F103_Moduel\F103_Moduel.axf  INCREMENTAL      // DownloadSetup();                             // Setup for Running
    g, main
    

    把它放入工程目录里,比如01_FreeRTOS_Template\MDK-ARM\ram.ini,然后如下选择它:

    在这里插入图片描述

    重新编译后进行Debug:

    在这里插入图片描述

    成功在内存中调试。

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

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

相关文章

股票交易量化模型:如何构建与优化?

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…

Redis 集群 总结

前言 相关系列 《Redis & 目录》(持续更新)《Redis & 集群 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 集群 & 总结》(学习总结/最新最准/持续更新)《Redis & 集群…

导出问题处理

问题描述 测试出来一个问题,使用地市的角色,导出数据然后超过了20w的数据,提示报错,我还以为是偶然的问题,然后是发现是普遍的问题,本地环境复现了,然后是,这个功能是三套角色&…

Modern CMake 简明教程(8)- 集成Qt

在项目中集成 Qt 库需要先使用 find_package 查找 Qt 的安装位置。对于 Qt4, CMake 使用 Module 模式进行查找(FindQt4.cmake 由 CMake 提供),而 对于 Qt5、Qt6,则是使用 Config 模式进行查找,相应的 config 文件位于类似下面的目录中 D:\Qt\5.15.2\msvc2019\lib\cmake。…

探索AI工具的流行与应用:用户最受欢迎的AI工具及其影响

前言 随着人工智能(AI)技术的发展,各类AI工具在工作、生活和学习中被广泛使用。从提高生产力到个人创意的发挥,AI工具已成为许多人的日常“助手”。人们在使用AI工具时,最喜欢的和认为最好用的工具有哪些?…

ESP32-S3学习笔记:常用的ESP-IDF命令总结

参考资料:1.esptool.py工具 2.idf.py工具 后续文章的讲解需要用到IDF命令行工具,当前文章简单介绍一下。 目录 打开命令行的小技巧 一、读flash信息 二、擦除flash 三、读flash数据 四、写flash数据 打开命令行的小技巧 大家安装完IDF开发包后…

React类组件详解

React类组件是通过创建class继承React.Component来创建的,是React中用于构建用户界面的重要部分。以下是对React类组件的详细解释: 一、定义与基本结构 类组件使用ES6的class语法定义,并继承自React.Component。它们具有更复杂的功能&#xf…

腾讯云 COS 多 AZ 存储保证服务高可用性

腾讯云 COS 的多 AZ 存储架构能够为用户数据提供数据中心级别的容灾能力。多 AZ 存储将客户数据分散存储在城市中多个不同的数据中心,当某个数据中心因为自然灾害、断电等极端情况导致整体故障时,多 AZ 存储架构依然可以为客户提供稳定可靠的存储服务。 …

Java缓存技术(java内置缓存,redis,Ehcache,Caffeine的基本使用方法及其介绍)

目录 摘要 1. Java缓存技术概述 1.1定义 1.2 优势 1.3 应用场景 2. Java中的内置缓存实现 2.1 通过通过HashMap和ConcurrentHashMap实现缓存 3. Java缓存框架 3.1 Redis 3.1.1 redis的简介 3.1.4 Redis的工作原理 3.1.5 总结 3.2 Ehcache 3.2.1 Eh…

linux网络编程6——基于UDP的可靠传输协议KCP/QUIC

文章目录 基于UDP的可靠传输协议KCP/QUIC1 KCP基本原理1.1 如何做到可靠传输1.2 TCP和UDP如何选择1.3 ARQ协议1.3.1 停止等待ARQ1.3.2 回退nARQ1.3.3 选择重传ARQ 1.4 RTT和RTO1.5 流量控制——滑动窗口1.6 拥塞控制1.7 KCP协议的优势1.7.1 RTO翻倍 vs 不翻倍1.7.2 选择重传 vs…

表格编辑demo

<el-form :model"form" :rules"status ? rules : {}" ref"form" class"form-container" :inline"true"><el-table :data"tableData"><el-table-column label"计算公式"><templat…

ArcGIS001:ArcGIS10.2安装教程

摘要&#xff1a;本文详细介绍arcgis10.2的安装、破解、汉化过程。 一、软件下载 安装包链接&#xff1a;https://pan.baidu.com/s/1T3UJ7t_ELZ73TH2wGOcfpg?pwd08zk 提取码&#xff1a;08zk 二、安装NET Framework 3.5 双击打开控制面板&#xff0c;点击【卸载程序】&…

导出BERT句子模型为ONNX并推理

在深度学习中&#xff0c;将模型导出为ONNX&#xff08;Open Neural Network Exchange&#xff09;格式并利用ONNX进行推理是提高推理速度和模型兼容性的一种常见做法。本文将介绍如何将BERT句子模型导出为ONNX格式&#xff0c;并使用ONNX Runtime进行推理&#xff0c;具体以中…

webpack解决使用window.open方法打开history路由页面提示404的问题

问题: 一般情况下应该使用history.push(/ssh)打开history路由页面 但项目中使用window.open(/ssh),然后使用new WebSocket进行通信 开发环境下启动项目后,/ssh页面打开却显示cannot get /ssh,控制台提示404 排查问题: 在React开发环境中使用 window.open 打开路由页面时&a…

05方差分析续

文章目录 1.Three way ANOVA2.Latin square design2.Hierarchical (nested) ANOVA3.Split-plot ANOVA4.Repeated measures ANOVA5.Mixed effect models 1.Three way ANOVA 三因素相关分析 单因子分析的代码 data(mtcars) nrow(mtcars) # 32 mtcars$cyl as.factor(mtcars$cyl…

c#子控件拖动父控件方法及父控件限在窗体内拖动

一、效果 拖放位置不超过窗体四边,超出后自动靠边停靠支持多子控件拖动指定控件拖放(含父控件或窗体)点击左上角logo弹出消息窗口(默认位置右下角)1.1 效果展示 1.2 关于MQTTnet(最新版v4.3.7.1207)实现在线客服功能,见下篇博文 https://github.com/dotnet/MQTTnet 网上…

BIO,NIO,直接内存,零拷贝

前置知识 什么是Socket&#xff1f; Socket是应用层与TCP/IP协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;一般由操作系统提供。在设计模式中&#xff0c;Socket其实就是一个门面模式&#xff0c;它把复杂的TCP/IP协议处理和通信缓存管理等等都隐藏在Sock…

莱维飞行(Levy Flight)机制的介绍和MATLAB例程

文章目录 莱维飞行机制算法简介自然现象中的应用优化问题中的应用关键公式 MATLAB代码示例代码说明运行结果 莱维飞行机制算法的应用前景1. 自然科学中的应用2. 计算机科学中的应用3. 工程技术中的应用4. 金融与经济学中的应用5. 医疗与生物信息学中的应用6. 未来研究方向 结论…

【软件工程】软件工程入门

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必练内功_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

软件分享丨Marktext 编辑器

Marktext是一款开源免费的Markdown编辑器&#xff0c;它具有简洁优雅的界面设计和强大的功能&#xff0c;支持多种Markdown语法&#xff0c;包括表格、流程图、甘特图、数学公式、代码高亮等。Marktext还支持导出HTML和PDF格式的文档&#xff0c;非常适合需要编写Markdown文档的…