FreeRTOS任务及信号量

FreeRTOS任务及信号量,自我学习,留档。

#include "esp_common.h"

#include "user_config.h"

#include "../include/freertos/FreeRTOS.h"

#include "../include/freertos/task.h"

#include "../include/freertos/queue.h"

#include "../include/freertos/semphr.h"

static xSemaphoreHandle semphr = NULL;

void taska(void *pvparameters)

{

    printf("enter a\n");

    xSemaphoreGive(semphr);

    printf("enter abc\n");   

    for(;;)

    {

        printf("task a\n");

        vTaskDelay(2000 / portTICK_RATE_MS);

    }

}

 

void taskb(void *pvparameters)

{

    printf("enter b\n");

    xSemaphoreTake(semphr, portMAX_DELAY );

    for(;;)

    {

        printf("task B\n");

        vTaskDelay(2000 / portTICK_RATE_MS);

    }

}

 


 

/******************************************************************************

 * FunctionName : user_init

 * Description  : entry of user application, init user function here

 * Parameters   : none

 * Returns      : none

*******************************************************************************/

void user_init(void)

{

    //os_printf("SDK version:%s %d\n", system_get_sdk_version(), system_get_free_heap_size());

    //wifi_set_opmode(STATION_MODE);

    //struct station_config config;

    //bzero(&config, sizeof(struct station_config));

    //sprintf(config.ssid, SSID);

    //sprintf(config.password, PASSWORD);

    //wifi_station_set_config(&config);

    //wifi_set_event_handler_cb(wifi_event_handler_cb); 

    //wifi_station_connect();

 

    semphr = xSemaphoreCreateCounting(3, 0);

    int ret;

    ret = xTaskCreate(taskb,

                      "taskb",

                      512,

                      NULL,

                      2,

                      NULL);

 

    if (ret != pdPASS)  {

        printf("create thread %s failed\n", "taskb");

    }

 

    ret = xTaskCreate(taska,

                      "taska",

                      512,

                      NULL,

                      2,

                      NULL);

 

    if (ret != pdPASS)  {

        printf("create thread %s failed\n", "taska");

    }

}

后记:初学者实际运行结果有点意外,留贴。熟悉ESP8266的,应该看出来了,此示例基于ESP8266_RTOS_SDK-2.0.0。

 

运行结果:

enter b
enter a
task B
enter abc
task a
task B
task a
task B
task a
task B
task a

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值