中断中不能调用全局变量,求大神忙帮忙
我是用十速的IC,用提供的TICE99IDE编译调试的,全部用C语言,其中中断函数里面调用变量的句子为if(countz1==powerpoint)
{
TRACE_en=11;
}
结果没有作用,而直接用实数就可以
if(countz1==40)
{
TRACE_en=11;
}
经过我测试,只要是在主函数里面给powerpoint赋值都不能实现,在中断中赋值就可以实现。
定义powerpoint我试过两种方式:
volatile unsigned char powerpoint;和 unsigned char powerpoint;
结果都是不能实现的,求各路大神求教,小弟给跪舔
我没用过TICE99IDE,是不是和具体编译器有关 编译时没什么警告吗? witlong 发表于 2014-10-7 19:39
编译时没什么警告吗?
编译没错误没提醒,完美通过,不过在实物上不可以。 jxcrg_t35 发表于 2014-10-7 18:39
我没用过TICE99IDE,是不是和具体编译器有关
这个我也不清楚。。。供应商那边的工程师说没问题的 实验证明用位判断可以,但是用值不可以 "中断中不能调用全局变量" 这到第一次听说,应该是你程序处理的问题 lonely9391 发表于 2014-10-8 21:46
"中断中不能调用全局变量" 这到第一次听说,应该是你程序处理的问题
试了很久能调用bit定义的,不能调用int和char类型。。。。程序我给很多工程师看过了,都说看不出问题 这跟编译有关系吧 countz1和powerpoint是否同一类型? 编译器的优化等级太高了吧! 是不是被优化掉了,定义成volatile的如何 liyang121316 发表于 2014-10-9 22:35
是不是被优化掉了,定义成volatile的如何
是已经定义成volatile了。。。最后不知道如何解决,索性把中断间隔加长,在中断里做多个判断了。。, gongngei 发表于 2014-10-9 12:52
countz1和powerpoint是否同一类型?
是的,这个刻意试过了 powerpoint这个变量你用来干什么了,应该是被优化掉了。你把优化级别调成最低试下。 之前没遇到这情况,我一般中断里要用到的全局变量都加 Volatile 修饰了 没有遇到这种现象啊 义隆的C编译器也有这样的要求。可以设标志位跳出后执行 有没有检查下主循环里的赋值代码是否执行了。如果你开启了某些中断,但没有清除标志位可能会一直执行中断而不执行主循环。 头文件包含没有吧 估计跟你的编译优化等级有关 可以贴下反汇编的程序么? 这个是没有问题的。看编译器怎么编译了
页:
[1]