inwudriver-weibo/target/include/interface/rom/soc_mdm_task.h

294 lines
9.5 KiB
C
Raw Normal View History

/**
* Copyright (c) CompanyNameMagicTag 2018-2020. All rights reserved.
* @defgroup hct_task Task
* @ingroup osa
*/
#ifndef __SOC_MDM_TASK_H__
#define __SOC_MDM_TASK_H__
#include <soc_types_rom.h>
#define EXT_INVALID_TASK_ID (0xFFFFFFFF)
/* The length of the task file name cannot be changed. */
#define EXT_TASK_NAME_LEN (32)
typedef struct {
td_char name[EXT_TASK_NAME_LEN]; /**< Task entrance function */
td_u32 id; /**< Task ID */
td_u16 status; /**< Task status */
td_u16 priority; /**< Task priority */
td_pvoid task_sem; /**< Semaphore pointer */
td_pvoid task_mutex; /**< Mutex pointer */
td_u32 event_stru[3]; /**< Event 3 count */
td_u32 event_mask; /**< Event mask */
td_u32 stack_size; /**< Task stack size */
td_u32 top_of_stack; /**< Task stack top */
td_u32 bottom_of_stack; /**< Task stack bottom */
td_u32 sp; /**< Task SP pointer */
td_u32 pc; /**< Task current PC */
td_u32 lr; /**< Task LR */
td_u32 psr; /**< Task CPSR */
td_u32 curr_used; /**< Current task stack usage */
td_u32 peak_used; /**< Task stack usage peak */
td_u32 overflow_flag; /**< Flag that indicates whether a task stack overflow occurs */
} ext_task_info_s;
/**
* @ingroup hct_task
* @brief task Body callback function
*
* @par Description:
* task Body callback function
*
* @attention None
* @param param [IN] Type #uintptr_t, user parameter
*
* @retval None
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see None
* @since DW21_V100R001C00
*/
typedef td_void (*tsk_body)(uintptr_t param);
/**
* @ingroup hct_task
* @brief Creates a task.
*
* @par Description:
* Creates a task.
*
* @attention
* @li The space occupied by a task name string must be applied for by the caller and saved statically. The task name is
* not stored internally in the API.
* @li If the size of the specified task stack is 0, use the default size specified by #OS_TSK_DEFAULT_STACK_SIZE.
* @li The size of the task stack should be 8-byte aligned. The principle for determining the task stack size is as
* follows: Do not use a too large or too small task stack size (to avoid waste or overflow)
* @li The recommended user priority should be within the range of [20, 30]. Do not use the priorities of [0, 2] and
* [31].
* @param id [OUT] Type #td_u32*, task ID
* @param name [IN] Type #td_char, task name
* @param task_body [IN] Type #TSK_BODY, task entry function
* @param param [IN] Type #uintptr_t, parameter that needs to be input to the task entry when a task is created.
* If this parameter does not need to be input, set this parameter to 0.
* @param stack_size [IN] Type #td_u32, stack size (unit: byte)
* @param priority [IN] Type #td_u32, task priority
*
* @retval #0 Success.
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_task.h: This file describes the APIs related to tasks.
* @see uapi_task_delete
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_task_create(td_u32 *id, td_char name[8], tsk_body task_body, uintptr_t param, /* 8 len */
td_u32 stack_size, td_u32 priority);
/**
* @ingroup hct_task
* @brief Deletes a task.
*
* @par Description:
* Deletes a task.
*
* @attention
* @li Use this API with caution. A task can be deleted only after the confirmation of the user. The idle task and
* Swt_Task cannot be deleted.
* @li When deleting a task, ensure that the resources (such as mutex and semaphore) applied by the task have been
* released.
* @param id [IN] Type #td_u32, task ID
*
* @retval #0 Success.
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see uapi_task_create
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_task_delete(td_u32 id);
/**
* @ingroup hct_task
* @brief Suspends a task.
*
* @par Description:
* Suspends a task.
*
* @attention
* @li A task cannot be suspended if it is the current task and is locked.
* @li The idle task and Swt_Task cannot be suspended.
* @li The task cannot be blocked or suspended in the lock task status.
* @param id [IN] Type #td_u32, task ID
*
* @retval #0 Success.
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see uapi_task_resume
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_task_suspend(td_u32 id);
/**
* @ingroup hct_task
* @brief Resumes a task.
*
* @par Description:
* Resumes a task.
*
* @attention None
* @param id [IN] Type #td_u32, task ID
*
* @retval #0 Success.
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see uapi_task_suspend
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_task_resume(td_u32 id);
/**
* @ingroup hct_task
* @brief Obtains the task priority.
*
* @par Description:
* Obtains the task priority.
*
* @attention None
* @param id [IN] Type #td_u32, task ID
* @param priority [OUT] Type #td_u32*, task priority
*
* @retval #0 Success.
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see uapi_task_set_priority
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_task_get_priority(td_u32 id, td_u32 *priority);
/**
* @ingroup hct_task
* @brief Sets the task priority.
*
* @par Description:
Sets the task priority.
*
* @attention
* @li Only the ID of the task created by the user can be configured.
* @li The recommended user priority should be within the range of [20, 30]. Do not use the priorities of [0,
2] and [31].
* @li Setting user priorities may affect task scheduling. The user needs to plan tasks in the SDK.
* @param id [IN] Type #td_u32, task ID
* @param priority [IN] Type #td_u32, task priority. A smaller value indicates a higher priority.
*
* @retval #0 Success.
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see uapi_task_get_priority
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_task_set_priority(td_u32 id, td_u32 priority);
/**
* @ingroup hct_task
* @brief Obtains the task information.
*
* @par Description:
* Obtains the task information.
*
* @attention None
* @param id [IN] Type #td_u32, task ID
* @param inf [OUT] Type #ext_task_info_s*, task information
*
* @retval #0 Success.
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see None
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_task_get_info(td_u32 id, ext_task_info_s *inf);
/**
* @ingroup hct_task
* @brief Obtains the current task ID.
*
* @par Description:
* Obtains the current task ID.
*
* @attention None
* @param None
*
* @retval #td_u32 Task ID. If the task fails, #EXT_INVALID_TASK_ID is returned.
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see None
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_task_get_current_id(td_void);
/**
* @ingroup hct_task
* @brief Elevates the task priority.
*
* @par Description:
* This feature is similar to the lock task function and must be used with uapi_task_pri_resume.
*
* @attention An API that triggers task scheduling cannot be used in the scope of effect. Otherwise, the system may
* crash.
* @param None
*
* @retval None
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see uapi_task_pri_resume
* @since DW21_V100R001C00
*/
EXT_EXTERN td_void uapi_task_pri_elevate(td_void);
/**
* @ingroup hct_task
* @brief Restores the task priority.
*
* @par Description:
* This feature is similar to the unlock task function and must be used with uapi_task_pri_elevate.
*
* @attention None
* @param None
*
* @retval None
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see uapi_task_pri_elevate
* @since DW21_V100R001C00
*/
EXT_EXTERN td_void uapi_task_pri_resume(td_void);
/**
* @ingroup hct_task
* @brief Task sleep.
*
* @par Description:
* Task sleep
*
* @attention
* @li In the interrupt processing function or in the case of a lock task, the uapi_sleep operation fails.
* @li When less than 10 ms, the input parameter value should be replaced by 10 ms. When greater than 10 ms, the input
* parameter value should be exactly divided and then rounded-down to the nearest integer.
* @param ms [IN] Type #td_u32, sleep time (unit: ms). The precision is 10 ms.
*
* @retval #0 Success.
* @retval #Other values Failure. For details, see soc_errno.h.
*
* @par Dependency:
* @li soc_mdm_task.h: This file describes the task APIs.
* @see None
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_sleep(td_u32 ms);
#endif