mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-18 12:52:44 +01:00
tests/deferred_yield_higher: initial commit
This test verifies that a thread can call `thread_yield_higher()` with IRQs disabled, and that the actual context switch is deferred until IRQs are re-enabled.
This commit is contained in:
parent
87b49d04ab
commit
fe1d9981a8
5
tests/deferred_yield_higher/Makefile
Normal file
5
tests/deferred_yield_higher/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
include ../Makefile.tests_common
|
||||
|
||||
FEATURES_BLACKLIST += arch_avr8 arch_msp430 arch_riscv arch_mips32r2
|
||||
|
||||
include $(RIOTBASE)/Makefile.include
|
3
tests/deferred_yield_higher/Makefile.ci
Normal file
3
tests/deferred_yield_higher/Makefile.ci
Normal file
@ -0,0 +1,3 @@
|
||||
BOARD_INSUFFICIENT_MEMORY := \
|
||||
nucleo-l011k4 \
|
||||
#
|
14
tests/deferred_yield_higher/README.md
Normal file
14
tests/deferred_yield_higher/README.md
Normal file
@ -0,0 +1,14 @@
|
||||
Introduction
|
||||
============
|
||||
|
||||
This test verifies that a thread can call "thread_yield_higher()" with IRQs
|
||||
disabled, and that the actual context switch is deferred until IRQs are
|
||||
re-enabled.
|
||||
|
||||
For the test to be successful, the printed messages must be in order, as follows:
|
||||
|
||||
```
|
||||
1. post yield
|
||||
2. second thread scheduled
|
||||
3. post irq enable
|
||||
```
|
52
tests/deferred_yield_higher/main.c
Normal file
52
tests/deferred_yield_higher/main.c
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Inria
|
||||
* 2021 Freie Universität Berlin
|
||||
* 2021 Kaspar Schleiser <kaspar@schleiser.de>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup tests
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Application for testing thread_yield_higher() with IRQs disabled
|
||||
*
|
||||
* @author Kaspar Schleiser <kaspar@schleiser.de>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "irq.h"
|
||||
#include "thread.h"
|
||||
|
||||
static char t2_stack[THREAD_STACKSIZE_DEFAULT];
|
||||
|
||||
static void *second_thread(void *arg)
|
||||
{
|
||||
puts("2. second thread scheduled");
|
||||
return arg;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
thread_create(
|
||||
t2_stack, sizeof(t2_stack),
|
||||
THREAD_PRIORITY_MAIN - 1,
|
||||
THREAD_CREATE_WOUT_YIELD | THREAD_CREATE_STACKTEST,
|
||||
second_thread, NULL, "nr2");
|
||||
|
||||
irq_disable();
|
||||
thread_yield_higher();
|
||||
puts("1. post yield");
|
||||
irq_enable();
|
||||
puts("3. post irq enable");
|
||||
|
||||
puts("if above messages are in order, this test succeeded.");
|
||||
|
||||
return 0;
|
||||
}
|
20
tests/deferred_yield_higher/tests/test.py
Executable file
20
tests/deferred_yield_higher/tests/test.py
Executable file
@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (C) 2017 Kaspar Schleiser <kaspar@schleiser.de>
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU Lesser
|
||||
# General Public License v2.1. See the file LICENSE in the top level
|
||||
# directory for more details.
|
||||
|
||||
import sys
|
||||
from testrunner import run
|
||||
|
||||
|
||||
def testfunc(child):
|
||||
child.expect_exact('1. post yield')
|
||||
child.expect_exact('2. second thread scheduled')
|
||||
child.expect_exact('3. post irq enable')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(run(testfunc))
|
Loading…
Reference in New Issue
Block a user