一、动态方式创建任务和删除任务
1>测试环境
系统:WIN7
MDK:keil v5.26
开发板:GD32F303C-EVAL
固件库:V1.0.2
FreeRTOS版本:V10.4.0
2>需要满足条件
条件一:需要在FreeRTOS.h或FreeRTOSConfig.h中定义
#define configSUPPORT_DYNAMIC_ALLOCATION 1

条件二:加载头文件时,加载FreeRTOS.h必须在task.h之前,如下:

#include "FreeRTOS.h"
#include "task.h"

否则会出现如下错误
.\FreeRTOS\Source\include\task.h(32): error: #35: #error directive: “include FreeRTOS.h must appear in source files before include task.h”

3>代码如下:

#include "gd32f30x.h"
#include "led.h"
#include "systick.h"
#include <stdio.h>
#include "usart.h"#include "FreeRTOS.h"
#include "task.h"#define START_TASK_PRIO    ( tskIDLE_PRIORITY + 1 )
#define LED1_TASK_PRIO     ( tskIDLE_PRIORITY + 2 )
#define LED2_TASK_PRIO     ( tskIDLE_PRIORITY + 3 )void START_task(void * pvParameters);
void LED1_task(void * pvParameters);
void LED2_task(void * pvParameters);/*创建START_task任务的句柄,用于删除等操作。*/
TaskHandle_t xHandle = NULL;int main(void)
{/* 设置中断分组为4,16个全是抢占优先级*/nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);GW_LedInit(LED1);GW_LedInit(LED2);GW_ComInit(GW_COM3);xTaskCreate((TaskFunction_t   ) START_task,(const char*      ) "start_task",(uint16_t         ) configMINIMAL_STACK_SIZE,(void*            ) NULL,(UBaseType_t      ) START_TASK_PRIO,(TaskHandle_t *   ) &xHandle);/* start scheduler */vTaskStartScheduler();while(1){}
}
/*开始任务:创建两个任务后删除自身*/
void START_task(void * pvParameters)
{static uint8_t ucParameterToPass=5;taskENTER_CRITICAL();           //进入临界区    xTaskCreate((TaskFunction_t   ) LED1_task,(const char*      ) "LED1_task",(uint16_t         ) configMINIMAL_STACK_SIZE,(void*            ) &ucParameterToPass,(UBaseType_t      ) LED1_TASK_PRIO,(TaskHandle_t *   ) NULL);xTaskCreate((TaskFunction_t   ) LED2_task,(const char*      ) "LED2_task",(uint16_t         ) configMINIMAL_STACK_SIZE,(void*            ) NULL,(UBaseType_t      ) LED2_TASK_PRIO,(TaskHandle_t *   ) NULL);configASSERT( xHandle );            if( xHandle != NULL ){vTaskDelete( xHandle );
//      vTaskDelete( NULL );  //在自身任务中删除任务本身,可以使用NULL代替xHandleprintf("Delete START_task!\r\n");}taskEXIT_CRITICAL();            //退出临界区
}
/*任务1:LED1每隔300ms翻转一次,并打印接收的参数的值*/
void LED1_task(void * pvParameters)
{  uint8_t *tmp=NULL;tmp = (uint8_t *)pvParameters;for( ;; ){/* toggle LED2 each 500ms */printf("LED1_task,value:%d\r\n",*tmp);GW_LedToggle(LED1);vTaskDelay(300);}
}
/*任务2: LED2每隔500ms翻转一次*/
void LED2_task(void * pvParameters)
{  for( ;; ){/* toggle LED2 each 500ms */printf("LED2_task\r\n");GW_LedToggle(LED2);vTaskDelay(500);}
}

二、测试结果


工程下载链接:GD32F303_FreeRTOS动态创建任务

FreeRTOS动态创建任务相关推荐

  1. FreeRTOS学习笔记---动态创建任务 xTaskCreate() 源码分析

    在看FreeRTOS源码的时候,各个函数相互调用,各种参数相互传递,看的人云里雾里,越看越糊涂.为了搞清楚各个函数之间的相互关系,就边看源码,边画思维导图,用文字将函数功能描述出来,搞清楚整个函数框架 ...

  2. FreeRTOS任务创建和删除

    任务创建和删除的API函数 xTaskCreate():使用动态方法创建一个任务 xTaskCreateStatic():使用静态方法创建一个任务 xTaskCreateRestricated():创 ...

  3. python创建类的实例方法-Python中动态创建类实例的方法

    简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模 ...

  4. Javascript:DOM动态创建元素实例应用

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  5. 新建异常并处理java_java – 动态创建异常的工厂模式

    我创建了Exception xml并动态创建并抛出异常. com.package.CheckedException Checked Exception Message com.package.UnCh ...

  6. SpringBoot集成Quartz实现定时任务的动态创建、启动、暂停、恢复、删除。

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:毅大师 blog.csdn.net/qq_39648 ...

  7. Angular动态创建组件之Portals

    本文主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的内容.如:Angular多级依赖注入.ViewContainerRef,Portal ...

  8. asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性

    asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性 就是不用 XXX.Visible = false;  // true 因为这样该容器及其子控件会彻底的从页面上消 ...

  9. [原]动态创建Web控件制做计算器

    最近参加了Web基础开发的培训,收获不少,做了一个练习,在后台动态创建控件制作了一个简单功能的计算器.程序中控件创建好以后,往往不能放在想要的位置,前台的布局非常麻烦,我用Table.TableRow ...

最新文章

  1. python os 获取当前路径的绝对路径的上层目录_os 模块常用函数
  2. Scala入门到精通——第二十四节 高级类型 (三)
  3. Spring JMS:处理事务中的消息
  4. ThinkPHP 的URL重写时遇到No input file specified的解决方法
  5. jquery 逗号分割截取字符串_JS/JQUERY字符串截取分割匹配等处理汇总
  6. 9 Node 中的 TensorFlow.js
  7. tiptop对接泛微OA详细步骤
  8. redis过期策略及配置方式
  9. 如何在 Python 中异步操作数据库?aiomysql、asyncpg、aioredis 使用介绍
  10. 逆向工具Cutter
  11. 【搬家】VB.NET开发全功能串口调试助手
  12. 数字图像处理 - Ch3 锐化(高通)空间滤波器
  13. 十字路口通行优先权,十字路口通行规则图解
  14. 为什么CPU需要时钟才能工作
  15. Python深度学习(4):猫狗分类
  16. Unity3D制作高通AR(增强现实)图片识别应用
  17. Gu Jing——金马驹
  18. 毫无剧透!电影《我不是药神》,“活该”你零差评,口碑炸裂!
  19. Linux中查看jdk版本
  20. 智象科技一体化运维平台的价值

热门文章

  1. 浏览器或是搜索引擎怎么拉黑某个网站
  2. 多个pdf怎么合并成一个pdf?多个pdf文件怎么合并成一个文件?
  3. Failed to decode response: zlib_decode(): data error Retrying with degraded;
  4. 8分频verilog线_时钟分频系列——分数分频电路的Verilog实现
  5. The Flask Mega-Tutorial 之 Chapter 8: Followers
  6. 《王煜全创新生态报告12讲》学习笔记
  7. 怎么将自己的头像p到特定的背景图_怎么把自己的头像和背景分离出来:用ps抠图...
  8. XILINX偶然加载不成功的问题原因及解决方法
  9. 高中政治老师教师资格证考试成功通过前辈备考经验分享(2)
  10. iol植入手术过程_年龄相关性白内障phaco+Iol植入术的手术配合及体会