You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.0 KiB
54 lines
1.0 KiB
#pragma once
|
|
#include <functional>
|
|
extern "C" {
|
|
#include "cmsis_os.h"
|
|
}
|
|
namespace iflytop {
|
|
using namespace std;
|
|
|
|
typedef function<void()> zosthread_cb_t;
|
|
|
|
class ZThread {
|
|
public:
|
|
typedef enum {
|
|
kidle,
|
|
kworking,
|
|
kdead,
|
|
} status_t;
|
|
|
|
const char* m_name;
|
|
uint32_t m_stacksize;
|
|
osPriority m_uxPriority;
|
|
|
|
status_t m_status = kidle;
|
|
|
|
bool m_threadisworkingFlagCallSide = false;
|
|
|
|
zosthread_cb_t m_taskfunction;
|
|
zosthread_cb_t m_taskfunction_exitcb;
|
|
EventGroupHandle_t m_zthreadstartworkevent;
|
|
|
|
osThreadId m_defaultTaskHandle;
|
|
|
|
SemaphoreHandle_t m_lock;
|
|
|
|
public:
|
|
|
|
void init(const char* threadname, int stack_size = 512, osPriority priority = osPriorityNormal);
|
|
void start(zosthread_cb_t cb);
|
|
void start(zosthread_cb_t cb, zosthread_cb_t exitcb);
|
|
void stop();
|
|
|
|
bool getExitFlag() { return !m_threadisworkingFlagCallSide; }
|
|
bool isworking() { return m_status == kworking; }
|
|
|
|
void wake();
|
|
|
|
static void sleep(uint32_t ms);
|
|
|
|
public:
|
|
void threadcb();
|
|
};
|
|
|
|
|
|
} // namespace iflytop
|