关于单片机中全局变量的使用有关问题

关于单片机中全局变量的使用问题
最近在看一个程序,程序周期的读取全局变量的值进行处理,同时这个全局变量会在中断中被改变。
  但是我觉得这样使用全局变量有问题,如果当前正在读取全局变量时中断到达,那么这个全局变量会在中断中改变,中断返回的时候会不会照成我正在读取的这个中断变量错误(混乱)呢?
  程序大概如下,大家帮我分析一下?
  unsigned char wucValue;/*全局变量*/
/*周期任务*/
  Task_10ms()\
  {
  unsigned char aucTemp;

  aucTemp = get_value();
  }
/**/
  unsigned char get_value(void)
  {
  retrun ((wucValue >> 3) & 0x01);
  }
/*中断处理*/
  _ISR SPI_Interrupt
  {
  wucValue = SPI_DATA; /*SPI数据寄存器*/
  Clear_ISR_SPI();
  }
  万分感谢

------解决方案--------------------
如果你可以保证你的读取操作是一个原子操作,它就无法被中断打断

如果你的实时性不是很高,在中断中只 update 数据,在其余部不改写数据
------解决方案--------------------
用一个标志变量

在中断中修改它,用以通知你那个定时函数,当前数据是刷新过的

具体,还可以根据你的应用,通过这个标志来限定你数据的合法性
------解决方案--------------------
会的
不过你这个周期函数也是时间中断,所以要进入SPI_Interrupt的话除非它的优先级更高,而且有的程序都直接设置不能中断嵌套,那样的话SPI_Interrupt就要等时间中断结束后才能执行了