找回密码
 注册
关于网站域名变更的通知
查看: 284|回复: 2
打印 上一主题 下一主题

跳出中断后却不能使用该全局变量!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-3 10:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
请问,我现在做 2114 的产品开发.出现以下问题,特向您请教! / g& ]  L0 o6 M0 m9 j. k

9 |* w+ \* g! U  Y' N9 \' O5 U4 O; h问题: / X5 G! t  |3 F& r
我们开发的产品要采样,采用周期固定.于是我们采用 timer0 进行时钟触发,利用触发中断程序 每隔 10 毫秒采样一次并显示波形.这都能很好的进行.但是在中断程序里面对几个全局变量赋值, 跳出中断后却不能使用该全局变量.很是头疼!请赐教!!
7 Z+ B+ J$ N  }) A& h
8 v) h+ r% w$ ^5 Y; ^, k' K框架如下: ' I+ I8 u% e0 b4 x; `) K, f
uint8 a; //全局变量
' g0 O) ~6 r8 l+ i. o2 d  P3 v6 }void __irq funtimer0()
: k( L6 a5 C$ f2 `; p" g{
0 e/ \+ o4 W% O+ i4 V...
  G9 C$ A  N5 Ta=0; //在中断函数里面对全局变量赋值
5 E1 B4 E) c; r  A+ y1 ^  D, @8 H...   f. p" |- H/ t, {. b7 P
}
- I' \9 k# p- Cvoid fun1()
, _5 R) s3 v! C; o* O{
% ~' M9 q% d- o( I  H- I, |7 Muint8 i; - |; V1 u3 t3 O
i=0; * Q8 x1 L5 z4 _9 ?: y& k# {
.......
* {( R) D5 J9 {6 e! xi=a; // 出错位置,在调试过程中运行到当前位置,鼠标移动到变量 a 上
4 a. m* v: O2 l( D9 ?4 V, U// 显示数值是 0,但是不能传给 i,i 的值不会随该命令改变. ; V8 y  S' A; h& l( ?
...... }
: v7 q5 o8 n! {2 T因此,我在中断函数中采集到的数据放到全局数组中.采集完成关中断后在用户模式下的程序中来处理该数组,但是该数组中的数据也不能使用!全局数组变量占 1000 个字节,IRQ 堆栈长度是 256. 9 R# ]% R8 b) A0 g8 c9 s: Y

# {% i  [% o# y! T8 o

该用户从未签到

3#
发表于 2022-11-3 13:45 | 只看该作者
全局变量就是定义在函数外的变量。它不属于大括号{}包含的某个代码块,所以,它的作用域不是在某个代码块内,是在整个源程序中。所以,可以在源程序中任何地方访问全局变量。

该用户从未签到

2#
发表于 2022-11-3 11:05 | 只看该作者
全局变量用 volatile 声明。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 20:31 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表