diff --git a/cmake/Platform/aarch64-rtems6.cmake b/cmake/Platform/aarch64-rtems6.cmake new file mode 100644 index 000000000..1d6b84007 --- /dev/null +++ b/cmake/Platform/aarch64-rtems6.cmake @@ -0,0 +1,3 @@ +add_compile_options("-mcpu=cortex-a72" "-I/opt/rtems/6/aarch64-rtems6/a72_lp64_qemu/lib/include" "-I/home/mohr/data/git/fsfw/unittests/testcfg/rtems/include") + +add_link_options("-B/opt/rtems/6/aarch64-rtems6/a72_lp64_qemu/lib" "-qrtems") diff --git a/src/fsfw/osal/rtems/CpuUsage.cpp b/src/fsfw/osal/rtems/CpuUsage.cpp index 4ffc22717..776d3586b 100644 --- a/src/fsfw/osal/rtems/CpuUsage.cpp +++ b/src/fsfw/osal/rtems/CpuUsage.cpp @@ -93,8 +93,8 @@ ReturnValue_t CpuUsage::serialize(uint8_t** buffer, size_t* size, size_t maxSize streamEndianness); } -uint32_t CpuUsage::getSerializedSize() const { - uint32_t size = 0; +size_t CpuUsage::getSerializedSize() const { + size_t size = 0; size += sizeof(timeSinceLastReset); size += SerialArrayListAdapter::getSerializedSize(&threadData); @@ -136,8 +136,8 @@ ReturnValue_t CpuUsage::ThreadData::serialize(uint8_t** buffer, size_t* size, si return returnvalue::OK; } -uint32_t CpuUsage::ThreadData::getSerializedSize() const { - uint32_t size = 0; +size_t CpuUsage::ThreadData::getSerializedSize() const { + size_t size = 0; size += sizeof(id); size += MAX_LENGTH_OF_THREAD_NAME; diff --git a/src/fsfw/osal/rtems/InternalErrorCodes.cpp b/src/fsfw/osal/rtems/InternalErrorCodes.cpp index 9e0c1ae77..659840f9c 100644 --- a/src/fsfw/osal/rtems/InternalErrorCodes.cpp +++ b/src/fsfw/osal/rtems/InternalErrorCodes.cpp @@ -35,10 +35,9 @@ ReturnValue_t InternalErrorCodes::translate(uint8_t code) { return OUT_OF_PROXIES; case INTERNAL_ERROR_INVALID_GLOBAL_ID: return INVALID_GLOBAL_ID; -#ifndef STM32H743ZI_NUCLEO - case INTERNAL_ERROR_BAD_STACK_HOOK: - return BAD_STACK_HOOK; -#endif + //TODO this one is not there anymore in rtems-6 (5 as well?) + //case INTERNAL_ERROR_BAD_STACK_HOOK: + // return BAD_STACK_HOOK; // case INTERNAL_ERROR_BAD_ATTRIBUTES: // return BAD_ATTRIBUTES; // case INTERNAL_ERROR_IMPLEMENTATION_KEY_CREATE_INCONSISTENCY: diff --git a/src/fsfw/timemanager/TimeReaderIF.h b/src/fsfw/timemanager/TimeReaderIF.h index aa64b7548..b66f470fb 100644 --- a/src/fsfw/timemanager/TimeReaderIF.h +++ b/src/fsfw/timemanager/TimeReaderIF.h @@ -3,6 +3,8 @@ #include #include +#include + #include "fsfw/platform.h" diff --git a/unittests/CatchRunner.cpp b/unittests/CatchRunner.cpp index a25d523d6..b6017b430 100644 --- a/unittests/CatchRunner.cpp +++ b/unittests/CatchRunner.cpp @@ -43,6 +43,44 @@ void unittestTaskFunction(void* pvParameters) { } #endif +#ifdef FSFW_OSAL_RTEMS +#include + +int sigaltstack(const stack_t * ss, stack_t * old_ss){ + return 0; +} +extern "C" { + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_UNLIMITED_OBJECTS +#define CONFIGURE_UNIFIED_WORK_AREAS + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include + + +#include +#include +#include + +rtems_task Init( + rtems_task_argument ignored +) +{ + printf( "\nHello World\n" ); + char* argv[] = {"fsfw-test"}; + int result = Catch::Session().run(1, argv); + exit( result ); +} + +} +#endif + int main(int argc, char* argv[]) { customSetup(); diff --git a/unittests/testcfg/rtems/cmake/rtems-qemu-toolchain.cmake b/unittests/testcfg/rtems/cmake/rtems-qemu-toolchain.cmake new file mode 100644 index 000000000..b75ca5d0d --- /dev/null +++ b/unittests/testcfg/rtems/cmake/rtems-qemu-toolchain.cmake @@ -0,0 +1,23 @@ +# the name of the target operating system +set(CMAKE_SYSTEM_NAME aarch64-rtems6) + +set(CMAKE_SYSTEM_PROCESSOR a72) + +# which compilers to use for C and C++ +set(CMAKE_C_COMPILER aarch64-rtems6-gcc) +set(CMAKE_CXX_COMPILER aarch64-rtems6-g++) + +set(CMAKE_C_COMPILER_WORKS 1) +set(CMAKE_CXX_COMPILER_WORKS 1) + +# where is the target environment located +#set(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc +# /home/alex/mingw-install) + +# adjust the default behavior of the FIND_XXX() commands: +# search programs in the host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + +# search headers and libraries in the target environment +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/unittests/testcfg/rtems/include/cmath b/unittests/testcfg/rtems/include/cmath new file mode 100644 index 000000000..a62ea66ba --- /dev/null +++ b/unittests/testcfg/rtems/include/cmath @@ -0,0 +1,39 @@ +#pragma once + +#include_next + +extern "C++" +{ +namespace std _GLIBCXX_VISIBILITY(default) +{ + +#undef lround +#undef erfc +#undef round + + +using ::lround; + +long + lround(float __x); + + constexpr long + lround(long double __x); + +using ::erfc; + +constexpr float + erfc(float __x); + + constexpr long double + erfc(long double __x); + + constexpr float + round(float __x); + + using ::round; + + constexpr long double + round(long double __x); +} +}