• freeRTOS学习day2任务创建(静态创建)


    静态创建相比较更加麻烦

    1. #include "sys.h"
    2. #include "delay.h"
    3. #include "usart.h"
    4. #include "led.h"
    5. #include "FreeRTOS.h"
    6. #include "task.h"
    7. #define START_TASK_PRIO 1 //任务优先级
    8. #define START_STK_SIZE 120 //任务堆栈
    9. StackType_t StartTaskStack[START_STK_SIZE];
    10. StaticTask_t StartTaskTCB;
    11. TaskHandle_t Start_Handler;
    12. void start_task(void *pvParameters);
    13. #define Task1_TASK_PRIO 2 //任务优先级
    14. #define Task1_STK_SIZE 120 //任务堆栈
    15. StackType_t Task1Stack[START_STK_SIZE];
    16. StaticTask_t Task1TCB;
    17. TaskHandle_t Task1_Handler;
    18. void task1_task(void *pvParameters);
    19. #define Task2_TASK_PRIO 3 //任务优先级
    20. #define Task2_STK_SIZE 120 //任务堆栈
    21. StackType_t Task2Stack[START_STK_SIZE];
    22. StaticTask_t Task2TCB;
    23. TaskHandle_t Task2_Handler;
    24. void task2_task(void *pvParameters);
    25. #define Task3_TASK_PRIO 4 //任务优先级
    26. #define Task3_STK_SIZE 120 //任务堆栈
    27. StackType_t Task3Stack[START_STK_SIZE];
    28. StaticTask_t Task3TCB;
    29. TaskHandle_t Task3_Handler;
    30. void task3_task(void *pvParameters);
    31. void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );
    32. //*******************下面注释掉的代码是通过 位带 操作实现IO口控制**************************************
    33. //空闲任务
    34. static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
    35. static StaticTask_t IdleTaskTCB;
    36. //定时器任务
    37. static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];
    38. static StaticTask_t TimerTaskTCB;
    39. //空闲任务所需内存
    40. void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
    41. {
    42. *ppxIdleTaskTCBBuffer=&IdleTaskTCB;
    43. *ppxIdleTaskStackBuffer=IdleTaskStack;
    44. *pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;
    45. }
    46. //定时器任务所需内存
    47. void vApplicationGetTimerTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
    48. {
    49. *ppxIdleTaskTCBBuffer=&TimerTaskTCB;
    50. *ppxIdleTaskStackBuffer=TimerTaskStack;
    51. *pulIdleTaskStackSize=configTIMER_TASK_STACK_DEPTH;
    52. }
    53. int main(void)
    54. {
    55. uart_init(115200);
    56. delay_init(168); //初始化延时函数
    57. LED_Init(); //初始化LED端口
    58. while(1)
    59. {
    60. xTaskCreateStatic( (TaskFunction_t) start_task,
    61. ( char * ) "start_task",
    62. ( uint32_t) START_STK_SIZE,
    63. (void *) NULL,
    64. (UBaseType_t) START_TASK_PRIO,
    65. (StackType_t *) StartTaskStack,
    66. (StaticTask_t *) &StartTaskTCB);
    67. vTaskStartScheduler();// 开启任务调度器 注意一定要开启
    68. }
    69. }
    70. //创建开始任务
    71. void start_task(void *pvParameters)
    72. {
    73. //创建Task1
    74. xTaskCreateStatic( (TaskFunction_t) task1_task,
    75. ( char * ) "task1_task",
    76. ( uint32_t) Task1_STK_SIZE,
    77. (void *) NULL,
    78. (UBaseType_t) Task1_TASK_PRIO,
    79. (StackType_t *) Task1Stack,
    80. (StaticTask_t *) &Task1TCB);
    81. //创建Task2
    82. xTaskCreateStatic( (TaskFunction_t) task2_task,
    83. ( char * ) "task2_task",
    84. ( uint32_t) Task2_STK_SIZE,
    85. (void *) NULL,
    86. (UBaseType_t) Task2_TASK_PRIO,
    87. (StackType_t *) Task2Stack,
    88. (StaticTask_t *) &Task2TCB);
    89. //创建Task3
    90. xTaskCreateStatic( (TaskFunction_t) task3_task,
    91. ( char * ) "task3_task",
    92. ( uint32_t) Task3_STK_SIZE,
    93. (void *) NULL,
    94. (UBaseType_t) Task3_TASK_PRIO,
    95. (StackType_t *) Task3Stack,
    96. (StaticTask_t *) &Task3TCB);
    97. vTaskDelete(Start_Handler);
    98. }
    99. void task1_task(void *pvParameters)
    100. {
    101. while(1)
    102. {
    103. printf("task 1 is ok\r\n");
    104. vTaskDelay(500);
    105. }
    106. }
    107. void task2_task(void *pvParameters)
    108. {
    109. while(1)
    110. {
    111. printf("task 2 is ok\r\n");
    112. vTaskDelay(800);
    113. }
    114. }
    115. void task3_task(void *pvParameters)
    116. {
    117. while(1)
    118. {
    119. printf("task 3 is ok\r\n");
    120. vTaskDelay(1000);
    121. }
    122. }

  • 相关阅读:
    AutoGPT:让 AI 帮你完成任务事情 | 开源日报 No.54
    抖音招聘直播报白是通过直播方式展现职位信息适用于企业和人力资源公司
    【Linux】自旋锁
    Android 10.0 禁用插入耳机时弹出的保护听力对话框
    zabbix监控
    Umi 相关
    Vue3打包构建从webpack改为vite
    Ubuntu20.04 安装 CUDA10.1 和 CUDNN7.6.5
    2022-08-27 第六小组 瞒春 学习笔记
    【历史上的今天】10 月 12 日:C 语言之父逝世;西门子诞生;乔布斯推出 NeXT 电脑
  • 原文地址:https://blog.csdn.net/weixin_64975583/article/details/133988374