diff --git a/rover-apps/arm/CMakeLists.txt b/rover-apps/arm/CMakeLists.txt index 24b7cee2..d0c03ca7 100644 --- a/rover-apps/arm/CMakeLists.txt +++ b/rover-apps/arm/CMakeLists.txt @@ -1,6 +1,6 @@ add_executable(arm) -target_sources(arm PRIVATE src/main.cpp) -target_include_directories(arm PUBLIC include) +target_sources(arm PRIVATE ../common/src/main.cpp) +target_include_directories(arm PUBLIC include ../common/include) target_link_libraries(arm PRIVATE #Control diff --git a/rover-apps/arm/include/AppConfig.h b/rover-apps/arm/include/AppConfig.h new file mode 100644 index 00000000..32f1383b --- /dev/null +++ b/rover-apps/arm/include/AppConfig.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#include "Module.h" + +std::vector gModules = { + // put modules here +}; diff --git a/rover-apps/common/CMakeLists.txt b/rover-apps/common/CMakeLists.txt new file mode 100644 index 00000000..e69de29b diff --git a/rover-apps/common/include/Module.h b/rover-apps/common/include/Module.h new file mode 100644 index 00000000..8df2b8cf --- /dev/null +++ b/rover-apps/common/include/Module.h @@ -0,0 +1,10 @@ +#pragma once + +class Module { + public: + virtual void periodic_10s(void) = 0; + virtual void periodic_1s(void) = 0; + virtual void periodic_100ms(void) = 0; + virtual void periodic_10ms(void) = 0; + virtual void periodic_1ms(void) = 0; +}; diff --git a/rover-apps/common/src/main.cpp b/rover-apps/common/src/main.cpp new file mode 100644 index 00000000..c60173cf --- /dev/null +++ b/rover-apps/common/src/main.cpp @@ -0,0 +1,59 @@ +#include "AppConfig.h" +#include "mbed.h" + +Thread periodic_10s_thread(osPriorityNormal1); +Thread periodic_1s_thread(osPriorityNormal2); +Thread periodic_100ms_thread(osPriorityNormal3); +Thread periodic_10ms_thread(osPriorityNormal4); +Thread periodic_1ms_thread(osPriorityNormal5); + +void periodic_10s(void) { + auto startTime = Kernel::Clock::now(); + for (Module* module : gModules) { + module->periodic_10s(); + } + ThisThread::sleep_until(startTime + 10s); +} + +void periodic_1s(void) { + auto startTime = Kernel::Clock::now(); + for (Module* module : gModules) { + module->periodic_1s(); + } + ThisThread::sleep_until(startTime + 1s); +} + +void periodic_100ms(void) { + auto startTime = Kernel::Clock::now(); + for (Module* module : gModules) { + module->periodic_100ms(); + } + ThisThread::sleep_until(startTime + 100ms); +} + +void periodic_10ms(void) { + auto startTime = Kernel::Clock::now(); + for (Module* module : gModules) { + module->periodic_10ms(); + } + ThisThread::sleep_until(startTime + 10ms); +} + +void periodic_1ms(void) { + auto startTime = Kernel::Clock::now(); + for (Module* module : gModules) { + module->periodic_1ms(); + } + ThisThread::sleep_until(startTime + 1ms); +} + +int main() { + periodic_1ms_thread.start(periodic_1ms); + periodic_10ms_thread.start(periodic_10ms); + periodic_100ms_thread.start(periodic_100ms); + periodic_1s_thread.start(periodic_1s); + periodic_10s_thread.start(periodic_10s); + + while (true) { + } +} diff --git a/rover-apps/gimbal/CMakeLists.txt b/rover-apps/gimbal/CMakeLists.txt index a7aa85f0..3747449b 100644 --- a/rover-apps/gimbal/CMakeLists.txt +++ b/rover-apps/gimbal/CMakeLists.txt @@ -1,6 +1,6 @@ add_executable(gimbal) -target_sources(gimbal PRIVATE src/main.cpp) -target_include_directories(gimbal PUBLIC include) +target_sources(gimbal PRIVATE ../common/src/main.cpp) +target_include_directories(gimbal PUBLIC include ../common/include) target_link_libraries(gimbal PRIVATE #Control diff --git a/rover-apps/gimbal/include/AppConfig.h b/rover-apps/gimbal/include/AppConfig.h new file mode 100644 index 00000000..32f1383b --- /dev/null +++ b/rover-apps/gimbal/include/AppConfig.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#include "Module.h" + +std::vector gModules = { + // put modules here +}; diff --git a/rover-apps/science/CMakeLists.txt b/rover-apps/science/CMakeLists.txt index ad98ab79..646a7756 100644 --- a/rover-apps/science/CMakeLists.txt +++ b/rover-apps/science/CMakeLists.txt @@ -1,6 +1,6 @@ add_executable(science) -target_sources(science PRIVATE src/main.cpp) -target_include_directories(science PUBLIC include) +target_sources(science PRIVATE ../common/src/main.cpp) +target_include_directories(science PUBLIC include ../common/include) target_link_libraries(science PRIVATE #Control diff --git a/rover-apps/science/include/AppConfig.h b/rover-apps/science/include/AppConfig.h new file mode 100644 index 00000000..32f1383b --- /dev/null +++ b/rover-apps/science/include/AppConfig.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#include "Module.h" + +std::vector gModules = { + // put modules here +};