From d781c6fcecceef0602a147ffbecf7255f24fdcfd Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 23 Mar 2021 14:40:30 +0100 Subject: [PATCH] name storage abstraction available for linux as well --- osal/host/CMakeLists.txt | 1 + osal/host/PeriodicTask.cpp | 1 + osal/host/TaskFactory.cpp | 28 +--------------------------- osal/host/taskHelpers.cpp | 27 +++++++++++++++++++++++++++ osal/host/taskHelpers.h | 16 ++++++++++++++++ osal/windows/winTaskHelpers.cpp | 23 ----------------------- osal/windows/winTaskHelpers.h | 3 --- 7 files changed, 46 insertions(+), 53 deletions(-) create mode 100644 osal/host/taskHelpers.cpp create mode 100644 osal/host/taskHelpers.h diff --git a/osal/host/CMakeLists.txt b/osal/host/CMakeLists.txt index 367f721e..2d29ce5d 100644 --- a/osal/host/CMakeLists.txt +++ b/osal/host/CMakeLists.txt @@ -10,6 +10,7 @@ target_sources(${LIB_FSFW_NAME} QueueMapManager.cpp SemaphoreFactory.cpp TaskFactory.cpp + taskHelpers.cpp ) if(UNIX) diff --git a/osal/host/PeriodicTask.cpp b/osal/host/PeriodicTask.cpp index 4c0bf338..4a02ee0d 100644 --- a/osal/host/PeriodicTask.cpp +++ b/osal/host/PeriodicTask.cpp @@ -1,5 +1,6 @@ #include "Mutex.h" #include "PeriodicTask.h" +#include "taskHelpers.h" #include "../../ipc/MutexFactory.h" #include "../../serviceinterface/ServiceInterfaceStream.h" diff --git a/osal/host/TaskFactory.cpp b/osal/host/TaskFactory.cpp index 1c40c99a..71d0bf8b 100644 --- a/osal/host/TaskFactory.cpp +++ b/osal/host/TaskFactory.cpp @@ -1,3 +1,4 @@ +#include "taskHelpers.h" #include "../../tasks/TaskFactory.h" #include "../../osal/host/FixedTimeslotTask.h" #include "../../osal/host/PeriodicTask.h" @@ -5,12 +6,6 @@ #include "../../tasks/PeriodicTaskIF.h" #include "../../serviceinterface/ServiceInterface.h" -#ifdef _WIN32 - -#include "../windows/winTaskHelpers.h" - -#endif - #include TaskFactory* TaskFactory::factoryInstance = new TaskFactory(); @@ -56,33 +51,12 @@ ReturnValue_t TaskFactory::delayTask(uint32_t delayMs){ } void TaskFactory::printMissedDeadline() { -#ifdef __unix__ - char name[20] = {0}; - int status = pthread_getname_np(pthread_self(), name, sizeof(name)); -#if FSFW_CPP_OSTREAM_ENABLED == 1 - if(status == 0) { - sif::warning << "TaskFactory::printMissedDeadline: " << name << "" << std::endl; - } - else { - sif::warning << "TaskFactory::printMissedDeadline: Unknown task name" << status << - std::endl; - } -#else - if(status == 0) { - sif::printWarning("TaskFactory::printMissedDeadline: %s\n", name); - } - else { - sif::printWarning("TaskFactory::printMissedDeadline: Unknown task name\n", name); - } -#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */ -#elif defined(_WIN32) std::string name = tasks::getTaskName(std::this_thread::get_id()); #if FSFW_CPP_OSTREAM_ENABLED == 1 sif::warning << "TaskFactory::printMissedDeadline: " << name << std::endl; #else sif::printWarning("TaskFactory::printMissedDeadline: %s\n", name); #endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */ -#endif /* defined(_WIN32) */ } diff --git a/osal/host/taskHelpers.cpp b/osal/host/taskHelpers.cpp new file mode 100644 index 00000000..be4c29ad --- /dev/null +++ b/osal/host/taskHelpers.cpp @@ -0,0 +1,27 @@ +#include "taskHelpers.h" +#include +#include + +std::mutex nameMapLock; +std::map taskNameMap; + +ReturnValue_t tasks::insertTaskName(std::thread::id threadId, std::string taskName) { + std::lock_guard lg(nameMapLock); + auto returnPair = taskNameMap.emplace(threadId, taskName); + if(not returnPair.second) { + return HasReturnvaluesIF::RETURN_FAILED; + } + return HasReturnvaluesIF::RETURN_OK; +} + +std::string tasks::getTaskName(std::thread::id threadId) { + std::lock_guard lg(nameMapLock); + auto resultIter = taskNameMap.find(threadId); + if(resultIter != taskNameMap.end()) { + return resultIter->second; + } + else { + return "Unknown task"; + } +} + diff --git a/osal/host/taskHelpers.h b/osal/host/taskHelpers.h new file mode 100644 index 00000000..fa00490f --- /dev/null +++ b/osal/host/taskHelpers.h @@ -0,0 +1,16 @@ +#ifndef FSFW_OSAL_HOST_TASKHELPERS_H_ +#define FSFW_OSAL_HOST_TASKHELPERS_H_ + +#include +#include + +namespace tasks { + +ReturnValue_t insertTaskName(std::thread::id threadId, std::string taskName); +std::string getTaskName(std::thread::id threadId); + +} + + + +#endif /* FSFW_OSAL_HOST_TASKHELPERS_H_ */ diff --git a/osal/windows/winTaskHelpers.cpp b/osal/windows/winTaskHelpers.cpp index e96cd70e..6765b952 100644 --- a/osal/windows/winTaskHelpers.cpp +++ b/osal/windows/winTaskHelpers.cpp @@ -1,9 +1,6 @@ #include #include -std::mutex nameMapLock; -std::map taskNameMap; - TaskPriority tasks::makeWinPriority(PriorityClass prioClass, PriorityNumber prioNumber) { return (static_cast(prioClass) << 16) | static_cast (prioNumber); } @@ -108,23 +105,3 @@ ReturnValue_t tasks::setTaskPriority(HANDLE nativeHandle, TaskPriority priority) } return HasReturnvaluesIF::RETURN_OK; } - -ReturnValue_t tasks::insertTaskName(std::thread::id threadId, std::string taskName) { - std::lock_guard lg(nameMapLock); - auto returnPair = taskNameMap.emplace(threadId, taskName); - if(not returnPair.second) { - return HasReturnvaluesIF::RETURN_FAILED; - } - return HasReturnvaluesIF::RETURN_OK; -} - -std::string tasks::getTaskName(std::thread::id threadId) { - std::lock_guard lg(nameMapLock); - auto resultIter = taskNameMap.find(threadId); - if(resultIter != taskNameMap.end()) { - return resultIter->second; - } - else { - return "Unknown task"; - } -} diff --git a/osal/windows/winTaskHelpers.h b/osal/windows/winTaskHelpers.h index d17b611a..64e52672 100644 --- a/osal/windows/winTaskHelpers.h +++ b/osal/windows/winTaskHelpers.h @@ -31,9 +31,6 @@ void getWinPriorityParameters(TaskPriority priority, DWORD& priorityClass, ReturnValue_t setTaskPriority(HANDLE nativeHandle, TaskPriority priority); -ReturnValue_t insertTaskName(std::thread::id threadId, std::string taskName); -std::string getTaskName(std::thread::id threadId); - } #endif