CMSIS Example - Mail and Timer
1 2 #include <stdint.h> 3 4 #include "bsp-fifisdr.h" 5 6 #include "lpclib.h" 7 #include "task-gui.h" 8 9 10 #define GUI_QUEUE_LENGTH (4) 11 12 13 typedef struct { 14 uint8_t opcode; 15 } GUI_Message; 16 17 18 /** Message opcodes for GUI task. */ 19 enum { 20 GUI_OPCODE_LED_TICK, 21 }; 22 23 24 /** Identifiers for OS timers. */ 25 enum { 26 GUI_TIMERMAGIC_LED, 27 }; 28 29 30 /** Local task context. */ 31 static struct { 32 osMailQId queue; 33 osTimerId ledTick; 34 int led; 35 } gui; 36 37 38 39 static void GUI_osalCallback (void const *pArgument) 40 { 41 (void) pArgument; 42 43 if (gui.queue == NULL) { 44 return; 45 } 46 47 GUI_Message *pMessage = osMailAlloc(gui.queue, 0); 48 49 if (pMessage == NULL) { 50 return; 51 } 52 53 pMessage->opcode = GUI_OPCODE_LED_TICK; 54 osMailPut(gui.queue, pMessage); 55 } 56 57 58 osMailQDef(guiQueue, GUI_QUEUE_LENGTH, GUI_Message); 59 osTimerDef(led, GUI_osalCallback); 60 61 void GUI_task (const void *pArgs) 62 { 63 (void) pArgs; 64 GUI_Message *pMessage; 65 osEvent event; 66 67 68 gui.queue = osMailCreate(osMailQ(guiQueue), NULL); 69 70 gui.ledTick = osTimerCreate(osTimer(led), osTimerPeriodic, (void *)GUI_TIMERMAGIC_LED); 71 osTimerStart(gui.ledTick, 500); 72 73 while (1) { 74 /* Is there a new message? */ 75 event = osMailGet(gui.queue, osWaitForever); 76 if (event.status == osEventMail) { 77 pMessage = (GUI_Message *)event.value.p; 78 switch (pMessage->opcode) { 79 case GUI_OPCODE_LED_TICK: 80 gui.led = gui.led ^ 1; 81 BSP_setLed(gui.led); 82 break; 83 } 84 85 osMailFree(gui.queue, pMessage); 86 } 87 } 88 }
分类:
RTOS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2013-07-18 Bus Blaster