Keil在线调试程序乱跑

2023-10-29

        最近改了一个别人写的程序,但是在调试器调试过程中出现了一个奇怪的现象,代码部分如下:

Sys_Run这个函数在main函数中被无限循环调用,初始化时我会将TCENABLE这个标志位置0,通过CAN发送信息来改变他的数值。

        按道理来说当我运行程序时,如果我什么都不动,程序应该一直在循环等待直至TCENABLE被置1才会进入处理过程。

        但奇怪的是我在191行打个断点程序居然停了,通过Watch界面我看到TCENABLE的值仍然是0,单步执行发现程序执行了191和192两行代码。我不停地单步执行,奇怪的事情又发生了:有时候到了while判断就直接出来,有时候又会执行191和192两行,但是TCENABLE的值一直是没有变化的。

        我在网上搜了好久百思不得其解,询问了老师傅一眼指出了问题所在:

这里面有个Optimization选项,因为程序原版是别人写的,应该是他认为设置为了level3。这个选项什么意思呢,简单来说就是编译器的优化等级,一共四个等级0-3等级越高优化效率越高。等级为0就是关闭优化,我们编写程序时初始化值一般都是level0。具体相关等级的优化效果可以去查keil的说明手册,我这里大概简述一下高等级的作用:优化你的代码,提高代码运行的效率。但同时代码的运行逻辑并不会如你想象的那样运行。

        于是我将优化等级改为level0后程序不再乱跑。

        如果你是资深玩家那么提高优化等级无疑是一件好事,因为编译器优化的只是最后执行的过程,如果你能看懂汇编就会发现并不会优化汇编部分。但是对于初学者提高优化等级会在调试过程中带来很多谜一样的问题。

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

Keil在线调试程序乱跑 的相关文章

  • LeetCode_01两数之和

    记录LeefCode历程 题目 两数之和 给定一个整数数组和一个目标值 找出数组中和为目标值的两个数 假设每个输入只对应一种答案 且相同元素不能被重复利用 try1 Note The returned array must be mallo

随机推荐

  • echarts图表如何实现添加点击事件控制图表内容样式的显示隐藏,echarts图表柱状图的点击事件

    import as echarts from echarts export function rawLine el dataX dataY text IMPbase const myChart echarts init el 指定图表的配置
  • maxscript命令

    Black APEXSaveFBX ActionCreateFlow ActionEditFlow ActionExtendFlow ActionIdleAddMode ActionIdleSubtractMode AddConstrain
  • spring MVC笔记

    应该还是要学spring mvc 同时学习session网络编程 先简单写一点 后续再完善 Servlet生命周期的三个阶段 init service destroy 在我们第一次学Servlet编程 学java web的时候 还没有那么多
  • 域名解析错误分析及解决

    1 1 1 初步判断 查看网络是否连接 执行命令 ifconfig 执行命令 看是否能被解析 ping localhost ping www baidu com 不能被解析时 会提示错误 ping bad address xxx 1 1 2
  • Dense-Unet实现眼底图像血管分割(VesselNet)

    之前用Retina Unet项目实现了眼底图像血管分割 分割网络用的是Unet 现在看了DenseNet之后 将之前Unet网络中的Conv2d替换成下图的Dense Block之后 效果会有提升 在DRIVE数据集上的AUC值 Metho
  • 配置Nginx作为动态应用程序代理

    简介 在本教学文章中 我们将学习如何将Nginx配置为代理动态应用程序 如PHP Python或Node js 以处理动态请求 通过将Nginx配置为动态应用程序代理 我们可以提供高性能 可靠和安全的动态内容传递 本教程将介绍如何配置Ngi
  • C++初识

    简单的C 程序 include
  • linux 内核编程 常见错误,Linux编程常见错误及解决方案

    对于linux新手来说Linux编程会经常遇见一些问题 今天列出新手们最经常遇到的编程错误 并提供解决方案 1 由于是Linux新手 所以现在才开始接触线程编程 照着GUN Linux编程指南中的一个例子输入编译 结果出现如下错误 unde
  • [Pytorch系列-52]:循环神经网络RNN - 全连接网络与RNN网络在时间序列数据集上拟合的比较

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121526014 目录 第1章 概述
  • IDEA实现远程调试步骤详解

    IDEA不仅可以本地调试代码 也可以远程调试代码 一 基本原理 本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信 传递调试指令和调试信息 被调试程序的远程虚拟机 作为 Debug 服务端 监听 Debug 调试
  • 【Mo 人工智能技术博客】时序预测模型——LSTNet

    时序预测模型 LSTNet 作者 陈东瑞 1 背景 多元时间序列数据在我们的日常生活中无处不在 从股票市场的价格 高速公路上的交通流量 太阳能发电厂的输出量 不同城市的温度等等 在这样的应用中 用户通常对基于时间序列的历史观察来对新趋势或潜
  • 人脸识别技术的成熟让刷脸支付落地

    按照识别的精度排序 确实是虹膜 指纹 人脸的识别精度依次降低 但人脸识别可以根据摄像头的提升而提升 双目摄像头 结构光摄像头 TOF等等 这个上升空间很大 从应用性来看 你现在让所有的用户都去提取虹膜信息 指纹信息 这个很难 不现实 而我们
  • 文件复制到u盘后文件夹是空的,怎么恢复?

    便携式存储设备有很多种 其中就有u盘 由于这个给予我们生活工作中极大的便利 相信不少小伙伴都喜欢随身携带一个 但不少人遇到过明明已经把文件存放到u盘里了 在正常打开的情况下 再次使用时 出现u盘文件夹是空白的 碰到这样的情况 文件复制到u盘
  • 量化指标公式源码_精选指标:通达信公式无敌紫金钻选股指标——附源码

    精选指标 通达信公式无敌紫金钻选股指标 附源码 精选指标 通达信公式无敌紫金钻选股指标 附源码 VAR1 CLOSE MA CLOSE 21 MA CLOSE 21 100 VAR2 CLOSE LLV LOW 43 HHV HIGH 43
  • 第10章 K8s进阶篇-高级调度计划任务,污点和容忍和Affinity

    10 1 什么是Job job常用作初始化数据和基本的创建操作 job创建成功后不会立即执行容器命令 只有suspend true 才会执行 10 2 Job使用入门 root k8s master01 10st cat job yaml
  • HTML实现简单登录以及界面跳转

  • 经典上中(左右)下三栏布局

    经典上中 左右 下三栏布局 利用绝对定位实现三栏布局 1 html div class container div class top 我是顶部 div div class content div class div div div
  • 构建用户画像-标签体系

    用户画像是目前在技术公司广泛使用的技术 是根据客户人口统计信息 社交关系 偏好习惯和消费行为等信息而抽象出来的标签化画像 常常用在精准营销 圈定人群 发送短信消息 APP弹窗等等 用户画像的准确性往往会直接影响到运营的效果和获客成本 用户画
  • Qt Widgets 之 QDockWidget(停靠窗口)

    目录 什么是停靠窗口 如何添加停靠窗口 QDockWidget setWidget QMainWindow addDockWidget 设置停靠选项 Options AnimatedDocks AllowNestedDocks AllowT
  • Keil在线调试程序乱跑

    最近改了一个别人写的程序 但是在调试器调试过程中出现了一个奇怪的现象 代码部分如下 Sys Run这个函数在main函数中被无限循环调用 初始化时我会将TCENABLE这个标志位置0 通过CAN发送信息来改变他的数值 按道理来说当我运行程序