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

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

 

 

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

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

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

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

 

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

 

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

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值