blob: 0a914a5273da27539d6357cc5fe2dcaf6bb39026 [file] [log] [blame]
/*
* Copyright (c) 2017 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <logging/kernel_event_logger.h>
#include <misc/printk.h>
#include <misc/util.h>
K_THREAD_STACK_DEFINE(threadA_stack, 1024);
K_THREAD_STACK_DEFINE(threadB_stack, 1024);
K_THREAD_STACK_DEFINE(event_logger_stack, 4096);
K_SEM_DEFINE(sem_sync, 0, 1); /* starts off "not available" */
static struct k_thread threadA_data;
static struct k_thread threadB_data;
static u32_t timestamp;
char event_type[][12] = {"REDAY_Q", "PEND_STATE", "EXIT_STATE"};
static void event_logger(void)
{
u32_t event_data[4];
u16_t event_id;
u8_t dropped;
u8_t event_data_size = (u8_t)ARRAY_SIZE(event_data);
int ret;
for (;;) {
ret = sys_k_event_logger_get_wait(&event_id,
&dropped,
event_data,
&event_data_size);
if (ret < 0) {
continue;
}
timestamp = event_data[0];
switch (event_id) {
case KERNEL_EVENT_LOGGER_CONTEXT_SWITCH_EVENT_ID:
printk("tid of context switched thread = %x at "
"time = %d\n", event_data[1], timestamp);
break;
case KERNEL_EVENT_LOGGER_INTERRUPT_EVENT_ID:
break;
case KERNEL_EVENT_LOGGER_SLEEP_EVENT_ID:
break;
case KERNEL_EVENT_LOGGER_THREAD_EVENT_ID:
printk("thread = %x, is moved to = %s ,at time = %d\n"
, event_data[1], event_type[event_data[2]], timestamp);
break;
default:
break;
}
}
}
static void threadB(void)
{
unsigned int i = 10;
for (; i ; i--) {
k_sleep(MSEC_PER_SEC / 2);
}
k_sem_take(&sem_sync, K_FOREVER);
}
static void threadA(void)
{
unsigned int j = 10;
for (; j ; j--) {
k_sleep(MSEC_PER_SEC);
}
k_sem_give(&sem_sync);
}
void main(void)
{
k_thread_create(&threadB_data, threadB_stack,
K_THREAD_STACK_SIZEOF(threadB_stack),
(k_thread_entry_t)threadB,
NULL, NULL, NULL, K_PRIO_PREEMPT(2), 0, 0);
k_thread_create(&threadA_data, threadA_stack,
K_THREAD_STACK_SIZEOF(threadA_stack),
(k_thread_entry_t)threadA,
NULL, NULL, NULL, K_PRIO_PREEMPT(2), 0, 0);
event_logger();
}