| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- /*
- *********************************************************************************************************
- * uC/OS-II
- * The Real-Time Kernel
- *
- * Copyright 1992-2020 Silicon Laboratories Inc. www.silabs.com
- *
- * SPDX-License-Identifier: APACHE-2.0
- *
- * This software is subject to an open source license and is distributed by
- * Silicon Laboratories Inc. pursuant to the terms of the Apache License,
- * Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
- *
- *********************************************************************************************************
- */
- /*
- *********************************************************************************************************
- *
- * RISC-V Port
- *
- * Filename : os_cpu_c.c
- * Version : V2.93.00
- *********************************************************************************************************
- * For : Nuclei RISC-V RV32 and RV64
- * Toolchain : GNU C Compiler
- *********************************************************************************************************
- * Note(s) : Hardware FP is not supported.
- *********************************************************************************************************
- */
- #define OS_CPU_GLOBALS
- /*
- *********************************************************************************************************
- * INCLUDE FILES
- *********************************************************************************************************
- */
- #include <ucos_ii.h>
- /*
- *********************************************************************************************************
- * LOCAL VARIABLES
- *********************************************************************************************************
- */
- #if OS_TMR_EN > 0u
- static INT16U OSTmrCtr;
- #endif
- /*
- *********************************************************************************************************
- * OS INITIALIZATION HOOK
- * (BEGINNING)
- *
- * Description: This function is called by OSInit() at the beginning of OSInit().
- *
- * Arguments : none
- *
- * Note(s) : 1) Interrupts should be disabled during this call.
- *********************************************************************************************************
- */
- #if OS_CPU_HOOKS_EN > 0u
- void OSInitHookBegin(void)
- {
- #if OS_TMR_EN > 0u
- OSTmrCtr = 0u;
- #endif
- }
- #endif
- /*
- *********************************************************************************************************
- * OS INITIALIZATION HOOK
- * (END)
- *
- * Description: This function is called by OSInit() at the end of OSInit().
- *
- * Arguments : none
- *
- * Note(s) : 1) Interrupts should be disabled during this call.
- *********************************************************************************************************
- */
- #if OS_CPU_HOOKS_EN > 0u
- void OSInitHookEnd(void)
- {
- }
- #endif
- /*
- *********************************************************************************************************
- * TASK CREATION HOOK
- *
- * Description: This function is called when a task is created.
- *
- * Arguments : ptcb is a pointer to the task control block of the task being created.
- *
- * Note(s) : 1) Interrupts are disabled during this call.
- *********************************************************************************************************
- */
- #if OS_CPU_HOOKS_EN > 0u
- void OSTaskCreateHook(OS_TCB* p_tcb)
- {
- #if OS_APP_HOOKS_EN > 0u
- App_TaskCreateHook(p_tcb);
- #else
- (void)ptcb; /* Prevent compiler warning */
- #endif
- }
- #endif
- /*
- *********************************************************************************************************
- * TASK DELETION HOOK
- *
- * Description: This function is called when a task is deleted.
- *
- * Arguments : ptcb is a pointer to the task control block of the task being deleted.
- *
- * Note(s) : 1) Interrupts are disabled during this call.
- *********************************************************************************************************
- */
- #if OS_CPU_HOOKS_EN > 0u
- void OSTaskDelHook(OS_TCB* p_tcb)
- {
- #if OS_APP_HOOKS_EN > 0u
- App_TaskDelHook(p_tcb);
- #else
- (void)ptcb; /* Prevent compiler warning */
- #endif
- }
- #endif
- /*
- *********************************************************************************************************
- * IDLE TASK HOOK
- *
- * Description: This function is called by the idle task. This hook has been added to allow you to do
- * such things as STOP the CPU to conserve power.
- *
- * Arguments : none
- *
- * Note(s) : 1) Interrupts are enabled during this call.
- *********************************************************************************************************
- */
- #if OS_CPU_HOOKS_EN > 0u
- void OSTaskIdleHook(void)
- {
- #if OS_APP_HOOKS_EN > 0u
- App_TaskIdleHook();
- #endif
- }
- #endif
- /*
- *********************************************************************************************************
- * TASK RETURN HOOK
- *
- * Description: This function is called if a task accidentally returns. In other words, a task should
- * either be an infinite loop or delete itself when done.
- *
- * Arguments : ptcb is a pointer to the task control block of the task that is returning.
- *
- * Note(s) : none
- *********************************************************************************************************
- */
- #if OS_CPU_HOOKS_EN > 0u
- void OSTaskReturnHook(OS_TCB* p_tcb)
- {
- #if OS_APP_HOOKS_EN > 0u
- App_TaskReturnHook(p_tcb);
- #else
- (void)ptcb;
- #endif
- }
- #endif
- /*
- *********************************************************************************************************
- * STATISTIC TASK HOOK
- *
- * Description: This function is called every second by uC/OS-II's statistics task. This allows your
- * application to add functionality to the statistics task.
- *
- * Arguments : none
- *********************************************************************************************************
- */
- #if OS_CPU_HOOKS_EN > 0u
- void OSTaskStatHook(void)
- {
- #if OS_APP_HOOKS_EN > 0u
- App_TaskStatHook();
- #endif
- }
- #endif
- /*
- *********************************************************************************************************
- * INITIALIZE A TASK'S STACK
- * This OSTaskStkInit function is implemented in os_cpu_port.c portable source file
- *
- *********************************************************************************************************
- */
- /*
- *********************************************************************************************************
- * TASK SWITCH HOOK
- *
- * Description: This function is called when a task switch is performed. This allows you to perform other
- * operations during a context switch.
- *
- * Arguments : none
- *
- * Note(s) : 1) Interrupts are disabled during this call.
- * 2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that
- * will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
- * task being switched out (i.e. the preempted task).
- *********************************************************************************************************
- */
- #if (OS_CPU_HOOKS_EN > 0u) && (OS_TASK_SW_HOOK_EN > 0u)
- void OSTaskSwHook(void)
- {
- #if OS_APP_HOOKS_EN > 0u
- App_TaskSwHook();
- #endif
- OS_TRACE_TASK_SWITCHED_IN(OSTCBHighRdy);
- }
- #endif
- /*
- *********************************************************************************************************
- * OS_TCBInit() HOOK
- *
- * Description: This function is called by OS_TCBInit() after setting up most of the TCB.
- *
- * Arguments : ptcb is a pointer to the TCB of the task being created.
- *
- * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
- *********************************************************************************************************
- */
- #if OS_CPU_HOOKS_EN > 0u
- void OSTCBInitHook(OS_TCB* p_tcb)
- {
- #if OS_APP_HOOKS_EN > 0u
- App_TCBInitHook(p_tcb);
- #else
- (void)ptcb; /* Prevent compiler warning */
- #endif
- }
- #endif
- /*
- *********************************************************************************************************
- * TICK HOOK
- *
- * Description: This function is called every tick.
- *
- * Arguments : none
- *
- * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
- *********************************************************************************************************
- */
- #if (OS_CPU_HOOKS_EN > 0u) && (OS_TIME_TICK_HOOK_EN > 0u)
- void OSTimeTickHook(void)
- {
- #if OS_APP_HOOKS_EN > 0u
- App_TimeTickHook();
- #endif
- #if OS_TMR_EN > 0u
- OSTmrCtr++;
- if (OSTmrCtr >= (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC)) {
- OSTmrCtr = 0u;
- OSTmrSignal();
- }
- #endif
- }
- #endif
- /*
- *********************************************************************************************************
- * SYS TICK HANDLER
- * This Systick handler function is implemented in os_cpu_port.c portable source file
- * See xPortSysTickHandler in os_cpu_port.c
- *
- *********************************************************************************************************
- */
|