#include #if PICO_RP2040 #include "RP2040.h" #else #include "RP2350.h" #endif #include "pico/stdlib.h" #include "hardware/irq.h" __STATIC_FORCEINLINE int some_function(int i) { return __CLZ(i); } static bool pendsv_called, irq_handler_called; void PendSV_Handler(void) { pendsv_called = true; } void DMA_IRQ_0_Handler(void) { irq_handler_called = true; irq_clear(DMA_IRQ_0_IRQn); } int main(void) { stdio_init_all(); for(int i=0;i<10;i++) { printf("%d %d\n", i, some_function(i)); } SCB->ICSR = SCB_ICSR_PENDSVSET_Msk; printf("PENDSV: "); puts(pendsv_called ? "SUCCESS" : "FAILURE"); printf("DMA_IRQ_0: "); irq_set_enabled(DMA_IRQ_0_IRQn, true); irq_set_pending(DMA_IRQ_0_IRQn); puts(irq_handler_called ? "SUCCESS" : "FAILURE"); bool ok = pendsv_called && irq_handler_called; puts(ok ? "PASSED" : "FAILED"); return !ok; }