[AT32L021] 【AT-START-L021测评】FREERTOS之队列实验

[复制链接]
 楼主| 比神乐 发表于 2024-12-9 16:07 | 显示全部楼层 |阅读模式
代码:
  1. #include "at32l021_board.h"
  2. #include "at32l021_clock.h"
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. #include "queue.h"
  6. #include "semphr.h"
  7. #include "stdio.h"
  8. /** @addtogroup UTILITIES_examples
  9.   * @{
  10.   */
  11. int cnt=0;
  12. QueueHandle_t Key_Queue;
  13. #define KEYMSG_Q_NUM 1
  14. /** @addtogroup FreeRTOS_demo
  15.   * @{
  16.   */

  17. //unsigned char const mainSENDER_1=30;
  18. //unsigned char const mainSENDER_2=50;
  19. button_type at32_button_press(void);
  20. void task1(void *pvParameters)
  21. {
  22.     //uint8_t key;
  23.                 BaseType_t err;
  24.                 button_type key=0;
  25.     while(1)
  26.     {
  27.                                 cnt++;
  28.                                
  29.                                         err=xQueueOverwrite(Key_Queue,&cnt);
  30.                                         //err=xQueueSend(Key_Queue,&key,10);
  31.                                         if(err!=pdTRUE)
  32.                                         {
  33.                                                 printf("Queue Send Failed!\r\n");
  34.                                         }
  35.                                         else
  36.                                         {
  37.                                                 printf("Queue Send Succeed!\r\n");
  38.                                         }

  39.         //LED0_TOGGLE();                                                  /* LED0闪烁 */
  40.         vTaskDelay(1000);                                               /* 延时1000ticks */
  41.     }
  42. }

  43. /**
  44. * [url=home.php?mod=space&uid=247401]@brief[/url]       task2
  45. * @param       pvParameters : 传入参数(未用到)
  46. * @retval      无
  47. */

  48. void Keyprocess_task(void *pvParameters)
  49. {
  50.     uint8_t key;
  51.     BaseType_t err;
  52.     while(1)
  53.     {
  54.                                                         /* 更新数值 */
  55.         //printf("task3正在运行!!!\r\n");  /* 打印数值 */
  56.         
  57.                                 if(Key_Queue!=NULL)
  58.                                 {
  59.                                         err=xQueueReceive(Key_Queue,&key,portMAX_DELAY);
  60.                                         if(err==pdTRUE)
  61.                                         {
  62.                                                 printf("cnt value=%d\r\n",cnt);
  63.                                         }
  64.                                 }
  65. //                                else
  66. //                                {
  67. //                               
  68. //                                        vTaskDelay(1000);                           /* 延时1000ticks */
  69. //                                }
  70.     }
  71. }


  72. /**
  73.   * @brief  main function.
  74.   * @param  none
  75.   * @retval none
  76.   */
  77. int main(void)
  78. {
  79.   system_clock_config();
  80.         delay_init();
  81.   /* init led2 and led3 */
  82.   at32_led_init(LED2);
  83.   at32_led_init(LED3);
  84.         at32_button_init();
  85.   /* init usart1 */
  86.   uart_print_init(115200);

  87.   
  88.         Key_Queue=xQueueCreate(KEYMSG_Q_NUM,sizeof(uint8_t));
  89.        
  90.                 /* create led2 task */
  91.                 xTaskCreate(task1,
  92.                  "vTask1",
  93.                  512,
  94.                 (void *)30,
  95.                  
  96.                                                                  3,
  97.                 NULL);
  98.                
  99.                 xTaskCreate(Keyprocess_task,
  100.                  "vTask2",
  101.                  128,
  102.                  NULL,
  103.                  3,
  104.                  NULL);


  105.                 /* start scheduler */
  106.                 vTaskStartScheduler();
  107.        
  108. }

运行效果图:
8.jpg
问天少年 发表于 2024-12-10 18:44 | 显示全部楼层
FREERTOS怎么实现us的延时,可以回一下吗?vTaskDelay是毫秒级的
 楼主| 比神乐 发表于 2024-12-10 19:55 | 显示全部楼层
问天少年 发表于 2024-12-10 18:44
FREERTOS怎么实现us的延时,可以回一下吗?vTaskDelay是毫秒级的

不知道
呐咯密密 发表于 2024-12-12 10:07 | 显示全部楼层
稍微讲解一下啊,这太简略了
 楼主| 比神乐 发表于 2024-12-12 22:25 | 显示全部楼层
主程序创建队列,task1发送队列,Keyprocess_task接收队列
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部