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();
Board_Init();
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",
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.
//FreeRTOS::Kernel::startScheduler();
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 "FreeRTOS.h"
#include <string>
#include <map>
#include "queue.h"
#include "task.h"
#include <assert.h>
@ -19,6 +20,7 @@ namespace ThreadCommon
{
typedef enum EventType
{
Null,
Rotary,
Temperature,
Manager
@ -61,12 +63,31 @@ namespace ThreadCommon
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 */
/* 'receiver'_'what'_'sender'_q */
/*
extern QueueHandle_t master_event_all_q;
extern QueueHandle_t relay_event_master_q;
extern QueueHandle_t manager_event_master_q;
extern QueueHandle_t ui_event_manager_q;
*/
}
#endif /*__THREAD_COMMON_H_*/

View File

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

View File

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