在针对stm32f407的硬件仿真时,遇到了监控某个变量时,出现cannot evaluate的问题,在选中view选板下的periodic window update的情况下该变量的值仍然无法实时显示,情况如下图。
第242行的jiaoyan2变量无法显示,经过学习后,发现该变量此时位于中断服务函数内,且定义在其中,此时属于局部变量,而局部变量在程序运行时系统不会给它分配地址空间,只会在函数被调用时参与运算。上图的count_ones函数为一个校验数据位二进制1的计算函数,该函数大致思想是把数据位的二进制1的个数算出来,将其函数返回值赋给jiaoyan2变量,进行后续检验。具体算法此处不做解释。
该问题的解决方法是将局部变量修改为全局变量,即在中断服务函数外部定义它,让它的值能够实时显示在watch1下。
此时变量定义在函数外,watch1即可监控到该变量的值。
学习时还遇到一个小问题,当一个变量需要在函数内做位运算或者加减之类的运算且需要监控它的值时,在把该变量定义在函数外部的前提下,还要将它的初始值定义在函数内部,若将其初始值写在函数外部,每当此函数被调用时,该值不会清零,会在上一次的结果上继续运算。
所以针对一般需要做运算且需要监控的变量,可以把它定义在函数外部,初始化在函数内部。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删