arm-isr.c

来自「用于进行gcc测试」· C语言 代码 · 共 52 行

C
52
字号
extern void abort ();extern void exit (int);#ifndef __thumb__/* There used to be a couple of bugs in the ARM's prologue and epilogue   generation for ISR routines.  The wrong epilogue instruction would be   generated to restore the IP register if it had to be pushed onto the   stack, and the wrong offset was being computed for local variables if   r0 - r3 had to be saved.  This tests for both of these cases.  */int z = 9;intbar (void){  return z;}intfoo (int a, int b, int c, int d, int e, int f, int g, int h){  volatile int i = (a + b) - (g + h) + bar ();  volatile int j = (e + f) - (c + d);  return a + b + c + d + e + f + g + h + i + j;}int foo1 (int a, int b, int c, int d, int e, int f, int g, int h) __attribute__ ((interrupt ("IRQ")));intfoo1 (int a, int b, int c, int d, int e, int f, int g, int h){  volatile int i = (a + b) - (g + h) + bar ();  volatile int j = (e + f) - (c + d);  return a + b + c + d + e + f + g + h + i + j;}#endifintmain (void){#ifndef __thumb__  if (foo (1, 2, 3, 4, 5, 6, 7, 8) != 32)    abort ();      if (foo1 (1, 2, 3, 4, 5, 6, 7, 8) != 32)    abort ();#endif  exit (0);}

⌨️ 快捷键说明

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