critical.c

来自「sdcc是为51等小型嵌入式cpu设计的c语言编译器支持数种不同类型的cpu」· C语言 代码 · 共 75 行

C
75
字号
/* Keyword "critical" tests. */#include <testfwk.h>#if defined(SDCC_mcs51)#include <8052.h>typedef union{  unsigned int a;  struct  {    unsigned char b;    unsigned char c;  };} big;//must be at least 2 bytes big and volatilevolatile big global_var = { 0 };int y;unsigned int get_global (void) critical{  return global_var.a;}#endifvoidtestCritical(void){#if defined(SDCC_mcs51)  big x;  unsigned char i;  //enable the interrupt and set it  ET2 = 1;  EA = 1;  TF2 = 1;  critical x.a = global_var.a;  ASSERT(x.b == x.c);  x.a = get_global();  ASSERT(x.b == x.c);  for (i=10; i!=0; i--)  {    critical x.a = global_var.a;    ASSERT(x.b == x.c);    x.a = get_global();    ASSERT(x.b == x.c);  }  //check the interrupt has run at all  ASSERT(x.a != 0);  critical y = 0;  //check the interrupts are still enabled  ASSERT(EA);#else  ASSERT(1);#endif}#if defined(SDCC_mcs51)void T2_isr (void) interrupt 5 using 2{  //do not clear flag ET2 so it keeps interrupting !  global_var.b++;  if (global_var.b == 0)    global_var.b++;  global_var.c = global_var.b;}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?