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