针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。
  TFTitNOraUi1 2023年11月12日 50 0

在针对stm32f407的硬件仿真时,遇到了监控某个变量时,出现cannot evaluate的问题,在选中view选板下的periodic window update的情况下该变量的值仍然无法实时显示,情况如下图。

针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。_地址空间

针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。_地址空间_02

 第242行的jiaoyan2变量无法显示,经过学习后,发现该变量此时位于中断服务函数内,且定义在其中,此时属于局部变量,而局部变量在程序运行时系统不会给它分配地址空间,只会在函数被调用时参与运算。上图的count_ones函数为一个校验数据位二进制1的计算函数,该函数大致思想是把数据位的二进制1的个数算出来,将其函数返回值赋给jiaoyan2变量,进行后续检验。具体算法此处不做解释。

该问题的解决方法是将局部变量修改为全局变量,即在中断服务函数外部定义它,让它的值能够实时显示在watch1下。

针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。_局部变量_03

此时变量定义在函数外,watch1即可监控到该变量的值。

针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。_局部变量_04

       学习时还遇到一个小问题,当一个变量需要在函数内做位运算或者加减之类的运算且需要监控它的值时,在把该变量定义在函数外部的前提下,还要将它的初始值定义在函数内部,若将其初始值写在函数外部,每当此函数被调用时,该值不会清零,会在上一次的结果上继续运算。

针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。_地址空间_05

针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。_函数返回值_06

 所以针对一般需要做运算且需要监控的变量,可以把它定义在函数外部,初始化在函数内部。

针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。_函数返回值_07

针对keil5仿真时,监控变量无法正常显示(cannot evaluate)的心得。_地址空间_08

 第一次写该类型文章,如有错误,恳请批评指正。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

TFTitNOraUi1