diff --git a/ion/test/device/n0110/Makefile b/ion/test/device/n0110/Makefile index 3acf290d9..d379f0fb2 100644 --- a/ion/test/device/n0110/Makefile +++ b/ion/test/device/n0110/Makefile @@ -1,10 +1,8 @@ test_ion_external_flash_read_src += $(addprefix ion/test/$(PLATFORM)/$(MODEL)/, \ - external_flash_helper.cpp \ external_flash_read.cpp \ ) test_ion_external_flash_write_src += $(addprefix ion/test/$(PLATFORM)/$(MODEL)/, \ - external_flash_helper.cpp \ external_flash_write.cpp \ ) diff --git a/ion/test/device/n0110/external_flash_helper.cpp b/ion/test/device/n0110/external_flash_helper.cpp deleted file mode 100644 index 11d776784..000000000 --- a/ion/test/device/n0110/external_flash_helper.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "ion/include/ion/timing.h" -#include -#include - -size_t uint64ToString(uint64_t n, char buffer[]) { - size_t len = 0; - do { - buffer[len++] = (n % 10) + '0'; - } while ((n /= 10) > 0); - int i = 0; - int j = len - 1; - while (i < j) { - char c = buffer[i]; - buffer[i++] = buffer[j]; - buffer[j--] = c; - } - return len; -} - -void printElapsedTime(uint64_t startTime) { - char buffer[7+26+2] = " time: "; - size_t len = uint64ToString((Ion::Timing::millis() - startTime)/1000, buffer+7); - buffer[7+len] = 's'; - buffer[7+len+1] = 0; - quiz_print(buffer); -} diff --git a/ion/test/device/n0110/external_flash_helper.h b/ion/test/device/n0110/external_flash_helper.h index de84d3d0d..11350ce9b 100644 --- a/ion/test/device/n0110/external_flash_helper.h +++ b/ion/test/device/n0110/external_flash_helper.h @@ -17,6 +17,3 @@ inline uint32_t expected_value_at(uint32_t * ptr) { uint16_t * ptr16 = reinterpret_cast(ptr); return (static_cast(expected_value_at(ptr16+1)) << 16) + static_cast(expected_value_at(ptr16)); } - -size_t uint64ToString(uint64_t n, char buffer[]); -void printElapsedTime(uint64_t startTime); diff --git a/ion/test/device/n0110/external_flash_read.cpp b/ion/test/device/n0110/external_flash_read.cpp index 3b234f14c..4a2417c6e 100644 --- a/ion/test/device/n0110/external_flash_read.cpp +++ b/ion/test/device/n0110/external_flash_read.cpp @@ -1,7 +1,6 @@ #include +#include #include -#include -#include #include #include "external_flash_helper.h" @@ -47,56 +46,56 @@ void test(int accessType, int repeat) { } QUIZ_CASE(ion_extflash_read_byte_fwd) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(0, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_extflash_read_byte_bck) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(1, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_extflash_read_byte_rand) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(2, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_extflash_read_half_fwd) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(0, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_extflash_read_half_bck) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(1, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_extflash_read_half_rand) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(2, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_extflash_read_word_fwd) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(0, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_extflash_read_word_bck) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(1, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_extflash_read_word_rand) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); test(2, 1); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); Ion::Timing::msleep(3000); } diff --git a/ion/test/device/n0110/external_flash_write.cpp b/ion/test/device/n0110/external_flash_write.cpp index 0585abd96..a9097117a 100644 --- a/ion/test/device/n0110/external_flash_write.cpp +++ b/ion/test/device/n0110/external_flash_write.cpp @@ -1,20 +1,19 @@ #include -#include +#include #include -#include "ion/include/ion/timing.h" #include "external_flash_helper.h" // Choose some not too uniform data to program the external flash memory with. QUIZ_CASE(ion_ext_flash_erase) { - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); Ion::Device::ExternalFlash::MassErase(); - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } QUIZ_CASE(ion_ext_flash_program) { // Program separately each page of the flash memory - uint64_t startTime = Ion::Timing::millis(); + uint64_t startTime = quiz_stopwatch_start(); for (int page = 0; page < (1<<15); page++) { uint8_t buffer[256]; for (int byte = 0; byte < 256; byte++) { @@ -22,5 +21,5 @@ QUIZ_CASE(ion_ext_flash_program) { } Ion::Device::ExternalFlash::WriteMemory(reinterpret_cast(page * 256), buffer, 256); } - printElapsedTime(startTime); + quiz_stopwatch_print_lap(startTime); } diff --git a/quiz/Makefile b/quiz/Makefile index 25ddd96b1..10ffb7e9f 100644 --- a/quiz/Makefile +++ b/quiz/Makefile @@ -14,6 +14,7 @@ runner_src += $(addprefix quiz/src/, \ assertions.cpp \ i18n.cpp \ runner.cpp \ + stopwatch.cpp \ ) runner_src += $(BUILD_DIR)/quiz/src/tests_symbols.c diff --git a/quiz/include/quiz/stopwatch.h b/quiz/include/quiz/stopwatch.h new file mode 100644 index 000000000..53a582b08 --- /dev/null +++ b/quiz/include/quiz/stopwatch.h @@ -0,0 +1,17 @@ +#ifndef QUIZ_STOPWATCH_H +#define QUIZ_STOPWATCH_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +uint64_t quiz_stopwatch_start(); +void quiz_stopwatch_print_lap(uint64_t startTime); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/quiz/src/runner.cpp b/quiz/src/runner.cpp index dae22605a..ef4b883c3 100644 --- a/quiz/src/runner.cpp +++ b/quiz/src/runner.cpp @@ -1,8 +1,6 @@ #include "quiz.h" #include "symbols.h" -#include #include -#include #include #include #include diff --git a/quiz/src/stopwatch.cpp b/quiz/src/stopwatch.cpp new file mode 100644 index 000000000..f4dafac16 --- /dev/null +++ b/quiz/src/stopwatch.cpp @@ -0,0 +1,36 @@ +#include +#include "quiz.h" +#include +#include + +uint64_t quiz_stopwatch_start() { + return Ion::Timing::millis(); +} + +static size_t uint64ToString(uint64_t n, char buffer[]) { + size_t len = 0; + do { + buffer[len++] = (n % 10) + '0'; + } while ((n /= 10) > 0); + int i = 0; + int j = len - 1; + while (i < j) { + char c = buffer[i]; + buffer[i++] = buffer[j]; + buffer[j--] = c; + } + return len; +} + +void quiz_stopwatch_print_lap(uint64_t startTime) { + constexpr char Time[] = " time: "; + constexpr char Ms[] = "ms"; + constexpr size_t uint64ToStringMaxLength = 20; + constexpr size_t MaxLength = sizeof(Time) + uint64ToStringMaxLength + sizeof(Ms) + 1; + char buffer[MaxLength]; + char * position = buffer; + position += strlcpy(position, Time, sizeof(Time)); + position += uint64ToString(Ion::Timing::millis() - startTime, position); + position += strlcpy(position, Ms, sizeof(Ms)); + quiz_print(buffer); +}