UCOS-II API ²Î¿¼ÊÖ²á ÏÂÔØ±¾ÎÄ

²Î¿¼ÊÖ²á

for (;;) { . .

err = OSQPost(CommQ, (void *)&CommRxBuf[0]); if (err == OS_NO_ERR) {

. /* ½«ÏûÏ¢·ÅÈëÏûÏ¢¶ÓÁÐ */ . } else {

. /* ÏûÏ¢¶ÓÁÐÒÑÂú */ . } . . } }

¦ÌC/OS-II:ʵʱ²Ù×÷ϵͳÄÚºË

OSQPostFront( )

INT8U OSQPostFront(OS_EVENT *pevent, void *msg);

ËùÊôÎļþ µ÷ÓÃÕß ¿ª¹ØÁ¿ OS_Q_EN ÈÎÎñ»òÖÐ¶Ï OSQPostFront£¨£©º¯Êýͨ¹ýÏûÏ¢¶ÓÁÐÏòÈÎÎñ·¢ËÍÏûÏ¢¡£OSQPostFront£¨£©º¯ÊýºÍOSQPost£¨£©º¯Êý·Ç³£ÏàËÆ£¬²»Í¬Ö®´¦ÔÚÓÚOSQPostFront£¨£©º¯Êý½«·¢Ë͵ÄÏûÏ¢²åµ½ÏûÏ¢¶ÓÁеÄ×îǰ¶Ë¡£Ò²¾ÍÊÇ˵£¬OSQPostFront£¨£©º¯ÊýʹµÃÏûÏ¢¶ÓÁа´ÕÕºóÈëÏȳö£¨LIFO£©µÄ·½Ê½¹¤×÷£¬¶ø²»ÊÇÏÈÈëÏȳö£¨FIFO£©¡£ÏûÏ¢ÊÇÒ»¸öÖ¸Õ볤¶ÈµÄ±äÁ¿£¬ÔÚ²»Í¬µÄ³ÌÐòÖÐÏûÏ¢µÄʹÓÃÒ²¿ÉÄܲ»Í¬¡£Èç¹û¶ÓÁÐÖÐÒѾ­´æÂúÏûÏ¢£¬·µ»Ø´íÎóÂë¡£OSQPost£¨£©º¯ÊýÁ¢¼´·µ»Øµ÷ÓÃÕߣ¬ÏûϢҲûÄÜ·¢µ½¶ÓÁС£Èç¹ûÓÐÈκÎÈÎÎñÔڵȴý¶ÓÁÐÖеÄÏûÏ¢£¬×î¸ßÓÅÏȼ¶µÄÈÎÎñ½«µÃµ½Õâ¸öÏûÏ¢¡£Èç¹ûµÈ´ýÏûÏ¢µÄÈÎÎñÓÅÏȼ¶±È·¢ËÍÏûÏ¢µÄÈÎÎñÓÅÏȼ¶¸ß£¬ÄÇô¸ßÓÅÏȼ¶µÄÈÎÎñ½«µÃµ½ÏûÏ¢¶ø»Ö¸´Ö´ÐУ¬Ò²¾ÍÊÇ˵£¬·¢ÉúÁËÒ»´ÎÈÎÎñÇл»

OS_Q.C ²ÎÊý

pevent ÊÇÖ¸Ïò¼´½«½ÓÊÜÏûÏ¢µÄÏûÏ¢¶ÓÁеÄÖ¸Õë¡£¸ÃÖ¸ÕëµÄÖµÔÚ½¨Á¢¸Ã¶ÓÁÐʱ¿ÉÒԵõ½¡££¨²Î¿¼OSQCreate£¨£©º¯Êý£©¡£

Msg ÊǼ´½«Êµ¼Ê·¢Ë͸øÈÎÎñµÄÏûÏ¢¡£ÏûÏ¢ÊÇÒ»¸öÖ¸Õ볤¶ÈµÄ±äÁ¿£¬ÔÚ²»Í¬µÄ³ÌÐòÖÐÏûÏ¢µÄʹÓÃÒ²¿ÉÄܲ»Í¬¡£²»ÔÊÐí´«µÝÒ»¸ö¿ÕÖ¸Õë¡£

·µ»ØÖµ

OSQPost£¨£©º¯ÊýµÄ·µ»ØÖµÎªÏÂÊöÖ®Ò»£º

? OS_NO_ERR £ºÏûÏ¢³É¹¦µÄ·Åµ½ÏûÏ¢¶ÓÁÐÖС£ ? OS_MBOX_FULL £ºÏûÏ¢¶ÓÁÐÒÑÂú¡£

? OS_ERR_EVENT_TYPE £ºpevent ²»ÊÇÖ¸ÏòÏûÏ¢¶ÓÁеÄÖ¸Õë¡£

×¢Òâ/¾¯¸æ

±ØÐëÏȽ¨Á¢ÏûÏ¢¶ÓÁУ¬È»ºóʹÓᣠ²»ÔÊÐí´«µÝÒ»¸ö¿ÕÖ¸Õë¡£

·¶Àý£º

OS_EVENT *CommQ;

INT8U CommRxBuf[100];

void CommTaskRx(void *pdata) {

INT8U err;

pdata = pdata; for (;;) { .

²Î¿¼ÊÖ²á

err = OSQPostFront(CommQ, (void *)&CommRxBuf[0]); if (err == OS_NO_ERR) {

. /* ½«ÏûÏ¢·ÅÈëÏûÏ¢¶ÓÁÐ */ } else {

. /* ÏûÏ¢¶ÓÁÐÒÑÂú */ } . . } }

¦ÌC/OS-II:ʵʱ²Ù×÷ϵͳÄÚºË

OSQQuery( )

INT8U OSQQuery(OS_EVENT *pevent, OS_Q_DATA *pdata);

ËùÊôÎļþ µ÷ÓÃÕß ¿ª¹ØÁ¿ OS_Q_EN ÈÎÎñ»òÖÐ¶Ï OSQQuery£¨£©º¯ÊýÓÃÀ´È¡µÃÏûÏ¢¶ÓÁеÄÐÅÏ¢¡£Óû§³ÌÐò±ØÐ뽨Á¢Ò»¸öOS_Q_DATAµÄÊý¾Ý½á¹¹£¬¸Ã½á¹¹ÓÃÀ´±£´æ´ÓÏûÏ¢¶ÓÁеÄʼþ¿ØÖÆ¿éµÃµ½µÄÊý¾Ý¡£Í¨¹ýµ÷ÓÃOSQQuery£¨£©º¯Êý¿ÉÒÔÖªµÀÈÎÎñÊÇ·ñÔڵȴýÏûÏ¢¡¢ÓжàÉÙ¸öÈÎÎñÔڵȴýÏûÏ¢¡¢¶ÓÁÐÖÐÓжàÉÙÏûÏ¢ÒÔ¼°ÏûÏ¢¶ÓÁпÉÒÔÈÝÄɵÄÏûÏ¢Êý¡£OSQQuery£¨£©º¯Êý»¹¿ÉÒԵõ½¼´½«±»´«µÝ¸øÈÎÎñµÄÏûÏ¢µÄÐÅÏ¢¡£

OS_Q.C ²ÎÊý

pevent ÊÇÖ¸Ïò¼´½«½ÓÊÜÏûÏ¢µÄÏûÏ¢ÓÊÏäµÄÖ¸Õë¡£¸ÃÖ¸ÕëµÄÖµÔÚ½¨Á¢¸ÃÏûÏ¢ÓÊÏäʱ¿ÉÒԵõ½¡££¨²Î¿¼OSQCreate£¨£©º¯Êý£©¡£

Pdata ÊÇÖ¸ÏòOS_Q_DATAÊý¾Ý½á¹¹µÄÖ¸Õ룬¸ÃÊý¾Ý½á¹¹°üº¬ÏÂÊö³ÉÔ±£º Void *OSMsg; /* ÏÂÒ»¸ö¿ÉÓõÄÏûÏ¢*/ INT16U OSNMsgs£» /* ¶ÓÁÐÖеÄÏûÏ¢ÊýÄ¿*/ INT16U OSQSize£» /* ÏûÏ¢¶ÓÁеĴóС */ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* ÏûÏ¢¶ÓÁеĵȴý¶ÓÁÐ*/ INT8U OSEventGrp£»

·µ»ØÖµ

OSQQuery£¨£©º¯ÊýµÄ·µ»ØÖµÎªÏÂÊöÖ®Ò»£º ? OS_NO_ERR £ºµ÷Óóɹ¦

? OS_ERR_EVENT_TYPE £ºpevent ²»ÊÇÖ¸ÏòÏûÏ¢¶ÓÁеÄÖ¸Õë¡£

×¢Òâ/¾¯¸æ

±ØÐëÏȽ¨Á¢ÏûÏ¢¶ÓÁУ¬È»ºóʹÓá£

·¶Àý£º

OS_EVENT *CommQ;

void Task (void *pdata) {

OS_Q_DATA qdata; INT8U err;