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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

STM32 UOSII系統(tǒng)任務(wù)調(diào)度源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:389262 發(fā)表于 2018-8-23 15:37 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
UCOSII系統(tǒng)建立了兩個(gè)優(yōu)先級(jí)不同的任務(wù)
通過設(shè)置任務(wù)間的延時(shí)實(shí)時(shí)調(diào)度任務(wù)
寄存器版程序驗(yàn)證OK
例如優(yōu)先級(jí)別為64
系統(tǒng)空閑任務(wù)為最低優(yōu)先級(jí)64-1
統(tǒng)計(jì)任務(wù)優(yōu)先級(jí)為64-2
任務(wù)堆棧
堆棧為后進(jìn)先出,先進(jìn)后出
任務(wù)創(chuàng)建時(shí)應(yīng)該依據(jù)處理堆棧的生長方向(向上生長【低地址在下】和向下生長【低地址在上】)
M3的棧生長方向?yàn)楦叩刂废虻偷刂吩鲩L即向上增長的
棧的地址是從頂端開始傳遞的

優(yōu)先級(jí)使用
0 1 2 3 OS_LOWEST_PRIO-3 OS_LOWEST_PRIO-2 OS_LOWEST_PRIO-1 OS_LOWEST_PRIO

開發(fā)者:h

stm32單片機(jī)源程序如下:
  1. #include "sys.h"
  2. #include "usart.h"               
  3. #include "delay.h"        
  4. #include "led.h"
  5. #include "includes.h"
  6.          


  7. /////////////////////////UCOSII任務(wù)設(shè)置///////////////////////////////////
  8. //START 任務(wù)
  9. //設(shè)置任務(wù)優(yōu)先級(jí)
  10. #define START_TASK_PRIO                              10 //開始任務(wù)的優(yōu)先級(jí)設(shè)置為最低
  11. //設(shè)置任務(wù)堆棧大小
  12. #define START_STK_SIZE                                  64
  13. //任務(wù)堆棧        
  14. OS_STK START_TASK_STK[START_STK_SIZE];
  15. //任務(wù)函數(shù)
  16. void start_task(void *pdata);        
  17.                            
  18. //LED0任務(wù)
  19. //設(shè)置任務(wù)優(yōu)先級(jí)
  20. #define LED0_TASK_PRIO                               6
  21. //設(shè)置任務(wù)堆棧大小
  22. #define LED0_STK_SIZE                                      64
  23. //任務(wù)堆棧        
  24. OS_STK LED0_TASK_STK[LED0_STK_SIZE];
  25. //任務(wù)函數(shù)
  26. void led0_task(void *pdata);


  27. //LED1任務(wù)
  28. //設(shè)置任務(wù)優(yōu)先級(jí)
  29. #define LED1_TASK_PRIO                               7
  30. //設(shè)置任務(wù)堆棧大小
  31. #define LED1_STK_SIZE                                          64
  32. //任務(wù)堆棧
  33. OS_STK LED1_TASK_STK[LED1_STK_SIZE];
  34. //任務(wù)函數(shù)
  35. void led1_task(void *pdata);

  36. //LED2任務(wù)
  37. //設(shè)置任務(wù)優(yōu)先級(jí)
  38. #define LED2_TASK_PRIO                               8
  39. //設(shè)置任務(wù)堆棧大小
  40. #define LED2_STK_SIZE                                          64
  41. //任務(wù)堆棧
  42. OS_STK LED2_TASK_STK[LED2_STK_SIZE];
  43. //任務(wù)函數(shù)
  44. void led2_task(void *pdata);

  45. //LED3任務(wù)
  46. //設(shè)置任務(wù)優(yōu)先級(jí)
  47. #define LED3_TASK_PRIO                               9
  48. //設(shè)置任務(wù)堆棧大小
  49. #define LED3_STK_SIZE                                          64
  50. //任務(wù)堆棧
  51. OS_STK LED3_TASK_STK[LED3_STK_SIZE];
  52. //任務(wù)函數(shù)
  53. void led3_task(void *pdata);



  54. //任務(wù)函數(shù)解析
  55. //OSTimeTick() 系統(tǒng)服務(wù)函數(shù)         時(shí)鐘節(jié)拍函數(shù)
  56. //OSTimeTickHook() 時(shí)鐘節(jié)拍外連函數(shù)
  57. //OSTimeDly()  OSTimeDlyHMSM() 任務(wù)延時(shí)函數(shù)
  58. //OSTaskStat() 統(tǒng)計(jì)時(shí)間運(yùn)行任務(wù) 用來計(jì)算CPU使用率
  59. //OSStatInit() 系統(tǒng)統(tǒng)計(jì)初始化函數(shù)
  60. //OS_TaskIdle()         空閑任務(wù)
  61. //OS_TaskStat()         統(tǒng)計(jì)任務(wù)
  62. //TickTask()     時(shí)鐘節(jié)拍任務(wù)
  63. //OSTickISR()   時(shí)鐘節(jié)拍中斷服務(wù)函數(shù)
  64. //OSVersion()   獲取UCOS的版本號(hào)
  65. //OSTaskDel(OS_PRIO_SELF)  任務(wù)刪除
  66. //OSTaskCreateExt 任務(wù)創(chuàng)建擴(kuò)展函數(shù)
  67. //OSTaskStkChk()  堆棧檢驗(yàn)函數(shù)

  68. int main(void)
  69. {                                   
  70.         Stm32_Clock_Init(9); //系統(tǒng)時(shí)鐘設(shè)置
  71.         delay_init(72);             //延時(shí)初始化        
  72.         uart_init(72,9600);         //初始化串口
  73. //        LED_Init();                        
  74.         LED_Init();                           //初始化與LED連接的硬件接口
  75.         OSInit();   
  76.          OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//創(chuàng)建起始任務(wù)
  77.         OSStart();                  
  78. }

  79.          
  80. //開始任務(wù)
  81. void start_task(void *pdata)
  82. {
  83.     OS_CPU_SR cpu_sr=0;
  84.         pdata = pdata;
  85.         OSSysTickInit();

  86.           OS_ENTER_CRITICAL();                        //進(jìn)入臨界區(qū)(無法被中斷打斷)   
  87.          OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);                                                   
  88.          OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
  89.         OSTaskCreate(led2_task,(void *)0,(OS_STK*)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO);
  90.         OSTaskCreate(led3_task,(void *)0,(OS_STK*)&LED3_TASK_STK[LED3_STK_SIZE-1],LED3_TASK_PRIO);                                                   
  91.         OSTaskSuspend(START_TASK_PRIO);        //掛起起始任務(wù).
  92.         OS_EXIT_CRITICAL();                                //退出臨界區(qū)(可以被中斷打斷)
  93. }
  94. /***************************************/
  95. void delay(u16 tt)
  96. {
  97. u16 kk;
  98. while(tt--)
  99. {
  100.   for(kk=0;kk<8000;kk++)
  101.   ;
  102. }
  103. }
  104. //LED0任務(wù)
  105. void led0_task(void *pdata)
  106. {                 
  107.         while(1)
  108.         {
  109.             OSTimeDly(2);//自身延時(shí)函數(shù) OSTimeDlyHMSM()表示等待狀態(tài)
  110.         /*        LED0=0;
  111.                 delay_ms(80);
  112.                 LED0=1;
  113.                 delay_ms(920);
  114.                 printf("按鍵1已經(jīng)按下\r\n"); */
  115.                 if(KEY22==0)
  116.                 {
  117.                  delay_ms(10);
  118.                  if(KEY22==0)
  119.                  {
  120.                   while(KEY22==0);
  121.                   delay_ms(10);
  122.                   while(KEY22==0);
  123.                   Uart1_PutString("按鍵1已經(jīng)按下\r\n");
  124.                  }        
  125.                 }
  126.         };
  127. }

  128. //LED1任務(wù)
  129. void led1_task(void *pdata)
  130. {         
  131.         while(1)
  132.         {
  133.             OSTimeDly(2);
  134.                 switch(FLAG_YY)
  135.                 {
  136.                  case 1:printf("任務(wù)2成功實(shí)現(xiàn)\r\n");FLAG_YY=0;break;
  137.                  case 2:printf("22任務(wù)成功實(shí)現(xiàn)\r\n");FLAG_YY=0;break;
  138.                  case 3:printf("33任務(wù)成功實(shí)現(xiàn)\r\n");FLAG_YY=0;break;
  139.                  default:break;
  140.                 }
  141. /*                LED1=0;
  142.                 delay_ms(300);
  143.                 LED1=1;
  144.                 printf("按鍵已經(jīng)按下\r\n");
  145.                 delay_ms(300); */
  146. /*        if(KEY_K==0)
  147.                 {
  148.                  delay_ms(10);
  149.                  if(KEY_K==0)
  150.                  {
  151.                   while(KEY_K==0);
  152.                   delay_ms(10);
  153.                   while(KEY_K==0);
  154.                   printf("按鍵2已經(jīng)按下\r\n");
  155.                  }        
  156.                 }  */
  157.         };
  158. }
  159. //LED2任務(wù)
  160. void led2_task(void *pdata)
  161. {         
  162.         while(1)
  163.         {
  164.             OSTimeDly(2);
  165.            if(KEY_K==0)
  166.            {
  167.              delay_ms(10);
  168.                  if(KEY_K==0)
  169.                  {
  170.                   while(KEY_K==0);
  171.                   delay_ms(10);
  172.                   while(KEY_K==0);
  173.                   printf("led 狀態(tài)反轉(zhuǎn)\r\n");
  174.                  }
  175.            }
  176. /*                LED1=0;
  177.                 delay_ms(300);
  178.                 LED1=1;
  179.                 printf("按鍵已經(jīng)按下\r\n");
  180.                 delay_ms(300); */
  181. /*        if(KEY_K==0)
  182.                 {
  183.                  delay_ms(10);
  184.                  if(KEY_K==0)
  185.                  {
  186.                   while(KEY_K==0);
  187.                   delay_ms(10);
  188.                   while(KEY_K==0);
  189.                   printf("按鍵2已經(jīng)按下\r\n");
  190.                  }        
  191.                 }  */
  192.         };
  193. }
  194. //LED3任務(wù)
  195. void led3_task(void *pdata)
  196. {         
  197.         while(1)
  198.         {
  199.             OSTimeDly(2);
  200.            if(KEY11==0)
  201.            {
  202.              delay_ms(10);
  203.                  if(KEY11==0)
  204.                  {
  205.                   while(KEY11==0);
  206.                   delay_ms(10);
  207.                   while(KEY11==0);
  208.                   printf("led1 狀態(tài)反轉(zhuǎn)\r\n");
  209.                  }
  210.            }
  211. /*                LED1=0;
  212.                 delay_ms(300);
  213.                 LED1=1;
  214.                 printf("按鍵已經(jīng)按下\r\n");
  215.                 delay_ms(300); */
  216. /*        if(KEY_K==0)
  217.                 {
  218.                  delay_ms(10);
  219.                  if(KEY_K==0)
  220.                  {
  221.                   while(KEY_K==0);
  222.                   delay_ms(10);
  223.                   while(KEY_K==0);
  224.                   printf("按鍵2已經(jīng)按下\r\n");
  225.                  }        
  226.                 }  */
  227.         };
  228. }
復(fù)制代碼

所有資料51hei提供下載:
STM32UCOSII 任務(wù)調(diào)度.rar (402.17 KB, 下載次數(shù): 13)



評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 综合五月 | 日韩精品视频在线观看一区二区三区 | 日日草夜夜草 | 人人干人人艹 | 国产成人综合一区二区三区 | 亚洲一区二区中文字幕在线观看 | 亚洲天堂色 | 久久久精品视频一区二区三区 | 日韩不卡一区二区 | 久久久久久免费毛片精品 | 日韩精品免费 | 国产精品成人一区二区三区夜夜夜 | 日韩欧美亚洲一区 | aaaaaa大片免费看最大的 | 久久国产精品一区二区三区 | 天天亚洲 | 二区三区视频 | 中文字幕综合 | 欧美性视频在线播放 | 日韩免费 | 国产精品久久久久久一级毛片 | 国产视频1区 | 麻豆亚洲| 亚洲精品在线免费 | 亚洲欧洲成人av每日更新 | 亚洲免费一区二区 | 久久大| 中文字幕电影在线观看 | re久久| 日韩无| 伊人精品在线 | 欧美精品综合 | 日韩在线精品强乱中文字幕 | 亚洲精品一区二区 | www.欧美视频| 中文字幕在线一区 | 国产精品久久久久久久久 | 涩涩鲁亚洲精品一区二区 | 国产精品九九九 | 日本免费一区二区三区四区 | 国产在线一区二区三区 |