/* The example of esp-free-rtos
*
* This sample code is in the public domain.
*/
#include <stdlib.h>
#include <string.h>
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "esp8266.h"
#include "event_groups.h"
#define BIT_0 ( 1 << 0 )
#define BIT_4 ( 1 << 4 )
/* Declare a variable to hold the created event group. */
EventGroupHandle_t xEventGroup;
// SetBits task
void task1(void *pvParameters)
{
TickType_t nowTick;
EventBits_t uxBits;
nowTick = xTaskGetTickCount();
printf("[%s:%d] Start
uxBits=%d\n",pcTaskGetName(0),nowTick,sizeof(uxBits));
while(1) {
/* Set bit 0 in xEventGroup. */
uxBits = xEventGroupSetBits(
xEventGroup, BIT_0 );/* The bits being set. */
nowTick = xTaskGetTickCount();
printf("[%s:%d]
uxBits=%02x\n",pcTaskGetName(0),nowTick,uxBits);
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
}
// SetBits task
void task2(void *pvParameters)
{
TickType_t nowTick;
EventBits_t uxBits;
nowTick = xTaskGetTickCount();
printf("[%s:%d] Start
uxBits=%d\n",pcTaskGetName(0),nowTick,sizeof(uxBits));
while(1) {
/* Set bit 4 in xEventGroup. */
uxBits = xEventGroupSetBits(
xEventGroup, BIT_4 );/* The bits being set. */
nowTick = xTaskGetTickCount();
printf("[%s:%d]
uxBits=%02x\n",pcTaskGetName(0),nowTick,uxBits);
vTaskDelay(8000 / portTICK_PERIOD_MS);
}
}
// WaitBits task
void task3(void *pvParameters)
{
TickType_t nowTick;
EventBits_t uxBits;
nowTick = xTaskGetTickCount();
printf("[%s:%d] Start
uxBits=%d\n",pcTaskGetName(0),nowTick,sizeof(uxBits));
while(1) {
/* Wait forever for either bit 0 or bit
4 to be set within the event group.
Clear the bits before
exiting. */
uxBits = xEventGroupWaitBits(
xEventGroup,
BIT_0 | BIT_4, /* The bits within the event group to wait
for. */
pdTRUE, /* BIT_0
& BIT_4 should be cleared before returning. */
pdFALSE, /* Don't wait
for both bits, either bit will do. */
portMAX_DELAY);/* Wait forever. */
nowTick = xTaskGetTickCount();
if ( ( uxBits & BIT_0 ) == BIT_0 )
{
printf("[%s:%d] Event from
SetBit1\n",pcTaskGetName(0),nowTick);
}
if ( ( uxBits & BIT_4 ) == BIT_4 )
{
printf("[%s:%d] Event from
SetBit2\n",pcTaskGetName(0),nowTick);
}
}
}
void user_init(void)
{
uart_set_baud(0, 115200);
printf("SDK version:%s\n",
sdk_system_get_sdk_version());
printf("pcTaskGetName=%s\n",pcTaskGetName(0));
/* Attempt to create the event group. */
xEventGroup = xEventGroupCreate();
/* Check everything was created. */
configASSERT( xEventGroup );
xTaskCreate(task1, "SetBit1", 256, NULL, 2, NULL);
xTaskCreate(task2, "SetBit2", 256, NULL, 2, NULL);
xTaskCreate(task3, "WaitBit", 256, NULL, 2, NULL);
} |