Linux Audio

Check our new training course

Loading...
/*
 * Copyright (c) 2015 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr.h>
#include <toolchain.h>


#include <misc/printk.h>
#include <stdio.h>

#ifdef CONFIG_OBJECTS_WHILELOOP
volatile int i;
#endif

#define IRQ_LINE          10
#define IRQ_PRIORITY      3
#define TEST_SOFT_INT     64
#define TEST_IRQ_OFFLOAD_VECTOR 32

#define THREAD_STACK_SIZE  CONFIG_THREAD_STACK_SIZE

typedef void * (*pfunc) (void *);

/* variables */

#define MESSAGE "Running maximal kernel configuration\n"

/* stack used by thread */
#ifdef CONFIG_OBJECTS_THREAD
static K_THREAD_STACK_DEFINE(pStack, THREAD_STACK_SIZE);
static struct k_thread objects_thread;
#endif

/* pointer array ensures specified functions are linked into the image */
volatile pfunc func_array[] = {
	/* timer functions */
#ifdef CONFIG_OBJECTS_TIMER
	(pfunc)k_timer_init,
	(pfunc)k_timer_stop,
	(pfunc)k_timer_status_get,
	(pfunc)k_timer_status_sync,
	(pfunc)k_timer_remaining_get,
	(pfunc)k_uptime_get,
	(pfunc)k_uptime_get_32,
	(pfunc)k_uptime_delta,
	(pfunc)k_uptime_delta_32,
#endif

	/* semaphore functions */
#ifdef CONFIG_OBJECTS_SEMAPHORE
	(pfunc)k_sem_init,
	(pfunc)k_sem_take,
	(pfunc)k_sem_give,
	(pfunc)k_sem_reset,
	(pfunc)k_sem_count_get,
#endif

	/* LIFO functions */
#ifdef CONFIG_OBJECTS_LIFO
	(pfunc)k_queue_prepend,
	(pfunc)k_queue_init,
	(pfunc)k_queue_get,
#endif
	/* stack functions */
#ifdef CONFIG_OBJECTS_STACK
	(pfunc)k_stack_init,
	(pfunc)k_stack_push,
	(pfunc)k_stack_pop,
#endif
	/* FIFO functions */
#ifdef CONFIG_OBJECTS_FIFO
	(pfunc)k_queue_prepend,
	(pfunc)k_queue_init,
	(pfunc)k_queue_get,
#endif

};

void dummy_isr(void *unused)
{
	ARG_UNUSED(unused);
}

#ifdef CONFIG_OBJECTS_THREAD

/**
 *
 * @brief Trivial thread
 *
 * @param message   Message to be printed.
 * @param arg1	Unused.
 *
 * @return N/A
 */
static void thread_entry(void *arg1, void *arg2, void *arg3)
{
	ARG_UNUSED(arg2);
	ARG_UNUSED(arg3);
	printk("%s\n", (char *)arg1);
}
#endif



void main(void)
{
#ifdef CONFIG_OBJECTS_PRINTK
	printk("Using printk\n");
#endif

#if CONFIG_STATIC_ISR
	IRQ_CONNECT(IRQ_LINE, IRQ_PRIORITY, dummy_isr, NULL, 0);
#endif

#ifdef CONFIG_OBJECTS_THREAD
	/* start a trivial fiber */
	k_thread_create(&objects_thread, pStack, THREAD_STACK_SIZE,
			thread_entry, MESSAGE, (void *)func_array,
			NULL, 10, 0, K_NO_WAIT);
#endif

#ifdef CONFIG_OBJECTS_WHILELOOP
	i = 0;
	while (1) {
		i++;
	}
#endif
}