parent
c58787c95d
commit
7816d75563
@ -1,62 +0,0 @@ |
|||||||
//
|
|
||||||
// Created by MightyPork on 2017/11/21.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "platform.h" |
|
||||||
#include "task_sched.h" |
|
||||||
|
|
||||||
extern osMessageQId queSchedHandle; |
|
||||||
|
|
||||||
volatile uint32_t jobQueHighWaterMark = 0; |
|
||||||
|
|
||||||
/**
|
|
||||||
* Schedule a function for later execution in the jobs thread |
|
||||||
* |
|
||||||
* @param callback - the callback function |
|
||||||
*/ |
|
||||||
void scheduleJob(Job *job) |
|
||||||
{ |
|
||||||
QueueHandle_t que = queSchedHandle; |
|
||||||
|
|
||||||
assert_param(que != NULL); |
|
||||||
assert_param(job->cb != NULL); |
|
||||||
|
|
||||||
uint32_t count; |
|
||||||
if (inIRQ()) { |
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE; |
|
||||||
assert_param(pdPASS == xQueueSendFromISR(que, job, &xHigherPriorityTaskWoken)); |
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); |
|
||||||
|
|
||||||
#if USE_STACK_MONITOR |
|
||||||
count = (uint32_t) uxQueueMessagesWaitingFromISR(que); |
|
||||||
#endif |
|
||||||
} else { |
|
||||||
assert_param(pdPASS == xQueueSend(que, job, 100)); |
|
||||||
|
|
||||||
#if USE_STACK_MONITOR |
|
||||||
count = (uint32_t) uxQueueMessagesWaiting(que); |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
#if USE_STACK_MONITOR |
|
||||||
jobQueHighWaterMark = MAX(jobQueHighWaterMark, count); |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
/**
|
|
||||||
* job queue handler (for use in interrupts to do longer stuff on a thread) |
|
||||||
* |
|
||||||
* @param argument |
|
||||||
*/ |
|
||||||
void TaskJobQueue(const void *argument) |
|
||||||
{ |
|
||||||
dbg("> High priority queue task started!"); |
|
||||||
|
|
||||||
struct sched_que_item job; |
|
||||||
while (1) { |
|
||||||
xQueueReceive(queSchedHandle, &job, osWaitForever); |
|
||||||
|
|
||||||
assert_param(job.cb != NULL); |
|
||||||
job.cb(&job); |
|
||||||
} |
|
||||||
} |
|
@ -1,21 +0,0 @@ |
|||||||
//
|
|
||||||
// Created by MightyPork on 2017/11/21.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef GEX_TASK_SCHED_H |
|
||||||
#define GEX_TASK_SCHED_H |
|
||||||
|
|
||||||
#include "platform.h" |
|
||||||
#include "sched_queue.h" |
|
||||||
|
|
||||||
#if USE_STACK_MONITOR |
|
||||||
extern volatile uint32_t jobQueHighWaterMark; |
|
||||||
extern volatile uint32_t msgQueHighWaterMark; |
|
||||||
#endif |
|
||||||
|
|
||||||
extern osThreadId tskJobRunnerHandle; |
|
||||||
void TaskJobQueue(const void *argument); |
|
||||||
|
|
||||||
void scheduleJob(Job *job); |
|
||||||
|
|
||||||
#endif //GEX_TASK_SCHED_H
|
|
Loading…
Reference in new issue