/** * Copyright (c) 2023 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include "pico/stdlib.h" #include "pico/multicore.h" #include "pico/test.h" PICOTEST_MODULE_NAME("pico_stdio_test", "pico_stdio test harness"); static volatile bool deadlock_test_done; static void deadlock_test_core1(void) { busy_wait_ms(250); for(int i=0;i<1000;i++) { if (deadlock_test_done) break; printf("Hello from core 1 - %d\n", i); busy_wait_ms(23); } } static volatile bool deadlock_test_irq_called; static int64_t deadlock_test_alarm(alarm_id_t id, void *param) { static int foo; printf("Here is a printf from the IRQ %d\n", ++foo); deadlock_test_irq_called = true; return 100; } int main() { stdio_init_all(); for(int i=0;i<10;i++) { printf("Hello %d\n", i); } printf("pico_stdio_test begins\n"); PICOTEST_START(); // Check default config has valid data in it PICOTEST_START_SECTION("STDIO deadlock test"); multicore_launch_core1(deadlock_test_core1); alarm_id_t alarm_id = add_alarm_in_ms(500, deadlock_test_alarm, NULL, false); PICOTEST_CHECK(getchar_timeout_us(2000000) < 0, "someone pressed a key!"); deadlock_test_done = true; cancel_alarm(alarm_id); sleep_ms(100); PICOTEST_CHECK(deadlock_test_irq_called, "deadlock_test_irq was not called"); PICOTEST_END_SECTION(); PICOTEST_END_TEST(); }