thread-manager: create master task with manager
This commit is contained in:
parent
f85bf8ef8d
commit
927409d2a8
@ -3,15 +3,18 @@
|
|||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include <cr_section_macros.h>
|
#include <cr_section_macros.h>
|
||||||
|
#include "common/ThreadCommon.h"
|
||||||
#include "Master.h"
|
#include "Master.h"
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
SystemCoreClockUpdate();
|
SystemCoreClockUpdate();
|
||||||
Board_Init();
|
Board_Init();
|
||||||
// Create a task before starting the scheduler.
|
ThreadCommon::ThreadManager manager;
|
||||||
Master master("Master", configMINIMAL_STACK_SIZE * 10, nullptr, tskIDLE_PRIORITY + 1UL);
|
manager.createTask(master_thread, "master",
|
||||||
|
configMINIMAL_STACK_SIZE * 10,tskIDLE_PRIORITY + 1UL,
|
||||||
|
nullptr);
|
||||||
// Start the real time kernel with preemption.
|
// Start the real time kernel with preemption.
|
||||||
//FreeRTOS::Kernel::startScheduler();
|
//FreeRTOS::Kernel::startScheduler();
|
||||||
vTaskStartScheduler ();
|
vTaskStartScheduler ();
|
||||||
|
|||||||
@ -4,9 +4,16 @@
|
|||||||
* Created on: 13 Apr 2023
|
* Created on: 13 Apr 2023
|
||||||
* Author: tylen
|
* Author: tylen
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __THREAD_COMMON_H_
|
||||||
|
#define __THREAD_COMMON_H_
|
||||||
|
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
|
#include <string>
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
namespace ThreadCommon
|
namespace ThreadCommon
|
||||||
{
|
{
|
||||||
@ -41,12 +48,25 @@ namespace ThreadCommon
|
|||||||
uint8_t _data;
|
uint8_t _data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ThreadManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ThreadManager();
|
||||||
|
~ThreadManager() = default;
|
||||||
|
bool createTask(void (*task_func)(void*),
|
||||||
|
std::string name,
|
||||||
|
size_t stack_size,
|
||||||
|
size_t priority,
|
||||||
|
void* parameters);
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
/* 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_*/
|
||||||
|
|||||||
21
source/shoh/src/threads/common/ThreadManager.cpp
Normal file
21
source/shoh/src/threads/common/ThreadManager.cpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#include "ThreadCommon.h"
|
||||||
|
|
||||||
|
|
||||||
|
ThreadCommon::ThreadManager::ThreadManager(){}
|
||||||
|
|
||||||
|
bool ThreadCommon::ThreadManager::createTask(void (*task_func)(void*),
|
||||||
|
std::string name,
|
||||||
|
size_t stack_size,
|
||||||
|
size_t priority,
|
||||||
|
void* parameters)
|
||||||
|
{
|
||||||
|
const char * t_name = name.c_str();
|
||||||
|
BaseType_t taskCreated = xTaskCreate(task_func,
|
||||||
|
t_name,
|
||||||
|
stack_size,
|
||||||
|
parameters,
|
||||||
|
priority,
|
||||||
|
NULL);
|
||||||
|
assert(taskCreated == pdPASS);
|
||||||
|
return (taskCreated == pdPASS);
|
||||||
|
}
|
||||||
@ -7,15 +7,8 @@
|
|||||||
|
|
||||||
#include "Master.h"
|
#include "Master.h"
|
||||||
|
|
||||||
Master::Master(std::string name, size_t stack_size, void* pvParams, size_t task_priority)
|
|
||||||
: name(name), stack_size(stack_size), pvParams(pvParams), task_priority(task_priority)
|
|
||||||
{
|
|
||||||
xTaskCreate (Master::taskWrapper, "Master_thread", this->stack_size, this->pvParams, this->task_priority, this->master_task_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
Master::~Master(){}
|
|
||||||
|
|
||||||
void Master::taskFunction() {
|
void Master::taskFunction() {
|
||||||
|
int led = 0;
|
||||||
bool LedState = true;
|
bool LedState = true;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
Board_LED_Set(led, LedState);
|
Board_LED_Set(led, LedState);
|
||||||
@ -27,3 +20,9 @@ void Master::taskFunction() {
|
|||||||
vTaskDelay(1000);
|
vTaskDelay(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void master_thread(void* pvParams) {
|
||||||
|
Master m;
|
||||||
|
m.taskFunction();
|
||||||
|
}
|
||||||
@ -16,26 +16,17 @@
|
|||||||
|
|
||||||
class Master {
|
class Master {
|
||||||
public:
|
public:
|
||||||
Master(std::string name, size_t stack_size, void* pvParams, size_t task_priority);
|
Master(){};
|
||||||
virtual ~Master();
|
virtual ~Master() = default;
|
||||||
void taskFunction();
|
void taskFunction();
|
||||||
|
|
||||||
static void taskWrapper(void *pvParams) {
|
|
||||||
Master* pSelf = reinterpret_cast<Master*>(pvParams);
|
|
||||||
pSelf->taskFunction();
|
|
||||||
}
|
|
||||||
|
|
||||||
//Master(Master&&) noexcept = default;
|
//Master(Master&&) noexcept = default;
|
||||||
//Master& operator=(Master&&) noexcept = default;
|
//Master& operator=(Master&&) noexcept = default;
|
||||||
private:
|
private:
|
||||||
int led;
|
ThreadCommon::Event* message;
|
||||||
std::string name;
|
|
||||||
size_t stack_size;
|
|
||||||
void* pvParams;
|
|
||||||
size_t task_priority;
|
|
||||||
TaskHandle_t* master_task_handle;
|
|
||||||
//std::shared_ptr<ThreadCommon::Event> message;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void master_thread(void* pvParams);
|
||||||
|
|
||||||
|
|
||||||
#endif /* THREADS_MASTER_MASTER_H_ */
|
#endif /* THREADS_MASTER_MASTER_H_ */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user