API Functions
Create #if (configsupport_dynamic_allocation = = 1) #define Xqueuecreate (Uxqueuelength, uxitemsize) Xqueu Egenericcreate ((Uxqueuelength), (Uxitemsize), (queuequeue_type_base)) #endif queuehandle_t Xqueuegenericcreate (CO
NST ubasetype_t uxqueuelength, const ubasetype_t uxitemsize, const uint8_t ucqueuetype) #define Xqueuesend (Xqueue, Pvitemtoqueue, xtickstowait) xqueuegenericsend ((Xqueue), (Pvitemtoqueue), (XT
ickstowait), Queuesend_to_back) basetype_t xqueuegenericsend (queuehandle_t xqueue, const void * Const PVITEMTOQUEUE, ticktype_t xtickstowait, const basetype_t xcopyposition) #define Xqueuereceive (Xqueue, Pvbuf Fer, Xtickstowait) xqueuegenericreceive ((Xqueue), (Pvbuffer), (xtickstowait), pdfalse) basetype_t XQueue Genericreceive (queuehandle_t xqueue, void * Const Pvbuffer, ticktype_t xtickstowait, con St basetype_t XjustpeekiNG)//queue remaining size ubasetype_t uxqueuespacesavailable (const queuehandle_t xqueue)//queue use size ubasetype_t Uxqueuemessageswaiti Ng (const queuehandle_t Xqueue)
Examples of Use
queuehandle_t key_queue//Key value message queue handle
void Start_task (void *pvparameters)
{
key_queue = xqueuecreate (1, sizeof (U8));
if (Key_queue = = 0)
{
printf ("Xqueuecreate err\r\n");}
}
void Key_task (void *pvparameters)
{
basetype_t ret;
while (1)
{
key = Key_scan (0); Scan key
if ((key_queue! = 0) && (Key)) //Message queue Key_queue created successfully, and the key is pressed
{
ret = xqueuesend (key_ Queue, &key, ten);
if (ret! = Pdpass) //Send key value
{
printf ("Xqueuesend err\r\n");}
}
Vtaskdelay (ten);
}
}
void Recv_task (void *pvparameters)
{while
(1)
{
if (key_queue! = 0)
{
if ( Xqueuereceive (Key_queue, &key, Portmax_delay))
{
printf ("Recv_task Key%d\r\n", Key);
}
}
}
}
Experimental Phenomena
Click the button
Interrupt related API functions
#define XQUEUESENDFROMISR (Xqueue, Pvitemtoqueue, Pxhigherprioritytaskwoken)
Xqueuegenericsendfromisr ((xQueue) , (Pvitemtoqueue),
(Pxhigherprioritytaskwoken), queuesend_to_back)
basetype_t Xqueuegenericsendfromisr ( queuehandle_t xqueue, const void * Const PVITEMTOQUEUE,
basetype_t * Const Pxhigherprioritytaskwoken, const BASETYPE_ T xcopyposition)
basetype_t Xqueuereceivefromisr (queuehandle_t xqueue, void * Const Pvbuffer,
basetype_t * cons T Pxhigherprioritytaskwoken)
Examples of Use
void Start_task (void *pvparameters) {message_queue = xqueuecreate (1, sizeof (U8));
if (Message_queue = = 0) {printf ("xqueuecreate err\r\n");
}} void Usart1_irqhandler (void) {U8 Res;
basetype_t Xhigherprioritytaskwoken;
if (Usart_getitstatus (USART1, usart_it_rxne)! = RESET) {Res = Usart_receivedata (USART1);
XQUEUESENDFROMISR (Message_queue, &res, &xhigherprioritytaskwoken); PORTYIELD_FROM_ISR (Xhigherprioritytaskwoken);
Perform a task switch if needed}} void Tim2_irqhandler (void) {U8 Res;
basetype_t ret;
basetype_t xtaskwokenbyreceive = Pdfalse;
if (Tim_getitstatus (TIM2, tim_it_update) = = SET) {tim_clearitpendingbit (TIM2, tim_it_update);
ret = XQUEUERECEIVEFROMISR (Message_queue, &res, &xtaskwokenbyreceive);
if (ret = = pdtrue) {printf ("Xqueuereceivefromisr res%c\r\n", res); } PORTYIELD_FROM_ISR (xtaskwokenbyreceive); If necessary, make oneService Switch}}
experimental phenomenon