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 + -
显示快捷键?