kernel_perf: update to 2.5.1 version
This commit is contained in:
8
ChangeLog.md
Normal file
8
ChangeLog.md
Normal file
@@ -0,0 +1,8 @@
|
||||
## [2.5.1] - 2022-06-02
|
||||
### Added
|
||||
- add dynamic create and destroy api for task, sem, mutex, event, timer and corresponding unit test case.
|
||||
- add tos_task_find api.
|
||||
|
||||
### Changed
|
||||
- `TOS_CFG_TASK_DYNAMIC_CREATE_EN` change to `TOS_CFG_OBJ_DYNAMIC_CREATE_EN`.
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 0u
|
||||
#define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
|
@@ -13,8 +13,7 @@
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
@@ -44,7 +43,7 @@
|
||||
|
||||
#define TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN 0u
|
||||
|
||||
#define TOS_CFG_CPU_SYSTICK_PRIO 0xF0 //V307<30><37><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ч
|
||||
#define TOS_CFG_CPU_SYSTICK_PRIO 0xF0 //V307<30><37><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ч
|
||||
|
||||
|
||||
#define TOS_CFG_IDLE_TASK_STK_SIZE 512u
|
||||
|
@@ -7,9 +7,9 @@
|
||||
|
||||
#define TOS_CFG_ROUND_ROBIN_EN 0u
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 0u
|
||||
#define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
|
@@ -7,9 +7,9 @@
|
||||
|
||||
#define TOS_CFG_ROUND_ROBIN_EN 0u
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 1u
|
||||
#define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
|
@@ -7,9 +7,9 @@
|
||||
|
||||
#define TOS_CFG_ROUND_ROBIN_EN 1u
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 0u
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 0u
|
||||
#define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
|
@@ -11,10 +11,9 @@
|
||||
#define TOS_CFG_ROUND_ROBIN_EN 0u
|
||||
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY 0u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 0u
|
||||
#define TOS_CFG_OBJECT_VERIFY 1u
|
||||
|
||||
#define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
|
@@ -7,9 +7,9 @@
|
||||
|
||||
#define TOS_CFG_ROUND_ROBIN_EN 0u
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 1u
|
||||
#define TOS_CFG_OBJ_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
|
@@ -7,9 +7,9 @@
|
||||
|
||||
#define TOS_CFG_ROUND_ROBIN_EN 1u
|
||||
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 0u
|
||||
#define TOS_CFG_OBJECT_VERIFY_EN 1u
|
||||
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 0u
|
||||
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 1u
|
||||
|
||||
#define TOS_CFG_EVENT_EN 1u
|
||||
|
||||
|
@@ -76,6 +76,37 @@ __API__ k_err_t tos_event_create(k_event_t *event, k_event_flag_t init_flag);
|
||||
*/
|
||||
__API__ k_err_t tos_event_destroy(k_event_t *event);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
/**
|
||||
* @brief Create an dynamic event.
|
||||
* create an event.
|
||||
*
|
||||
* @attention None
|
||||
*
|
||||
* @param[in] event pointer to the handler of the event pointer.
|
||||
* @param[in] init_flag initial flag of the event.
|
||||
*
|
||||
* @return errcode
|
||||
* @retval #K_ERR_NONE return successfully.
|
||||
*/
|
||||
__API__ k_err_t tos_event_create_dyn(k_event_t **event, k_event_flag_t init_flag);
|
||||
|
||||
/**
|
||||
* @brief Destroy an dynamic event.
|
||||
* destroy an event.
|
||||
*
|
||||
* @attention None
|
||||
*
|
||||
* @param[in] event pointer to the handler of the event.
|
||||
*
|
||||
* @return errcode
|
||||
* @retval #K_ERR_NONE return successfully.
|
||||
*/
|
||||
__API__ k_err_t tos_event_destroy_dyn(k_event_t *event);
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Pend an event.
|
||||
* pend an event.
|
||||
|
@@ -44,7 +44,7 @@ extern k_stack_t k_idle_task_stk[];
|
||||
extern k_stack_t *const k_idle_task_stk_addr;
|
||||
extern size_t const k_idle_task_stk_size;
|
||||
|
||||
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
/* list to hold all the destroyed dynamic created tasks */
|
||||
extern k_list_t k_dead_task_list;
|
||||
#endif
|
||||
|
@@ -111,7 +111,6 @@ typedef enum k_err_en {
|
||||
K_ERR_TASK_SUSPEND_IDLE,
|
||||
K_ERR_TASK_STK_OVERFLOW,
|
||||
K_ERR_TASK_STK_SIZE_INVALID,
|
||||
K_ERR_TASK_OUT_OF_MEMORY,
|
||||
|
||||
K_ERR_TICKLESS_WKUP_ALARM_NOT_INSTALLED = 2000u,
|
||||
K_ERR_TICKLESS_WKUP_ALARM_NO_INIT,
|
||||
@@ -126,10 +125,6 @@ typedef enum k_err_en {
|
||||
K_ERR_TIMER_INVALID_OPT,
|
||||
K_ERR_TIMER_STOPPED,
|
||||
K_ERR_TIMER_RUNNING,
|
||||
|
||||
K_ERR_SEM_OUT_OF_MEMORY = 2200u,
|
||||
|
||||
K_ERR_MUTEX_OUT_OF_MEMORY = 2300u,
|
||||
} k_err_t;
|
||||
|
||||
#endif /* _TOS_ERR_H_ */
|
||||
|
@@ -45,6 +45,21 @@ typedef struct k_mutex_st {
|
||||
*/
|
||||
__API__ k_err_t tos_mutex_create(k_mutex_t *mutex);
|
||||
|
||||
/**
|
||||
* @brief Destroy a mutex.
|
||||
* destroy a mutex.
|
||||
*
|
||||
* @attention None
|
||||
*
|
||||
* @param[in] mutex pointer to the handler of the mutex.
|
||||
*
|
||||
* @return errcode
|
||||
* @retval #K_ERR_NONE return successfully.
|
||||
*/
|
||||
__API__ k_err_t tos_mutex_destroy(k_mutex_t *mutex);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
/**
|
||||
* @brief Create a dynamic mutex.
|
||||
* create a dynamic mutex.
|
||||
@@ -59,8 +74,8 @@ __API__ k_err_t tos_mutex_create(k_mutex_t *mutex);
|
||||
__API__ k_err_t tos_mutex_create_dyn(k_mutex_t **mutex);
|
||||
|
||||
/**
|
||||
* @brief Destroy a mutex.
|
||||
* destroy a mutex.
|
||||
* @brief Destroy a dynamic mutex.
|
||||
* destroy a dynamic mutex.
|
||||
*
|
||||
* @attention None
|
||||
*
|
||||
@@ -69,7 +84,9 @@ __API__ k_err_t tos_mutex_create_dyn(k_mutex_t **mutex);
|
||||
* @return errcode
|
||||
* @retval #K_ERR_NONE return successfully.
|
||||
*/
|
||||
__API__ k_err_t tos_mutex_destroy(k_mutex_t *mutex);
|
||||
__API__ k_err_t tos_mutex_destroy_dyn(k_mutex_t *mutex);
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Pend a mutex.
|
||||
|
@@ -59,6 +59,21 @@ __API__ k_err_t tos_sem_create_max(k_sem_t *sem, k_sem_cnt_t init_count, k_sem_c
|
||||
*/
|
||||
__API__ k_err_t tos_sem_create(k_sem_t *sem, k_sem_cnt_t init_count);
|
||||
|
||||
/**
|
||||
* @brief Destroy a semaphore.
|
||||
* destroy a semaphore.
|
||||
*
|
||||
* @attention None
|
||||
*
|
||||
* @param[in] semaphore pointer to the handler of the semaphore.
|
||||
*
|
||||
* @return errcode
|
||||
* @retval #K_ERR_NONE return successfully.
|
||||
*/
|
||||
__API__ k_err_t tos_sem_destroy(k_sem_t *sem);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
/**
|
||||
* @brief Create a dynamic semaphore with a limitation of maximum count.
|
||||
* create a dynamic semaphore with a limitation of maximum count.
|
||||
@@ -89,8 +104,8 @@ __API__ k_err_t tos_sem_create_max_dyn(k_sem_t **sem, k_sem_cnt_t init_count, k_
|
||||
__API__ k_err_t tos_sem_create_dyn(k_sem_t **sem, k_sem_cnt_t init_count);
|
||||
|
||||
/**
|
||||
* @brief Destroy a semaphore.
|
||||
* destroy a semaphore.
|
||||
* @brief Destroy a dynamic semaphore.
|
||||
* destroy a dynamic semaphore.
|
||||
*
|
||||
* @attention None
|
||||
*
|
||||
@@ -99,7 +114,9 @@ __API__ k_err_t tos_sem_create_dyn(k_sem_t **sem, k_sem_cnt_t init_count);
|
||||
* @return errcode
|
||||
* @retval #K_ERR_NONE return successfully.
|
||||
*/
|
||||
__API__ k_err_t tos_sem_destroy(k_sem_t *sem);
|
||||
__API__ k_err_t tos_sem_destroy_dyn(k_sem_t *sem);
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Pend a semaphore.
|
||||
|
@@ -86,7 +86,7 @@ struct k_task_st {
|
||||
k_stack_t *stk_base; /**< task stack base address */
|
||||
size_t stk_size; /**< stack size of the task */
|
||||
|
||||
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
k_list_t dead_list; /**< when a dynamic allocated task destroyed, we hook the task's dead_list to the k_dead_task_list */
|
||||
#endif
|
||||
|
||||
@@ -176,7 +176,7 @@ __API__ k_err_t tos_task_create(k_task_t *task,
|
||||
*/
|
||||
__API__ k_err_t tos_task_destroy(k_task_t *task);
|
||||
|
||||
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
/**
|
||||
* @brief Create a task with a dynamic allocated task handler and stack.
|
||||
|
@@ -102,6 +102,45 @@ __API__ k_err_t tos_timer_create(k_timer_t *tmr, k_tick_t delay, k_tick_t period
|
||||
*/
|
||||
__API__ k_err_t tos_timer_destroy(k_timer_t *tmr);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
/**
|
||||
* @brief Create a dynamic timer.
|
||||
* Create a timer.
|
||||
*
|
||||
* @attention I dont't think a timer need a name. If you do, help yourself.
|
||||
*
|
||||
* @param[in] tmr pointer to the handler of the timer pointer.
|
||||
* @param[in] delay time interval for a timer to run.
|
||||
* @param[in] period period for a timer to restart to run.
|
||||
* @param[in] callback callback function called when the timer expires.
|
||||
* @param[in] cb_arg argument for the callback.
|
||||
* @param[in] opt option for the function call.
|
||||
*
|
||||
* @return errcode
|
||||
* @retval #K_ERR_TIMER_INVALID_PERIOD period is invalid.
|
||||
* @retval #K_ERR_TIMER_INVALID_DELAY delay is invalid.
|
||||
* @retval #K_ERR_NONE return successfully.
|
||||
*/
|
||||
__API__ k_err_t tos_timer_create_dyn(k_timer_t **tmr, k_tick_t delay, k_tick_t period,
|
||||
k_timer_callback_t callback, void *cb_arg, k_opt_t opt);
|
||||
|
||||
/**
|
||||
* @brief Delete a dynamic timer.
|
||||
* Delete the timer.
|
||||
*
|
||||
* @attention None
|
||||
*
|
||||
* @param[in] tmr pointer to the handler of the timer.
|
||||
*
|
||||
* @return errcode
|
||||
* @retval #K_ERR_TIMER_INACTIVE the timer is not active yet.
|
||||
* @retval #K_ERR_NONE return successfully.
|
||||
*/
|
||||
__API__ k_err_t tos_timer_destroy_dyn(k_timer_t *tmr);
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Start a timer.
|
||||
* Start the timer to run.
|
||||
|
@@ -25,8 +25,8 @@
|
||||
|
||||
#define TOS_VERSION_MAJOR 0x02
|
||||
#define TOS_VERSION_MINOR 0x05
|
||||
#define TOS_VERSION_PATCH 0x00
|
||||
#define TOS_VERSION "2.5.0"
|
||||
#define TOS_VERSION_PATCH 0x01
|
||||
#define TOS_VERSION "2.5.1"
|
||||
|
||||
#endif /* _TOS_VERSION_H_ */
|
||||
|
||||
|
@@ -27,6 +27,10 @@ __API__ k_err_t tos_event_create(k_event_t *event, k_event_flag_t init_flag)
|
||||
pend_object_init(&event->pend_obj);
|
||||
TOS_OBJ_INIT(event, KNL_OBJ_TYPE_EVENT);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_set_static(&event->knl_obj);
|
||||
#endif
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
@@ -37,6 +41,12 @@ __API__ k_err_t tos_event_destroy(k_event_t *event)
|
||||
TOS_PTR_SANITY_CHECK(event);
|
||||
TOS_OBJ_VERIFY(event, KNL_OBJ_TYPE_EVENT);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
if (!knl_object_alloc_is_static(&event->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
pend_wakeup_all(&event->pend_obj, PEND_STATE_DESTROY);
|
||||
@@ -47,12 +57,72 @@ __API__ k_err_t tos_event_destroy(k_event_t *event)
|
||||
|
||||
TOS_OBJ_DEINIT(event);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_reset(&event->knl_obj);
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
knl_sched();
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
__API__ k_err_t tos_event_create_dyn(k_event_t **event, k_event_flag_t init_flag)
|
||||
{
|
||||
k_event_t *the_event;
|
||||
|
||||
TOS_IN_IRQ_CHECK();
|
||||
TOS_PTR_SANITY_CHECK(event);
|
||||
|
||||
the_event = tos_mmheap_calloc(1, sizeof(k_event_t));
|
||||
if (!the_event) {
|
||||
return K_ERR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
the_event->flag = init_flag;
|
||||
pend_object_init(&the_event->pend_obj);
|
||||
TOS_OBJ_INIT(the_event, KNL_OBJ_TYPE_EVENT);
|
||||
|
||||
knl_object_alloc_set_dynamic(&the_event->knl_obj);
|
||||
|
||||
*event = the_event;
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
__API__ k_err_t tos_event_destroy_dyn(k_event_t *event)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
|
||||
TOS_PTR_SANITY_CHECK(event);
|
||||
TOS_OBJ_VERIFY(event, KNL_OBJ_TYPE_EVENT);
|
||||
|
||||
if (!knl_object_alloc_is_dynamic(&event->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
pend_wakeup_all(&event->pend_obj, PEND_STATE_DESTROY);
|
||||
|
||||
event->flag = (k_event_flag_t)0u;
|
||||
|
||||
pend_object_deinit(&event->pend_obj);
|
||||
|
||||
TOS_OBJ_DEINIT(event);
|
||||
|
||||
tos_mmheap_free(event);
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
knl_sched();
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
__STATIC__ int event_is_match(k_event_flag_t event, k_event_flag_t flag_expect, k_event_flag_t *flag_match, k_opt_t opt_pend)
|
||||
{
|
||||
if (opt_pend & TOS_OPT_EVENT_PEND_ALL) {
|
||||
|
@@ -36,7 +36,7 @@ k_tick_t k_cpu_tick_per_second = TOS_CFG_CPU_TICK_PER_SECOND;
|
||||
|
||||
k_cycle_t k_cpu_cycle_per_tick = (k_cycle_t)0u;
|
||||
|
||||
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
TOS_LIST_DEFINE(k_dead_task_list);
|
||||
#endif
|
||||
|
||||
|
@@ -34,7 +34,10 @@ __API__ k_err_t tos_msg_q_create(k_msg_q_t *msg_q, void *pool, size_t msg_cnt)
|
||||
pend_object_init(&msg_q->pend_obj);
|
||||
|
||||
TOS_OBJ_INIT(msg_q, KNL_OBJ_TYPE_MESSAGE_QUEUE);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_set_static(&msg_q->knl_obj);
|
||||
#endif
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
@@ -47,9 +50,11 @@ __API__ k_err_t tos_msg_q_destroy(k_msg_q_t *msg_q)
|
||||
TOS_PTR_SANITY_CHECK(msg_q);
|
||||
TOS_OBJ_VERIFY(msg_q, KNL_OBJ_TYPE_MESSAGE_QUEUE);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
if (!knl_object_alloc_is_static(&msg_q->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
@@ -64,7 +69,10 @@ __API__ k_err_t tos_msg_q_destroy(k_msg_q_t *msg_q)
|
||||
pend_object_deinit(&msg_q->pend_obj);
|
||||
|
||||
TOS_OBJ_DEINIT(msg_q);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_reset(&msg_q->knl_obj);
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
knl_sched();
|
||||
|
@@ -50,8 +50,10 @@ __API__ k_err_t tos_mmblk_pool_create(k_mmblk_pool_t *mbp, void *pool_start, siz
|
||||
mbp->blk_size = blk_size;
|
||||
|
||||
TOS_OBJ_INIT(mbp, KNL_OBJ_TYPE_MMBLK_POOL);
|
||||
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_set_static(&mbp->knl_obj);
|
||||
#endif
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
@@ -60,8 +62,8 @@ __API__ k_err_t tos_mmblk_pool_destroy(k_mmblk_pool_t *mbp)
|
||||
{
|
||||
TOS_PTR_SANITY_CHECK(mbp);
|
||||
TOS_OBJ_VERIFY(mbp, KNL_OBJ_TYPE_MMBLK_POOL);
|
||||
|
||||
#if TOS_CFG_MMHEAP_EN > 0u
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
if (!knl_object_alloc_is_static(&mbp->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
@@ -78,7 +80,7 @@ __API__ k_err_t tos_mmblk_pool_destroy(k_mmblk_pool_t *mbp)
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#if TOS_CFG_MMHEAP_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
__API__ k_err_t tos_mmblk_pool_create_dyn(k_mmblk_pool_t **mbp, size_t blk_num, size_t blk_size)
|
||||
{
|
||||
@@ -93,26 +95,26 @@ __API__ k_err_t tos_mmblk_pool_create_dyn(k_mmblk_pool_t **mbp, size_t blk_num,
|
||||
if ((blk_size & K_MMBLK_ALIGN_MASK) != 0u) {
|
||||
return K_ERR_MMBLK_INVALID_BLK_SIZE;
|
||||
}
|
||||
|
||||
|
||||
the_mbp = tos_mmheap_calloc(1, sizeof(k_mmblk_pool_t));
|
||||
if (!the_mbp) {
|
||||
return K_ERR_MMBLK_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
|
||||
pool_start = tos_mmheap_alloc(blk_num * blk_size);
|
||||
if (!pool_start) {
|
||||
return K_ERR_MMBLK_POOL_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
|
||||
blk_curr = pool_start;
|
||||
blk_next = K_MMBLK_NEXT_BLK(blk_curr, blk_size);
|
||||
|
||||
for (i = 0; i < blk_num - 1u; ++i) {
|
||||
*(void **)blk_curr = blk_next;
|
||||
blk_curr = blk_next;
|
||||
blk_curr = blk_next;
|
||||
blk_next = K_MMBLK_NEXT_BLK(blk_next, blk_size);
|
||||
}
|
||||
|
||||
|
||||
*(void **)blk_curr = K_NULL;
|
||||
|
||||
the_mbp->pool_start = pool_start;
|
||||
@@ -134,11 +136,11 @@ __API__ k_err_t tos_mmblk_pool_destroy_dyn(k_mmblk_pool_t *mbp)
|
||||
{
|
||||
TOS_PTR_SANITY_CHECK(mbp);
|
||||
TOS_OBJ_VERIFY(mbp, KNL_OBJ_TYPE_MMBLK_POOL);
|
||||
|
||||
|
||||
if (!knl_object_alloc_is_dynamic(&mbp->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
|
||||
|
||||
tos_mmheap_free(mbp->pool_start);
|
||||
|
||||
mbp->pool_start = K_NULL;
|
||||
|
@@ -80,9 +80,51 @@ __API__ k_err_t tos_mutex_create(k_mutex_t *mutex)
|
||||
|
||||
TOS_OBJ_INIT(mutex, KNL_OBJ_TYPE_MUTEX);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_set_static(&mutex->knl_obj);
|
||||
#endif
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
__API__ k_err_t tos_mutex_destroy(k_mutex_t *mutex)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
|
||||
TOS_IN_IRQ_CHECK();
|
||||
TOS_PTR_SANITY_CHECK(mutex);
|
||||
TOS_OBJ_VERIFY(mutex, KNL_OBJ_TYPE_MUTEX);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
if (!knl_object_alloc_is_static(&mutex->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
pend_wakeup_all(&mutex->pend_obj, PEND_STATE_DESTROY);
|
||||
|
||||
if (mutex->owner) {
|
||||
mutex_old_owner_release(mutex);
|
||||
}
|
||||
|
||||
pend_object_deinit(&mutex->pend_obj);
|
||||
|
||||
TOS_OBJ_DEINIT(mutex);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_reset(&mutex->knl_obj);
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
knl_sched();
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
__API__ k_err_t tos_mutex_create_dyn(k_mutex_t **mutex)
|
||||
{
|
||||
k_mutex_t *the_mutex;
|
||||
@@ -92,7 +134,7 @@ __API__ k_err_t tos_mutex_create_dyn(k_mutex_t **mutex)
|
||||
|
||||
the_mutex = tos_mmheap_calloc(1, sizeof(k_mutex_t));
|
||||
if (!the_mutex) {
|
||||
return K_ERR_MUTEX_OUT_OF_MEMORY;
|
||||
return K_ERR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
pend_object_init(&the_mutex->pend_obj);
|
||||
@@ -109,7 +151,7 @@ __API__ k_err_t tos_mutex_create_dyn(k_mutex_t **mutex)
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
__API__ k_err_t tos_mutex_destroy(k_mutex_t *mutex)
|
||||
__API__ k_err_t tos_mutex_destroy_dyn(k_mutex_t *mutex)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
|
||||
@@ -117,6 +159,10 @@ __API__ k_err_t tos_mutex_destroy(k_mutex_t *mutex)
|
||||
TOS_PTR_SANITY_CHECK(mutex);
|
||||
TOS_OBJ_VERIFY(mutex, KNL_OBJ_TYPE_MUTEX);
|
||||
|
||||
if (!knl_object_alloc_is_dynamic(&mutex->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
pend_wakeup_all(&mutex->pend_obj, PEND_STATE_DESTROY);
|
||||
@@ -127,12 +173,9 @@ __API__ k_err_t tos_mutex_destroy(k_mutex_t *mutex)
|
||||
|
||||
pend_object_deinit(&mutex->pend_obj);
|
||||
|
||||
if (knl_object_alloc_is_dynamic(&mutex->knl_obj)) {
|
||||
TOS_OBJ_DEINIT(mutex);
|
||||
tos_mmheap_free(mutex);
|
||||
} else {
|
||||
TOS_OBJ_DEINIT(mutex);
|
||||
}
|
||||
TOS_OBJ_DEINIT(mutex);
|
||||
|
||||
tos_mmheap_free(mutex);
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
knl_sched();
|
||||
@@ -140,6 +183,8 @@ __API__ k_err_t tos_mutex_destroy(k_mutex_t *mutex)
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
__API__ k_err_t tos_mutex_pend_timed(k_mutex_t *mutex, k_tick_t timeout)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
|
@@ -22,18 +22,20 @@
|
||||
__API__ k_err_t tos_sem_create_max(k_sem_t *sem, k_sem_cnt_t init_count, k_sem_cnt_t max_count)
|
||||
{
|
||||
TOS_PTR_SANITY_CHECK(sem);
|
||||
|
||||
|
||||
if (unlikely(init_count > max_count)) {
|
||||
init_count = max_count;
|
||||
}
|
||||
|
||||
|
||||
sem->count = init_count;
|
||||
sem->count_max = max_count;
|
||||
|
||||
|
||||
pend_object_init(&sem->pend_obj);
|
||||
TOS_OBJ_INIT(sem, KNL_OBJ_TYPE_SEMAPHORE);
|
||||
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_set_static(&sem->knl_obj);
|
||||
#endif
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
@@ -43,6 +45,39 @@ __API__ k_err_t tos_sem_create(k_sem_t *sem, k_sem_cnt_t init_count)
|
||||
return tos_sem_create_max(sem, init_count, (k_sem_cnt_t)-1);
|
||||
}
|
||||
|
||||
__API__ k_err_t tos_sem_destroy(k_sem_t *sem)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
|
||||
TOS_PTR_SANITY_CHECK(sem);
|
||||
TOS_OBJ_VERIFY(sem, KNL_OBJ_TYPE_SEMAPHORE);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
if (!knl_object_alloc_is_static(&sem->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
pend_wakeup_all(&sem->pend_obj, PEND_STATE_DESTROY);
|
||||
|
||||
pend_object_deinit(&sem->pend_obj);
|
||||
|
||||
TOS_OBJ_DEINIT(sem);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_reset(&sem->knl_obj);
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
knl_sched();
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
__API__ k_err_t tos_sem_create_max_dyn(k_sem_t **sem, k_sem_cnt_t init_count, k_sem_cnt_t max_count)
|
||||
{
|
||||
k_sem_t *the_sem;
|
||||
@@ -56,7 +91,7 @@ __API__ k_err_t tos_sem_create_max_dyn(k_sem_t **sem, k_sem_cnt_t init_count, k_
|
||||
|
||||
the_sem = tos_mmheap_calloc(1, sizeof(k_sem_t));
|
||||
if (!the_sem) {
|
||||
return K_ERR_SEM_OUT_OF_MEMORY;
|
||||
return K_ERR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
the_sem->count = init_count;
|
||||
@@ -64,7 +99,7 @@ __API__ k_err_t tos_sem_create_max_dyn(k_sem_t **sem, k_sem_cnt_t init_count, k_
|
||||
|
||||
pend_object_init(&the_sem->pend_obj);
|
||||
TOS_OBJ_INIT(the_sem, KNL_OBJ_TYPE_SEMAPHORE);
|
||||
|
||||
|
||||
knl_object_alloc_set_dynamic(&the_sem->knl_obj);
|
||||
|
||||
*sem = the_sem;
|
||||
@@ -77,25 +112,26 @@ __API__ k_err_t tos_sem_create_dyn(k_sem_t **sem, k_sem_cnt_t init_count)
|
||||
return tos_sem_create_max_dyn(sem, init_count, (k_sem_cnt_t)-1);
|
||||
}
|
||||
|
||||
__API__ k_err_t tos_sem_destroy(k_sem_t *sem)
|
||||
__API__ k_err_t tos_sem_destroy_dyn(k_sem_t *sem)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
|
||||
TOS_PTR_SANITY_CHECK(sem);
|
||||
TOS_OBJ_VERIFY(sem, KNL_OBJ_TYPE_SEMAPHORE);
|
||||
|
||||
if (!knl_object_alloc_is_dynamic(&sem->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
pend_wakeup_all(&sem->pend_obj, PEND_STATE_DESTROY);
|
||||
|
||||
pend_object_deinit(&sem->pend_obj);
|
||||
|
||||
if (knl_object_alloc_is_dynamic(&sem->knl_obj)) {
|
||||
TOS_OBJ_DEINIT(sem);
|
||||
tos_mmheap_free(sem);
|
||||
} else {
|
||||
TOS_OBJ_DEINIT(sem);
|
||||
}
|
||||
TOS_OBJ_DEINIT(sem);
|
||||
|
||||
tos_mmheap_free(sem);
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
knl_sched();
|
||||
@@ -103,6 +139,8 @@ __API__ k_err_t tos_sem_destroy(k_sem_t *sem)
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
__STATIC__ k_err_t sem_do_post(k_sem_t *sem, opt_post_t opt)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
|
@@ -19,7 +19,7 @@
|
||||
|
||||
__STATIC_INLINE__ void task_reset(k_task_t *task)
|
||||
{
|
||||
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_reset(&task->knl_obj);
|
||||
|
||||
tos_list_init(&task->dead_list);
|
||||
@@ -115,7 +115,7 @@ __API__ k_err_t tos_task_create(k_task_t *task,
|
||||
tos_list_add(&task->stat_list, &k_stat_list);
|
||||
|
||||
TOS_OBJ_INIT(task, KNL_OBJ_TYPE_TASK);
|
||||
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_set_static(&task->knl_obj);
|
||||
#endif
|
||||
|
||||
@@ -201,7 +201,7 @@ __API__ k_err_t tos_task_destroy(k_task_t *task)
|
||||
return K_ERR_SCHED_LOCKED;
|
||||
}
|
||||
|
||||
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
if (!knl_object_alloc_is_static(&task->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
@@ -210,7 +210,7 @@ __API__ k_err_t tos_task_destroy(k_task_t *task)
|
||||
return task_do_destroy(task);
|
||||
}
|
||||
|
||||
#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
__STATIC__ void task_free(k_task_t *task)
|
||||
{
|
||||
@@ -250,27 +250,15 @@ __API__ k_err_t tos_task_create_dyn(k_task_t **task,
|
||||
TOS_PTR_SANITY_CHECK(task);
|
||||
TOS_PTR_SANITY_CHECK(entry);
|
||||
|
||||
if (unlikely(stk_size < sizeof(cpu_context_t))) {
|
||||
return K_ERR_TASK_STK_SIZE_INVALID;
|
||||
}
|
||||
|
||||
if (unlikely(prio == K_TASK_PRIO_IDLE)) {
|
||||
return K_ERR_TASK_PRIO_INVALID;
|
||||
}
|
||||
|
||||
if (unlikely(prio > K_TASK_PRIO_IDLE)) {
|
||||
return K_ERR_TASK_PRIO_INVALID;
|
||||
}
|
||||
|
||||
the_task = tos_mmheap_calloc(1, sizeof(k_task_t));
|
||||
if (!the_task) {
|
||||
return K_ERR_TASK_OUT_OF_MEMORY;
|
||||
return K_ERR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
stk_base = tos_mmheap_alloc(stk_size);
|
||||
if (!stk_base) {
|
||||
tos_mmheap_free(the_task);
|
||||
return K_ERR_TASK_OUT_OF_MEMORY;
|
||||
return K_ERR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
the_task->stk_base = stk_base;
|
||||
|
@@ -136,6 +136,10 @@ __API__ k_err_t tos_timer_create(k_timer_t *tmr,
|
||||
|
||||
TOS_OBJ_INIT(tmr, KNL_OBJ_TYPE_TIMER);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_set_static(&tmr->knl_obj);
|
||||
#endif
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
@@ -144,6 +148,12 @@ __API__ k_err_t tos_timer_destroy(k_timer_t *tmr)
|
||||
TOS_PTR_SANITY_CHECK(tmr);
|
||||
TOS_OBJ_VERIFY(tmr, KNL_OBJ_TYPE_TIMER);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
if (!knl_object_alloc_is_static(&tmr->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (tmr->state == TIMER_STATE_UNUSED) {
|
||||
return K_ERR_TIMER_INACTIVE;
|
||||
}
|
||||
@@ -153,9 +163,73 @@ __API__ k_err_t tos_timer_destroy(k_timer_t *tmr)
|
||||
}
|
||||
|
||||
timer_reset(tmr);
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
knl_object_alloc_reset(&tmr->knl_obj);
|
||||
#endif
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
__API__ k_err_t tos_timer_create_dyn(k_timer_t **tmr,
|
||||
k_tick_t delay,
|
||||
k_tick_t period,
|
||||
k_timer_callback_t callback,
|
||||
void *cb_arg,
|
||||
k_opt_t opt)
|
||||
{
|
||||
k_err_t err;
|
||||
k_timer_t *the_timer;
|
||||
|
||||
TOS_PTR_SANITY_CHECK(tmr);
|
||||
TOS_PTR_SANITY_CHECK(callback);
|
||||
|
||||
the_timer = tos_mmheap_calloc(1, sizeof(k_timer_t));
|
||||
if (!the_timer) {
|
||||
return K_ERR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
err = tos_timer_create(the_timer, delay, period, callback, cb_arg, opt);
|
||||
if (err != K_ERR_NONE) {
|
||||
tos_mmheap_free(the_timer);
|
||||
return err;
|
||||
}
|
||||
|
||||
knl_object_alloc_set_dynamic(&the_timer->knl_obj);
|
||||
|
||||
*tmr = the_timer;
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
__API__ k_err_t tos_timer_destroy_dyn(k_timer_t *tmr)
|
||||
{
|
||||
TOS_PTR_SANITY_CHECK(tmr);
|
||||
TOS_OBJ_VERIFY(tmr, KNL_OBJ_TYPE_TIMER);
|
||||
|
||||
if (!knl_object_alloc_is_dynamic(&tmr->knl_obj)) {
|
||||
return K_ERR_OBJ_INVALID_ALLOC_TYPE;
|
||||
}
|
||||
|
||||
if (tmr->state == TIMER_STATE_UNUSED) {
|
||||
return K_ERR_TIMER_INACTIVE;
|
||||
}
|
||||
|
||||
if (tmr->state == TIMER_STATE_RUNNING) {
|
||||
timer_takeoff(tmr);
|
||||
}
|
||||
|
||||
timer_reset(tmr);
|
||||
|
||||
tos_mmheap_free(tmr);
|
||||
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
__API__ k_err_t tos_timer_start(k_timer_t *tmr)
|
||||
{
|
||||
TOS_PTR_SANITY_CHECK(tmr);
|
||||
|
@@ -177,6 +177,27 @@ TEST test_tos_event_destroy(void)
|
||||
PASS();
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
TEST test_tos_event_create_dyn(void)
|
||||
{
|
||||
k_err_t err;
|
||||
k_event_t *event;
|
||||
|
||||
err = tos_event_create_dyn(&event, (k_event_flag_t)0);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
err = tos_event_destroy(event);
|
||||
ASSERT_EQ(err, K_ERR_OBJ_INVALID_ALLOC_TYPE);
|
||||
|
||||
err = tos_event_destroy_dyn(event);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
TEST test_tos_event_pend_all(void)
|
||||
{
|
||||
k_err_t err;
|
||||
@@ -424,6 +445,9 @@ SUITE(suit_event)
|
||||
{
|
||||
RUN_TEST(test_tos_event_create);
|
||||
RUN_TEST(test_tos_event_destroy);
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
RUN_TEST(test_tos_event_create_dyn);
|
||||
#endif
|
||||
RUN_TEST(test_tos_event_pend_all);
|
||||
RUN_TEST(test_tos_event_pend_any);
|
||||
RUN_TEST(test_tos_event_pend_timed);
|
||||
|
@@ -72,6 +72,8 @@ TEST test_tos_mmblk_pool_destroy(void)
|
||||
PASS();
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
TEST test_tos_mmblk_pool_create_dyn(void)
|
||||
{
|
||||
k_err_t err;
|
||||
@@ -100,6 +102,8 @@ TEST test_tos_mmblk_pool_create_dyn(void)
|
||||
PASS();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
TEST test_tos_mmblk_alloc(void)
|
||||
{
|
||||
int i = 0;
|
||||
@@ -154,7 +158,9 @@ SUITE(suit_mmblk)
|
||||
{
|
||||
RUN_TEST(test_tos_mmblk_pool_create);
|
||||
RUN_TEST(test_tos_mmblk_pool_destroy);
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
RUN_TEST(test_tos_mmblk_pool_create_dyn);
|
||||
#endif
|
||||
RUN_TEST(test_tos_mmblk_alloc);
|
||||
RUN_TEST(test_tos_mmblk_free);
|
||||
}
|
||||
|
@@ -128,6 +128,8 @@ TEST test_tos_mutex_create(void)
|
||||
PASS();
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
TEST test_tos_mutex_create_dyn(void)
|
||||
{
|
||||
k_err_t err;
|
||||
@@ -135,12 +137,14 @@ TEST test_tos_mutex_create_dyn(void)
|
||||
err = tos_mutex_create_dyn(&test_mutex_dyn_00);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
err = tos_mutex_destroy(test_mutex_dyn_00);
|
||||
err = tos_mutex_destroy_dyn(test_mutex_dyn_00);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
TEST test_tos_mutex_destroy(void)
|
||||
{
|
||||
k_err_t err;
|
||||
@@ -420,7 +424,9 @@ SUITE(suit_mutex)
|
||||
{
|
||||
RUN_TEST(test_tos_mutex_create);
|
||||
RUN_TEST(test_tos_mutex_destroy);
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
RUN_TEST(test_tos_mutex_create_dyn);
|
||||
#endif
|
||||
RUN_TEST(test_tos_mutex_pend);
|
||||
RUN_TEST(test_tos_mutex_pend_timed);
|
||||
RUN_TEST(test_tos_mutex_post);
|
||||
|
@@ -83,6 +83,8 @@ TEST test_tos_sem_create(void)
|
||||
PASS();
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
TEST test_tos_sem_create_dyn(void)
|
||||
{
|
||||
k_err_t err;
|
||||
@@ -96,18 +98,20 @@ TEST test_tos_sem_create_dyn(void)
|
||||
err = tos_sem_create_dyn(&test_sem_dyn_02, (k_sem_cnt_t)0xFFFF);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
err = tos_sem_destroy(test_sem_dyn_00);
|
||||
err = tos_sem_destroy_dyn(test_sem_dyn_00);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
err = tos_sem_destroy(test_sem_dyn_01);
|
||||
err = tos_sem_destroy_dyn(test_sem_dyn_01);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
err = tos_sem_destroy(test_sem_dyn_02);
|
||||
err = tos_sem_destroy_dyn(test_sem_dyn_02);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
TEST test_tos_sem_destroy(void)
|
||||
{
|
||||
k_err_t err;
|
||||
@@ -278,7 +282,9 @@ TEST test_tos_sem_post_all(void)
|
||||
SUITE(suit_sem)
|
||||
{
|
||||
RUN_TEST(test_tos_sem_create);
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
RUN_TEST(test_tos_sem_create_dyn);
|
||||
#endif
|
||||
RUN_TEST(test_tos_sem_destroy);
|
||||
RUN_TEST(test_tos_sem_pend);
|
||||
RUN_TEST(test_tos_sem_pend_timed);
|
||||
|
@@ -77,6 +77,8 @@ TEST test_tos_task_destroy(void)
|
||||
PASS();
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
TEST test_tos_task_create_destroy_dyn(void)
|
||||
{
|
||||
k_err_t err;
|
||||
@@ -103,6 +105,8 @@ TEST test_tos_task_create_destroy_dyn(void)
|
||||
PASS();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
TEST test_tos_task_delay(void)
|
||||
{
|
||||
int try = 0;
|
||||
@@ -312,7 +316,9 @@ SUITE(suit_task)
|
||||
{
|
||||
RUN_TEST(test_tos_task_create);
|
||||
RUN_TEST(test_tos_task_destroy);
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
RUN_TEST(test_tos_task_create_destroy_dyn);
|
||||
#endif
|
||||
RUN_TEST(test_tos_task_delay);
|
||||
RUN_TEST(test_tos_task_delay_abort);
|
||||
RUN_TEST(test_tos_task_suspend_resume);
|
||||
|
@@ -102,6 +102,29 @@ TEST test_tos_timer_destroy(void)
|
||||
PASS();
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
|
||||
TEST test_tos_timer_create_dyn(void)
|
||||
{
|
||||
k_err_t err;
|
||||
k_timer_t *timer;
|
||||
|
||||
err = tos_timer_create_dyn(&timer, (k_tick_t)0u, (k_tick_t)200u,
|
||||
test_timer_call_back_dummy, K_NULL,
|
||||
TOS_OPT_TIMER_PERIODIC);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
err = tos_timer_destroy(timer);
|
||||
ASSERT_EQ(err, K_ERR_OBJ_INVALID_ALLOC_TYPE);
|
||||
|
||||
err = tos_timer_destroy_dyn(timer);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
TEST test_tos_timer_stop(void)
|
||||
{
|
||||
k_err_t err;
|
||||
@@ -144,7 +167,7 @@ TEST test_tos_timer_stop(void)
|
||||
|
||||
err = tos_timer_destroy(&test_timer_00);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
@@ -172,7 +195,7 @@ TEST test_tos_timer_oneshot_functional(void)
|
||||
|
||||
err = tos_timer_destroy(&test_timer_00);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
@@ -186,7 +209,7 @@ TEST test_tos_timer_periodic_functional(void)
|
||||
TOS_OPT_TIMER_PERIODIC);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
|
||||
|
||||
|
||||
ASSERT_EQ(test_timer_periodic_count, 0);
|
||||
err = tos_timer_start(&test_timer_00);
|
||||
ASSERT_EQ(err, K_ERR_NONE);
|
||||
@@ -215,6 +238,9 @@ SUITE(suit_timer)
|
||||
{
|
||||
RUN_TEST(test_tos_timer_create);
|
||||
RUN_TEST(test_tos_timer_destroy);
|
||||
#if TOS_CFG_OBJ_DYNAMIC_CREATE_EN > 0u
|
||||
RUN_TEST(test_tos_timer_create_dyn);
|
||||
#endif
|
||||
RUN_TEST(test_tos_timer_stop);
|
||||
RUN_TEST(test_tos_timer_oneshot_functional);
|
||||
RUN_TEST(test_tos_timer_periodic_functional);
|
||||
|
Reference in New Issue
Block a user