久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1939|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

uCOS-II之任務(wù)間通信、軟件定時(shí)器補(bǔ)充

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:763998 發(fā)表于 2020-6-29 09:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

任務(wù)間通信

5.4.1 信號(hào)量

信號(hào)量是用來保護(hù)共享資源用的,表示共享資源的個(gè)數(shù)。共享資源被占用一個(gè),信號(hào)量的指會(huì)減1,共享資源被釋放一個(gè),信號(hào)量的值會(huì)加1。

(理解:USB口的占用與釋放,假設(shè)一個(gè)電腦有3個(gè)USB,插入一個(gè)USB設(shè)備,電腦的USB資源會(huì)減少1,此時(shí)電腦的USB資源還有2;拔出USB設(shè)備,電腦的USB資源會(huì)增加1,此時(shí)電腦的USB資源有3個(gè)USB)

其實(shí)信號(hào)量的本質(zhì)就是一個(gè)操作系統(tǒng)計(jì)數(shù)器(0~65535),實(shí)際用于實(shí)現(xiàn)任務(wù)間同步執(zhí)行。

需要掌握的函數(shù)如下:

實(shí)驗(yàn)代碼如下:


  1. #include "main.h"
  2. #include "includes.h"

  3. /** 任務(wù)0 **/
  4. #define TASK0_PRI 8 //任務(wù)優(yōu)先級
  5. #define TASK0_STK_SIZE               256 //任務(wù)棧大小
  6. OS_STK              stack0[TASK0_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  7. void Task0 (void *p_arg); //函數(shù)聲明

  8. /** 任務(wù)1 **/
  9. #define TASK1_PRI 9 //任務(wù)優(yōu)先級
  10. #define TASK1_STK_SIZE               256 //任務(wù)棧大小
  11. OS_STK              stack1[TASK1_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  12. void Task1 (void *p_arg); //函數(shù)聲明

  13. /** 任務(wù)2 **/
  14. #define TASK2_PRI 10 //任務(wù)優(yōu)先級
  15. #define TASK2_STK_SIZE               256 //任務(wù)棧大小
  16. OS_STK              stack2[TASK2_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  17. void Task2 (void *p_arg); //函數(shù)聲明

  18. OS_EVENT  *sem;//全局變量,創(chuàng)建信號(hào)量、等待信號(hào)量、發(fā)布信號(hào)量都需要用到該指針。

  19. int main(void)
  20. {
  21.               OSSysTickInit();//滴答定時(shí)器初始化
  22.               USART1_Init(115200);//初始化串口,用于調(diào)試
  23.             
  24.               OSInit();                             //操作系統(tǒng)初始化
  25.             
  26.               sem=OSSemCreate(2);//初始化--默認(rèn)創(chuàng)建2個(gè)信號(hào)量
  27.               OSTaskCreate (Task0,NULL,&stack0[TASK0_STK_SIZE-1],TASK0_PRI);//創(chuàng)建一個(gè)任務(wù),任務(wù)名:Task0
  28.               OSTaskCreate (Task1,NULL,&stack1[TASK1_STK_SIZE-1],TASK1_PRI);//創(chuàng)建一個(gè)任務(wù),任務(wù)名:Task1
  29.               OSTaskCreate (Task2,NULL,&stack2[TASK2_STK_SIZE-1],TASK2_PRI);//創(chuàng)建一個(gè)任務(wù),任務(wù)名:Task2
  30.             
  31.               OSStart();    //啟動(dòng)操作系統(tǒng)
  32. }

  33. void Task0 (void *p_arg) //實(shí)現(xiàn)任務(wù)Task0
  34. {
  35.               u8 k=0;//給個(gè)默認(rèn)值0,表示無鍵狀態(tài)
  36.               KEY_Init();//按鍵初始化,放在對應(yīng)任務(wù)中
  37.               while(1)
  38.               {
  39.                             k=Key_Scanf(0);//按鍵掃描
  40.                             switch (k)
  41.     {
  42.                   case KEY_ONE: //按鍵1按下,發(fā)布一個(gè)信號(hào)量
  43.                                                         OSSemPost(sem);//發(fā)送信號(hào)量
  44.                                 break;
  45.                   default:
  46.                                 break;
  47.     }
  48.                             OSTimeDly(1);//高優(yōu)先級釋放CPU,延遲不可太長,延時(shí)太長會(huì)影響按鍵的靈敏度。
  49.               }
  50. }

  51. void Task1 (void *p_arg) //實(shí)現(xiàn)任務(wù)Task1
  52. {
  53.               while(1)
  54.               {
  55.                             //等待一個(gè)信號(hào)量
  56.                             OSSemPend (sem,//信號(hào)量
  57.                  0,//超時(shí)時(shí)間
  58.                  0);//錯(cuò)誤類型--沒有錯(cuò)誤
  59.                             printf("任務(wù)1\r\n");
  60.                             OSTimeDly(100);//5ms一次滴答,100*5=500ms,打印一次
  61.               }
  62. }

  63. void Task2 (void *p_arg) //實(shí)現(xiàn)任務(wù)Task2
  64. {
  65.               while(1)
  66.               {
  67.                             //等待一個(gè)信號(hào)量
  68.                             OSSemPend (sem,//信號(hào)量
  69.                  0,//超時(shí)時(shí)間
  70.                  0);//錯(cuò)誤類型--沒有錯(cuò)誤
  71.                             printf("任務(wù)2\r\n");
  72.                             OSTimeDly(100);//5ms一次滴答,100*5=500ms,打印一次
  73.               }
  74. }
復(fù)制代碼


因?yàn)閯?chuàng)建了兩個(gè)信號(hào)量,按下復(fù)位按鍵,同時(shí)打印出任務(wù)1、任務(wù)2。

按下按鍵1,打印出任務(wù)1,因?yàn)槿蝿?wù)1的優(yōu)先級比較高。

快速按下按鍵1,能打印出任務(wù)1,和任務(wù)2,因?yàn)樗麄兌荚诘刃盘?hào)量。

5.4.2 互斥信號(hào)量

用來保護(hù)共享資源,但是這個(gè)共享資源只有一個(gè)。兩個(gè)任務(wù)同時(shí)操作一個(gè)硬件,這時(shí)候需要加互斥信號(hào)量保護(hù)。

(理解:電話亭的使用,假設(shè)電話亭里只有一個(gè)電話,有3個(gè)人想打電話,需要排隊(duì),還需要等待,等待電話亭里面沒有人,排在前面的人就能進(jìn)入電話亭打電話了)

其實(shí)互斥信號(hào)量的本質(zhì)就是一個(gè)操作系統(tǒng)計(jì)數(shù)器(0-1)。

注意:互斥信號(hào)量中需要有一個(gè)空閑的優(yōu)先級作為優(yōu)先級反轉(zhuǎn)用,該優(yōu)先級必須比所有能夠獲得該互斥信號(hào)量的優(yōu)先級還高。

理解:假設(shè)能獲得該互斥信號(hào)量的所有任務(wù)的優(yōu)先級分別為:4、10、11、13,則該空閑優(yōu)先級的取值(0~3);在如,假設(shè)能獲得該互斥信號(hào)量的所有任務(wù)的優(yōu)先級分別為:8、10、11、13,則該空閑優(yōu)先級的取值(0~7)。

需要掌握的函數(shù)如下:

實(shí)驗(yàn)代碼如下:


  1. #include "main.h"
  2. #include "includes.h"

  3. /** 任務(wù)0 **/
  4. #define TASK0_PRI 8 //任務(wù)優(yōu)先級
  5. #define TASK0_STK_SIZE               256 //任務(wù)棧大小
  6. OS_STK              stack0[TASK0_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  7. void Task0 (void *p_arg); //函數(shù)聲明

  8. /** 任務(wù)1 **/
  9. #define TASK1_PRI 9 //任務(wù)優(yōu)先級
  10. #define TASK1_STK_SIZE               256 //任務(wù)棧大小
  11. OS_STK              stack1[TASK1_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  12. void Task1 (void *p_arg); //函數(shù)聲明

  13. OS_EVENT  *mutex;//全局變量,創(chuàng)建信號(hào)量、等待信號(hào)量、發(fā)布信號(hào)量都需要用到該指針。

  14. int main(void)
  15. {
  16.               OSSysTickInit();//滴答定時(shí)器初始化
  17.               USART1_Init(115200);//初始化串口,用于調(diào)試
  18.             
  19.               OSInit();                             //操作系統(tǒng)初始化
  20.             
  21.               //創(chuàng)建互斥信號(hào)量
  22.               mutex=OSMutexCreate (5,//空閑優(yōu)先級
  23.                         0);//錯(cuò)誤類型
  24.               OSTaskCreate (Task0,NULL,&stack0[TASK0_STK_SIZE-1],TASK0_PRI);//創(chuàng)建一個(gè)任務(wù),任務(wù)名:Task0
  25.               OSTaskCreate (Task1,NULL,&stack1[TASK1_STK_SIZE-1],TASK1_PRI);//創(chuàng)建一個(gè)任務(wù),任務(wù)名:Task1
  26.             
  27.               OSStart();    //啟動(dòng)操作系統(tǒng)
  28. }

  29. void Task0 (void *p_arg) //實(shí)現(xiàn)任務(wù)Task0
  30. {
  31.               while(1)
  32.               {
  33.                             //獲取互斥信號(hào)量
  34.                             OSMutexPend (mutex,//互斥信號(hào)量
  35.                    0,//超時(shí)時(shí)間
  36.                    0);//錯(cuò)誤類型
  37.                             for(int i=0;i<5;i++)
  38.                             {
  39.                                           printf("任務(wù)0--%d\r\n",i);//
  40.                                           OSTimeDly(100);//
  41.                             }
  42.                             //釋放互斥信號(hào)量
  43.                             OSMutexPost (mutex);
  44.               }
  45. }

  46. void Task1 (void *p_arg) //實(shí)現(xiàn)任務(wù)Task1
  47. {
  48.               while(1)
  49.               {
  50.                             //獲取互斥信號(hào)量
  51.                             OSMutexPend (mutex,//互斥信號(hào)量
  52.                    0,//超時(shí)時(shí)間
  53.                    0);//錯(cuò)誤類型
  54.                             for(int i=0;i<5;i++)
  55.                             {
  56.                                           printf("任務(wù)1--%d\r\n",i);//
  57.                                           OSTimeDly(100);//
  58.                             }
  59.                             //釋放互斥信號(hào)量
  60.                             OSMutexPost (mutex);
  61.               }
  62. }
復(fù)制代碼


燒錄代碼,結(jié)果如下圖:

實(shí)驗(yàn)表明,假設(shè)多個(gè)任務(wù)在訪問同一資源,只有等正在訪問的任務(wù)使用完并釋放資源,下一個(gè)任務(wù)才能訪問使用。

假設(shè)不加互斥信號(hào)量進(jìn)行互斥訪問,代碼如下,

結(jié)果如下:

5.4.3 消息郵箱

用于任務(wù)與任務(wù)之間交換數(shù)據(jù)(任務(wù)與任務(wù)之間的通信)。消息郵箱只能存放一則消息,消息的內(nèi)容長短不限制。

需要掌握的函數(shù):

實(shí)驗(yàn)代碼:


  1. #include "main.h"
  2. #include "includes.h"

  3. /** 任務(wù)0 **/
  4. #define TASK0_PRI 8 //任務(wù)優(yōu)先級
  5. #define TASK0_STK_SIZE               256 //任務(wù)棧大小
  6. OS_STK              stack0[TASK0_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  7. void SendTask (void *p_arg); //函數(shù)聲明

  8. /** 任務(wù)1 **/
  9. #define TASK1_PRI 9 //任務(wù)優(yōu)先級
  10. #define TASK1_STK_SIZE               256 //任務(wù)棧大小
  11. OS_STK              stack1[TASK1_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  12. void ReceiveTask (void *p_arg); //函數(shù)聲明

  13. OS_EVENT  *mbox;//全局變量,創(chuàng)建郵箱、發(fā)送消息、接收消息,都需要用到該指針。

  14. int main(void)
  15. {
  16.               OSSysTickInit();//滴答定時(shí)器初始化
  17.               USART1_Init(115200);//初始化串口,用于調(diào)試
  18.             
  19.               OSInit();                             //操作系統(tǒng)初始化
  20.               //創(chuàng)建一個(gè)郵箱
  21.               mbox=OSMboxCreate (NULL);//初始化消息的地址:NULL
  22.             
  23.               OSTaskCreate (SendTask,NULL,&stack0[TASK0_STK_SIZE-1],TASK0_PRI);//創(chuàng)建發(fā)送任務(wù)
  24.               OSTaskCreate (ReceiveTask,NULL,&stack1[TASK1_STK_SIZE-1],TASK1_PRI);//創(chuàng)建接收任務(wù)
  25.             
  26.               OSStart();    //啟動(dòng)操作系統(tǒng)
  27. }

  28. void SendTask (void *p_arg) //發(fā)送任務(wù)
  29. {
  30.               u8 k=0;//給個(gè)默認(rèn)值0,表示無鍵狀態(tài)
  31.               KEY_Init();//按鍵初始化,放在對應(yīng)任務(wù)中
  32.               while(1)
  33.               {
  34.                             k=Key_Scanf(0);//按鍵掃描
  35.                             switch (k)
  36.     {
  37.                   case KEY_ONE: //按鍵1按下,發(fā)布一則消息
  38.                                                         OSMboxPost (mbox,//郵箱
  39.                                                                                                                                             "hello 51黑");//郵箱內(nèi)容
  40.                                 break;
  41.                                           case KEY_TWO: //按鍵2按下,發(fā)布一則消息
  42.                                                       
  43.                                                         OSMboxPost (mbox,//郵箱
  44.                                                                                                                                             "hello world");//郵箱內(nèi)容
  45.                                                         OSMboxPost (mbox,//郵箱
  46.                                                                                                                                             "hello xixi");//郵箱內(nèi)容
  47.                                                         OSMboxPost (mbox,//郵箱
  48.                                                                                                                                             "hello haha");//郵箱內(nèi)容
  49.                                 break;
  50.                   default:
  51.                                 break;
  52.     }
  53.                             OSTimeDly(1);//釋放CPU使用權(quán)
  54.               }
  55. }

  56. void ReceiveTask (void *p_arg) //接收任務(wù)
  57. {
  58.               u8 *str;
  59.               while(1)
  60.               {
  61.                             //接收一條消息
  62.                             str=OSMboxPend (mbox,//郵箱地址
  63.                                                                                                                 0,//死等
  64.                                                                                                                 0);//發(fā)送成功
  65.                             printf("接收到的消息:%s\r\n",str);//開始默認(rèn)打印三次,因?yàn)槟J(rèn)開始創(chuàng)建3個(gè)信號(hào)量。
  66.                             OSTimeDly(1);//釋放CPU使用權(quán)
  67.               }
  68. }
復(fù)制代碼


實(shí)驗(yàn)結(jié)果如下:

按下按鍵1:

按下按鍵2:

原因是接收方接收不過來了,造成了數(shù)據(jù)丟失。這時(shí)需要引入消息隊(duì)列。

5.4.4 消息隊(duì)列

消息郵箱只能發(fā)送一則消息,獲取消息的地方如果處理比較慢就會(huì)丟失消息。消息隊(duì)列能存儲(chǔ)一隊(duì)消息,能很好的避免接收方處理能力弱而丟失消息的問題。隊(duì)列是一種數(shù)據(jù)結(jié)構(gòu),遵循先進(jìn)先出原則。

需要掌握的函數(shù):

實(shí)驗(yàn)代碼:


  1. #include "main.h"
  2. #include "includes.h"

  3. /** 任務(wù)0 **/
  4. #define TASK0_PRI 8 //任務(wù)優(yōu)先級
  5. #define TASK0_STK_SIZE               256 //任務(wù)棧大小
  6. OS_STK              stack0[TASK0_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  7. void SendTask (void *p_arg); //函數(shù)聲明

  8. /** 任務(wù)1 **/
  9. #define TASK1_PRI 9 //任務(wù)優(yōu)先級
  10. #define TASK1_STK_SIZE               256 //任務(wù)棧大小
  11. OS_STK              stack1[TASK1_STK_SIZE]; //數(shù)組作為任務(wù)堆棧
  12. void ReceiveTask (void *p_arg); //函數(shù)聲明

  13. OS_EVENT  *q;//全局變量,創(chuàng)建隊(duì)列、發(fā)送消息、接收消息,都需要用到該指針。

  14.             
  15. void *queue[10];//隊(duì)列

  16. int main(void)
  17. {
  18.               OSSysTickInit();//滴答定時(shí)器初始化
  19.               USART1_Init(115200);//初始化串口,用于調(diào)試
  20.             
  21.               OSInit();                             //操作系統(tǒng)初始化
  22.             
  23.               //創(chuàng)建一個(gè)隊(duì)列
  24.               q=OSQCreate(queue,//隊(duì)列
  25.                 10);//隊(duì)列的大小
  26.             
  27.               OSTaskCreate (SendTask,NULL,&stack0[TASK0_STK_SIZE-1],TASK0_PRI);//創(chuàng)建發(fā)送任務(wù)
  28.               OSTaskCreate (ReceiveTask,NULL,&stack1[TASK1_STK_SIZE-1],TASK1_PRI);//創(chuàng)建接收任務(wù)
  29.             
  30.               OSStart();    //啟動(dòng)操作系統(tǒng)
  31. }

  32. void SendTask (void *p_arg) //發(fā)送任務(wù)
  33. {
  34.               u8 k=0;//給個(gè)默認(rèn)值0,表示無鍵狀態(tài)
  35.               KEY_Init();//按鍵初始化,放在對應(yīng)任務(wù)中
  36.               while(1)
  37.               {
  38.                             k=Key_Scanf(0);//按鍵掃描
  39.                             switch (k)
  40.     {
  41.                   case KEY_ONE: //按鍵1按下,發(fā)布一則消息
  42.                                                         OSQPost (q,//隊(duì)列地址
  43.                                                                                                                 "lele");//需要發(fā)送的內(nèi)容
  44.                                                         OSQPost (q,//隊(duì)列地址
  45.                 "學(xué)習(xí)");//需要發(fā)送的內(nèi)容
  46.                                                         OSQPost (q,//隊(duì)列地址
  47.                 "不可能");//需要發(fā)送的內(nèi)容
  48.                                 break;
  49.                                           case KEY_TWO: //按鍵2按下,發(fā)布一則消息
  50.                                                         OSQPost (q,//隊(duì)列地址
  51.                 "哈哈");//需要發(fā)送的內(nèi)容
  52.                                 break;
  53.                   default:
  54.                                 break;
  55.     }
  56.                             OSTimeDly(1);//釋放CPU使用權(quán)
  57.               }
  58. }

  59. void ReceiveTask (void *p_arg) //接收任務(wù)
  60. {
  61.               char *strs;
  62.               while(1)
  63.               {
  64.                             //接收一條消息
  65.                             strs=OSQPend(q,//隊(duì)列
  66.                                                                                                                 0,//死等
  67.                                                                                                                 0);//錯(cuò)誤類型
  68.                             printf("接收到的消息:%s\r\n",strs);//開始默認(rèn)打印三次,因?yàn)槟J(rèn)開始創(chuàng)建3個(gè)信號(hào)量。
  69.                             OSTimeDly(1);//釋放CPU使用權(quán)
  70.               }
  71. }
復(fù)制代碼


實(shí)驗(yàn)結(jié)果如下:

發(fā)送三條消息,接收到三條消息,沒有數(shù)據(jù)丟失。

5.4.5 補(bǔ)充

信號(hào)量:就理解成有多個(gè)電話的電話亭,這些電話是共享資源,當(dāng)有很多人使用時(shí),需要排隊(duì)(優(yōu)先級),需要等待(等待信號(hào)量),當(dāng)電話亭的電話空閑時(shí)(有信號(hào)量),就可以讓排在前面的人使用,依次使用。

互斥信號(hào)量:和信號(hào)量基本一致,理解成只用一個(gè)電話的電話亭,多個(gè)用戶要互斥使用這個(gè)電話。

消息郵箱:發(fā)送一條消息。如果消息發(fā)送太快,接收方接收不過來,會(huì)造成數(shù)據(jù)丟失。

消息隊(duì)列:發(fā)送多條消息。實(shí)現(xiàn)原理是把多條消息存放在隊(duì)列中。

最重要的最重要的是:

  • 概念的理解,領(lǐng)會(huì)
  • 代碼的實(shí)現(xiàn)、代碼的流程
  • 多實(shí)踐與思考

5.5 其他補(bǔ)充

5.5.1 延時(shí)函數(shù)

這里的延時(shí)與STM32的延遲有不同的含義,對于STM32F407,系統(tǒng)時(shí)鐘為21M,即21 000 000 次脈沖為1秒鐘=21 000 000個(gè)滴答為1秒鐘,UCOS的延時(shí)規(guī)定,200個(gè)脈沖為1秒鐘=200個(gè)滴答為1秒鐘,所以UCOS的一個(gè)滴答為5ms。

常用第一個(gè)函數(shù),第二函數(shù)用來延時(shí),會(huì)有點(diǎn)誤差,因?yàn)槿蝿?wù)調(diào)度會(huì)消耗一點(diǎn)時(shí)間。

為什么使用第一個(gè)函數(shù),能發(fā)生任務(wù)調(diào)度?看代碼如下:

因?yàn)楹瘮?shù)的實(shí)現(xiàn)中有任務(wù)調(diào)度函數(shù)。

實(shí)際的任務(wù)調(diào)度代碼源頭在哪?進(jìn)入看看

在點(diǎn)擊進(jìn)入發(fā)現(xiàn)。進(jìn)不了了。實(shí)際這個(gè)函數(shù)由匯編代碼實(shí)現(xiàn)

5.5.2 軟件定時(shí)器

實(shí)現(xiàn)UCOS軟件定時(shí)器需要注意兩點(diǎn):

  • 打開定時(shí)器代碼,會(huì)發(fā)現(xiàn)創(chuàng)建定時(shí)器代碼都是灰色,需要修改一個(gè)宏


第二,定義一個(gè)優(yōu)先級,編譯你就會(huì)發(fā)現(xiàn)這個(gè)優(yōu)先級了,注意優(yōu)先級不能設(shè)置跟其他任務(wù)的有效一樣。

編寫代碼驗(yàn)證,編寫如下代碼:

   #include "main.h"
     #include "includes.h"
      
      
     OS_TMR  *tmr;//定時(shí)器。
      
     void MyCallback (OS_TMR *ptmr, void *p_arg);//回調(diào)函數(shù)
      
     int main(void)
{
               OSSysTickInit();//滴答定時(shí)器初始化
               USART1_Init(115200);//初始化串口,用于調(diào)試
              
               OSInit();                             //操作系統(tǒng)初始化
               //創(chuàng)建定時(shí)器
               tmr=OSTmrCreate (50,//第一次使用,規(guī)定10個(gè)滴答為1秒鐘--所以第一次定時(shí)5秒鐘
                    10,//第二次以后使用--定時(shí)1秒鐘
                    OS_TMR_OPT_PERIODIC,//循環(huán)模式
                    (void *)MyCallback,//回調(diào)函數(shù)
                    0,//回調(diào)函數(shù)參數(shù)
                    0,//定時(shí)器名字
                    0);//錯(cuò)誤類型
              
               //啟動(dòng)定時(shí)器
               OSTmrStart (tmr,//要啟動(dòng)的定時(shí)器
                  0);//錯(cuò)誤類型--成功
              
               OSStart();//啟動(dòng)操作系統(tǒng)
}
  
void MyCallback (OS_TMR *ptmr, void *p_arg)
{
               printf("定時(shí)器創(chuàng)建成功\r\n");
}

實(shí)驗(yàn)結(jié)果如下:

定時(shí)器,一次滴答多少時(shí)間?


5.5.3 其他函數(shù)

給調(diào)度器上鎖與解鎖,一般用于初始化任務(wù)。

臨界區(qū):是被保護(hù)的區(qū)域,一般不允許被中斷,所以進(jìn)入之前需要關(guān)閉中斷,出來時(shí),要打開中斷功能。


全部資料51hei下載地址:

程序.7z (373.07 KB, 下載次數(shù): 11)

UCOS之任務(wù)間通信、軟件定時(shí)器補(bǔ)充.docx (4.21 MB, 下載次數(shù): 11)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:328014 發(fā)表于 2020-6-30 18:19 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91视频在线观看 | 日韩欧美在线观看 | 国产精品观看 | 欧美日韩一区二区三区四区五区 | 久国久产久精永久网页 | 国产清纯白嫩初高生在线播放视频 | 欧美一区二区 | 综合欧美亚洲 | 99精品国自产在线观看 | 色综合久久88色综合天天 | 中文字幕一区二区三区精彩视频 | 精品无码久久久久国产 | 亚洲视频在线观看 | 亚洲风情在线观看 | 日韩三区 | 亚洲毛片在线观看 | 亚洲a级| 国产精品69毛片高清亚洲 | 在线一区二区观看 | 一区二区三区国产精品 | 亚洲午夜精品一区二区三区 | 在线观看三级av | 中文字幕一区二区三区不卡 | 欧美一级片久久 | 中国大陆高清aⅴ毛片 | 中日韩av| 男人亚洲天堂 | 久久福利 | 欧美精品一区二区三区在线播放 | 色综合久久久久 | 春色av| 欧美久久久久 | 91综合网 | 欧美综合在线视频 | 国产成人福利视频在线观看 | 国产精品永久免费视频 | 久久久久久国产 | 精品入口麻豆88视频 | 一区二区免费在线观看 | 国产精品久久 | 欧美中国少妇xxx性高请视频 |