1414// * Lesser General Public License for more details.
1515// ************************************************************************
1616// * Aug 31, 2010 <MLS> Started on TestArduino
17+ // * Oct 18, 2010 <MLS> Added memory testing
1718// ************************************************************************
1819
19- #ifdef __MWERKS__
20- #include " codewarrior.h"
21- // #include <stdlib.h>
22- #else
23- #include < avr/pgmspace.h>
24- #endif
25-
20+ #include < avr/pgmspace.h>
2621#include < avr/io.h>
2722#include < avr/eeprom.h>
2823
29- #include < ArduinoTestSuite.h>
24+
25+
26+ #include " ArduinoTestSuite.h"
3027
3128
3229#include " WProgram.h"
5653 ATS_LIBC_version,
5754 ATS_CompiledDate,
5855 ATS_TestSuiteName,
59- ATS_ElapsedTime ,
56+ ATS_FreeMemory ,
6057
6158
6259};
@@ -73,7 +70,7 @@ prog_char gTextMsg_GCC_VERSION[] PROGMEM = "GCC-Version";
7370prog_char gTextMsg_AVR_LIBC [] PROGMEM = " AVR-LibC-Ver" ;
7471prog_char gTextMsg_COMPILED_DATE [] PROGMEM = " Compiled-date" ;
7572prog_char gTextMsg_TEST_SUITE_NAME [] PROGMEM = " Test-Suite-Name" ;
76- prog_char gTextMsg_ELAPSED_TIME [] PROGMEM = " Elapsed-time " ;
73+ prog_char gTextMsg_memoryUsage [] PROGMEM = " Free-memory " ;
7774prog_char gTextMsg_dotdotdot [] PROGMEM = " ... " ;
7875prog_char gTextMsg_ok [] PROGMEM = " ok" ;
7976prog_char gTextMsg_FAIL [] PROGMEM = " FAIL" ;
@@ -108,10 +105,81 @@ void Serial_println_P(prog_char *flashMemStr)
108105 Serial.println ();
109106}
110107
108+ // ************************************************************************
109+ // * this is for internal use only, not made pubic to the API
110+ static void ATS_PrintProperty ( int propertyTagNum,
111+ char *propertyName,
112+ char *propertyValue)
113+ {
114+ char lineBuffer[64 ];
115+
116+ strcpy_P (lineBuffer, gTextMsg_info );
117+ switch (propertyTagNum)
118+ {
119+ case 0 :
120+ strcat (lineBuffer, propertyName);
121+ break ;
122+
123+ case ATS_Manufacturer:
124+ strcat_P (lineBuffer, gTextMsg_Manufacturer );
125+ break ;
126+
127+ case ATS_CPU:
128+ strcat_P (lineBuffer, gTextMsg_CPUname );
129+ break ;
130+
131+ case ATS_GCC_version:
132+ strcat_P (lineBuffer, gTextMsg_GCC_VERSION );
133+ break ;
134+
135+ case ATS_LIBC_version:
136+ strcat_P (lineBuffer, gTextMsg_AVR_LIBC );
137+ break ;
138+
139+ case ATS_CompiledDate:
140+ strcat_P (lineBuffer, gTextMsg_COMPILED_DATE );
141+ break ;
142+
143+ case ATS_TestSuiteName:
144+ strcat_P (lineBuffer, gTextMsg_TEST_SUITE_NAME );
145+ break ;
146+
147+ case ATS_FreeMemory:
148+ strcat_P (lineBuffer, gTextMsg_memoryUsage );
149+ break ;
150+ }
151+
152+ while (strlen (lineBuffer) < 20 )
153+ {
154+ strcat (lineBuffer, " " );
155+ }
156+
157+ strcat_P (lineBuffer, gTextMsg_spaceEqual );
158+ if (propertyValue != 0 )
159+ {
160+ strcat (lineBuffer, propertyValue);
161+ }
162+ Serial.println (lineBuffer);
163+
164+ }
165+
166+
167+
111168
112169// ************************************************************************
113- void ATS_PrintTestStart (char *manufName, char *testSuiteName)
170+ void ATS_begin (char *manufName, char *testSuiteName)
114171{
172+ int freeMemory;
173+ char memoryMsg[48 ];
174+
175+ gYotalErrors = 0 ;
176+ gTestCount = 0 ;
177+
178+ Serial.begin (9600 );
179+ delay (1000 );
180+
181+ gTestStartTime = millis ();
182+
115183 Serial.println ();
116184 Serial.println ();
117185 Serial.println ();
@@ -123,17 +191,21 @@ void ATS_PrintTestStart(char *manufName, char *testSuiteName)
123191 ATS_PrintProperty (ATS_CompiledDate, 0 , __DATE__);
124192 ATS_PrintProperty (ATS_TestSuiteName, 0 , testSuiteName);
125193
194+ freeMemory = ATS_GetFreeMemory ();
195+ sprintf (memoryMsg, " %d bytes" , freeMemory);
196+ ATS_PrintProperty (ATS_FreeMemory, 0 , memoryMsg);
126197
127198 randomSeed (analogRead (0 ));
128199
129200}
130201
131202// ************************************************************************
132- void ATS_PrintTestEnd ()
203+ void ATS_end ()
133204{
134205long seconds;
135206long milliSecs;
136207
208+
137209 Serial_println_P (gTextMsg_dashLine );
138210
139211 // Ran 4 tests in 0.000s
@@ -196,66 +268,6 @@ int sLen;
196268}
197269
198270
199- // ************************************************************************
200- // * this is for internal use only, not made pubic to the API
201- static void ATS_PrintProperty ( int propertyTagNum,
202- char *propertyName,
203- char *propertyValue)
204- {
205- char lineBuffer[64 ];
206-
207- strcpy_P (lineBuffer, gTextMsg_info );
208- switch (propertyTagNum)
209- {
210- case 0 :
211- strcat (lineBuffer, propertyName);
212- break ;
213-
214- case ATS_Manufacturer:
215- strcat_P (lineBuffer, gTextMsg_Manufacturer );
216- break ;
217-
218- case ATS_CPU:
219- strcat_P (lineBuffer, gTextMsg_CPUname );
220- break ;
221-
222- case ATS_GCC_version:
223- strcat_P (lineBuffer, gTextMsg_GCC_VERSION );
224- break ;
225-
226- case ATS_LIBC_version:
227- strcat_P (lineBuffer, gTextMsg_AVR_LIBC );
228- break ;
229-
230- case ATS_CompiledDate:
231- strcat_P (lineBuffer, gTextMsg_COMPILED_DATE );
232- break ;
233-
234- case ATS_TestSuiteName:
235- strcat_P (lineBuffer, gTextMsg_TEST_SUITE_NAME );
236- break ;
237-
238- case ATS_ElapsedTime:
239- strcat_P (lineBuffer, gTextMsg_ELAPSED_TIME );
240- break ;
241- }
242-
243- while (strlen (lineBuffer) < 20 )
244- {
245- strcat (lineBuffer, " " );
246- }
247-
248- strcat_P (lineBuffer, gTextMsg_spaceEqual );
249- if (propertyValue != 0 )
250- {
251- strcat (lineBuffer, propertyValue);
252- }
253- Serial.println (lineBuffer);
254- // ATS_PrintTestStatus(lineBuffer, PASSED);
255-
256- }
257-
258-
259271
260272// ************************************************************************
261273// * returns true if no errors, false if there is an error
@@ -674,6 +686,30 @@ char reportString[48];
674686
675687
676688
689+ // ************************************************************************
690+ extern unsigned int __data_start;
691+ extern unsigned int __data_end;
692+ extern unsigned int __bss_start;
693+ extern unsigned int __bss_end;
694+ extern unsigned int __heap_start;
695+ extern void *__brkval;
696+
677697
678698
699+ // ************************************************************************
700+ int ATS_GetFreeMemory ()
701+ {
702+ int free_memory;
703+
704+ if ((int )__brkval == 0 )
705+ {
706+ free_memory = ((int )&free_memory) - ((int )&__bss_end);
707+ }
708+ else
709+ {
710+ free_memory = ((int )&free_memory) - ((int )__brkval);
711+ }
712+ return free_memory;
713+ }
714+
679715
0 commit comments