mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-11-07 04:02:35 -05:00
Before changing headers to V6 and changing portLONG, portSHORt and portCHAR to their standard C types.
This commit is contained in:
parent
3dfbb349ca
commit
5c64e1fad9
4417 changed files with 1261274 additions and 0 deletions
130
20091005/Source/portable/oWatcom/16BitDOS/common/portasm.h
Normal file
130
20091005/Source/portable/oWatcom/16BitDOS/common/portasm.h
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
FreeRTOS V5.4.2 - Copyright (C) 2009 Real Time Engineers Ltd.
|
||||
|
||||
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 (version 2) as published by the
|
||||
Free Software Foundation and modified by the FreeRTOS exception.
|
||||
**NOTE** The exception to the GPL is included to allow you to distribute a
|
||||
combined work that includes FreeRTOS without being obliged to provide the
|
||||
source code for proprietary components outside of the FreeRTOS kernel.
|
||||
Alternative commercial license and support terms are also available upon
|
||||
request. See the licensing section of http://www.FreeRTOS.org for full
|
||||
license details.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Looking for a quick start? Then check out the FreeRTOS eBook! *
|
||||
* See http://www.FreeRTOS.org/Documentation for details *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
typedef void tskTCB;
|
||||
extern volatile tskTCB * volatile pxCurrentTCB;
|
||||
extern void vTaskSwitchContext( void );
|
||||
|
||||
/*
|
||||
* Saves the stack pointer for one task into its TCB, calls
|
||||
* vTaskSwitchContext() to update the TCB being used, then restores the stack
|
||||
* from the new TCB read to run the task.
|
||||
*/
|
||||
void portSWITCH_CONTEXT( void );
|
||||
|
||||
/*
|
||||
* Load the stack pointer from the TCB of the task which is going to be first
|
||||
* to execute. Then force an IRET so the registers and IP are popped off the
|
||||
* stack.
|
||||
*/
|
||||
void portFIRST_CONTEXT( void );
|
||||
|
||||
/* There are slightly different versions depending on whether you are building
|
||||
to include debugger information. If debugger information is used then there
|
||||
are a couple of extra bytes left of the ISR stack (presumably for use by the
|
||||
debugger). The true stack pointer is then stored in the bp register. We add
|
||||
2 to the stack pointer to remove the extra bytes before we restore our context. */
|
||||
|
||||
#ifdef DEBUG_BUILD
|
||||
|
||||
#pragma aux portSWITCH_CONTEXT = "mov ax, seg pxCurrentTCB" \
|
||||
"mov ds, ax" \
|
||||
"les bx, pxCurrentTCB" /* Save the stack pointer into the TCB. */ \
|
||||
"mov es:0x2[ bx ], ss" \
|
||||
"mov es:[ bx ], sp" \
|
||||
"call vTaskSwitchContext" /* Perform the switch. */ \
|
||||
"mov ax, seg pxCurrentTCB" /* Restore the stack pointer from the TCB. */ \
|
||||
"mov ds, ax" \
|
||||
"les bx, dword ptr pxCurrentTCB" \
|
||||
"mov ss, es:[ bx + 2 ]" \
|
||||
"mov sp, es:[ bx ]" \
|
||||
"mov bp, sp" /* Prepair the bp register for the restoration of the SP in the compiler generated portion of the ISR */ \
|
||||
"add bp, 0x0002"
|
||||
|
||||
|
||||
|
||||
#pragma aux portFIRST_CONTEXT = "mov ax, seg pxCurrentTCB" \
|
||||
"mov ds, ax" \
|
||||
"les bx, dword ptr pxCurrentTCB" \
|
||||
"mov ss, es:[ bx + 2 ]" \
|
||||
"mov sp, es:[ bx ]" \
|
||||
"add sp, 0x0002" /* Remove the extra bytes that exist in debug builds before restoring the context. */ \
|
||||
"pop ax" \
|
||||
"pop ax" \
|
||||
"pop es" \
|
||||
"pop ds" \
|
||||
"popa" \
|
||||
"iret"
|
||||
#else
|
||||
|
||||
#pragma aux portSWITCH_CONTEXT = "mov ax, seg pxCurrentTCB" \
|
||||
"mov ds, ax" \
|
||||
"les bx, pxCurrentTCB" /* Save the stack pointer into the TCB. */ \
|
||||
"mov es:0x2[ bx ], ss" \
|
||||
"mov es:[ bx ], sp" \
|
||||
"call vTaskSwitchContext" /* Perform the switch. */ \
|
||||
"mov ax, seg pxCurrentTCB" /* Restore the stack pointer from the TCB. */ \
|
||||
"mov ds, ax" \
|
||||
"les bx, dword ptr pxCurrentTCB" \
|
||||
"mov ss, es:[ bx + 2 ]" \
|
||||
"mov sp, es:[ bx ]"
|
||||
|
||||
|
||||
#pragma aux portFIRST_CONTEXT = "mov ax, seg pxCurrentTCB" \
|
||||
"mov ds, ax" \
|
||||
"les bx, dword ptr pxCurrentTCB" \
|
||||
"mov ss, es:[ bx + 2 ]" \
|
||||
"mov sp, es:[ bx ]" \
|
||||
"pop ax" \
|
||||
"pop ax" \
|
||||
"pop es" \
|
||||
"pop ds" \
|
||||
"popa" \
|
||||
"iret"
|
||||
#endif
|
||||
|
||||
|
||||
161
20091005/Source/portable/oWatcom/16BitDOS/common/portcomn.c
Normal file
161
20091005/Source/portable/oWatcom/16BitDOS/common/portcomn.c
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
/*
|
||||
FreeRTOS V5.4.2 - Copyright (C) 2009 Real Time Engineers Ltd.
|
||||
|
||||
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 (version 2) as published by the
|
||||
Free Software Foundation and modified by the FreeRTOS exception.
|
||||
**NOTE** The exception to the GPL is included to allow you to distribute a
|
||||
combined work that includes FreeRTOS without being obliged to provide the
|
||||
source code for proprietary components outside of the FreeRTOS kernel.
|
||||
Alternative commercial license and support terms are also available upon
|
||||
request. See the licensing section of http://www.FreeRTOS.org for full
|
||||
license details.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Looking for a quick start? Then check out the FreeRTOS eBook! *
|
||||
* See http://www.FreeRTOS.org/Documentation for details *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
/*
|
||||
Changes from V1.00:
|
||||
|
||||
+ pxPortInitialiseStack() now initialises the stack of new tasks to the
|
||||
same format used by the compiler. This allows the compiler generated
|
||||
interrupt mechanism to be used for context switches.
|
||||
|
||||
Changes from V2.4.2:
|
||||
|
||||
+ pvPortMalloc and vPortFree have been removed. The projects now use
|
||||
the definitions from the source/portable/MemMang directory.
|
||||
|
||||
Changes from V2.6.1:
|
||||
|
||||
+ usPortCheckFreeStackSpace() has been moved to tasks.c.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* See header file for description. */
|
||||
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
||||
{
|
||||
portSTACK_TYPE DS_Reg = 0, *pxOriginalSP;
|
||||
|
||||
/* Place a few bytes of known values on the bottom of the stack.
|
||||
This is just useful for debugging. */
|
||||
|
||||
*pxTopOfStack = 0x1111;
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = 0x2222;
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = 0x3333;
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = 0x4444;
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = 0x5555;
|
||||
pxTopOfStack--;
|
||||
|
||||
|
||||
/*lint -e950 -e611 -e923 Lint doesn't like this much - but nothing I can do about it. */
|
||||
|
||||
/* We are going to start the scheduler using a return from interrupt
|
||||
instruction to load the program counter, so first there would be the
|
||||
status register and interrupt return address. We make this the start
|
||||
of the task. */
|
||||
*pxTopOfStack = portINITIAL_SW;
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = FP_SEG( pxCode );
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = FP_OFF( pxCode );
|
||||
pxTopOfStack--;
|
||||
|
||||
/* We are going to setup the stack for the new task to look like
|
||||
the stack frame was setup by a compiler generated ISR. We need to know
|
||||
the address of the existing stack top to place in the SP register within
|
||||
the stack frame. pxOriginalSP holds SP before (simulated) pusha was
|
||||
called. */
|
||||
pxOriginalSP = pxTopOfStack;
|
||||
|
||||
/* The remaining registers would be pushed on the stack by our context
|
||||
switch function. These are loaded with values simply to make debugging
|
||||
easier. */
|
||||
*pxTopOfStack = FP_OFF( pvParameters ); /* AX */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = ( portSTACK_TYPE ) 0xCCCC; /* CX */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = FP_SEG( pvParameters ); /* DX */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = ( portSTACK_TYPE ) 0xBBBB; /* BX */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = FP_OFF( pxOriginalSP ); /* SP */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = ( portSTACK_TYPE ) 0xBBBB; /* BP */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = ( portSTACK_TYPE ) 0x0123; /* SI */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = ( portSTACK_TYPE ) 0xDDDD; /* DI */
|
||||
|
||||
/* We need the true data segment. */
|
||||
__asm{ MOV DS_Reg, DS };
|
||||
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = DS_Reg; /* DS */
|
||||
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = ( portSTACK_TYPE ) 0xEEEE; /* ES */
|
||||
|
||||
/* The AX register is pushed again twice - don't know why. */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = FP_OFF( pvParameters ); /* AX */
|
||||
pxTopOfStack--;
|
||||
*pxTopOfStack = FP_OFF( pvParameters ); /* AX */
|
||||
|
||||
|
||||
#ifdef DEBUG_BUILD
|
||||
/* The compiler adds space to each ISR stack if building to
|
||||
include debug information. Presumably this is used by the
|
||||
debugger - we don't need to initialise it to anything just
|
||||
make sure it is there. */
|
||||
pxTopOfStack--;
|
||||
#endif
|
||||
|
||||
/*lint +e950 +e611 +e923 */
|
||||
|
||||
return pxTopOfStack;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue