⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 critical.c

📁 sdcc是为51等小型嵌入式cpu设计的c语言编译器支持数种不同类型的cpu
💻 C
字号:
/* 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -