Files

37 lines
1.1 KiB
C
Raw Permalink Normal View History

2026-05-19 11:49:22 +08:00
#include <os_port.h>
#include "os_critical.h"
#include "os_sched.h"
/* ------------------------------------------------------------------------------------------------------------------ */
/* */
volatile void* g_os_port_switch_from_sp;
volatile void* g_os_port_switch_to_sp;
volatile os_bool_t g_os_port_context_switch_flag;
/* ------------------------------------------------------------------------------------------------------------------ */
/* */
void os_port_on_switch_success(void){
// os_critical_enter_in_isr();
2026-05-19 11:49:22 +08:00
g_os_sched_current_task_p = g_os_port_switch_to_sp;
g_os_sched_current_task_p->state = kOsTaskState_Running;
g_os_port_context_switch_flag = OS_FALSE;
// os_critical_leave_in_isr();
2026-05-19 11:49:22 +08:00
}
OS_WEAK
2026-05-19 11:49:22 +08:00
void os_port_context_switch(void* from_sp, void* to_sp){
os_critical_enter_in_isr();
if(g_os_port_context_switch_flag==OS_TRUE){
os_critical_leave_in_isr();
return;
}
g_os_port_context_switch_flag = OS_TRUE;
g_os_port_switch_from_sp = from_sp;
g_os_port_switch_to_sp = to_sp;
os_critical_leave_in_isr();
os_port_send_context_switch_request();
}