URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/rtos/freertos-6.1.1/Demo/Flshlite
- from Rev 615 to Rev 616
- ↔ Reverse comparison
Rev 615 → Rev 616
/serial/serial.c
0,0 → 1,495
/* |
FreeRTOS V6.1.1 - Copyright (C) 2011 Real Time Engineers Ltd. |
|
*************************************************************************** |
* * |
* If you are: * |
* * |
* + New to FreeRTOS, * |
* + Wanting to learn FreeRTOS or multitasking in general quickly * |
* + Looking for basic training, * |
* + Wanting to improve your FreeRTOS skills and productivity * |
* * |
* then take a look at the FreeRTOS books - available as PDF or paperback * |
* * |
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" * |
* http://www.FreeRTOS.org/Documentation * |
* * |
* A pdf reference manual is also available. Both are usually delivered * |
* to your inbox within 20 minutes to two hours when purchased between 8am * |
* and 8pm GMT (although please allow up to 24 hours in case of * |
* exceptional circumstances). Thank you for your support! * |
* * |
*************************************************************************** |
|
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. |
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 and the FreeRTOS license exception along with FreeRTOS; if not it |
can be viewed here: http://www.freertos.org/a00114.html and also obtained |
by writing to Richard Barry, contact details for whom are available on the |
FreeRTOS WEB site. |
|
1 tab == 4 spaces! |
|
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: |
|
+ Call to the more efficient portSWITCH_CONTEXT() replaces the call to |
taskYIELD() in the ISR. |
|
Changes from V1.01: |
|
+ The semaphore task is not operational. This does nothing but check |
the semaphore from ISR functionality. |
+ ISR modified slightly so only Rx or Tx is serviced per ISR - not both. |
|
Changes from V1.2.0: |
|
+ Change so Tx uses a DMA channel, and Rx uses an interrupt. |
|
Changes from V1.2.3 |
|
+ The function xPortInitMinimal() has been renamed to |
xSerialPortInitMinimal() and the function xPortInit() has been renamed |
to xSerialPortInit(). |
|
Changes from V1.2.5 |
|
+ Reverted back to the non-DMA serial port driver, with a slightly modified |
ISR. This is a better test of the scheduler mechanisms. |
+ A critical section is now used in vInterruptOn(). |
+ Flag sTxInterruptOn has been added to the port structure. This allows |
checking of the interrupt enable status without performing any IO. |
|
Changes from V2.0.0 |
|
+ Use portTickType in place of unsigned pdLONG for delay periods. |
+ Slightly more efficient vSerialSendString() implementation. |
+ cQueueReieveFromISR() used in place of xQueueReceive() in ISR. |
*/ |
|
#include <stdlib.h> |
#include <dos.h> |
#include "FreeRTOS.h" |
#include "queue.h" |
#include "task.h" |
#include "portasm.h" |
#include "semphr.h" |
|
#define serMAX_PORTS ( ( unsigned short ) 2 ) |
|
#define serPORT_0_INT_REG ( 0xff44 ) |
#define serPORT_0_BAUD_REG ( 0xff88 ) |
#define serPORT_0_RX_REG ( 0xff86 ) |
#define serPORT_0_TX_REG ( 0xff84 ) |
#define serPORT_0_STATUS_REG ( 0xff82 ) |
#define serPORT_0_CTRL_REG ( 0xff80 ) |
#define serPORT_0_IRQ ( 0x14 ) |
|
#define serPORT_1_INT_REG ( 0xff42 ) |
#define serPORT_1_BAUD_REG ( 0xff18 ) |
#define serPORT_1_RX_REG ( 0xff16 ) |
#define serPORT_1_TX_REG ( 0xff14 ) |
#define serPORT_1_STATUS_REG ( 0xff12 ) |
#define serPORT_1_CTRL_REG ( 0xff10 ) |
#define serPORT_1_IRQ ( 0x11 ) |
|
#define serTX_EMPTY ( ( unsigned short ) 0x40 ) |
#define serRX_READY ( ( unsigned short ) 0x80 ) |
|
#define serRESET_PIC( usEOI_TYPE ) portOUTPUT_WORD( ( unsigned short ) 0xff22, usEOI_TYPE ) |
#define serTX_HOLD_EMPTY_INT ( ( unsigned short ) 0x100 ) |
|
#define serENABLE_INTERRUPTS ( ( unsigned short ) 0x80 ) |
#define serMODE ( ( unsigned short ) 0x01 ) |
#define serENABLE_TX_MACHINES ( ( unsigned short ) 0x40 ) |
#define serENABLE_RX_MACHINES ( ( unsigned short ) 0x20 ) |
#define serINTERRUPT_MASK ( ( unsigned short ) 0x08 ) |
#define serCLEAR_ALL_STATUS_BITS ( ( unsigned short ) 0x00 ) |
#define serINTERRUPT_PRIORITY ( ( unsigned short ) 0x01 ) /*< Just below the scheduler priority. */ |
|
#define serDONT_BLOCK ( ( portTickType ) 0 ) |
|
typedef enum |
{ |
serCOM1 = 0, |
serCOM2, |
serCOM3, |
serCOM4, |
serCOM5, |
serCOM6, |
serCOM7, |
serCOM8 |
} eCOMPort; |
|
typedef enum |
{ |
serNO_PARITY, |
serODD_PARITY, |
serEVEN_PARITY, |
serMARK_PARITY, |
serSPACE_PARITY |
} eParity; |
|
typedef enum |
{ |
serSTOP_1, |
serSTOP_2 |
} eStopBits; |
|
typedef enum |
{ |
serBITS_5, |
serBITS_6, |
serBITS_7, |
serBITS_8 |
} eDataBits; |
|
typedef enum |
{ |
ser50 = 0, |
ser75, |
ser110, |
ser134, |
ser150, |
ser200, |
ser300, |
ser600, |
ser1200, |
ser1800, |
ser2400, |
ser4800, |
ser9600, |
ser19200, |
ser38400, |
ser57600, |
ser115200 |
} eBaud; |
|
/* Must be same order as eBaud definitions. */ |
static const unsigned short usBaudRateDivisor[] = |
{ |
0, /* Not sure if the first 6 are correct. First cannot be used. */ |
29127, |
19859, |
16302, |
14564, |
10923, |
6879, |
3437, |
1718, |
1145, |
859, |
429, |
214, |
107, |
54, |
35, |
18 |
}; |
|
|
typedef struct xCOM_PORT |
{ |
/* Hardware parameters for this port. */ |
short sTxInterruptOn; |
unsigned short usIntReg; |
unsigned short usBaudReg; |
unsigned short usRxReg; |
unsigned short usTxReg; |
unsigned short usStatusReg; |
unsigned short usCtrlReg; |
|
unsigned short usIRQVector; |
|
/* Queues used for communications with com test task. */ |
xQueueHandle xRxedChars; |
xQueueHandle xCharsForTx; |
|
/* This semaphore does nothing useful except test a feature of the |
scheduler. */ |
xSemaphoreHandle xTestSem; |
|
} xComPort; |
|
static xComPort xPorts[ serMAX_PORTS ] = |
{ |
{ pdFALSE, serPORT_0_INT_REG, serPORT_0_BAUD_REG, serPORT_0_RX_REG, serPORT_0_TX_REG, serPORT_0_STATUS_REG, serPORT_0_CTRL_REG, serPORT_0_IRQ, NULL, NULL, NULL }, |
{ pdFALSE, serPORT_1_INT_REG, serPORT_1_BAUD_REG, serPORT_1_RX_REG, serPORT_1_TX_REG, serPORT_1_STATUS_REG, serPORT_1_CTRL_REG, serPORT_1_IRQ, NULL, NULL, NULL } |
}; |
|
typedef xComPort * xComPortHandle; |
|
/* These prototypes are repeated here so we don't have to include the serial header. This allows |
the xComPortHandle structure details to be private to this file. */ |
xComPortHandle xSerialPortInit( eCOMPort ePort, eBaud eWantedBaud, eParity eWantedParity, eDataBits eWantedDataBits, eStopBits eWantedStopBits, unsigned portBASE_TYPE uxBufferLength ); |
portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, char *pcRxedChar, portTickType xBlockTime ); |
portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, char cOutChar, portTickType xBlockTime ); |
void vSerialClose( xComPortHandle xPort ); |
short sSerialWaitForSemaphore( xComPortHandle xPort ); |
/*-----------------------------------------------------------*/ |
|
static short xComPortISR( xComPort * const pxPort ); |
|
#define vInterruptOn( pxPort, usInterrupt ) \ |
{ \ |
unsigned short usIn; \ |
\ |
portENTER_CRITICAL(); \ |
{ \ |
if( pxPort->sTxInterruptOn == pdFALSE ) \ |
{ \ |
usIn = portINPUT_WORD( pxPort->usCtrlReg ); \ |
portOUTPUT_WORD( pxPort->usCtrlReg, usIn | usInterrupt ); \ |
\ |
pxPort->sTxInterruptOn = pdTRUE; \ |
} \ |
} \ |
portEXIT_CRITICAL(); \ |
} |
/*-----------------------------------------------------------*/ |
|
#define vInterruptOff( pxPort, usInterrupt ) \ |
{ \ |
unsigned short usIn = portINPUT_WORD( pxPort->usCtrlReg ); \ |
if( usIn & usInterrupt ) \ |
{ \ |
portOUTPUT_WORD( pxPort->usCtrlReg, usIn & ~usInterrupt); \ |
pxPort->sTxInterruptOn = pdFALSE; \ |
} \ |
} |
/*-----------------------------------------------------------*/ |
|
|
/* Define an interrupt handler for each port */ |
#define COM_IRQ_WRAPPER(N) \ |
static void __interrupt COM_IRQ##N##_WRAPPER( void ) \ |
{ \ |
if( xComPortISR( &( xPorts[##N##] ) ) ) \ |
{ \ |
portSWITCH_CONTEXT(); \ |
} \ |
} |
|
|
|
COM_IRQ_WRAPPER( 0 ) |
COM_IRQ_WRAPPER( 1 ) |
|
static pxISR xISRs[ serMAX_PORTS ] = |
{ |
COM_IRQ0_WRAPPER, |
COM_IRQ1_WRAPPER |
}; |
|
/*-----------------------------------------------------------*/ |
|
xComPortHandle xSerialPortInit( eCOMPort ePort, eBaud eWantedBaud, eParity eWantedParity, eDataBits eWantedDataBits, eStopBits eWantedStopBits, unsigned portBASE_TYPE uxBufferLength ) |
{ |
unsigned short usPort; |
xComPortHandle pxPort = NULL; |
|
/* BAUDDIV = ( Microprocessor Clock / Baud Rate ) / 16 */ |
|
/* Only n, 8, 1 is supported so these parameters are not required for this |
port. */ |
( void ) eWantedParity; |
( void ) eWantedDataBits; |
( void ) eWantedStopBits; |
|
/* Currently only n,8,1 is supported. */ |
|
usPort = ( unsigned short ) ePort; |
|
if( usPort < serMAX_PORTS ) |
{ |
pxPort = &( xPorts[ usPort ] ); |
|
portENTER_CRITICAL(); |
{ |
unsigned short usInWord; |
|
/* Create the queues used by the com test task. */ |
pxPort->xRxedChars = xQueueCreate( uxBufferLength, ( unsigned portBASE_TYPE ) sizeof( char ) ); |
pxPort->xCharsForTx = xQueueCreate( uxBufferLength, ( unsigned portBASE_TYPE ) sizeof( char ) ); |
|
/* Create the test semaphore. This does nothing useful except test a feature of the scheduler. */ |
vSemaphoreCreateBinary( pxPort->xTestSem ); |
|
/* There is no ISR here already to restore later. */ |
_dos_setvect( ( short ) pxPort->usIRQVector, xISRs[ usPort ] ); |
|
usInWord = portINPUT_WORD( pxPort->usIntReg ); |
usInWord &= ~serINTERRUPT_MASK; |
usInWord |= serINTERRUPT_PRIORITY; |
portOUTPUT_WORD( pxPort->usIntReg, usInWord ); |
|
portOUTPUT_WORD( pxPort->usBaudReg, usBaudRateDivisor[ eWantedBaud ] ); |
portOUTPUT_WORD( pxPort->usCtrlReg, serENABLE_INTERRUPTS | serMODE | serENABLE_TX_MACHINES | serENABLE_RX_MACHINES ); |
|
portOUTPUT_WORD( pxPort->usStatusReg, serCLEAR_ALL_STATUS_BITS ); |
} |
portEXIT_CRITICAL(); |
} |
|
return pxPort; |
} /*lint !e715 Some parameters are not used as only a subset of the serial port functionality is currently implemented. */ |
/*-----------------------------------------------------------*/ |
|
void vSerialPutString( xComPortHandle pxPort, const char * const pcString, unsigned short usStringLength ) |
{ |
unsigned short usByte; |
char *pcNextChar; |
|
pcNextChar = ( char * ) pcString; |
|
for( usByte = 0; usByte < usStringLength; usByte++ ) |
{ |
xQueueSend( pxPort->xCharsForTx, pcNextChar, serDONT_BLOCK ); |
pcNextChar++; |
} |
|
vInterruptOn( pxPort, serTX_HOLD_EMPTY_INT ); |
} |
/*-----------------------------------------------------------*/ |
|
portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, char *pcRxedChar, portTickType xBlockTime ) |
{ |
/* Get the next character from the buffer, note that this routine is only |
called having checked that the is (at least) one to get */ |
if( xQueueReceive( pxPort->xRxedChars, pcRxedChar, xBlockTime ) ) |
{ |
return pdTRUE; |
} |
else |
{ |
return pdFALSE; |
} |
} |
/*-----------------------------------------------------------*/ |
|
portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, char cOutChar, portTickType xBlockTime ) |
{ |
if( xQueueSend( pxPort->xCharsForTx, &cOutChar, xBlockTime ) != pdPASS ) |
{ |
return pdFAIL; |
} |
|
vInterruptOn( pxPort, serTX_HOLD_EMPTY_INT ); |
|
return pdPASS; |
} |
/*-----------------------------------------------------------*/ |
|
portBASE_TYPE xSerialWaitForSemaphore( xComPortHandle xPort ) |
{ |
const portTickType xBlockTime = ( portTickType ) 0xffff; |
|
/* This function does nothing interesting, but test the |
semaphore from ISR mechanism. */ |
return xSemaphoreTake( xPort->xTestSem, xBlockTime ); |
} |
/*-----------------------------------------------------------*/ |
|
void vSerialClose( xComPortHandle xPort ) |
{ |
unsigned short usOutput; |
|
/* Turn off the interrupts. We may also want to delete the queues and/or |
re-install the original ISR. */ |
|
portENTER_CRITICAL(); |
{ |
usOutput = portINPUT_WORD( xPort->usCtrlReg ); |
|
usOutput &= ~serENABLE_INTERRUPTS; |
usOutput &= ~serENABLE_TX_MACHINES; |
usOutput &= ~serENABLE_RX_MACHINES; |
portOUTPUT_WORD( xPort->usCtrlReg, usOutput ); |
|
usOutput = portINPUT_WORD( xPort->usIntReg ); |
usOutput |= serINTERRUPT_MASK; |
portOUTPUT_WORD( xPort->usIntReg, usOutput ); |
} |
portEXIT_CRITICAL(); |
} |
/*-----------------------------------------------------------*/ |
|
static portBASE_TYPE xComPortISR( xComPort * const pxPort ) |
{ |
unsigned short usStatusRegister; |
char cChar; |
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE, xContinue = pdTRUE; |
|
/* NOTE: THIS IS NOT AN EFFICIENT ISR AS IT IS DESIGNED SOLELY TO TEST |
THE SCHEDULER FUNCTIONALITY. REAL APPLICATIONS SHOULD NOT USE THIS |
FUNCTION. */ |
|
|
while( xContinue == pdTRUE ) |
{ |
xContinue = pdFALSE; |
usStatusRegister = portINPUT_WORD( pxPort->usStatusReg ); |
|
if( usStatusRegister & serRX_READY ) |
{ |
cChar = ( char ) portINPUT_WORD( pxPort->usRxReg ); |
xQueueSendFromISR( pxPort->xRxedChars, &cChar, &xHigherPriorityTaskWoken ); |
|
/* Also release the semaphore - this does nothing interesting and is just a test. */ |
xSemaphoreGiveFromISR( pxPort->xTestSem, &xHigherPriorityTaskWoken ); |
|
/* We have performed an action this cycle - there may be other to perform. */ |
xContinue = pdTRUE; |
} |
|
if( pxPort->sTxInterruptOn && ( usStatusRegister & serTX_EMPTY ) ) |
{ |
if( xQueueReceiveFromISR( pxPort->xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE ) |
{ |
portOUTPUT_WORD( pxPort->usTxReg, ( unsigned short ) cChar ); |
|
/* We have performed an action this cycle - there may be others to perform. */ |
xContinue = pdTRUE; |
} |
else |
{ |
/* Queue empty, nothing to send */ |
vInterruptOff( pxPort, serTX_HOLD_EMPTY_INT ); |
} |
} |
} |
|
serRESET_PIC( pxPort->usIRQVector ); |
|
/* If posting to the queue woke a task that was blocked on the queue we may |
want to switch to the woken task - depending on its priority relative to |
the task interrupted by this ISR. */ |
return xHigherPriorityTaskWoken; |
} |
|
|
|
|
|
|
/ParTest/ParTest.c
0,0 → 1,151
/* |
FreeRTOS V6.1.1 - Copyright (C) 2011 Real Time Engineers Ltd. |
|
*************************************************************************** |
* * |
* If you are: * |
* * |
* + New to FreeRTOS, * |
* + Wanting to learn FreeRTOS or multitasking in general quickly * |
* + Looking for basic training, * |
* + Wanting to improve your FreeRTOS skills and productivity * |
* * |
* then take a look at the FreeRTOS books - available as PDF or paperback * |
* * |
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" * |
* http://www.FreeRTOS.org/Documentation * |
* * |
* A pdf reference manual is also available. Both are usually delivered * |
* to your inbox within 20 minutes to two hours when purchased between 8am * |
* and 8pm GMT (although please allow up to 24 hours in case of * |
* exceptional circumstances). Thank you for your support! * |
* * |
*************************************************************************** |
|
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. |
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 and the FreeRTOS license exception along with FreeRTOS; if not it |
can be viewed here: http://www.freertos.org/a00114.html and also obtained |
by writing to Richard Barry, contact details for whom are available on the |
FreeRTOS WEB site. |
|
1 tab == 4 spaces! |
|
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.01: |
|
+ Types used updated. |
+ Add vParTestToggleLED(); |
|
Changes from V2.0.0 |
|
+ Use scheduler suspends in place of critical sections. |
*/ |
|
|
#include "FreeRTOS.h" |
#include "task.h" |
#include "partest.h" |
|
#define partstALL_OUTPUTS_OFF ( ( unsigned short) 0x00 ) |
#define partstMAX_OUTPUT_LED ( ( unsigned char ) 7 ) |
#define partstPORT_F_ADDR ( ( unsigned short ) 0x605 ) |
#define partstPORT_DIRECTION_REG ( ( unsigned short ) 0x606 ) |
#define partstPORT_F_DIR_BIT ( ( unsigned short ) 0x20 ) |
|
/*lint -e956 File scope parameters okay here. */ |
static volatile unsigned char ucCurrentOutputValue = partstALL_OUTPUTS_OFF; |
/*lint +e956 */ |
|
/*----------------------------------------------------------- |
* Simple parallel port IO routines. |
*-----------------------------------------------------------*/ |
|
void vParTestInitialise( void ) |
{ |
unsigned short usInput; |
|
ucCurrentOutputValue = partstALL_OUTPUTS_OFF; |
|
/* Set the direction to output for port F. */ |
usInput = portINPUT_BYTE( partstPORT_DIRECTION_REG ); |
usInput |= partstPORT_F_DIR_BIT; |
portOUTPUT_BYTE( partstPORT_DIRECTION_REG, usInput ); |
|
/* Start with all outputs off. */ |
portOUTPUT_BYTE( partstPORT_F_ADDR, partstALL_OUTPUTS_OFF ); |
} |
/*-----------------------------------------------------------*/ |
|
void vParTestSetLED( unsigned portBASE_TYPE uxLED, portBASE_TYPE xValue ) |
{ |
unsigned char ucBit = ( unsigned char ) 1; |
|
if( uxLED <= partstMAX_OUTPUT_LED ) |
{ |
ucBit <<= uxLED; |
} |
|
vTaskSuspendAll(); |
{ |
if( xValue == pdTRUE ) |
{ |
ucBit ^= ( unsigned char ) 0xff; |
ucCurrentOutputValue &= ucBit; |
} |
else |
{ |
ucCurrentOutputValue |= ucBit; |
} |
|
portOUTPUT_BYTE( partstPORT_F_ADDR, ( unsigned ) ucCurrentOutputValue ); |
} |
xTaskResumeAll(); |
} |
/*-----------------------------------------------------------*/ |
|
void vParTestToggleLED( unsigned portBASE_TYPE uxLED ) |
{ |
unsigned char ucBit; |
|
if( uxLED <= partstMAX_OUTPUT_LED ) |
{ |
ucBit = ( ( unsigned char ) 1 ) << uxLED; |
|
vTaskSuspendAll(); |
{ |
if( ucCurrentOutputValue & ucBit ) |
{ |
ucCurrentOutputValue &= ~ucBit; |
} |
else |
{ |
ucCurrentOutputValue |= ucBit; |
} |
|
portOUTPUT_BYTE( partstPORT_F_ADDR, ( unsigned ) ucCurrentOutputValue ); |
} |
xTaskResumeAll(); |
} |
} |
|
/rtosdemo.lk1
0,0 → 1,2
FIL list.obj,heap_2.obj,portcomn.obj,port.obj,queue.obj,tasks.obj,blockq.obj,comtest.obj,death.obj,flash.obj,integer.obj,pollq.obj,print.obj,semtest.obj,fileio.obj,main.obj,partest.obj,serial.obj |
|
/rtosdemo.mk
0,0 → 1,3
project : E:\Dev\FreeRTOS\Demo\Flshlite\rtosdemo.exe .SYMBOLIC |
|
!include E:\Dev\FreeRTOS\Demo\Flshlite\rtosdemo.mk1 |
/FRConfig.h
0,0 → 1,108
/* |
FreeRTOS V6.1.1 - Copyright (C) 2011 Real Time Engineers Ltd. |
|
*************************************************************************** |
* * |
* If you are: * |
* * |
* + New to FreeRTOS, * |
* + Wanting to learn FreeRTOS or multitasking in general quickly * |
* + Looking for basic training, * |
* + Wanting to improve your FreeRTOS skills and productivity * |
* * |
* then take a look at the FreeRTOS books - available as PDF or paperback * |
* * |
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" * |
* http://www.FreeRTOS.org/Documentation * |
* * |
* A pdf reference manual is also available. Both are usually delivered * |
* to your inbox within 20 minutes to two hours when purchased between 8am * |
* and 8pm GMT (although please allow up to 24 hours in case of * |
* exceptional circumstances). Thank you for your support! * |
* * |
*************************************************************************** |
|
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. |
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 and the FreeRTOS license exception along with FreeRTOS; if not it |
can be viewed here: http://www.freertos.org/a00114.html and also obtained |
by writing to Richard Barry, contact details for whom are available on the |
FreeRTOS WEB site. |
|
1 tab == 4 spaces! |
|
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. |
*/ |
|
#ifndef FREERTOS_CONFIG_H |
#define FREERTOS_CONFIG_H |
|
#include <conio.h> |
|
/*----------------------------------------------------------- |
* Application specific definitions for the x86 port. |
*----------------------------------------------------------*/ |
|
/* These are the only definitions that can be modified!. */ |
#define configUSE_PREEMPTION 1 |
#define configUSE_IDLE_HOOK 0 |
#define configUSE_TICK_HOOK 0 |
#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) |
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 10 ) |
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) /* This can be made smaller if required. */ |
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 32 * 1024 ) ) |
#define configMAX_TASK_NAME_LEN ( 16 ) |
#define configUSE_TRACE_FACILITY 0 |
#define configUSE_16_BIT_TICKS 1 |
#define configIDLE_SHOULD_YIELD 1 |
|
/* Co-routine definitions. */ |
#define configUSE_CO_ROUTINES 0 |
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) |
|
/* The maximum number of characters a task name can take, |
including the null terminator. */ |
#define configMAX_TASK_NAME_LEN ( 16 ) |
|
/* Set the following definitions to 1 to include the component, or zero |
to exclude the component. */ |
|
/* Include/exclude the stated API function. */ |
#define INCLUDE_vTaskPrioritySet 0 |
#define INCLUDE_uxTaskPriorityGet 0 |
#define INCLUDE_vTaskDelete 1 |
#define INCLUDE_vTaskCleanUpResources 1 |
#define INCLUDE_vTaskSuspend 1 |
#define INCLUDE_vTaskDelayUntil 1 |
#define INCLUDE_vTaskDelay 1 |
|
|
/* Use/don't use the trace visualisation. */ |
#define configUSE_TRACE_FACILITY 0 |
|
/* |
* The tick count (and times defined in tick count units) can be either a 16bit |
* or a 32 bit value. See documentation on http://www.FreeRTOS.org to decide |
* which to use. |
*/ |
#define configUSE_16_BIT_TICKS 1 |
|
|
#endif /* FREERTOS_CONFIG_H */ |
/rtosdemo.mk1
0,0 → 1,191
!define BLANK "" |
E:\Dev\FreeRTOS\Demo\Flshlite\list.obj : E:\Dev\FreeRTOS\source\list.c .AUTO& |
DEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\..\source\list.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\..\& |
source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za -s& |
-dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos -m& |
l |
|
E:\Dev\FreeRTOS\Demo\Flshlite\heap_2.obj : E:\Dev\FreeRTOS\SOURCE\PORTABLE\M& |
EMMANG\heap_2.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\..\SOURCE\PORTABLE\MEMMANG\heap_2.c -i=D:\DEVTOOLS\OPENWA~1\h;..\co& |
mmon\include;..\..\source\include;..\..\source\portable\owatcom\16bitdos\com& |
mon -w4 -e25 -za -s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fp& |
c -zu -1 -bt=dos -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\portcomn.obj : E:\Dev\FreeRTOS\source\portable& |
\owatcom\16bitdos\common\portcomn.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\..\source\portable\owatcom\16bitdos\common\portcomn.c -i=D:\DEVTOOL& |
S\OPENWA~1\h;..\common\include;..\..\source\include;..\..\source\portable\ow& |
atcom\16bitdos\common -w4 -e25 -za -s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -& |
zq -otexan -of -fpc -zu -1 -bt=dos -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\port.obj : E:\Dev\FreeRTOS\source\portable\owa& |
tcom\16bitdos\flsh186\port.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\..\source\portable\owatcom\16bitdos\flsh186\port.c -i=D:\DEVTOOLS\O& |
PENWA~1\h;..\common\include;..\..\source\include;..\..\source\portable\owatc& |
om\16bitdos\common -w4 -e25 -za -s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq & |
-otexan -of -fpc -zu -1 -bt=dos -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\queue.obj : E:\Dev\FreeRTOS\source\queue.c .AU& |
TODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\..\source\queue.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\..& |
\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za -& |
s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos -& |
ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\tasks.obj : E:\Dev\FreeRTOS\source\tasks.c .AU& |
TODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\..\source\tasks.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\..& |
\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za -& |
s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos -& |
ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\blockq.obj : E:\Dev\FreeRTOS\Demo\common\full\& |
blockq.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\common\full\blockq.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..& |
\..\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -z& |
a -s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=do& |
s -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\comtest.obj : E:\Dev\FreeRTOS\Demo\common\full& |
\comtest.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\common\full\comtest.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;.& |
.\..\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -& |
za -s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=d& |
os -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\death.obj : E:\Dev\FreeRTOS\Demo\common\full\d& |
eath.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\common\full\death.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\& |
..\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za& |
-s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos& |
-ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\flash.obj : E:\Dev\FreeRTOS\Demo\common\full\f& |
lash.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\common\full\flash.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\& |
..\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za& |
-s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos& |
-ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\integer.obj : E:\Dev\FreeRTOS\Demo\common\full& |
\integer.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\common\full\integer.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;.& |
.\..\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -& |
za -s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=d& |
os -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\pollq.obj : E:\Dev\FreeRTOS\Demo\common\full\p& |
ollq.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\common\full\pollq.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\& |
..\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za& |
-s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos& |
-ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\print.obj : E:\Dev\FreeRTOS\Demo\common\full\p& |
rint.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\common\full\print.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\& |
..\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za& |
-s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos& |
-ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\semtest.obj : E:\Dev\FreeRTOS\Demo\common\full& |
\semtest.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc ..\common\full\semtest.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;.& |
.\..\source\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -& |
za -s -dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=d& |
os -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\fileio.obj : E:\Dev\FreeRTOS\Demo\Flshlite\fil& |
eio\fileio.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc fileio\fileio.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\..\sour& |
ce\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za -s -dO& |
PEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\main.obj : E:\Dev\FreeRTOS\Demo\Flshlite\main.& |
c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc main.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\..\source\includ& |
e;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za -s -dOPEN_WATCO& |
M_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\partest.obj : E:\Dev\FreeRTOS\Demo\Flshlite\pa& |
rtest\partest.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc partest\partest.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\..\so& |
urce\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za -s -& |
dOPEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\serial.obj : E:\Dev\FreeRTOS\Demo\Flshlite\ser& |
ial\serial.c .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
*wcc serial\serial.c -i=D:\DEVTOOLS\OPENWA~1\h;..\common\include;..\..\sour& |
ce\include;..\..\source\portable\owatcom\16bitdos\common -w4 -e25 -za -s -dO& |
PEN_WATCOM_FLASH_LITE_186_PORT -j -zq -otexan -of -fpc -zu -1 -bt=dos -ml |
|
E:\Dev\FreeRTOS\Demo\Flshlite\rtosdemo.exe : E:\Dev\FreeRTOS\Demo\Flshlite\l& |
ist.obj E:\Dev\FreeRTOS\Demo\Flshlite\heap_2.obj E:\Dev\FreeRTOS\Demo\Flshli& |
te\portcomn.obj E:\Dev\FreeRTOS\Demo\Flshlite\port.obj E:\Dev\FreeRTOS\Demo\& |
Flshlite\queue.obj E:\Dev\FreeRTOS\Demo\Flshlite\tasks.obj E:\Dev\FreeRTOS\D& |
emo\Flshlite\blockq.obj E:\Dev\FreeRTOS\Demo\Flshlite\comtest.obj E:\Dev\Fre& |
eRTOS\Demo\Flshlite\death.obj E:\Dev\FreeRTOS\Demo\Flshlite\flash.obj E:\Dev& |
\FreeRTOS\Demo\Flshlite\integer.obj E:\Dev\FreeRTOS\Demo\Flshlite\pollq.obj & |
E:\Dev\FreeRTOS\Demo\Flshlite\print.obj E:\Dev\FreeRTOS\Demo\Flshlite\semtes& |
t.obj E:\Dev\FreeRTOS\Demo\Flshlite\fileio.obj E:\Dev\FreeRTOS\Demo\Flshlite& |
\main.obj E:\Dev\FreeRTOS\Demo\Flshlite\partest.obj E:\Dev\FreeRTOS\Demo\Fls& |
hlite\serial.obj E:\Dev\FreeRTOS\source\include\list.h E:\Dev\FreeRTOS\sourc& |
e\include\portable.h E:\Dev\FreeRTOS\source\include\projdefs.h E:\Dev\FreeRT& |
OS\source\include\queue.h E:\Dev\FreeRTOS\source\include\semphr.h E:\Dev\Fre& |
eRTOS\source\include\task.h E:\Dev\FreeRTOS\source\portable\owatcom\16bitdos& |
\common\portasm.h E:\Dev\FreeRTOS\source\portable\owatcom\16bitdos\flsh186\p& |
ortmacro.h E:\Dev\FreeRTOS\Demo\common\include\blockq.h E:\Dev\FreeRTOS\Demo& |
\common\include\comtest.h E:\Dev\FreeRTOS\Demo\common\include\death.h E:\Dev& |
\FreeRTOS\Demo\common\include\fileio.h E:\Dev\FreeRTOS\Demo\common\include\f& |
lash.h E:\Dev\FreeRTOS\Demo\common\include\flop.h E:\Dev\FreeRTOS\Demo\commo& |
n\include\partest.h E:\Dev\FreeRTOS\Demo\common\include\pollq.h E:\Dev\FreeR& |
TOS\Demo\common\include\print.h E:\Dev\FreeRTOS\Demo\common\include\semtest.& |
h E:\Dev\FreeRTOS\Demo\common\include\serial.h E:\Dev\FreeRTOS\Demo\Flshlite& |
\FreeRTOSConfig.h .AUTODEPEND |
@E: |
cd E:\Dev\FreeRTOS\Demo\Flshlite |
@%write rtosdemo.lk1 FIL list.obj,heap_2.obj,portcomn.obj,port.obj,queue.ob& |
j,tasks.obj,blockq.obj,comtest.obj,death.obj,flash.obj,integer.obj,pollq.obj& |
,print.obj,semtest.obj,fileio.obj,main.obj,partest.obj,serial.obj |
@%append rtosdemo.lk1 |
*wlink name rtosdemo SYS dos op m op maxe=25 op d op q op symf op el @rtosd& |
emo.lk1 |
|
/FreeRTOSConfig.h
0,0 → 1,102
/* |
FreeRTOS V6.1.1 - Copyright (C) 2011 Real Time Engineers Ltd. |
|
*************************************************************************** |
* * |
* If you are: * |
* * |
* + New to FreeRTOS, * |
* + Wanting to learn FreeRTOS or multitasking in general quickly * |
* + Looking for basic training, * |
* + Wanting to improve your FreeRTOS skills and productivity * |
* * |
* then take a look at the FreeRTOS books - available as PDF or paperback * |
* * |
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" * |
* http://www.FreeRTOS.org/Documentation * |
* * |
* A pdf reference manual is also available. Both are usually delivered * |
* to your inbox within 20 minutes to two hours when purchased between 8am * |
* and 8pm GMT (although please allow up to 24 hours in case of * |
* exceptional circumstances). Thank you for your support! * |
* * |
*************************************************************************** |
|
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. |
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 and the FreeRTOS license exception along with FreeRTOS; if not it |
can be viewed here: http://www.freertos.org/a00114.html and also obtained |
by writing to Richard Barry, contact details for whom are available on the |
FreeRTOS WEB site. |
|
1 tab == 4 spaces! |
|
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. |
*/ |
|
#ifndef FREERTOS_CONFIG_H |
#define FREERTOS_CONFIG_H |
|
#include <i86.h> |
#include <conio.h> |
|
/*----------------------------------------------------------- |
* Application specific definitions. |
* |
* These definitions should be adjusted for your particular hardware and |
* application requirements. |
* |
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE |
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. |
* |
* See http://www.freertos.org/a00110.html. |
*----------------------------------------------------------*/ |
|
#define configUSE_PREEMPTION 1 |
#define configUSE_IDLE_HOOK 0 |
#define configUSE_TICK_HOOK 0 |
#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) |
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 10 ) |
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) /* This can be made smaller if required. */ |
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 32 * 1024 ) ) |
#define configMAX_TASK_NAME_LEN ( 16 ) |
#define configUSE_TRACE_FACILITY 0 |
#define configUSE_16_BIT_TICKS 1 |
#define configIDLE_SHOULD_YIELD 1 |
|
/* Co-routine definitions. */ |
#define configUSE_CO_ROUTINES 0 |
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) |
|
/* Set the following definitions to 1 to include the API function, or zero |
to exclude the API function. */ |
|
#define INCLUDE_vTaskPrioritySet 0 |
#define INCLUDE_uxTaskPriorityGet 0 |
#define INCLUDE_vTaskDelete 1 |
#define INCLUDE_vTaskCleanUpResources 1 |
#define INCLUDE_vTaskSuspend 1 |
#define INCLUDE_vTaskDelayUntil 1 |
#define INCLUDE_vTaskDelay 1 |
|
|
|
|
#endif /* FREERTOS_CONFIG_H */ |
/main.c
0,0 → 1,406
/* |
FreeRTOS V6.1.1 - Copyright (C) 2011 Real Time Engineers Ltd. |
|
*************************************************************************** |
* * |
* If you are: * |
* * |
* + New to FreeRTOS, * |
* + Wanting to learn FreeRTOS or multitasking in general quickly * |
* + Looking for basic training, * |
* + Wanting to improve your FreeRTOS skills and productivity * |
* * |
* then take a look at the FreeRTOS books - available as PDF or paperback * |
* * |
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" * |
* http://www.FreeRTOS.org/Documentation * |
* * |
* A pdf reference manual is also available. Both are usually delivered * |
* to your inbox within 20 minutes to two hours when purchased between 8am * |
* and 8pm GMT (although please allow up to 24 hours in case of * |
* exceptional circumstances). Thank you for your support! * |
* * |
*************************************************************************** |
|
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. |
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 and the FreeRTOS license exception along with FreeRTOS; if not it |
can be viewed here: http://www.freertos.org/a00114.html and also obtained |
by writing to Richard Barry, contact details for whom are available on the |
FreeRTOS WEB site. |
|
1 tab == 4 spaces! |
|
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. |
*/ |
|
/* |
* Creates all the demo application tasks, then starts the scheduler. |
* |
* Main. c also creates a task called "Print". This only executes every five |
* seconds but has the highest priority so is guaranteed to get processor time. |
* Its main function is to check that all the other tasks are still operational. |
* Nearly all the tasks in the demo application maintain a unique count that is |
* incremented each time the task successfully completes its function. Should any |
* error occur within the task the count is permanently halted. The print task |
* checks the count of each task to ensure it has changed since the last time the |
* print task executed. If any count is found not to have changed the print task |
* displays an appropriate message, halts, and flashes the on board LED rapidly. |
* If all the tasks are still incrementing their unique counts the print task |
* displays an "OK" message. |
* |
* The LED flash tasks do not maintain a count as they already provide visual |
* feedback of their status. |
* |
* The print task blocks on the queue into which messages that require displaying |
* are posted. It will therefore only block for the full 5 seconds if no messages |
* are posted onto the queue. |
* |
* Main. c also provides a demonstration of how the trace visualisation utility can |
* be used, and how the scheduler can be stopped. |
* |
* On the Flashlite it is preferable not to try to write to the console during |
* real time operation. The built in LED is toggled every cycle of the print task |
* that does not encounter any errors, so the console IO may be removed if required. |
* The build in LED will start flashing rapidly if any task reports an error. |
*/ |
|
/* |
Changes from V1.01: |
|
+ Previously, if an error occurred in a task the on board LED was stopped from |
toggling. Now if an error occurs the check task enters an infinite loop, |
toggling the LED rapidly. |
|
Changes from V1.2.3 |
|
+ The integer and comtest tasks are now used when the cooperative scheduler |
is being used. Previously they were only used with the preemptive |
scheduler. |
|
Changes from V1.2.5 |
|
+ Made the communications RX task a higher priority. |
|
Changes from V2.0.0 |
|
+ Delay periods are now specified using variables and constants of |
portTickType rather than unsigned long. |
*/ |
|
#include <stdlib.h> |
#include <conio.h> |
#include "FreeRTOS.h" |
#include "task.h" |
#include "partest.h" |
#include "serial.h" |
|
/* Demo file headers. */ |
#include "BlockQ.h" |
#include "PollQ.h" |
#include "death.h" |
#include "flash.h" |
#include "integer.h" |
#include "print.h" |
#include "comtest.h" |
#include "fileio.h" |
#include "semtest.h" |
|
/* Priority definitions for all the tasks in the demo application. */ |
#define mainLED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) |
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) |
#define mainPRINT_TASK_PRIORITY ( tskIDLE_PRIORITY + 5 ) |
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 ) |
#define mainQUEUE_BLOCK_PRIORITY ( tskIDLE_PRIORITY + 3 ) |
#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 3 ) |
#define mainSEMAPHORE_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) |
|
#define mainPRINT_STACK_SIZE ( ( unsigned short ) 256 ) |
#define mainDEBUG_LOG_BUFFER_SIZE ( ( unsigned short ) 20480 ) |
|
/* Constant definitions for accessing the build in LED on the Flashlite 186. */ |
#define mainLED_REG_DIR ( ( unsigned short ) 0xff78 ) |
#define mainLED_REG ( ( unsigned short ) 0xff7a ) |
|
/* If an error is detected in a task then the vErrorChecks() task will enter |
an infinite loop flashing the LED at this rate. */ |
#define mainERROR_FLASH_RATE ( ( portTickType ) 100 / portTICK_RATE_MS ) |
|
/* Task function for the "Print" task as described at the top of the file. */ |
static void vErrorChecks( void *pvParameters ); |
|
/* Function that checks the unique count of all the other tasks as described at |
the top of the file. */ |
static void prvCheckOtherTasksAreStillRunning( void ); |
|
/* Functions to setup and use the built in LED on the Flashlite 186 board. */ |
static void prvToggleLED( void ); |
static void prvInitLED( void ); |
|
/* Key presses can be used to start/stop the trace visualisation utility or stop |
the scheduler. */ |
static void prvCheckForKeyPresses( void ); |
|
/* Buffer used by the trace visualisation utility. */ |
static char pcWriteBuffer[ mainDEBUG_LOG_BUFFER_SIZE ]; |
|
/*-----------------------------------------------------------*/ |
short main( void ) |
{ |
/* Initialise hardware and utilities. */ |
vParTestInitialise(); |
vPrintInitialise(); |
prvInitLED(); |
|
/* CREATE ALL THE DEMO APPLICATION TASKS. */ |
|
vStartComTestTasks( mainCOM_TEST_PRIORITY, serCOM2, ser38400 ); |
vStartIntegerMathTasks( tskIDLE_PRIORITY ); |
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY ); |
vStartBlockingQueueTasks( mainQUEUE_BLOCK_PRIORITY ); |
vStartLEDFlashTasks( mainLED_TASK_PRIORITY ); |
vStartSemaphoreTasks( mainSEMAPHORE_TASK_PRIORITY ); |
|
/* Create the "Print" task as described at the top of the file. */ |
xTaskCreate( vErrorChecks, "Print", mainPRINT_STACK_SIZE, NULL, mainPRINT_TASK_PRIORITY, NULL ); |
|
/* This task has to be created last as it keeps account of the number of tasks |
it expects to see running. */ |
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY ); |
|
/* Set the scheduler running. This function will not return unless a task |
calls vTaskEndScheduler(). */ |
vTaskStartScheduler(); |
|
return 1; |
} |
/*-----------------------------------------------------------*/ |
|
static void vErrorChecks( void *pvParameters ) |
{ |
portTickType xExpectedWakeTime; |
const portTickType xPrintRate = ( portTickType ) 5000 / portTICK_RATE_MS; |
const long lMaxAllowableTimeDifference = ( long ) 0; |
portTickType xWakeTime; |
long lTimeDifference; |
const char *pcReceivedMessage; |
const char * const pcTaskBlockedTooLongMsg = "Print task blocked too long!\r\n"; |
|
/* Stop warnings. */ |
( void ) pvParameters; |
|
/* Loop continuously, blocking, then checking all the other tasks are still |
running, before blocking once again. This task blocks on the queue of messages |
that require displaying so will wake either by its time out expiring, or a |
message becoming available. */ |
for( ;; ) |
{ |
/* Calculate the time we will unblock if no messages are received |
on the queue. This is used to check that we have not blocked for too long. */ |
xExpectedWakeTime = xTaskGetTickCount(); |
xExpectedWakeTime += xPrintRate; |
|
/* Block waiting for either a time out or a message to be posted that |
required displaying. */ |
pcReceivedMessage = pcPrintGetNextMessage( xPrintRate ); |
|
/* Was a message received? */ |
if( pcReceivedMessage == NULL ) |
{ |
/* A message was not received so we timed out, did we unblock at the |
expected time? */ |
xWakeTime = xTaskGetTickCount(); |
|
/* Calculate the difference between the time we unblocked and the |
time we should have unblocked. */ |
if( xWakeTime > xExpectedWakeTime ) |
{ |
lTimeDifference = ( long ) ( xWakeTime - xExpectedWakeTime ); |
} |
else |
{ |
lTimeDifference = ( long ) ( xExpectedWakeTime - xWakeTime ); |
} |
|
if( lTimeDifference > lMaxAllowableTimeDifference ) |
{ |
/* We blocked too long - create a message that will get |
printed out the next time around. */ |
vPrintDisplayMessage( &pcTaskBlockedTooLongMsg ); |
} |
|
/* Check the other tasks are still running, just in case. */ |
prvCheckOtherTasksAreStillRunning(); |
} |
else |
{ |
/* We unblocked due to a message becoming available. Send the message |
for printing. */ |
vDisplayMessage( pcReceivedMessage ); |
} |
|
/* Key presses are used to invoke the trace visualisation utility, or |
end the program. */ |
prvCheckForKeyPresses(); |
} |
} /*lint !e715 !e818 pvParameters is not used but all task functions must take this form. */ |
/*-----------------------------------------------------------*/ |
|
static void prvCheckForKeyPresses( void ) |
{ |
#ifdef USE_STDIO |
|
short sIn; |
|
|
taskENTER_CRITICAL(); |
sIn = kbhit(); |
taskEXIT_CRITICAL(); |
|
if( sIn ) |
{ |
unsigned long ulBufferLength; |
|
/* Key presses can be used to start/stop the trace utility, or end the |
program. */ |
sIn = getch(); |
switch( sIn ) |
{ |
/* Only define keys for turning on and off the trace if the trace |
is being used. */ |
#if configUSE_TRACE_FACILITY == 1 |
case 't' : vTaskList( pcWriteBuffer ); |
vWriteMessageToDisk( pcWriteBuffer ); |
break; |
|
case 's' : vTaskStartTrace( pcWriteBuffer, mainDEBUG_LOG_BUFFER_SIZE ); |
break; |
|
case 'e' : ulBufferLength = ulTaskEndTrace(); |
vWriteBufferToDisk( pcWriteBuffer, ulBufferLength ); |
break; |
#endif |
|
default : vTaskEndScheduler(); |
break; |
} |
} |
|
#else |
( void ) pcWriteBuffer; |
#endif |
} |
/*-----------------------------------------------------------*/ |
|
static void prvCheckOtherTasksAreStillRunning( void ) |
{ |
short sErrorHasOccurred = pdFALSE; |
|
if( xAreComTestTasksStillRunning() != pdTRUE ) |
{ |
vDisplayMessage( "Com test count unchanged!\r\n" ); |
sErrorHasOccurred = pdTRUE; |
} |
|
if( xAreIntegerMathsTaskStillRunning() != pdTRUE ) |
{ |
vDisplayMessage( "Integer maths task count unchanged!\r\n" ); |
sErrorHasOccurred = pdTRUE; |
} |
|
if( xAreBlockingQueuesStillRunning() != pdTRUE ) |
{ |
vDisplayMessage( "Blocking queues count unchanged!\r\n" ); |
sErrorHasOccurred = pdTRUE; |
} |
|
if( xArePollingQueuesStillRunning() != pdTRUE ) |
{ |
vDisplayMessage( "Polling queue count unchanged!\r\n" ); |
sErrorHasOccurred = pdTRUE; |
} |
|
if( xIsCreateTaskStillRunning() != pdTRUE ) |
{ |
vDisplayMessage( "Incorrect number of tasks running!\r\n" ); |
sErrorHasOccurred = pdTRUE; |
} |
|
if( xAreSemaphoreTasksStillRunning() != pdTRUE ) |
{ |
vDisplayMessage( "Semaphore take count unchanged!\r\n" ); |
sErrorHasOccurred = pdTRUE; |
} |
|
if( sErrorHasOccurred == pdFALSE ) |
{ |
vDisplayMessage( "OK " ); |
/* Toggle the LED if everything is okay so we know if an error occurs even if not |
using console IO. */ |
prvToggleLED(); |
} |
else |
{ |
for( ;; ) |
{ |
/* An error has occurred in one of the tasks. Don't go any further and |
flash the LED rapidly in case console IO is not being used. */ |
prvToggleLED(); |
vTaskDelay( mainERROR_FLASH_RATE ); |
} |
} |
} |
/*-----------------------------------------------------------*/ |
|
static void prvInitLED( void ) |
{ |
unsigned short usPortDirection; |
const unsigned short usLEDOut = 0x400; |
|
/* Set the LED bit to an output. */ |
|
usPortDirection = inpw( mainLED_REG_DIR ); |
usPortDirection &= ~usLEDOut; |
outpw( mainLED_REG_DIR, usPortDirection ); |
} |
/*-----------------------------------------------------------*/ |
|
static void prvToggleLED( void ) |
{ |
static short sLED = pdTRUE; |
unsigned short usLEDState; |
const unsigned short usLEDBit = 0x400; |
|
/* Flip the state of the LED. */ |
usLEDState = inpw( mainLED_REG ); |
if( sLED ) |
{ |
usLEDState &= ~usLEDBit; |
} |
else |
{ |
usLEDState |= usLEDBit; |
} |
outpw( mainLED_REG, usLEDState ); |
|
sLED = !sLED; |
} |
|
|
/FileIO/fileIO.c
0,0 → 1,127
/* |
FreeRTOS V6.1.1 - Copyright (C) 2011 Real Time Engineers Ltd. |
|
*************************************************************************** |
* * |
* If you are: * |
* * |
* + New to FreeRTOS, * |
* + Wanting to learn FreeRTOS or multitasking in general quickly * |
* + Looking for basic training, * |
* + Wanting to improve your FreeRTOS skills and productivity * |
* * |
* then take a look at the FreeRTOS books - available as PDF or paperback * |
* * |
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" * |
* http://www.FreeRTOS.org/Documentation * |
* * |
* A pdf reference manual is also available. Both are usually delivered * |
* to your inbox within 20 minutes to two hours when purchased between 8am * |
* and 8pm GMT (although please allow up to 24 hours in case of * |
* exceptional circumstances). Thank you for your support! * |
* * |
*************************************************************************** |
|
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. |
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 and the FreeRTOS license exception along with FreeRTOS; if not it |
can be viewed here: http://www.freertos.org/a00114.html and also obtained |
by writing to Richard Barry, contact details for whom are available on the |
FreeRTOS WEB site. |
|
1 tab == 4 spaces! |
|
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. |
*/ |
|
#include <stdio.h> |
#include <conio.h> |
#include <string.h> |
|
/* Scheduler include files. */ |
#include "FreeRTOS.h" |
#include "task.h" |
|
/* Demo program include files. */ |
#include "fileio.h" |
|
void vDisplayMessage( const char * const pcMessageToPrint ) |
{ |
#ifdef USE_STDIO |
taskENTER_CRITICAL(); |
printf( "%s", pcMessageToPrint ); |
fflush( stdout ); |
taskEXIT_CRITICAL(); |
#else |
/* Stop warnings. */ |
( void ) pcMessageToPrint; |
#endif |
} |
/*-----------------------------------------------------------*/ |
|
void vWriteMessageToDisk( const char * const pcMessage ) |
{ |
#ifdef USE_STDIO |
const char * const pcFileName = "c:\\RTOSlog.txt"; |
const char * const pcSeparator = "\r\n-----------------------\r\n"; |
FILE *pf; |
|
taskENTER_CRITICAL(); |
{ |
pf = fopen( pcFileName, "a" ); |
if( pf != NULL ) |
{ |
fwrite( pcMessage, strlen( pcMessage ), ( unsigned short ) 1, pf ); |
fwrite( pcSeparator, strlen( pcSeparator ), ( unsigned short ) 1, pf ); |
fclose( pf ); |
} |
} |
taskEXIT_CRITICAL(); |
#else |
/* Stop warnings. */ |
( void ) pcMessage; |
#endif /*USE_STDIO*/ |
} |
/*-----------------------------------------------------------*/ |
|
void vWriteBufferToDisk( const char * const pcBuffer, unsigned long ulBufferLength ) |
{ |
#ifdef USE_STDIO |
const char * const pcFileName = "c:\\trace.bin"; |
FILE *pf; |
|
taskENTER_CRITICAL(); |
{ |
pf = fopen( pcFileName, "wb" ); |
if( pf ) |
{ |
fwrite( pcBuffer, ( size_t ) ulBufferLength, ( unsigned short ) 1, pf ); |
fclose( pf ); |
} |
} |
taskEXIT_CRITICAL(); |
#else |
/* Stop warnings. */ |
( void ) pcBuffer; |
( void ) ulBufferLength; |
#endif /*USE_STDIO*/ |
} |
|
|
/rtosdemo.DSW
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
rtosdemo.DSW
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: rtosdemo.tgt
===================================================================
--- rtosdemo.tgt (nonexistent)
+++ rtosdemo.tgt (revision 616)
@@ -0,0 +1,1159 @@
+40
+targetIdent
+0
+MProject
+1
+MComponent
+0
+2
+WString
+3
+EXE
+3
+WString
+5
+de6en
+1
+0
+0
+4
+MCommand
+0
+5
+MCommand
+0
+6
+MItem
+12
+rtosdemo.exe
+7
+WString
+3
+EXE
+8
+WVList
+4
+9
+MRState
+10
+WString
+5
+WLINK
+11
+WString
+14
+?????Debug All
+1
+0
+12
+MRState
+13
+WString
+5
+WLINK
+14
+WString
+16
+?????Debug Dwarf
+1
+1
+15
+MCState
+16
+WString
+5
+WLINK
+17
+WString
+11
+?????Dosseg
+0
+1
+18
+MCState
+19
+WString
+5
+WLINK
+20
+WString
+24
+?????Eliminate dead code
+0
+1
+21
+WVList
+2
+22
+ActionStates
+23
+WString
+6
+&Debug
+24
+WVList
+0
+25
+ActionStates
+26
+WString
+5
+&Make
+27
+WVList
+0
+-1
+1
+1
+0
+28
+WPickList
+40
+29
+MItem
+3
+*.c
+30
+WString
+4
+COBJ
+31
+WVList
+26
+32
+MVState
+33
+WString
+3
+WCC
+34
+WString
+25
+d????Include directories:
+1
+35
+WString
+97
+$(%watcom)\h;..\common\include;..\..\source\include;..\..\source\portable\owatcom\16bitdos\common
+0
+36
+MCState
+37
+WString
+3
+WCC
+38
+WString
+26
+?????Force ANSI compliance
+1
+1
+39
+MCState
+40
+WString
+3
+WCC
+41
+WString
+33
+?????Disable stack depth checking
+1
+1
+42
+MVState
+43
+WString
+3
+WCC
+44
+WString
+23
+?????Macro definitions:
+1
+45
+WString
+43
+OPEN_WATCOM_FLASH_LITE_186_PORT DEBUG_BUILD
+0
+46
+MCState
+47
+WString
+3
+WCC
+48
+WString
+34
+?????Change char default to signed
+1
+1
+49
+MRState
+50
+WString
+3
+WCC
+51
+WString
+21
+?????Compiler default
+1
+0
+52
+MRState
+53
+WString
+3
+WCC
+54
+WString
+21
+?????Compiler default
+1
+0
+55
+MRState
+56
+WString
+3
+WCC
+57
+WString
+25
+?????Floating-point calls
+1
+1
+58
+MCState
+59
+WString
+3
+WCC
+60
+WString
+31
+???e?SS not assumed equal to DS
+1
+1
+61
+MRState
+62
+WString
+3
+WCC
+63
+WString
+9
+??6??8086
+1
+0
+64
+MRState
+65
+WString
+3
+WCC
+66
+WString
+10
+??6??80186
+1
+1
+67
+MVState
+68
+WString
+3
+WCC
+69
+WString
+25
+d????Include directories:
+0
+70
+WString
+97
+$(%watcom)\h;..\common\include;..\..\source\include;..\..\source\portable\owatcom\16bitdos\common
+0
+71
+MCState
+72
+WString
+3
+WCC
+73
+WString
+26
+?????Force ANSI compliance
+0
+1
+74
+MCState
+75
+WString
+3
+WCC
+76
+WString
+33
+?????Disable stack depth checking
+0
+1
+77
+MVState
+78
+WString
+3
+WCC
+79
+WString
+23
+?????Macro definitions:
+0
+80
+WString
+31
+OPEN_WATCOM_FLASH_LITE_186_PORT
+0
+81
+MCState
+82
+WString
+3
+WCC
+83
+WString
+34
+?????Change char default to signed
+0
+1
+84
+MRState
+85
+WString
+3
+WCC
+86
+WString
+33
+?????Do not generate stack frames
+0
+0
+87
+MRState
+88
+WString
+3
+WCC
+89
+WString
+23
+?????Generate as needed
+0
+1
+90
+MRState
+91
+WString
+3
+WCC
+92
+WString
+29
+?????No debugging information
+0
+1
+93
+MRState
+94
+WString
+3
+WCC
+95
+WString
+28
+?????Line number information
+0
+0
+96
+MRState
+97
+WString
+3
+WCC
+98
+WString
+21
+?????Compiler default
+0
+0
+99
+MRState
+100
+WString
+3
+WCC
+101
+WString
+21
+?????Compiler default
+0
+0
+102
+MRState
+103
+WString
+3
+WCC
+104
+WString
+25
+?????Floating-point calls
+0
+1
+105
+MCState
+106
+WString
+3
+WCC
+107
+WString
+31
+???e?SS not assumed equal to DS
+0
+1
+108
+MRState
+109
+WString
+3
+WCC
+110
+WString
+9
+??6??8086
+0
+0
+111
+MRState
+112
+WString
+3
+WCC
+113
+WString
+10
+??6??80186
+0
+1
+114
+WVList
+0
+-1
+1
+1
+0
+115
+MItem
+19
+..\..\source\list.c
+116
+WString
+4
+COBJ
+117
+WVList
+0
+118
+WVList
+0
+29
+1
+1
+0
+119
+MItem
+38
+..\..\SOURCE\PORTABLE\MEMMANG\heap_2.c
+120
+WString
+4
+COBJ
+121
+WVList
+0
+122
+WVList
+0
+29
+1
+1
+0
+123
+MItem
+56
+..\..\source\portable\owatcom\16bitdos\common\portcomn.c
+124
+WString
+4
+COBJ
+125
+WVList
+0
+126
+WVList
+0
+29
+1
+1
+0
+127
+MItem
+53
+..\..\source\portable\owatcom\16bitdos\flsh186\port.c
+128
+WString
+4
+COBJ
+129
+WVList
+0
+130
+WVList
+0
+29
+1
+1
+0
+131
+MItem
+20
+..\..\source\queue.c
+132
+WString
+4
+COBJ
+133
+WVList
+0
+134
+WVList
+0
+29
+1
+1
+0
+135
+MItem
+20
+..\..\source\tasks.c
+136
+WString
+4
+COBJ
+137
+WVList
+0
+138
+WVList
+0
+29
+1
+1
+0
+139
+MItem
+23
+..\common\full\blockq.c
+140
+WString
+4
+COBJ
+141
+WVList
+0
+142
+WVList
+0
+29
+1
+1
+0
+143
+MItem
+24
+..\common\full\comtest.c
+144
+WString
+4
+COBJ
+145
+WVList
+0
+146
+WVList
+0
+29
+1
+1
+0
+147
+MItem
+22
+..\common\full\death.c
+148
+WString
+4
+COBJ
+149
+WVList
+0
+150
+WVList
+0
+29
+1
+1
+0
+151
+MItem
+22
+..\common\full\flash.c
+152
+WString
+4
+COBJ
+153
+WVList
+0
+154
+WVList
+0
+29
+1
+1
+0
+155
+MItem
+24
+..\common\full\integer.c
+156
+WString
+4
+COBJ
+157
+WVList
+0
+158
+WVList
+0
+29
+1
+1
+0
+159
+MItem
+22
+..\common\full\pollq.c
+160
+WString
+4
+COBJ
+161
+WVList
+0
+162
+WVList
+0
+29
+1
+1
+0
+163
+MItem
+22
+..\common\full\print.c
+164
+WString
+4
+COBJ
+165
+WVList
+0
+166
+WVList
+0
+29
+1
+1
+0
+167
+MItem
+24
+..\common\full\semtest.c
+168
+WString
+4
+COBJ
+169
+WVList
+0
+170
+WVList
+0
+29
+1
+1
+0
+171
+MItem
+15
+fileio\fileio.c
+172
+WString
+4
+COBJ
+173
+WVList
+0
+174
+WVList
+0
+29
+1
+1
+0
+175
+MItem
+6
+main.c
+176
+WString
+4
+COBJ
+177
+WVList
+0
+178
+WVList
+0
+29
+1
+1
+0
+179
+MItem
+17
+partest\partest.c
+180
+WString
+4
+COBJ
+181
+WVList
+0
+182
+WVList
+0
+29
+1
+1
+0
+183
+MItem
+15
+serial\serial.c
+184
+WString
+4
+COBJ
+185
+WVList
+0
+186
+WVList
+0
+29
+1
+1
+0
+187
+MItem
+3
+*.h
+188
+WString
+3
+NIL
+189
+WVList
+0
+190
+WVList
+0
+-1
+1
+0
+0
+191
+MItem
+27
+..\..\source\include\list.h
+192
+WString
+3
+NIL
+193
+WVList
+0
+194
+WVList
+0
+187
+1
+1
+0
+195
+MItem
+31
+..\..\source\include\portable.h
+196
+WString
+3
+NIL
+197
+WVList
+0
+198
+WVList
+0
+187
+1
+1
+0
+199
+MItem
+31
+..\..\source\include\projdefs.h
+200
+WString
+3
+NIL
+201
+WVList
+0
+202
+WVList
+0
+187
+1
+1
+0
+203
+MItem
+28
+..\..\source\include\queue.h
+204
+WString
+3
+NIL
+205
+WVList
+0
+206
+WVList
+0
+187
+1
+1
+0
+207
+MItem
+29
+..\..\source\include\semphr.h
+208
+WString
+3
+NIL
+209
+WVList
+0
+210
+WVList
+0
+187
+1
+1
+0
+211
+MItem
+27
+..\..\source\include\task.h
+212
+WString
+3
+NIL
+213
+WVList
+0
+214
+WVList
+0
+187
+1
+1
+0
+215
+MItem
+55
+..\..\source\portable\owatcom\16bitdos\common\portasm.h
+216
+WString
+3
+NIL
+217
+WVList
+0
+218
+WVList
+0
+187
+1
+1
+0
+219
+MItem
+58
+..\..\source\portable\owatcom\16bitdos\flsh186\portmacro.h
+220
+WString
+3
+NIL
+221
+WVList
+0
+222
+WVList
+0
+187
+1
+1
+0
+223
+MItem
+26
+..\common\include\blockq.h
+224
+WString
+3
+NIL
+225
+WVList
+0
+226
+WVList
+0
+187
+1
+1
+0
+227
+MItem
+27
+..\common\include\comtest.h
+228
+WString
+3
+NIL
+229
+WVList
+0
+230
+WVList
+0
+187
+1
+1
+0
+231
+MItem
+25
+..\common\include\death.h
+232
+WString
+3
+NIL
+233
+WVList
+0
+234
+WVList
+0
+187
+1
+1
+0
+235
+MItem
+26
+..\common\include\fileio.h
+236
+WString
+3
+NIL
+237
+WVList
+0
+238
+WVList
+0
+187
+1
+1
+0
+239
+MItem
+25
+..\common\include\flash.h
+240
+WString
+3
+NIL
+241
+WVList
+0
+242
+WVList
+0
+187
+1
+1
+0
+243
+MItem
+24
+..\common\include\flop.h
+244
+WString
+3
+NIL
+245
+WVList
+0
+246
+WVList
+0
+187
+1
+1
+0
+247
+MItem
+27
+..\common\include\partest.h
+248
+WString
+3
+NIL
+249
+WVList
+0
+250
+WVList
+0
+187
+1
+1
+0
+251
+MItem
+25
+..\common\include\pollq.h
+252
+WString
+3
+NIL
+253
+WVList
+0
+254
+WVList
+0
+187
+1
+1
+0
+255
+MItem
+25
+..\common\include\print.h
+256
+WString
+3
+NIL
+257
+WVList
+0
+258
+WVList
+0
+187
+1
+1
+0
+259
+MItem
+27
+..\common\include\semtest.h
+260
+WString
+3
+NIL
+261
+WVList
+0
+262
+WVList
+0
+187
+1
+1
+0
+263
+MItem
+26
+..\common\include\serial.h
+264
+WString
+3
+NIL
+265
+WVList
+0
+266
+WVList
+0
+187
+1
+1
+0
+267
+MItem
+16
+FreeRTOSConfig.h
+268
+WString
+3
+NIL
+269
+WVList
+0
+270
+WVList
+0
+187
+1
+1
+0
Index: rtosdemo.wpj
===================================================================
--- rtosdemo.wpj (nonexistent)
+++ rtosdemo.wpj (revision 616)
@@ -0,0 +1,43 @@
+40
+projectIdent
+0
+VpeMain
+1
+WRect
+-25
+-34
+10291
+10026
+2
+MProject
+3
+MCommand
+0
+4
+MCommand
+0
+1
+5
+WFileName
+12
+rtosdemo.tgt
+6
+WVList
+1
+7
+VComponent
+8
+WRect
+0
+0
+7200
+5888
+0
+0
+9
+WFileName
+12
+rtosdemo.tgt
+0
+19
+7
Index: RTOSDEMO.IDE
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: RTOSDEMO.IDE
===================================================================
--- RTOSDEMO.IDE (nonexistent)
+++ RTOSDEMO.IDE (revision 616)
RTOSDEMO.IDE
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property