你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G0学习手册——FreeRTOS消息队列

[复制链接]
STMCU小助手 发布时间:2022-10-28 15:27
1.创建好带有printf-stdarg.c的FreeRTOS的工程

2.修改main.c文件

  1. /* Private includes ----------------------------------------------------------*/
  2. /* USER CODE BEGIN Includes */

  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. #include "queue.h"
  6. #include <stdio.h>
  7. #include <string.h>

  8. /* USER CODE END Includes */

  9. /* Private typedef -----------------------------------------------------------*/
  10. /* USER CODE BEGIN PTD */

  11. /* USER CODE END PTD */

  12. /* Private define ------------------------------------------------------------*/
  13. /* USER CODE BEGIN PD */

  14. #define QUEUE_LEN   4
  15. #define QUEUE_SIZE  4

  16. /* USER CODE END PD */

  17. /* Private macro -------------------------------------------------------------*/
  18. /* USER CODE BEGIN PM */
  19. static TaskHandle_t CreateAppTask_Handle = NULL;
  20. static TaskHandle_t Led1Task_Handle =  NULL;
  21. static TaskHandle_t Led2Task_Handle =  NULL;

  22. static QueueHandle_t Message1 = NULL;

  23. extern int f_printf(const char *format, ...);

  24. /* USER CODE END PM */

  25. /* Private variables ---------------------------------------------------------*/

  26. /* USER CODE BEGIN PV */
  27. static void CreateAppTask(void);
  28. static void Led1Task(void);
  29. static void Led2Task(void);

  30. /* USER CODE END PV */

  31. int main()
  32. {
  33.   /**/

  34.   /* USER CODE BEGIN 2 */

  35.         UBaseType_t xReturn = pdPASS;
  36.         
  37.         xReturn = xTaskCreate((TaskFunction_t) CreateAppTask,
  38.                               (const char *)   "CAP",
  39.                               (uint16_t)       512,
  40.                                                   (void *)         NULL,
  41.                                                   (UBaseType_t)    1,
  42.                                                   (TaskHandle_t *) &CreateAppTask_Handle);
  43.         
  44.   if(xReturn == pdPASS)
  45.         {
  46.                 f_printf("start.\r\n");
  47.                 vTaskStartScheduler();
  48.         }

  49.   /* USER CODE END 2 */
  50.   while(1)
  51.   {

  52.   }
  53. }

  54. /* USER CODE BEGIN 4 */
  55. static void CreateAppTask(void)
  56. {
  57.         UBaseType_t xReturn = pdPASS;
  58.         
  59.     taskENTER_CRITICAL();
  60.         
  61.         /*消息队列任务一定要在调用的任务前面创建,不然代码运行不了*/
  62.         Message1 = xQueueCreate((UBaseType_t)QUEUE_LEN , (UBaseType_t)QUEUE_SIZE);
  63.         
  64.         taskEXIT_CRITICAL();
  65.         
  66.         xReturn = xTaskCreate((TaskFunction_t) Led1Task,
  67.                                                                                                 (const char *) "LED1TASK",
  68.                                                                                                 (uint16_t)      512,
  69.                                                                                                 (void *)        NULL,
  70.                                                                                                 (UBaseType_t)  1,
  71.                                                                                                 (TaskHandle_t *) &Led1Task_Handle);
  72.         
  73.     xReturn = xTaskCreate((TaskFunction_t) Led2Task,
  74.                                                                                                 (const char*) "LED2TASK",                                                                                                
  75.                                                                                                 (uint16_t)     512,
  76.                                                                                                 (void *)       NULL,
  77.                                                                                                 (UBaseType_t)  2,
  78.                                                                                                 (TaskHandle_t *) &Led2Task_Handle);
  79.         if(xReturn ==pdPASS)
  80.                 f_printf("TASKCREATE PASS.\r\n");
  81.         

  82.         
  83.         if(NULL != Message1)
  84.         {
  85.           f_printf("QUEUE PASS.\r\n");
  86.           vTaskDelete((TaskHandle_t)CreateAppTask_Handle);
  87.         }
  88. }
  89. static void Led1Task(void)
  90. {
  91.         while(1)
  92.         {
  93.                 UBaseType_t xReturn ;
  94.                 uint16_t a=1;
  95.                 uint16_t temp=0;
  96.                 uint16_t temp2=0;

  97.                 if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))
  98.                 {
  99.                         for(temp = 0 ; temp < 10 ; temp++)
  100.                         {
  101.                                 if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))
  102.                                 {
  103.                                         temp2 |= 1;
  104.                                         temp2 <<= 1;
  105.                                         vTaskDelay(30);
  106.                                 }
  107.                                 else
  108.                                 {
  109.                                         temp2 &= 0xFFFE;
  110.                                         temp2 <<= 1;
  111.                                         vTaskDelay(30);
  112.                                 }
  113.                         }
  114.                         if(temp2 > 0x1F)
  115.                         {
  116.                           xReturn = xQueueSend(Message1,&a,0);
  117.                           if(xReturn == pdPASS)
  118.                           f_printf("SEND PASS \r\n");
  119.                         }
  120.                 }

  121.         }
  122. }
  123. static void Led2Task(void)
  124. {
  125.         while(1)
  126.         {
  127.                 BaseType_t xReturn = pdTRUE;
  128.                 uint16_t receive_buff ;
  129.                 xReturn = xQueueReceive (Message1, &receive_buff,portMAX_DELAY);
  130.                
  131.                 if(xReturn == pdTRUE)
  132.                 {
  133.                         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
  134.                         f_printf("RECEIVE PASS\r\n");
  135.                 }

  136.         }
  137. }

  138. /* USER CODE END 4 */
复制代码


————————————————
版权声明:SCCELE

收藏 评论0 发布时间:2022-10-28 15:27

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版