FreeRTOS Queue Operations

Source: Internet
Author: User

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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.