EDA365电子论坛网
标题:
跳出中断后却不能使用该全局变量!
[打印本页]
作者:
Maskman
时间:
2022-11-3 10:06
标题:
跳出中断后却不能使用该全局变量!
请问,我现在做 2114 的产品开发.出现以下问题,特向您请教!
3 D3 A) [, v+ g, i4 d( z
. O8 G. D0 B+ k- L& y
问题:
& F1 \8 k5 `+ t: C' M
我们开发的产品要采样,采用周期固定.于是我们采用 timer0 进行时钟触发,利用触发中断程序 每隔 10 毫秒采样一次并显示波形.这都能很好的进行.但是在中断程序里面对几个全局变量赋值, 跳出中断后却不能使用该全局变量.很是头疼!请赐教!!
' L0 @) |! r9 B! U- ~9 M
+ o& A# Q8 o! Y
框架如下:
& I0 E* A, D# O
uint8 a; //全局变量
- ^ V8 w; \; ?4 P# ?
void __irq funtimer0()
8 ~. x* Y+ M/ E& `. ~) `% Q6 R
{
. q$ b& Z' @% p/ L
...
! B7 c# A+ c3 ?% b+ v
a=0; //在中断函数里面对全局变量赋值
9 ~; U' Q% c' T# ?' f3 e# u
...
; ]" ^( f8 {) ^9 q5 k
}
! V: M' H K9 ^. C% g! D
void fun1()
! ~+ y0 c' W( t6 c! r6 {
{
2 S2 }8 z0 K1 M- W# `8 f
uint8 i;
7 R, k i# Q* w9 [
i=0;
1 T& {2 k. M' j. b1 i
.......
1 I7 P" m) |& ^" |0 b3 r- Z
i=a; // 出错位置,在调试过程中运行到当前位置,鼠标移动到变量 a 上
z& V( U' Q$ ?2 m# A, Q
// 显示数值是 0,但是不能传给 i,i 的值不会随该命令改变.
/ m) \4 \: }' {8 f- e+ P6 s7 T
...... }
! E! o5 G, q* Z
因此,我在中断函数中采集到的数据放到全局数组中.采集完成关中断后在用户模式下的程序中来处理该数组,但是该数组中的数据也不能使用!全局数组变量占 1000 个字节,IRQ 堆栈长度是 256.
/ v% _5 S$ J. |; t/ E6 C
, x/ V7 u* W( t! c. o
作者:
Ele_insect
时间:
2022-11-3 11:05
全局变量用 volatile 声明。
作者:
tick_tock
时间:
2022-11-3 13:45
全局变量就是定义在函数外的变量。它不属于大括号{}包含的某个代码块,所以,它的作用域不是在某个代码块内,是在整个源程序中。所以,可以在源程序中任何地方访问全局变量。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2