Update to V4.0.4. Add in STR912 port and demo.

This commit is contained in:
Richard Barry 2006-06-22 17:18:31 +00:00
parent 05023971cb
commit 3dcbed5763
445 changed files with 30007 additions and 331 deletions

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.
@ -101,6 +101,10 @@
#include "..\..\Source\portable\IAR\STR71x\portmacro.h"
#endif
#ifdef STR91X_IAR
#include "..\..\Source\portable\IAR\STR91x\portmacro.h"
#endif
#ifdef GCC_H8S
#include "../../Source/portable/GCC/H8S2329/portmacro.h"
#endif

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.
@ -40,7 +40,7 @@
* MACROS AND DEFINITIONS
*----------------------------------------------------------*/
#define tskKERNEL_VERSION_NUMBER "V4.0.3"
#define tskKERNEL_VERSION_NUMBER "V4.0.4"
/**
* task. h

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003 - 2005 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003 - 2005 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003 - 2005 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003 - 2005 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,4 +1,4 @@
; FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
; FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
;
; This file is part of the FreeRTOS.org distribution.
;

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -0,0 +1,110 @@
/*
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
FreeRTOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FreeRTOS; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
A special exception to the GPL can be applied should you wish to distribute
a combined work that includes FreeRTOS, without being obliged to provide
the source code for any proprietary components. See the licensing section
of http://www.FreeRTOS.org for full details of how and when the exception
can be applied.
***************************************************************************
See http://www.FreeRTOS.org for documentation, latest information, license
and contact details. Please ensure to read the configuration and relevant
port sections of the online documentation.
***************************************************************************
*/
EXTERN pxCurrentTCB
EXTERN ulCriticalNesting
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Context save and restore macro definitions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
portSAVE_CONTEXT MACRO
; Push R0 as we are going to use the register.
STMDB SP!, {R0}
; Set R0 to point to the task stack pointer.
STMDB SP, {SP}^
NOP
SUB SP, SP, #4
LDMIA SP!, {R0}
; Push the return address onto the stack.
STMDB R0!, {LR}
; Now we have saved LR we can use it instead of R0.
MOV LR, R0
; Pop R0 so we can save it onto the system mode stack.
LDMIA SP!, {R0}
; Push all the system mode registers onto the task stack.
STMDB LR, {R0-LR}^
NOP
SUB LR, LR, #60
; Push the SPSR onto the task stack.
MRS R0, SPSR
STMDB LR!, {R0}
LDR R0, =ulCriticalNesting
LDR R0, [R0]
STMDB LR!, {R0}
; Store the new top of stack for the task.
LDR R1, =pxCurrentTCB
LDR R0, [R1]
STR LR, [R0]
ENDM
portRESTORE_CONTEXT MACRO
; Set the LR to the task stack.
LDR R1, =pxCurrentTCB
LDR R0, [R1]
LDR LR, [R0]
; The critical nesting depth is the first item on the stack.
; Load it into the ulCriticalNesting variable.
LDR R0, =ulCriticalNesting
LDMFD LR!, {R1}
STR R1, [R0]
; Get the SPSR from the stack.
LDMFD LR!, {R0}
MSR SPSR_cxsf, R0
; Restore all system mode registers for the task.
LDMFD LR, {R0-R14}^
NOP
; Restore the return address.
LDR LR, [LR, #+60]
; And return - correcting the offset in the LR to obtain the
; correct address.
SUBS PC, LR, #4
ENDM

View file

@ -0,0 +1,297 @@
/*
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
FreeRTOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FreeRTOS; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
A special exception to the GPL can be applied should you wish to distribute
a combined work that includes FreeRTOS, without being obliged to provide
the source code for any proprietary components. See the licensing section
of http://www.FreeRTOS.org for full details of how and when the exception
can be applied.
***************************************************************************
See http://www.FreeRTOS.org for documentation, latest information, license
and contact details. Please ensure to read the configuration and relevant
port sections of the online documentation.
***************************************************************************
*/
/*-----------------------------------------------------------
* Implementation of functions defined in portable.h for the ST STR91x ARM7
* port.
*----------------------------------------------------------*/
/* Library includes. */
#include "91x_lib.h"
/* Standard includes. */
#include <stdlib.h>
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
/* Constants required to setup the initial stack. */
#ifndef _RUN_TASK_IN_ARM_MODE_
#define portINITIAL_SPSR ( ( portSTACK_TYPE ) 0x3f ) /* System mode, THUMB mode, interrupts enabled. */
#else
#define portINITIAL_SPSR ( ( portSTACK_TYPE ) 0x1f ) /* System mode, ARM mode, interrupts enabled. */
#endif
#define portINSTRUCTION_SIZE ( ( portSTACK_TYPE ) 4 )
/* Constants required to handle critical sections. */
#define portNO_CRITICAL_NESTING ( ( unsigned portLONG ) 0 )
/*-----------------------------------------------------------*/
/* Setup the watchdog to generate the tick interrupts. */
static void prvSetupTimerInterrupt( void );
/* ulCriticalNesting will get set to zero when the first task starts. It
cannot be initialised to 0 as this will cause interrupts to be enabled
during the kernel initialisation process. */
unsigned portLONG ulCriticalNesting = ( unsigned portLONG ) 9999;
/* Tick interrupt routines for cooperative and preemptive operation
respectively. The preemptive version is not defined as __irq as it is called
from an asm wrapper function. */
__arm __irq void vPortNonPreemptiveTick( void );
void WDG_IRQHandler( void );
/* VIC interrupt default handler. */
static void prvDefaultHandler( void );
/*-----------------------------------------------------------*/
/*
* Initialise the stack of a task to look exactly as if a call to
* portSAVE_CONTEXT had been called.
*
* See header file for description.
*/
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
{
portSTACK_TYPE *pxOriginalTOS;
pxOriginalTOS = pxTopOfStack;
/* Setup the initial stack of the task. The stack is set exactly as
expected by the portRESTORE_CONTEXT() macro. */
/* First on the stack is the return address - which in this case is the
start of the task. The offset is added to make the return address appear
as it would within an IRQ ISR. */
*pxTopOfStack = ( portSTACK_TYPE ) pxCode + portINSTRUCTION_SIZE;
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0xaaaaaaaa; /* R14 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) pxOriginalTOS; /* Stack used when task starts goes in R13. */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x12121212; /* R12 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x11111111; /* R11 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x10101010; /* R10 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x09090909; /* R9 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x08080808; /* R8 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x07070707; /* R7 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x06060606; /* R6 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x05050505; /* R5 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x04040404; /* R4 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x03030303; /* R3 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x02020202; /* R2 */
pxTopOfStack--;
*pxTopOfStack = ( portSTACK_TYPE ) 0x01010101; /* R1 */
pxTopOfStack--;
/* When the task starts is will expect to find the function parameter in
R0. */
*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R0 */
pxTopOfStack--;
/* The status register is set for system mode, with interrupts enabled. */
*pxTopOfStack = ( portSTACK_TYPE ) portINITIAL_SPSR;
pxTopOfStack--;
/* Interrupt flags cannot always be stored on the stack and will
instead be stored in a variable, which is then saved as part of the
tasks context. */
*pxTopOfStack = portNO_CRITICAL_NESTING;
return pxTopOfStack;
}
/*-----------------------------------------------------------*/
portBASE_TYPE xPortStartScheduler( void )
{
extern void vPortStartFirstTask( void );
/* Start the timer that generates the tick ISR. Interrupts are disabled
here already. */
prvSetupTimerInterrupt();
/* Start the first task. */
vPortStartFirstTask();
/* Should not get here! */
return 0;
}
/*-----------------------------------------------------------*/
void vPortEndScheduler( void )
{
/* It is unlikely that the ARM port will require this function as there
is nothing to return to. */
}
/*-----------------------------------------------------------*/
/* This function is called from an asm wrapper, so does not require the __irq
keyword. */
void WDG_IRQHandler( void )
{
/* Increment the tick counter. */
vTaskIncrementTick();
#if configUSE_PREEMPTION == 1
/* The new tick value might unblock a task. Ensure the highest task that
is ready to execute is the task that will execute when the tick ISR
exits. */
vTaskSwitchContext();
#endif
/* Clear the interrupt in the watchdog. */
WDG->SR &= ~0x0001;
}
/*-----------------------------------------------------------*/
#ifndef abs
#define abs(x) ((x)>0 ? (x) : -(x))
#endif
static void prvFindFactors(u32 n, u16 *a, u32 *b)
{
/* This function is copied from the ST STR7 library and is
copyright STMicroelectronics. Reproduced with permission. */
u32 b0;
u16 a0;
long err, err_min=n;
*a = a0 = ((n-1)/65536ul) + 1;
*b = b0 = n / *a;
for (; *a <= 256; (*a)++)
{
*b = n / *a;
err = (long)*a * (long)*b - (long)n;
if (abs(err) > (*a / 2))
{
(*b)++;
err = (long)*a * (long)*b - (long)n;
}
if (abs(err) < abs(err_min))
{
err_min = err;
a0 = *a;
b0 = *b;
if (err == 0) break;
}
}
*a = a0;
*b = b0;
}
/*-----------------------------------------------------------*/
static void prvSetupTimerInterrupt( void )
{
WDG_InitTypeDef xWdg;
unsigned portSHORT a;
unsigned portLONG n = configCPU_PERIPH_HZ / configTICK_RATE_HZ, b;
/* Configure the watchdog as a free running timer that generates a
periodic interrupt. */
SCU_APBPeriphClockConfig( __WDG, ENABLE );
WDG_DeInit();
WDG_StructInit(&xWdg);
prvFindFactors( n, &a, &b );
xWdg.WDG_Prescaler = a - 1;
xWdg.WDG_Preload = b - 1;
WDG_Init( &xWdg );
WDG_ITConfig(ENABLE);
/* Configure the VIC for the WDG interrupt. */
VIC_Config( WDG_ITLine, VIC_IRQ, 10 );
VIC_ITCmd( WDG_ITLine, ENABLE );
/* Install the default handlers for both VIC's. */
VIC0->DVAR = ( unsigned portLONG ) prvDefaultHandler;
VIC1->DVAR = ( unsigned portLONG ) prvDefaultHandler;
WDG_Cmd(ENABLE);
}
/*-----------------------------------------------------------*/
__arm __interwork void vPortEnterCritical( void )
{
/* Disable interrupts first! */
portDISABLE_INTERRUPTS();
/* Now interrupts are disabled ulCriticalNesting can be accessed
directly. Increment ulCriticalNesting to keep a count of how many times
portENTER_CRITICAL() has been called. */
ulCriticalNesting++;
}
/*-----------------------------------------------------------*/
__arm __interwork void vPortExitCritical( void )
{
if( ulCriticalNesting > portNO_CRITICAL_NESTING )
{
/* Decrement the nesting count as we are leaving a critical section. */
ulCriticalNesting--;
/* If the nesting level has reached zero then interrupts should be
re-enabled. */
if( ulCriticalNesting == portNO_CRITICAL_NESTING )
{
portENABLE_INTERRUPTS();
}
}
}
/*-----------------------------------------------------------*/
static void prvDefaultHandler( void )
{
}

View file

@ -0,0 +1,65 @@
/*
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
FreeRTOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FreeRTOS; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
A special exception to the GPL can be applied should you wish to distribute
a combined work that includes FreeRTOS, without being obliged to provide
the source code for any proprietary components. See the licensing section
of http://www.FreeRTOS.org for full details of how and when the exception
can be applied.
***************************************************************************
See http://www.FreeRTOS.org for documentation, latest information, license
and contact details. Please ensure to read the configuration and relevant
port sections of the online documentation.
***************************************************************************
*/
RSEG ICODE:CODE
CODE32
EXTERN vTaskSwitchContext
PUBLIC vPortYieldProcessor
PUBLIC vPortStartFirstTask
#include "ISR_Support.h"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Starting the first task is just a matter of restoring the context that
; was created by pxPortInitialiseStack().
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vPortStartFirstTask:
portRESTORE_CONTEXT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Manual context switch function. This is the SWI hander.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vPortYieldProcessor:
ADD LR, LR, #4 ; Add 4 to the LR to make the LR appear exactly
; as if the context was saved during and IRQ
; handler.
portSAVE_CONTEXT ; Save the context of the current task...
LDR R0, =vTaskSwitchContext ; before selecting the next task to execute.
MOV lr, pc
BX R0
portRESTORE_CONTEXT ; Restore the context of the selected task.
END

View file

@ -0,0 +1,108 @@
/*
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
FreeRTOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FreeRTOS; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
A special exception to the GPL can be applied should you wish to distribute
a combined work that includes FreeRTOS, without being obliged to provide
the source code for any proprietary components. See the licensing section
of http://www.FreeRTOS.org for full details of how and when the exception
can be applied.
***************************************************************************
See http://www.FreeRTOS.org for documentation, latest information, license
and contact details. Please ensure to read the configuration and relevant
port sections of the online documentation.
***************************************************************************
*/
#ifndef PORTMACRO_H
#define PORTMACRO_H
/*-----------------------------------------------------------
* Port specific definitions.
*
* The settings in this file configure FreeRTOS correctly for the
* given hardware and compiler.
*
* These settings should not be altered.
*-----------------------------------------------------------
*/
#include <intrinsic.h>
/* Type definitions. */
#define portCHAR char
#define portFLOAT float
#define portDOUBLE double
#define portLONG long
#define portSHORT short
#define portSTACK_TYPE unsigned portLONG
#define portBASE_TYPE portLONG
#if( configUSE_16_BIT_TICKS == 1 )
typedef unsigned portSHORT portTickType;
#define portMAX_DELAY ( portTickType ) 0xffff
#else
typedef unsigned portLONG portTickType;
#define portMAX_DELAY ( portTickType ) 0xffffffff
#endif
/*-----------------------------------------------------------*/
/* Hardware specifics. */
#define portSTACK_GROWTH ( -1 )
#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
#define portBYTE_ALIGNMENT 4
#define portYIELD() asm ( "SWI 0" )
#define portNOP() asm ( "NOP" )
/*-----------------------------------------------------------*/
/* Critical section handling. */
__arm __interwork void vPortEnterCritical( void );
__arm __interwork void vPortExitCritical( void );
#define portENTER_CRITICAL() vPortEnterCritical()
#define portEXIT_CRITICAL() vPortExitCritical()
#define portDISABLE_INTERRUPTS() __disable_interrupt()
#define portENABLE_INTERRUPTS() __enable_interrupt()
/*-----------------------------------------------------------*/
/* Task utilities. */
#define portEND_SWITCHING_ISR( xSwitchRequired ) \
{ \
extern void vTaskSwitchContext( void ); \
\
if( xSwitchRequired ) \
{ \
vTaskSwitchContext(); \
} \
}
/*-----------------------------------------------------------*/
/* Compiler specifics */
#define inline
/* 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 )
#endif /* PORTMACRO_H */

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.

View file

@ -1,5 +1,5 @@
/*
FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.
FreeRTOS.org V4.0.4 - Copyright (C) 2003-2006 Richard Barry.
This file is part of the FreeRTOS.org distribution.
@ -159,6 +159,11 @@ Changes from V4.0.1
+ The tick hook function is now called only within a tick isr. Previously
it was also called when the tick function was called during the scheduler
unlocking process.
Changes from V4.0.4
+ Extra checks have been placed in vTaskPrioritySet() to avoid unnecessary
yields.
*/
#include <stdio.h>
@ -788,7 +793,7 @@ static unsigned portBASE_TYPE uxTaskNumber = 0; /*lint !e956 Static is deliberat
void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority )
{
tskTCB *pxTCB;
unsigned portBASE_TYPE uxCurrentPriority;
unsigned portBASE_TYPE uxCurrentPriority, xYieldRequired = pdFALSE;
/* Ensure the new priority is valid. */
if( uxNewPriority >= configMAX_PRIORITIES )
@ -805,6 +810,26 @@ static unsigned portBASE_TYPE uxTaskNumber = 0; /*lint !e956 Static is deliberat
if( uxCurrentPriority != uxNewPriority )
{
/* The priority change may have readied a task of higher
priority than the calling task. */
if( uxNewPriority > pxCurrentTCB->uxPriority )
{
if( pxTask != NULL )
{
/* The priority of another task is being raised. If we
were raising the priority of the currently running task
there would be no need to switch as it must have already
been the highest priority task. */
xYieldRequired = pdTRUE;
}
}
else if( pxTask == NULL )
{
/* Setting our own priority down means there may now be another
task of higher priority that is ready to execute. */
xYieldRequired = pdTRUE;
}
pxTCB->uxPriority = uxNewPriority;
/* If the task is in the blocked or suspended list we need do
@ -827,13 +852,14 @@ static unsigned portBASE_TYPE uxTaskNumber = 0; /*lint !e956 Static is deliberat
vListInsertEnd( ( xList * ) &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
}
}
if( xYieldRequired == pdTRUE )
{
taskYIELD();
}
}
}
taskEXIT_CRITICAL();
/* The priority change may have readied a task of higher
priority than the calling task. */
taskYIELD();
}
#endif