"DHRYSTONE" Benchmark C, Version 2.1 for ARM Cortex-M7 MCU in C++ ( ST Nucleo-144 Stm32F746 and Stm32F767 ) Based on work by Ken Boakby for Ardiono IDE and "C, Version 2.1" by Reinhold P. Weicker. Modified by Jovan Ivkovic 2017.
main.cpp@1:0068ef6a03a0, 2017-01-06 (annotated)
- Committer:
- JovanEps
- Date:
- Fri Jan 06 16:11:22 2017 +0000
- Revision:
- 1:0068ef6a03a0
- Parent:
- 0:16f8af9370b6
beta 0.11
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| JovanEps | 0:16f8af9370b6 | 1 | //******************************************************** |
| JovanEps | 0:16f8af9370b6 | 2 | //** "DHRYSTONE" Benchmark C, Version 2.1 ****** |
| JovanEps | 0:16f8af9370b6 | 3 | //** for ARM Cortex-M7 MCU C++ ****** |
| JovanEps | 0:16f8af9370b6 | 4 | //** ( ST Nucleo-144 Stm32F746 and Stm32F767 ) ****** |
| JovanEps | 0:16f8af9370b6 | 5 | //** Based on work by Ken Boakby for Ardiono IDE ****** |
| JovanEps | 0:16f8af9370b6 | 6 | //** modified by ****** |
| JovanEps | 0:16f8af9370b6 | 7 | //** Jovan Ivkovic 2017. ****** |
| JovanEps | 0:16f8af9370b6 | 8 | //** JovanEps (jovan.eps@gmail.com). ****** |
| JovanEps | 0:16f8af9370b6 | 9 | //******************************************************** |
| JovanEps | 0:16f8af9370b6 | 10 | #include "mbed.h" |
| JovanEps | 0:16f8af9370b6 | 11 | #include "dhry.h" |
| JovanEps | 0:16f8af9370b6 | 12 | DigitalOut myled(LED1); |
| JovanEps | 0:16f8af9370b6 | 13 | Serial pc(USBTX, USBRX); |
| JovanEps | 0:16f8af9370b6 | 14 | Timer timer; |
| JovanEps | 0:16f8af9370b6 | 15 | |
| JovanEps | 0:16f8af9370b6 | 16 | #include <stdlib.h> |
| JovanEps | 0:16f8af9370b6 | 17 | #include <stdio.h> |
| JovanEps | 0:16f8af9370b6 | 18 | #include <string.h> |
| JovanEps | 0:16f8af9370b6 | 19 | #include <math.h> |
| JovanEps | 0:16f8af9370b6 | 20 | /* the following is optional depending on the timing function used */ |
| JovanEps | 0:16f8af9370b6 | 21 | #include <time.h> |
| JovanEps | 0:16f8af9370b6 | 22 | |
| JovanEps | 0:16f8af9370b6 | 23 | |
| JovanEps | 0:16f8af9370b6 | 24 | /* Global Variables: */ |
| JovanEps | 0:16f8af9370b6 | 25 | |
| JovanEps | 0:16f8af9370b6 | 26 | Rec_Pointer Ptr_Glob,Next_Ptr_Glob; |
| JovanEps | 0:16f8af9370b6 | 27 | int Int_Glob; |
| JovanEps | 0:16f8af9370b6 | 28 | Booleann Bool_Glob; |
| JovanEps | 0:16f8af9370b6 | 29 | char Ch_1_Glob, Ch_2_Glob; |
| JovanEps | 0:16f8af9370b6 | 30 | int Arr_1_Glob[25]; /* <-- changed from 50 */ |
| JovanEps | 0:16f8af9370b6 | 31 | int Arr_2_Glob[25][25]; /* <-- changed from 50 */ |
| JovanEps | 0:16f8af9370b6 | 32 | |
| JovanEps | 0:16f8af9370b6 | 33 | char Reg_Define[] = "Register option selected."; |
| JovanEps | 0:16f8af9370b6 | 34 | |
| JovanEps | 0:16f8af9370b6 | 35 | #ifndef ROPT |
| JovanEps | 0:16f8af9370b6 | 36 | #define REG |
| JovanEps | 0:16f8af9370b6 | 37 | /* REG becomes defined as empty */ |
| JovanEps | 0:16f8af9370b6 | 38 | /* i.e. no register variables */ |
| JovanEps | 0:16f8af9370b6 | 39 | #else |
| JovanEps | 0:16f8af9370b6 | 40 | #define REG register |
| JovanEps | 0:16f8af9370b6 | 41 | #endif |
| JovanEps | 0:16f8af9370b6 | 42 | |
| JovanEps | 0:16f8af9370b6 | 43 | |
| JovanEps | 0:16f8af9370b6 | 44 | /* Procedure for the assignment of structures, */ |
| JovanEps | 0:16f8af9370b6 | 45 | /* if the C compiler doesn't support this feature */ |
| JovanEps | 0:16f8af9370b6 | 46 | #ifdef NOSTRUCTASSIGN |
| JovanEps | 0:16f8af9370b6 | 47 | memcpy (d, s, l) |
| JovanEps | 0:16f8af9370b6 | 48 | register char *d; |
| JovanEps | 0:16f8af9370b6 | 49 | register char *s; |
| JovanEps | 0:16f8af9370b6 | 50 | register int l; |
| JovanEps | 0:16f8af9370b6 | 51 | { |
| JovanEps | 0:16f8af9370b6 | 52 | while (l--) *d++ = *s++; |
| JovanEps | 0:16f8af9370b6 | 53 | } |
| JovanEps | 0:16f8af9370b6 | 54 | #endif |
| JovanEps | 0:16f8af9370b6 | 55 | |
| JovanEps | 0:16f8af9370b6 | 56 | /* variables for time measurement: */ |
| JovanEps | 0:16f8af9370b6 | 57 | |
| JovanEps | 0:16f8af9370b6 | 58 | #define Too_Small_Time 1000000 |
| JovanEps | 0:16f8af9370b6 | 59 | /* Measurements should last at least 1-2 seconds */ |
| JovanEps | 0:16f8af9370b6 | 60 | |
| JovanEps | 0:16f8af9370b6 | 61 | uint32_t Begin_Time, |
| JovanEps | 0:16f8af9370b6 | 62 | End_Time, |
| JovanEps | 0:16f8af9370b6 | 63 | User_Time; |
| JovanEps | 0:16f8af9370b6 | 64 | |
| JovanEps | 0:16f8af9370b6 | 65 | double Microseconds, |
| JovanEps | 0:16f8af9370b6 | 66 | Dhrystones_Per_Second, |
| JovanEps | 0:16f8af9370b6 | 67 | Vax_Mips; |
| JovanEps | 0:16f8af9370b6 | 68 | |
| JovanEps | 0:16f8af9370b6 | 69 | /* end of variables for time measurement */ |
| JovanEps | 0:16f8af9370b6 | 70 | |
| JovanEps | 0:16f8af9370b6 | 71 | void Proc_1( REG Rec_Pointer Ptr_Val_Par ); |
| JovanEps | 0:16f8af9370b6 | 72 | void Proc_2( One_Fifty * Int_Par_Ref ); |
| JovanEps | 0:16f8af9370b6 | 73 | void Proc_3( Rec_Pointer * Ptr_Ref_Par ); |
| JovanEps | 0:16f8af9370b6 | 74 | void Proc_4( void ); |
| JovanEps | 0:16f8af9370b6 | 75 | void Proc_5( void ); |
| JovanEps | 0:16f8af9370b6 | 76 | |
| JovanEps | 0:16f8af9370b6 | 77 | |
| JovanEps | 0:16f8af9370b6 | 78 | |
| JovanEps | 0:16f8af9370b6 | 79 | //************************************ |
| JovanEps | 0:16f8af9370b6 | 80 | //** "DHRYSTONE" Benchmark ** |
| JovanEps | 0:16f8af9370b6 | 81 | //** SUB ** |
| JovanEps | 0:16f8af9370b6 | 82 | //************************************ |
| JovanEps | 0:16f8af9370b6 | 83 | void DHRYSTONE() // ------------ Metoda ----------- |
| JovanEps | 0:16f8af9370b6 | 84 | { |
| JovanEps | 0:16f8af9370b6 | 85 | //* main program, corresponds to procedures */ |
| JovanEps | 0:16f8af9370b6 | 86 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 87 | One_Fifty Int_1_Loc; |
| JovanEps | 0:16f8af9370b6 | 88 | REG One_Fifty Int_2_Loc; |
| JovanEps | 0:16f8af9370b6 | 89 | One_Fifty Int_3_Loc; |
| JovanEps | 0:16f8af9370b6 | 90 | REG char Ch_Index; |
| JovanEps | 0:16f8af9370b6 | 91 | Enumeration Enum_Loc; |
| JovanEps | 0:16f8af9370b6 | 92 | Str_30 Str_1_Loc; |
| JovanEps | 0:16f8af9370b6 | 93 | Str_30 Str_2_Loc; |
| JovanEps | 0:16f8af9370b6 | 94 | REG long Run_Index; |
| JovanEps | 0:16f8af9370b6 | 95 | REG long Number_Of_Runs; |
| JovanEps | 0:16f8af9370b6 | 96 | |
| JovanEps | 0:16f8af9370b6 | 97 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 98 | /* Initializations */ |
| JovanEps | 0:16f8af9370b6 | 99 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 100 | |
| JovanEps | 0:16f8af9370b6 | 101 | pc.printf("\n Dhrystone Benchmark, Version 2.1 (Language: C)"); |
| JovanEps | 0:16f8af9370b6 | 102 | pc.printf("Beginning DHRYSTONE Benchmark \n"); |
| JovanEps | 0:16f8af9370b6 | 103 | pc.printf("Default MCU clock is 216 MHz \n"); |
| JovanEps | 0:16f8af9370b6 | 104 | |
| JovanEps | 0:16f8af9370b6 | 105 | Next_Ptr_Glob = (Rec_Pointer)malloc (sizeof (Rec_Type)); |
| JovanEps | 0:16f8af9370b6 | 106 | Ptr_Glob = (Rec_Pointer)malloc (sizeof (Rec_Type)); |
| JovanEps | 0:16f8af9370b6 | 107 | |
| JovanEps | 0:16f8af9370b6 | 108 | Ptr_Glob->Ptr_Comp = Next_Ptr_Glob; |
| JovanEps | 0:16f8af9370b6 | 109 | Ptr_Glob->Discr = Ident_1; |
| JovanEps | 0:16f8af9370b6 | 110 | Ptr_Glob->variant.var_1.Enum_Comp = Ident_3; |
| JovanEps | 0:16f8af9370b6 | 111 | Ptr_Glob->variant.var_1.Int_Comp = 40; |
| JovanEps | 0:16f8af9370b6 | 112 | strcpy (Ptr_Glob->variant.var_1.Str_Comp, |
| JovanEps | 0:16f8af9370b6 | 113 | "DHRYSTONE PROGRAM, SOME STRING"); |
| JovanEps | 0:16f8af9370b6 | 114 | strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); |
| JovanEps | 0:16f8af9370b6 | 115 | |
| JovanEps | 0:16f8af9370b6 | 116 | Arr_2_Glob [8][7] = 10; |
| JovanEps | 0:16f8af9370b6 | 117 | /* Was missing in published program. Without this statement, */ |
| JovanEps | 0:16f8af9370b6 | 118 | /* Arr_2_Glob [8][7] would have an undefined value. */ |
| JovanEps | 0:16f8af9370b6 | 119 | /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */ |
| JovanEps | 0:16f8af9370b6 | 120 | /* overflow may occur for this array element. */ |
| JovanEps | 0:16f8af9370b6 | 121 | |
| JovanEps | 0:16f8af9370b6 | 122 | Number_Of_Runs = 2000000; |
| JovanEps | 0:16f8af9370b6 | 123 | |
| JovanEps | 0:16f8af9370b6 | 124 | pc.printf("Execution starts, "); |
| JovanEps | 0:16f8af9370b6 | 125 | pc.printf("%d", Number_Of_Runs); |
| JovanEps | 0:16f8af9370b6 | 126 | pc.printf("\n runs through Dhrystone"); |
| JovanEps | 0:16f8af9370b6 | 127 | pc.printf("\n") ; |
| JovanEps | 0:16f8af9370b6 | 128 | |
| JovanEps | 0:16f8af9370b6 | 129 | /***************/ |
| JovanEps | 0:16f8af9370b6 | 130 | /* Start timer */ |
| JovanEps | 0:16f8af9370b6 | 131 | /***************/ |
| JovanEps | 0:16f8af9370b6 | 132 | timer.start(); |
| JovanEps | 0:16f8af9370b6 | 133 | Begin_Time = timer.read_us(); |
| JovanEps | 0:16f8af9370b6 | 134 | //**************************** |
| JovanEps | 0:16f8af9370b6 | 135 | |
| JovanEps | 0:16f8af9370b6 | 136 | for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index) { |
| JovanEps | 0:16f8af9370b6 | 137 | Proc_5(); |
| JovanEps | 0:16f8af9370b6 | 138 | Proc_4(); |
| JovanEps | 0:16f8af9370b6 | 139 | /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */ |
| JovanEps | 0:16f8af9370b6 | 140 | Int_1_Loc = 2; |
| JovanEps | 0:16f8af9370b6 | 141 | Int_2_Loc = 3; |
| JovanEps | 0:16f8af9370b6 | 142 | strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING"); |
| JovanEps | 0:16f8af9370b6 | 143 | Enum_Loc = Ident_2; |
| JovanEps | 0:16f8af9370b6 | 144 | Bool_Glob = !Func_2(Str_1_Loc, Str_2_Loc); |
| JovanEps | 0:16f8af9370b6 | 145 | /* Bool_Glob == 1 */ |
| JovanEps | 0:16f8af9370b6 | 146 | while (Int_1_Loc < Int_2_Loc) { /* loop body executed once */ |
| JovanEps | 0:16f8af9370b6 | 147 | Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc; |
| JovanEps | 0:16f8af9370b6 | 148 | /* Int_3_Loc == 7 */ |
| JovanEps | 0:16f8af9370b6 | 149 | Proc_7(Int_1_Loc, Int_2_Loc, &Int_3_Loc); |
| JovanEps | 0:16f8af9370b6 | 150 | /* Int_3_Loc == 7 */ |
| JovanEps | 0:16f8af9370b6 | 151 | Int_1_Loc += 1; |
| JovanEps | 0:16f8af9370b6 | 152 | } /* while */ |
| JovanEps | 0:16f8af9370b6 | 153 | /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ |
| JovanEps | 0:16f8af9370b6 | 154 | Proc_8(Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc); |
| JovanEps | 0:16f8af9370b6 | 155 | /* Int_Glob == 5 */ |
| JovanEps | 0:16f8af9370b6 | 156 | Proc_1 (Ptr_Glob); |
| JovanEps | 0:16f8af9370b6 | 157 | for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index) |
| JovanEps | 0:16f8af9370b6 | 158 | /* loop body executed twice */ |
| JovanEps | 0:16f8af9370b6 | 159 | { |
| JovanEps | 0:16f8af9370b6 | 160 | if (Enum_Loc == Func_1(Ch_Index, 'C')) |
| JovanEps | 0:16f8af9370b6 | 161 | /* then, not executed */ |
| JovanEps | 0:16f8af9370b6 | 162 | { |
| JovanEps | 0:16f8af9370b6 | 163 | Proc_6(Ident_1, &Enum_Loc); |
| JovanEps | 0:16f8af9370b6 | 164 | strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); |
| JovanEps | 0:16f8af9370b6 | 165 | Int_2_Loc = Run_Index; |
| JovanEps | 0:16f8af9370b6 | 166 | Int_Glob = Run_Index; |
| JovanEps | 0:16f8af9370b6 | 167 | } |
| JovanEps | 0:16f8af9370b6 | 168 | } |
| JovanEps | 0:16f8af9370b6 | 169 | /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ |
| JovanEps | 0:16f8af9370b6 | 170 | Int_2_Loc = Int_2_Loc * Int_1_Loc; |
| JovanEps | 0:16f8af9370b6 | 171 | Int_1_Loc = Int_2_Loc / Int_3_Loc; |
| JovanEps | 0:16f8af9370b6 | 172 | Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc; |
| JovanEps | 0:16f8af9370b6 | 173 | /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */ |
| JovanEps | 0:16f8af9370b6 | 174 | Proc_2 (&Int_1_Loc); |
| JovanEps | 0:16f8af9370b6 | 175 | /* Int_1_Loc == 5 */ |
| JovanEps | 0:16f8af9370b6 | 176 | |
| JovanEps | 0:16f8af9370b6 | 177 | } /* loop "for Run_Index" */ |
| JovanEps | 0:16f8af9370b6 | 178 | |
| JovanEps | 0:16f8af9370b6 | 179 | /**************/ |
| JovanEps | 0:16f8af9370b6 | 180 | /* Stop timer */ |
| JovanEps | 0:16f8af9370b6 | 181 | /**************/ |
| JovanEps | 0:16f8af9370b6 | 182 | |
| JovanEps | 0:16f8af9370b6 | 183 | End_Time = timer.read_us(); |
| JovanEps | 0:16f8af9370b6 | 184 | User_Time = End_Time - Begin_Time; |
| JovanEps | 0:16f8af9370b6 | 185 | |
| JovanEps | 0:16f8af9370b6 | 186 | pc.printf("\n Execution ends in : "); |
| JovanEps | 0:16f8af9370b6 | 187 | pc.printf("%d us \n", User_Time); |
| JovanEps | 0:16f8af9370b6 | 188 | |
| JovanEps | 0:16f8af9370b6 | 189 | if (User_Time < Too_Small_Time) { |
| JovanEps | 0:16f8af9370b6 | 190 | pc.printf("\n Measured time too small to obtain meaningful results"); |
| JovanEps | 0:16f8af9370b6 | 191 | pc.printf("\n Please increase number of runs"); |
| JovanEps | 0:16f8af9370b6 | 192 | pc.printf("\n"); |
| JovanEps | 0:16f8af9370b6 | 193 | } else { |
| JovanEps | 0:16f8af9370b6 | 194 | Microseconds = (double) User_Time / (double) Number_Of_Runs; |
| JovanEps | 0:16f8af9370b6 | 195 | Dhrystones_Per_Second = (double) Number_Of_Runs / ((double) User_Time / 1000000.0); |
| JovanEps | 0:16f8af9370b6 | 196 | Vax_Mips = Dhrystones_Per_Second / 1757.0; |
| JovanEps | 0:16f8af9370b6 | 197 | } |
| JovanEps | 0:16f8af9370b6 | 198 | pc.printf("\n Microseconds for one run through Dhrystone: "); |
| JovanEps | 0:16f8af9370b6 | 199 | pc.printf("%9.2f \n", Microseconds); |
| JovanEps | 0:16f8af9370b6 | 200 | pc.printf("\n Dhrystones per Second: "); |
| JovanEps | 0:16f8af9370b6 | 201 | pc.printf("%9.2f \n",Dhrystones_Per_Second); |
| JovanEps | 0:16f8af9370b6 | 202 | pc.printf("\n VAX MIPS rating = "); |
| JovanEps | 0:16f8af9370b6 | 203 | pc.printf("%9.2f \n",Vax_Mips); |
| JovanEps | 0:16f8af9370b6 | 204 | |
| JovanEps | 0:16f8af9370b6 | 205 | timer.reset(); |
| JovanEps | 0:16f8af9370b6 | 206 | timer.stop(); |
| JovanEps | 0:16f8af9370b6 | 207 | } |
| JovanEps | 0:16f8af9370b6 | 208 | |
| JovanEps | 0:16f8af9370b6 | 209 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 210 | void Proc_1( REG Rec_Pointer Ptr_Val_Par ) |
| JovanEps | 0:16f8af9370b6 | 211 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 212 | { |
| JovanEps | 0:16f8af9370b6 | 213 | REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp; |
| JovanEps | 0:16f8af9370b6 | 214 | /* == Ptr_Glob_Next */ |
| JovanEps | 0:16f8af9370b6 | 215 | /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */ |
| JovanEps | 0:16f8af9370b6 | 216 | /* corresponds to "rename" in Ada, "with" in Pascal */ |
| JovanEps | 0:16f8af9370b6 | 217 | |
| JovanEps | 0:16f8af9370b6 | 218 | structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob); |
| JovanEps | 0:16f8af9370b6 | 219 | Ptr_Val_Par->variant.var_1.Int_Comp = 5; |
| JovanEps | 0:16f8af9370b6 | 220 | Next_Record->variant.var_1.Int_Comp |
| JovanEps | 0:16f8af9370b6 | 221 | = Ptr_Val_Par->variant.var_1.Int_Comp; |
| JovanEps | 0:16f8af9370b6 | 222 | Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp; |
| JovanEps | 0:16f8af9370b6 | 223 | Proc_3 (&Next_Record->Ptr_Comp); |
| JovanEps | 0:16f8af9370b6 | 224 | /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp |
| JovanEps | 0:16f8af9370b6 | 225 | == Ptr_Glob->Ptr_Comp */ |
| JovanEps | 0:16f8af9370b6 | 226 | if (Next_Record->Discr == Ident_1) |
| JovanEps | 0:16f8af9370b6 | 227 | /* then, executed */ |
| JovanEps | 0:16f8af9370b6 | 228 | { |
| JovanEps | 0:16f8af9370b6 | 229 | Next_Record->variant.var_1.Int_Comp = 6; |
| JovanEps | 0:16f8af9370b6 | 230 | Proc_6(Ptr_Val_Par->variant.var_1.Enum_Comp, |
| JovanEps | 0:16f8af9370b6 | 231 | &Next_Record->variant.var_1.Enum_Comp); |
| JovanEps | 0:16f8af9370b6 | 232 | Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp; |
| JovanEps | 0:16f8af9370b6 | 233 | Proc_7(Next_Record->variant.var_1.Int_Comp, 10, |
| JovanEps | 0:16f8af9370b6 | 234 | &Next_Record->variant.var_1.Int_Comp); |
| JovanEps | 0:16f8af9370b6 | 235 | } else /* not executed */ |
| JovanEps | 0:16f8af9370b6 | 236 | structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp); |
| JovanEps | 0:16f8af9370b6 | 237 | } /* Proc_1 */ |
| JovanEps | 0:16f8af9370b6 | 238 | |
| JovanEps | 0:16f8af9370b6 | 239 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 240 | void Proc_2( One_Fifty * Int_Par_Ref ) |
| JovanEps | 0:16f8af9370b6 | 241 | { |
| JovanEps | 0:16f8af9370b6 | 242 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 243 | One_Fifty Int_Loc; |
| JovanEps | 0:16f8af9370b6 | 244 | Enumeration Enum_Loc; |
| JovanEps | 0:16f8af9370b6 | 245 | |
| JovanEps | 0:16f8af9370b6 | 246 | Int_Loc = *Int_Par_Ref + 10; |
| JovanEps | 0:16f8af9370b6 | 247 | do /* executed once */ |
| JovanEps | 0:16f8af9370b6 | 248 | if (Ch_1_Glob == 'A') |
| JovanEps | 0:16f8af9370b6 | 249 | /* then, executed */ |
| JovanEps | 0:16f8af9370b6 | 250 | { |
| JovanEps | 0:16f8af9370b6 | 251 | Int_Loc -= 1; |
| JovanEps | 0:16f8af9370b6 | 252 | *Int_Par_Ref = Int_Loc - Int_Glob; |
| JovanEps | 0:16f8af9370b6 | 253 | Enum_Loc = Ident_1; |
| JovanEps | 0:16f8af9370b6 | 254 | } /* if */ |
| JovanEps | 0:16f8af9370b6 | 255 | while (Enum_Loc != Ident_1); /* true */ |
| JovanEps | 0:16f8af9370b6 | 256 | } |
| JovanEps | 0:16f8af9370b6 | 257 | |
| JovanEps | 0:16f8af9370b6 | 258 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 259 | void Proc_3( Rec_Pointer * Ptr_Ref_Par ) |
| JovanEps | 0:16f8af9370b6 | 260 | { |
| JovanEps | 0:16f8af9370b6 | 261 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 262 | if (Ptr_Glob != Null) { |
| JovanEps | 0:16f8af9370b6 | 263 | /* then, executed */ |
| JovanEps | 0:16f8af9370b6 | 264 | *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp; |
| JovanEps | 0:16f8af9370b6 | 265 | } |
| JovanEps | 0:16f8af9370b6 | 266 | Proc_7(10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp); |
| JovanEps | 0:16f8af9370b6 | 267 | } /* Proc_3 */ |
| JovanEps | 0:16f8af9370b6 | 268 | |
| JovanEps | 0:16f8af9370b6 | 269 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 270 | void Proc_4( void ) |
| JovanEps | 0:16f8af9370b6 | 271 | { |
| JovanEps | 0:16f8af9370b6 | 272 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 273 | Booleann Bool_Loc; |
| JovanEps | 0:16f8af9370b6 | 274 | |
| JovanEps | 0:16f8af9370b6 | 275 | Bool_Loc = Ch_1_Glob == 'A'; |
| JovanEps | 0:16f8af9370b6 | 276 | Bool_Glob = Bool_Loc | Bool_Glob; |
| JovanEps | 0:16f8af9370b6 | 277 | Ch_2_Glob = 'B'; |
| JovanEps | 0:16f8af9370b6 | 278 | } /* Proc_4 */ |
| JovanEps | 0:16f8af9370b6 | 279 | |
| JovanEps | 0:16f8af9370b6 | 280 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 281 | void Proc_5( void ) |
| JovanEps | 0:16f8af9370b6 | 282 | { |
| JovanEps | 0:16f8af9370b6 | 283 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 284 | Ch_1_Glob = 'A'; |
| JovanEps | 0:16f8af9370b6 | 285 | Bool_Glob = false; |
| JovanEps | 0:16f8af9370b6 | 286 | } /* Proc_5 */ |
| JovanEps | 0:16f8af9370b6 | 287 | |
| JovanEps | 0:16f8af9370b6 | 288 | |
| JovanEps | 0:16f8af9370b6 | 289 | |
| JovanEps | 0:16f8af9370b6 | 290 | Booleann Func_3( Enumeration Enum_Par_Val ); |
| JovanEps | 0:16f8af9370b6 | 291 | |
| JovanEps | 0:16f8af9370b6 | 292 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 293 | void Proc_6( Enumeration Enum_Val_Par, Enumeration * Enum_Ref_Par ) |
| JovanEps | 0:16f8af9370b6 | 294 | { |
| JovanEps | 0:16f8af9370b6 | 295 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 296 | *Enum_Ref_Par = Enum_Val_Par; |
| JovanEps | 0:16f8af9370b6 | 297 | if (! Func_3 (Enum_Val_Par)) |
| JovanEps | 0:16f8af9370b6 | 298 | /* then, not executed */ |
| JovanEps | 0:16f8af9370b6 | 299 | *Enum_Ref_Par = Ident_4; |
| JovanEps | 0:16f8af9370b6 | 300 | switch (Enum_Val_Par) { |
| JovanEps | 0:16f8af9370b6 | 301 | case Ident_1: |
| JovanEps | 0:16f8af9370b6 | 302 | *Enum_Ref_Par = Ident_1; |
| JovanEps | 0:16f8af9370b6 | 303 | break; |
| JovanEps | 0:16f8af9370b6 | 304 | case Ident_2: |
| JovanEps | 0:16f8af9370b6 | 305 | if (Int_Glob > 100) |
| JovanEps | 0:16f8af9370b6 | 306 | /* then */ |
| JovanEps | 0:16f8af9370b6 | 307 | *Enum_Ref_Par = Ident_1; |
| JovanEps | 0:16f8af9370b6 | 308 | else *Enum_Ref_Par = Ident_4; |
| JovanEps | 0:16f8af9370b6 | 309 | break; |
| JovanEps | 0:16f8af9370b6 | 310 | case Ident_3: /* executed */ |
| JovanEps | 0:16f8af9370b6 | 311 | *Enum_Ref_Par = Ident_2; |
| JovanEps | 0:16f8af9370b6 | 312 | break; |
| JovanEps | 0:16f8af9370b6 | 313 | case Ident_4: |
| JovanEps | 0:16f8af9370b6 | 314 | break; |
| JovanEps | 0:16f8af9370b6 | 315 | case Ident_5: |
| JovanEps | 0:16f8af9370b6 | 316 | *Enum_Ref_Par = Ident_3; |
| JovanEps | 0:16f8af9370b6 | 317 | break; |
| JovanEps | 0:16f8af9370b6 | 318 | } /* switch */ |
| JovanEps | 0:16f8af9370b6 | 319 | } |
| JovanEps | 0:16f8af9370b6 | 320 | |
| JovanEps | 0:16f8af9370b6 | 321 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 322 | void Proc_7( One_Fifty Int_1_Par_Val, One_Fifty Int_2_Par_Val, |
| JovanEps | 0:16f8af9370b6 | 323 | One_Fifty * Int_Par_Ref ) |
| JovanEps | 0:16f8af9370b6 | 324 | { |
| JovanEps | 0:16f8af9370b6 | 325 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 326 | One_Fifty Int_Loc; |
| JovanEps | 0:16f8af9370b6 | 327 | |
| JovanEps | 0:16f8af9370b6 | 328 | Int_Loc = Int_1_Par_Val + 2; |
| JovanEps | 0:16f8af9370b6 | 329 | *Int_Par_Ref = Int_2_Par_Val + Int_Loc; |
| JovanEps | 0:16f8af9370b6 | 330 | } /* Proc_7 */ |
| JovanEps | 0:16f8af9370b6 | 331 | |
| JovanEps | 0:16f8af9370b6 | 332 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 333 | void Proc_8( Arr_1_Dim Arr_1_Par_Ref, Arr_2_Dim Arr_2_Par_Ref, |
| JovanEps | 0:16f8af9370b6 | 334 | int Int_1_Par_Val, int Int_2_Par_Val ) |
| JovanEps | 0:16f8af9370b6 | 335 | { |
| JovanEps | 0:16f8af9370b6 | 336 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 337 | REG One_Fifty Int_Index; |
| JovanEps | 0:16f8af9370b6 | 338 | REG One_Fifty Int_Loc; |
| JovanEps | 0:16f8af9370b6 | 339 | |
| JovanEps | 0:16f8af9370b6 | 340 | Int_Loc = Int_1_Par_Val + 5; |
| JovanEps | 0:16f8af9370b6 | 341 | Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val; |
| JovanEps | 0:16f8af9370b6 | 342 | Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc]; |
| JovanEps | 0:16f8af9370b6 | 343 | Arr_1_Par_Ref [Int_Loc+15] = Int_Loc; |
| JovanEps | 0:16f8af9370b6 | 344 | for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index) |
| JovanEps | 0:16f8af9370b6 | 345 | Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc; |
| JovanEps | 0:16f8af9370b6 | 346 | Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1; |
| JovanEps | 0:16f8af9370b6 | 347 | Arr_2_Par_Ref [Int_Loc+10] [Int_Loc] = Arr_1_Par_Ref [Int_Loc]; |
| JovanEps | 0:16f8af9370b6 | 348 | Int_Glob = 5; |
| JovanEps | 0:16f8af9370b6 | 349 | } /* Proc_8 */ |
| JovanEps | 0:16f8af9370b6 | 350 | |
| JovanEps | 0:16f8af9370b6 | 351 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 352 | Enumeration Func_1( Capital_Letter Ch_1_Par_Val, Capital_Letter Ch_2_Par_Val ) |
| JovanEps | 0:16f8af9370b6 | 353 | { |
| JovanEps | 0:16f8af9370b6 | 354 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 355 | |
| JovanEps | 0:16f8af9370b6 | 356 | Capital_Letter Ch_1_Loc; |
| JovanEps | 0:16f8af9370b6 | 357 | Capital_Letter Ch_2_Loc; |
| JovanEps | 0:16f8af9370b6 | 358 | |
| JovanEps | 0:16f8af9370b6 | 359 | Ch_1_Loc = Ch_1_Par_Val; |
| JovanEps | 0:16f8af9370b6 | 360 | Ch_2_Loc = Ch_1_Loc; |
| JovanEps | 0:16f8af9370b6 | 361 | if (Ch_2_Loc != Ch_2_Par_Val) |
| JovanEps | 0:16f8af9370b6 | 362 | /* then, executed */ |
| JovanEps | 0:16f8af9370b6 | 363 | return (Ident_1); |
| JovanEps | 0:16f8af9370b6 | 364 | else { /* not executed */ |
| JovanEps | 0:16f8af9370b6 | 365 | Ch_1_Glob = Ch_1_Loc; |
| JovanEps | 0:16f8af9370b6 | 366 | return (Ident_2); |
| JovanEps | 0:16f8af9370b6 | 367 | } |
| JovanEps | 0:16f8af9370b6 | 368 | } /* Func_1 */ |
| JovanEps | 0:16f8af9370b6 | 369 | |
| JovanEps | 0:16f8af9370b6 | 370 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 371 | Booleann Func_2( Str_30 Str_1_Par_Ref, Str_30 Str_2_Par_Ref ) |
| JovanEps | 0:16f8af9370b6 | 372 | { |
| JovanEps | 0:16f8af9370b6 | 373 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 374 | |
| JovanEps | 0:16f8af9370b6 | 375 | REG One_Thirty Int_Loc; |
| JovanEps | 0:16f8af9370b6 | 376 | Capital_Letter Ch_Loc; |
| JovanEps | 0:16f8af9370b6 | 377 | |
| JovanEps | 0:16f8af9370b6 | 378 | Int_Loc = 2; |
| JovanEps | 0:16f8af9370b6 | 379 | while (Int_Loc <= 2) /* loop body executed once */ |
| JovanEps | 0:16f8af9370b6 | 380 | if (Func_1 (Str_1_Par_Ref[Int_Loc], |
| JovanEps | 0:16f8af9370b6 | 381 | Str_2_Par_Ref[Int_Loc+1]) == Ident_1) |
| JovanEps | 0:16f8af9370b6 | 382 | /* then, executed */ |
| JovanEps | 0:16f8af9370b6 | 383 | { |
| JovanEps | 0:16f8af9370b6 | 384 | Ch_Loc = 'A'; |
| JovanEps | 0:16f8af9370b6 | 385 | Int_Loc += 1; |
| JovanEps | 0:16f8af9370b6 | 386 | } /* if, while */ |
| JovanEps | 0:16f8af9370b6 | 387 | if (Ch_Loc >= 'W' && Ch_Loc < 'Z') |
| JovanEps | 0:16f8af9370b6 | 388 | /* then, not executed */ |
| JovanEps | 0:16f8af9370b6 | 389 | Int_Loc = 7; |
| JovanEps | 0:16f8af9370b6 | 390 | if (Ch_Loc == 'R') |
| JovanEps | 0:16f8af9370b6 | 391 | /* then, not executed */ |
| JovanEps | 0:16f8af9370b6 | 392 | return (true); |
| JovanEps | 0:16f8af9370b6 | 393 | else { /* executed */ |
| JovanEps | 0:16f8af9370b6 | 394 | if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0) |
| JovanEps | 0:16f8af9370b6 | 395 | /* then, not executed */ |
| JovanEps | 0:16f8af9370b6 | 396 | { |
| JovanEps | 0:16f8af9370b6 | 397 | Int_Loc += 7; |
| JovanEps | 0:16f8af9370b6 | 398 | Int_Glob = Int_Loc; |
| JovanEps | 0:16f8af9370b6 | 399 | return (true); |
| JovanEps | 0:16f8af9370b6 | 400 | } else /* executed */ |
| JovanEps | 0:16f8af9370b6 | 401 | return (false); |
| JovanEps | 0:16f8af9370b6 | 402 | } /* if Ch_Loc */ |
| JovanEps | 0:16f8af9370b6 | 403 | } /* Func_2 */ |
| JovanEps | 0:16f8af9370b6 | 404 | |
| JovanEps | 0:16f8af9370b6 | 405 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 406 | Booleann Func_3( Enumeration Enum_Par_Val ) |
| JovanEps | 0:16f8af9370b6 | 407 | { |
| JovanEps | 0:16f8af9370b6 | 408 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 409 | Enumeration Enum_Loc; |
| JovanEps | 0:16f8af9370b6 | 410 | |
| JovanEps | 0:16f8af9370b6 | 411 | Enum_Loc = Enum_Par_Val; |
| JovanEps | 0:16f8af9370b6 | 412 | if (Enum_Loc == Ident_3) |
| JovanEps | 0:16f8af9370b6 | 413 | /* then, executed */ |
| JovanEps | 0:16f8af9370b6 | 414 | return (true); |
| JovanEps | 0:16f8af9370b6 | 415 | else /* not executed */ |
| JovanEps | 0:16f8af9370b6 | 416 | return (false); |
| JovanEps | 0:16f8af9370b6 | 417 | } /* Func_3 */ |
| JovanEps | 0:16f8af9370b6 | 418 | //************************************************************** |
| JovanEps | 0:16f8af9370b6 | 419 | |
| JovanEps | 0:16f8af9370b6 | 420 | |
| JovanEps | 0:16f8af9370b6 | 421 | |
| JovanEps | 0:16f8af9370b6 | 422 | //********************************* |
| JovanEps | 0:16f8af9370b6 | 423 | //** MAIN block ** |
| JovanEps | 0:16f8af9370b6 | 424 | //********************************* |
| JovanEps | 0:16f8af9370b6 | 425 | int main() |
| JovanEps | 0:16f8af9370b6 | 426 | { |
| JovanEps | 0:16f8af9370b6 | 427 | pc.baud(9600); |
| JovanEps | 0:16f8af9370b6 | 428 | |
| JovanEps | 0:16f8af9370b6 | 429 | while(1) { |
| JovanEps | 0:16f8af9370b6 | 430 | myled= !myled; |
| JovanEps | 0:16f8af9370b6 | 431 | |
| JovanEps | 0:16f8af9370b6 | 432 | DHRYSTONE(); //Call |
| JovanEps | 0:16f8af9370b6 | 433 | |
| JovanEps | 0:16f8af9370b6 | 434 | myled= !myled; |
| JovanEps | 0:16f8af9370b6 | 435 | wait_us(3); |
| JovanEps | 0:16f8af9370b6 | 436 | } |
| JovanEps | 0:16f8af9370b6 | 437 | } |
| JovanEps | 0:16f8af9370b6 | 438 | |
| JovanEps | 0:16f8af9370b6 | 439 | |
| JovanEps | 0:16f8af9370b6 | 440 | //************************************************************** |