mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-08-31 15:38:40 -04:00
CI-CD Updates (#768)
* Use new version of CI-CD Actions * Use cSpell spell check, and use ubuntu-20.04 for formatting check * Format and spell check all files in the portable directory * Remove the https:// from #errors and #warnings as uncrustify attempts to change it to /* * Use checkout@v3 instead of checkout@v2 on all jobs ---------
This commit is contained in:
parent
d6bccb1f4c
commit
5fb9b50da8
485 changed files with 108790 additions and 107581 deletions
|
@ -27,8 +27,8 @@
|
|||
*/
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Implementation of functions defined in portable.h for the RX600 port.
|
||||
*----------------------------------------------------------*/
|
||||
* Implementation of functions defined in portable.h for the RX600 port.
|
||||
*----------------------------------------------------------*/
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
|
@ -43,15 +43,15 @@
|
|||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Tasks should start with interrupts enabled and in Supervisor mode, therefore
|
||||
PSW is set with U and I set, and PM and IPL clear. */
|
||||
* PSW is set with U and I set, and PM and IPL clear. */
|
||||
#define portINITIAL_PSW ( ( StackType_t ) 0x00030000 )
|
||||
#define portINITIAL_FPSW ( ( StackType_t ) 0x00000100 )
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The following lines are to ensure vSoftwareInterruptEntry can be referenced,
|
||||
and therefore installed in the vector table, when the FreeRTOS code is built
|
||||
as a library. */
|
||||
* and therefore installed in the vector table, when the FreeRTOS code is built
|
||||
* as a library. */
|
||||
extern BaseType_t vSoftwareInterruptEntry;
|
||||
const BaseType_t * p_vSoftwareInterruptEntry = &vSoftwareInterruptEntry;
|
||||
|
||||
|
@ -81,8 +81,8 @@ void vSoftwareInterruptISR( void );
|
|||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* This is accessed by the inline assembler functions so is file scope for
|
||||
convenience. */
|
||||
extern void *pxCurrentTCB;
|
||||
* convenience. */
|
||||
extern void * pxCurrentTCB;
|
||||
extern void vTaskSwitchContext( void );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
@ -90,7 +90,9 @@ extern void vTaskSwitchContext( void );
|
|||
/*
|
||||
* See header file for description.
|
||||
*/
|
||||
StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
|
||||
StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
|
||||
TaskFunction_t pxCode,
|
||||
void * pvParameters )
|
||||
{
|
||||
/* R0 is not included as it is the stack pointer. */
|
||||
|
||||
|
@ -101,8 +103,8 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
|||
*pxTopOfStack = ( StackType_t ) pxCode;
|
||||
|
||||
/* When debugging it can be useful if every register is set to a known
|
||||
value. Otherwise code space can be saved by just setting the registers
|
||||
that need to be set. */
|
||||
* value. Otherwise code space can be saved by just setting the registers
|
||||
* that need to be set. */
|
||||
#ifdef USE_FULL_REGISTER_INITIALISATION
|
||||
{
|
||||
pxTopOfStack--;
|
||||
|
@ -135,11 +137,11 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
|||
*pxTopOfStack = 0x22222222;
|
||||
pxTopOfStack--;
|
||||
}
|
||||
#else
|
||||
#else /* ifdef USE_FULL_REGISTER_INITIALISATION */
|
||||
{
|
||||
pxTopOfStack -= 15;
|
||||
}
|
||||
#endif
|
||||
#endif /* ifdef USE_FULL_REGISTER_INITIALISATION */
|
||||
|
||||
*pxTopOfStack = ( StackType_t ) pvParameters; /* R1 */
|
||||
pxTopOfStack--;
|
||||
|
@ -155,14 +157,14 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
|||
|
||||
BaseType_t xPortStartScheduler( void )
|
||||
{
|
||||
extern void vApplicationSetupTimerInterrupt( void );
|
||||
extern void vApplicationSetupTimerInterrupt( void );
|
||||
|
||||
/* Use pxCurrentTCB just so it does not get optimised away. */
|
||||
if( pxCurrentTCB != NULL )
|
||||
{
|
||||
/* Call an application function to set up the timer that will generate the
|
||||
tick interrupt. This way the application can decide which peripheral to
|
||||
use. A demo application is provided to show a suitable example. */
|
||||
* tick interrupt. This way the application can decide which peripheral to
|
||||
* use. A demo application is provided to show a suitable example. */
|
||||
vApplicationSetupTimerInterrupt();
|
||||
|
||||
/* Enable the software interrupt. */
|
||||
|
@ -190,28 +192,28 @@ extern void vApplicationSetupTimerInterrupt( void );
|
|||
static void prvStartFirstTask( void )
|
||||
{
|
||||
/* When starting the scheduler there is nothing that needs moving to the
|
||||
interrupt stack because the function is not called from an interrupt.
|
||||
Just ensure the current stack is the user stack. */
|
||||
SETPSW U
|
||||
* interrupt stack because the function is not called from an interrupt.
|
||||
* Just ensure the current stack is the user stack. */
|
||||
SETPSW U
|
||||
|
||||
/* Obtain the location of the stack associated with which ever task
|
||||
pxCurrentTCB is currently pointing to. */
|
||||
MOV.L #_pxCurrentTCB, R15
|
||||
MOV.L [R15], R15
|
||||
MOV.L [R15], R0
|
||||
* pxCurrentTCB is currently pointing to. */
|
||||
MOV.L # _pxCurrentTCB, R15
|
||||
MOV.L[ R15 ], R15
|
||||
MOV.L[ R15 ], R0
|
||||
|
||||
/* Restore the registers from the stack of the task pointed to by
|
||||
pxCurrentTCB. */
|
||||
POP R15
|
||||
MVTACLO R15 /* Accumulator low 32 bits. */
|
||||
POP R15
|
||||
MVTACHI R15 /* Accumulator high 32 bits. */
|
||||
POP R15
|
||||
MVTC R15,FPSW /* Floating point status word. */
|
||||
POPM R1-R15 /* R1 to R15 - R0 is not included as it is the SP. */
|
||||
RTE /* This pops the remaining registers. */
|
||||
NOP
|
||||
* pxCurrentTCB. */
|
||||
POP R15
|
||||
MVTACLO R15 /* Accumulator low 32 bits. */
|
||||
POP R15
|
||||
MVTACHI R15 /* Accumulator high 32 bits. */
|
||||
POP R15
|
||||
MVTC R15, FPSW /* Floating point status word. */
|
||||
POPM R1 - R15 /* R1 to R15 - R0 is not included as it is the SP. */
|
||||
RTE /* This pops the remaining registers. */
|
||||
NOP
|
||||
NOP
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
@ -219,7 +221,7 @@ static void prvStartFirstTask( void )
|
|||
void vTickISR( void )
|
||||
{
|
||||
/* Increment the tick, and perform any processing the new tick value
|
||||
necessitates. */
|
||||
* necessitates. */
|
||||
set_ipl( configMAX_SYSCALL_INTERRUPT_PRIORITY );
|
||||
{
|
||||
if( xTaskIncrementTick() != pdFALSE )
|
||||
|
@ -227,6 +229,7 @@ void vTickISR( void )
|
|||
taskYIELD();
|
||||
}
|
||||
}
|
||||
|
||||
set_ipl( configKERNEL_INTERRUPT_PRIORITY );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
@ -241,84 +244,90 @@ void vSoftwareInterruptISR( void )
|
|||
static void prvYieldHandler( void )
|
||||
{
|
||||
/* Re-enable interrupts. */
|
||||
SETPSW I
|
||||
SETPSW I
|
||||
|
||||
/* Move the data that was automatically pushed onto the interrupt stack when
|
||||
the interrupt occurred from the interrupt stack to the user stack.
|
||||
|
||||
R15 is saved before it is clobbered. */
|
||||
PUSH.L R15
|
||||
* the interrupt occurred from the interrupt stack to the user stack.
|
||||
*
|
||||
* R15 is saved before it is clobbered. */
|
||||
PUSH.L R15
|
||||
|
||||
/* Read the user stack pointer. */
|
||||
MVFC USP, R15
|
||||
MVFC USP, R15
|
||||
|
||||
/* Move the address down to the data being moved. */
|
||||
SUB #12, R15
|
||||
MVTC R15, USP
|
||||
SUB # 12, R15
|
||||
MVTC R15, USP
|
||||
|
||||
/* Copy the data across. */
|
||||
MOV.L [ R0 ], [ R15 ] ; R15
|
||||
MOV.L 4[ R0 ], 4[ R15 ] ; PC
|
||||
MOV.L 8[ R0 ], 8[ R15 ] ; PSW
|
||||
MOV.L[ R0 ], [ R15 ];
|
||||
R15
|
||||
|
||||
MOV.L 4[ R0 ], 4[ R15 ];
|
||||
PC
|
||||
MOV.L 8[ R0 ], 8[ R15 ];
|
||||
PSW
|
||||
|
||||
/* Move the interrupt stack pointer to its new correct position. */
|
||||
ADD #12, R0
|
||||
ADD # 12, R0
|
||||
|
||||
/* All the rest of the registers are saved directly to the user stack. */
|
||||
SETPSW U
|
||||
SETPSW U
|
||||
|
||||
/* Save the rest of the general registers (R15 has been saved already). */
|
||||
PUSHM R1-R14
|
||||
PUSHM R1 - R14
|
||||
|
||||
/* Save the FPSW and accumulator. */
|
||||
MVFC FPSW, R15
|
||||
PUSH.L R15
|
||||
MVFC FPSW, R15
|
||||
PUSH.L R15
|
||||
MVFACHI R15
|
||||
PUSH.L R15
|
||||
MVFACMI R15 ; Middle order word.
|
||||
SHLL #16, R15 ; Shifted left as it is restored to the low order word.
|
||||
PUSH.L R15
|
||||
PUSH.L R15
|
||||
MVFACMI R15;
|
||||
Middle order word.
|
||||
SHLL # 16, R15;
|
||||
Shifted left as it is restored to the low order word.
|
||||
PUSH.L R15
|
||||
|
||||
/* Save the stack pointer to the TCB. */
|
||||
MOV.L #_pxCurrentTCB, R15
|
||||
MOV.L [ R15 ], R15
|
||||
MOV.L R0, [ R15 ]
|
||||
MOV.L # _pxCurrentTCB, R15
|
||||
MOV.L[ R15 ], R15
|
||||
MOV.L R0, [ R15 ]
|
||||
|
||||
/* Ensure the interrupt mask is set to the syscall priority while the kernel
|
||||
structures are being accessed. */
|
||||
MVTIPL #configMAX_SYSCALL_INTERRUPT_PRIORITY
|
||||
* structures are being accessed. */
|
||||
MVTIPL # configMAX_SYSCALL_INTERRUPT_PRIORITY
|
||||
|
||||
/* Select the next task to run. */
|
||||
BSR.A _vTaskSwitchContext
|
||||
BSR.A _vTaskSwitchContext
|
||||
|
||||
/* Reset the interrupt mask as no more data structure access is required. */
|
||||
MVTIPL #configKERNEL_INTERRUPT_PRIORITY
|
||||
MVTIPL # configKERNEL_INTERRUPT_PRIORITY
|
||||
|
||||
/* Load the stack pointer of the task that is now selected as the Running
|
||||
state task from its TCB. */
|
||||
MOV.L #_pxCurrentTCB,R15
|
||||
MOV.L [ R15 ], R15
|
||||
MOV.L [ R15 ], R0
|
||||
* state task from its TCB. */
|
||||
MOV.L # _pxCurrentTCB, R15
|
||||
MOV.L[ R15 ], R15
|
||||
MOV.L[ R15 ], R0
|
||||
|
||||
/* Restore the context of the new task. The PSW (Program Status Word) and
|
||||
PC will be popped by the RTE instruction. */
|
||||
POP R15
|
||||
* PC will be popped by the RTE instruction. */
|
||||
POP R15
|
||||
MVTACLO R15
|
||||
POP R15
|
||||
POP R15
|
||||
MVTACHI R15
|
||||
POP R15
|
||||
MVTC R15,FPSW
|
||||
POPM R1-R15
|
||||
POP R15
|
||||
MVTC R15, FPSW
|
||||
POPM R1 - R15
|
||||
RTE
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vPortEndScheduler( void )
|
||||
{
|
||||
/* Not implemented in ports where there is nothing to return to.
|
||||
Artificially force an assert. */
|
||||
* Artificially force an assert. */
|
||||
configASSERT( pxCurrentTCB == NULL );
|
||||
|
||||
/* The following line is just to prevent the symbol getting optimised away. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue