【Freertos】xTaskCreate创建任务

[复制链接]
查看1108 | 回复16 | 2024-2-27 20:48:17 | 显示全部楼层 |阅读模式

本帖最后由 noonezero 于 2024-2-28 08:50 编辑

本帖最后由 noonezero 于 2024-2-27 20:58 编辑

用法

BaseType_t xTaskCreate(    TaskFunction_t pvTaskCode,
                            const char * const pcName,
                            const configSTACK_DEPTH_TYPE uxStackDepth,
                            void *pvParameters,
                            UBaseType_t uxPriority,
                            TaskHandle_t *pxCreatedTask
                          );
parameter description
pvTaskCode 永不退出的 C 函数,实现常通常是一个死循环。填要执行的函数名
pcName Task名称,自定义
uxStackDepth 用于告诉内核为它分配多大的栈空间
pvParameters 要传递的参数,为空指针
uxPriority 是一个无符号的整形数,表示优先级的大小,数值越大优先级越大
pxCreatedTask 用于传出任务的句柄

示例

#include <FreeRTOS.h>
#include <task.h>
#include "board.h"
#include "bflb_gpio.h"      //gpio头文件
#include "log.h"


#define DBG_TAG "MAIN"

void task_led0(void){
    struct bflb_device_s *gpio;             // 初始化一个结构体指针作为外设句柄命名为gpio,
    gpio = bflb_device_get_by_name("gpio");
    // gpio初始化,第一个参数为句柄,第二个参数为pin,第三个为GPIO的配置,这里配置为输出、上拉、滤波打开、驱动等级0
    bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_3);
    LOG_I("Hello task_led0\r\n");
    while(1){
        bflb_gpio_set(gpio, GPIO_PIN_0);    // 将pin0设置为高电平
        LOG_I("GPIO0 -> HIGH");
        vTaskDelay(3000/portTICK_RATE_MS);  // 总时间/单次tick时间
        bflb_gpio_reset(gpio, GPIO_PIN_0);
        LOG_I("GPIO0 -> LOW");
        vTaskDelay(3000/portTICK_RATE_MS);  // 总时间/单次tick时间
    }
}

void task_led1(void){
    struct bflb_device_s *gpio;             // 初始化一个结构体指针作为外设句柄命名为gpio,
    gpio = bflb_device_get_by_name("gpio");
    // gpio初始化,第一个参数为句柄,第二个参数为pin,第三个为GPIO的配置,这里配置为输出、上拉、滤波打开、驱动等级0
    bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_3);
    LOG_I("Hello task_led1\r\n");
    while(1){
        bflb_gpio_set(gpio, GPIO_PIN_1);    // 将pin0设置为高电平
        LOG_I("GPIO1 -> HIGH");
        vTaskDelay(1000/portTICK_RATE_MS);  // 总时间/单次tick时间
        bflb_gpio_reset(gpio, GPIO_PIN_1);
        LOG_I("GPIO1 -> LOW");
        vTaskDelay(1000/portTICK_RATE_MS);  // 总时间/单次tick时间
    }
}


int main(void)
{
    board_init();
    LOG_I("FreeRTOS begin!\r\n");

    // 创建任务
    xTaskCreate(task_led0, (char*)"blink0", 1024, NULL, 1, NULL);
    xTaskCreate(task_led1, (char*)"blink1", 1024, NULL, 1, NULL);

    // 启动调度器  
    vTaskStartScheduler();  
}

小安派S1引脚

接口图.png

执行效果

image.png

总结

点灯演示视频没法上传,贴LOG日志,效果一样

本次例程创建两个点灯任务,任务优先级为1,任务对应小安派的IO1和IO0,

IO0,3s亮,3s灭

IO1,1s亮,1s灭

实现了两个io不同频率点灯

本次例程中延时使用vTaskDelay,用来延时,

具体用法见下篇帖子

如果有代码问题,请留言,工程文件会放在评论区,大家自取

本帖被以下淘专辑推荐:

回复

使用道具 举报

noonezero | 2024-2-27 20:56:58 | 显示全部楼层

代码
Project_basic.zip (13.25 KB, 下载次数: 1)
回复 支持 反对

使用道具 举报

wukong50 | 2024-2-27 21:49:17 | 显示全部楼层
回复

使用道具 举报

bzhou830 | 2024-2-28 08:34:44 | 显示全部楼层
选择去发光,而不是被照亮
回复

使用道具 举报

爱笑 | 2024-2-28 08:37:28 | 显示全部楼层
用心做好保姆工作
回复

使用道具 举报

1084504793 | 2024-2-28 08:39:54 | 显示全部楼层
回复

使用道具 举报

WT_0213 | 2024-2-28 09:16:08 | 显示全部楼层
回复

使用道具 举报

lazy | 2024-2-28 09:26:50 | 显示全部楼层
回复

使用道具 举报

物联网 | 2024-2-28 10:55:21 | 显示全部楼层
回复

使用道具 举报

wurong | 2024-2-28 11:19:16 | 显示全部楼层
赞一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则