port_m33.h stdint.h hardware/structs/scb.h C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/scheduler.cpp void void tk_port_init (uint32_t ticks_per_sec) tk_port_init uint32_t ticks_per_sec uintptr_t uintptr_t tk_port_make_frame (uint8_t *base, uint32_t size_bytes, void *entry_fn, void *arg) tk_port_make_frame uint8_t * base uint32_t size_bytes void * entry_fn void * arg void void tk_port_start (uintptr_t sp) tk_port_start uintptr_t sp void static void tk_port_trigger_pendsv (void) tk_port_trigger_pendsv void #pragmaonce #include<stdint.h> #include"hardware/structs/scb.h" #ifdef__cplusplus extern"C"{ #endif //One-timeportsetup:FPUcontextpolicy+SysTick+PendSVpriority.Calledfromtk::start(). voidtk_port_init(uint32_tticks_per_sec); //Buildatask'sinitialstackframe.ReturnstheSPtostartwith. uintptr_ttk_port_make_frame(uint8_t*base,uint32_tsize_bytes,void*entry_fn,void*arg); //Jumpintothefirsttask(r0=SPfromtk_port_make_frame).Neverreturns. voidtk_port_start(uintptr_tsp); //TriggeraPendSVexceptiontoinitiatecontextswitching. staticinlinevoidtk_port_trigger_pendsv(void){ scb_hw->icsr=1u<<28;//SCB_ICSR_PENDSVSET_Msk __asm__volatile("isb":::"memory"); } #ifdef__cplusplus } #endif