CMSIS Example - Mail and Timer

时间:2023-03-10 07:26:13
CMSIS Example - Mail and Timer
    #include <stdint.h>

    #include "bsp-fifisdr.h"

    #include "lpclib.h"
#include "task-gui.h" #define GUI_QUEUE_LENGTH (4) typedef struct {
uint8_t opcode;
} GUI_Message; /** Message opcodes for GUI task. */
enum {
GUI_OPCODE_LED_TICK,
}; /** Identifiers for OS timers. */
enum {
GUI_TIMERMAGIC_LED,
}; /** Local task context. */
static struct {
osMailQId queue;
osTimerId ledTick;
int led;
} gui; static void GUI_osalCallback (void const *pArgument)
{
(void) pArgument; if (gui.queue == NULL) {
return;
} GUI_Message *pMessage = osMailAlloc(gui.queue, ); if (pMessage == NULL) {
return;
} pMessage->opcode = GUI_OPCODE_LED_TICK;
osMailPut(gui.queue, pMessage);
} osMailQDef(guiQueue, GUI_QUEUE_LENGTH, GUI_Message);
osTimerDef(led, GUI_osalCallback); void GUI_task (const void *pArgs)
{
(void) pArgs;
GUI_Message *pMessage;
osEvent event; gui.queue = osMailCreate(osMailQ(guiQueue), NULL); gui.ledTick = osTimerCreate(osTimer(led), osTimerPeriodic, (void *)GUI_TIMERMAGIC_LED);
osTimerStart(gui.ledTick, ); while () {
/* Is there a new message? */
event = osMailGet(gui.queue, osWaitForever);
if (event.status == osEventMail) {
pMessage = (GUI_Message *)event.value.p;
switch (pMessage->opcode) {
case GUI_OPCODE_LED_TICK:
gui.led = gui.led ^ ;
BSP_setLed(gui.led);
break;
} osMailFree(gui.queue, pMessage);
}
}
}