"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.

Dependencies:   dhry mbed

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?

UserRevisionLine numberNew 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 //**************************************************************