From df1a695a2b77fb79b53b74b11b96a32b3ba3f77b Mon Sep 17 00:00:00 2001 From: Jerome Hue Date: Mon, 9 Oct 2023 04:46:39 +0200 Subject: [PATCH 1/4] Create a test case for updating a ringbuffer entry --- Tests/GoldenTests/CMakeLists.txt | 3 + .../ExpectedOutputs/UpdateRingBuffer.txt | 12 ++ Tests/GoldenTests/UpdateRingBuffer.test.cpp | 111 ++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 Tests/GoldenTests/ExpectedOutputs/UpdateRingBuffer.txt create mode 100644 Tests/GoldenTests/UpdateRingBuffer.test.cpp diff --git a/Tests/GoldenTests/CMakeLists.txt b/Tests/GoldenTests/CMakeLists.txt index 4ad8252b..1727b17f 100644 --- a/Tests/GoldenTests/CMakeLists.txt +++ b/Tests/GoldenTests/CMakeLists.txt @@ -8,8 +8,11 @@ set(Sts1CobcSw "${CMAKE_SOURCE_DIR}/Sts1CobcSw") add_golden_test( TESTFILE "HelloWorld.test.cpp" SOURCE "${Sts1CobcSw}/TopicsAndSubscribers.cpp" LIB rodos::rodos ) + add_golden_test(TESTFILE "HelloDummy.test.cpp" LIB rodos::rodos Sts1CobcSw_Dummy) +add_golden_test(TESTFILE "UpdateRingBuffer.test.cpp" LIB rodos::rodos Sts1CobcSw_Dummy) + add_golden_test( TESTFILE "DispatchCommand.test.cpp" diff --git a/Tests/GoldenTests/ExpectedOutputs/UpdateRingBuffer.txt b/Tests/GoldenTests/ExpectedOutputs/UpdateRingBuffer.txt new file mode 100644 index 00000000..3d13e869 --- /dev/null +++ b/Tests/GoldenTests/ExpectedOutputs/UpdateRingBuffer.txt @@ -0,0 +1,12 @@ +Occupied count : 5 +Vals[0] = .id(1), .status(notStarted) +Vals[1] = .id(2), .status(notStarted) +Vals[2] = .id(3), .status(notStarted) +Vals[3] = .id(4), .status(notStarted) +Vals[4] = .id(5), .status(notStarted) +Vals[0] = .id(1), .status(running) +Vals[1] = .id(2), .status(notStarted) +Vals[2] = .id(3), .status(running) +Vals[3] = .id(4), .status(notStarted) +Vals[4] = .id(5), .status(notStarted) +hw_resetAndReboot() -> exit diff --git a/Tests/GoldenTests/UpdateRingBuffer.test.cpp b/Tests/GoldenTests/UpdateRingBuffer.test.cpp new file mode 100644 index 00000000..544c2622 --- /dev/null +++ b/Tests/GoldenTests/UpdateRingBuffer.test.cpp @@ -0,0 +1,111 @@ +#include + +#include + +#include + +#include +#include + + +std::uint32_t printfMask = 0; + + +namespace sts1cobcsw +{ + +enum Status +{ + notStarted, + running, + done +}; + +struct Entry +{ + std::uint32_t id; + Status status; +}; + +auto StatusToString(Status status) -> std::string +{ + switch(status) + { + case notStarted: + return {"notStarted"}; + case running: + return {"running"}; + case done: + return {"done"}; + default: + break; + } +} + +// Defined a global variable for testing purpose +RODOS::RingBuffer buffer; + +auto UpdateRingBuffer(Status status, std::uint32_t id, Status newStatus) -> void +{ + auto isLookedForEntry = [&](Entry & entry) + { return (entry.id == id and entry.status == status); }; + + auto count = 0; + for(int i = 0; i < buffer.getLen(); ++i) + { + if(buffer.vals[i].id == id and buffer.vals[i].status == status) + { + count++; + } + } + + assert(count == 1 and "More than one program and status history match founds"); + + for(int i = 0; i < buffer.getLen(); ++i) + { + if(buffer.vals[i].id == id and buffer.vals[i].status == status) + { + buffer.vals[i].status = newStatus; + } + } +} + + +void PrintBuffer() +{ + for(int i = 0; i < buffer.occupiedCnt; ++i) + { + RODOS::PRINTF("Vals[%d] = .id(%d), .status(%s)\n", + i, + buffer.vals[i].id, + StatusToString(buffer.vals[i].status).c_str()); + } +} + +class HelloDummy : public RODOS::StaticThread<> +{ + void run() override + { + printfMask = 1; + buffer.put(Entry{.id = 1, .status = Status::notStarted}); + buffer.put(Entry{.id = 2, .status = Status::notStarted}); + buffer.put(Entry{.id = 3, .status = Status::notStarted}); + buffer.put(Entry{.id = 4, .status = Status::notStarted}); + buffer.put(Entry{.id = 5, .status = Status::notStarted}); + + RODOS::PRINTF("Occupied count : %d\n", buffer.occupiedCnt); + + // Print RingBuffer + PrintBuffer(); + + // Start programs 1 , 3 and 5 + UpdateRingBuffer(Status::notStarted, 1, Status::running); + UpdateRingBuffer(Status::notStarted, 3, Status::running); + + // Print RingBuffer + PrintBuffer(); + + RODOS::hwResetAndReboot(); + } +} helloDummy; +} From 3f23bd13ff3549ec24d3856be69c0a9569ca101e Mon Sep 17 00:00:00 2001 From: Jerome Hue Date: Sun, 15 Oct 2023 15:15:30 +0200 Subject: [PATCH 2/4] Fix ProgramStatusHistory update bug Provide a new function UpdateProgramStatusHistory(std::uint16, std::uint16, edu::ProgramStatus) taking a queue ID, program ID and program status argument; and updating the status of the entry in programStatusHistory matching both IDs, by replacing its status with the status given as an argument. Provide a new function : UpdateProgramStatusHistory(). This function takes 3 arguments : - A program ID of type std::uint16_t - A queue ID of type std::uint16_t - A program status of type edu::ProgramStatus It then iterates through every entry of the buffer, looking for one who mathces both queue ID and program ID provided. When found, it updates it by setting its status to the status given as an argument. If no matching entry is found, nothing is done. --- Sts1CobcSw/Edu/ProgramStatusHistory.cpp | 26 ++++++++++++------------- Sts1CobcSw/Edu/ProgramStatusHistory.hpp | 5 +++-- Sts1CobcSw/EduListenerThread.cpp | 23 +++++++++++----------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Sts1CobcSw/Edu/ProgramStatusHistory.cpp b/Sts1CobcSw/Edu/ProgramStatusHistory.cpp index 436b2526..37b82b21 100644 --- a/Sts1CobcSw/Edu/ProgramStatusHistory.cpp +++ b/Sts1CobcSw/Edu/ProgramStatusHistory.cpp @@ -8,20 +8,20 @@ namespace sts1cobcsw::edu RODOS::RingBuffer programStatusHistory; -// TODO: This should probably not return a copy but a reference or pointer so that the user code can -// modify the entry. -auto FindProgramStatusHistoryEntry(std::uint16_t programId, std::uint16_t queueId) - -> ProgramStatusHistoryEntry +auto UpdateProgramStatusHistory(std::uint16_t programId, + std::uint16_t queueId, + ProgramStatus newStatus) -> void { - auto programStatusHistoryEntry = ProgramStatusHistoryEntry{}; - do - { - programStatusHistory.get(programStatusHistoryEntry); - // RODOS::PRINTF("%d,%d vs %d,%d\n", eduProgramStatusHistoryEntry.programId, - // eduProgramStatusHistoryEntry.queueId, programId, queueId); - } while(programStatusHistoryEntry.queueId != queueId - or programStatusHistoryEntry.programId != programId); + // TODO: Check that there is only one entry matching program/queue ID, or should it be the case + // by construction ? - return programStatusHistoryEntry; + for(std::uint32_t i = 0; i < programStatusHistory.occupiedCnt; ++i) + { + if(programStatusHistory.vals[i].queueId == queueId + and programStatusHistory.vals[i].programId == programId) + { + programStatusHistory.vals[i].status = newStatus; + } + } } } diff --git a/Sts1CobcSw/Edu/ProgramStatusHistory.hpp b/Sts1CobcSw/Edu/ProgramStatusHistory.hpp index 9e2f4d62..6e0d4747 100644 --- a/Sts1CobcSw/Edu/ProgramStatusHistory.hpp +++ b/Sts1CobcSw/Edu/ProgramStatusHistory.hpp @@ -41,6 +41,7 @@ inline constexpr auto programStatusHistorySize = 20; extern RODOS::RingBuffer programStatusHistory; -auto FindProgramStatusHistoryEntry(std::uint16_t programId, std::uint16_t queueId) - -> ProgramStatusHistoryEntry; +auto UpdateProgramStatusHistory(std::uint16_t programId, + std::uint16_t queueId, + ProgramStatus newStatus) -> void; } diff --git a/Sts1CobcSw/EduListenerThread.cpp b/Sts1CobcSw/EduListenerThread.cpp index b95e213d..562d42d1 100644 --- a/Sts1CobcSw/EduListenerThread.cpp +++ b/Sts1CobcSw/EduListenerThread.cpp @@ -79,17 +79,19 @@ class EduListenerThread : public RODOS::StaticThread<> // Program has finished // Find the correspongind queueEntry and update it, then resume edu queue // thread - auto eduProgramStatusHistoryEntry = - edu::FindProgramStatusHistoryEntry(status.programId, status.queueId); if(status.exitCode == 0) { - eduProgramStatusHistoryEntry.status = - edu::ProgramStatus::programExecutionSucceeded; + edu::UpdateProgramStatusHistory( + status.programId, + status.queueId, + edu::ProgramStatus::programExecutionSucceeded); } else { - eduProgramStatusHistoryEntry.status = - edu::ProgramStatus::programExecutionFailed; + edu::UpdateProgramStatusHistory( + status.programId, + status.queueId, + edu::ProgramStatus::programExecutionFailed); } ResumeEduProgramQueueThread(); break; @@ -122,12 +124,9 @@ class EduListenerThread : public RODOS::StaticThread<> } // break; - auto eduProgramStatusHistoryEntry = - edu::FindProgramStatusHistoryEntry(status.programId, status.queueId); - // TODO: Pretty sure that there is a .put() or something like that missing - // here and the status is actually never updated in the ring buffer. - eduProgramStatusHistoryEntry.status = - edu::ProgramStatus::resultFileTransfered; + edu::UpdateProgramStatusHistory(status.programId, + status.queueId, + edu::ProgramStatus::resultFileTransfered); break; } case edu::StatusType::invalid: From 770b44d5561c3b61548f1b09514aa45f1b706774 Mon Sep 17 00:00:00 2001 From: Jerome Hue Date: Mon, 16 Oct 2023 20:55:02 +0200 Subject: [PATCH 3/4] Improve UpdateRingBuffer.test.cpp Make it use the real UpdateProgramStatusHistory method by linking against Sts1CobcSw_Edu. --- Tests/GoldenTests/CMakeLists.txt | 10 +- .../ExpectedOutputs/UpdateRingBuffer.txt | 23 ++-- Tests/GoldenTests/UpdateRingBuffer.test.cpp | 117 +++++++++--------- 3 files changed, 78 insertions(+), 72 deletions(-) diff --git a/Tests/GoldenTests/CMakeLists.txt b/Tests/GoldenTests/CMakeLists.txt index 1727b17f..5428f463 100644 --- a/Tests/GoldenTests/CMakeLists.txt +++ b/Tests/GoldenTests/CMakeLists.txt @@ -11,7 +11,15 @@ add_golden_test( add_golden_test(TESTFILE "HelloDummy.test.cpp" LIB rodos::rodos Sts1CobcSw_Dummy) -add_golden_test(TESTFILE "UpdateRingBuffer.test.cpp" LIB rodos::rodos Sts1CobcSw_Dummy) +add_golden_test( + TESTFILE + "UpdateRingBuffer.test.cpp" + LIB + rodos::rodos + Sts1CobcSw_Edu + Sts1CobcSw_Utility + Sts1CobcSw_Dummy +) add_golden_test( TESTFILE diff --git a/Tests/GoldenTests/ExpectedOutputs/UpdateRingBuffer.txt b/Tests/GoldenTests/ExpectedOutputs/UpdateRingBuffer.txt index 3d13e869..bbb2d794 100644 --- a/Tests/GoldenTests/ExpectedOutputs/UpdateRingBuffer.txt +++ b/Tests/GoldenTests/ExpectedOutputs/UpdateRingBuffer.txt @@ -1,12 +1,13 @@ -Occupied count : 5 -Vals[0] = .id(1), .status(notStarted) -Vals[1] = .id(2), .status(notStarted) -Vals[2] = .id(3), .status(notStarted) -Vals[3] = .id(4), .status(notStarted) -Vals[4] = .id(5), .status(notStarted) -Vals[0] = .id(1), .status(running) -Vals[1] = .id(2), .status(notStarted) -Vals[2] = .id(3), .status(running) -Vals[3] = .id(4), .status(notStarted) -Vals[4] = .id(5), .status(notStarted) +Vals[0] = .id(1), .status(programExecutionFailed) +Vals[1] = .id(2), .status(programRunning) +Vals[2] = .id(3), .status(programRunning) +Vals[3] = .id(4), .status(programRunning) +readCnt unchanged : 1 +writeCnt unchanged : 0 +OccupiedCnt unchanged : 0 +Vals[0] = .id(1), .status(programExecutionFailed) +Vals[1] = .id(2), .status(programExecutionSucceeded) +Vals[2] = .id(3), .status(programRunning) +Vals[3] = .id(4), .status(programExecutionFailed) +Vals[4] = .id(5), .status(programExecutionSucceeded) hw_resetAndReboot() -> exit diff --git a/Tests/GoldenTests/UpdateRingBuffer.test.cpp b/Tests/GoldenTests/UpdateRingBuffer.test.cpp index 544c2622..d848febf 100644 --- a/Tests/GoldenTests/UpdateRingBuffer.test.cpp +++ b/Tests/GoldenTests/UpdateRingBuffer.test.cpp @@ -1,4 +1,5 @@ #include +#include #include @@ -14,93 +15,89 @@ std::uint32_t printfMask = 0; namespace sts1cobcsw { -enum Status -{ - notStarted, - running, - done -}; - -struct Entry -{ - std::uint32_t id; - Status status; -}; - -auto StatusToString(Status status) -> std::string +auto StatusToString(edu::ProgramStatus status) -> std::string { switch(status) { - case notStarted: - return {"notStarted"}; - case running: - return {"running"}; - case done: - return {"done"}; + case edu::ProgramStatus::programRunning: + return {"programRunning"}; + case edu::ProgramStatus::programExecutionFailed: + return {"programExecutionFailed"}; + case edu::ProgramStatus::programExecutionSucceeded: + return {"programExecutionSucceeded"}; default: break; } } -// Defined a global variable for testing purpose -RODOS::RingBuffer buffer; - -auto UpdateRingBuffer(Status status, std::uint32_t id, Status newStatus) -> void -{ - auto isLookedForEntry = [&](Entry & entry) - { return (entry.id == id and entry.status == status); }; - - auto count = 0; - for(int i = 0; i < buffer.getLen(); ++i) - { - if(buffer.vals[i].id == id and buffer.vals[i].status == status) - { - count++; - } - } - - assert(count == 1 and "More than one program and status history match founds"); - - for(int i = 0; i < buffer.getLen(); ++i) - { - if(buffer.vals[i].id == id and buffer.vals[i].status == status) - { - buffer.vals[i].status = newStatus; - } - } -} - +// Helper function for edu::programStatusHistory void PrintBuffer() { - for(int i = 0; i < buffer.occupiedCnt; ++i) + for(int i = 0; i < edu::programStatusHistory.occupiedCnt; ++i) { RODOS::PRINTF("Vals[%d] = .id(%d), .status(%s)\n", i, - buffer.vals[i].id, - StatusToString(buffer.vals[i].status).c_str()); + edu::programStatusHistory.vals[i].programId.get(), + StatusToString(edu::programStatusHistory.vals[i].status).c_str()); } } + class HelloDummy : public RODOS::StaticThread<> { void run() override { printfMask = 1; - buffer.put(Entry{.id = 1, .status = Status::notStarted}); - buffer.put(Entry{.id = 2, .status = Status::notStarted}); - buffer.put(Entry{.id = 3, .status = Status::notStarted}); - buffer.put(Entry{.id = 4, .status = Status::notStarted}); - buffer.put(Entry{.id = 5, .status = Status::notStarted}); + edu::programStatusHistory.put( + edu::ProgramStatusHistoryEntry{.programId = static_cast(1), + .queueId = static_cast(1), + .status = edu::ProgramStatus::programExecutionFailed}); + + edu::programStatusHistory.put( + edu::ProgramStatusHistoryEntry{.programId = static_cast(2), + .queueId = static_cast(1), + .status = edu::ProgramStatus::programRunning}); + + edu::programStatusHistory.put( + edu::ProgramStatusHistoryEntry{.programId = static_cast(3), + .queueId = static_cast(1), + .status = edu::ProgramStatus::programRunning}); + + edu::programStatusHistory.put( + edu::ProgramStatusHistoryEntry{.programId = static_cast(4), + .queueId = static_cast(1), + .status = edu::ProgramStatus::programRunning}); + + + auto readCnt = edu::programStatusHistory.readCnt; + auto writeCnt = edu::programStatusHistory.writeCnt; + auto occupiedCnt = edu::programStatusHistory.occupiedCnt; - RODOS::PRINTF("Occupied count : %d\n", buffer.occupiedCnt); // Print RingBuffer PrintBuffer(); - // Start programs 1 , 3 and 5 - UpdateRingBuffer(Status::notStarted, 1, Status::running); - UpdateRingBuffer(Status::notStarted, 3, Status::running); + + edu::UpdateProgramStatusHistory(2, 1, edu::ProgramStatus::programExecutionSucceeded); + edu::UpdateProgramStatusHistory(4, 1, edu::ProgramStatus::programExecutionFailed); + + edu::programStatusHistory.put( + edu::ProgramStatusHistoryEntry{.programId = static_cast(5), + .queueId = static_cast(1), + .status = edu::ProgramStatus::programRunning}); + + edu::UpdateProgramStatusHistory(5, 1, edu::ProgramStatus::programExecutionSucceeded); + + // 1, we did not read anything + RODOS::PRINTF("readCnt unchanged : %d\n", + static_cast(edu::programStatusHistory.readCnt == readCnt)); + // 0, bc we did write + RODOS::PRINTF("writeCnt unchanged : %d\n", + static_cast(edu::programStatusHistory.readCnt == writeCnt)); + // 0 + RODOS::PRINTF("OccupiedCnt unchanged : %d\n", + static_cast(edu::programStatusHistory.occupiedCnt == occupiedCnt)); // Print RingBuffer PrintBuffer(); From c1855b1d50d413ac03d61ac7235a9cccbd76017e Mon Sep 17 00:00:00 2001 From: Patrick Kappl Date: Sat, 4 Nov 2023 18:50:37 +0000 Subject: [PATCH 4/4] Clean up UpdateRingBuffer.test.cpp - Fix includes - Rename some things - Use proper types --- Tests/GoldenTests/CMakeLists.txt | 1 - Tests/GoldenTests/UpdateRingBuffer.test.cpp | 68 ++++++++------------- 2 files changed, 27 insertions(+), 42 deletions(-) diff --git a/Tests/GoldenTests/CMakeLists.txt b/Tests/GoldenTests/CMakeLists.txt index 5428f463..3a1b490f 100644 --- a/Tests/GoldenTests/CMakeLists.txt +++ b/Tests/GoldenTests/CMakeLists.txt @@ -18,7 +18,6 @@ add_golden_test( rodos::rodos Sts1CobcSw_Edu Sts1CobcSw_Utility - Sts1CobcSw_Dummy ) add_golden_test( diff --git a/Tests/GoldenTests/UpdateRingBuffer.test.cpp b/Tests/GoldenTests/UpdateRingBuffer.test.cpp index d848febf..aefba7d3 100644 --- a/Tests/GoldenTests/UpdateRingBuffer.test.cpp +++ b/Tests/GoldenTests/UpdateRingBuffer.test.cpp @@ -1,12 +1,13 @@ #include #include -#include +#include +#include #include -#include #include +#include std::uint32_t printfMask = 0; @@ -14,19 +15,18 @@ std::uint32_t printfMask = 0; namespace sts1cobcsw { - -auto StatusToString(edu::ProgramStatus status) -> std::string +auto ToString(edu::ProgramStatus status) -> std::string_view { switch(status) { case edu::ProgramStatus::programRunning: - return {"programRunning"}; + return "programRunning"; case edu::ProgramStatus::programExecutionFailed: - return {"programExecutionFailed"}; + return "programExecutionFailed"; case edu::ProgramStatus::programExecutionSucceeded: - return {"programExecutionSucceeded"}; + return "programExecutionSucceeded"; default: - break; + return ""; } } @@ -34,75 +34,61 @@ auto StatusToString(edu::ProgramStatus status) -> std::string // Helper function for edu::programStatusHistory void PrintBuffer() { - for(int i = 0; i < edu::programStatusHistory.occupiedCnt; ++i) + for(std::uint32_t i = 0; i < edu::programStatusHistory.occupiedCnt; ++i) { RODOS::PRINTF("Vals[%d] = .id(%d), .status(%s)\n", i, edu::programStatusHistory.vals[i].programId.get(), - StatusToString(edu::programStatusHistory.vals[i].status).c_str()); + ToString(edu::programStatusHistory.vals[i].status).data()); } } -class HelloDummy : public RODOS::StaticThread<> +class UpdateRingBufferTest : public RODOS::StaticThread<> { void run() override { - printfMask = 1; - edu::programStatusHistory.put( - edu::ProgramStatusHistoryEntry{.programId = static_cast(1), - .queueId = static_cast(1), - .status = edu::ProgramStatus::programExecutionFailed}); + using type_safe::operator""_u16; - edu::programStatusHistory.put( - edu::ProgramStatusHistoryEntry{.programId = static_cast(2), - .queueId = static_cast(1), - .status = edu::ProgramStatus::programRunning}); - - edu::programStatusHistory.put( - edu::ProgramStatusHistoryEntry{.programId = static_cast(3), - .queueId = static_cast(1), - .status = edu::ProgramStatus::programRunning}); + printfMask = 1; edu::programStatusHistory.put( - edu::ProgramStatusHistoryEntry{.programId = static_cast(4), - .queueId = static_cast(1), - .status = edu::ProgramStatus::programRunning}); + edu::ProgramStatusHistoryEntry{.programId = 1_u16, + .queueId = 1_u16, + .status = edu::ProgramStatus::programExecutionFailed}); + edu::programStatusHistory.put(edu::ProgramStatusHistoryEntry{ + .programId = 2_u16, .queueId = 1_u16, .status = edu::ProgramStatus::programRunning}); + edu::programStatusHistory.put(edu::ProgramStatusHistoryEntry{ + .programId = 3_u16, .queueId = 1_u16, .status = edu::ProgramStatus::programRunning}); + edu::programStatusHistory.put(edu::ProgramStatusHistoryEntry{ + .programId = 4_u16, .queueId = 1_u16, .status = edu::ProgramStatus::programRunning}); auto readCnt = edu::programStatusHistory.readCnt; auto writeCnt = edu::programStatusHistory.writeCnt; auto occupiedCnt = edu::programStatusHistory.occupiedCnt; - - // Print RingBuffer PrintBuffer(); - edu::UpdateProgramStatusHistory(2, 1, edu::ProgramStatus::programExecutionSucceeded); edu::UpdateProgramStatusHistory(4, 1, edu::ProgramStatus::programExecutionFailed); - - edu::programStatusHistory.put( - edu::ProgramStatusHistoryEntry{.programId = static_cast(5), - .queueId = static_cast(1), - .status = edu::ProgramStatus::programRunning}); - + edu::programStatusHistory.put(edu::ProgramStatusHistoryEntry{ + .programId = 5_u16, .queueId = 1_u16, .status = edu::ProgramStatus::programRunning}); edu::UpdateProgramStatusHistory(5, 1, edu::ProgramStatus::programExecutionSucceeded); - // 1, we did not read anything + // 1, because we did not read anything RODOS::PRINTF("readCnt unchanged : %d\n", static_cast(edu::programStatusHistory.readCnt == readCnt)); - // 0, bc we did write + // 0, because we did write RODOS::PRINTF("writeCnt unchanged : %d\n", static_cast(edu::programStatusHistory.readCnt == writeCnt)); // 0 RODOS::PRINTF("OccupiedCnt unchanged : %d\n", static_cast(edu::programStatusHistory.occupiedCnt == occupiedCnt)); - // Print RingBuffer PrintBuffer(); RODOS::hwResetAndReboot(); } -} helloDummy; +} updateRingBufferTest; }