KEIL 调试的 ini 文件有什么用?

2023-11-04

     在初学者眼里,调试手段很多,自己平常使用调试手段的具有局限性、单一性,碰到复杂的问题还是很难解决。比如看watch窗口、memory窗口、打断点这些基本的调试手段。

     就比如新接手中的一个项目,总是会出现串口通信错误,我也知道这是两次数据发送混乱了,但就是很难解决,为什么?因为通信是时时刻刻发生的,而你却不知道会在哪一刻发生错误。即使你一直处于在线调试状态,按照一般的调试手段,你也只能通过 Watch、Memory 之类的调试手段获得一些发生通信错误的那一刻的数据,但是之前的数据却早已淹没在时间长河里,你不知道在发生通信错误之前发生了什么,而往往通信错误之前的历史数据才是重中之重。

如何记录调试过程中的历史数据??
在keil里面:
    ITM 调试,硬件不支持就不能使用
    ini文件可不用硬件支持也可以使用

     ini文件相当于一个额外的.c 文件,可以实现如单片机程序的绝大多数事情,比如读取 IO,读取寄存器,读取内存,操作寄存器,写入内存等等,更多详细的内容可参看官方的在线帮助文档。

     当然你也可以直接像打开 txt 文件一样打开这个文件。

     而你会发现,和写 C 程序一样,可定义变量、函数,你也可以使用 // 来进行必要的注释,当然 /**/ 也是可以的。本文以调用函数为例。

FUNC int add(int a, int b)  
{ 
   
    printf("hello world!!!\n");;
    return (a+b); 
}

FUNC void MyRegs(void)
{  
  printf ("---------- MyRegs() ----------\n");
  printf (" R4 R8 R9 R10 R11 R12\n");
  printf (" %04X %04X %04X %04X %04X %04X\n",
            R4,  R8,  R9,  R10, R11, R12);
  printf ("------------------------------\n");
}


FUNC void TEST_PRINTF(void)
{  
   printf("test printf!!!\n");;
}

     将.ini 文件添加到初始化文件中,KEIL 进入调试模式的时候,会自动加载这个文件,并执行里面的内容,假设我们保存为test.ini
在这里插入图片描述

     在进入调试模式下,程序在没运行下或者停止(打断点停止),可编辑ini文件,可编辑文件的话,就有红色框框下面这个选项
在这里插入图片描述
ini文件编辑后,编译
diang

     通过command串口输入命令,调用ini文件里面的函数,程序运行时调用,按ENTER键结束调用输入
在这里插入图片描述在这里插入图片描述

也可以定义按钮,调用ini文件里面的函数,程序运行时调用
在这里插入图片描述
在command窗口输入创建按钮命令,可创建按钮
在这里插入图片描述
分别输入两个命令,创建两个按钮,对应的两个命令

DEFINE BUTTON "MyRegs","MyRegs()" /*调用调试函数*/

DEFINE BUTTON "TEST_PRINTF","TEST_PRINTF()" /*调用调试函数*/

按下按钮可以可在运行过程中,任意调用运行函数;
比如一直按下
在这里插入图片描述
command窗口一直输出调用函数运行输出的结果
在这里插入图片描述
删除按钮MyRegs在command输入

KILL BUTTON 1         /* Kill Toolbox Button number 1  */

删除按钮TEST_PRINTF在command输入

KILL BUTTON 2         /* Kill Toolbox Button number 2 */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KEIL 调试的 ini 文件有什么用? 的相关文章

  • 远程调试、无cuDnn、自定义模块无法导入问题记录

    说明 记录自己的错误 慢慢来 比较快 1 Pycharm远程调试出现错误 root miniconda3 bin python can t open file root autodl tmp mian py Errno 2 No such
  • java 中 热部署与卸载关系

    今天发现早年在大象笔记中写的一篇笔记 之前放在ijavaboy上的 现在它已经访问不了了 前几天又有同事在讨论这个问题 这里拿来分享一下 在web应用开发或者游戏服务器开发的过程中 我们时时刻刻都在使用热部署 热部署的目的很简单 就是为了节
  • abstract关键字(抽象类)【Java】

    目录 一 abstract关键字 1 1 abstract修饰类 抽象类 1 2 abstract 修饰方法 抽象方法 1 3 abstract使用的注意点 二 abstract 关键字的举例说明 一 abstract关键字 解释为抽象的

随机推荐

  • PC常用软件

    PotPlayer播放器 功能齐全 无广告 下载地址 Geek卸载软件 体积小 功能强 专职卸载 无广告 下载免费版 Internet Download Manager下载软件 可以接管浏览器下载 下载速度快 没迅雷那么麻烦 下载地址 7
  • CSS基础样式和排版文本段落

    一 CSS基础样式 1 字体属性 font family是字体属性 font family 后面可以直接打出来字体的样式 或者直接选择 font family Times Times New Roman 楷体 也可以用是为啥 如果浏览器认识
  • 什么是Hash?

    原文链接 https www cnblogs com ktao p 8714513 html 什么是Hash Hash中文翻译为散列 又成为 哈希 是一类函数的统称 其特点是定义域无限 值域有限 把任意长度的输入 又叫做预映射 pre im
  • vue——数字加逗号分隔

    带小数的数字三位一分隔 filters num val fix 2 gt if val 0 val Number val 字符串转为数字 目标数据为数字可不转 val val toFixed 2 保留两位小数并转为字符串 let int v
  • IE中CSS-filter滤镜小知识大全

    本文转载 并做了部分修改 原文链接https segmentfault com a 1190000002433305 前言 前段时间在做一个专题的时候用到了opacity不透明度属性 因为设计图上是半透明背景 白色文字 有时候我们很习惯的用
  • 走过路过的帅哥美女,进来了解一下异常吧!

    异常的概念 异常是程序在运行过程中所发生的意外事件 它中断指令的正常执行 在Object类下的Throwable 有两个重要的子类 Exception 异常 和 Error 错误 二者都是 Java 异常处理的重要子类 各自都包含大量子类
  • 间谍高度(上帝视角)之redis分布式锁

    间谍高度 上帝视角 和redis分布式锁 一 写作动机的初衷 1 1 分享与留下 二 分享 2 1 间谍高度 2 2感受 三 留下 3 1专业技术的思考 四 redis分布式锁的内容 4 1代码 抢锁代码 加锁代码 解锁代码 效果演示 4
  • windows上利用C++语言查询设备 (windows,vs2010,SetupDiEnumDeviceInfo)

    代码功能将windows设备遍历一次 然后将结果直接存放到map容器中 需要清楚其中一个设备的个数 直接通过map可以查询 include
  • 记录将代码文件上传到Github托管平台,简单快捷,容易操作

    第一步 下载GitHub Desktop到电脑 贴出爱心链接 一键直达 GitHub Desktop Simple collaboration from your desktop 第二步 安装到你想安装的地址 第三步 相信你已经注册过git
  • android 实现一个按钮按下时总触发一个事件

    一 简单的思路为 生产者 消费者模式来实现 1 重写这个对象的触摸事件 对触摸事件与事件分发机制的同学不了解的可以查阅其他资料 2 在MotionEvent ACTION DOWN 事件中启动一个线程 这个线程类似生产者 它不停的生产想要的
  • 神经网络入门之DNN(一)

    神经网络简史 神经网络技术起源于上世纪五 六十年代 当时叫感知机 perceptron 拥有输入层 输出层和一个隐含层 输入的特征向量通过隐含层变换达到输出层 在输出层得到分类结果 但是 Rosenblatt的单层感知机有一个严重得不能再严
  • 【HJ76】尼科彻斯定理

    题目描述 验证尼科彻斯定理 即 任何一个整数m的立方都可以写成m个连续奇数之和 例如 1 3 1 2 3 3 5 3 3 7 9 11 4 3 13 15 17 19 输入一个正整数m m 100 将m的立方写成m个连续奇数之和的形式输出
  • Video Style Transfer汇总

    Video Style Transfer 非深度方法 Processing images and video for an impressionist effect ACM Press Addison Wesley Publishing C
  • 如何用C语言写一个求离散函数曲率

    要在C语言中求离散函数的曲率 首先需要定义离散函数的数据点 然后使用差分的方法来计算曲率 下面是一个简单的代码示例 include
  • table中嵌套多层table

    因工作业务需求 需要展示一个多层嵌套的数据结构 现整理如下 分享给需要的朋友 应用框架vue2 初始的数据结构如下 new Vue el table1 data table1 order ex 20171006 table2 kind 苹果
  • Linux脚本练习之script063-打印空行的行号

    script063 题目 题目来源于 SHELL5 打印空行的行号 写一个 bash 脚本以输出一个文本文件 nowcoder txt 中空行的行号 可能连续 从1开始 示例 假设 nowcoder txt 内容如下 a b c d e f
  • 我的第一个HBuider项目 ——五子棋

    HBuider是实训老师建议我们使用的 写起代码来感觉很流畅 自动缩进与纠错功能都很不错 之所以做五子棋 也是因为五子棋是一个比较简单的游戏 HBuider上手容易 主要是编写代码有点头大 还好在我的穷追猛打下跟上了老师的节奏 成功完成了我
  • Markdown插入图片

    Markdown 图片语法格式如下 alt 属性文本 图片地址 可选标题 alt 属性文本图片的Alt标签 用来描述图片的关键词 可不填 可用于SEO 方便搜索引擎根据该关键词搜索图片 图片地址 本地图片 网络图片 base64字符串 可选
  • 蓝桥杯:接龙

    蒜头君在玩一种接龙的游戏 蒜头君有 30000张卡片分别放在 30000列 每列依次编号为 1 2 30000 同时 蒜头君也把每张卡片依次编号1 2 30000 游戏开始 蒜头君让让第i张卡片处于第i i 1 2 30000 列 然后蒜头
  • KEIL 调试的 ini 文件有什么用?

    在初学者眼里 调试手段很多 自己平常使用调试手段的具有局限性 单一性 碰到复杂的问题还是很难解决 比如看watch窗口 memory窗口 打断点这些基本的调试手段 就比如新接手中的一个项目 总是会出现串口通信错误 我也知道这是两次数据发送混