| /* |
| * Copyright (c) 2017 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <kernel_structs.h> |
| #include <logging/kernel_event_logger.h> |
| #include <kernel_structs.h> |
| #include <misc/printk.h> |
| #include <misc/util.h> |
| #include <zephyr.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(); |
| } |