参考代码
This commit is contained in:
81
components/system/test/os_test_ipc_fifo.c
Executable file
81
components/system/test/os_test_ipc_fifo.c
Executable file
@@ -0,0 +1,81 @@
|
||||
#include "os_test.h"
|
||||
|
||||
static vuint test_flag = 0;
|
||||
|
||||
static void _os_test_fifo_handler_0(void *arg)
|
||||
{
|
||||
SYS_LOG_INF("测试创建和清空, 应出现1个警告");
|
||||
void *first_handle;
|
||||
SYS_ASSERT_FALSE(os_fifo_q_create(&fifo_handle[0]) != OS_OK, "");
|
||||
first_handle = fifo_handle[0].handle;
|
||||
os_fifo_q_clr(&fifo_handle[0]);
|
||||
os_fifo_q_delete(&fifo_handle[0]);
|
||||
|
||||
SYS_LOG_INF("测试警告, 应出现3个警告");
|
||||
SYS_ASSERT_FALSE(os_fifo_q_create(&fifo_handle[0]) != OS_OK, "");
|
||||
uint32_t *p32 = os_fifo_alloc(sizeof(*p32));
|
||||
SYS_ASSERT_FALSE(p32 == 0, "");
|
||||
*p32 = 0x1234abcd;
|
||||
SYS_ASSERT_FALSE(os_fifo_put(&fifo_handle[0], p32) != OS_OK, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_put(&fifo_handle[0], p32) == OS_OK, ""); // os_fifo_put(): fifo_data not valid
|
||||
SYS_ASSERT_FALSE(os_fifo_take(&fifo_handle[0], 0) != p32, "");
|
||||
SYS_ASSERT_FALSE(*p32 != 0x1234abcd, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_take(&fifo_handle[0], 0) != 0, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_free(p32) != OS_OK, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_free(p32) == OS_OK, ""); // os_fifo_free(): 0x.. was not in fifo queue, can not to free
|
||||
SYS_ASSERT_FALSE(os_fifo_put(&fifo_handle[0], p32) == OS_OK, ""); // os_fifo_put(): fifo_data not valid
|
||||
|
||||
SYS_LOG_INF("测试清除");
|
||||
SYS_ASSERT_FALSE(os_fifo_alloc(sizeof(*p32)) != p32, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_put(&fifo_handle[0], p32) != OS_OK, "");
|
||||
os_fifo_q_clr(&fifo_handle[0]);
|
||||
SYS_ASSERT_FALSE(os_fifo_take(&fifo_handle[0], 0) != 0, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_alloc(sizeof(*p32)) != p32, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_free(p32) != OS_OK, "");
|
||||
|
||||
SYS_LOG_INF("测试自动释放已在队列内的数据");
|
||||
SYS_ASSERT_FALSE(os_fifo_alloc(sizeof(*p32)) != p32, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_put(&fifo_handle[0], p32) != 0, "");
|
||||
os_fifo_q_delete(&fifo_handle[0]);
|
||||
SYS_ASSERT_FALSE(os_fifo_q_create(&fifo_handle[0]) != OS_OK, "");
|
||||
SYS_ASSERT_FALSE(first_handle != fifo_handle[0].handle, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_alloc(sizeof(*p32)) != p32, "");
|
||||
SYS_ASSERT_FALSE(os_fifo_put(&fifo_handle[0], p32) != OS_OK, "");
|
||||
os_fifo_q_delete(&fifo_handle[0]);
|
||||
test_flag = 1;
|
||||
}
|
||||
|
||||
static void _os_test_fifo_t1(void *arg)
|
||||
{
|
||||
test_flag = test_flag << 4 | 1;
|
||||
void *mem = os_fifo_take(&fifo_handle[0], -1u);
|
||||
test_flag = test_flag << 4 | 2;
|
||||
os_fifo_free(mem);
|
||||
}
|
||||
|
||||
void os_test_fifo(void)
|
||||
{
|
||||
SYS_LOG_INF("-------------------------------");
|
||||
test_flag = 0;
|
||||
os_work_create(&test_work_handle[0], "", _os_test_fifo_handler_0, NULL, 1);
|
||||
os_work_submit(default_os_work_q_hdl, &test_work_handle[0], 0);
|
||||
os_work_delete(&test_work_handle[0]);
|
||||
SYS_ASSERT_FALSE(test_flag == 0, "");
|
||||
|
||||
SYS_LOG_INF("-------------------------------");
|
||||
size_t max_block_size;
|
||||
os_heap_info(NULL, NULL, &max_block_size);
|
||||
static os_thread_t t1;
|
||||
void *mem;
|
||||
|
||||
SYS_LOG_INF("测试提交 FIFO 唤醒");
|
||||
test_flag = 0;
|
||||
os_fifo_q_create(&fifo_handle[0]);
|
||||
os_test_create_thread(&t1, _os_test_fifo_t1, "t1", OS_PRIORITY_HIGHEST);
|
||||
SYS_ASSERT_FALSE(test_flag != 0x1, "");
|
||||
mem = os_fifo_alloc(0x10);
|
||||
SYS_ASSERT_FALSE(test_flag != 0x1, "");
|
||||
os_fifo_put(&fifo_handle[0], mem);
|
||||
SYS_ASSERT_FALSE(test_flag != 0x12, "");
|
||||
os_fifo_q_delete(&fifo_handle[0]);
|
||||
}
|
||||
Reference in New Issue
Block a user