Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FreeRTOS/FreeRTOS-Kernel.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'portable/BCC/16BitDOS/PC/port.c')
-rw-r--r--portable/BCC/16BitDOS/PC/port.c121
1 files changed, 57 insertions, 64 deletions
diff --git a/portable/BCC/16BitDOS/PC/port.c b/portable/BCC/16BitDOS/PC/port.c
index e8a14a881..6940b1a67 100644
--- a/portable/BCC/16BitDOS/PC/port.c
+++ b/portable/BCC/16BitDOS/PC/port.c
@@ -27,16 +27,16 @@
*/
/*
- * Changes from V2.6.1
- *
- + Replaced the sUsingPreemption variable with the configUSE_PREEMPTION
- + macro to be consistent with the later ports.
- +
- + Changes from V4.0.1
- +
- + Add function prvSetTickFrequencyDefault() to set the DOS tick back to
- + its proper value when the scheduler exits.
- */
+Changes from V2.6.1
+
+ + Replaced the sUsingPreemption variable with the configUSE_PREEMPTION
+ macro to be consistent with the later ports.
+
+Changes from V4.0.1
+
+ + Add function prvSetTickFrequencyDefault() to set the DOS tick back to
+ its proper value when the scheduler exits.
+*/
#include <stdlib.h>
#include <dos.h>
@@ -47,9 +47,9 @@
#include "portasm.h"
/*-----------------------------------------------------------
-* Implementation of functions defined in portable.h for the industrial
-* PC port.
-*----------------------------------------------------------*/
+ * Implementation of functions defined in portable.h for the industrial
+ * PC port.
+ *----------------------------------------------------------*/
/*lint -e950 Non ANSI reserved words okay in this file only. */
@@ -62,21 +62,19 @@ static void prvSetTickFrequency( uint32_t ulTickRateHz );
static void prvExitFunction( void );
/* Either chain to the DOS tick (which itself clears the PIC) or clear the PIC
- * directly. We chain to the DOS tick as close as possible to the standard DOS
- * tick rate. */
+directly. We chain to the DOS tick as close as possible to the standard DOS
+tick rate. */
static void prvPortResetPIC( void );
/* The ISR used depends on whether the preemptive or cooperative
- * scheduler is being used. */
-#if ( configUSE_PREEMPTION == 1 )
-
-/* Tick service routine used by the scheduler when preemptive scheduling is
- * being used. */
+scheduler is being used. */
+#if( configUSE_PREEMPTION == 1 )
+ /* Tick service routine used by the scheduler when preemptive scheduling is
+ being used. */
static void __interrupt __far prvPreemptiveTick( void );
#else
-
-/* Tick service routine used by the scheduler when cooperative scheduling is
- * being used. */
+ /* Tick service routine used by the scheduler when cooperative scheduling is
+ being used. */
static void __interrupt __far prvNonPreemptiveTick( void );
#endif
@@ -84,7 +82,7 @@ static void prvPortResetPIC( void );
static void __interrupt __far prvYieldProcessor( void );
/* Set the tick frequency back so the floppy drive works correctly when the
- * scheduler exits. */
+scheduler exits. */
static void prvSetTickFrequencyDefault( void );
/*lint -e956 File scopes necessary here. */
@@ -96,10 +94,10 @@ static int16_t sDOSTickCounter;
static BaseType_t xSchedulerRunning = pdFALSE;
/* Points to the original routine installed on the vector we use for manual context switches. This is then used to restore the original routine during prvExitFunction(). */
-static void( __interrupt __far * pxOldSwitchISR )();
+static void ( __interrupt __far *pxOldSwitchISR )();
/* Points to the original routine installed on the vector we use to chain to the DOS tick. This is then used to restore the original routine during prvExitFunction(). */
-static void( __interrupt __far * pxOldSwitchISRPlus1 )();
+static void ( __interrupt __far *pxOldSwitchISRPlus1 )();
/* Used to restore the original DOS context when the scheduler is ended. */
static jmp_buf xJumpBuf;
@@ -109,12 +107,12 @@ static jmp_buf xJumpBuf;
/*-----------------------------------------------------------*/
BaseType_t xPortStartScheduler( void )
{
- pxISR pxOriginalTickISR;
+pxISR pxOriginalTickISR;
/* This is called with interrupts already disabled. */
/* Remember what was on the interrupts we are going to use
- * so we can put them back later if required. */
+ so we can put them back later if required. */
pxOldSwitchISR = _dos_getvect( portSWITCH_INT_NUMBER );
pxOriginalTickISR = _dos_getvect( portTIMER_INT_NUMBER );
pxOldSwitchISRPlus1 = _dos_getvect( portSWITCH_INT_NUMBER + 1 );
@@ -122,16 +120,16 @@ BaseType_t xPortStartScheduler( void )
prvSetTickFrequency( configTICK_RATE_HZ );
/* Put our manual switch (yield) function on a known
- * vector. */
+ vector. */
_dos_setvect( portSWITCH_INT_NUMBER, prvYieldProcessor );
/* Put the old tick on a different interrupt number so we can
- * call it when we want. */
+ call it when we want. */
_dos_setvect( portSWITCH_INT_NUMBER + 1, pxOriginalTickISR );
/* The ISR used depends on whether the preemptive or cooperative
- * scheduler is being used. */
- #if ( configUSE_PREEMPTION == 1 )
+ scheduler is being used. */
+ #if( configUSE_PREEMPTION == 1 )
{
/* Put our tick switch function on the timer interrupt. */
_dos_setvect( portTIMER_INT_NUMBER, prvPreemptiveTick );
@@ -144,8 +142,8 @@ BaseType_t xPortStartScheduler( void )
#endif
/* Setup a counter that is used to call the DOS interrupt as close
- * to it's original frequency as can be achieved given our chosen tick
- * frequency. */
+ to it's original frequency as can be achieved given our chosen tick
+ frequency. */
sDOSTickCounter = portTICKS_PER_DOS_TICK;
/* Clean up function if we want to return to DOS. */
@@ -167,8 +165,8 @@ BaseType_t xPortStartScheduler( void )
/*-----------------------------------------------------------*/
/* The ISR used depends on whether the preemptive or cooperative
- * scheduler is being used. */
-#if ( configUSE_PREEMPTION == 1 )
+scheduler is being used. */
+#if( configUSE_PREEMPTION == 1 )
static void __interrupt __far prvPreemptiveTick( void )
{
/* Get the scheduler to update the task states following the tick. */
@@ -181,15 +179,15 @@ BaseType_t xPortStartScheduler( void )
/* Reset the PIC ready for the next time. */
prvPortResetPIC();
}
-#else /* if ( configUSE_PREEMPTION == 1 ) */
+#else
static void __interrupt __far prvNonPreemptiveTick( void )
{
/* Same as preemptive tick, but the cooperative scheduler is being used
- * so we don't have to switch in the context of the next task. */
+ so we don't have to switch in the context of the next task. */
xTaskIncrementTick();
prvPortResetPIC();
}
-#endif /* if ( configUSE_PREEMPTION == 1 ) */
+#endif
/*-----------------------------------------------------------*/
static void __interrupt __far prvYieldProcessor( void )
@@ -202,22 +200,19 @@ static void __interrupt __far prvYieldProcessor( void )
static void prvPortResetPIC( void )
{
/* We are going to call the DOS tick interrupt at as close a
- * frequency to the normal DOS tick as possible. */
+ frequency to the normal DOS tick as possible. */
/* WE SHOULD NOT DO THIS IF YIELD WAS CALLED. */
--sDOSTickCounter;
-
if( sDOSTickCounter <= 0 )
{
sDOSTickCounter = ( int16_t ) portTICKS_PER_DOS_TICK;
- __asm {
- int portSWITCH_INT_NUMBER + 1
- };
+ __asm{ int portSWITCH_INT_NUMBER + 1 };
}
else
{
/* Reset the PIC as the DOS tick is not being called to
- * do it. */
+ do it. */
__asm
{
mov al, 20H
@@ -230,20 +225,19 @@ static void prvPortResetPIC( void )
void vPortEndScheduler( void )
{
/* Jump back to the processor state prior to starting the
- * scheduler. This means we are not going to be using a
- * task stack frame so the task can be deleted. */
+ scheduler. This means we are not going to be using a
+ task stack frame so the task can be deleted. */
longjmp( xJumpBuf, 1 );
}
/*-----------------------------------------------------------*/
static void prvExitFunction( void )
{
- void( __interrupt __far * pxOriginalTickISR )();
+void ( __interrupt __far *pxOriginalTickISR )();
/* Interrupts should be disabled here anyway - but no
- * harm in making sure. */
+ harm in making sure. */
portDISABLE_INTERRUPTS();
-
if( xSchedulerRunning == pdTRUE )
{
/* Set the DOS tick back onto the timer ticker. */
@@ -252,29 +246,28 @@ static void prvExitFunction( void )
prvSetTickFrequencyDefault();
/* Put back the switch interrupt routines that was in place
- * before the scheduler started. */
+ before the scheduler started. */
_dos_setvect( portSWITCH_INT_NUMBER, pxOldSwitchISR );
_dos_setvect( portSWITCH_INT_NUMBER + 1, pxOldSwitchISRPlus1 );
}
-
/* The tick timer is back how DOS wants it. We can re-enable
- * interrupts without the scheduler being called. */
+ interrupts without the scheduler being called. */
portENABLE_INTERRUPTS();
}
/*-----------------------------------------------------------*/
static void prvSetTickFrequency( uint32_t ulTickRateHz )
{
- const uint16_t usPIT_MODE = ( uint16_t ) 0x43;
- const uint16_t usPIT0 = ( uint16_t ) 0x40;
- const uint32_t ulPIT_CONST = ( uint32_t ) 1193180UL;
- const uint16_t us8254_CTR0_MODE3 = ( uint16_t ) 0x36;
- uint32_t ulOutput;
+const uint16_t usPIT_MODE = ( uint16_t ) 0x43;
+const uint16_t usPIT0 = ( uint16_t ) 0x40;
+const uint32_t ulPIT_CONST = ( uint32_t ) 1193180UL;
+const uint16_t us8254_CTR0_MODE3 = ( uint16_t ) 0x36;
+uint32_t ulOutput;
/* Setup the 8245 to tick at the wanted frequency. */
portOUTPUT_BYTE( usPIT_MODE, us8254_CTR0_MODE3 );
ulOutput = ulPIT_CONST / ulTickRateHz;
- portOUTPUT_BYTE( usPIT0, ( uint16_t ) ( ulOutput & ( uint32_t ) 0xff ) );
+ portOUTPUT_BYTE( usPIT0, ( uint16_t )( ulOutput & ( uint32_t ) 0xff ) );
ulOutput >>= 8;
portOUTPUT_BYTE( usPIT0, ( uint16_t ) ( ulOutput & ( uint32_t ) 0xff ) );
}
@@ -282,13 +275,13 @@ static void prvSetTickFrequency( uint32_t ulTickRateHz )
static void prvSetTickFrequencyDefault( void )
{
- const uint16_t usPIT_MODE = ( uint16_t ) 0x43;
- const uint16_t usPIT0 = ( uint16_t ) 0x40;
- const uint16_t us8254_CTR0_MODE3 = ( uint16_t ) 0x36;
+const uint16_t usPIT_MODE = ( uint16_t ) 0x43;
+const uint16_t usPIT0 = ( uint16_t ) 0x40;
+const uint16_t us8254_CTR0_MODE3 = ( uint16_t ) 0x36;
portOUTPUT_BYTE( usPIT_MODE, us8254_CTR0_MODE3 );
- portOUTPUT_BYTE( usPIT0, 0 );
- portOUTPUT_BYTE( usPIT0, 0 );
+ portOUTPUT_BYTE( usPIT0,0 );
+ portOUTPUT_BYTE( usPIT0,0 );
}