标题: 这是一个没有解决的问题 [打印本页]

作者: wh8010jky    时间: 2024-8-26 13:07
标题: 这是一个没有解决的问题
这是一个一个月前提过的问题,一直没有解决,今天再提,看看有没有高手帮助解决。
问题是这样的:
w10运行keil5, 如图,
ushar NowTem=0 是 main()中的一个局部变量,在watch 中想给其赋一个值试试,结果马上又恢复0,不能赋值,很不方便调试。
如果,先将其在其他任意一个函数(即使与本函数main没有关系)中定义 uchar NowTem=0;   然后再在main 中声明 extern uchar NowTem; 就行了,想怎么调试都行。
所有的变量都是这样的:要想改变值调试,必须在其他函数中定义,然后声明extern.
这个问题在 keil4 之前从未出现过,有朋友说,是 keil5 的版本问题,我在下载过几次,在 keil 官网也下载过,结果都是这样的,官网上有4个版本,我下的是C51, 官网上没提是32还是64的。
朋友们,有没有碰到过这个问题的?

截图03.png (14.44 KB, 下载次数: 11)

截图03.png

截图04.png (13.5 KB, 下载次数: 11)

截图04.png

截图05.png (13.48 KB, 下载次数: 10)

截图05.png

截图06.png (13.08 KB, 下载次数: 11)

截图06.png

截图07.png (13.63 KB, 下载次数: 8)

截图07.png

作者: 张天师    时间: 2024-8-26 17:52
设为全局变量试试
作者: donglw    时间: 2024-8-27 06:55
这涉及到局部变量和全局变量的问题,搞清楚它们的关系,可以解决上述问题。
作者: wh8010jky    时间: 2024-8-27 22:44
先谢谢张天师和donglw朋友!
试了,不行的,不管是局部变量还是全局变量,都不能睡意改变值,必须是extern(外部变量)才能改变值。
下面的两个图,一个是局部的,一个是全局的,没错吧?

截图08.png (15.14 KB, 下载次数: 12)

截图08.png

截图09.png (14.29 KB, 下载次数: 10)

截图09.png

作者: wh8010jky    时间: 2024-8-27 22:53
先谢谢张天师和donglw朋友!
关于局部变量和全局变量,早就试了,不行的,必须是extern(外部变量)才能随意变值调试。
下面的两个图,一个是局部的,一个是旗舰店,没错吧。

截图08.png (15.14 KB, 下载次数: 10)

截图08.png

截图09.png (14.29 KB, 下载次数: 15)

截图09.png

作者: 蓝蓝小星星    时间: 2024-8-28 00:18
只看到定义,没看到使用过程
作者: wh8010jky    时间: 2024-8-28 09:12
蓝蓝小星星 发表于 2024-8-28 00:18
只看到定义,没看到使用过程

使用过程,就是改变变量的值,然后看程序运行情况,
譬如,if(NowTem==23){......}     if(NowTem==56){......}  
现在是不能随意改变,永远是初始值,所以不能马上看到NowTem==23 或56时候的运行情况 。
要想看到特定条件下的情况,必须把这个变量在其他函数中定义,然后在本函数中声明是外部变量。
这个问题在keil4 之前是没有的,也就是在w10 使用keil5  调试时才发现的。
这样说清楚了吧。
作者: 蓝蓝小星星    时间: 2024-8-28 10:43
只能说明现在还是处于局部变量上,加个关键词给他,static
作者: wh8010jky    时间: 2024-8-28 15:49
蓝蓝小星星 发表于 2024-8-28 10:43
只能说明现在还是处于局部变量上,加个关键词给他,static

刚才试了,不行。
static 是静态变量,它的作用是在下次启动时保持值不变。
现在的问题是一个普通变量,在调试过程中需要改变值看看效果。
作者: 蓝蓝小星星    时间: 2024-8-28 16:14
你是跨页,多个.c文件使用了相同名字的变量了吧?感觉就是这样所以才需要 extern
作者: xxxevery    时间: 2024-8-28 16:53
你最好把程序都贴出来,估计你也不太清楚局部变量和全局变量的深层次使用。局部变量和全局变量是可以同名的,但局部变量使用时会屏蔽同名的全局变量,说穿了还是两个不同的变量。你首先要想清楚怎么使用,在同一个c文件中不同的函数中还是不同的c文件中
作者: wh8010jky    时间: 2024-8-30 10:39
问题解决了,重装了keil5, 这次安装在c盘,把以前安装过的痕迹全部删除干净。前几次都是安装在其他盘。
折腾了好几天,谢谢大家!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1