mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-06-03 02:56:35 +08:00
215 lines
5.9 KiB
C
215 lines
5.9 KiB
C
// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef _ESPOS_TASK_H_
|
|
#define _ESPOS_TASK_H_
|
|
|
|
#include "espos_types.h"
|
|
#include "espos_errno.h"
|
|
#include "espos_time.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* task will run at any CPU */
|
|
#define ESPOS_TASK_NO_AFFINITY -1
|
|
|
|
typedef enum espos_task_opt {
|
|
/* create task and start it automatically */
|
|
ESPOS_TASK_CREATE_NORMAL = 0,
|
|
/* just create task and don't start it */
|
|
ESPOS_TASK_CREATE_SILENCE,
|
|
|
|
ESPOS_TASK_OPT_MAX
|
|
} espos_task_opt_t;
|
|
|
|
/* task delete itself */
|
|
#define ESPOS_TASK_DELETE_SELF 0
|
|
|
|
/*
|
|
* we should use a platform API instead of 'marco'
|
|
*/
|
|
#define ESPOS_TASK_PRIO_NUM espos_task_prio_num()
|
|
|
|
/* task maximum priority number */
|
|
#define ESPOS_TASK_PRIO_MAX (ESPOS_TASK_PRIO_NUM - 1)
|
|
|
|
/**
|
|
* @brief create a task
|
|
*
|
|
* @param task task handle point
|
|
* @param name task name, if name is NULL, we will use "default_task" default
|
|
* @param arg task entry function inputting parameter
|
|
* @param prio task priority
|
|
* @param ticks task time slice
|
|
* @param stack_size task stack size, its unit is "byte"
|
|
* @param entry task entry function
|
|
* @param opt task option
|
|
* ESPOS_TASK_CREATE_NORMAL : the created task will be started automatically
|
|
* ESPOS_TASK_CREATE_SILENCE : the created task will not be started automatically
|
|
* @param cpu_id task CPU id
|
|
* natural number : the task only runs at the CPU of the number
|
|
* ESPOS_TASK_NO_AFFINITY : the task runs at any CPU
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -ENOMEM : no enough memory
|
|
* -EINVAL : input parameter error
|
|
* -EINTR : you do this at interrupt state, and it is not supported
|
|
*/
|
|
esp_err_t espos_task_create_on_cpu(espos_task_t *task, const char *name, void *arg, espos_prio_t prio, espos_tick_t ticks,
|
|
espos_size_t stack_size, espos_task_entry_t entry, espos_task_opt_t opt, espos_cpu_t cpu_id);
|
|
|
|
|
|
/**
|
|
* @brief create a task and set its CPU id to be "ESPOS_TASK_NO_AFFINITY"
|
|
*
|
|
* @param task task handle point
|
|
* @param name task name, if name is NULL, we will use "default_task" default
|
|
* @param arg task entry function inputting parameter
|
|
* @param prio task priority
|
|
* @param ticks task time slice
|
|
* @param stack_size task stack size, its unit is "byte"
|
|
* @param entry task entry function
|
|
* @param opt task option
|
|
* ESPOS_TASK_CREATE_NORMAL : the created task will be started automatically
|
|
* ESPOS_TASK_CREATE_SILENCE : the created task will not be started automatically
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -ENOMEM : no enough memory
|
|
* -EINVAL : input parameter error
|
|
* -EINTR : you do this at interrupt state, and it is not supported
|
|
*/
|
|
#define espos_task_create(task, name, arg, prio, ticks, stack_size, entry, opt) \
|
|
espos_task_create_on_cpu(task, name, arg, prio, ticks, stack_size, entry, opt, ESPOS_TASK_NO_AFFINITY)
|
|
|
|
/**
|
|
* @brief delete a task
|
|
*
|
|
* @param task task handle
|
|
* ESPOS_TASK_DELETE_SELF : task will delete itself
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -EACCES : failed to do it with some special reason
|
|
*/
|
|
esp_err_t espos_task_del(espos_task_t task);
|
|
|
|
/**
|
|
* @brief let current task sleep for some ticks
|
|
*
|
|
* @param delay_ticks system ticks
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -EINVAL : input parameter error
|
|
*/
|
|
esp_err_t espos_task_delay(const espos_tick_t delay_ticks);
|
|
|
|
/**
|
|
* @brief suspend target task
|
|
*
|
|
* @param task task handle
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -EINVAL : input parameter error
|
|
*/
|
|
esp_err_t espos_task_suspend(espos_task_t task);
|
|
|
|
/**
|
|
* @brief resume target task
|
|
*
|
|
* @param task task handle
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -EINVAL : input parameter error
|
|
*/
|
|
esp_err_t espos_task_resume(espos_task_t task);
|
|
|
|
/**
|
|
* @brief yield the cpu once
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -EACCES : failed to do it with some special reason
|
|
*/
|
|
esp_err_t espos_task_yield(void);
|
|
|
|
/**
|
|
* @brief get current task handle
|
|
*
|
|
* @return current task handle
|
|
*/
|
|
espos_task_t espos_task_get_current(void);
|
|
|
|
/**
|
|
* @brief get current task name point
|
|
*
|
|
* @param task task handle
|
|
* @param pname pointing at name's point
|
|
*
|
|
* @return current task handle
|
|
*/
|
|
esp_err_t espos_task_get_name (espos_task_t task, char **pname);
|
|
|
|
/**
|
|
* @brief set task private data
|
|
*
|
|
* @param task task handle
|
|
* @param idx task data index
|
|
* @param info task private data
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -EINVAL : input parameter error
|
|
*/
|
|
esp_err_t espos_task_set_private_data(espos_task_t task, int idx, void *info);
|
|
|
|
/**
|
|
* @brief get task private data
|
|
*
|
|
* @param task task handle
|
|
* @param idx task data index
|
|
* @param info task private data point
|
|
*
|
|
* @return the result
|
|
* 0 : successful
|
|
* -EINVAL : input parameter error
|
|
*/
|
|
esp_err_t espos_task_get_private_data(espos_task_t task, int idx, void **info);
|
|
|
|
/**
|
|
* @brief get CPU affinity of task
|
|
*
|
|
* @return CPU affinity of task
|
|
*/
|
|
espos_cpu_t espos_task_get_affinity(espos_task_t task);
|
|
|
|
/**
|
|
* @brief get ESPOS task priority number
|
|
*
|
|
* @return ESPOS task priority number
|
|
*/
|
|
espos_size_t espos_task_prio_num(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _ESPOS_TASK_H_ */
|