summaryrefslogtreecommitdiff
path: root/examples/test
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2013-01-08 05:05:02 -0800
committerBernard Xiong <[email protected]>2013-01-08 05:05:02 -0800
commit72782e920325808bbc58fc2344fc52033479b627 (patch)
tree45badbfa9818b8d1722463949beba0f88d1cbd9f /examples/test
parentb3cf278502e605fa03861a2da5685b4c8d72879e (diff)
convert end of line
Diffstat (limited to 'examples/test')
-rw-r--r--examples/test/dhry.h824
-rw-r--r--examples/test/dhry_1.c698
-rw-r--r--examples/test/fs_test.c594
-rw-r--r--examples/test/mem_test.c210
-rw-r--r--examples/test/net_test.c564
5 files changed, 1445 insertions, 1445 deletions
diff --git a/examples/test/dhry.h b/examples/test/dhry.h
index 02e7180e59..8f47233802 100644
--- a/examples/test/dhry.h
+++ b/examples/test/dhry.h
@@ -1,412 +1,412 @@
-/*
- ****************************************************************************
- *
- * "DHRYSTONE" Benchmark Program
- * -----------------------------
- *
- * Version: C, Version 2.1
- *
- * File: dhry.h (part 1 of 3)
- *
- * Date: May 25, 1988
- *
- * Author: Reinhold P. Weicker
- * Siemens AG, AUT E 51
- * Postfach 3220
- * 8520 Erlangen
- * Germany (West)
- * Phone: [+49]-9131-7-20330
- * (8-17 Central European Time)
- * Usenet: ..!mcsun!unido!estevax!weicker
- *
- * Original Version (in Ada) published in
- * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
- * pp. 1013 - 1030, together with the statistics
- * on which the distribution of statements etc. is based.
- *
- * In this C version, the following C library functions are used:
- * - strcpy, strcmp (inside the measurement loop)
- * - printf, scanf (outside the measurement loop)
- * In addition, Berkeley UNIX system calls "times ()" or "time ()"
- * are used for execution time measurement. For measurements
- * on other systems, these calls have to be changed.
- *
- * Collection of Results:
- * Reinhold Weicker (address see above) and
- *
- * Rick Richardson
- * PC Research. Inc.
- * 94 Apple Orchard Drive
- * Tinton Falls, NJ 07724
- * Phone: (201) 389-8963 (9-17 EST)
- * Usenet: ...!uunet!pcrat!rick
- *
- * Please send results to Rick Richardson and/or Reinhold Weicker.
- * Complete information should be given on hardware and software used.
- * Hardware information includes: Machine type, CPU, type and size
- * of caches; for microprocessors: clock frequency, memory speed
- * (number of wait states).
- * Software information includes: Compiler (and runtime library)
- * manufacturer and version, compilation switches, OS version.
- * The Operating System version may give an indication about the
- * compiler; Dhrystone itself performs no OS calls in the measurement loop.
- *
- * The complete output generated by the program should be mailed
- * such that at least some checks for correctness can be made.
- *
- ***************************************************************************
- *
- * History: This version C/2.1 has been made for two reasons:
- *
- * 1) There is an obvious need for a common C version of
- * Dhrystone, since C is at present the most popular system
- * programming language for the class of processors
- * (microcomputers, minicomputers) where Dhrystone is used most.
- * There should be, as far as possible, only one C version of
- * Dhrystone such that results can be compared without
- * restrictions. In the past, the C versions distributed
- * by Rick Richardson (Version 1.1) and by Reinhold Weicker
- * had small (though not significant) differences.
- *
- * 2) As far as it is possible without changes to the Dhrystone
- * statistics, optimizing compilers should be prevented from
- * removing significant statements.
- *
- * This C version has been developed in cooperation with
- * Rick Richardson (Tinton Falls, NJ), it incorporates many
- * ideas from the "Version 1.1" distributed previously by
- * him over the UNIX network Usenet.
- * I also thank Chaim Benedelac (National Semiconductor),
- * David Ditzel (SUN), Earl Killian and John Mashey (MIPS),
- * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley)
- * for their help with comments on earlier versions of the
- * benchmark.
- *
- * Changes: In the initialization part, this version follows mostly
- * Rick Richardson's version distributed via Usenet, not the
- * version distributed earlier via floppy disk by Reinhold Weicker.
- * As a concession to older compilers, names have been made
- * unique within the first 8 characters.
- * Inside the measurement loop, this version follows the
- * version previously distributed by Reinhold Weicker.
- *
- * At several places in the benchmark, code has been added,
- * but within the measurement loop only in branches that
- * are not executed. The intention is that optimizing compilers
- * should be prevented from moving code out of the measurement
- * loop, or from removing code altogether. Since the statements
- * that are executed within the measurement loop have NOT been
- * changed, the numbers defining the "Dhrystone distribution"
- * (distribution of statements, operand types and locality)
- * still hold. Except for sophisticated optimizing compilers,
- * execution times for this version should be the same as
- * for previous versions.
- *
- * Since it has proven difficult to subtract the time for the
- * measurement loop overhead in a correct way, the loop check
- * has been made a part of the benchmark. This does have
- * an impact - though a very minor one - on the distribution
- * statistics which have been updated for this version.
- *
- * All changes within the measurement loop are described
- * and discussed in the companion paper "Rationale for
- * Dhrystone version 2".
- *
- * Because of the self-imposed limitation that the order and
- * distribution of the executed statements should not be
- * changed, there are still cases where optimizing compilers
- * may not generate code for some statements. To a certain
- * degree, this is unavoidable for small synthetic benchmarks.
- * Users of the benchmark are advised to check code listings
- * whether code is generated for all statements of Dhrystone.
- *
- * Version 2.1 is identical to version 2.0 distributed via
- * the UNIX network Usenet in March 1988 except that it corrects
- * some minor deficiencies that were found by users of version 2.0.
- * The only change within the measurement loop is that a
- * non-executed "else" part was added to the "if" statement in
- * Func_3, and a non-executed "else" part removed from Proc_3.
- *
- ***************************************************************************
- *
- * Defines: The following "Defines" are possible:
- * -DREG=register (default: Not defined)
- * As an approximation to what an average C programmer
- * might do, the "register" storage class is applied
- * (if enabled by -DREG=register)
- * - for local variables, if they are used (dynamically)
- * five or more times
- * - for parameters if they are used (dynamically)
- * six or more times
- * Note that an optimal "register" strategy is
- * compiler-dependent, and that "register" declarations
- * do not necessarily lead to faster execution.
- * -DNOSTRUCTASSIGN (default: Not defined)
- * Define if the C compiler does not support
- * assignment of structures.
- * -DNOENUMS (default: Not defined)
- * Define if the C compiler does not support
- * enumeration types.
- * -DTIMES (default)
- * -DTIME
- * The "times" function of UNIX (returning process times)
- * or the "time" function (returning wallclock time)
- * is used for measurement.
- * For single user machines, "time ()" is adequate. For
- * multi-user machines where you cannot get single-user
- * access, use the "times ()" function. If you have
- * neither, use a stopwatch in the dead of night.
- * "printf"s are provided marking the points "Start Timer"
- * and "Stop Timer". DO NOT use the UNIX "time(1)"
- * command, as this will measure the total time to
- * run this program, which will (erroneously) include
- * the time to allocate storage (malloc) and to perform
- * the initialization.
- * -DHZ=nnn
- * In Berkeley UNIX, the function "times" returns process
- * time in 1/HZ seconds, with HZ = 60 for most systems.
- * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY
- * A VALUE.
- *
- ***************************************************************************
- *
- * Compilation model and measurement (IMPORTANT):
- *
- * This C version of Dhrystone consists of three files:
- * - dhry.h (this file, containing global definitions and comments)
- * - dhry_1.c (containing the code corresponding to Ada package Pack_1)
- * - dhry_2.c (containing the code corresponding to Ada package Pack_2)
- *
- * The following "ground rules" apply for measurements:
- * - Separate compilation
- * - No procedure merging
- * - Otherwise, compiler optimizations are allowed but should be indicated
- * - Default results are those without register declarations
- * See the companion paper "Rationale for Dhrystone Version 2" for a more
- * detailed discussion of these ground rules.
- *
- * For 16-Bit processors (e.g. 80186, 80286), times for all compilation
- * models ("small", "medium", "large" etc.) should be given if possible,
- * together with a definition of these models for the compiler system used.
- *
- **************************************************************************
- *
- * Dhrystone (C version) statistics:
- *
- * [Comment from the first distribution, updated for version 2.
- * Note that because of language differences, the numbers are slightly
- * different from the Ada version.]
- *
- * The following program contains statements of a high level programming
- * language (here: C) in a distribution considered representative:
- *
- * assignments 52 (51.0 %)
- * control statements 33 (32.4 %)
- * procedure, function calls 17 (16.7 %)
- *
- * 103 statements are dynamically executed. The program is balanced with
- * respect to the three aspects:
- *
- * - statement type
- * - operand type
- * - operand locality
- * operand global, local, parameter, or constant.
- *
- * The combination of these three aspects is balanced only approximately.
- *
- * 1. Statement Type:
- * ----------------- number
- *
- * V1 = V2 9
- * (incl. V1 = F(..)
- * V = Constant 12
- * Assignment, 7
- * with array element
- * Assignment, 6
- * with record component
- * --
- * 34 34
- *
- * X = Y +|-|"&&"|"|" Z 5
- * X = Y +|-|"==" Constant 6
- * X = X +|- 1 3
- * X = Y *|/ Z 2
- * X = Expression, 1
- * two operators
- * X = Expression, 1
- * three operators
- * --
- * 18 18
- *
- * if .... 14
- * with "else" 7
- * without "else" 7
- * executed 3
- * not executed 4
- * for ... 7 | counted every time
- * while ... 4 | the loop condition
- * do ... while 1 | is evaluated
- * switch ... 1
- * break 1
- * declaration with 1
- * initialization
- * --
- * 34 34
- *
- * P (...) procedure call 11
- * user procedure 10
- * library procedure 1
- * X = F (...)
- * function call 6
- * user function 5
- * library function 1
- * --
- * 17 17
- * ---
- * 103
- *
- * The average number of parameters in procedure or function calls
- * is 1.82 (not counting the function values as implicit parameters).
- *
- *
- * 2. Operators
- * ------------
- * number approximate
- * percentage
- *
- * Arithmetic 32 50.8
- *
- * + 21 33.3
- * - 7 11.1
- * * 3 4.8
- * / (int div) 1 1.6
- *
- * Comparison 27 42.8
- *
- * == 9 14.3
- * /= 4 6.3
- * > 1 1.6
- * < 3 4.8
- * >= 1 1.6
- * <= 9 14.3
- *
- * Logic 4 6.3
- *
- * && (AND-THEN) 1 1.6
- * | (OR) 1 1.6
- * ! (NOT) 2 3.2
- *
- * -- -----
- * 63 100.1
- *
- *
- * 3. Operand Type (counted once per operand reference):
- * ---------------
- * number approximate
- * percentage
- *
- * Integer 175 72.3 %
- * Character 45 18.6 %
- * Pointer 12 5.0 %
- * String30 6 2.5 %
- * Array 2 0.8 %
- * Record 2 0.8 %
- * --- -------
- * 242 100.0 %
- *
- * When there is an access path leading to the final operand (e.g. a record
- * component), only the final data type on the access path is counted.
- *
- *
- * 4. Operand Locality:
- * -------------------
- * number approximate
- * percentage
- *
- * local variable 114 47.1 %
- * global variable 22 9.1 %
- * parameter 45 18.6 %
- * value 23 9.5 %
- * reference 22 9.1 %
- * function result 6 2.5 %
- * constant 55 22.7 %
- * --- -------
- * 242 100.0 %
- *
- *
- * The program does not compute anything meaningful, but it is syntactically
- * and semantically correct. All variables have a value assigned to them
- * before they are used as a source operand.
- *
- * There has been no explicit effort to account for the effects of a
- * cache, or to balance the use of long or short displacements for code or
- * data.
- *
- ***************************************************************************
- */
-
-/* Compiler and system dependent definitions: */
-
-#define Mic_secs_Per_Second 1000000.0
- /* Berkeley UNIX C returns process times in seconds/HZ */
-
-#ifdef NOSTRUCTASSIGN
-#define structassign(d, s) memcpy(&(d), &(s), sizeof(d))
-#else
-#define structassign(d, s) d = s
-#endif
-
-#ifdef NOENUM
-#define Ident_1 0
-#define Ident_2 1
-#define Ident_3 2
-#define Ident_4 3
-#define Ident_5 4
- typedef int Enumeration;
-#else
- typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
- Enumeration;
-#endif
- /* for boolean and enumeration types in Ada, Pascal */
-
-/* General definitions: */
-
-// #include <stdio.h>
- /* for strcpy, strcmp */
-#include <rtthread.h>
-
-#define Null 0
- /* Value of a Null pointer */
-#define true 1
-#define false 0
-
-typedef int One_Thirty;
-typedef int One_Fifty;
-typedef char Capital_Letter;
-typedef int Boolean;
-typedef char Str_30 [31];
-typedef int Arr_1_Dim [50];
-typedef int Arr_2_Dim [50] [50];
-
-typedef struct record
- {
- struct record *Ptr_Comp;
- Enumeration Discr;
- union {
- struct {
- Enumeration Enum_Comp;
- int Int_Comp;
- char Str_Comp [31];
- } var_1;
- struct {
- Enumeration E_Comp_2;
- char Str_2_Comp [31];
- } var_2;
- struct {
- char Ch_1_Comp;
- char Ch_2_Comp;
- } var_3;
- } variant;
- } Rec_Type, *Rec_Pointer;
-
-
+/*
+ ****************************************************************************
+ *
+ * "DHRYSTONE" Benchmark Program
+ * -----------------------------
+ *
+ * Version: C, Version 2.1
+ *
+ * File: dhry.h (part 1 of 3)
+ *
+ * Date: May 25, 1988
+ *
+ * Author: Reinhold P. Weicker
+ * Siemens AG, AUT E 51
+ * Postfach 3220
+ * 8520 Erlangen
+ * Germany (West)
+ * Phone: [+49]-9131-7-20330
+ * (8-17 Central European Time)
+ * Usenet: ..!mcsun!unido!estevax!weicker
+ *
+ * Original Version (in Ada) published in
+ * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
+ * pp. 1013 - 1030, together with the statistics
+ * on which the distribution of statements etc. is based.
+ *
+ * In this C version, the following C library functions are used:
+ * - strcpy, strcmp (inside the measurement loop)
+ * - printf, scanf (outside the measurement loop)
+ * In addition, Berkeley UNIX system calls "times ()" or "time ()"
+ * are used for execution time measurement. For measurements
+ * on other systems, these calls have to be changed.
+ *
+ * Collection of Results:
+ * Reinhold Weicker (address see above) and
+ *
+ * Rick Richardson
+ * PC Research. Inc.
+ * 94 Apple Orchard Drive
+ * Tinton Falls, NJ 07724
+ * Phone: (201) 389-8963 (9-17 EST)
+ * Usenet: ...!uunet!pcrat!rick
+ *
+ * Please send results to Rick Richardson and/or Reinhold Weicker.
+ * Complete information should be given on hardware and software used.
+ * Hardware information includes: Machine type, CPU, type and size
+ * of caches; for microprocessors: clock frequency, memory speed
+ * (number of wait states).
+ * Software information includes: Compiler (and runtime library)
+ * manufacturer and version, compilation switches, OS version.
+ * The Operating System version may give an indication about the
+ * compiler; Dhrystone itself performs no OS calls in the measurement loop.
+ *
+ * The complete output generated by the program should be mailed
+ * such that at least some checks for correctness can be made.
+ *
+ ***************************************************************************
+ *
+ * History: This version C/2.1 has been made for two reasons:
+ *
+ * 1) There is an obvious need for a common C version of
+ * Dhrystone, since C is at present the most popular system
+ * programming language for the class of processors
+ * (microcomputers, minicomputers) where Dhrystone is used most.
+ * There should be, as far as possible, only one C version of
+ * Dhrystone such that results can be compared without
+ * restrictions. In the past, the C versions distributed
+ * by Rick Richardson (Version 1.1) and by Reinhold Weicker
+ * had small (though not significant) differences.
+ *
+ * 2) As far as it is possible without changes to the Dhrystone
+ * statistics, optimizing compilers should be prevented from
+ * removing significant statements.
+ *
+ * This C version has been developed in cooperation with
+ * Rick Richardson (Tinton Falls, NJ), it incorporates many
+ * ideas from the "Version 1.1" distributed previously by
+ * him over the UNIX network Usenet.
+ * I also thank Chaim Benedelac (National Semiconductor),
+ * David Ditzel (SUN), Earl Killian and John Mashey (MIPS),
+ * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley)
+ * for their help with comments on earlier versions of the
+ * benchmark.
+ *
+ * Changes: In the initialization part, this version follows mostly
+ * Rick Richardson's version distributed via Usenet, not the
+ * version distributed earlier via floppy disk by Reinhold Weicker.
+ * As a concession to older compilers, names have been made
+ * unique within the first 8 characters.
+ * Inside the measurement loop, this version follows the
+ * version previously distributed by Reinhold Weicker.
+ *
+ * At several places in the benchmark, code has been added,
+ * but within the measurement loop only in branches that
+ * are not executed. The intention is that optimizing compilers
+ * should be prevented from moving code out of the measurement
+ * loop, or from removing code altogether. Since the statements
+ * that are executed within the measurement loop have NOT been
+ * changed, the numbers defining the "Dhrystone distribution"
+ * (distribution of statements, operand types and locality)
+ * still hold. Except for sophisticated optimizing compilers,
+ * execution times for this version should be the same as
+ * for previous versions.
+ *
+ * Since it has proven difficult to subtract the time for the
+ * measurement loop overhead in a correct way, the loop check
+ * has been made a part of the benchmark. This does have
+ * an impact - though a very minor one - on the distribution
+ * statistics which have been updated for this version.
+ *
+ * All changes within the measurement loop are described
+ * and discussed in the companion paper "Rationale for
+ * Dhrystone version 2".
+ *
+ * Because of the self-imposed limitation that the order and
+ * distribution of the executed statements should not be
+ * changed, there are still cases where optimizing compilers
+ * may not generate code for some statements. To a certain
+ * degree, this is unavoidable for small synthetic benchmarks.
+ * Users of the benchmark are advised to check code listings
+ * whether code is generated for all statements of Dhrystone.
+ *
+ * Version 2.1 is identical to version 2.0 distributed via
+ * the UNIX network Usenet in March 1988 except that it corrects
+ * some minor deficiencies that were found by users of version 2.0.
+ * The only change within the measurement loop is that a
+ * non-executed "else" part was added to the "if" statement in
+ * Func_3, and a non-executed "else" part removed from Proc_3.
+ *
+ ***************************************************************************
+ *
+ * Defines: The following "Defines" are possible:
+ * -DREG=register (default: Not defined)
+ * As an approximation to what an average C programmer
+ * might do, the "register" storage class is applied
+ * (if enabled by -DREG=register)
+ * - for local variables, if they are used (dynamically)
+ * five or more times
+ * - for parameters if they are used (dynamically)
+ * six or more times
+ * Note that an optimal "register" strategy is
+ * compiler-dependent, and that "register" declarations
+ * do not necessarily lead to faster execution.
+ * -DNOSTRUCTASSIGN (default: Not defined)
+ * Define if the C compiler does not support
+ * assignment of structures.
+ * -DNOENUMS (default: Not defined)
+ * Define if the C compiler does not support
+ * enumeration types.
+ * -DTIMES (default)
+ * -DTIME
+ * The "times" function of UNIX (returning process times)
+ * or the "time" function (returning wallclock time)
+ * is used for measurement.
+ * For single user machines, "time ()" is adequate. For
+ * multi-user machines where you cannot get single-user
+ * access, use the "times ()" function. If you have
+ * neither, use a stopwatch in the dead of night.
+ * "printf"s are provided marking the points "Start Timer"
+ * and "Stop Timer". DO NOT use the UNIX "time(1)"
+ * command, as this will measure the total time to
+ * run this program, which will (erroneously) include
+ * the time to allocate storage (malloc) and to perform
+ * the initialization.
+ * -DHZ=nnn
+ * In Berkeley UNIX, the function "times" returns process
+ * time in 1/HZ seconds, with HZ = 60 for most systems.
+ * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY
+ * A VALUE.
+ *
+ ***************************************************************************
+ *
+ * Compilation model and measurement (IMPORTANT):
+ *
+ * This C version of Dhrystone consists of three files:
+ * - dhry.h (this file, containing global definitions and comments)
+ * - dhry_1.c (containing the code corresponding to Ada package Pack_1)
+ * - dhry_2.c (containing the code corresponding to Ada package Pack_2)
+ *
+ * The following "ground rules" apply for measurements:
+ * - Separate compilation
+ * - No procedure merging
+ * - Otherwise, compiler optimizations are allowed but should be indicated
+ * - Default results are those without register declarations
+ * See the companion paper "Rationale for Dhrystone Version 2" for a more
+ * detailed discussion of these ground rules.
+ *
+ * For 16-Bit processors (e.g. 80186, 80286), times for all compilation
+ * models ("small", "medium", "large" etc.) should be given if possible,
+ * together with a definition of these models for the compiler system used.
+ *
+ **************************************************************************
+ *
+ * Dhrystone (C version) statistics:
+ *
+ * [Comment from the first distribution, updated for version 2.
+ * Note that because of language differences, the numbers are slightly
+ * different from the Ada version.]
+ *
+ * The following program contains statements of a high level programming
+ * language (here: C) in a distribution considered representative:
+ *
+ * assignments 52 (51.0 %)
+ * control statements 33 (32.4 %)
+ * procedure, function calls 17 (16.7 %)
+ *
+ * 103 statements are dynamically executed. The program is balanced with
+ * respect to the three aspects:
+ *
+ * - statement type
+ * - operand type
+ * - operand locality
+ * operand global, local, parameter, or constant.
+ *
+ * The combination of these three aspects is balanced only approximately.
+ *
+ * 1. Statement Type:
+ * ----------------- number
+ *
+ * V1 = V2 9
+ * (incl. V1 = F(..)
+ * V = Constant 12
+ * Assignment, 7
+ * with array element
+ * Assignment, 6
+ * with record component
+ * --
+ * 34 34
+ *
+ * X = Y +|-|"&&"|"|" Z 5
+ * X = Y +|-|"==" Constant 6
+ * X = X +|- 1 3
+ * X = Y *|/ Z 2
+ * X = Expression, 1
+ * two operators
+ * X = Expression, 1
+ * three operators
+ * --
+ * 18 18
+ *
+ * if .... 14
+ * with "else" 7
+ * without "else" 7
+ * executed 3
+ * not executed 4
+ * for ... 7 | counted every time
+ * while ... 4 | the loop condition
+ * do ... while 1 | is evaluated
+ * switch ... 1
+ * break 1
+ * declaration with 1
+ * initialization
+ * --
+ * 34 34
+ *
+ * P (...) procedure call 11
+ * user procedure 10
+ * library procedure 1
+ * X = F (...)
+ * function call 6
+ * user function 5
+ * library function 1
+ * --
+ * 17 17
+ * ---
+ * 103
+ *
+ * The average number of parameters in procedure or function calls
+ * is 1.82 (not counting the function values as implicit parameters).
+ *
+ *
+ * 2. Operators
+ * ------------
+ * number approximate
+ * percentage
+ *
+ * Arithmetic 32 50.8
+ *
+ * + 21 33.3
+ * - 7 11.1
+ * * 3 4.8
+ * / (int div) 1 1.6
+ *
+ * Comparison 27 42.8
+ *
+ * == 9 14.3
+ * /= 4 6.3
+ * > 1 1.6
+ * < 3 4.8
+ * >= 1 1.6
+ * <= 9 14.3
+ *
+ * Logic 4 6.3
+ *
+ * && (AND-THEN) 1 1.6
+ * | (OR) 1 1.6
+ * ! (NOT) 2 3.2
+ *
+ * -- -----
+ * 63 100.1
+ *
+ *
+ * 3. Operand Type (counted once per operand reference):
+ * ---------------
+ * number approximate
+ * percentage
+ *
+ * Integer 175 72.3 %
+ * Character 45 18.6 %
+ * Pointer 12 5.0 %
+ * String30 6 2.5 %
+ * Array 2 0.8 %
+ * Record 2 0.8 %
+ * --- -------
+ * 242 100.0 %
+ *
+ * When there is an access path leading to the final operand (e.g. a record
+ * component), only the final data type on the access path is counted.
+ *
+ *
+ * 4. Operand Locality:
+ * -------------------
+ * number approximate
+ * percentage
+ *
+ * local variable 114 47.1 %
+ * global variable 22 9.1 %
+ * parameter 45 18.6 %
+ * value 23 9.5 %
+ * reference 22 9.1 %
+ * function result 6 2.5 %
+ * constant 55 22.7 %
+ * --- -------
+ * 242 100.0 %
+ *
+ *
+ * The program does not compute anything meaningful, but it is syntactically
+ * and semantically correct. All variables have a value assigned to them
+ * before they are used as a source operand.
+ *
+ * There has been no explicit effort to account for the effects of a
+ * cache, or to balance the use of long or short displacements for code or
+ * data.
+ *
+ ***************************************************************************
+ */
+
+/* Compiler and system dependent definitions: */
+
+#define Mic_secs_Per_Second 1000000.0
+ /* Berkeley UNIX C returns process times in seconds/HZ */
+
+#ifdef NOSTRUCTASSIGN
+#define structassign(d, s) memcpy(&(d), &(s), sizeof(d))
+#else
+#define structassign(d, s) d = s
+#endif
+
+#ifdef NOENUM
+#define Ident_1 0
+#define Ident_2 1
+#define Ident_3 2
+#define Ident_4 3
+#define Ident_5 4
+ typedef int Enumeration;
+#else
+ typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
+ Enumeration;
+#endif
+ /* for boolean and enumeration types in Ada, Pascal */
+
+/* General definitions: */
+
+// #include <stdio.h>
+ /* for strcpy, strcmp */
+#include <rtthread.h>
+
+#define Null 0
+ /* Value of a Null pointer */
+#define true 1
+#define false 0
+
+typedef int One_Thirty;
+typedef int One_Fifty;
+typedef char Capital_Letter;
+typedef int Boolean;
+typedef char Str_30 [31];
+typedef int Arr_1_Dim [50];
+typedef int Arr_2_Dim [50] [50];
+
+typedef struct record
+ {
+ struct record *Ptr_Comp;
+ Enumeration Discr;
+ union {
+ struct {
+ Enumeration Enum_Comp;
+ int Int_Comp;
+ char Str_Comp [31];
+ } var_1;
+ struct {
+ Enumeration E_Comp_2;
+ char Str_2_Comp [31];
+ } var_2;
+ struct {
+ char Ch_1_Comp;
+ char Ch_2_Comp;
+ } var_3;
+ } variant;
+ } Rec_Type, *Rec_Pointer;
+
+
diff --git a/examples/test/dhry_1.c b/examples/test/dhry_1.c
index 18cdfec291..b45b9ddafa 100644
--- a/examples/test/dhry_1.c
+++ b/examples/test/dhry_1.c
@@ -1,349 +1,349 @@
-/*
- ****************************************************************************
- *
- * "DHRYSTONE" Benchmark Program
- * -----------------------------
- *
- * Version: C, Version 2.1
- *
- * File: dhry_1.c (part 2 of 3)
- *
- * Date: May 25, 1988
- *
- * Author: Reinhold P. Weicker
- *
- ****************************************************************************
- */
-
-#define NUMBER_OF_RUNS 1000000
-
-#include "dhry.h"
-#define printf rt_kprintf
-
-/* Global Variables: */
-
-Rec_Pointer Ptr_Glob,
- Next_Ptr_Glob;
-int Int_Glob;
-Boolean Bool_Glob;
-char Ch_1_Glob,
- Ch_2_Glob;
-int Arr_1_Glob [50];
-int Arr_2_Glob [50] [50];
-
-Enumeration Func_1 ();
-
-/* forward declaration necessary since Enumeration may not simply be int */
-
-#ifndef REG
- Boolean Reg = false;
-#define REG
- /* REG becomes defined as empty */
- /* i.e. no register variables */
-#else
- Boolean Reg = true;
-#endif
-
-/* variables for time measurement: */
-
-float Begin_Time,
- End_Time,
- User_Time;
-float Microseconds,
- Dhrystones_Per_Second;
-
-/* end of variables for time measurement */
-
-void dhry_test(void)
-/*****/
-
- /* main program, corresponds to procedures */
- /* Main and Proc_0 in the Ada version */
-{
- One_Fifty Int_1_Loc;
- REG One_Fifty Int_2_Loc;
- One_Fifty Int_3_Loc;
- REG char Ch_Index;
- Enumeration Enum_Loc;
- Str_30 Str_1_Loc;
- Str_30 Str_2_Loc;
- REG int Run_Index;
- REG int Number_Of_Runs;
-
- /* Initializations */
-
- Next_Ptr_Glob = (Rec_Pointer) rt_malloc (sizeof (Rec_Type));
- Ptr_Glob = (Rec_Pointer) rt_malloc (sizeof (Rec_Type));
-
- Ptr_Glob->Ptr_Comp = Next_Ptr_Glob;
- Ptr_Glob->Discr = Ident_1;
- Ptr_Glob->variant.var_1.Enum_Comp = Ident_3;
- Ptr_Glob->variant.var_1.Int_Comp = 40;
- rt_strncpy (Ptr_Glob->variant.var_1.Str_Comp,
- "DHRYSTONE PROGRAM, SOME STRING", sizeof(Ptr_Glob->variant.var_1.Str_Comp));
- rt_strncpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING", sizeof(Str_1_Loc));
-
- Arr_2_Glob [8][7] = 10;
- /* Was missing in published program. Without this statement, */
- /* Arr_2_Glob [8][7] would have an undefined value. */
- /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */
- /* overflow may occur for this array element. */
-
- printf ("\n");
- printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n");
- printf ("\n");
- if (Reg)
- {
- printf ("Program compiled with 'register' attribute\n");
- printf ("\n");
- }
- else
- {
- printf ("Program compiled without 'register' attribute\n");
- printf ("\n");
- }
- printf ("Please give the number of runs through the benchmark: ");
-
- Number_Of_Runs = NUMBER_OF_RUNS;
- printf ("%d\n", Number_Of_Runs);
-
- printf ("\n");
-
- printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs);
-
- /***************/
- /* Start timer */
- /***************/
-
-// Add your timer initializing code here
-
- Begin_Time = rt_tick_get(); /* get start tick */
-
- for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
- {
-
- Proc_5();
- Proc_4();
- /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */
- Int_1_Loc = 2;
- Int_2_Loc = 3;
- rt_strncpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING", sizeof(Str_2_Loc));
- Enum_Loc = Ident_2;
- Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc);
- /* Bool_Glob == 1 */
- while (Int_1_Loc < Int_2_Loc) /* loop body executed once */
- {
- Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc;
- /* Int_3_Loc == 7 */
- Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc);
- /* Int_3_Loc == 7 */
- Int_1_Loc += 1;
- } /* while */
- /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
- Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
- /* Int_Glob == 5 */
- Proc_1 (Ptr_Glob);
- for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
- /* loop body executed twice */
- {
- if (Enum_Loc == Func_1 (Ch_Index, 'C'))
- /* then, not executed */
- {
- Proc_6 (Ident_1, &Enum_Loc);
- rt_strncpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING", sizeof(Str_2_Loc));
- Int_2_Loc = Run_Index;
- Int_Glob = Run_Index;
- }
- }
- /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
- Int_2_Loc = Int_2_Loc * Int_1_Loc;
- Int_1_Loc = Int_2_Loc / Int_3_Loc;
- Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
- /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */
- Proc_2 (&Int_1_Loc);
- /* Int_1_Loc == 5 */
-
- } /* loop "for Run_Index" */
-
- /**************/
- /* Stop timer */
- /**************/
-
- End_Time = rt_tick_get(); // Get end tick
-
- printf ("Execution ends\n");
- printf ("\n");
- printf ("Final values of the variables used in the benchmark:\n");
- printf ("\n");
- printf ("Int_Glob: %d\n", Int_Glob);
- printf (" should be: %d\n", 5);
- printf ("Bool_Glob: %d\n", Bool_Glob);
- printf (" should be: %d\n", 1);
- printf ("Ch_1_Glob: %c\n", Ch_1_Glob);
- printf (" should be: %c\n", 'A');
- printf ("Ch_2_Glob: %c\n", Ch_2_Glob);
- printf (" should be: %c\n", 'B');
- printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]);
- printf (" should be: %d\n", 7);
- printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]);
- printf (" should be: Number_Of_Runs + 10\n");
- printf ("Ptr_Glob->\n");
- printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp);
- printf (" should be: (implementation-dependent)\n");
- printf (" Discr: %d\n", Ptr_Glob->Discr);
- printf (" should be: %d\n", 0);
- printf (" Enum_Comp: %d\n", Ptr_Glob->variant.var_1.Enum_Comp);
- printf (" should be: %d\n", 2);
- printf (" Int_Comp: %d\n", Ptr_Glob->variant.var_1.Int_Comp);
- printf (" should be: %d\n", 17);
- printf (" Str_Comp: %s\n", Ptr_Glob->variant.var_1.Str_Comp);
- printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n");
- printf ("Next_Ptr_Glob->\n");
- printf (" Ptr_Comp: %d\n", (int) Next_Ptr_Glob->Ptr_Comp);
- printf (" should be: (implementation-dependent), same as above\n");
- printf (" Discr: %d\n", Next_Ptr_Glob->Discr);
- printf (" should be: %d\n", 0);
- printf (" Enum_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp);
- printf (" should be: %d\n", 1);
- printf (" Int_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp);
- printf (" should be: %d\n", 18);
- printf (" Str_Comp: %s\n",
- Next_Ptr_Glob->variant.var_1.Str_Comp);
- printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n");
- printf ("Int_1_Loc: %d\n", Int_1_Loc);
- printf (" should be: %d\n", 5);
- printf ("Int_2_Loc: %d\n", Int_2_Loc);
- printf (" should be: %d\n", 13);
- printf ("Int_3_Loc: %d\n", Int_3_Loc);
- printf (" should be: %d\n", 7);
- printf ("Enum_Loc: %d\n", Enum_Loc);
- printf (" should be: %d\n", 1);
- printf ("Str_1_Loc: %s\n", Str_1_Loc);
- printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n");
- printf ("Str_2_Loc: %s\n", Str_2_Loc);
- printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n");
- printf ("\n");
-
- User_Time = (End_Time - Begin_Time) / RT_TICK_PER_SECOND;
-
- Microseconds = (float) User_Time * Mic_secs_Per_Second
- / (float) Number_Of_Runs;
- Dhrystones_Per_Second = (float) Number_Of_Runs / (float) User_Time;
-
- printf ("Microseconds for one run through Dhrystone: ");
- printf ("%6d \n", (int)Microseconds);
- printf ("Dhrystones per Second: ");
- printf ("%6d \n", (int)Dhrystones_Per_Second);
- printf ("Dhrystones MIPS: ");
- printf ("%6d \n", (int)(Dhrystones_Per_Second / 1757.0));
- printf ("\n");
-
-}
-
-Proc_1 (Ptr_Val_Par)
-/******************/
-
-REG Rec_Pointer Ptr_Val_Par;
- /* executed once */
-{
- REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp;
- /* == Ptr_Glob_Next */
- /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */
- /* corresponds to "rename" in Ada, "with" in Pascal */
-
- structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob);
- Ptr_Val_Par->variant.var_1.Int_Comp = 5;
- Next_Record->variant.var_1.Int_Comp
- = Ptr_Val_Par->variant.var_1.Int_Comp;
- Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp;
- Proc_3 (&Next_Record->Ptr_Comp);
- /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp
- == Ptr_Glob->Ptr_Comp */
- if (Next_Record->Discr == Ident_1)
- /* then, executed */
- {
- Next_Record->variant.var_1.Int_Comp = 6;
- Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp,
- &Next_Record->variant.var_1.Enum_Comp);
- Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp;
- Proc_7 (Next_Record->variant.var_1.Int_Comp, 10,
- &Next_Record->variant.var_1.Int_Comp);
- }
- else /* not executed */
- structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp);
-} /* Proc_1 */
-
-
-Proc_2 (Int_Par_Ref)
-/******************/
- /* executed once */
- /* *Int_Par_Ref == 1, becomes 4 */
-
-One_Fifty *Int_Par_Ref;
-{
- One_Fifty Int_Loc;
- Enumeration Enum_Loc;
-
- Int_Loc = *Int_Par_Ref + 10;
- do /* executed once */
- if (Ch_1_Glob == 'A')
- /* then, executed */
- {
- Int_Loc -= 1;
- *Int_Par_Ref = Int_Loc - Int_Glob;
- Enum_Loc = Ident_1;
- } /* if */
- while (Enum_Loc != Ident_1); /* true */
-} /* Proc_2 */
-
-
-Proc_3 (Ptr_Ref_Par)
-/******************/
- /* executed once */
- /* Ptr_Ref_Par becomes Ptr_Glob */
-
-Rec_Pointer *Ptr_Ref_Par;
-
-{
- if (Ptr_Glob != Null)
- /* then, executed */
- *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp;
- Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp);
-} /* Proc_3 */
-
-
-Proc_4 () /* without parameters */
-/*******/
- /* executed once */
-{
- Boolean Bool_Loc;
-
- Bool_Loc = Ch_1_Glob == 'A';
- Bool_Glob = Bool_Loc | Bool_Glob;
- Ch_2_Glob = 'B';
-} /* Proc_4 */
-
-
-Proc_5 () /* without parameters */
-/*******/
- /* executed once */
-{
- Ch_1_Glob = 'A';
- Bool_Glob = false;
-} /* Proc_5 */
-
-
- /* Procedure for the assignment of structures, */
- /* if the C compiler doesn't support this feature */
-#ifdef NOSTRUCTASSIGN
-memcpy (d, s, l)
-register char *d;
-register char *s;
-register int l;
-{
- while (l--) *d++ = *s++;
-}
-#endif
-
-#include <finsh.h>
-FINSH_FUNCTION_EXPORT(dhry_test, dhry test);
+/*
+ ****************************************************************************
+ *
+ * "DHRYSTONE" Benchmark Program
+ * -----------------------------
+ *
+ * Version: C, Version 2.1
+ *
+ * File: dhry_1.c (part 2 of 3)
+ *
+ * Date: May 25, 1988
+ *
+ * Author: Reinhold P. Weicker
+ *
+ ****************************************************************************
+ */
+
+#define NUMBER_OF_RUNS 1000000
+
+#include "dhry.h"
+#define printf rt_kprintf
+
+/* Global Variables: */
+
+Rec_Pointer Ptr_Glob,
+ Next_Ptr_Glob;
+int Int_Glob;
+Boolean Bool_Glob;
+char Ch_1_Glob,
+ Ch_2_Glob;
+int Arr_1_Glob [50];
+int Arr_2_Glob [50] [50];
+
+Enumeration Func_1 ();
+
+/* forward declaration necessary since Enumeration may not simply be int */
+
+#ifndef REG
+ Boolean Reg = false;
+#define REG
+ /* REG becomes defined as empty */
+ /* i.e. no register variables */
+#else
+ Boolean Reg = true;
+#endif
+
+/* variables for time measurement: */
+
+float Begin_Time,
+ End_Time,
+ User_Time;
+float Microseconds,
+ Dhrystones_Per_Second;
+
+/* end of variables for time measurement */
+
+void dhry_test(void)
+/*****/
+
+ /* main program, corresponds to procedures */
+ /* Main and Proc_0 in the Ada version */
+{
+ One_Fifty Int_1_Loc;
+ REG One_Fifty Int_2_Loc;
+ One_Fifty Int_3_Loc;
+ REG char Ch_Index;
+ Enumeration Enum_Loc;
+ Str_30 Str_1_Loc;
+ Str_30 Str_2_Loc;
+ REG int Run_Index;
+ REG int Number_Of_Runs;
+
+ /* Initializations */
+
+ Next_Ptr_Glob = (Rec_Pointer) rt_malloc (sizeof (Rec_Type));
+ Ptr_Glob = (Rec_Pointer) rt_malloc (sizeof (Rec_Type));
+
+ Ptr_Glob->Ptr_Comp = Next_Ptr_Glob;
+ Ptr_Glob->Discr = Ident_1;
+ Ptr_Glob->variant.var_1.Enum_Comp = Ident_3;
+ Ptr_Glob->variant.var_1.Int_Comp = 40;
+ rt_strncpy (Ptr_Glob->variant.var_1.Str_Comp,
+ "DHRYSTONE PROGRAM, SOME STRING", sizeof(Ptr_Glob->variant.var_1.Str_Comp));
+ rt_strncpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING", sizeof(Str_1_Loc));
+
+ Arr_2_Glob [8][7] = 10;
+ /* Was missing in published program. Without this statement, */
+ /* Arr_2_Glob [8][7] would have an undefined value. */
+ /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */
+ /* overflow may occur for this array element. */
+
+ printf ("\n");
+ printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n");
+ printf ("\n");
+ if (Reg)
+ {
+ printf ("Program compiled with 'register' attribute\n");
+ printf ("\n");
+ }
+ else
+ {
+ printf ("Program compiled without 'register' attribute\n");
+ printf ("\n");
+ }
+ printf ("Please give the number of runs through the benchmark: ");
+
+ Number_Of_Runs = NUMBER_OF_RUNS;
+ printf ("%d\n", Number_Of_Runs);
+
+ printf ("\n");
+
+ printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs);
+
+ /***************/
+ /* Start timer */
+ /***************/
+
+// Add your timer initializing code here
+
+ Begin_Time = rt_tick_get(); /* get start tick */
+
+ for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
+ {
+
+ Proc_5();
+ Proc_4();
+ /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */
+ Int_1_Loc = 2;
+ Int_2_Loc = 3;
+ rt_strncpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING", sizeof(Str_2_Loc));
+ Enum_Loc = Ident_2;
+ Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc);
+ /* Bool_Glob == 1 */
+ while (Int_1_Loc < Int_2_Loc) /* loop body executed once */
+ {
+ Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc;
+ /* Int_3_Loc == 7 */
+ Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc);
+ /* Int_3_Loc == 7 */
+ Int_1_Loc += 1;
+ } /* while */
+ /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
+ Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
+ /* Int_Glob == 5 */
+ Proc_1 (Ptr_Glob);
+ for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
+ /* loop body executed twice */
+ {
+ if (Enum_Loc == Func_1 (Ch_Index, 'C'))
+ /* then, not executed */
+ {
+ Proc_6 (Ident_1, &Enum_Loc);
+ rt_strncpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING", sizeof(Str_2_Loc));
+ Int_2_Loc = Run_Index;
+ Int_Glob = Run_Index;
+ }
+ }
+ /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
+ Int_2_Loc = Int_2_Loc * Int_1_Loc;
+ Int_1_Loc = Int_2_Loc / Int_3_Loc;
+ Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
+ /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */
+ Proc_2 (&Int_1_Loc);
+ /* Int_1_Loc == 5 */
+
+ } /* loop "for Run_Index" */
+
+ /**************/
+ /* Stop timer */
+ /**************/
+
+ End_Time = rt_tick_get(); // Get end tick
+
+ printf ("Execution ends\n");
+ printf ("\n");
+ printf ("Final values of the variables used in the benchmark:\n");
+ printf ("\n");
+ printf ("Int_Glob: %d\n", Int_Glob);
+ printf (" should be: %d\n", 5);
+ printf ("Bool_Glob: %d\n", Bool_Glob);
+ printf (" should be: %d\n", 1);
+ printf ("Ch_1_Glob: %c\n", Ch_1_Glob);
+ printf (" should be: %c\n", 'A');
+ printf ("Ch_2_Glob: %c\n", Ch_2_Glob);
+ printf (" should be: %c\n", 'B');
+ printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]);
+ printf (" should be: %d\n", 7);
+ printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]);
+ printf (" should be: Number_Of_Runs + 10\n");
+ printf ("Ptr_Glob->\n");
+ printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp);
+ printf (" should be: (implementation-dependent)\n");
+ printf (" Discr: %d\n", Ptr_Glob->Discr);
+ printf (" should be: %d\n", 0);
+ printf (" Enum_Comp: %d\n", Ptr_Glob->variant.var_1.Enum_Comp);
+ printf (" should be: %d\n", 2);
+ printf (" Int_Comp: %d\n", Ptr_Glob->variant.var_1.Int_Comp);
+ printf (" should be: %d\n", 17);
+ printf (" Str_Comp: %s\n", Ptr_Glob->variant.var_1.Str_Comp);
+ printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n");
+ printf ("Next_Ptr_Glob->\n");
+ printf (" Ptr_Comp: %d\n", (int) Next_Ptr_Glob->Ptr_Comp);
+ printf (" should be: (implementation-dependent), same as above\n");
+ printf (" Discr: %d\n", Next_Ptr_Glob->Discr);
+ printf (" should be: %d\n", 0);
+ printf (" Enum_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp);
+ printf (" should be: %d\n", 1);
+ printf (" Int_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp);
+ printf (" should be: %d\n", 18);
+ printf (" Str_Comp: %s\n",
+ Next_Ptr_Glob->variant.var_1.Str_Comp);
+ printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n");
+ printf ("Int_1_Loc: %d\n", Int_1_Loc);
+ printf (" should be: %d\n", 5);
+ printf ("Int_2_Loc: %d\n", Int_2_Loc);
+ printf (" should be: %d\n", 13);
+ printf ("Int_3_Loc: %d\n", Int_3_Loc);
+ printf (" should be: %d\n", 7);
+ printf ("Enum_Loc: %d\n", Enum_Loc);
+ printf (" should be: %d\n", 1);
+ printf ("Str_1_Loc: %s\n", Str_1_Loc);
+ printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n");
+ printf ("Str_2_Loc: %s\n", Str_2_Loc);
+ printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n");
+ printf ("\n");
+
+ User_Time = (End_Time - Begin_Time) / RT_TICK_PER_SECOND;
+
+ Microseconds = (float) User_Time * Mic_secs_Per_Second
+ / (float) Number_Of_Runs;
+ Dhrystones_Per_Second = (float) Number_Of_Runs / (float) User_Time;
+
+ printf ("Microseconds for one run through Dhrystone: ");
+ printf ("%6d \n", (int)Microseconds);
+ printf ("Dhrystones per Second: ");
+ printf ("%6d \n", (int)Dhrystones_Per_Second);
+ printf ("Dhrystones MIPS: ");
+ printf ("%6d \n", (int)(Dhrystones_Per_Second / 1757.0));
+ printf ("\n");
+
+}
+
+Proc_1 (Ptr_Val_Par)
+/******************/
+
+REG Rec_Pointer Ptr_Val_Par;
+ /* executed once */
+{
+ REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp;
+ /* == Ptr_Glob_Next */
+ /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */
+ /* corresponds to "rename" in Ada, "with" in Pascal */
+
+ structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob);
+ Ptr_Val_Par->variant.var_1.Int_Comp = 5;
+ Next_Record->variant.var_1.Int_Comp
+ = Ptr_Val_Par->variant.var_1.Int_Comp;
+ Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp;
+ Proc_3 (&Next_Record->Ptr_Comp);
+ /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp
+ == Ptr_Glob->Ptr_Comp */
+ if (Next_Record->Discr == Ident_1)
+ /* then, executed */
+ {
+ Next_Record->variant.var_1.Int_Comp = 6;
+ Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp,
+ &Next_Record->variant.var_1.Enum_Comp);
+ Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp;
+ Proc_7 (Next_Record->variant.var_1.Int_Comp, 10,
+ &Next_Record->variant.var_1.Int_Comp);
+ }
+ else /* not executed */
+ structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp);
+} /* Proc_1 */
+
+
+Proc_2 (Int_Par_Ref)
+/******************/
+ /* executed once */
+ /* *Int_Par_Ref == 1, becomes 4 */
+
+One_Fifty *Int_Par_Ref;
+{
+ One_Fifty Int_Loc;
+ Enumeration Enum_Loc;
+
+ Int_Loc = *Int_Par_Ref + 10;
+ do /* executed once */
+ if (Ch_1_Glob == 'A')
+ /* then, executed */
+ {
+ Int_Loc -= 1;
+ *Int_Par_Ref = Int_Loc - Int_Glob;
+ Enum_Loc = Ident_1;
+ } /* if */
+ while (Enum_Loc != Ident_1); /* true */
+} /* Proc_2 */
+
+
+Proc_3 (Ptr_Ref_Par)
+/******************/
+ /* executed once */
+ /* Ptr_Ref_Par becomes Ptr_Glob */
+
+Rec_Pointer *Ptr_Ref_Par;
+
+{
+ if (Ptr_Glob != Null)
+ /* then, executed */
+ *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp;
+ Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp);
+} /* Proc_3 */
+
+
+Proc_4 () /* without parameters */
+/*******/
+ /* executed once */
+{
+ Boolean Bool_Loc;
+
+ Bool_Loc = Ch_1_Glob == 'A';
+ Bool_Glob = Bool_Loc | Bool_Glob;
+ Ch_2_Glob = 'B';
+} /* Proc_4 */
+
+
+Proc_5 () /* without parameters */
+/*******/
+ /* executed once */
+{
+ Ch_1_Glob = 'A';
+ Bool_Glob = false;
+} /* Proc_5 */
+
+
+ /* Procedure for the assignment of structures, */
+ /* if the C compiler doesn't support this feature */
+#ifdef NOSTRUCTASSIGN
+memcpy (d, s, l)
+register char *d;
+register char *s;
+register int l;
+{
+ while (l--) *d++ = *s++;
+}
+#endif
+
+#include <finsh.h>
+FINSH_FUNCTION_EXPORT(dhry_test, dhry test);
diff --git a/examples/test/fs_test.c b/examples/test/fs_test.c
index bc18a196f1..2404b82e59 100644
--- a/examples/test/fs_test.c
+++ b/examples/test/fs_test.c
@@ -1,297 +1,297 @@
-/*
- * File : fs_test.c
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2011, RT-Thread Development Team
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://openlab.rt-thread.com/license/LICENSE.
- *
- * Change Logs:
- * Date Author Notes
- * 2011-01-02 aozima the first version.
- * 2011-03-17 aozima fix some bug.
- * 2011-03-18 aozima to dynamic thread.
- */
-
-#include <rtthread.h>
-#include <dfs_posix.h>
-
-static rt_uint32_t stop_flag = 0;
-static rt_thread_t fsrw1_thread = RT_NULL;
-static rt_thread_t fsrw2_thread = RT_NULL;
-
-#define fsrw1_fn "/test1.dat"
-#define fsrw1_data_len 120 /* Less than 256 */
-static void fsrw1_thread_entry(void* parameter)
-{
- int fd;
- int index,length;
- rt_uint32_t round;
- rt_uint32_t tick_start,tick_end,read_speed,write_speed;
-
- static rt_uint8_t write_data1[fsrw1_data_len];
- static rt_uint8_t read_data1[fsrw1_data_len];
-
- round = 1;
-
- while(1)
- {
- if( stop_flag )
- {
- rt_kprintf("thread fsrw2 error,thread fsrw1 quit!\r\n");
- fsrw1_thread = RT_NULL;
- stop_flag = 0;
- return;
- }
-
- /* creat file */
- fd = open(fsrw1_fn, O_WRONLY | O_CREAT | O_TRUNC, 0);
- if (fd < 0)
- {
- rt_kprintf("fsrw1 open file for write failed\n");
- stop_flag = 1;
- fsrw1_thread = RT_NULL;
- return;
- }
-
- /* plan write data */
- for (index = 0; index < fsrw1_data_len; index ++)
- {
- write_data1[index] = index;
- }
-
- /* write 8000 times */
- tick_start = rt_tick_get();
- for(index=0; index<8000; index++)
- {
- length = write(fd, write_data1, fsrw1_data_len);
- if (length != fsrw1_data_len)
- {
- rt_kprintf("fsrw1 write data failed\n");
- close(fd);
- fsrw1_thread = RT_NULL;
- stop_flag = 1;
- return;
- }
- }
- tick_end = rt_tick_get();
- write_speed = fsrw1_data_len*8000UL*RT_TICK_PER_SECOND/(tick_end-tick_start);
-
- /* close file */
- close(fd);
-
- /* open file read only */
- fd = open(fsrw1_fn, O_RDONLY, 0);
- if (fd < 0)
- {
- rt_kprintf("fsrw1 open file for read failed\n");
- stop_flag = 1;
- fsrw1_thread = RT_NULL;
- return;
- }
-
- /* verify data */
- tick_start = rt_tick_get();
- for(index=0; index<8000; index++)
- {
- rt_uint32_t i;
-
- length = read(fd, read_data1, fsrw1_data_len);
- if (length != fsrw1_data_len)
- {
- rt_kprintf("fsrw1 read file failed\r\n");
- close(fd);
- stop_flag = 1;
- fsrw1_thread = RT_NULL;
- return;
- }
- for(i=0; i<fsrw1_data_len; i++)
- {
- if( read_data1[i] != write_data1[i] )
- {
- rt_kprintf("fsrw1 data error!\r\n");
- close(fd);
- stop_flag = 1;
- fsrw1_thread = RT_NULL;
- return;
- }
- }
- }
- tick_end = rt_tick_get();
- read_speed = fsrw1_data_len*8000UL*RT_TICK_PER_SECOND/(tick_end-tick_start);
-
- rt_kprintf("thread fsrw1 round %d ",round++);
- rt_kprintf("rd:%dbyte/s,wr:%dbyte/s\r\n",read_speed,write_speed);
-
- /* close file */
- close(fd);
- }
-}
-
-#define fsrw2_fn "/test2.dat"
-#define fsrw2_data_len 180 /* Less than 256 */
-static void fsrw2_thread_entry(void* parameter)
-{
- int fd;
- int index,length;
- rt_uint32_t round;
- rt_uint32_t tick_start,tick_end,read_speed,write_speed;
-
- static rt_uint8_t write_data2[fsrw2_data_len];
- static rt_uint8_t read_data2[fsrw2_data_len];
-
- round = 1;
-
- while(1)
- {
- if( stop_flag )
- {
- rt_kprintf("thread fsrw1 error,thread fsrw2 quit!\r\n");
- fsrw2_thread = RT_NULL;
- stop_flag = 0;
- return;
- }
-
- /* creat file */
- fd = open(fsrw2_fn, O_WRONLY | O_CREAT | O_TRUNC, 0);
- if (fd < 0)
- {
- rt_kprintf("fsrw2 open file for write failed\n");
- stop_flag = 1;
- fsrw2_thread = RT_NULL;
- return;
- }
-
- /* plan write data */
- for (index = 0; index < fsrw2_data_len; index ++)
- {
- write_data2[index] = index;
- }
-
- /* write 5000 times */
- tick_start = rt_tick_get();
- for(index=0; index<5000; index++)
- {
- length = write(fd, write_data2, fsrw2_data_len);
- if (length != fsrw2_data_len)
- {
- rt_kprintf("fsrw2 write data failed\n");
- close(fd);
- stop_flag = 1;
- fsrw2_thread = RT_NULL;
- return;
- }
- }
- tick_end = rt_tick_get();
- write_speed = fsrw2_data_len*5000UL*RT_TICK_PER_SECOND/(tick_end-tick_start);
-
- /* close file */
- close(fd);
-
- /* open file read only */
- fd = open(fsrw2_fn, O_RDONLY, 0);
- if (fd < 0)
- {
- rt_kprintf("fsrw2 open file for read failed\n");
- stop_flag = 1;
- fsrw2_thread = RT_NULL;
- return;
- }
-
- /* verify data */
- tick_start = rt_tick_get();
- for(index=0; index<5000; index++)
- {
- rt_uint32_t i;
-
- length = read(fd, read_data2, fsrw2_data_len);
- if (length != fsrw2_data_len)
- {
- rt_kprintf("fsrw2 read file failed\r\n");
- close(fd);
- stop_flag = 1;
- fsrw2_thread = RT_NULL;
- return;
- }
- for(i=0; i<fsrw2_data_len; i++)
- {
- if( read_data2[i] != write_data2[i] )
- {
- rt_kprintf("fsrw2 data error!\r\n");
- close(fd);
- stop_flag = 1;
- fsrw2_thread = RT_NULL;
- return;
- }
- }
- }
- tick_end = rt_tick_get();
- read_speed = fsrw2_data_len*5000UL*RT_TICK_PER_SECOND/(tick_end-tick_start);
-
- rt_kprintf("thread fsrw2 round %d ",round++);
- rt_kprintf("rd:%dbyte/s,wr:%dbyte/s\r\n",read_speed,write_speed);
-
- /* close file */
- close(fd);
- }
-}
-
-
-/** \brief startup filesystem read/write test(multi thread).
- *
- * \param arg rt_uint32_t [0]startup thread1,[1]startup thread2.
- * \return void
- *
- */
-void fs_test(rt_uint32_t arg)
-{
- rt_kprintf("arg is : 0x%02X ",arg);
-
- if(arg & 0x01)
- {
- if( fsrw1_thread != RT_NULL )
- {
- rt_kprintf("fsrw1_thread already exists!\r\n");
- }
- else
- {
- fsrw1_thread = rt_thread_create( "fsrw1",
- fsrw1_thread_entry,
- RT_NULL,
- 2048,
- RT_THREAD_PRIORITY_MAX-2,
- 1);
- if ( fsrw1_thread != RT_NULL)
- {
- rt_thread_startup(fsrw1_thread);
- }
- }
- }
-
- if( arg & 0x02)
- {
- if( fsrw2_thread != RT_NULL )
- {
- rt_kprintf("fsrw2_thread already exists!\r\n");
- }
- else
- {
- fsrw2_thread = rt_thread_create( "fsrw2",
- fsrw2_thread_entry,
- RT_NULL,
- 2048,
- RT_THREAD_PRIORITY_MAX-2,
- 1);
- if ( fsrw2_thread != RT_NULL)
- {
- rt_thread_startup(fsrw2_thread);
- }
- }
- }
-}
-
-#ifdef RT_USING_FINSH
-#include <finsh.h>
-FINSH_FUNCTION_EXPORT(fs_test, file system R/W test. e.g: fs_test(3));
-#endif
+/*
+ * File : fs_test.c
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2011, RT-Thread Development Team
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://openlab.rt-thread.com/license/LICENSE.
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2011-01-02 aozima the first version.
+ * 2011-03-17 aozima fix some bug.
+ * 2011-03-18 aozima to dynamic thread.
+ */
+
+#include <rtthread.h>
+#include <dfs_posix.h>
+
+static rt_uint32_t stop_flag = 0;
+static rt_thread_t fsrw1_thread = RT_NULL;
+static rt_thread_t fsrw2_thread = RT_NULL;
+
+#define fsrw1_fn "/test1.dat"
+#define fsrw1_data_len 120 /* Less than 256 */
+static void fsrw1_thread_entry(void* parameter)
+{
+ int fd;
+ int index,length;
+ rt_uint32_t round;
+ rt_uint32_t tick_start,tick_end,read_speed,write_speed;
+
+ static rt_uint8_t write_data1[fsrw1_data_len];
+ static rt_uint8_t read_data1[fsrw1_data_len];
+
+ round = 1;
+
+ while(1)
+ {
+ if( stop_flag )
+ {
+ rt_kprintf("thread fsrw2 error,thread fsrw1 quit!\r\n");
+ fsrw1_thread = RT_NULL;
+ stop_flag = 0;
+ return;
+ }
+
+ /* creat file */
+ fd = open(fsrw1_fn, O_WRONLY | O_CREAT | O_TRUNC, 0);
+ if (fd < 0)
+ {
+ rt_kprintf("fsrw1 open file for write failed\n");
+ stop_flag = 1;
+ fsrw1_thread = RT_NULL;
+ return;
+ }
+
+ /* plan write data */
+ for (index = 0; index < fsrw1_data_len; index ++)
+ {
+ write_data1[index] = index;
+ }
+
+ /* write 8000 times */
+ tick_start = rt_tick_get();
+ for(index=0; index<8000; index++)
+ {
+ length = write(fd, write_data1, fsrw1_data_len);
+ if (length != fsrw1_data_len)
+ {
+ rt_kprintf("fsrw1 write data failed\n");
+ close(fd);
+ fsrw1_thread = RT_NULL;
+ stop_flag = 1;
+ return;
+ }
+ }
+ tick_end = rt_tick_get();
+ write_speed = fsrw1_data_len*8000UL*RT_TICK_PER_SECOND/(tick_end-tick_start);
+
+ /* close file */
+ close(fd);
+
+ /* open file read only */
+ fd = open(fsrw1_fn, O_RDONLY, 0);
+ if (fd < 0)
+ {
+ rt_kprintf("fsrw1 open file for read failed\n");
+ stop_flag = 1;
+ fsrw1_thread = RT_NULL;
+ return;
+ }
+
+ /* verify data */
+ tick_start = rt_tick_get();
+ for(index=0; index<8000; index++)
+ {
+ rt_uint32_t i;
+
+ length = read(fd, read_data1, fsrw1_data_len);
+ if (length != fsrw1_data_len)
+ {
+ rt_kprintf("fsrw1 read file failed\r\n");
+ close(fd);
+ stop_flag = 1;
+ fsrw1_thread = RT_NULL;
+ return;
+ }
+ for(i=0; i<fsrw1_data_len; i++)
+ {
+ if( read_data1[i] != write_data1[i] )
+ {
+ rt_kprintf("fsrw1 data error!\r\n");
+ close(fd);
+ stop_flag = 1;
+ fsrw1_thread = RT_NULL;
+ return;
+ }
+ }
+ }
+ tick_end = rt_tick_get();
+ read_speed = fsrw1_data_len*8000UL*RT_TICK_PER_SECOND/(tick_end-tick_start);
+
+ rt_kprintf("thread fsrw1 round %d ",round++);
+ rt_kprintf("rd:%dbyte/s,wr:%dbyte/s\r\n",read_speed,write_speed);
+
+ /* close file */
+ close(fd);
+ }
+}
+
+#define fsrw2_fn "/test2.dat"
+#define fsrw2_data_len 180 /* Less than 256 */
+static void fsrw2_thread_entry(void* parameter)
+{
+ int fd;
+ int index,length;
+ rt_uint32_t round;
+ rt_uint32_t tick_start,tick_end,read_speed,write_speed;
+
+ static rt_uint8_t write_data2[fsrw2_data_len];
+ static rt_uint8_t read_data2[fsrw2_data_len];
+
+ round = 1;
+
+ while(1)
+ {
+ if( stop_flag )
+ {
+ rt_kprintf("thread fsrw1 error,thread fsrw2 quit!\r\n");
+ fsrw2_thread = RT_NULL;
+ stop_flag = 0;
+ return;
+ }
+
+ /* creat file */
+ fd = open(fsrw2_fn, O_WRONLY | O_CREAT | O_TRUNC, 0);
+ if (fd < 0)
+ {
+ rt_kprintf("fsrw2 open file for write failed\n");
+ stop_flag = 1;
+ fsrw2_thread = RT_NULL;
+ return;
+ }
+
+ /* plan write data */
+ for (index = 0; index < fsrw2_data_len; index ++)
+ {
+ write_data2[index] = index;
+ }
+
+ /* write 5000 times */
+ tick_start = rt_tick_get();
+ for(index=0; index<5000; index++)
+ {
+ length = write(fd, write_data2, fsrw2_data_len);
+ if (length != fsrw2_data_len)
+ {
+ rt_kprintf("fsrw2 write data failed\n");
+ close(fd);
+ stop_flag = 1;
+ fsrw2_thread = RT_NULL;
+ return;
+ }
+ }
+ tick_end = rt_tick_get();
+ write_speed = fsrw2_data_len*5000UL*RT_TICK_PER_SECOND/(tick_end-tick_start);
+
+ /* close file */
+ close(fd);
+
+ /* open file read only */
+ fd = open(fsrw2_fn, O_RDONLY, 0);
+ if (fd < 0)
+ {
+ rt_kprintf("fsrw2 open file for read failed\n");
+ stop_flag = 1;
+ fsrw2_thread = RT_NULL;
+ return;
+ }
+
+ /* verify data */
+ tick_start = rt_tick_get();
+ for(index=0; index<5000; index++)
+ {
+ rt_uint32_t i;
+
+ length = read(fd, read_data2, fsrw2_data_len);
+ if (length != fsrw2_data_len)
+ {
+ rt_kprintf("fsrw2 read file failed\r\n");
+ close(fd);
+ stop_flag = 1;
+ fsrw2_thread = RT_NULL;
+ return;
+ }
+ for(i=0; i<fsrw2_data_len; i++)
+ {
+ if( read_data2[i] != write_data2[i] )
+ {
+ rt_kprintf("fsrw2 data error!\r\n");
+ close(fd);
+ stop_flag = 1;
+ fsrw2_thread = RT_NULL;
+ return;
+ }
+ }
+ }
+ tick_end = rt_tick_get();
+ read_speed = fsrw2_data_len*5000UL*RT_TICK_PER_SECOND/(tick_end-tick_start);
+
+ rt_kprintf("thread fsrw2 round %d ",round++);
+ rt_kprintf("rd:%dbyte/s,wr:%dbyte/s\r\n",read_speed,write_speed);
+
+ /* close file */
+ close(fd);
+ }
+}
+
+
+/** \brief startup filesystem read/write test(multi thread).
+ *
+ * \param arg rt_uint32_t [0]startup thread1,[1]startup thread2.
+ * \return void
+ *
+ */
+void fs_test(rt_uint32_t arg)
+{
+ rt_kprintf("arg is : 0x%02X ",arg);
+
+ if(arg & 0x01)
+ {
+ if( fsrw1_thread != RT_NULL )
+ {
+ rt_kprintf("fsrw1_thread already exists!\r\n");
+ }
+ else
+ {
+ fsrw1_thread = rt_thread_create( "fsrw1",
+ fsrw1_thread_entry,
+ RT_NULL,
+ 2048,
+ RT_THREAD_PRIORITY_MAX-2,
+ 1);
+ if ( fsrw1_thread != RT_NULL)
+ {
+ rt_thread_startup(fsrw1_thread);
+ }
+ }
+ }
+
+ if( arg & 0x02)
+ {
+ if( fsrw2_thread != RT_NULL )
+ {
+ rt_kprintf("fsrw2_thread already exists!\r\n");
+ }
+ else
+ {
+ fsrw2_thread = rt_thread_create( "fsrw2",
+ fsrw2_thread_entry,
+ RT_NULL,
+ 2048,
+ RT_THREAD_PRIORITY_MAX-2,
+ 1);
+ if ( fsrw2_thread != RT_NULL)
+ {
+ rt_thread_startup(fsrw2_thread);
+ }
+ }
+ }
+}
+
+#ifdef RT_USING_FINSH
+#include <finsh.h>
+FINSH_FUNCTION_EXPORT(fs_test, file system R/W test. e.g: fs_test(3));
+#endif
diff --git a/examples/test/mem_test.c b/examples/test/mem_test.c
index 595578e126..2e94bca2d0 100644
--- a/examples/test/mem_test.c
+++ b/examples/test/mem_test.c
@@ -1,105 +1,105 @@
-#include <stdint.h>
-
-#include <rthw.h>
-#include <rtthread.h>
-
-#define printf rt_kprintf
-
-void mem_test(uint32_t address, uint32_t size )
-{
- uint32_t i;
-
- printf("memtest,address: 0x%08X size: 0x%08X\r\n", address, size);
-
- /**< 8bit test */
- {
- uint8_t * p_uint8_t = (uint8_t *)address;
- for(i=0; i<size/sizeof(uint8_t); i++)
- {
- *p_uint8_t++ = (uint8_t)i;
- }
-
- p_uint8_t = (uint8_t *)address;
- for(i=0; i<size/sizeof(uint8_t); i++)
- {
- if( *p_uint8_t != (uint8_t)i )
- {
- printf("8bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint8_t);
- while(1);
- }
- p_uint8_t++;
- }
- printf("8bit test pass!!\r\n");
- }
-
- /**< 16bit test */
- {
- uint16_t * p_uint16_t = (uint16_t *)address;
- for(i=0; i<size/sizeof(uint16_t); i++)
- {
- *p_uint16_t++ = (uint16_t)i;
- }
-
- p_uint16_t = (uint16_t *)address;
- for(i=0; i<size/sizeof(uint16_t); i++)
- {
- if( *p_uint16_t != (uint16_t)i )
- {
- printf("16bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint16_t);
- while(1);
- }
- p_uint16_t++;
- }
- printf("16bit test pass!!\r\n");
- }
-
- /**< 32bit test */
- {
- uint32_t * p_uint32_t = (uint32_t *)address;
- for(i=0; i<size/sizeof(uint32_t); i++)
- {
- *p_uint32_t++ = (uint32_t)i;
- }
-
- p_uint32_t = (uint32_t *)address;
- for(i=0; i<size/sizeof(uint32_t); i++)
- {
- if( *p_uint32_t != (uint32_t)i )
- {
- printf("32bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint32_t);
- while(1);
- }
- p_uint32_t++;
- }
- printf("32bit test pass!!\r\n");
- }
-
- /**< 32bit Loopback test */
- {
- uint32_t * p_uint32_t = (uint32_t *)address;
- for(i=0; i<size/sizeof(uint32_t); i++)
- {
- *p_uint32_t = (uint32_t)p_uint32_t;
- *p_uint32_t++;
- }
-
- p_uint32_t = (uint32_t *)address;
- for(i=0; i<size/sizeof(uint32_t); i++)
- {
- if( *p_uint32_t != (uint32_t)p_uint32_t )
- {
- printf("32bit Loopback test fail @ 0x%08X", (uint32_t)p_uint32_t);
- printf(" data:0x%08X \r\n", (uint32_t)*p_uint32_t);
- printf("system halt!!!!!",(uint32_t)p_uint32_t);
- while(1);
- }
- p_uint32_t++;
- }
- printf("32bit Loopback test pass!!\r\n");
- }
-}
-
-#ifdef RT_USING_FINSH
-#include <finsh.h>
-FINSH_FUNCTION_EXPORT(mem_test, mem_test(0xA0000000, 0x00100000) );
-#endif
+#include <stdint.h>
+
+#include <rthw.h>
+#include <rtthread.h>
+
+#define printf rt_kprintf
+
+void mem_test(uint32_t address, uint32_t size )
+{
+ uint32_t i;
+
+ printf("memtest,address: 0x%08X size: 0x%08X\r\n", address, size);
+
+ /**< 8bit test */
+ {
+ uint8_t * p_uint8_t = (uint8_t *)address;
+ for(i=0; i<size/sizeof(uint8_t); i++)
+ {
+ *p_uint8_t++ = (uint8_t)i;
+ }
+
+ p_uint8_t = (uint8_t *)address;
+ for(i=0; i<size/sizeof(uint8_t); i++)
+ {
+ if( *p_uint8_t != (uint8_t)i )
+ {
+ printf("8bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint8_t);
+ while(1);
+ }
+ p_uint8_t++;
+ }
+ printf("8bit test pass!!\r\n");
+ }
+
+ /**< 16bit test */
+ {
+ uint16_t * p_uint16_t = (uint16_t *)address;
+ for(i=0; i<size/sizeof(uint16_t); i++)
+ {
+ *p_uint16_t++ = (uint16_t)i;
+ }
+
+ p_uint16_t = (uint16_t *)address;
+ for(i=0; i<size/sizeof(uint16_t); i++)
+ {
+ if( *p_uint16_t != (uint16_t)i )
+ {
+ printf("16bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint16_t);
+ while(1);
+ }
+ p_uint16_t++;
+ }
+ printf("16bit test pass!!\r\n");
+ }
+
+ /**< 32bit test */
+ {
+ uint32_t * p_uint32_t = (uint32_t *)address;
+ for(i=0; i<size/sizeof(uint32_t); i++)
+ {
+ *p_uint32_t++ = (uint32_t)i;
+ }
+
+ p_uint32_t = (uint32_t *)address;
+ for(i=0; i<size/sizeof(uint32_t); i++)
+ {
+ if( *p_uint32_t != (uint32_t)i )
+ {
+ printf("32bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint32_t);
+ while(1);
+ }
+ p_uint32_t++;
+ }
+ printf("32bit test pass!!\r\n");
+ }
+
+ /**< 32bit Loopback test */
+ {
+ uint32_t * p_uint32_t = (uint32_t *)address;
+ for(i=0; i<size/sizeof(uint32_t); i++)
+ {
+ *p_uint32_t = (uint32_t)p_uint32_t;
+ *p_uint32_t++;
+ }
+
+ p_uint32_t = (uint32_t *)address;
+ for(i=0; i<size/sizeof(uint32_t); i++)
+ {
+ if( *p_uint32_t != (uint32_t)p_uint32_t )
+ {
+ printf("32bit Loopback test fail @ 0x%08X", (uint32_t)p_uint32_t);
+ printf(" data:0x%08X \r\n", (uint32_t)*p_uint32_t);
+ printf("system halt!!!!!",(uint32_t)p_uint32_t);
+ while(1);
+ }
+ p_uint32_t++;
+ }
+ printf("32bit Loopback test pass!!\r\n");
+ }
+}
+
+#ifdef RT_USING_FINSH
+#include <finsh.h>
+FINSH_FUNCTION_EXPORT(mem_test, mem_test(0xA0000000, 0x00100000) );
+#endif
diff --git a/examples/test/net_test.c b/examples/test/net_test.c
index 849b03bbcc..e4961622c7 100644
--- a/examples/test/net_test.c
+++ b/examples/test/net_test.c
@@ -1,282 +1,282 @@
-/*
- * Net Test Utilities for RT-Thread
- */
-#include <rtthread.h>
-#include <finsh.h>
-#include <lwip/api.h>
-#include <lwip/sockets.h>
-/*
- * UDP echo server
- */
-#define UDP_ECHO_PORT 7
-rt_thread_t udpecho_tid = RT_NULL;
-void udpecho_entry(void *parameter)
-{
- struct netconn *conn;
- struct netbuf *buf;
- struct ip_addr *addr;
- unsigned short port;
-
- conn = netconn_new(NETCONN_UDP);
- netconn_bind(conn, IP_ADDR_ANY, 7);
-
- while(1)
- {
- /* received data to buffer */
- buf = netconn_recv(conn);
-
- addr = netbuf_fromaddr(buf);
- port = netbuf_fromport(buf);
-
- /* send the data to buffer */
- netconn_connect(conn, addr, port);
-
- /* reset address, and send to client */
- buf->addr = RT_NULL;
- netconn_send(conn, buf);
-
- /* release buffer */
- netbuf_delete(buf);
- }
-}
-/*
- * UDP socket echo server
- */
-#define UDP_SOCKET_ECHO_PORT 700
-#define UDP_SOCKET_BUFFER_SIZE 4096
-rt_thread_t udpecho_socket_tid = RT_NULL;
-void udpecho_socket_entry(void *parameter)
-{
- int sock;
- int bytes_read;
- char *recv_data;
- rt_uint32_t addr_len;
- struct sockaddr_in server_addr, client_addr;
-
- /* allocate the data buffer */
- recv_data = rt_malloc(UDP_SOCKET_BUFFER_SIZE);
- if (recv_data == RT_NULL)
- {
- /* no memory yet */
- rt_kprintf("no memory\n");
- goto _exit;
- }
- /* create a UDP socket */
- if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
- {
- rt_kprintf("create socket error\n");
- goto _exit;
- }
-
- /* initialize server address */
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(UDP_SOCKET_ECHO_PORT);
- server_addr.sin_addr.s_addr = INADDR_ANY;
- rt_memset(&(server_addr.sin_zero),0, sizeof(server_addr.sin_zero));
-
- /* bind socket to server address */
- if (bind(sock,(struct sockaddr *)&server_addr,
- sizeof(struct sockaddr)) == -1)
- {
- /* bind failed */
- rt_kprintf("bind error\n");
- goto _exit;
- }
-
- addr_len = sizeof(struct sockaddr);
- while (1)
- {
- /* try to receive from UDP socket */
- bytes_read = recvfrom(sock, recv_data, UDP_SOCKET_BUFFER_SIZE, 0,
- (struct sockaddr *)&client_addr, &addr_len);
-
- /* send back */
- sendto(sock, recv_data, bytes_read, 0,
- (struct sockaddr *)&client_addr, addr_len);
- }
-
-_exit:
- rt_free(recv_data);
- return;
-}
-
-/*
- * TCP echo server
- */
-#define TCP_ECHO_PORT 7
-rt_thread_t tcpecho_tid = RT_NULL;
-void tcpecho_entry(void *parameter)
-{
- struct netconn *conn, *newconn;
- err_t err;
-
- /* Create a new connection identifier. */
- conn = netconn_new(NETCONN_TCP);
-
- /* Bind connection to well known port number 7. */
- netconn_bind(conn, NULL, TCP_ECHO_PORT);
-
- /* Tell connection to go into listening mode. */
- netconn_listen(conn);
-
- while(1)
- {
- /* Grab new connection. */
- newconn = netconn_accept(conn);
- /* Process the new connection. */
- if(newconn != NULL)
- {
- struct netbuf *buf;
- void *data;
- u16_t len;
-
- while((buf = netconn_recv(newconn)) != NULL)
- {
- do
- {
- netbuf_data(buf, &data, &len);
- err = netconn_write(newconn, data, len, NETCONN_COPY);
- if(err != ERR_OK){}
- }
- while(netbuf_next(buf) >= 0);
- netbuf_delete(buf);
- }
- /* Close connection and discard connection identifier. */
- netconn_delete(newconn);
- }
- }
-}
-
-/*
- * TCP socket echo server
- */
-#define TCP_SOCKET_ECHO_PORT 700
-#define TCP_SOCKET_BUFFER_SIZE 4096
-rt_thread_t tcpecho_socket_tid = RT_NULL;
-void tcpecho_socket_entry(void *parameter)
-{
- char *recv_data;
- rt_uint32_t sin_size;
- int sock = -1, connected, bytes_received;
- struct sockaddr_in server_addr, client_addr;
-
- recv_data = rt_malloc(TCP_SOCKET_BUFFER_SIZE);
- if (recv_data == RT_NULL)
- {
- rt_kprintf("no memory\n");
- goto _exit;
- }
-
- /* create a TCP socket */
- if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
- {
- rt_kprintf("create socket error\n");
- goto _exit;
- }
-
- /* initialize server address */
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(TCP_SOCKET_ECHO_PORT);
- server_addr.sin_addr.s_addr = INADDR_ANY;
- rt_memset(&(server_addr.sin_zero),8, sizeof(server_addr.sin_zero));
-
- /* bind to server address */
- if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
- {
- rt_kprintf("bind address failed\n");
- goto _exit;
- }
-
- /* listen */
- if (listen(sock, 5) == -1)
- {
- rt_kprintf("listen error\n");
- goto _exit;
- }
-
- sin_size = sizeof(struct sockaddr_in);
- while(1)
- {
- /* accept client connected */
- connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size);
- if (connected > 0)
- {
- int timeout;
-
- /* set timeout option */
- timeout = 5000; /* 5second */
- setsockopt(connected, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
-
- /* handle this client */
- while (1)
- {
- /* receive data from this connection */
- bytes_received = recv(connected,recv_data, TCP_SOCKET_BUFFER_SIZE, 0);
- if (bytes_received <= 0)
- {
- rt_kprintf("close client connection, errno: %d, socket error: %d\n",
- rt_get_errno(),
- lwip_get_error());
- /* connection closed. */
- lwip_close(connected);
- break;
- }
-
- /* send data to client */
- send(connected, recv_data, bytes_received, 0);
- }
- }
- }
-
-_exit:
- /* close socket */
- if (sock != -1) lwip_close(sock);
- rt_free(recv_data);
-
- return ;
-}
-
-/*
- * NetIO TCP server
- */
-
-/* network test utilities entry */
-void net_test(void)
-{
- /* start UDP echo server */
- if (udpecho_tid == RT_NULL)
- {
- udpecho_tid = rt_thread_create("uecho",
- udpecho_entry, RT_NULL,
- 512, RT_THREAD_PRIORITY_MAX/2, 5);
- if (udpecho_tid != RT_NULL)
- rt_thread_startup(udpecho_tid);
- }
- if (udpecho_socket_tid == RT_NULL)
- {
- udpecho_socket_tid = rt_thread_create("uecho_s",
- udpecho_socket_entry, RT_NULL,
- 512, RT_THREAD_PRIORITY_MAX/2 + 1, 5);
- if (udpecho_socket_tid != RT_NULL)
- rt_thread_startup(udpecho_socket_tid);
- }
-
- if (tcpecho_tid == RT_NULL)
- {
- tcpecho_tid = rt_thread_create("techo",
- tcpecho_entry, RT_NULL,
- 512, RT_THREAD_PRIORITY_MAX/2 + 2, 5);
- if (tcpecho_tid != RT_NULL)
- rt_thread_startup(tcpecho_tid);
- }
- if (tcpecho_socket_tid == RT_NULL)
- {
- tcpecho_socket_tid = rt_thread_create("techo_s",
- tcpecho_socket_entry, RT_NULL,
- 512, RT_THREAD_PRIORITY_MAX/2 + 3, 5);
- if (tcpecho_socket_tid != RT_NULL)
- rt_thread_startup(tcpecho_socket_tid);
- }
-}
-FINSH_FUNCTION_EXPORT(net_test, network test);
-
+/*
+ * Net Test Utilities for RT-Thread
+ */
+#include <rtthread.h>
+#include <finsh.h>
+#include <lwip/api.h>
+#include <lwip/sockets.h>
+/*
+ * UDP echo server
+ */
+#define UDP_ECHO_PORT 7
+rt_thread_t udpecho_tid = RT_NULL;
+void udpecho_entry(void *parameter)
+{
+ struct netconn *conn;
+ struct netbuf *buf;
+ struct ip_addr *addr;
+ unsigned short port;
+
+ conn = netconn_new(NETCONN_UDP);
+ netconn_bind(conn, IP_ADDR_ANY, 7);
+
+ while(1)
+ {
+ /* received data to buffer */
+ buf = netconn_recv(conn);
+
+ addr = netbuf_fromaddr(buf);
+ port = netbuf_fromport(buf);
+
+ /* send the data to buffer */
+ netconn_connect(conn, addr, port);
+
+ /* reset address, and send to client */
+ buf->addr = RT_NULL;
+ netconn_send(conn, buf);
+
+ /* release buffer */
+ netbuf_delete(buf);
+ }
+}
+/*
+ * UDP socket echo server
+ */
+#define UDP_SOCKET_ECHO_PORT 700
+#define UDP_SOCKET_BUFFER_SIZE 4096
+rt_thread_t udpecho_socket_tid = RT_NULL;
+void udpecho_socket_entry(void *parameter)
+{
+ int sock;
+ int bytes_read;
+ char *recv_data;
+ rt_uint32_t addr_len;
+ struct sockaddr_in server_addr, client_addr;
+
+ /* allocate the data buffer */
+ recv_data = rt_malloc(UDP_SOCKET_BUFFER_SIZE);
+ if (recv_data == RT_NULL)
+ {
+ /* no memory yet */
+ rt_kprintf("no memory\n");
+ goto _exit;
+ }
+ /* create a UDP socket */
+ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
+ {
+ rt_kprintf("create socket error\n");
+ goto _exit;
+ }
+
+ /* initialize server address */
+ server_addr.sin_family = AF_INET;
+ server_addr.sin_port = htons(UDP_SOCKET_ECHO_PORT);
+ server_addr.sin_addr.s_addr = INADDR_ANY;
+ rt_memset(&(server_addr.sin_zero),0, sizeof(server_addr.sin_zero));
+
+ /* bind socket to server address */
+ if (bind(sock,(struct sockaddr *)&server_addr,
+ sizeof(struct sockaddr)) == -1)
+ {
+ /* bind failed */
+ rt_kprintf("bind error\n");
+ goto _exit;
+ }
+
+ addr_len = sizeof(struct sockaddr);
+ while (1)
+ {
+ /* try to receive from UDP socket */
+ bytes_read = recvfrom(sock, recv_data, UDP_SOCKET_BUFFER_SIZE, 0,
+ (struct sockaddr *)&client_addr, &addr_len);
+
+ /* send back */
+ sendto(sock, recv_data, bytes_read, 0,
+ (struct sockaddr *)&client_addr, addr_len);
+ }
+
+_exit:
+ rt_free(recv_data);
+ return;
+}
+
+/*
+ * TCP echo server
+ */
+#define TCP_ECHO_PORT 7
+rt_thread_t tcpecho_tid = RT_NULL;
+void tcpecho_entry(void *parameter)
+{
+ struct netconn *conn, *newconn;
+ err_t err;
+
+ /* Create a new connection identifier. */
+ conn = netconn_new(NETCONN_TCP);
+
+ /* Bind connection to well known port number 7. */
+ netconn_bind(conn, NULL, TCP_ECHO_PORT);
+
+ /* Tell connection to go into listening mode. */
+ netconn_listen(conn);
+
+ while(1)
+ {
+ /* Grab new connection. */
+ newconn = netconn_accept(conn);
+ /* Process the new connection. */
+ if(newconn != NULL)
+ {
+ struct netbuf *buf;
+ void *data;
+ u16_t len;
+
+ while((buf = netconn_recv(newconn)) != NULL)
+ {
+ do
+ {
+ netbuf_data(buf, &data, &len);
+ err = netconn_write(newconn, data, len, NETCONN_COPY);
+ if(err != ERR_OK){}
+ }
+ while(netbuf_next(buf) >= 0);
+ netbuf_delete(buf);
+ }
+ /* Close connection and discard connection identifier. */
+ netconn_delete(newconn);
+ }
+ }
+}
+
+/*
+ * TCP socket echo server
+ */
+#define TCP_SOCKET_ECHO_PORT 700
+#define TCP_SOCKET_BUFFER_SIZE 4096
+rt_thread_t tcpecho_socket_tid = RT_NULL;
+void tcpecho_socket_entry(void *parameter)
+{
+ char *recv_data;
+ rt_uint32_t sin_size;
+ int sock = -1, connected, bytes_received;
+ struct sockaddr_in server_addr, client_addr;
+
+ recv_data = rt_malloc(TCP_SOCKET_BUFFER_SIZE);
+ if (recv_data == RT_NULL)
+ {
+ rt_kprintf("no memory\n");
+ goto _exit;
+ }
+
+ /* create a TCP socket */
+ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
+ {
+ rt_kprintf("create socket error\n");
+ goto _exit;
+ }
+
+ /* initialize server address */
+ server_addr.sin_family = AF_INET;
+ server_addr.sin_port = htons(TCP_SOCKET_ECHO_PORT);
+ server_addr.sin_addr.s_addr = INADDR_ANY;
+ rt_memset(&(server_addr.sin_zero),8, sizeof(server_addr.sin_zero));
+
+ /* bind to server address */
+ if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
+ {
+ rt_kprintf("bind address failed\n");
+ goto _exit;
+ }
+
+ /* listen */
+ if (listen(sock, 5) == -1)
+ {
+ rt_kprintf("listen error\n");
+ goto _exit;
+ }
+
+ sin_size = sizeof(struct sockaddr_in);
+ while(1)
+ {
+ /* accept client connected */
+ connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size);
+ if (connected > 0)
+ {
+ int timeout;
+
+ /* set timeout option */
+ timeout = 5000; /* 5second */
+ setsockopt(connected, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
+
+ /* handle this client */
+ while (1)
+ {
+ /* receive data from this connection */
+ bytes_received = recv(connected,recv_data, TCP_SOCKET_BUFFER_SIZE, 0);
+ if (bytes_received <= 0)
+ {
+ rt_kprintf("close client connection, errno: %d, socket error: %d\n",
+ rt_get_errno(),
+ lwip_get_error());
+ /* connection closed. */
+ lwip_close(connected);
+ break;
+ }
+
+ /* send data to client */
+ send(connected, recv_data, bytes_received, 0);
+ }
+ }
+ }
+
+_exit:
+ /* close socket */
+ if (sock != -1) lwip_close(sock);
+ rt_free(recv_data);
+
+ return ;
+}
+
+/*
+ * NetIO TCP server
+ */
+
+/* network test utilities entry */
+void net_test(void)
+{
+ /* start UDP echo server */
+ if (udpecho_tid == RT_NULL)
+ {
+ udpecho_tid = rt_thread_create("uecho",
+ udpecho_entry, RT_NULL,
+ 512, RT_THREAD_PRIORITY_MAX/2, 5);
+ if (udpecho_tid != RT_NULL)
+ rt_thread_startup(udpecho_tid);
+ }
+ if (udpecho_socket_tid == RT_NULL)
+ {
+ udpecho_socket_tid = rt_thread_create("uecho_s",
+ udpecho_socket_entry, RT_NULL,
+ 512, RT_THREAD_PRIORITY_MAX/2 + 1, 5);
+ if (udpecho_socket_tid != RT_NULL)
+ rt_thread_startup(udpecho_socket_tid);
+ }
+
+ if (tcpecho_tid == RT_NULL)
+ {
+ tcpecho_tid = rt_thread_create("techo",
+ tcpecho_entry, RT_NULL,
+ 512, RT_THREAD_PRIORITY_MAX/2 + 2, 5);
+ if (tcpecho_tid != RT_NULL)
+ rt_thread_startup(tcpecho_tid);
+ }
+ if (tcpecho_socket_tid == RT_NULL)
+ {
+ tcpecho_socket_tid = rt_thread_create("techo_s",
+ tcpecho_socket_entry, RT_NULL,
+ 512, RT_THREAD_PRIORITY_MAX/2 + 3, 5);
+ if (tcpecho_socket_tid != RT_NULL)
+ rt_thread_startup(tcpecho_socket_tid);
+ }
+}
+FINSH_FUNCTION_EXPORT(net_test, network test);
+