打印

在MPLAB中 不能查看变量的值 显示symbol not found?

[复制链接]
6817|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lw30402048|  楼主 | 2011-5-25 22:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人刚开始学PIC的编程,发现在watch窗口中不能查看变量的值,无论是全局的还是局部的?我用的是MPLAB 8.6,PICC 用V9.80版本。以下是最简单的程序,但是查看record_jiange的值,还是显示symbol not found,求高人指点下,万分感谢!
以下是代码,在debug,MPLAB ICD2模式下:

unsigned char record_jiange;
void main(void)
{   
    sys_ini();
    BEEP_Num(3);
    while(1)
    {
        //read_data_formPICeeprom();
        record_jiange = 3;//记录间隔
        NOP();      
         LCD_displaytest();
    }   
   
}
沙发
lw30402048|  楼主 | 2011-5-25 22:31 | 只看该作者
有哪些 地方说的不对的地方 还请指出,谢谢哈

使用特权

评论回复
板凳
lw30402048|  楼主 | 2011-5-25 22:35 | 只看该作者
断点 我放在NOP处,然后差看record_jiange的值  在watch还是显示symbol not found,不知道是怎么回事?是我的MPLAB 有问题吗?有过类似的问题的人 请告诉我一下 谢谢啊

使用特权

评论回复
地板
lw30402048|  楼主 | 2011-5-25 22:51 | 只看该作者
我用的是PIC16F946

使用特权

评论回复
5
mei326| | 2011-5-25 23:55 | 只看该作者
volatile unsigned char record_jiange;

使用特权

评论回复
6
lw30402048|  楼主 | 2011-5-26 00:23 | 只看该作者
问题解决了,如下:
while(1)
    {
        
        record_jiange = 3;//记录间隔
        if(record_jiange==3)
                {
                        BEEP_Num(1); //蜂鸣器叫一声
                        record_jiange=0;
                }
                Delay(1000);
         LCD_displaytest();
    }  
加上这句f(record_jiange==3)判断 就行了,个人认为是编译器的原因,之前我就把3赋值record_jiange,然后后面没有对record_jiange操作,导致编译器认为变量record_jiange没用,所以把RAM空间释放掉了,所以你在watch看不到.我想应该是这样!

使用特权

评论回复
7
lw30402048|  楼主 | 2011-5-26 00:24 | 只看该作者
:lol 终于解决了 NND

使用特权

评论回复
8
yewuyi| | 2011-5-26 08:35 | 只看该作者
不要乱说是谁的问题,谁的问题都不是,是你自己的问题而已。

在首帖中,record_jiange这个变量在CODE中根本没有什么有意义的用途,C编译器自然就要给你优化掉,这个是C编译器基本的变量优化功能,如果C编译器不具备这个,估计网络上大把的人马上又会跳出来大骂PICC多垃圾了。

使用特权

评论回复
9
lw30402048|  楼主 | 2011-5-26 08:39 | 只看该作者
不要乱说是谁的问题,谁的问题都不是,是你自己的问题而已。

在首帖中,record_jiange这个变量在CODE中根本没有什么有意义的用途,C编译器自然就要给你优化掉,这个是C编译器基本的变量优化功能,如果C编译器不具备 ...
yewuyi 发表于 2011-5-26 08:35
晕 说一下都不行.....

使用特权

评论回复
10
yewuyi| | 2011-5-26 09:07 | 只看该作者
晕 说一下都不行.....
lw30402048 发表于 2011-5-26 08:39


乱说是因为乱想,乱想的后果就是容易让自己误入歧途,得不同正确的结论,结果就是水平提高不了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
电子write_cai + 1
11
电子write_cai| | 2011-5-26 17:06 | 只看该作者
不要乱说是谁的问题,谁的问题都不是,是你自己的问题而已。

在首帖中,record_jiange这个变量在CODE中根本没有什么有意义的用途,C编译器自然就要给你优化掉,这个是C编译器基本的变量优化功能,如果C编译器不具备 ...
yewuyi 发表于 2011-5-26 08:35


请问怎么说record_jiange在程序里面没有意义? C编译器一般优化什么样的东东啊?  请教。。。

使用特权

评论回复
12
Light_David| | 2011-5-26 18:13 | 只看该作者
么有volatile修饰,只有一次赋值,么有作其他用的变量,就被优了呗?是不?
9.8好像会对这种变量做警告提示啊。

使用特权

评论回复
13
yulinyong| | 2014-6-6 12:00 | 只看该作者
学习了.只要加上volatile修饰即可

使用特权

评论回复
14
949155525| | 2014-6-29 20:09 | 只看该作者
使用voatile 在不行改便宜模式

使用特权

评论回复
15
谈的元| | 2014-6-29 21:25 | 只看该作者
电子write_cai 发表于 2011-5-26 17:06
请问怎么说record_jiange在程序里面没有意义? C编译器一般优化什么样的东东啊?  请教。。。 ...

你仅仅把变量赋值了,其他地方没有引用这个变量,故优化了。

你可以这么理解,要不要这个变量对你 程序执行有实际影响么?答案是:没有

要测试你可以写:
PORTA=record_jiange;这样就不会优化掉record_jiange这个变量了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

140

帖子

1

粉丝