|
@ -7,24 +7,25 @@ using namespace std; |
|
|
static void zosthread_default_task(void const *argument) { |
|
|
static void zosthread_default_task(void const *argument) { |
|
|
ZThread *thread = (ZThread *)argument; |
|
|
ZThread *thread = (ZThread *)argument; |
|
|
ZASSERT(thread); |
|
|
ZASSERT(thread); |
|
|
thread->m_threadisworkingFlag = false; |
|
|
|
|
|
thread->m_threadisWaitingForStopFlag = false; |
|
|
|
|
|
|
|
|
thread->threadcb(); |
|
|
|
|
|
}; |
|
|
|
|
|
void ZThread::threadcb() { |
|
|
|
|
|
m_status = kidle; |
|
|
|
|
|
|
|
|
while (true) { |
|
|
while (true) { |
|
|
if (thread->m_threadisworkingFlagCallSide) { |
|
|
|
|
|
thread->m_threadisworkingFlag = true; |
|
|
|
|
|
thread->m_taskfunction(); |
|
|
|
|
|
|
|
|
if (m_threadisworkingFlagCallSide) { |
|
|
|
|
|
m_status = kworking; |
|
|
|
|
|
m_taskfunction(); |
|
|
|
|
|
m_status = kdead; |
|
|
|
|
|
|
|
|
thread->m_threadisWaitingForStopFlag = true; |
|
|
|
|
|
while (thread->m_threadisworkingFlagCallSide) { |
|
|
|
|
|
|
|
|
while (m_threadisworkingFlagCallSide) { |
|
|
vTaskDelay(10); |
|
|
vTaskDelay(10); |
|
|
} |
|
|
} |
|
|
thread->m_threadisworkingFlag = false; |
|
|
|
|
|
thread->m_threadisWaitingForStopFlag = false; |
|
|
|
|
|
|
|
|
m_status = kidle; |
|
|
} |
|
|
} |
|
|
vTaskDelay(10); |
|
|
vTaskDelay(10); |
|
|
} |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void ZThread::init(const char *threadname, int stack_size, osPriority priority) { |
|
|
void ZThread::init(const char *threadname, int stack_size, osPriority priority) { |
|
|
int r_task_create = 0; |
|
|
int r_task_create = 0; |
|
@ -52,7 +53,7 @@ void ZThread::start(zosthread_cb_t cb) { |
|
|
xSemaphoreTake(m_lock, portMAX_DELAY); |
|
|
xSemaphoreTake(m_lock, portMAX_DELAY); |
|
|
m_threadisworkingFlagCallSide = true; |
|
|
m_threadisworkingFlagCallSide = true; |
|
|
// xEventGroupSetBits(m_zthreadstartworkevent, 0x01);
|
|
|
// xEventGroupSetBits(m_zthreadstartworkevent, 0x01);
|
|
|
while (!m_threadisworkingFlag) { |
|
|
|
|
|
|
|
|
while (m_status != kidle) { |
|
|
xTaskNotifyGive(m_defaultTaskHandle); |
|
|
xTaskNotifyGive(m_defaultTaskHandle); |
|
|
vTaskDelay(1); |
|
|
vTaskDelay(1); |
|
|
} |
|
|
} |
|
@ -63,7 +64,7 @@ void ZThread::stop() { |
|
|
xSemaphoreTake(m_lock, portMAX_DELAY); |
|
|
xSemaphoreTake(m_lock, portMAX_DELAY); |
|
|
m_threadisworkingFlagCallSide = false; |
|
|
m_threadisworkingFlagCallSide = false; |
|
|
// xEventGroupSetBits(m_zthreadstartworkevent, 0x01);
|
|
|
// xEventGroupSetBits(m_zthreadstartworkevent, 0x01);
|
|
|
while (m_threadisworkingFlag) { |
|
|
|
|
|
|
|
|
while (m_status != kidle) { |
|
|
xTaskNotifyGive(m_defaultTaskHandle); |
|
|
xTaskNotifyGive(m_defaultTaskHandle); |
|
|
vTaskDelay(1); |
|
|
vTaskDelay(1); |
|
|
} |
|
|
} |
|
|