Files
TencentOS-tiny/doc/code/2.8.1 msg_queue/main.c
supowang edb2879617 first commit for opensource
first commit for opensource
2019-09-16 13:19:50 +08:00

124 lines
3.3 KiB
C

#include "tos.h"
#include "mcu_init.h"
#define STK_SIZE_TASK_DEMO 512
#define PRIO_TASK_DEMO 4
k_stack_t stack_task_demo[STK_SIZE_TASK_DEMO];
k_task_t task_demo;
k_msg_queue_t msg_queue;
struct msg_st {
char *msg;
size_t size;
} msgs[TOS_CFG_MSG_POOL_SIZE] = {
{ "msg 0", 6 },
{ "msg 1", 6 },
{ "msg 2", 6 },
};
struct msg_st dummy_msg = { "dummy msg", 10 };
extern void entry_task_demo(void *arg);
void fifo_opt(void) {
k_err_t err;
int i = 0;
char *msg_received = K_NULL;
size_t msg_size = 0;
for (; i < TOS_CFG_MSG_POOL_SIZE; ++i) {
printf("msg put: %s\n", msgs[i].msg);
err = tos_msg_queue_put(&msg_queue, (void *)msgs[i].msg, msgs[i].size, TOS_OPT_MSG_PUT_FIFO);
if (err != K_ERR_NONE) {
printf("should never happen\n");
}
}
err = tos_msg_queue_put(&msg_queue, (void *)dummy_msg.msg, dummy_msg.size, TOS_OPT_MSG_PUT_FIFO);
if (err == K_ERR_MSG_QUEUE_FULL) {
printf("msg queue is full\n");
} else {
printf("should never happen\n");
}
for (i = 0; i < TOS_CFG_MSG_POOL_SIZE; ++i) {
err = tos_msg_queue_get(&msg_queue, (void **)&msg_received, &msg_size);
if (err == K_ERR_NONE) {
printf("msg received: %s\n", msg_received);
printf("msg size: %d\n", msg_size);
} else {
printf("should never happen\n");
}
}
err = tos_msg_queue_get(&msg_queue, (void **)&msg_received, &msg_size);
if (err == K_ERR_MSG_QUEUE_EMPTY) {
printf("msg queue is empty\n");
} else {
printf("should never happen\n");
}
}
void lifo_opt(void) {
k_err_t err;
int i = 0;
char *msg_received = K_NULL;
size_t msg_size = 0;
for (; i < TOS_CFG_MSG_POOL_SIZE; ++i) {
printf("msg put: %s\n", msgs[i].msg);
err = tos_msg_queue_put(&msg_queue, (void *)msgs[i].msg, msgs[i].size, TOS_OPT_MSG_PUT_LIFO);
if (err != K_ERR_NONE) {
printf("should never happen\n");
}
}
err = tos_msg_queue_put(&msg_queue, (void *)dummy_msg.msg, dummy_msg.size, TOS_OPT_MSG_PUT_LIFO);
if (err == K_ERR_MSG_QUEUE_FULL) {
printf("msg queue is full\n");
} else {
printf("should never happen\n");
}
for (i = 0; i < TOS_CFG_MSG_POOL_SIZE; ++i) {
err = tos_msg_queue_get(&msg_queue, (void **)&msg_received, &msg_size);
if (err == K_ERR_NONE) {
printf("msg received: %s\n", msg_received);
printf("msg size: %d\n", msg_size);
} else {
printf("should never happen\n");
}
}
err = tos_msg_queue_get(&msg_queue, (void **)&msg_received, &msg_size);
if (err == K_ERR_MSG_QUEUE_EMPTY) {
printf("msg queue is empty\n");
} else {
printf("should never happen\n");
}
}
void entry_task_demo(void *arg)
{
tos_msg_queue_create(&msg_queue);
printf("max msg in pool: %d\n", TOS_CFG_MSG_POOL_SIZE);
printf("msg queue using TOS_OPT_MSG_PUT_FIFO\n");
fifo_opt();
printf("msg queue using TOS_OPT_MSG_PUT_LIFO\n");
lifo_opt();
}
int main(void)
{
board_init();
tos_knl_init();
(void)tos_task_create(&task_demo, "demo1", entry_task_demo, NULL,
PRIO_TASK_DEMO, stack_task_demo, STK_SIZE_TASK_DEMO,
0);
tos_knl_start();
}