QueueManager & Master: Base for queues.

This commit is contained in:
RedHawk 2023-04-25 23:57:18 +03:00
parent d589a8734d
commit 98e9e11355
5 changed files with 81 additions and 4 deletions

View File

@ -12,9 +12,24 @@ int main(void)
SystemCoreClockUpdate(); SystemCoreClockUpdate();
Board_Init(); Board_Init();
ThreadCommon::ThreadManager manager; ThreadCommon::ThreadManager manager;
ThreadCommon::QueueManager* qmanager = new ThreadCommon::QueueManager;
//Creating queues
qmanager->createQueue(100,
sizeof(ThreadCommon::Event),
ThreadCommon::QueueManager::master_event_all);
//Creating tasks
manager.createTask(master_thread, "master", manager.createTask(master_thread, "master",
configMINIMAL_STACK_SIZE * 10,tskIDLE_PRIORITY + 1UL, configMINIMAL_STACK_SIZE * 10,tskIDLE_PRIORITY + 1UL,
nullptr); static_cast<void*>(qmanager));
//<Queue_test>
QueueHandle_t master_event_all_q = qmanager->getQueue(ThreadCommon::QueueManager::master_event_all);
ThreadCommon::Event* e = new ThreadCommon::Event(ThreadCommon::Null, 0);
xQueueSend(master_event_all_q, static_cast<void *>(e), 0);
//</Queue_test>
// Start the real time kernel with preemption. // Start the real time kernel with preemption.
//FreeRTOS::Kernel::startScheduler(); //FreeRTOS::Kernel::startScheduler();
vTaskStartScheduler (); vTaskStartScheduler ();

View File

@ -0,0 +1,32 @@
/*
* QueueManager.cpp
*
* Created on: 24 Apr 2023
* Author: tylen
*/
#include "ThreadCommon.h"
ThreadCommon::QueueManager::QueueManager() {}
bool ThreadCommon::QueueManager::createQueue(size_t queue_length, size_t item_size, Queue_id qid)
{
QueueHandle_t queue_to_create;
if ((queue_to_create = xQueueCreate(queue_length, item_size)))
{
queues.insert({qid, queue_to_create});
return true;
}
return false;
}
QueueHandle_t ThreadCommon::QueueManager::getQueue(Queue_id qid)
{
const auto pos = queues.find(qid);
if (pos == queues.end())
return nullptr;
return pos->second;
//return queues.at(qid);
}

View File

@ -11,6 +11,7 @@
#include "board.h" #include "board.h"
#include "FreeRTOS.h" #include "FreeRTOS.h"
#include <string> #include <string>
#include <map>
#include "queue.h" #include "queue.h"
#include "task.h" #include "task.h"
#include <assert.h> #include <assert.h>
@ -19,6 +20,7 @@ namespace ThreadCommon
{ {
typedef enum EventType typedef enum EventType
{ {
Null,
Rotary, Rotary,
Temperature, Temperature,
Manager Manager
@ -61,12 +63,31 @@ namespace ThreadCommon
private: private:
}; };
class QueueManager
{
public:
enum Queue_id {
master_event_all,
relay_event_master,
manager_event_master,
ui_event_manager
};
QueueManager();
~QueueManager() = default;
bool createQueue(size_t queue_length, size_t item_size, Queue_id qid);
QueueHandle_t getQueue(Queue_id qid);
private:
std::map <Queue_id, QueueHandle_t> queues;
};
/* global variables */ /* global variables */
/* 'receiver'_'what'_'sender'_q */ /* 'receiver'_'what'_'sender'_q */
/*
extern QueueHandle_t master_event_all_q; extern QueueHandle_t master_event_all_q;
extern QueueHandle_t relay_event_master_q; extern QueueHandle_t relay_event_master_q;
extern QueueHandle_t manager_event_master_q; extern QueueHandle_t manager_event_master_q;
extern QueueHandle_t ui_event_manager_q; extern QueueHandle_t ui_event_manager_q;
*/
} }
#endif /*__THREAD_COMMON_H_*/ #endif /*__THREAD_COMMON_H_*/

View File

@ -7,10 +7,18 @@
#include "Master.h" #include "Master.h"
Master::Master(ThreadCommon::QueueManager* qm) : _qm(qm)
{
}
void Master::taskFunction() { void Master::taskFunction() {
QueueHandle_t master_event_all_q = _qm->getQueue(ThreadCommon::QueueManager::master_event_all);
ThreadCommon::Event* data;
int led = 0; int led = 0;
bool LedState = true; bool LedState = true;
for (;;) { for (;;) {
xQueueReceive(master_event_all_q, static_cast<void*>(data), portMAX_DELAY);
Board_LED_Set(led, LedState); Board_LED_Set(led, LedState);
LedState = (bool) !LedState; LedState = (bool) !LedState;
led++; led++;
@ -23,6 +31,6 @@ void Master::taskFunction() {
void master_thread(void* pvParams) { void master_thread(void* pvParams) {
Master m; Master m(static_cast<ThreadCommon::QueueManager*>(pvParams));
m.taskFunction(); m.taskFunction();
} }

View File

@ -16,7 +16,7 @@
class Master { class Master {
public: public:
Master(){}; Master(ThreadCommon::QueueManager* qm);
virtual ~Master() = default; virtual ~Master() = default;
void taskFunction(); void taskFunction();
@ -24,6 +24,7 @@ public:
//Master& operator=(Master&&) noexcept = default; //Master& operator=(Master&&) noexcept = default;
private: private:
ThreadCommon::Event* message; ThreadCommon::Event* message;
ThreadCommon::QueueManager* _qm;
}; };
void master_thread(void* pvParams); void master_thread(void* pvParams);