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

標題: STM32 FREERTOS移植教程與源碼 [打印本頁]

作者: lkyailx    時間: 2018-7-25 20:21
標題: STM32 FREERTOS移植教程與源碼
原子FREERTOS移植教程,包括例程源碼

全部資料51hei下載地址:
STM32F103 FreeRTOS開發手冊V1.1.pdf (10.79 MB, 下載次數: 35)
FreeRTOS任務掛起和恢復.rar (1.23 MB, 下載次數: 31)


單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "sdram.h"
  7. #include "key.h"
  8. #include "FreeRTOS.h"
  9. #include "task.h"

  10. //任務優先級
  11. #define START_TASK_PRIO                1
  12. //任務堆棧大小       
  13. #define START_STK_SIZE                 128  
  14. //任務句柄
  15. TaskHandle_t StartTask_Handler;
  16. //任務函數
  17. void start_task(void *pvParameters);

  18. //任務優先級
  19. #define TASK1_TASK_PRIO                2
  20. //任務堆棧大小       
  21. #define TASK1_STK_SIZE                 128  
  22. //任務句柄
  23. TaskHandle_t Task1Task_Handler;
  24. //任務函數
  25. void task1_task(void *pvParameters);

  26. //任務優先級
  27. #define TASK2_TASK_PRIO                3
  28. //任務堆棧大小       
  29. #define TASK2_STK_SIZE                 128  
  30. //任務句柄
  31. TaskHandle_t Task2Task_Handler;
  32. //任務函數
  33. void task2_task(void *pvParameters);

  34. //任務優先級
  35. #define KEY_TASK_PRIO                4
  36. //任務堆棧大小       
  37. #define KEY_STK_SIZE                 128  
  38. //任務句柄
  39. TaskHandle_t KeyTask_Handler;
  40. //任務函數
  41. void key_task(void *pvParameters);

  42. int main(void)
  43. {
  44.     HAL_Init();                     //初始化HAL庫   
  45.     Stm32_Clock_Init(360,25,2,8);   //設置時鐘,180Mhz
  46.         delay_init(180);                //初始化延時函數
  47.         uart_init(115200);              //初始化串口
  48.     LED_Init();                     //初始化LED
  49.         KEY_Init();                                                //初始化按鍵
  50.        
  51.     //創建開始任務
  52.     xTaskCreate((TaskFunction_t )start_task,            //任務函數
  53.                 (const char*    )"start_task",          //任務名稱
  54.                 (uint16_t       )START_STK_SIZE,        //任務堆棧大小
  55.                 (void*          )NULL,                  //傳遞給任務函數的參數
  56.                 (UBaseType_t    )START_TASK_PRIO,       //任務優先級
  57.                 (TaskHandle_t*  )&StartTask_Handler);   //任務句柄               
  58.     vTaskStartScheduler();          //開啟任務調度
  59. }

  60. //開始任務任務函數
  61. void start_task(void *pvParameters)
  62. {
  63.     taskENTER_CRITICAL();           //進入臨界區
  64.         //創建KEY TASK任務
  65.     xTaskCreate((TaskFunction_t )key_task,            
  66.                 (const char*    )"key_task",           
  67.                 (uint16_t       )KEY_STK_SIZE,        
  68.                 (void*          )NULL,                  
  69.                 (UBaseType_t    )KEY_TASK_PRIO,        
  70.                 (TaskHandle_t*  )&KeyTask_Handler);
  71.                                
  72.     //創建TASK1任務
  73.     xTaskCreate((TaskFunction_t )task1_task,            
  74.                 (const char*    )"task1_task",           
  75.                 (uint16_t       )TASK1_STK_SIZE,        
  76.                 (void*          )NULL,                  
  77.                 (UBaseType_t    )TASK1_TASK_PRIO,        
  78.                 (TaskHandle_t*  )&Task1Task_Handler);   
  79.     //創建TASK2任務
  80.     xTaskCreate((TaskFunction_t )task2_task,     
  81.                 (const char*    )"task2_task",   
  82.                 (uint16_t       )TASK2_STK_SIZE,
  83.                 (void*          )NULL,
  84.                 (UBaseType_t    )TASK2_TASK_PRIO,
  85.                 (TaskHandle_t*  )&Task2Task_Handler);
  86.     vTaskDelete(StartTask_Handler); //刪除開始任務
  87.     taskEXIT_CRITICAL();            //退出臨界區
  88. }

  89. //key任務函數
  90. void key_task(void *pvParameters)
  91. {
  92.         u8 key;
  93.        
  94.         while(1)
  95.         {
  96.                 key=KEY_Scan(0);
  97.                 switch(key)
  98.                 {
  99.                         case WKUP_PRES:
  100.                                 vTaskSuspend(Task1Task_Handler);
  101.                                 printf("Task1 Suspend!!!\r\n");
  102.                                 break;
  103.                         case KEY1_PRES:
  104.                                 vTaskResume(Task1Task_Handler);
  105.                                 printf("Task1 Resume!!!\r\n");
  106.                                
  107.                 }
  108.                        
  109.                 vTaskDelay(10);
  110.         }
  111. }

  112. //task1任務函數
  113. void task1_task(void *pvParameters)
  114. {
  115.         u8 task1_num=0;
  116.        
  117.         while(1)
  118.         {
  119.                 task1_num++;        //任務執1行次數加1 注意task1_num1加到255的時候會清零!!
  120.                 LED0=!LED0;
  121.                 printf("任務1已經執行:%d次\r\n",task1_num);

  122.         vTaskDelay(1000);                           //延時1s,也就是1000個時鐘節拍       
  123.         }
  124. }

  125. //task2任務函數
  126. void task2_task(void *pvParameters)
  127. {
  128.         u8 task2_num=0;
  129.        
  130.         while(1)
  131.         {
  132.                 task2_num++;        //任務2執行次數加1 注意task1_num2加到255的時候會清零。
  133.         LED1=!LED1;
  134.                 printf("任務2已經執行:%d次\r\n",task2_num);
  135.         vTaskDelay(1000);                           //延時1s,也就是1000個時鐘節拍       
  136.         }
  137. }

復制代碼



作者: wdliming    時間: 2018-9-22 11:27
謝謝分享~~~~




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线观看国产免费视频 | 国产黄色在线观看 | 免费国产视频 | 欧美日韩91 | 亚洲高清在线 | 亚洲日本一区二区 | 日韩一区二区av | 国产免费成人 | 精品国产乱码久久久久 | 中文一级片 | 免费精品视频 | 日本黄色三级视频 | 四虎8848精品成人免费网站 | 亚洲精品久久久久 | 国产一级片在线播放 | 成人精品在线观看 | 中文天堂网 | 黄色三级免费 | 不卡av在线 | 午夜看看| 日本在线免费观看视频 | 国产成人精品免费视频 | 六月色| 成人国产在线观看 | 在线国产小视频 | 91视频色 | 久久久精品 | 国产精品一级 | 中文字幕在线免费播放 | 美日韩精品 | 中国a一片一级一片 | 久久都是精品 | 亚洲精品影院 | 韩国理论在线 | 国产成人免费在线观看 | 国产黄色一级片 | 欧美亚洲视频 | 99re在线视频 | 黄色片网站免费 | 午夜激情在线观看 | 一级免费黄色片 |