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    }

CMSIS Example - Mail and Timer

时间: 2024-10-14 02:09:15

CMSIS Example - Mail and Timer的相关文章

CMSIS Example - Mail and Message

1 /*---------------------------------------------------------------------------- 2 * RL-ARM - RTX 3 *---------------------------------------------------------------------------- 4 * Name: MAIL.C 5 * Purpose: RTX example program 6 *-------------------

CMSIS RTOS -- embOS segger

#ifndef __CMSIS_OS_H__ #define __CMSIS_OS_H__ #include <stdint.h> #include <stddef.h> #include "RTOS.h" // API version (main [31:16] .sub [15:0]) #define osCMSIS 0x10002 // RTOS identification and version (main [31:16] .sub [15:0]) #

CMSIS OS None

/* ---------------------------------------------------------------------- * Copyright (C) 2011 ARM Limited. All rights reserved. * * $Date: 10. Februar 2012 * $Revision: V0.03 * * Project: CMSIS-RTOS API * Title: cmsis_os.h template header file * * V

ARM Cortex-M3 异常优先级以及CMSIS RTOS RTX的中断优先级

通常异常包括一些系统异常,以及中断. 异常类型 Cortex-M3处理器支持多种类型的异常: RESET, NMI, HardWare Fault; PSV,SVC等可编程中断: 其他的可编程中断,例如timer,GPIO等. 其中第1类异常的优先级是固定,不可改变的.其他都是可以修改的. Cortex-M3处理器提供了PRIMASK选项,用来屏蔽所有可编程的中断:提供了FAULTMASK来屏蔽HardWare Fault和所有可屏蔽中断. 异常优先级 Cortex-M3处理器支持NVIC的中断

cmsis-rtos v1.02不支持Mail Queue?

STM32CubeMX默认支持Freertos. /* USER CODE BEGIN Variables */ osMailQDef(mail, 6, uint8_t); /* USER CODE END Variables */ cmsis-rtos文档中有对邮件队列管理的描述,按照定义后,编译总是报错: ..\Src\freertos.c(52): error:  #151: a typedef name may not be redeclared as a parameter osMai

keil CMSIS PACK制作中文 手册

CMSIS-Pack 文档 CMSIS-Pack描述了一个软件组件,设备参数和评估板板级支持之间交互机制.基于xml的包描述文件(PDSC)描述一个软件的内容包(文件集合),包括: ?源代码,头文件和软件库 ?文档和源代码模板 ?设备以及启动代码和编程算法参数 ?示例项目 完整文件与PDSC文件的打包收集在ZIP格式的软件包.所述PDSC文件被设计为软件开发环境,并描述了用户和设备相关的上下文中这样的软件包提供的文件.软件包可用于多种用途(见下文). 安装软件包后,所有附带的软件组件提供给开发工

CMSIS Example - osTimer osTimerCreate osTimerStart

1 osTimerId timer; 2 3 uint32_t cnt=0; 4 void timerHandler( void * arg ) 5 { 6 cnt++; 7 osTimerStart( timer, 100 ); 8 } 9 10 osTimerDef( timer, timerHandler ); 11 12 13 void Thread0( void * arg); 14 void Thread1( void * arg); 15 16 osThreadDef( Threa

SysTick Software Timer

1 #ifndef __SYSTEM_H__ 2 #define __SYSTEM_H__ 3 4 #include <stdint.h> 5 #include <stddef.h> 6 7 #include "bsp.h" 8 9 extern void sys_srand( unsigned int seed ); 10 extern int sys_rand( void ); 11 12 extern uint32_t g_SysTick_Counter;

Linux发邮件之mail

1.安装 (需要sendmail或postfix服务) sendmail     # yum install sendmail      # systemctl start sendmail.service     # systemctl status sendmail.service postfix     # yum install mailx     # systemctl start postfix.service     # systemctl status postfix.servi