trap.c00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "trap.h"
00029
00030 int global_result;
00031
00032
00033 void
00034 simple_trap_handler(int value)
00035 {
00036 global_result = value * value;
00037 }
00038
00039
00040
00041 int
00042 add_trap_handler(int a, int b, int c, int d)
00043 {
00044 return a + b + c + d;
00045 }
00046
00047
00048
00049
00050
00051 int
00052 os_trap_handler(int operation, ...)
00053 {
00054 va_list argp;
00055 int result;
00056 const char* p;
00057
00058 va_start(argp, operation);
00059 switch (operation)
00060 {
00061
00062 case 0:
00063 p = va_arg (argp, const char*);
00064 print (p);
00065 result = 0;
00066 break;
00067
00068
00069 case 1:
00070 result = serial_recv ();
00071 break;
00072
00073 case 2:
00074 result = va_arg (argp, int) + va_arg (argp, int);
00075 break;
00076
00077
00078 default:
00079 result = -1;
00080 break;
00081 }
00082 va_end(argp);
00083 return result;
00084 }
00085
|