some tweaks
This commit is contained in:
parent
3c316218f7
commit
94fa917202
@ -1,5 +1,5 @@
|
|||||||
#include "../../osal/FreeRTOS/BinSemaphUsingTask.h"
|
#include "BinSemaphUsingTask.h"
|
||||||
#include "../../osal/FreeRTOS/TaskManagement.h"
|
#include "TaskManagement.h"
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
||||||
|
|
||||||
BinarySemaphoreUsingTask::BinarySemaphoreUsingTask() {
|
BinarySemaphoreUsingTask::BinarySemaphoreUsingTask() {
|
||||||
@ -16,6 +16,10 @@ BinarySemaphoreUsingTask::~BinarySemaphoreUsingTask() {
|
|||||||
xTaskNotifyAndQuery(handle, 0, eSetValueWithOverwrite, nullptr);
|
xTaskNotifyAndQuery(handle, 0, eSetValueWithOverwrite, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BinarySemaphoreUsingTask::refreshTaskHandle() {
|
||||||
|
handle = TaskManagement::getCurrentTaskHandle();
|
||||||
|
}
|
||||||
|
|
||||||
ReturnValue_t BinarySemaphoreUsingTask::acquire(TimeoutType timeoutType,
|
ReturnValue_t BinarySemaphoreUsingTask::acquire(TimeoutType timeoutType,
|
||||||
uint32_t timeoutMs) {
|
uint32_t timeoutMs) {
|
||||||
TickType_t timeout = 0;
|
TickType_t timeout = 0;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef FRAMEWORK_OSAL_FREERTOS_BINSEMAPHUSINGTASK_H_
|
#ifndef FSFW_OSAL_FREERTOS_BINSEMAPHUSINGTASK_H_
|
||||||
#define FRAMEWORK_OSAL_FREERTOS_BINSEMAPHUSINGTASK_H_
|
#define FSFW_OSAL_FREERTOS_BINSEMAPHUSINGTASK_H_
|
||||||
|
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
#include "../../returnvalues/HasReturnvaluesIF.h"
|
||||||
#include "../../tasks/SemaphoreIF.h"
|
#include "../../tasks/SemaphoreIF.h"
|
||||||
@ -7,13 +7,20 @@
|
|||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/task.h>
|
#include <freertos/task.h>
|
||||||
|
|
||||||
|
// todo: does not work for older FreeRTOS version, so we should
|
||||||
|
// actually check whether tskKERNEL_VERSION_MAJOR is larger than.. 7 or 8 ?
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Binary Semaphore implementation using the task notification value.
|
* @brief Binary Semaphore implementation using the task notification value.
|
||||||
* The notification value should therefore not be used
|
* The notification value should therefore not be used
|
||||||
* for other purposes.
|
* for other purposes!
|
||||||
* @details
|
* @details
|
||||||
* Additional information: https://www.freertos.org/RTOS-task-notifications.html
|
* Additional information: https://www.freertos.org/RTOS-task-notifications.html
|
||||||
* and general semaphore documentation.
|
* and general semaphore documentation.
|
||||||
|
* This semaphore is bound to the task it is created in!
|
||||||
|
* Take care of building this class with the correct executing task,
|
||||||
|
* (for example in the initializeAfterTaskCreation() function) or
|
||||||
|
* by calling refreshTaskHandle() with the correct executing task.
|
||||||
*/
|
*/
|
||||||
class BinarySemaphoreUsingTask: public SemaphoreIF,
|
class BinarySemaphoreUsingTask: public SemaphoreIF,
|
||||||
public HasReturnvaluesIF {
|
public HasReturnvaluesIF {
|
||||||
@ -25,6 +32,16 @@ public:
|
|||||||
//! @brief Default dtor
|
//! @brief Default dtor
|
||||||
virtual~ BinarySemaphoreUsingTask();
|
virtual~ BinarySemaphoreUsingTask();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function can be used to get the correct task handle from the
|
||||||
|
* currently executing task.
|
||||||
|
*
|
||||||
|
* This is required because the task notification value will be used
|
||||||
|
* as a binary semaphore, and the semaphore might be created by another
|
||||||
|
* task.
|
||||||
|
*/
|
||||||
|
void refreshTaskHandle();
|
||||||
|
|
||||||
ReturnValue_t acquire(TimeoutType timeoutType = TimeoutType::BLOCKING,
|
ReturnValue_t acquire(TimeoutType timeoutType = TimeoutType::BLOCKING,
|
||||||
uint32_t timeoutMs = portMAX_DELAY) override;
|
uint32_t timeoutMs = portMAX_DELAY) override;
|
||||||
ReturnValue_t release() override;
|
ReturnValue_t release() override;
|
||||||
@ -67,10 +84,10 @@ public:
|
|||||||
* - @c RETURN_FAILED on failure
|
* - @c RETURN_FAILED on failure
|
||||||
*/
|
*/
|
||||||
static ReturnValue_t releaseFromISR(TaskHandle_t taskToNotify,
|
static ReturnValue_t releaseFromISR(TaskHandle_t taskToNotify,
|
||||||
BaseType_t * higherPriorityTaskWoken);
|
BaseType_t* higherPriorityTaskWoken);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TaskHandle_t handle;
|
TaskHandle_t handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FRAMEWORK_OSAL_FREERTOS_BINSEMAPHUSINGTASK_H_ */
|
#endif /* FSFW_OSAL_FREERTOS_BINSEMAPHUSINGTASK_H_ */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include "../../osal/FreeRTOS/BinarySemaphore.h"
|
#include "BinarySemaphore.h"
|
||||||
#include "../../osal/FreeRTOS/TaskManagement.h"
|
#include "TaskManagement.h"
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
||||||
|
|
||||||
BinarySemaphore::BinarySemaphore() {
|
BinarySemaphore::BinarySemaphore() {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef FRAMEWORK_OSAL_FREERTOS_BINARYSEMPAHORE_H_
|
#ifndef FSFW_OSAL_FREERTOS_BINARYSEMPAHORE_H_
|
||||||
#define FRAMEWORK_OSAL_FREERTOS_BINARYSEMPAHORE_H_
|
#define FSFW_OSAL_FREERTOS_BINARYSEMPAHORE_H_
|
||||||
|
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
#include "../../returnvalues/HasReturnvaluesIF.h"
|
||||||
#include "../../tasks/SemaphoreIF.h"
|
#include "../../tasks/SemaphoreIF.h"
|
||||||
@ -104,4 +104,4 @@ protected:
|
|||||||
SemaphoreHandle_t handle;
|
SemaphoreHandle_t handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FRAMEWORK_OSAL_FREERTOS_BINARYSEMPAHORE_H_ */
|
#endif /* FSFW_OSAL_FREERTOS_BINARYSEMPAHORE_H_ */
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
#include "Timekeeper.h"
|
||||||
|
|
||||||
#include "../../timemanager/Clock.h"
|
#include "../../timemanager/Clock.h"
|
||||||
#include "../../globalfunctions/timevalOperations.h"
|
#include "../../globalfunctions/timevalOperations.h"
|
||||||
#include "Timekeeper.h"
|
|
||||||
|
|
||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/task.h>
|
#include <freertos/task.h>
|
||||||
@ -67,6 +68,13 @@ ReturnValue_t Clock::getUptime(uint32_t* uptimeMs) {
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//uint32_t Clock::getUptimeSeconds() {
|
||||||
|
// timeval uptime = getUptime();
|
||||||
|
// return uptime.tv_sec;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
ReturnValue_t Clock::getClock_usecs(uint64_t* time) {
|
ReturnValue_t Clock::getClock_usecs(uint64_t* time) {
|
||||||
timeval time_timeval;
|
timeval time_timeval;
|
||||||
ReturnValue_t result = getClock_timeval(&time_timeval);
|
ReturnValue_t result = getClock_timeval(&time_timeval);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "../../osal/FreeRTOS/CountingSemaphUsingTask.h"
|
#include "CountingSemaphUsingTask.h"
|
||||||
#include "../../osal/FreeRTOS/TaskManagement.h"
|
#include "TaskManagement.h"
|
||||||
|
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
||||||
|
|
||||||
CountingSemaphoreUsingTask::CountingSemaphoreUsingTask(const uint8_t maxCount,
|
CountingSemaphoreUsingTask::CountingSemaphoreUsingTask(const uint8_t maxCount,
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
#ifndef FRAMEWORK_OSAL_FREERTOS_COUNTINGSEMAPHUSINGTASK_H_
|
#ifndef FSFW_OSAL_FREERTOS_COUNTINGSEMAPHUSINGTASK_H_
|
||||||
#define FRAMEWORK_OSAL_FREERTOS_COUNTINGSEMAPHUSINGTASK_H_
|
#define FSFW_OSAL_FREERTOS_COUNTINGSEMAPHUSINGTASK_H_
|
||||||
|
|
||||||
#include "../../osal/FreeRTOS/CountingSemaphUsingTask.h"
|
#include "CountingSemaphUsingTask.h"
|
||||||
#include "../../tasks/SemaphoreIF.h"
|
#include "../../tasks/SemaphoreIF.h"
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/task.h>
|
#include <freertos/task.h>
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Couting Semaphore implementation which uses the notification value
|
* @brief Couting Semaphore implementation which uses the notification value
|
||||||
@ -16,6 +14,9 @@ extern "C" {
|
|||||||
* @details
|
* @details
|
||||||
* Additional information: https://www.freertos.org/RTOS-task-notifications.html
|
* Additional information: https://www.freertos.org/RTOS-task-notifications.html
|
||||||
* and general semaphore documentation.
|
* and general semaphore documentation.
|
||||||
|
* This semaphore is bound to the task it is created in!
|
||||||
|
* Take care of calling this function with the correct executing task,
|
||||||
|
* (for example in the initializeAfterTaskCreation() function).
|
||||||
*/
|
*/
|
||||||
class CountingSemaphoreUsingTask: public SemaphoreIF {
|
class CountingSemaphoreUsingTask: public SemaphoreIF {
|
||||||
public:
|
public:
|
||||||
@ -99,4 +100,4 @@ private:
|
|||||||
const uint8_t maxCount;
|
const uint8_t maxCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FRAMEWORK_OSAL_FREERTOS_COUNTINGSEMAPHUSINGTASK_H_ */
|
#endif /* FSFW_OSAL_FREERTOS_COUNTINGSEMAPHUSINGTASK_H_ */
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "../../osal/FreeRTOS/CountingSemaphore.h"
|
#include "CountingSemaphore.h"
|
||||||
|
#include "TaskManagement.h"
|
||||||
|
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
||||||
#include "../../osal/FreeRTOS/TaskManagement.h"
|
|
||||||
|
|
||||||
#include <freertos/semphr.h>
|
#include <freertos/semphr.h>
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#ifndef FRAMEWORK_OSAL_FREERTOS_COUNTINGSEMAPHORE_H_
|
#ifndef FRAMEWORK_OSAL_FREERTOS_COUNTINGSEMAPHORE_H_
|
||||||
#define FRAMEWORK_OSAL_FREERTOS_COUNTINGSEMAPHORE_H_
|
#define FRAMEWORK_OSAL_FREERTOS_COUNTINGSEMAPHORE_H_
|
||||||
#include "../../osal/FreeRTOS/BinarySemaphore.h"
|
|
||||||
|
#include "BinarySemaphore.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Counting semaphores, which can be acquire more than once.
|
* @brief Counting semaphores, which can be acquire more than once.
|
||||||
|
@ -11,7 +11,12 @@ MessageQueue::MessageQueue(size_t messageDepth, size_t maxMessageSize):
|
|||||||
maxMessageSize(maxMessageSize) {
|
maxMessageSize(maxMessageSize) {
|
||||||
handle = xQueueCreate(messageDepth, maxMessageSize);
|
handle = xQueueCreate(messageDepth, maxMessageSize);
|
||||||
if (handle == nullptr) {
|
if (handle == nullptr) {
|
||||||
sif::error << "MessageQueue::MessageQueue Creation failed" << std::endl;
|
sif::error << "MessageQueue::MessageQueue:"
|
||||||
|
<< " Creation failed." << std::endl;
|
||||||
|
sif::error << "Specified Message Depth: " << messageDepth
|
||||||
|
<< std::endl;
|
||||||
|
sif::error << "Specified Maximum Message Size: "
|
||||||
|
<< maxMessageSize << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
#ifndef FSFW_OSAL_FREERTOS_MESSAGEQUEUE_H_
|
#ifndef FSFW_OSAL_FREERTOS_MESSAGEQUEUE_H_
|
||||||
#define FSFW_OSAL_FREERTOS_MESSAGEQUEUE_H_
|
#define FSFW_OSAL_FREERTOS_MESSAGEQUEUE_H_
|
||||||
|
|
||||||
|
#include "TaskManagement.h"
|
||||||
|
|
||||||
#include "../../internalError/InternalErrorReporterIF.h"
|
#include "../../internalError/InternalErrorReporterIF.h"
|
||||||
#include "../../ipc/MessageQueueIF.h"
|
#include "../../ipc/MessageQueueIF.h"
|
||||||
#include "../../ipc/MessageQueueMessageIF.h"
|
#include "../../ipc/MessageQueueMessageIF.h"
|
||||||
#include "../../osal/FreeRTOS/TaskManagement.h"
|
|
||||||
|
|
||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/queue.h>
|
#include <freertos/queue.h>
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
|
#include "Mutex.h"
|
||||||
|
|
||||||
#include "../../ipc/MutexFactory.h"
|
#include "../../ipc/MutexFactory.h"
|
||||||
|
|
||||||
#include "../FreeRTOS/Mutex.h"
|
|
||||||
|
|
||||||
//TODO: Different variant than the lazy loading in QueueFactory. What's better and why? -> one is on heap the other on bss/data
|
//TODO: Different variant than the lazy loading in QueueFactory.
|
||||||
|
//What's better and why? -> one is on heap the other on bss/data
|
||||||
//MutexFactory* MutexFactory::factoryInstance = new MutexFactory();
|
//MutexFactory* MutexFactory::factoryInstance = new MutexFactory();
|
||||||
MutexFactory* MutexFactory::factoryInstance = NULL;
|
MutexFactory* MutexFactory::factoryInstance = nullptr;
|
||||||
|
|
||||||
MutexFactory::MutexFactory() {
|
MutexFactory::MutexFactory() {
|
||||||
}
|
}
|
||||||
@ -13,7 +15,7 @@ MutexFactory::~MutexFactory() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MutexFactory* MutexFactory::instance() {
|
MutexFactory* MutexFactory::instance() {
|
||||||
if (factoryInstance == NULL){
|
if (factoryInstance == nullptr){
|
||||||
factoryInstance = new MutexFactory();
|
factoryInstance = new MutexFactory();
|
||||||
}
|
}
|
||||||
return MutexFactory::factoryInstance;
|
return MutexFactory::factoryInstance;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#include "MessageQueue.h"
|
|
||||||
|
|
||||||
#include "../../ipc/MessageQueueSenderIF.h"
|
#include "../../ipc/MessageQueueSenderIF.h"
|
||||||
#include "../../ipc/QueueFactory.h"
|
#include "../../ipc/QueueFactory.h"
|
||||||
|
|
||||||
|
#include "../../osal/FreeRTOS/MessageQueue.h"
|
||||||
|
|
||||||
|
|
||||||
QueueFactory* QueueFactory::factoryInstance = nullptr;
|
QueueFactory* QueueFactory::factoryInstance = nullptr;
|
||||||
|
|
||||||
|
@ -13,32 +13,30 @@ TaskFactory::~TaskFactory() {
|
|||||||
TaskFactory* TaskFactory::instance() {
|
TaskFactory* TaskFactory::instance() {
|
||||||
return TaskFactory::factoryInstance;
|
return TaskFactory::factoryInstance;
|
||||||
}
|
}
|
||||||
/***
|
|
||||||
* Keep in Mind that you need to call before this vTaskStartScheduler()!
|
|
||||||
* High taskPriority_ number means high priority.
|
|
||||||
*/
|
|
||||||
PeriodicTaskIF* TaskFactory::createPeriodicTask(TaskName name_,
|
PeriodicTaskIF* TaskFactory::createPeriodicTask(TaskName name_,
|
||||||
TaskPriority taskPriority_, TaskStackSize stackSize_,
|
TaskPriority taskPriority_, TaskStackSize stackSize_,
|
||||||
TaskPeriod period_,
|
TaskPeriod period_,
|
||||||
TaskDeadlineMissedFunction deadLineMissedFunction_) {
|
TaskDeadlineMissedFunction deadLineMissedFunction_) {
|
||||||
return (PeriodicTaskIF*) (new PeriodicTask(name_, taskPriority_, stackSize_,
|
return dynamic_cast<PeriodicTaskIF*>(new PeriodicTask(name_, taskPriority_,
|
||||||
period_, deadLineMissedFunction_));
|
stackSize_, period_, deadLineMissedFunction_));
|
||||||
}
|
}
|
||||||
/***
|
|
||||||
|
/**
|
||||||
* Keep in Mind that you need to call before this vTaskStartScheduler()!
|
* Keep in Mind that you need to call before this vTaskStartScheduler()!
|
||||||
*/
|
*/
|
||||||
FixedTimeslotTaskIF* TaskFactory::createFixedTimeslotTask(TaskName name_,
|
FixedTimeslotTaskIF* TaskFactory::createFixedTimeslotTask(TaskName name_,
|
||||||
TaskPriority taskPriority_, TaskStackSize stackSize_,
|
TaskPriority taskPriority_, TaskStackSize stackSize_,
|
||||||
TaskPeriod period_,
|
TaskPeriod period_,
|
||||||
TaskDeadlineMissedFunction deadLineMissedFunction_) {
|
TaskDeadlineMissedFunction deadLineMissedFunction_) {
|
||||||
return (FixedTimeslotTaskIF*) (new FixedTimeslotTask(name_, taskPriority_,
|
return dynamic_cast<FixedTimeslotTaskIF*>(new FixedTimeslotTask(name_,
|
||||||
stackSize_, period_, deadLineMissedFunction_));
|
taskPriority_,stackSize_, period_, deadLineMissedFunction_));
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t TaskFactory::deleteTask(PeriodicTaskIF* task) {
|
ReturnValue_t TaskFactory::deleteTask(PeriodicTaskIF* task) {
|
||||||
if (task == NULL) {
|
if (task == nullptr) {
|
||||||
//delete self
|
//delete self
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(nullptr);
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
} else {
|
} else {
|
||||||
//TODO not implemented
|
//TODO not implemented
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "../../osal/FreeRTOS/TaskManagement.h"
|
#include "TaskManagement.h"
|
||||||
|
|
||||||
void TaskManagement::vRequestContextSwitchFromTask() {
|
void TaskManagement::vRequestContextSwitchFromTask() {
|
||||||
vTaskDelay(0);
|
vTaskDelay(0);
|
||||||
|
@ -3,10 +3,9 @@
|
|||||||
|
|
||||||
#include "../../returnvalues/HasReturnvaluesIF.h"
|
#include "../../returnvalues/HasReturnvaluesIF.h"
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/task.h>
|
#include <freertos/task.h>
|
||||||
}
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "Timekeeper.h"
|
#include "Timekeeper.h"
|
||||||
|
|
||||||
#include "FreeRTOSConfig.h"
|
#include <FreeRTOSConfig.h>
|
||||||
|
|
||||||
Timekeeper * Timekeeper::myinstance = nullptr;
|
Timekeeper * Timekeeper::myinstance = nullptr;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef FRAMEWORK_TIMEMANAGER_CLOCK_H_
|
#ifndef FSFW_TIMEMANAGER_CLOCK_H_
|
||||||
#define FRAMEWORK_TIMEMANAGER_CLOCK_H_
|
#define FSFW_TIMEMANAGER_CLOCK_H_
|
||||||
|
|
||||||
#include "../returnvalues/HasReturnvaluesIF.h"
|
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||||
#include "../ipc/MutexHelper.h"
|
#include "../ipc/MutexHelper.h"
|
||||||
@ -151,4 +151,4 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif /* FRAMEWORK_TIMEMANAGER_CLOCK_H_ */
|
#endif /* FSFW_TIMEMANAGER_CLOCK_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user