ucos-ii²Ù×÷ϵͳϰÌâ(ǶÈëʽ·½Ïò)

pdata: µ±ÈÎÎñ¿ªÊ¼Ö´ÐÐʱ´«µÝ¸øÈÎÎñµÄ²ÎÊýµÄÖ¸Õë; ptos: ·ÖÅä¸øÈÎÎñµÄ¶ÑÕ»µÄÕ»¶¥Ö¸Õë; prio: ·ÖÅä¸øÈÎÎñµÄÓÅÏȼ¶¡£

13£®ÈÎÎñ¿ÉÒÔÊÇÒ»¸öÎÞÏÞµÄÑ­»·£¬Ò²¿ÉÒÔÊÇÔÚÒ»´ÎÖ´ÐÐÍê±Ïºó±»É¾³ýµô¡£ Çë¸ø³öʾÒâ´úÂë½á¹¹¡£

´ð£º¦ÌC/OS-¢òÃèÊöµÄÈÎÎñʾÒâ´úÂë±ØÐëÊÇÒÔÏÂÁ½Öֽṹ֮һ: void YourTask (void *pdata) {

for (;;) {

/* Óû§´úÂë */

µ÷ÓæÌC/OS-¢òµÄ·þÎñÀý³ÌÖ®Ò»:

OSMboxPend(); OSQPend(); OSSemPend();

OSTaskDel(OS_PRIO_SELF);

OSTaskSuspend(OS_PRIO_SELF); OSTimeDly();

OSTimeDlyHMSM(); /* Óû§´úÂë */ } } »ò

void YourTask (void *pdata) {

/* Óû§´úÂë */

OSTaskDel(OS_PRIO_SELF); }

14£®¦ÌC/OS-¢òÈÎÎñ¹ÜÀíÌṩÄÄЩ·þÎñ£¿ ´ð£º¦ÌC/OS-¢òÈÎÎñ¹ÜÀíÌṩµÄ·þÎñ°üÀ¨£º

£¨1£©½¨Á¢ÈÎÎñ£ºOSTaskCreate()»òOSTaskCreateExt()£» £¨2£©É¾³ýÈÎÎñ£ºOSTaskDel()£»

£¨3£©ÇëÇóɾ³ýÈÎÎñ£ºOSTaskDelReq();

£¨4£©¸Ä±äÈÎÎñµÄÓÅÏȼ¶£ºOSTaskChangePrio()£» £¨5£©¹ÒÆðÈÎÎñ£ºOSTaskSuspend()£» £¨6£©»Ö¸´ÈÎÎñ£ºOSTaskResume()£»

£¨7£©»ñµÃÓйØÈÎÎñµÄÐÅÏ¢£ºOSTaskQuery()¡£

15£®¦ÌC/OS-¢òʱ¼äÈÎÎñ¹ÜÀíÌṩÄÄЩ·þÎñ£¿ ´ð£º¦ÌC/OS-¢òʱ¼äÈÎÎñ¹ÜÀíÌṩµÄ·þÎñ°üÀ¨£º

£¨1£© ÈÎÎñÑÓʱº¯Êý£ºOSTimeDly()

£¨2£© °´Ê±·ÖÃëÑÓʱº¯Êý£ºOSTimeDlyHMSM()

9

£¨3£© Èô¦ÔÚÑÓʱÆÚµÄÈÎÎñ½áÊøÑÓʱ£ºOSTimeDlyResume() £¨4£© ÉèÖÃϵͳʱ¼ä£ºOSTimeGet() £¨5£© »ñµÃϵͳʱ¼ä£ºOSTimeSet()

16. ¦ÌC/OS-¢òÌṩµÄÊý¾Ý¹²ÏíºÍÈÎÎñͨѶµÄ·½·¨°üÀ¨ÄÄЩ£¿

´ð£º¦ÌC/OS-¢òÌṩµÄÊý¾Ý¹²ÏíºÍÈÎÎñͨѶµÄ·½·¨°üÀ¨ÎåÖÖ·½·¨£º

(1) ÀûÓúêOS_ENTER_CRITICAL()ºÍOS_EXIT_CRITICAL()À´¹Ø±ÕÖжϺÍ

´ò¿ªÖжϡ£

(2) ÀûÓú¯ÊýOSSchedLock()ºÍOSSchekUnlock()¶Ô¦ÌC/OS-IIÖеÄÈÎÎñµ÷¶Èº¯

ÊýÉÏËøºÍ¿ªËø¡£ (3) ÐźÅÁ¿¡£ (4) ÓÊÏä¡£

(5) ÏûÏ¢¶ÓÁС£

17£®¶ÔÓÚʼþ¿ØÖÆ¿é½øÐеÄһЩͨÓðüÀ¨ÄÄЩ²Ù×÷£¿ ´ð£º¶ÔÓÚʼþ¿ØÖÆ¿é½øÐеÄһЩͨÓòÙ×÷°üÀ¨:

£¨1£© ³õʼ»¯Ò»¸öʼþ¿ØÖÆ¿é: OSEventWaitListInit(); £¨2£© ʹһ¸öÈÎÎñ½øÈë¾ÍÐ÷̬£ºOSEventTaskRdy()£»

£¨3£© ʹһ¸öÈÎÎñ½øÈëµÈ´ý¸ÃʼþµÄ״̬£ºOSEventTaskWait()£» £¨4£© ÒòΪµÈ´ý³¬Ê±¶øʹһ¸öÈÎÎñ½øÈë¾ÍÐ÷̬£ºOSEventTO()¡£

18£®¦ÌC/OS-¢òÐźÅÁ¿ÌṩÄÄЩ·þÎñ£¿ ´ð£º¦ÌC/OS-¢òÐźÅÁ¿ÌṩµÄ·þÎñ°üÀ¨£º

£¨1£© ½¨Á¢Ò»¸öÐźÅÁ¿£ºOSSemCreate()£» £¨2£© µÈ´ýÒ»¸öÐźÅÁ¿£ºOSSemPend()£» £¨3£©·¢ËÍÒ»¸öÐźÅÁ¿£ºOSSemPost()£»

£¨4£©Î޵ȴýµØÇëÇóÒ»¸öÐźÅÁ¿£ºOSSemAccept()£» £¨5£©²éѯһ¸öÐźÅÁ¿µÄµ±Ç°×´Ì¬£ºOSSemQuery()¡£

19£®¦ÌC/OS-¢òÓÊÏäÌṩÄÄЩ·þÎñ£¿ ´ð£º¦ÌC/OS-¢òÓÊÏäÌṩµÄ·þÎñ°üÀ¨£º

£¨1£©½¨Á¢Ò»¸öÓÊÏ䣺OSMboxCreate()£»

£¨2£©µÈ´ýÒ»¸öÓÊÏäÖеÄÏûÏ¢£ºOSMboxPend()£» £¨3£©·¢ËÍÒ»¸öÏûÏ¢µ½ÓÊÏäÖУºOSMboxPost()£»

£¨4£©Î޵ȴýµØ´ÓÓÊÏäÖеõ½Ò»¸öÏûÏ¢£ºOSMboxAccept()£» £¨5£©²éѯһ¸öÓÊÏäµÄ״̬£ºOSMboxQuery()

20£®¦ÌC/OS-¢òÏûÏ¢¶ÓÁÐÌṩÄÄЩ·þÎñ£¿ ´ð£º¦ÌC/OS-¢òÏûÏ¢¶ÓÁÐÌṩµÄ·þÎñ°üÀ¨£º £¨1£©½¨Á¢Ò»¸öÏûÏ¢¶ÓÁУºOSQCreate()£»

£¨2£©µÈ´ýÒ»¸öÏûÏ¢¶ÓÁÐÖеÄÏûÏ¢£ºOSQPend()£» £¨3£©ÏòÏûÏ¢¶ÓÁз¢ËÍÒ»¸öÏûÏ¢£¨FIFO£©£ºOSQPost()£» £¨4£©ÏòÏûÏ¢¶ÓÁз¢ËÍÒ»¸öÏûÏ¢£¨LIFO£©£ºOSQPostFront()£» £¨5£©Î޵ȴýµØ´ÓÒ»¸öÏûÏ¢¶ÓÁÐÖÐÈ¡µÃÏûÏ¢£ºOSQAccept()£»

10

£¨6£©Çå¿ÕÒ»¸öÏûÏ¢¶ÓÁУºOSQFlush()£»

£¨7£©²éѯһ¸öÏûÏ¢¶ÓÁеÄ״̬£ºOSQQuery()¡£

21£®¦ÌC/OS-¢òÄÚ´æ¹ÜÀíÌṩÄÄЩ·þÎñ£¿ ´ð£º¦ÌC/OS-¢òÄÚ´æ¹ÜÀíÌṩµÄ·þÎñ°üÀ¨£º

£¨1£© ½¨Á¢Ò»¸öÄÚ´æ·ÖÇø£ºOSMemCreate()£» £¨2£© ·ÖÅäÒ»¸öÄÚ´æ¿é£ºOSMemGet()£» £¨3£© ÊÍ·ÅÒ»¸öÄÚ´æ¿é£ºOSMemPut()£»

£¨4£© ²éѯһ¸öÄÚ´æ·ÖÇøµÄ״̬£ºOSMemQuery()¡£ 22£®ÒÆÖ²¦ÌC/OS-¢òʱ£¬ÒªÊ¹¦ÌC/OS-¢òÕý³£ÔËÐУ¬´¦ÀíÆ÷±ØÐëÂú×ãÄÄЩ»ù±¾ÒªÇó£¿ ´ð£ºÒªÊ¹¦ÌC/OS-¢òÕý³£ÔËÐУ¬´¦ÀíÆ÷±ØÐëÂú×ãÒÔÏÂÒªÇó£º

(1) ´¦ÀíÆ÷µÄC±àÒëÆ÷ÄܲúÉú¿ÉÖØÈë´úÂë¡£ (2) ÓÃCÓïÑԾͿÉÒÔ´ò¿ªºÍ¹Ø±ÕÖжϡ£

(3) ´¦ÀíÆ÷Ö§³ÖÖжϣ¬²¢ÇÒÄܲúÉú¶¨Ê±ÖжÏ(ͨ³£ÔÚ10ÖÁ100HzÖ®¼ä)¡£ (4) ´¦ÀíÆ÷Ö§³ÖÄܹ»ÈÝÄÉÒ»¶¨Á¿Êý¾Ý(¿ÉÄÜÊǼ¸Ç§×Ö½Ú)µÄÓ²¼þ¶ÑÕ»¡£

(5) ´¦ÀíÆ÷Óн«¶ÑÕ»Ö¸ÕëºÍÆäËüCPU¼Ä´æÆ÷¶Á³öºÍ´æ´¢µ½¶ÑÕ»»òÄÚ´æÖеÄ

Ö¸Áî¡£

23. Ãè»æ²»¿É°þ¶áÐÍÄÚºËÖжÏÏìӦʾÒâͼ ´ð£º

24. ¾ÙÀýÃèÊö¦ÌC/OS-II»ùÓÚÈÎÎñµÄÓ¦ÓóÌÐòÉè¼Æ·½·¨ ´ð£º#include

#define TASK_STK_SIZE 128

OS_STK AppStk_one[TASK_STK_SIZE]; //ÈÎÎñoneµÄ¶ÑÕ» OS_STK AppStk_two[TASK_STK_SIZE]; //ÈÎÎñtwoµÄ¶ÑÕ» OS_STK AppStk_three[TASK_STK_SIZE]; //ÈÎÎñthreeµÄ¶ÑÕ» static void App_one(void *p_arg); //ÈÎÎñone´úÂë static void App_two(void *p_arg); //ÈÎÎñtwo´úÂë static void App_three(void *p_arg); //ÈÎÎñthree´úÂë void main(int argc, char *argv[]) {

OSInit(); //³õʼ»¯ÏµÍ³

11

//ÒÀ´Î´´½¨Èý¸öÈÎÎñ

OSTaskCreate(App_one,NULL,(OS_STK*)&AppStk_one[TASK_STK_SIZE-1],(INT8U)10);

OSTaskCreate(App_two,NULL,(OS_STK*)&AppStk_two[TASK_STK_SIZE-1],(INT8U)20); OSTaskCreate(App_three,NULL,(OS_STK*)&AppStk_three[TASK_STK_SIZE-1],(INT8U)30);

OSStart(); //Æô¶¯¶àÈÎÎñ£¬½«CPU¿ØÖÆȨ½»¸øϵͳ }

25. ¦ÌC/OS-IIµ÷¶ÈËã·¨Ô­Àí¼°ÆäºÍµ÷¶È·½Ê½ ´ð£º

(1)ª£ÓÅÏȼ¶µ÷¶ÈËã·¨Ô­ÀíΪ£º¸øÿһ¸öÈÎÎñ·ÖÅäÒ»¸öΩһÓÅÏȼ¶£¬¸÷ÓÅÏȼ¶ÓÃÒ»¸öÕûÐÎÊýÖµ±êʶ£¬Ä³ÓÅÏȼ¶µÄÖµÔ½´ó£¬ÆäÓÅÏȼ¶Ô½µÍ£ºÄ³ÓÅÏȼ¶µÄֵԽС£¬ÆäÓÅÏȼ¶Ô½¸ß¡£Ò²¾ÍÊÇ˵£¬Èç¹ûµ±Ç°²Ù×÷ϵͳ׼±¸½øÐе÷¶È£¬µ±ÓÐÁ½¸öÈÎÎñ´¦ÓÚ¾ÍÐ÷״̬£¬ÏµÍ³½«ÓÅÏÈÖ´ÐÐÓÅÏȼ¶±ð¸ßµÄÈÎÎñ¡£

(2) ¦ÌC/OS-II²Ù×÷ϵͳÓÐÁ½ÖÖµ÷¶È·½Ê½£ºÈÎÎñ¼¶ÈÎÎñµ÷¶ÈºÍÖжϼ¶ÈÎÎñµ÷¶È£¬¦ÌC/OS-II²Ù×÷ϵͳÔÚÍê³ÉÖжϺóÔÊÐí½øÐÐеĵ÷¶È¡£

26. ÃèÊö¦ÌC/OS-II²Ù×÷ϵͳµÄÈÎÎñ¼¶ÈÎÎñµ÷¶ÈOS_Sched()µÄÖ÷Òª¹¦ÄÜ ´ð£º(1)²éÕÒµ±Ç°¾ÍÐ÷±íÖÐ×î¸ßÓÅÏȼ¶ÈÎÎñµÄÓÅÏȼ¶Öµ£»

ª£ (2)µ÷ÓÃOS_TASK_SW()½øÐÐÈÎÎñÇл»£¬Çл»µ½ÐÂÈÎÎñÖ´ÐС£

27.´ÓÏûÏ¢ÓÊÏäÖжÁÈ¡ÏûÏ¢µÄ·½Ê½¼°Æ亯ÊýÔ­ÐÍ ? ´ð£º

(1) ´ÓÏûÏ¢ÓÊÏäÖжÁÈ¡ÏûÏ¢µÄ·½Ê½°üÀ¨£º·Ç×èÈûʽ¶ÁÈ¡ºÍ×èÈûʽ¶ÁÈ¡Á½ÖÖ·½Ê½¡£ (2) ·Ç×èÈûʽ¶ÁÈ¡ÊÇÖ¸ÎÞÂÛÏûÏ¢ÓÊÏäÖÐÊÇ·ñÓÐÊý¾Ý£¬¶ÁÈ¡²Ù×÷Ò²²»×èÈû£¬Ö±½Ó·µ»Ø¡£ÏÔÈ»£¬Èç¹ûÓÐÊý¾Ý£¬½«¶ÁÈ¡³öÀ´£»Èç¹ûûÓÐÊý¾Ý£¬½«¶ÁȡΪNULL¡£ Æ亯ÊýÔ­ÐÍΪ£ºvoid *OSMboxAccept (OS_EVENT *pevent)

(3) ×èÈûʽ¶ÁÈ¡ÊÇÖ¸ÔÚÏûÏ¢ÓÊÏäÖÐÓÐÊý¾Ýʱ£¬Ö±½Ó¶ÁÈ¡³öÀ´£»Èç¹ûûÓÐÊý¾Ý£¬Ôòʹµ±Ç°ÈÎÎñ½øÈëµÈ´ý״̬£¬ÏµÍ³Ö´Ðе÷¶È³ÌÐòÖ´ÐÐеÄÈÎÎñ£¬µ±ÏÂÒ»´ÎÏûÏ¢µ½À´Ê±½«¼¤»îµÈ´ý±íÖеÄ×î¸ßÓÅÏȼ¶ÈÎÎñ£¬´Ó¶øʹ¸ÃÈÎÎñ½øÈë¾ÍÐ÷״̬¡£ÎªÁ˱ÜÃâÈÎÎñÒ»Ö±´¦Óڵȴý״̬£¨ËùµÈ´ýµÄ×ÊԴһֱδ·ÖÅ䣩£¬¿ÉÒÔÉèÖÃÒ»¸öµÈ´ýµÄʱ¼ä·¶Î§£¬µ±³¬¹ý¸ÃÑÓ³Ùʱ£¬ÔòÖ±½Ó·µ»Ø¡£

Æ亯ÊýÔ­ÐÍΪ£ºvoid *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)ª¦

ËÄ£®ÂÛÊöÌâ

1. ÂÛÊö¦ÌC/OS-¢ò¿ØÖÆϵÄÈÎÎñ״̬ת»»Í¼

´ð£º¦ÌC/OS-¢ò¿ØÖÆϵÄÈÎÎñ״̬ת»»Í¼ÈçÏÂͼËùʾ¡£

12

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ì滻Ϊ@)