mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 11:09:01 +01:00 
			
		
		
		
	Revert Portable/CodeWarrior formatting (#831)
Revert the formatting on CodeWarrior ports
This commit is contained in:
		
							parent
							
								
									de2c0c1a95
								
							
						
					
					
						commit
						db5df4bfde
					
				@ -31,38 +31,35 @@
 | 
			
		||||
#include "task.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define portINITIAL_FORMAT_VECTOR      ( ( StackType_t ) 0x4000 )
 | 
			
		||||
#define portINITIAL_FORMAT_VECTOR       ( ( StackType_t ) 0x4000 )
 | 
			
		||||
 | 
			
		||||
/* Supervisor mode set. */
 | 
			
		||||
#define portINITIAL_STATUS_REGISTER    ( ( StackType_t ) 0x2000 )
 | 
			
		||||
#define portINITIAL_STATUS_REGISTER     ( ( StackType_t ) 0x2000)
 | 
			
		||||
 | 
			
		||||
/* The clock prescale into the timer peripheral. */
 | 
			
		||||
#define portPRESCALE_VALUE             ( ( uint8_t ) 10 )
 | 
			
		||||
#define portPRESCALE_VALUE              ( ( uint8_t ) 10 )
 | 
			
		||||
 | 
			
		||||
/* The clock frequency into the RTC. */
 | 
			
		||||
#define portRTC_CLOCK_HZ               ( ( uint32_t ) 1000 )
 | 
			
		||||
#define portRTC_CLOCK_HZ                ( ( uint32_t ) 1000 )
 | 
			
		||||
 | 
			
		||||
asm void interrupt VectorNumber_VL1swi vPortYieldISR( void );
 | 
			
		||||
static void prvSetupTimerInterrupt( void );
 | 
			
		||||
 | 
			
		||||
/* Used to keep track of the number of nested calls to taskENTER_CRITICAL().  This
 | 
			
		||||
 * will be set to 0 prior to the first task being started. */
 | 
			
		||||
will be set to 0 prior to the first task being started. */
 | 
			
		||||
static uint32_t ulCriticalNesting = 0x9999UL;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                     TaskFunction_t pxCode,
 | 
			
		||||
                                     void * pvParameters )
 | 
			
		||||
StackType_t *pxPortInitialiseStack( StackType_t * pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulOriginalA5;
 | 
			
		||||
 | 
			
		||||
    __asm {
 | 
			
		||||
        MOVE.L A5, ulOriginalA5
 | 
			
		||||
    };
 | 
			
		||||
uint32_t ulOriginalA5;
 | 
			
		||||
 | 
			
		||||
    __asm{ MOVE.L A5, ulOriginalA5 };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xDEADBEEF;
 | 
			
		||||
    *pxTopOfStack = (StackType_t) 0xDEADBEEF;
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* Exception stack frame starts with the return address. */
 | 
			
		||||
@ -73,7 +70,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0x0; /*FP*/
 | 
			
		||||
    pxTopOfStack -= 14;                  /* A5 to D0. */
 | 
			
		||||
    pxTopOfStack -= 14; /* A5 to D0. */
 | 
			
		||||
 | 
			
		||||
    /* Parameter in A0. */
 | 
			
		||||
    *( pxTopOfStack + 8 ) = ( StackType_t ) pvParameters;
 | 
			
		||||
@ -87,7 +84,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
 | 
			
		||||
BaseType_t xPortStartScheduler( void )
 | 
			
		||||
{
 | 
			
		||||
    extern void vPortStartFirstTask( void );
 | 
			
		||||
extern void vPortStartFirstTask( void );
 | 
			
		||||
 | 
			
		||||
    ulCriticalNesting = 0UL;
 | 
			
		||||
 | 
			
		||||
@ -110,7 +107,7 @@ static void prvSetupTimerInterrupt( void )
 | 
			
		||||
    RTCMOD = portRTC_CLOCK_HZ / configTICK_RATE_HZ;
 | 
			
		||||
 | 
			
		||||
    /* Enable the RTC to generate interrupts - interrupts are already disabled
 | 
			
		||||
     * when this code executes. */
 | 
			
		||||
    when this code executes. */
 | 
			
		||||
    RTCSC_RTIE = 1;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
@ -126,20 +123,19 @@ void vPortEnterCritical( void )
 | 
			
		||||
    if( ulCriticalNesting == 0UL )
 | 
			
		||||
    {
 | 
			
		||||
        /* Guard against context switches being pended simultaneously with a
 | 
			
		||||
         * critical section being entered. */
 | 
			
		||||
        critical section being entered. */
 | 
			
		||||
        do
 | 
			
		||||
        {
 | 
			
		||||
            portDISABLE_INTERRUPTS();
 | 
			
		||||
 | 
			
		||||
            if( INTC_FRC == 0UL )
 | 
			
		||||
            {
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            portENABLE_INTERRUPTS();
 | 
			
		||||
 | 
			
		||||
        } while( 1 );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ulCriticalNesting++;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
@ -147,7 +143,6 @@ void vPortEnterCritical( void )
 | 
			
		||||
void vPortExitCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    ulCriticalNesting--;
 | 
			
		||||
 | 
			
		||||
    if( ulCriticalNesting == 0 )
 | 
			
		||||
    {
 | 
			
		||||
        portENABLE_INTERRUPTS();
 | 
			
		||||
@ -157,7 +152,7 @@ void vPortExitCritical( void )
 | 
			
		||||
 | 
			
		||||
void vPortYieldHandler( void )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulSavedInterruptMask;
 | 
			
		||||
uint32_t ulSavedInterruptMask;
 | 
			
		||||
 | 
			
		||||
    ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR();
 | 
			
		||||
    {
 | 
			
		||||
@ -171,7 +166,7 @@ void vPortYieldHandler( void )
 | 
			
		||||
 | 
			
		||||
void interrupt VectorNumber_Vrtc vPortTickISR( void )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulSavedInterruptMask;
 | 
			
		||||
uint32_t ulSavedInterruptMask;
 | 
			
		||||
 | 
			
		||||
    /* Clear the interrupt. */
 | 
			
		||||
    RTCSC |= RTCSC_RTIF_MASK;
 | 
			
		||||
 | 
			
		||||
@ -46,34 +46,34 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Type definitions. */
 | 
			
		||||
#define portCHAR          char
 | 
			
		||||
#define portFLOAT         float
 | 
			
		||||
#define portDOUBLE        double
 | 
			
		||||
#define portLONG          long
 | 
			
		||||
#define portSHORT         short
 | 
			
		||||
#define portSTACK_TYPE    uint32_t
 | 
			
		||||
#define portBASE_TYPE     long
 | 
			
		||||
#define portCHAR        char
 | 
			
		||||
#define portFLOAT       float
 | 
			
		||||
#define portDOUBLE      double
 | 
			
		||||
#define portLONG        long
 | 
			
		||||
#define portSHORT       short
 | 
			
		||||
#define portSTACK_TYPE  uint32_t
 | 
			
		||||
#define portBASE_TYPE   long
 | 
			
		||||
 | 
			
		||||
typedef portSTACK_TYPE   StackType_t;
 | 
			
		||||
typedef long             BaseType_t;
 | 
			
		||||
typedef unsigned long    UBaseType_t;
 | 
			
		||||
typedef portSTACK_TYPE StackType_t;
 | 
			
		||||
typedef long BaseType_t;
 | 
			
		||||
typedef unsigned long UBaseType_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
 | 
			
		||||
    typedef uint16_t     TickType_t;
 | 
			
		||||
    #define portMAX_DELAY    ( TickType_t ) 0xffff
 | 
			
		||||
#if( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
 | 
			
		||||
    typedef uint16_t TickType_t;
 | 
			
		||||
    #define portMAX_DELAY ( TickType_t ) 0xffff
 | 
			
		||||
#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )
 | 
			
		||||
    typedef uint32_t     TickType_t;
 | 
			
		||||
    #define portMAX_DELAY    ( TickType_t ) ( 0xFFFFFFFFUL )
 | 
			
		||||
    typedef uint32_t TickType_t;
 | 
			
		||||
    #define portMAX_DELAY ( TickType_t )    ( 0xFFFFFFFFUL )
 | 
			
		||||
#else
 | 
			
		||||
    #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
 | 
			
		||||
#endif
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Hardware specifics. */
 | 
			
		||||
#define portBYTE_ALIGNMENT    4
 | 
			
		||||
#define portSTACK_GROWTH      -1
 | 
			
		||||
#define portTICK_PERIOD_MS    ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 | 
			
		||||
#define portBYTE_ALIGNMENT          4
 | 
			
		||||
#define portSTACK_GROWTH            -1
 | 
			
		||||
#define portTICK_PERIOD_MS          ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
uint32_t ulPortSetIPL( uint32_t );
 | 
			
		||||
@ -83,29 +83,30 @@ uint32_t ulPortSetIPL( uint32_t );
 | 
			
		||||
 | 
			
		||||
extern void vPortEnterCritical( void );
 | 
			
		||||
extern void vPortExitCritical( void );
 | 
			
		||||
#define portENTER_CRITICAL()    vPortEnterCritical()
 | 
			
		||||
#define portEXIT_CRITICAL()     vPortExitCritical()
 | 
			
		||||
#define portENTER_CRITICAL()        vPortEnterCritical()
 | 
			
		||||
#define portEXIT_CRITICAL()         vPortExitCritical()
 | 
			
		||||
 | 
			
		||||
extern UBaseType_t uxPortSetInterruptMaskFromISR( void );
 | 
			
		||||
extern void vPortClearInterruptMaskFromISR( UBaseType_t );
 | 
			
		||||
#define portSET_INTERRUPT_MASK_FROM_ISR()                             ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
 | 
			
		||||
#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister )    ulPortSetIPL( uxSavedStatusRegister )
 | 
			
		||||
#define portSET_INTERRUPT_MASK_FROM_ISR()   ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
 | 
			
		||||
#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister ) ulPortSetIPL( uxSavedStatusRegister )
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Task utilities. */
 | 
			
		||||
#define portNOP()      asm volatile ( "nop" )
 | 
			
		||||
#define portNOP()   asm volatile ( "nop" )
 | 
			
		||||
 | 
			
		||||
/* Context switches are requested using the force register. */
 | 
			
		||||
#define portYIELD()    INTC_SFRC = 0x3E; portNOP(); portNOP(); portNOP(); portNOP(); portNOP()
 | 
			
		||||
#define portYIELD() INTC_SFRC = 0x3E; portNOP(); portNOP(); portNOP(); portNOP(); portNOP()
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Task function macros as described on the FreeRTOS.org WEB site. */
 | 
			
		||||
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters )    void vFunction( void * pvParameters ) __attribute__( ( noreturn ) )
 | 
			
		||||
#define portTASK_FUNCTION( vFunction, pvParameters )          void vFunction( void * pvParameters )
 | 
			
		||||
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) __attribute__((noreturn))
 | 
			
		||||
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define portEND_SWITCHING_ISR( xSwitchRequired ) \
 | 
			
		||||
    do                                           \
 | 
			
		||||
    {                                            \
 | 
			
		||||
 | 
			
		||||
@ -31,41 +31,39 @@
 | 
			
		||||
#include "task.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define portINITIAL_FORMAT_VECTOR      ( ( StackType_t ) 0x4000 )
 | 
			
		||||
#define portINITIAL_FORMAT_VECTOR       ( ( StackType_t ) 0x4000 )
 | 
			
		||||
 | 
			
		||||
/* Supervisor mode set. */
 | 
			
		||||
#define portINITIAL_STATUS_REGISTER    ( ( StackType_t ) 0x2000 )
 | 
			
		||||
#define portINITIAL_STATUS_REGISTER     ( ( StackType_t ) 0x2000)
 | 
			
		||||
 | 
			
		||||
/* Used to keep track of the number of nested calls to taskENTER_CRITICAL().  This
 | 
			
		||||
 * will be set to 0 prior to the first task being started. */
 | 
			
		||||
will be set to 0 prior to the first task being started. */
 | 
			
		||||
static uint32_t ulCriticalNesting = 0x9999UL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define portSAVE_CONTEXT()         \
 | 
			
		||||
    lea.l( -60, % sp ), % sp;      \
 | 
			
		||||
    movem.l % d0 - % fp, ( % sp ); \
 | 
			
		||||
    move.l pxCurrentTCB, % a0;     \
 | 
			
		||||
    move.l % sp, ( % a0 );
 | 
			
		||||
#define portSAVE_CONTEXT()              \
 | 
			
		||||
    lea.l       (-60, %sp), %sp;        \
 | 
			
		||||
    movem.l     %d0-%fp, (%sp);         \
 | 
			
		||||
    move.l      pxCurrentTCB, %a0;      \
 | 
			
		||||
    move.l      %sp, (%a0);
 | 
			
		||||
 | 
			
		||||
#define portRESTORE_CONTEXT()     \
 | 
			
		||||
    move.l pxCurrentTCB, % a0;    \
 | 
			
		||||
    move.l( % a0 ), % sp;         \
 | 
			
		||||
    movem.l( % sp ), % d0 - % fp; \
 | 
			
		||||
    lea.l % sp@( 60 ), % sp;      \
 | 
			
		||||
#define portRESTORE_CONTEXT()           \
 | 
			
		||||
    move.l      pxCurrentTCB, %a0;      \
 | 
			
		||||
    move.l      (%a0), %sp;             \
 | 
			
		||||
    movem.l     (%sp), %d0-%fp;         \
 | 
			
		||||
    lea.l       %sp@(60), %sp;          \
 | 
			
		||||
    rte
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                     TaskFunction_t pxCode,
 | 
			
		||||
                                     void * pvParameters )
 | 
			
		||||
StackType_t *pxPortInitialiseStack( StackType_t * pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) pvParameters;
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xDEADBEEF;
 | 
			
		||||
    *pxTopOfStack = (StackType_t) 0xDEADBEEF;
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* Exception stack frame starts with the return address. */
 | 
			
		||||
@ -76,7 +74,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0x0; /*FP*/
 | 
			
		||||
    pxTopOfStack -= 14;                  /* A5 to D0. */
 | 
			
		||||
    pxTopOfStack -= 14; /* A5 to D0. */
 | 
			
		||||
 | 
			
		||||
    return pxTopOfStack;
 | 
			
		||||
}
 | 
			
		||||
@ -84,7 +82,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
 | 
			
		||||
BaseType_t xPortStartScheduler( void )
 | 
			
		||||
{
 | 
			
		||||
    extern void vPortStartFirstTask( void );
 | 
			
		||||
extern void vPortStartFirstTask( void );
 | 
			
		||||
 | 
			
		||||
    ulCriticalNesting = 0UL;
 | 
			
		||||
 | 
			
		||||
@ -109,20 +107,19 @@ void vPortEnterCritical( void )
 | 
			
		||||
    if( ulCriticalNesting == 0UL )
 | 
			
		||||
    {
 | 
			
		||||
        /* Guard against context switches being pended simultaneously with a
 | 
			
		||||
         * critical section being entered. */
 | 
			
		||||
        critical section being entered. */
 | 
			
		||||
        do
 | 
			
		||||
        {
 | 
			
		||||
            portDISABLE_INTERRUPTS();
 | 
			
		||||
 | 
			
		||||
            if( MCF_INTC0_INTFRCH == 0UL )
 | 
			
		||||
            {
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            portENABLE_INTERRUPTS();
 | 
			
		||||
 | 
			
		||||
        } while( 1 );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ulCriticalNesting++;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
@ -130,7 +127,6 @@ void vPortEnterCritical( void )
 | 
			
		||||
void vPortExitCritical( void )
 | 
			
		||||
{
 | 
			
		||||
    ulCriticalNesting--;
 | 
			
		||||
 | 
			
		||||
    if( ulCriticalNesting == 0 )
 | 
			
		||||
    {
 | 
			
		||||
        portENABLE_INTERRUPTS();
 | 
			
		||||
@ -140,12 +136,12 @@ void vPortExitCritical( void )
 | 
			
		||||
 | 
			
		||||
void vPortYieldHandler( void )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulSavedInterruptMask;
 | 
			
		||||
uint32_t ulSavedInterruptMask;
 | 
			
		||||
 | 
			
		||||
    ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR();
 | 
			
		||||
    /* Note this will clear all forced interrupts - this is done for speed. */
 | 
			
		||||
    MCF_INTC0_INTFRCL = 0;
 | 
			
		||||
    vTaskSwitchContext();
 | 
			
		||||
        /* Note this will clear all forced interrupts - this is done for speed. */
 | 
			
		||||
        MCF_INTC0_INTFRCL = 0;
 | 
			
		||||
        vTaskSwitchContext();
 | 
			
		||||
    portCLEAR_INTERRUPT_MASK_FROM_ISR( ulSavedInterruptMask );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -46,33 +46,33 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Type definitions. */
 | 
			
		||||
#define portCHAR          char
 | 
			
		||||
#define portFLOAT         float
 | 
			
		||||
#define portDOUBLE        double
 | 
			
		||||
#define portLONG          long
 | 
			
		||||
#define portSHORT         short
 | 
			
		||||
#define portSTACK_TYPE    uint32_t
 | 
			
		||||
#define portBASE_TYPE     long
 | 
			
		||||
#define portCHAR        char
 | 
			
		||||
#define portFLOAT       float
 | 
			
		||||
#define portDOUBLE      double
 | 
			
		||||
#define portLONG        long
 | 
			
		||||
#define portSHORT       short
 | 
			
		||||
#define portSTACK_TYPE  uint32_t
 | 
			
		||||
#define portBASE_TYPE   long
 | 
			
		||||
 | 
			
		||||
typedef portSTACK_TYPE   StackType_t;
 | 
			
		||||
typedef long             BaseType_t;
 | 
			
		||||
typedef unsigned long    UBaseType_t;
 | 
			
		||||
typedef portSTACK_TYPE StackType_t;
 | 
			
		||||
typedef long BaseType_t;
 | 
			
		||||
typedef unsigned long UBaseType_t;
 | 
			
		||||
 | 
			
		||||
#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
 | 
			
		||||
    typedef uint16_t     TickType_t;
 | 
			
		||||
    #define portMAX_DELAY    ( TickType_t ) 0xffff
 | 
			
		||||
#if( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
 | 
			
		||||
    typedef uint16_t TickType_t;
 | 
			
		||||
    #define portMAX_DELAY ( TickType_t ) 0xffff
 | 
			
		||||
#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )
 | 
			
		||||
    typedef uint32_t     TickType_t;
 | 
			
		||||
    #define portMAX_DELAY    ( TickType_t ) ( 0xFFFFFFFFUL )
 | 
			
		||||
    typedef uint32_t TickType_t;
 | 
			
		||||
    #define portMAX_DELAY ( TickType_t )    ( 0xFFFFFFFFUL )
 | 
			
		||||
#else
 | 
			
		||||
    #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
 | 
			
		||||
#endif
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Hardware specifics. */
 | 
			
		||||
#define portBYTE_ALIGNMENT    4
 | 
			
		||||
#define portSTACK_GROWTH      -1
 | 
			
		||||
#define portTICK_PERIOD_MS    ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 | 
			
		||||
#define portBYTE_ALIGNMENT          4
 | 
			
		||||
#define portSTACK_GROWTH            -1
 | 
			
		||||
#define portTICK_PERIOD_MS          ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
uint32_t ulPortSetIPL( uint32_t );
 | 
			
		||||
#define portDISABLE_INTERRUPTS()    ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
 | 
			
		||||
@ -81,28 +81,28 @@ uint32_t ulPortSetIPL( uint32_t );
 | 
			
		||||
 | 
			
		||||
extern void vPortEnterCritical( void );
 | 
			
		||||
extern void vPortExitCritical( void );
 | 
			
		||||
#define portENTER_CRITICAL()    vPortEnterCritical()
 | 
			
		||||
#define portEXIT_CRITICAL()     vPortExitCritical()
 | 
			
		||||
#define portENTER_CRITICAL()        vPortEnterCritical()
 | 
			
		||||
#define portEXIT_CRITICAL()         vPortExitCritical()
 | 
			
		||||
 | 
			
		||||
extern UBaseType_t uxPortSetInterruptMaskFromISR( void );
 | 
			
		||||
extern void vPortClearInterruptMaskFromISR( UBaseType_t );
 | 
			
		||||
#define portSET_INTERRUPT_MASK_FROM_ISR()                             ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
 | 
			
		||||
#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister )    ulPortSetIPL( uxSavedStatusRegister )
 | 
			
		||||
#define portSET_INTERRUPT_MASK_FROM_ISR()   ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
 | 
			
		||||
#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister ) ulPortSetIPL( uxSavedStatusRegister )
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Task utilities. */
 | 
			
		||||
 | 
			
		||||
#define portNOP()      asm volatile ( "nop" )
 | 
			
		||||
#define portNOP()   asm volatile (  "nop" )
 | 
			
		||||
 | 
			
		||||
/* Note this will overwrite all other bits in the force register, it is done this way for speed. */
 | 
			
		||||
#define portYIELD()    MCF_INTC0_INTFRCL = ( 1UL << configYIELD_INTERRUPT_VECTOR ); portNOP(); portNOP()      /* -32 as we are using the high word of the 64bit mask. */
 | 
			
		||||
#define portYIELD()         MCF_INTC0_INTFRCL = ( 1UL << configYIELD_INTERRUPT_VECTOR ); portNOP(); portNOP() /* -32 as we are using the high word of the 64bit mask. */
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Task function macros as described on the FreeRTOS.org WEB site. */
 | 
			
		||||
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters )    void vFunction( void * pvParameters ) __attribute__( ( noreturn ) )
 | 
			
		||||
#define portTASK_FUNCTION( vFunction, pvParameters )          void vFunction( void * pvParameters )
 | 
			
		||||
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) __attribute__((noreturn))
 | 
			
		||||
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#define portEND_SWITCHING_ISR( xSwitchRequired ) \
 | 
			
		||||
 | 
			
		||||
@ -32,8 +32,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------
 | 
			
		||||
* Implementation of functions defined in portable.h for the HCS12 port.
 | 
			
		||||
*----------------------------------------------------------*/
 | 
			
		||||
 * Implementation of functions defined in portable.h for the HCS12 port.
 | 
			
		||||
 *----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@ -43,29 +43,29 @@
 | 
			
		||||
static void prvSetupTimerInterrupt( void );
 | 
			
		||||
 | 
			
		||||
/* Interrupt service routines have to be in non-banked memory - as does the
 | 
			
		||||
 * scheduler startup function. */
 | 
			
		||||
scheduler startup function. */
 | 
			
		||||
#pragma CODE_SEG __NEAR_SEG NON_BANKED
 | 
			
		||||
 | 
			
		||||
/* Manual context switch function.  This is the SWI ISR. */
 | 
			
		||||
void interrupt vPortYield( void );
 | 
			
		||||
    /* Manual context switch function.  This is the SWI ISR. */
 | 
			
		||||
    void interrupt vPortYield( void );
 | 
			
		||||
 | 
			
		||||
/* Tick context switch function.  This is the timer ISR. */
 | 
			
		||||
void interrupt vPortTickInterrupt( void );
 | 
			
		||||
    /* Tick context switch function.  This is the timer ISR. */
 | 
			
		||||
    void interrupt vPortTickInterrupt( void );
 | 
			
		||||
 | 
			
		||||
/* Simply called by xPortStartScheduler().  xPortStartScheduler() does not
 | 
			
		||||
 * start the scheduler directly because the header file containing the
 | 
			
		||||
 * xPortStartScheduler() prototype is part of the common kernel code, and
 | 
			
		||||
 * therefore cannot use the CODE_SEG pragma. */
 | 
			
		||||
static BaseType_t xBankedStartScheduler( void );
 | 
			
		||||
    /* Simply called by xPortStartScheduler().  xPortStartScheduler() does not
 | 
			
		||||
    start the scheduler directly because the header file containing the
 | 
			
		||||
    xPortStartScheduler() prototype is part of the common kernel code, and
 | 
			
		||||
    therefore cannot use the CODE_SEG pragma. */
 | 
			
		||||
    static BaseType_t xBankedStartScheduler( void );
 | 
			
		||||
 | 
			
		||||
#pragma CODE_SEG DEFAULT
 | 
			
		||||
 | 
			
		||||
/* Calls to portENTER_CRITICAL() can be nested.  When they are nested the
 | 
			
		||||
 * critical section should not be left (i.e. interrupts should not be re-enabled)
 | 
			
		||||
 * until the nesting depth reaches 0.  This variable simply tracks the nesting
 | 
			
		||||
 * depth.  Each task maintains it's own critical nesting depth variable so
 | 
			
		||||
 * uxCriticalNesting is saved and restored from the task stack during a context
 | 
			
		||||
 * switch. */
 | 
			
		||||
critical section should not be left (i.e. interrupts should not be re-enabled)
 | 
			
		||||
until the nesting depth reaches 0.  This variable simply tracks the nesting
 | 
			
		||||
depth.  Each task maintains it's own critical nesting depth variable so
 | 
			
		||||
uxCriticalNesting is saved and restored from the task stack during a context
 | 
			
		||||
switch. */
 | 
			
		||||
volatile UBaseType_t uxCriticalNesting = 0xff;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
@ -73,33 +73,31 @@ volatile UBaseType_t uxCriticalNesting = 0xff;
 | 
			
		||||
/*
 | 
			
		||||
 * 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 )
 | 
			
		||||
{
 | 
			
		||||
    /*
 | 
			
		||||
     *  Place a few bytes of known values on the bottom of the stack.
 | 
			
		||||
     *  This can be uncommented to provide useful stack markers when debugging.
 | 
			
		||||
     *
 | 
			
		||||
     * pxTopOfStack = ( StackType_t ) 0x11;
 | 
			
		||||
     *  pxTopOfStack--;
 | 
			
		||||
     * pxTopOfStack = ( StackType_t ) 0x22;
 | 
			
		||||
     *  pxTopOfStack--;
 | 
			
		||||
     * pxTopOfStack = ( StackType_t ) 0x33;
 | 
			
		||||
     *  pxTopOfStack--;
 | 
			
		||||
     */
 | 
			
		||||
        Place a few bytes of known values on the bottom of the stack.
 | 
			
		||||
        This can be uncommented to provide useful stack markers when debugging.
 | 
			
		||||
 | 
			
		||||
        *pxTopOfStack = ( StackType_t ) 0x11;
 | 
			
		||||
        pxTopOfStack--;
 | 
			
		||||
        *pxTopOfStack = ( StackType_t ) 0x22;
 | 
			
		||||
        pxTopOfStack--;
 | 
			
		||||
        *pxTopOfStack = ( StackType_t ) 0x33;
 | 
			
		||||
        pxTopOfStack--;
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /* Setup the initial stack of the task.  The stack is set exactly as
 | 
			
		||||
     * expected by the portRESTORE_CONTEXT() macro.  In this case the stack as
 | 
			
		||||
     * expected by the HCS12 RTI instruction. */
 | 
			
		||||
    expected by the portRESTORE_CONTEXT() macro.  In this case the stack as
 | 
			
		||||
    expected by the HCS12 RTI instruction. */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /* The address of the task function is placed in the stack byte at a time. */
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) *( ( ( StackType_t * ) ( &pxCode ) ) + 1 );
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) *( ((StackType_t *) (&pxCode) ) + 1 );
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) *( ( ( StackType_t * ) ( &pxCode ) ) + 0 );
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) *( ((StackType_t *) (&pxCode) ) + 0 );
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* Next are all the registers that form part of the task context. */
 | 
			
		||||
@ -117,15 +115,15 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* A register contains parameter high byte. */
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) *( ( ( StackType_t * ) ( &pvParameters ) ) + 0 );
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) *( ((StackType_t *) (&pvParameters) ) + 0 );
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* B register contains parameter low byte. */
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) *( ( ( StackType_t * ) ( &pvParameters ) ) + 1 );
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) *( ((StackType_t *) (&pvParameters) ) + 1 );
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* CCR: Note that when the task starts interrupts will be enabled since
 | 
			
		||||
     * "I" bit of CCR is cleared */
 | 
			
		||||
    "I" bit of CCR is cleared */
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0x00;
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
@ -136,7 +134,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    /* Finally the critical nesting depth is initialised with 0 (not within
 | 
			
		||||
     * a critical section). */
 | 
			
		||||
    a critical section). */
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0x00;
 | 
			
		||||
 | 
			
		||||
    return pxTopOfStack;
 | 
			
		||||
@ -159,10 +157,10 @@ static void prvSetupTimerInterrupt( void )
 | 
			
		||||
BaseType_t xPortStartScheduler( void )
 | 
			
		||||
{
 | 
			
		||||
    /* xPortStartScheduler() does not start the scheduler directly because
 | 
			
		||||
     * the header file containing the xPortStartScheduler() prototype is part
 | 
			
		||||
     * of the common kernel code, and therefore cannot use the CODE_SEG pragma.
 | 
			
		||||
     * Instead it simply calls the locally defined xBankedStartScheduler() -
 | 
			
		||||
     * which does use the CODE_SEG pragma. */
 | 
			
		||||
    the header file containing the xPortStartScheduler() prototype is part
 | 
			
		||||
    of the common kernel code, and therefore cannot use the CODE_SEG pragma.
 | 
			
		||||
    Instead it simply calls the locally defined xBankedStartScheduler() -
 | 
			
		||||
    which does use the CODE_SEG pragma. */
 | 
			
		||||
 | 
			
		||||
    return xBankedStartScheduler();
 | 
			
		||||
}
 | 
			
		||||
@ -173,7 +171,7 @@ BaseType_t xPortStartScheduler( void )
 | 
			
		||||
static BaseType_t xBankedStartScheduler( void )
 | 
			
		||||
{
 | 
			
		||||
    /* Configure the timer that will generate the RTOS tick.  Interrupts are
 | 
			
		||||
     * disabled when this function is called. */
 | 
			
		||||
    disabled when this function is called. */
 | 
			
		||||
    prvSetupTimerInterrupt();
 | 
			
		||||
 | 
			
		||||
    /* Restore the context of the first task. */
 | 
			
		||||
@ -224,15 +222,15 @@ void interrupt vPortTickInterrupt( void )
 | 
			
		||||
        TFLG1 = 1;
 | 
			
		||||
 | 
			
		||||
        /* Restore the context of a task - which may be a different task
 | 
			
		||||
         * to that interrupted. */
 | 
			
		||||
        to that interrupted. */
 | 
			
		||||
        portRESTORE_CONTEXT();
 | 
			
		||||
    }
 | 
			
		||||
    #else /* if configUSE_PREEMPTION == 1 */
 | 
			
		||||
    #else
 | 
			
		||||
    {
 | 
			
		||||
        xTaskIncrementTick();
 | 
			
		||||
        TFLG1 = 1;
 | 
			
		||||
    }
 | 
			
		||||
    #endif /* if configUSE_PREEMPTION == 1 */
 | 
			
		||||
    #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#pragma CODE_SEG DEFAULT
 | 
			
		||||
 | 
			
		||||
@ -41,40 +41,40 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Type definitions. */
 | 
			
		||||
#define portCHAR          char
 | 
			
		||||
#define portFLOAT         float
 | 
			
		||||
#define portDOUBLE        double
 | 
			
		||||
#define portLONG          long
 | 
			
		||||
#define portSHORT         short
 | 
			
		||||
#define portSTACK_TYPE    uint8_t
 | 
			
		||||
#define portBASE_TYPE     char
 | 
			
		||||
#define portCHAR        char
 | 
			
		||||
#define portFLOAT       float
 | 
			
		||||
#define portDOUBLE      double
 | 
			
		||||
#define portLONG        long
 | 
			
		||||
#define portSHORT       short
 | 
			
		||||
#define portSTACK_TYPE  uint8_t
 | 
			
		||||
#define portBASE_TYPE   char
 | 
			
		||||
 | 
			
		||||
typedef portSTACK_TYPE   StackType_t;
 | 
			
		||||
typedef signed char      BaseType_t;
 | 
			
		||||
typedef unsigned char    UBaseType_t;
 | 
			
		||||
typedef portSTACK_TYPE StackType_t;
 | 
			
		||||
typedef signed char BaseType_t;
 | 
			
		||||
typedef unsigned char UBaseType_t;
 | 
			
		||||
 | 
			
		||||
#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
 | 
			
		||||
    typedef uint16_t     TickType_t;
 | 
			
		||||
    #define portMAX_DELAY    ( TickType_t ) 0xffff
 | 
			
		||||
#if( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
 | 
			
		||||
    typedef uint16_t TickType_t;
 | 
			
		||||
    #define portMAX_DELAY ( TickType_t ) 0xffff
 | 
			
		||||
#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )
 | 
			
		||||
    typedef uint32_t     TickType_t;
 | 
			
		||||
    #define portMAX_DELAY    ( TickType_t ) ( 0xFFFFFFFFUL )
 | 
			
		||||
    typedef uint32_t TickType_t;
 | 
			
		||||
    #define portMAX_DELAY ( TickType_t )    ( 0xFFFFFFFFUL )
 | 
			
		||||
#else
 | 
			
		||||
    #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
 | 
			
		||||
#endif
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Hardware specifics. */
 | 
			
		||||
#define portBYTE_ALIGNMENT    1
 | 
			
		||||
#define portSTACK_GROWTH      ( -1 )
 | 
			
		||||
#define portTICK_PERIOD_MS    ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 | 
			
		||||
#define portYIELD()    __asm( "swi" );
 | 
			
		||||
#define portNOP()      __asm( "nop" );
 | 
			
		||||
#define portBYTE_ALIGNMENT          1
 | 
			
		||||
#define portSTACK_GROWTH            ( -1 )
 | 
			
		||||
#define portTICK_PERIOD_MS          ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 | 
			
		||||
#define portYIELD()                 __asm( "swi" );
 | 
			
		||||
#define portNOP()                   __asm( "nop" );
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Critical section handling. */
 | 
			
		||||
#define portENABLE_INTERRUPTS()     __asm( "cli" )
 | 
			
		||||
#define portDISABLE_INTERRUPTS()    __asm( "sei" )
 | 
			
		||||
#define portENABLE_INTERRUPTS()             __asm( "cli" )
 | 
			
		||||
#define portDISABLE_INTERRUPTS()            __asm( "sei" )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Disable interrupts before incrementing the count of critical section nesting.
 | 
			
		||||
@ -82,29 +82,29 @@ typedef unsigned char    UBaseType_t;
 | 
			
		||||
 * re-enabled.  Once interrupts are disabled the nesting count can be accessed
 | 
			
		||||
 * directly.  Each task maintains its own nesting count.
 | 
			
		||||
 */
 | 
			
		||||
#define portENTER_CRITICAL()                           \
 | 
			
		||||
    {                                                  \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting; \
 | 
			
		||||
                                                       \
 | 
			
		||||
        portDISABLE_INTERRUPTS();                      \
 | 
			
		||||
        uxCriticalNesting++;                           \
 | 
			
		||||
    }
 | 
			
		||||
#define portENTER_CRITICAL()                                    \
 | 
			
		||||
{                                                               \
 | 
			
		||||
    extern volatile UBaseType_t uxCriticalNesting;  \
 | 
			
		||||
                                                                \
 | 
			
		||||
    portDISABLE_INTERRUPTS();                                   \
 | 
			
		||||
    uxCriticalNesting++;                                        \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Interrupts are disabled so we can access the nesting count directly.  If the
 | 
			
		||||
 * nesting is found to be 0 (no nesting) then we are leaving the critical
 | 
			
		||||
 * section and interrupts can be re-enabled.
 | 
			
		||||
 */
 | 
			
		||||
#define  portEXIT_CRITICAL()                           \
 | 
			
		||||
    {                                                  \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting; \
 | 
			
		||||
                                                       \
 | 
			
		||||
        uxCriticalNesting--;                           \
 | 
			
		||||
        if( uxCriticalNesting == 0 )                   \
 | 
			
		||||
        {                                              \
 | 
			
		||||
            portENABLE_INTERRUPTS();                   \
 | 
			
		||||
        }                                              \
 | 
			
		||||
    }
 | 
			
		||||
#define  portEXIT_CRITICAL()                                    \
 | 
			
		||||
{                                                               \
 | 
			
		||||
    extern volatile UBaseType_t uxCriticalNesting;  \
 | 
			
		||||
                                                                \
 | 
			
		||||
    uxCriticalNesting--;                                        \
 | 
			
		||||
    if( uxCriticalNesting == 0 )                                \
 | 
			
		||||
    {                                                           \
 | 
			
		||||
        portENABLE_INTERRUPTS();                                \
 | 
			
		||||
    }                                                           \
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Task utilities. */
 | 
			
		||||
@ -120,71 +120,70 @@ typedef unsigned char    UBaseType_t;
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef BANKED_MODEL
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Load the stack pointer for the task, then pull the critical nesting
 | 
			
		||||
 * count and PPAGE register from the stack.  The remains of the
 | 
			
		||||
 * context are restored by the RTI instruction.
 | 
			
		||||
 */
 | 
			
		||||
    #define portRESTORE_CONTEXT()                      \
 | 
			
		||||
    {                                                  \
 | 
			
		||||
        extern volatile void * pxCurrentTCB;           \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting; \
 | 
			
		||||
                                                       \
 | 
			
		||||
        __asm( "ldx pxCurrentTCB" );                   \
 | 
			
		||||
        __asm( "lds 0, x" );                           \
 | 
			
		||||
        __asm( "pula" );                               \
 | 
			
		||||
        __asm( "staa uxCriticalNesting" );             \
 | 
			
		||||
        __asm( "pula" );                               \
 | 
			
		||||
        __asm( "staa 0x30" ); /* 0x30 = PPAGE */       \
 | 
			
		||||
    /*
 | 
			
		||||
     * Load the stack pointer for the task, then pull the critical nesting
 | 
			
		||||
     * count and PPAGE register from the stack.  The remains of the
 | 
			
		||||
     * context are restored by the RTI instruction.
 | 
			
		||||
     */
 | 
			
		||||
    #define portRESTORE_CONTEXT()                                   \
 | 
			
		||||
    {                                                               \
 | 
			
		||||
        extern volatile void * pxCurrentTCB;                        \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting;  \
 | 
			
		||||
                                                                    \
 | 
			
		||||
        __asm( "ldx pxCurrentTCB" );                                \
 | 
			
		||||
        __asm( "lds 0, x" );                                        \
 | 
			
		||||
        __asm( "pula" );                                            \
 | 
			
		||||
        __asm( "staa uxCriticalNesting" );                          \
 | 
			
		||||
        __asm( "pula" );                                            \
 | 
			
		||||
        __asm( "staa 0x30" ); /* 0x30 = PPAGE */                    \
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * By the time this macro is called the processor has already stacked the
 | 
			
		||||
 * registers.  Simply stack the nesting count and PPAGE value, then save
 | 
			
		||||
 * the task stack pointer.
 | 
			
		||||
 */
 | 
			
		||||
    #define portSAVE_CONTEXT()                         \
 | 
			
		||||
    {                                                  \
 | 
			
		||||
        extern volatile void * pxCurrentTCB;           \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting; \
 | 
			
		||||
                                                       \
 | 
			
		||||
        __asm( "ldaa 0x30" ); /* 0x30 = PPAGE */       \
 | 
			
		||||
        __asm( "psha" );                               \
 | 
			
		||||
        __asm( "ldaa uxCriticalNesting" );             \
 | 
			
		||||
        __asm( "psha" );                               \
 | 
			
		||||
        __asm( "ldx pxCurrentTCB" );                   \
 | 
			
		||||
        __asm( "sts 0, x" );                           \
 | 
			
		||||
    /*
 | 
			
		||||
     * By the time this macro is called the processor has already stacked the
 | 
			
		||||
     * registers.  Simply stack the nesting count and PPAGE value, then save
 | 
			
		||||
     * the task stack pointer.
 | 
			
		||||
     */
 | 
			
		||||
    #define portSAVE_CONTEXT()                                      \
 | 
			
		||||
    {                                                               \
 | 
			
		||||
        extern volatile void * pxCurrentTCB;                        \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting;  \
 | 
			
		||||
                                                                    \
 | 
			
		||||
        __asm( "ldaa 0x30" );  /* 0x30 = PPAGE */                   \
 | 
			
		||||
        __asm( "psha" );                                            \
 | 
			
		||||
        __asm( "ldaa uxCriticalNesting" );                          \
 | 
			
		||||
        __asm( "psha" );                                            \
 | 
			
		||||
        __asm( "ldx pxCurrentTCB" );                                \
 | 
			
		||||
        __asm( "sts 0, x" );                                        \
 | 
			
		||||
    }
 | 
			
		||||
#else /* ifdef BANKED_MODEL */
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These macros are as per the BANKED versions above, but without saving
 | 
			
		||||
 * and restoring the PPAGE register.
 | 
			
		||||
 */
 | 
			
		||||
    /*
 | 
			
		||||
     * These macros are as per the BANKED versions above, but without saving
 | 
			
		||||
     * and restoring the PPAGE register.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    #define portRESTORE_CONTEXT()                      \
 | 
			
		||||
    {                                                  \
 | 
			
		||||
        extern volatile void * pxCurrentTCB;           \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting; \
 | 
			
		||||
                                                       \
 | 
			
		||||
        __asm( "ldx pxCurrentTCB" );                   \
 | 
			
		||||
        __asm( "lds 0, x" );                           \
 | 
			
		||||
        __asm( "pula" );                               \
 | 
			
		||||
        __asm( "staa uxCriticalNesting" );             \
 | 
			
		||||
    #define portRESTORE_CONTEXT()                                   \
 | 
			
		||||
    {                                                               \
 | 
			
		||||
        extern volatile void * pxCurrentTCB;                        \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting;  \
 | 
			
		||||
                                                                    \
 | 
			
		||||
        __asm( "ldx pxCurrentTCB" );                                \
 | 
			
		||||
        __asm( "lds 0, x" );                                        \
 | 
			
		||||
        __asm( "pula" );                                            \
 | 
			
		||||
        __asm( "staa uxCriticalNesting" );                          \
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #define portSAVE_CONTEXT()                         \
 | 
			
		||||
    {                                                  \
 | 
			
		||||
        extern volatile void * pxCurrentTCB;           \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting; \
 | 
			
		||||
                                                       \
 | 
			
		||||
        __asm( "ldaa uxCriticalNesting" );             \
 | 
			
		||||
        __asm( "psha" );                               \
 | 
			
		||||
        __asm( "ldx pxCurrentTCB" );                   \
 | 
			
		||||
        __asm( "sts 0, x" );                           \
 | 
			
		||||
    #define portSAVE_CONTEXT()                                      \
 | 
			
		||||
    {                                                               \
 | 
			
		||||
        extern volatile void * pxCurrentTCB;                        \
 | 
			
		||||
        extern volatile UBaseType_t uxCriticalNesting;  \
 | 
			
		||||
                                                                    \
 | 
			
		||||
        __asm( "ldaa uxCriticalNesting" );                          \
 | 
			
		||||
        __asm( "psha" );                                            \
 | 
			
		||||
        __asm( "ldx pxCurrentTCB" );                                \
 | 
			
		||||
        __asm( "sts 0, x" );                                        \
 | 
			
		||||
    }
 | 
			
		||||
#endif /* ifdef BANKED_MODEL */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Utility macro to call macros above in correct order in order to perform a
 | 
			
		||||
@ -192,14 +191,14 @@ typedef unsigned char    UBaseType_t;
 | 
			
		||||
 * the ISR does not use any local (stack) variables.  If the ISR uses stack
 | 
			
		||||
 * variables portYIELD() should be used in it's place.
 | 
			
		||||
 */
 | 
			
		||||
#define portTASK_SWITCH_FROM_ISR() \
 | 
			
		||||
    portSAVE_CONTEXT();            \
 | 
			
		||||
    vTaskSwitchContext();          \
 | 
			
		||||
#define portTASK_SWITCH_FROM_ISR()                              \
 | 
			
		||||
    portSAVE_CONTEXT();                                         \
 | 
			
		||||
    vTaskSwitchContext();                                       \
 | 
			
		||||
    portRESTORE_CONTEXT();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Task function macros as described on the FreeRTOS.org WEB site. */
 | 
			
		||||
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters )    void vFunction( void * pvParameters )
 | 
			
		||||
#define portTASK_FUNCTION( vFunction, pvParameters )          void vFunction( void * pvParameters )
 | 
			
		||||
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
 | 
			
		||||
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
 | 
			
		||||
 | 
			
		||||
#endif /* PORTMACRO_H */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user