Zephyr API Documentation 4.1.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
main.c File Reference

Data Structures

struct  timeout_info
 

Macros

#define SEM_INIT_VAL   (0U)
 
#define SEM_MAX_VAL   (10U)
 
#define THREAD_TEST_PRIORITY   0
 
#define sem_give_from_isr(sema)
 
#define sem_take_from_isr(sema)
 
#define SEM_TIMEOUT   (K_MSEC(100))
 
#define STACK_SIZE   (512 + CONFIG_TEST_EXTRA_STACK_SIZE)
 
#define TOTAL_THREADS_WAITING   (5)
 
#define SEC2MS(s)
 
#define QSEC2MS(s)
 
#define expect_k_sem_take(sem, timeout, exp, str)
 
#define expect_k_sem_init(sem, init, max, exp, str)
 
#define expect_k_sem_count_get(sem, exp, str)
 
#define expect_k_sem_take_nomsg(sem, timeout, exp)
 
#define expect_k_sem_init_nomsg(sem, init, max, exp)
 
#define expect_k_sem_count_get_nomsg(sem, exp)
 

Functions

 K_SEM_DEFINE (statically_defined_sem,(0U),(10U))
 
 K_SEM_DEFINE (simple_sem,(0U),(10U))
 
 K_SEM_DEFINE (low_prio_sem,(0U),(10U))
 
 K_SEM_DEFINE (mid_prio_sem,(0U),(10U))
 
 K_SEM_DEFINE (high_prio_long_sem,(0U),(10U))
 
 K_SEM_DEFINE (high_prio_sem,(0U),(10U))
 
 K_SEM_DEFINE (multiple_thread_sem,(0U),(10U))
 
 K_THREAD_STACK_DEFINE (stack_1,(512+CONFIG_TEST_EXTRA_STACK_SIZE))
 
 K_THREAD_STACK_DEFINE (stack_2,(512+CONFIG_TEST_EXTRA_STACK_SIZE))
 
 K_THREAD_STACK_DEFINE (stack_3,(512+CONFIG_TEST_EXTRA_STACK_SIZE))
 
 K_THREAD_STACK_DEFINE (stack_4,(512+CONFIG_TEST_EXTRA_STACK_SIZE))
 
 K_THREAD_STACK_ARRAY_DEFINE (multiple_stack,(5),(512+CONFIG_TEST_EXTRA_STACK_SIZE))
 
 K_PIPE_DEFINE (timeout_info_pipe, sizeof(struct timeout_info) *(5), 4)
 
 K_SEM_DEFINE (ksema,(0U),(10U))
 
static K_THREAD_STACK_DEFINE (tstack,(512+CONFIG_TEST_EXTRA_STACK_SIZE))
 
void sem_give_task (void *p1, void *p2, void *p3)
 
void sem_reset_take_task (void *p1, void *p2, void *p3)
 
void isr_sem_give (const void *semaphore)
 
static void tsema_thread_thread (struct k_sem *psem)
 
static void tsema_thread_isr (struct k_sem *psem)
 
void isr_sem_take (const void *semaphore)
 
void sem_take_timeout_forever_helper (void *p1, void *p2, void *p3)
 
void sem_take_timeout_isr_helper (void *p1, void *p2, void *p3)
 
void sem_take_multiple_low_prio_helper (void *p1, void *p2, void *p3)
 
void sem_take_multiple_mid_prio_helper (void *p1, void *p2, void *p3)
 
void sem_take_multiple_high_prio_helper (void *p1, void *p2, void *p3)
 
void sem_queue_mutual_exclusion1 (void *p1, void *p2, void *p3)
 
void sem_queue_mutual_exclusion2 (void *p1, void *p2, void *p3)
 
void sem_take_multiple_high_prio_long_helper (void *p1, void *p2, void *p3)
 
void sem_multiple_threads_wait_helper (void *p1, void *p2, void *p3)
 
void test_sem_multiple_threads_wait (void)
 Test multiple semaphore take and give with wait.
 
void test_sem_measure_timeouts (void)
 Test semaphore timeout period.
 
void sem_measure_timeout_from_thread_helper (void *p1, void *p2, void *p3)
 
void test_sem_measure_timeout_from_thread (void)
 Test timeout of semaphore from thread.
 
void sem_multiple_take_and_timeouts_helper (void *p1, void *p2, void *p3)
 
void test_sem_multiple_take_and_timeouts (void)
 Test multiple semaphore take with timeouts.
 
void sem_multi_take_timeout_diff_sem_helper (void *p1, void *p2, void *p3)
 
void test_sem_multi_take_timeout_diff_sem (void)
 Test sequence of multiple semaphore timeouts.
 
void test_sem_queue_mutual_exclusion (void)
 Test thread mutual exclusion by semaphore.
 
static void thread_sem_give_null (void *p1, void *p2, void *p3)
 
void test_sem_give_null (void)
 Test k_sem_give() API.
 
static void thread_sem_init_null (void *p1, void *p2, void *p3)
 
void test_sem_init_null (void)
 Test k_sem_init() API.
 
static void thread_sem_take_null (void *p1, void *p2, void *p3)
 
void test_sem_take_null (void)
 Test k_sem_take() API.
 
static void thread_sem_reset_null (void *p1, void *p2, void *p3)
 
void test_sem_reset_null (void)
 Test k_sem_reset() API.
 
static void thread_sem_count_get_null (void *p1, void *p2, void *p3)
 
void test_sem_count_get_null (void)
 Test k_sem_count_get() API.
 
void * test_init (void)
 
 ZTEST_SUITE (semaphore, NULL, test_init, NULL, NULL, NULL)
 
 ZTEST_SUITE (semaphore_1cpu, NULL, NULL, ztest_simple_1cpu_before, ztest_simple_1cpu_after, NULL)
 
 ZTEST_SUITE (semaphore_null_case, NULL, test_init, NULL, NULL, NULL)
 
void test_k_sem_define (void)
 Test semaphore defined at compile time.
 
void test_sem_thread2thread (void)
 Test synchronization of threads with semaphore.
 
void test_sem_thread2isr (void)
 Test synchronization between thread and irq.
 
void test_k_sem_init (void)
 Test semaphore initialization at runtime.
 
void test_sem_reset (void)
 Test k_sem_reset() API.
 
void test_sem_reset_waiting (void)
 
void test_sem_count_get (void)
 Test k_sem_count_get() API.
 
void test_sem_give_from_isr (void)
 Test whether a semaphore can be given by an ISR.
 
void test_sem_give_from_thread (void)
 Test semaphore count when given by thread.
 
void test_sem_take_no_wait (void)
 Test if k_sem_take() decreases semaphore count.
 
void test_sem_take_no_wait_fails (void)
 Test k_sem_take() when there is no semaphore to take.
 
void test_sem_take_timeout_fails (void)
 Test a semaphore take operation with an unavailable semaphore.
 
void test_sem_take_timeout (void)
 Test the semaphore take operation with specified timeout.
 
void test_sem_take_timeout_forever (void)
 Test the semaphore take operation with forever wait.
 
void test_sem_take_timeout_isr (void)
 Test k_sem_take() with timeout in ISR context.
 
void test_sem_take_multiple (void)
 Test semaphore take operation by multiple threads.
 
void test_k_sem_correct_count_limit (void)
 Test the max value a semaphore can be given and taken.
 
void test_sem_give_take_from_isr (void)
 Test semaphore give and take and its count from ISR.
 

Variables

uint32_t critical_var
 
struct k_thread sem_tid_1 sem_tid_2 sem_tid_3 sem_tid_4
 
struct k_thread multiple_tid [(5)]
 
struct k_sem msg_sema mut_sem
 
struct k_thread tdata
 

Macro Definition Documentation

◆ expect_k_sem_count_get

#define expect_k_sem_count_get ( sem,
exp,
str )
Value:
do { \
unsigned int _act = k_sem_count_get(sem); \
unsigned int _exp = (exp); \
zassert_equal(_act, _exp, (str), _act, _exp); \
} while (0)
unsigned int k_sem_count_get(struct k_sem *sem)
Get a semaphore's count.
static struct k_sem sem[3]
Definition timeout_order.c:14

◆ expect_k_sem_count_get_nomsg

#define expect_k_sem_count_get_nomsg ( sem,
exp )
Value:
expect_k_sem_count_get((sem), (exp), "k_sem_count_get incorrect return value: %u != %u")
#define expect_k_sem_count_get(sem, exp, str)
Definition main.c:46

◆ expect_k_sem_init

#define expect_k_sem_init ( sem,
init,
max,
exp,
str )
Value:
do { \
int _act = k_sem_init((sem), (init), (max)); \
int _exp = (exp); \
zassert_equal(_act, _exp, (str), _act, _exp); \
} while (0)
int k_sem_init(struct k_sem *sem, unsigned int initial_count, unsigned int limit)
Initialize a semaphore.

◆ expect_k_sem_init_nomsg

#define expect_k_sem_init_nomsg ( sem,
init,
max,
exp )
Value:
expect_k_sem_init((sem), (init), (max), (exp), \
"k_sem_init incorrect return value: %d != %d")
#define expect_k_sem_init(sem, init, max, exp, str)
Definition main.c:40

◆ expect_k_sem_take

#define expect_k_sem_take ( sem,
timeout,
exp,
str )
Value:
do { \
int _act = k_sem_take((sem), (timeout)); \
int _exp = (exp); \
zassert_equal(_act, _exp, (str), _act, _exp); \
} while (0)
int k_sem_take(struct k_sem *sem, k_timeout_t timeout)
Take a semaphore.
ZTEST_BMEM int timeout
Definition main.c:31

◆ expect_k_sem_take_nomsg

#define expect_k_sem_take_nomsg ( sem,
timeout,
exp )
Value:
expect_k_sem_take((sem), (timeout), (exp), "k_sem_take incorrect return value: %d != %d")
#define expect_k_sem_take(sem, timeout, exp, str)
Definition main.c:34

◆ QSEC2MS

#define QSEC2MS ( s)
Value:
((s) * 250)
irp nz macro MOVR cc s mov cc s endm endr irp aw macro LDR aa s
Definition asm-macro-32-bit-gnu.h:17

◆ SEC2MS

#define SEC2MS ( s)
Value:
((s) * 1000)

◆ sem_give_from_isr

#define sem_give_from_isr ( sema)
Value:
irq_offload(isr_sem_give, (const void *)sema)
void irq_offload(irq_offload_routine_t routine, const void *parameter)
Run a function in interrupt context.
void isr_sem_give(const void *semaphore)
Definition main.c:108

◆ SEM_INIT_VAL

#define SEM_INIT_VAL   (0U)

◆ SEM_MAX_VAL

#define SEM_MAX_VAL   (10U)

◆ sem_take_from_isr

#define sem_take_from_isr ( sema)
Value:
irq_offload(isr_sem_take, (const void *)sema)
void isr_sem_take(const void *semaphore)
Definition main.c:136

◆ SEM_TIMEOUT

#define SEM_TIMEOUT   (K_MSEC(100))

◆ STACK_SIZE

#define STACK_SIZE   (512 + CONFIG_TEST_EXTRA_STACK_SIZE)

◆ THREAD_TEST_PRIORITY

#define THREAD_TEST_PRIORITY   0

◆ TOTAL_THREADS_WAITING

#define TOTAL_THREADS_WAITING   (5)

Function Documentation

◆ isr_sem_give()

void isr_sem_give ( const void * semaphore)

◆ isr_sem_take()

void isr_sem_take ( const void * semaphore)

◆ K_PIPE_DEFINE()

K_PIPE_DEFINE ( timeout_info_pipe ,
sizeof(struct timeout_info) *(5) ,
4  )

◆ K_SEM_DEFINE() [1/8]

K_SEM_DEFINE ( high_prio_long_sem ,
(0U) ,
(10U)  )

◆ K_SEM_DEFINE() [2/8]

K_SEM_DEFINE ( high_prio_sem ,
(0U) ,
(10U)  )

◆ K_SEM_DEFINE() [3/8]

K_SEM_DEFINE ( ksema ,
(0U) ,
(10U)  )

◆ K_SEM_DEFINE() [4/8]

K_SEM_DEFINE ( low_prio_sem ,
(0U) ,
(10U)  )

◆ K_SEM_DEFINE() [5/8]

K_SEM_DEFINE ( mid_prio_sem ,
(0U) ,
(10U)  )

◆ K_SEM_DEFINE() [6/8]

K_SEM_DEFINE ( multiple_thread_sem ,
(0U) ,
(10U)  )

◆ K_SEM_DEFINE() [7/8]

K_SEM_DEFINE ( simple_sem ,
(0U) ,
(10U)  )

◆ K_SEM_DEFINE() [8/8]

K_SEM_DEFINE ( statically_defined_sem ,
(0U) ,
(10U)  )

◆ K_THREAD_STACK_ARRAY_DEFINE()

K_THREAD_STACK_ARRAY_DEFINE ( multiple_stack ,
(5) ,
(512+CONFIG_TEST_EXTRA_STACK_SIZE)  )

◆ K_THREAD_STACK_DEFINE() [1/5]

K_THREAD_STACK_DEFINE ( stack_1 ,
(512+CONFIG_TEST_EXTRA_STACK_SIZE)  )

◆ K_THREAD_STACK_DEFINE() [2/5]

K_THREAD_STACK_DEFINE ( stack_2 ,
(512+CONFIG_TEST_EXTRA_STACK_SIZE)  )

◆ K_THREAD_STACK_DEFINE() [3/5]

K_THREAD_STACK_DEFINE ( stack_3 ,
(512+CONFIG_TEST_EXTRA_STACK_SIZE)  )

◆ K_THREAD_STACK_DEFINE() [4/5]

K_THREAD_STACK_DEFINE ( stack_4 ,
(512+CONFIG_TEST_EXTRA_STACK_SIZE)  )

◆ K_THREAD_STACK_DEFINE() [5/5]

static K_THREAD_STACK_DEFINE ( tstack ,
(512+CONFIG_TEST_EXTRA_STACK_SIZE)  )
static

◆ sem_give_task()

void sem_give_task ( void * p1,
void * p2,
void * p3 )

◆ sem_measure_timeout_from_thread_helper()

void sem_measure_timeout_from_thread_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_multi_take_timeout_diff_sem_helper()

void sem_multi_take_timeout_diff_sem_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_multiple_take_and_timeouts_helper()

void sem_multiple_take_and_timeouts_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_multiple_threads_wait_helper()

void sem_multiple_threads_wait_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_queue_mutual_exclusion1()

void sem_queue_mutual_exclusion1 ( void * p1,
void * p2,
void * p3 )

◆ sem_queue_mutual_exclusion2()

void sem_queue_mutual_exclusion2 ( void * p1,
void * p2,
void * p3 )

◆ sem_reset_take_task()

void sem_reset_take_task ( void * p1,
void * p2,
void * p3 )

◆ sem_take_multiple_high_prio_helper()

void sem_take_multiple_high_prio_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_take_multiple_high_prio_long_helper()

void sem_take_multiple_high_prio_long_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_take_multiple_low_prio_helper()

void sem_take_multiple_low_prio_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_take_multiple_mid_prio_helper()

void sem_take_multiple_mid_prio_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_take_timeout_forever_helper()

void sem_take_timeout_forever_helper ( void * p1,
void * p2,
void * p3 )

◆ sem_take_timeout_isr_helper()

void sem_take_timeout_isr_helper ( void * p1,
void * p2,
void * p3 )

◆ test_init()

void * test_init ( void )

◆ thread_sem_count_get_null()

static void thread_sem_count_get_null ( void * p1,
void * p2,
void * p3 )
static

◆ thread_sem_give_null()

static void thread_sem_give_null ( void * p1,
void * p2,
void * p3 )
static

◆ thread_sem_init_null()

static void thread_sem_init_null ( void * p1,
void * p2,
void * p3 )
static

◆ thread_sem_reset_null()

static void thread_sem_reset_null ( void * p1,
void * p2,
void * p3 )
static

◆ thread_sem_take_null()

static void thread_sem_take_null ( void * p1,
void * p2,
void * p3 )
static

◆ tsema_thread_isr()

static void tsema_thread_isr ( struct k_sem * psem)
static

TESTPOINT: thread-isr sync via sema

◆ tsema_thread_thread()

static void tsema_thread_thread ( struct k_sem * psem)
static

TESTPOINT: thread-thread sync via sema

◆ ZTEST_SUITE() [1/3]

ZTEST_SUITE ( semaphore ,
NULL ,
test_init ,
NULL ,
NULL ,
NULL  )

◆ ZTEST_SUITE() [2/3]

ZTEST_SUITE ( semaphore_1cpu ,
NULL ,
NULL ,
ztest_simple_1cpu_before ,
ztest_simple_1cpu_after ,
NULL  )

◆ ZTEST_SUITE() [3/3]

ZTEST_SUITE ( semaphore_null_case ,
NULL ,
test_init ,
NULL ,
NULL ,
NULL  )

Variable Documentation

◆ critical_var

uint32_t critical_var

◆ multiple_tid

struct k_thread multiple_tid[(5)]

◆ mut_sem

struct k_sem msg_sema mut_sem

◆ sem_tid_4

struct k_thread sem_tid_1 sem_tid_2 sem_tid_3 sem_tid_4

◆ tdata

struct k_thread tdata