diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/ExampleISR.S b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/ExampleISR.S
index d57aa281d..50ffe32d1 100644
--- a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/ExampleISR.S
+++ b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/ExampleISR.S
@@ -73,7 +73,8 @@
*/
/*
- * This file defines the RegTest tasks as described at the top of main.c
+ * This file defines the assembler wrapper for the example interrupt that is
+ * defined in main.c. The wrapper is the interrupt entry point.
*/
/* ISR_Support.h contains the definitions of portSAVE_CONTEXT() and
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/LED.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/LED.h
index 5e55bbd3a..57f866422 100644
--- a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/LED.h
+++ b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/LED.h
@@ -85,8 +85,8 @@
#endif /* YRPBRL78G13 */
#ifdef YRDKRL78G14
- #define LED_INIT() PM4_bit.no1 = 0
#define LED_BIT ( P4_bit.no1 )
+ #define LED_INIT() PM4_bit.no1 = 0
#endif /* YRDKRL78G14 */
#ifdef RSKRL78G1C
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main.c
index 2529a68fe..9e7756947 100644
--- a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main.c
+++ b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main.c
@@ -219,20 +219,5 @@ volatile size_t xFreeHeapSpace;
/* Remove compiler warning about xFreeHeapSpace being set but never used. */
( void ) xFreeHeapSpace;
}
-/*-----------------------------------------------------------*/
-void vAssertCalled( void )
-{
-volatile unsigned long ul = 0;
- taskENTER_CRITICAL();
- {
- /* Set ul to a non-zero value using the debugger to step out of this
- function. */
- while( ul == 0 )
- {
- __asm volatile( "NOP" );
- }
- }
- taskEXIT_CRITICAL();
-}
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/ExampleISR.s87 b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/ExampleISR.s87
new file mode 100644
index 000000000..df5fcba56
--- /dev/null
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/ExampleISR.s87
@@ -0,0 +1,134 @@
+; FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
+;
+; FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
+; http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
+;
+; ***************************************************************************
+; * *
+; * FreeRTOS tutorial books are available in pdf and paperback. *
+; * Complete, revised, and edited pdf reference manuals are also *
+; * available. *
+; * *
+; * Purchasing FreeRTOS documentation will not only help you, by *
+; * ensuring you get running as quickly as possible and with an *
+; * in-depth knowledge of how to use FreeRTOS, it will also help *
+; * the FreeRTOS project to continue with its mission of providing *
+; * professional grade, cross platform, de facto standard solutions *
+; * for microcontrollers - completely free of charge! *
+; * *
+; * >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
+; * *
+; * Thank you for using FreeRTOS, and 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 modification 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 itcan be
+; viewed here: http://www.freertos.org/a00114.html and also obtained by
+; writing to Real Time Engineers Ltd., contact details for whom are available
+; on the FreeRTOS WEB site.
+;
+; 1 tab == 4 spaces!
+;
+; ***************************************************************************
+; * *
+; * Having a problem? Start by reading the FAQ "My application does *
+; * not run, what could be wrong?" *
+; * *
+; * http://www.FreeRTOS.org/FAQHelp.html *
+; * *
+; ***************************************************************************
+;
+;
+; http://www.FreeRTOS.org - Documentation, books, training, latest versions,
+; license and Real Time Engineers Ltd. contact details.
+;
+; http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
+; including FreeRTOS+Trace - an indispensable productivity tool, and our new
+; fully thread aware and reentrant UDP/IP stack.
+;
+; http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
+; Integrity Systems, who sell the code with commercial support,
+; indemnification and middleware, under the OpenRTOS brand.
+;
+; http://www.SafeRTOS.com - High Integrity Systems also provide a safety
+; engineered and independently SIL3 certified version for use in safety and
+; mission critical applications that require provable dependability.
+
+;*
+; * This file defines the assembler wrapper for the example interrupt that is
+; * defined in main.c. The wrapper is the interrupt entry point.
+; *
+
+; ISR_Support.h contains the definitions of portSAVE_CONTEXT() and
+; portRESTORE_CONTEXT().
+#include "ISR_Support.h"
+
+ PUBLIC vANExampleISR_ASM_Wrapper
+ EXTERN vAnExampleISR_C_Handler
+
+ RSEG CODE:CODE
+
+; *
+; * This demo does not include a functional interrupt service routine - so
+; * this dummy handler (which is not actually installed) is provided as an
+; * example of how an ISR that needs to cause a context switch needs to be
+; * implemented. ISRs that do not cause a context switch have no special
+; * requirements and can be written as per the compiler documentation.
+; *
+; * This assembly wrapper function calls the main handler, which is called
+; * vAnExampleISR_C_Handler(), and is implemented in main.c. See the
+; * documentation page for this demo on the FreeRTOS.org website for full
+; * instructions.
+; *
+; * NOTE: vANExampleISR_ASM_Wrapper needs to be installed into the relevant
+; * vector, an example of how to do this from an assembly file is locate at
+; * the bottom of this file.
+; *
+
+ vANExampleISR_ASM_Wrapper:
+
+; portSAVE_CONTEXT() must be the first thing called in the ASM
+; wrapper.
+ portSAVE_CONTEXT
+
+; Once the context has been saved the C handler can be called.
+ call !!vAnExampleISR_C_Handler
+
+; Finally the ISR must end with a call to portRESTORE_CONTEXT()
+; followed by a reti instruction to return from the interrupt to whichever
+; task is now the task selected to run (which may be different to the task
+; that was running before the interrupt started).
+ portRESTORE_CONTEXT
+ reti
+
+
+; The interrupt handler can be installed into the vector table in the same
+; assembly file.
+
+; Ensure the vector table segement is used.
+ COMMON INTVEC:CODE:ROOT(1)
+;
+; Place a pointer to the asm wrapper at the correct index into the vector
+; table. Note 56 is used is purely as an example. The correct vector
+; number for the interrupt being installed must be used.
+ ORG 58
+ DW vANExampleISR_ASM_Wrapper
+
+ END
+
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h
index a56fe55f8..8492698f8 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h
@@ -131,7 +131,7 @@ to exclude the API function. */
#define INCLUDE_vTaskDelete 0
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
-#define INCLUDE_vTaskDelayUntil 0
+#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetIdleTaskHandle 0
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/LED.h b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/LED.h
index b51c12516..57f866422 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/LED.h
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/LED.h
@@ -85,8 +85,8 @@
#endif /* YRPBRL78G13 */
#ifdef YRDKRL78G14
- #define LED_BIT ( P1_bit.no0 )
- #define LED_INIT() P1 &= 0xFE; PM1 &= 0xFE
+ #define LED_BIT ( P4_bit.no1 )
+ #define LED_INIT() PM4_bit.no1 = 0
#endif /* YRDKRL78G14 */
#ifdef RSKRL78G1C
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewd b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewd
index be7f83aed..726983066 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewd
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewd
@@ -332,7 +332,7 @@
DebugRunToEnable
- 0
+ 1
DebugRunToName
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp
index 4d47a2fce..48072d431 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp
@@ -918,12 +918,12 @@
GenCodeModel
0
- 0
+ 1
GenDataModel
0
- 0
+ 1
GenNearConstLocation
@@ -970,11 +970,11 @@
GenRTConfigPath
- $TOOLKIT_DIR$\LIB\dlrl78nn2n.h
+ $TOOLKIT_DIR$\LIB\dlrl78ff2n.h
GenRTLibraryPath
- $TOOLKIT_DIR$\LIB\dlrl78ff2n.r87
+ $TOOLKIT_DIR$\LIB\dlrl78nn2n.r87
GenHwSupport
@@ -1379,7 +1379,7 @@
AsmDefines
- __FAR_DATA_MODEL__
+ __NEAR_DATA_MODEL__
AsmPreprocOutput
@@ -2688,13 +2688,22 @@
$PROJ_DIR$\..\Common\Minimal\dynamic.c
+
+ $PROJ_DIR$\main_full.c
+
$PROJ_DIR$\..\Common\Minimal\PollQ.c
+
+ $PROJ_DIR$\ExampleISR.s87
+
$PROJ_DIR$\main.c
+
+ $PROJ_DIR$\main_blinky.c
+
$PROJ_DIR$\RegTest.s87
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87 b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87
index d57fbcfaf..56b399790 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87
@@ -1,6 +1,6 @@
;/*
; FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
-;
+;
;
; ***************************************************************************
; * *
@@ -62,8 +62,8 @@
; Functions implemented in this file
;------------------------------------------------------------------------------
- PUBLIC vRegTest1
- PUBLIC vRegTest2
+ PUBLIC vRegTest1Task
+ PUBLIC vRegTest2Task
; Functions and variables used by this file
;------------------------------------------------------------------------------
@@ -84,7 +84,7 @@
;
;------------------------------------------------------------------------------
RSEG CODE:CODE
-vRegTest1:
+vRegTest1Task:
; First fill the registers.
MOVW AX, #0x1122
@@ -92,13 +92,13 @@ vRegTest1:
MOVW DE, #0x5566
MOVW HL, #0x7788
MOV CS, #0x01
-
+
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
; ES is not saved or restored when using the near memory model so only
; test it when using the far model.
MOV ES, #0x02
-
+
#endif
loop1:
@@ -114,18 +114,18 @@ loop1:
; Jump over the branch to vRegTestError() if the register contained the
; expected value - otherwise flag an error by executing vRegTestError().
- BR vRegTestError
+ BR vRegTestError
; Repeat for all the registers.
MOVW AX, BC
CMPW AX, #0x3344
BZ +5
- BR vRegTestError
+ BR vRegTestError
MOVW AX, DE
CMPW AX, #0x5566
BZ +5
- BR vRegTestError
- MOVW AX, HL
+ BR vRegTestError
+ MOVW AX, HL
CMPW AX, #0x7788
BZ +5
BR vRegTestError
@@ -165,7 +165,7 @@ loop1:
;
;------------------------------------------------------------------------------
RSEG CODE:CODE
-vRegTest2:
+vRegTest2Task:
MOVW AX, #0x99aa
MOVW BC, #0xbbcc
@@ -175,23 +175,23 @@ vRegTest2:
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
- MOV ES, #0x04
+ MOV ES, #0x04
#endif
loop2:
CMPW AX, #0x99aa
BZ +5
- BR vRegTestError
+ BR vRegTestError
MOVW AX, BC
CMPW AX, #0xbbcc
BZ +5
- BR vRegTestError
+ BR vRegTestError
MOVW AX, DE
CMPW AX, #0xddee
BZ +5
- BR vRegTestError
- MOVW AX, HL
+ BR vRegTestError
+ MOVW AX, HL
CMPW AX, #0xff12
BZ +5
BR vRegTestError
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main.c b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main.c
index 753aa7a52..e16156d0a 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main.c
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main.c
@@ -72,104 +72,52 @@
mission critical applications that require provable dependability.
*/
-/*
+/******************************************************************************
+ * This project provides two demo applications. A simple blinky style project,
+ * and a more comprehensive test and demo application. The
+ * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting (defined in this file) is used to
+ * select between the two. The simply blinky demo is implemented and described
+ * in main_blinky.c. The more comprehensive test and demo application is
+ * implemented and described in main_full.c.
+ *
+ * This file implements the code that is not demo specific, including the
+ * hardware setup and FreeRTOS hook functions.
+ *
+ * This project does not provide an example of how to write an RTOS compatible
+ * interrupt service routine (other than the tick interrupt itself), so this
+ * file contains the function vAnExampleISR_C_Handler() as a dummy example (that
+ * is not actually installed) that can be used as a reference. Also see the
+ * file ExampleISR.s87, and the documentation page for this demo on the
+ * FreeRTOS.org website for full instructions.
*
* ENSURE TO READ THE DOCUMENTATION PAGE FOR THIS PORT AND DEMO APPLICATION ON
* THE http://www.FreeRTOS.org WEB SITE FOR FULL INFORMATION ON USING THIS DEMO
* APPLICATION, AND ITS ASSOCIATE FreeRTOS ARCHITECTURE PORT!
*
- *
- * main() creates the demo application tasks and timers, then starts the
- * scheduler.
- *
- * This demo is configured to run on the RL78/G13 Promotion Board, which is
- * fitted with a R5F100LEA microcontroller. The R5F100LEA contains a little
- * under 4K bytes of usable internal RAM. The RAM size restricts the number of
- * demo tasks that can be created, and the demo creates 13 tasks, 4 queues and
- * two timers. The RL78 range does however include parts with up to 32K bytes
- * of RAM (at the time of writing). Using FreeRTOS on such a part will allow an
- * application to make a more comprehensive use of FreeRTOS tasks, and other
- * FreeRTOS features.
- *
- * In addition to the standard demo tasks, the following tasks, tests and timers
- * are created within this file:
- *
- * "Reg test" tasks - These fill the registers with known values, then check
- * that each register still contains its expected value. Each task uses a
- * different set of values. The reg test tasks execute with a very low priority,
- * so get preempted very frequently. A register containing an unexpected value
- * is indicative of an error in the context switching mechanism.
- *
- * The "Demo" Timer and Callback Function:
- * The demo timer callback function does nothing more than increment a variable.
- * The period of the demo timer is set relative to the period of the check timer
- * (described below). This allows the check timer to know how many times the
- * demo timer callback function should execute between each execution of the
- * check timer callback function. The variable incremented in the demo timer
- * callback function is used to determine how many times the callback function
- * has executed.
- *
- * The "Check" Timer and Callback Function:
- * The check timer period is initially set to three seconds. The check timer
- * callback function checks that all the standard demo tasks, the reg test tasks,
- * and the demo timer are not only still executing, but are executing without
- * reporting any errors. If the check timer discovers that a task or timer has
- * stalled, or reported an error, then it changes its own period from the
- * initial three seconds, to just 200ms. The check timer callback function also
- * toggles the user LED each time it is called. This provides a visual
- * indication of the system status: If the LED toggles every three seconds,
- * then no issues have been discovered. If the LED toggles every 200ms, then an
- * issue has been discovered with at least one task.
- *
*/
/* Scheduler include files. */
#include "FreeRTOS.h"
#include "task.h"
-#include "timers.h"
-
-/* Standard demo includes. */
-#include "dynamic.h"
-#include "PollQ.h"
-#include "blocktim.h"
+#include "semphr.h"
/* Hardware includes. */
#include "port_iodefine.h"
#include "port_iodefine_ext.h"
#include "LED.h"
-/* The period at which the check timer will expire, in ms, provided no errors
-have been reported by any of the standard demo tasks. ms are converted to the
-equivalent in ticks using the portTICK_RATE_MS constant. */
-#define mainCHECK_TIMER_PERIOD_MS ( 3000UL / portTICK_RATE_MS )
-
-/* The period at which the check timer will expire, in ms, if an error has been
-reported in one of the standard demo tasks, the check tasks, or the demo timer.
-ms are converted to the equivalent in ticks using the portTICK_RATE_MS
-constant. */
-#define mainERROR_CHECK_TIMER_PERIOD_MS ( 200UL / portTICK_RATE_MS )
-
-/* These two definitions are used to set the period of the demo timer. The demo
-timer period is always relative to the check timer period, so the check timer
-can determine if the demo timer has expired the expected number of times between
-its own executions. */
-#define mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT ( 100UL )
-#define mainDEMO_TIMER_PERIOD_MS ( mainCHECK_TIMER_PERIOD_MS / mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT )
-
-/* A block time of zero simple means "don't block". */
-#define mainDONT_BLOCK ( 0U )
+/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,
+or 0 to run the more comprehensive test and demo application. */
+#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 1
/*-----------------------------------------------------------*/
/*
- * The 'check' timer callback function, as described at the top of this file.
+ * main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.
+ * main_full() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.
*/
-static void prvCheckTimerCallback( xTimerHandle xTimer );
-
-/*
- * The 'demo' timer callback function, as described at the top of this file.
- */
-static void prvDemoTimerCallback( xTimerHandle xTimer );
+extern void main_blinky( void );
+extern void main_full( void );
/*
* This function is called from the C startup routine to setup the processor -
@@ -177,34 +125,24 @@ static void prvDemoTimerCallback( xTimerHandle xTimer );
*/
int __low_level_init(void);
-/*
- * Functions that define the RegTest tasks, as described at the top of this file.
- */
-extern void vRegTest1( void *pvParameters );
-extern void vRegTest2( void *pvParameters );
-
+/* Prototypes for the standard FreeRTOS callback/hook functions implemented
+within this file. */
+void vApplicationMallocFailedHook( void );
+void vApplicationIdleHook( void );
+void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName );
+void vApplicationTickHook( void );
/*-----------------------------------------------------------*/
-/* Variables that are incremented on each cycle of the two reg tests to allow
-the check timer to know that they are still executing. */
-unsigned short usRegTest1LoopCounter = 0, usRegTest2LoopCounter;
+/* This variable is not actually used, but provided to allow an example of how
+to write an ISR to be included in this file. */
+static xSemaphoreHandle xSemaphore = NULL;
-/* The check timer. This uses prvCheckTimerCallback() as its callback
-function. */
-static xTimerHandle xCheckTimer = NULL;
-
-/* The demo timer. This uses prvDemoTimerCallback() as its callback function. */
-static xTimerHandle xDemoTimer = NULL;
-
-/* This variable is incremented each time the demo timer expires. */
-static volatile unsigned long ulDemoSoftwareTimerCounter = 0UL;
-
-/* RL78/G13 Option Byte Definition. Watchdog disabled, LVI enabled, OCD interface
+/* RL78 Option Byte Definition. Watchdog disabled, LVI enabled, OCD interface
enabled. */
__root __far const unsigned char OptionByte[] @ 0x00C0 =
{
- 0x00U, 0xFFU, 0xF8U, 0x81U
+ 0x6eU, 0xffU, 0xe8U, 0x85U
};
/* Security byte definition */
@@ -215,138 +153,51 @@ __root __far const unsigned char ucSecurityCode[] @ 0x00C4 =
/*-----------------------------------------------------------*/
-short main( void )
+void main( void )
{
- /* Creates all the tasks and timers, then starts the scheduler. */
-
- /* First create the 'standard demo' tasks. These are used to demonstrate
- API functions being used and also to test the kernel port. More information
- is provided on the FreeRTOS.org WEB site. */
- vStartDynamicPriorityTasks();
- vStartPolledQueueTasks( tskIDLE_PRIORITY );
- vCreateBlockTimeTasks();
-
- /* Create the RegTest tasks as described at the top of this file. */
- xTaskCreate( vRegTest1, "Reg1", configMINIMAL_STACK_SIZE, NULL, 0, NULL );
- xTaskCreate( vRegTest2, "Reg2", configMINIMAL_STACK_SIZE, NULL, 0, NULL );
-
- /* Create the software timer that performs the 'check' functionality,
- as described at the top of this file. */
- xCheckTimer = xTimerCreate( ( const signed char * ) "CheckTimer",/* A text name, purely to help debugging. */
- ( mainCHECK_TIMER_PERIOD_MS ), /* The timer period, in this case 3000ms (3s). */
- pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */
- ( void * ) 0, /* The ID is not used, so can be set to anything. */
- prvCheckTimerCallback /* The callback function that inspects the status of all the other tasks. */
- );
-
- /* Create the software timer that just increments a variable for demo
- purposes. */
- xDemoTimer = xTimerCreate( ( const signed char * ) "DemoTimer",/* A text name, purely to help debugging. */
- ( mainDEMO_TIMER_PERIOD_MS ), /* The timer period, in this case it is always calculated relative to the check timer period (see the definition of mainDEMO_TIMER_PERIOD_MS). */
- pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */
- ( void * ) 0, /* The ID is not used, so can be set to anything. */
- prvDemoTimerCallback /* The callback function that inspects the status of all the other tasks. */
- );
-
- /* Start both the check timer and the demo timer. The timers won't actually
- start until the scheduler is started. */
- xTimerStart( xCheckTimer, mainDONT_BLOCK );
- xTimerStart( xDemoTimer, mainDONT_BLOCK );
-
- /* Finally start the scheduler running. */
- vTaskStartScheduler();
-
- /* If this line is reached then vTaskStartScheduler() returned because there
- was insufficient heap memory remaining for the idle task to be created. */
- for( ;; );
+ /* The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is described at the top
+ of this file. */
+ #if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1
+ {
+ main_blinky();
+ }
+ #else
+ {
+ main_full();
+ }
+ #endif
}
/*-----------------------------------------------------------*/
-static void prvDemoTimerCallback( xTimerHandle xTimer )
+void vAnExampleISR_C_Handler( void )
{
- /* The demo timer has expired. All it does is increment a variable. The
- period of the demo timer is relative to that of the check timer, so the
- check timer knows how many times this variable should have been incremented
- between each execution of the check timer's own callback. */
- ulDemoSoftwareTimerCounter++;
-}
-/*-----------------------------------------------------------*/
+ /*
+ * This demo does not include a functional interrupt service routine - so
+ * this dummy handler (which is not actually installed) is provided as an
+ * example of how an ISR that needs to cause a context switch needs to be
+ * implemented. ISRs that do not cause a context switch have no special
+ * requirements and can be written as per the compiler documentation.
+ *
+ * This C function is called from a wrapper function that is implemented
+ * in assembly code. See vANExampleISR_ASM_Wrapper() in ExampleISR.s87.
+ * Also see the documentation page for this demo on the FreeRTOS.org website
+ * for full instructions.
+ */
+short sHigherPriorityTaskWoken = pdFALSE;
-static void prvCheckTimerCallback( xTimerHandle xTimer )
-{
-static portBASE_TYPE xChangedTimerPeriodAlready = pdFALSE, xErrorStatus = pdPASS;
-static unsigned short usLastRegTest1Counter = 0, usLastRegTest2Counter = 0;
+ /* Handler code goes here...*/
- /* Inspect the status of the standard demo tasks. */
- if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
- {
- xErrorStatus = pdFAIL;
- }
+ /* For purposes of demonstration, assume at some point the hander calls
+ xSemaphoreGiveFromISR().*/
+ xSemaphoreGiveFromISR( xSemaphore, &sHigherPriorityTaskWoken );
- if( xArePollingQueuesStillRunning() != pdTRUE )
- {
- xErrorStatus = pdFAIL;
- }
-
- if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
- {
- xErrorStatus = pdFAIL;
- }
-
- /* Indicate an error if either of the reg test loop counters have not
- incremented since the last time this function was called. */
- if( usLastRegTest1Counter == usRegTest1LoopCounter )
- {
- xErrorStatus = pdFAIL;
- }
- else
- {
- usLastRegTest1Counter = usRegTest1LoopCounter;
- }
-
- if( usLastRegTest2Counter == usRegTest2LoopCounter )
- {
- xErrorStatus = pdFAIL;
- }
- else
- {
- usLastRegTest2Counter = usRegTest2LoopCounter;
- }
-
- /* Ensure that the demo software timer has expired
- mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT times in between
- each call of this function. A critical section is not required to access
- ulDemoSoftwareTimerCounter as the variable is only accessed from another
- software timer callback, and only one software timer callback can be
- executing at any time. */
- if( ( ulDemoSoftwareTimerCounter < ( mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT - 1 ) ) ||
- ( ulDemoSoftwareTimerCounter > ( mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT + 1 ) )
- )
- {
- xErrorStatus = pdFAIL;
- }
- else
- {
- ulDemoSoftwareTimerCounter = 0UL;
- }
-
- if( ( xErrorStatus == pdFAIL ) && ( xChangedTimerPeriodAlready == pdFALSE ) )
- {
- /* An error has occurred, but the timer's period has not yet been changed,
- change it now, and remember that it has been changed. Shortening the
- timer's period means the LED will toggle at a faster rate, giving a
- visible indication that something has gone wrong. */
- xChangedTimerPeriodAlready = pdTRUE;
-
- /* This call to xTimerChangePeriod() uses a zero block time. Functions
- called from inside of a timer callback function must *never* attempt to
- block. */
- xTimerChangePeriod( xCheckTimer, ( mainERROR_CHECK_TIMER_PERIOD_MS ), mainDONT_BLOCK );
- }
-
- /* Toggle the LED. The toggle rate will depend on whether or not an error
- has been found in any tasks. */
- LED_BIT = !LED_BIT;
+ /* If giving the semaphore unblocked a task, and the unblocked task has a
+ priority higher than or equal to the currently running task, then
+ sHigherPriorityTaskWoken will have been set to pdTRUE internally within the
+ xSemaphoreGiveFromISR() function. Passing a pdTRUE value to
+ portYIELD_FROM_ISR() will cause this interrupt to return directly to the
+ higher priority unblocked task. */
+ portYIELD_FROM_ISR( sHigherPriorityTaskWoken );
}
/*-----------------------------------------------------------*/
@@ -380,15 +231,6 @@ unsigned char ucResetFlag = RESF;
}
/*-----------------------------------------------------------*/
-void vRegTestError( void )
-{
- /* Called by both reg test tasks if an error is found. There is no way out
- of this function so the loop counter of the calling task will stop
- incrementing, which will result in the check timer signialling an error. */
- for( ;; );
-}
-/*-----------------------------------------------------------*/
-
void vApplicationMallocFailedHook( void )
{
/* Called if a call to pvPortMalloc() fails because there is insufficient
@@ -426,5 +268,9 @@ volatile size_t xFreeHeapSpace;
configTOTAL_HEAP_SIZE value in FreeRTOSConfig.h can be reduced to free up
RAM. */
xFreeHeapSpace = xPortGetFreeHeapSize();
+
+ /* Remove compiler warning about xFreeHeapSpace being set but never used. */
+ ( void ) xFreeHeapSpace;
}
+
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main_blinky.c b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main_blinky.c
new file mode 100644
index 000000000..35890528f
--- /dev/null
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main_blinky.c
@@ -0,0 +1,242 @@
+/*
+ FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
+
+ FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
+ http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
+
+ ***************************************************************************
+ * *
+ * FreeRTOS tutorial books are available in pdf and paperback. *
+ * Complete, revised, and edited pdf reference manuals are also *
+ * available. *
+ * *
+ * Purchasing FreeRTOS documentation will not only help you, by *
+ * ensuring you get running as quickly as possible and with an *
+ * in-depth knowledge of how to use FreeRTOS, it will also help *
+ * the FreeRTOS project to continue with its mission of providing *
+ * professional grade, cross platform, de facto standard solutions *
+ * for microcontrollers - completely free of charge! *
+ * *
+ * >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
+ * *
+ * Thank you for using FreeRTOS, and 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 modification 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 itcan be
+ viewed here: http://www.freertos.org/a00114.html and also obtained by
+ writing to Real Time Engineers Ltd., contact details for whom are available
+ on the FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ ***************************************************************************
+ * *
+ * Having a problem? Start by reading the FAQ "My application does *
+ * not run, what could be wrong?" *
+ * *
+ * http://www.FreeRTOS.org/FAQHelp.html *
+ * *
+ ***************************************************************************
+
+
+ http://www.FreeRTOS.org - Documentation, books, training, latest versions,
+ license and Real Time Engineers Ltd. contact details.
+
+ http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
+ including FreeRTOS+Trace - an indispensable productivity tool, and our new
+ fully thread aware and reentrant UDP/IP stack.
+
+ http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
+ Integrity Systems, who sell the code with commercial support,
+ indemnification and middleware, under the OpenRTOS brand.
+
+ http://www.SafeRTOS.com - High Integrity Systems also provide a safety
+ engineered and independently SIL3 certified version for use in safety and
+ mission critical applications that require provable dependability.
+*/
+
+/******************************************************************************
+ * NOTE 1: This project provides two demo applications. A simple blinky style
+ * project, and a more comprehensive test and demo application. The
+ * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select
+ * between the two. See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY
+ * in main.c. This file implements the simply blinky style version.
+ *
+ * NOTE 2: This file only contains the source code that is specific to the
+ * basic demo. Generic functions, such FreeRTOS hook functions, and functions
+ * required to configure the hardware, along with an example interrupt service
+ * routine, are defined in main.c.
+ ******************************************************************************
+ *
+ * main_blinky() creates one queue, and two tasks. It then starts the
+ * scheduler.
+ *
+ * The Queue Send Task:
+ * The queue send task is implemented by the prvQueueSendTask() function in
+ * this file. prvQueueSendTask() sits in a loop that causes it to repeatedly
+ * block for 200 milliseconds, before sending the value 100 to the queue that
+ * was created within main_blinky(). Once the value is sent, the task loops
+ * back around to block for another 200 milliseconds.
+ *
+ * The Queue Receive Task:
+ * The queue receive task is implemented by the prvQueueReceiveTask() function
+ * in this file. prvQueueReceiveTask() sits in a loop where it repeatedly
+ * blocks on attempts to read data from the queue that was created within
+ * main_blinky(). When data is received, the task checks the value of the
+ * data, and if the value equals the expected 100, toggles the LED. The 'block
+ * time' parameter passed to the queue receive function specifies that the
+ * task should be held in the Blocked state indefinitely to wait for data to
+ * be available on the queue. The queue receive task will only leave the
+ * Blocked state when the queue send task writes to the queue. As the queue
+ * send task writes to the queue every 200 milliseconds, the queue receive
+ * task leaves the Blocked state every 200 milliseconds, and therefore toggles
+ * the LED every 200 milliseconds.
+ */
+
+/* Standard includes. */
+#include
+
+/* Kernel includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* Eval board specific definitions. */
+#include "port_iodefine.h"
+#include "port_iodefine_ext.h"
+#include "LED.h"
+
+/* Priorities at which the tasks are created. */
+#define mainQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
+
+/* The rate at which data is sent to the queue. The 200ms value is converted
+to ticks using the portTICK_RATE_MS constant. */
+#define mainQUEUE_SEND_FREQUENCY_MS ( 200 / portTICK_RATE_MS )
+
+/* The number of items the queue can hold. This is 1 as the receive task
+will remove items as they are added, meaning the send task should always find
+the queue empty. */
+#define mainQUEUE_LENGTH ( 1 )
+
+
+/*-----------------------------------------------------------*/
+
+/*
+ * The tasks as described in the comments at the top of this file.
+ */
+static void prvQueueReceiveTask( void *pvParameters );
+static void prvQueueSendTask( void *pvParameters );
+
+/*
+ * Called by main() to create the simply blinky style application if
+ * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.
+ */
+void main_blinky( void );
+
+/*-----------------------------------------------------------*/
+
+/* The queue used by both tasks. */
+static xQueueHandle xQueue = NULL;
+
+/*-----------------------------------------------------------*/
+
+void main_blinky( void )
+{
+ /* Create the queue. */
+ xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) );
+
+ if( xQueue != NULL )
+ {
+ /* Start the two tasks as described in the comments at the top of this
+ file. */
+ xTaskCreate( prvQueueReceiveTask, /* The function that implements the task. */
+ ( signed char * ) "Rx", /* The text name assigned to the task - for debug only as it is not used by the kernel. */
+ configMINIMAL_STACK_SIZE, /* The size of the stack to allocate to the task. */
+ NULL, /* The parameter passed to the task - not used in this case. */
+ mainQUEUE_RECEIVE_TASK_PRIORITY, /* The priority assigned to the task. */
+ NULL ); /* The task handle is not required, so NULL is passed. */
+
+ xTaskCreate( prvQueueSendTask, ( signed char * ) "TX", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL );
+
+ /* Start the tasks and timer running. */
+ vTaskStartScheduler();
+ }
+
+ /* If all is well, the scheduler will now be running, and the following
+ line will never be reached. If the following line does execute, then
+ there was insufficient FreeRTOS heap memory available for the idle and/or
+ timer tasks to be created. See the memory management section on the
+ FreeRTOS web site for more details. http://www.freertos.org/a00111.html. */
+ for( ;; );
+}
+/*-----------------------------------------------------------*/
+
+static void prvQueueSendTask( void *pvParameters )
+{
+portTickType xNextWakeTime;
+const unsigned long ulValueToSend = 100UL;
+
+ /* Remove compiler warning about unused parameter. */
+ ( void ) pvParameters;
+
+ /* Initialise xNextWakeTime - this only needs to be done once. */
+ xNextWakeTime = xTaskGetTickCount();
+
+ for( ;; )
+ {
+ /* Place this task in the blocked state until it is time to run again. */
+ vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_FREQUENCY_MS );
+
+ /* Send to the queue - causing the queue receive task to unblock and
+ toggle the LED. 0 is used as the block time so the sending operation
+ will not block - it shouldn't need to block as the queue should always
+ be empty at this point in the code. */
+ xQueueSend( xQueue, &ulValueToSend, 0U );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvQueueReceiveTask( void *pvParameters )
+{
+unsigned long ulReceivedValue;
+const unsigned long ulExpectedValue = 100UL;
+
+ /* Remove compiler warning about unused parameter. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* Wait until something arrives in the queue - this task will block
+ indefinitely provided INCLUDE_vTaskSuspend is set to 1 in
+ FreeRTOSConfig.h. */
+ xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
+
+ /* To get here something must have been received from the queue, but
+ is it the expected value? If it is, toggle the LED. */
+ if( ulReceivedValue == ulExpectedValue )
+ {
+ LED_BIT = !LED_BIT;
+ ulReceivedValue = 0U;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main_full.c b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main_full.c
new file mode 100644
index 000000000..88fdc2673
--- /dev/null
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main_full.c
@@ -0,0 +1,419 @@
+/*
+ FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
+
+ FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
+ http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
+
+ ***************************************************************************
+ * *
+ * FreeRTOS tutorial books are available in pdf and paperback. *
+ * Complete, revised, and edited pdf reference manuals are also *
+ * available. *
+ * *
+ * Purchasing FreeRTOS documentation will not only help you, by *
+ * ensuring you get running as quickly as possible and with an *
+ * in-depth knowledge of how to use FreeRTOS, it will also help *
+ * the FreeRTOS project to continue with its mission of providing *
+ * professional grade, cross platform, de facto standard solutions *
+ * for microcontrollers - completely free of charge! *
+ * *
+ * >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
+ * *
+ * Thank you for using FreeRTOS, and 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 modification 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 itcan be
+ viewed here: http://www.freertos.org/a00114.html and also obtained by
+ writing to Real Time Engineers Ltd., contact details for whom are available
+ on the FreeRTOS WEB site.
+
+ 1 tab == 4 spaces!
+
+ ***************************************************************************
+ * *
+ * Having a problem? Start by reading the FAQ "My application does *
+ * not run, what could be wrong?" *
+ * *
+ * http://www.FreeRTOS.org/FAQHelp.html *
+ * *
+ ***************************************************************************
+
+
+ http://www.FreeRTOS.org - Documentation, books, training, latest versions,
+ license and Real Time Engineers Ltd. contact details.
+
+ http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
+ including FreeRTOS+Trace - an indispensable productivity tool, and our new
+ fully thread aware and reentrant UDP/IP stack.
+
+ http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
+ Integrity Systems, who sell the code with commercial support,
+ indemnification and middleware, under the OpenRTOS brand.
+
+ http://www.SafeRTOS.com - High Integrity Systems also provide a safety
+ engineered and independently SIL3 certified version for use in safety and
+ mission critical applications that require provable dependability.
+*/
+
+/******************************************************************************
+ * NOTE 1: This project provides two demo applications. A simple blinky style
+ * project, and a more comprehensive test and demo application. The
+ * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select
+ * between the two. See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY
+ * in main.c. This file implements the comprehensive test and demo version.
+ *
+ * NOTE 2: This file only contains the source code that is specific to the
+ * full demo. Generic functions, such FreeRTOS hook functions, and functions
+ * required to configure the hardware, along with an example of how to write an
+ * interrupt service routine, are defined in main.c.
+ ******************************************************************************
+ *
+ * main_full() creates all the demo application tasks and two software timers,
+ * then starts the scheduler. The web documentation provides more details of
+ * the standard demo application tasks, which provide no particular
+ * functionality, but do provide a good example of how to use the FreeRTOS API.
+ *
+ * In addition to the standard demo tasks, the following tasks, tests and
+ * timers are created within this file:
+ *
+ * "Reg test" tasks - These fill the registers with known values, then check
+ * that each register still contains its expected value. Each task uses a
+ * different set of values. The reg test tasks execute with a very low priority,
+ * so get preempted very frequently. A register containing an unexpected value
+ * is indicative of an error in the context switching mechanism.
+ *
+ * The "Demo" Timer and Callback Function:
+ * The demo timer callback function does nothing more than increment a variable.
+ * The period of the demo timer is set relative to the period of the check timer
+ * (described below). This allows the check timer to know how many times the
+ * demo timer callback function should execute between each execution of the
+ * check timer callback function. The variable incremented in the demo timer
+ * callback function is used to determine how many times the callback function
+ * has executed.
+ *
+ * The "Check" Timer and Callback Function:
+ * The check timer period is initially set to three seconds. The check timer
+ * callback function checks that all the standard demo tasks, the reg test
+ * tasks, and the demo timer are not only still executing, but are executing
+ * without reporting any errors. If the check timer discovers that a task or
+ * timer has stalled, or reported an error, then it changes its own period from
+ * the initial three seconds, to just 200ms. The check timer callback function
+ * also toggles an LED each time it is called. This provides a visual
+ * indication of the system status: If the LED toggles every three seconds,
+ * then no issues have been discovered. If the LED toggles every 200ms, then
+ * an issue has been discovered with at least one task.
+ *
+ * ENSURE TO READ THE DOCUMENTATION PAGE FOR THIS PORT AND DEMO APPLICATION ON
+ * THE http://www.FreeRTOS.org WEB SITE FOR FULL INFORMATION ON USING THIS DEMO
+ * APPLICATION, AND ITS ASSOCIATE FreeRTOS ARCHITECTURE PORT!
+ *
+ */
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "timers.h"
+
+/* Standard demo includes. */
+#include "dynamic.h"
+#include "PollQ.h"
+#include "blocktim.h"
+
+/* Hardware includes. */
+#include "port_iodefine.h"
+#include "port_iodefine_ext.h"
+#include "LED.h"
+
+/* The period at which the check timer will expire, in ms, provided no errors
+have been reported by any of the standard demo tasks. ms are converted to the
+equivalent in ticks using the portTICK_RATE_MS constant. */
+#define mainCHECK_TIMER_PERIOD_MS ( 3000UL / portTICK_RATE_MS )
+
+/* The period at which the check timer will expire, in ms, if an error has been
+reported in one of the standard demo tasks, the check tasks, or the demo timer.
+ms are converted to the equivalent in ticks using the portTICK_RATE_MS
+constant. */
+#define mainERROR_CHECK_TIMER_PERIOD_MS ( 200UL / portTICK_RATE_MS )
+
+/* These two definitions are used to set the period of the demo timer. The demo
+timer period is always relative to the check timer period, so the check timer
+can determine if the demo timer has expired the expected number of times between
+its own executions. */
+#define mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT ( 100UL )
+#define mainDEMO_TIMER_PERIOD_MS ( mainCHECK_TIMER_PERIOD_MS / mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT )
+
+/* A block time of zero simply means "don't block". */
+#define mainDONT_BLOCK ( 0U )
+
+/* Values that are passed as parameters into the reg test tasks (purely to
+ensure task parameters are passed correctly). */
+#define mainREG_TEST_1_PARAMETER ( ( void * ) 0x1234 )
+#define mainREG_TEST_2_PARAMETER ( ( void * ) 0x5678 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * The 'check' timer callback function, as described at the top of this file.
+ */
+static void prvCheckTimerCallback( xTimerHandle xTimer );
+
+/*
+ * The 'demo' timer callback function, as described at the top of this file.
+ */
+static void prvDemoTimerCallback( xTimerHandle xTimer );
+
+/*
+ * Functions that define the RegTest tasks, as described at the top of this
+ * file. The RegTest tasks are written (necessarily) in assembler. Their
+ * entry points are written in C to allow for easy checking of the task
+ * parameter values.
+ */
+extern void vRegTest1Task( void );
+extern void vRegTest2Task( void );
+static void prvRegTest1Entry( void *pvParameters );
+static void prvRegTest2Entry( void *pvParameters );
+
+/*
+ * Called if a RegTest task discovers an error as a mechanism to stop the
+ * tasks loop counter incrementing (so the check task can detect that an
+ * error exists).
+ */
+void vRegTestError( void );
+
+/*
+ * Called by main() to create the more comprehensive application if
+ * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.
+ */
+void main_full( void );
+
+/*-----------------------------------------------------------*/
+
+/* Variables that are incremented on each cycle of the two reg tests to allow
+the check timer to know that they are still executing. */
+unsigned short usRegTest1LoopCounter = 0, usRegTest2LoopCounter;
+
+/* The check timer. This uses prvCheckTimerCallback() as its callback
+function. */
+static xTimerHandle xCheckTimer = NULL;
+
+/* The demo timer. This uses prvDemoTimerCallback() as its callback function. */
+static xTimerHandle xDemoTimer = NULL;
+
+/* This variable is incremented each time the demo timer expires. */
+static volatile unsigned long ulDemoSoftwareTimerCounter = 0UL;
+
+/*-----------------------------------------------------------*/
+
+void main_full( void )
+{
+ /* Creates all the tasks and timers, then starts the scheduler. */
+
+ /* First create the 'standard demo' tasks. These are used to demonstrate
+ API functions being used and also to test the kernel port. More information
+ is provided on the FreeRTOS.org WEB site. */
+ vStartDynamicPriorityTasks();
+ vStartPolledQueueTasks( tskIDLE_PRIORITY );
+ vCreateBlockTimeTasks();
+
+ /* Create the RegTest tasks as described at the top of this file. */
+ xTaskCreate( prvRegTest1Entry, /* The function that implements the task. */
+ ( const signed char * ) "Reg1",/* Text name for the task - to assist debugging only, not used by the kernel. */
+ configMINIMAL_STACK_SIZE, /* The size of the stack allocated to the task (in words, not bytes). */
+ mainREG_TEST_1_PARAMETER, /* The parameter passed into the task. */
+ tskIDLE_PRIORITY, /* The priority at which the task will execute. */
+ NULL ); /* Used to pass the handle of the created task out to the function caller - not used in this case. */
+
+ xTaskCreate( prvRegTest2Entry, ( const signed char * ) "Reg2", configMINIMAL_STACK_SIZE, mainREG_TEST_2_PARAMETER, tskIDLE_PRIORITY, NULL );
+
+ /* Create the software timer that performs the 'check' functionality,
+ as described at the top of this file. */
+ xCheckTimer = xTimerCreate( ( const signed char * ) "CheckTimer",/* A text name, purely to help debugging. */
+ ( mainCHECK_TIMER_PERIOD_MS ), /* The timer period, in this case 3000ms (3s). */
+ pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */
+ ( void * ) 0, /* The ID is not used, so can be set to anything. */
+ prvCheckTimerCallback /* The callback function that inspects the status of all the other tasks. */
+ );
+
+ /* Create the software timer that just increments a variable for demo
+ purposes. */
+ xDemoTimer = xTimerCreate( ( const signed char * ) "DemoTimer",/* A text name, purely to help debugging. */
+ ( mainDEMO_TIMER_PERIOD_MS ), /* The timer period, in this case it is always calculated relative to the check timer period (see the definition of mainDEMO_TIMER_PERIOD_MS). */
+ pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */
+ ( void * ) 0, /* The ID is not used, so can be set to anything. */
+ prvDemoTimerCallback /* The callback function that inspects the status of all the other tasks. */
+ );
+
+ /* Start both the check timer and the demo timer. The timers won't actually
+ start until the scheduler is started. */
+ xTimerStart( xCheckTimer, mainDONT_BLOCK );
+ xTimerStart( xDemoTimer, mainDONT_BLOCK );
+
+ /* Finally start the scheduler running. */
+ vTaskStartScheduler();
+
+ /* If all is well execution will never reach here as the scheduler will be
+ running. If this null loop is reached then it is likely there was
+ insufficient FreeRTOS heap available for the idle task and/or timer task to
+ be created. See http://www.freertos.org/a00111.html. */
+ for( ;; );
+}
+/*-----------------------------------------------------------*/
+
+static void prvDemoTimerCallback( xTimerHandle xTimer )
+{
+ /* Remove compiler warning about unused parameter. */
+ ( void ) xTimer;
+
+ /* The demo timer has expired. All it does is increment a variable. The
+ period of the demo timer is relative to that of the check timer, so the
+ check timer knows how many times this variable should have been incremented
+ between each execution of the check timer's own callback. */
+ ulDemoSoftwareTimerCounter++;
+}
+/*-----------------------------------------------------------*/
+
+static void prvCheckTimerCallback( xTimerHandle xTimer )
+{
+static portBASE_TYPE xChangedTimerPeriodAlready = pdFALSE, xErrorStatus = pdPASS;
+static unsigned short usLastRegTest1Counter = 0, usLastRegTest2Counter = 0;
+
+ /* Remove compiler warning about unused parameter. */
+ ( void ) xTimer;
+
+ /* Inspect the status of the standard demo tasks. */
+ if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
+ {
+ xErrorStatus = pdFAIL;
+ }
+
+ if( xArePollingQueuesStillRunning() != pdTRUE )
+ {
+ xErrorStatus = pdFAIL;
+ }
+
+ if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
+ {
+ xErrorStatus = pdFAIL;
+ }
+
+ /* Indicate an error if either of the reg test loop counters have not
+ incremented since the last time this function was called. */
+ if( usLastRegTest1Counter == usRegTest1LoopCounter )
+ {
+ xErrorStatus = pdFAIL;
+ }
+ else
+ {
+ usLastRegTest1Counter = usRegTest1LoopCounter;
+ }
+
+ if( usLastRegTest2Counter == usRegTest2LoopCounter )
+ {
+ xErrorStatus = pdFAIL;
+ }
+ else
+ {
+ usLastRegTest2Counter = usRegTest2LoopCounter;
+ }
+
+ /* Ensure that the demo software timer has expired
+ mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT times in between
+ each call of this function. A critical section is not required to access
+ ulDemoSoftwareTimerCounter as the variable is only accessed from another
+ software timer callback, and only one software timer callback can be
+ executing at any time. */
+ if( ( ulDemoSoftwareTimerCounter < ( mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT - 1 ) ) ||
+ ( ulDemoSoftwareTimerCounter > ( mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT + 1 ) )
+ )
+ {
+ xErrorStatus = pdFAIL;
+ }
+ else
+ {
+ ulDemoSoftwareTimerCounter = 0UL;
+ }
+
+ if( ( xErrorStatus == pdFAIL ) && ( xChangedTimerPeriodAlready == pdFALSE ) )
+ {
+ /* An error has occurred, but the timer's period has not yet been changed,
+ change it now, and remember that it has been changed. Shortening the
+ timer's period means the LED will toggle at a faster rate, giving a
+ visible indication that something has gone wrong. */
+ xChangedTimerPeriodAlready = pdTRUE;
+
+ /* This call to xTimerChangePeriod() uses a zero block time. Functions
+ called from inside of a timer callback function must *never* attempt to
+ block. */
+ xTimerChangePeriod( xCheckTimer, ( mainERROR_CHECK_TIMER_PERIOD_MS ), mainDONT_BLOCK );
+ }
+
+ /* Toggle the LED. The toggle rate will depend on whether or not an error
+ has been found in any tasks. */
+ LED_BIT = !LED_BIT;
+}
+/*-----------------------------------------------------------*/
+
+void vRegTestError( void )
+{
+ /* Called by both reg test tasks if an error is found. There is no way out
+ of this function so the loop counter of the calling task will stop
+ incrementing, which will result in the check timer signaling an error. */
+ for( ;; );
+}
+/*-----------------------------------------------------------*/
+
+static void prvRegTest1Entry( void *pvParameters )
+{
+ /* If the parameter has its expected value then start the first reg test
+ task (this is only done to test that the RTOS port is correctly handling
+ task parameters. */
+ if( pvParameters == mainREG_TEST_1_PARAMETER )
+ {
+ vRegTest1Task();
+ }
+ else
+ {
+ vRegTestError();
+ }
+
+ /* It is not possible to get here as neither of the two functions called
+ above will ever return. */
+}
+/*-----------------------------------------------------------*/
+
+static void prvRegTest2Entry( void *pvParameters )
+{
+ /* If the parameter has its expected value then start the first reg test
+ task (this is only done to test that the RTOS port is correctly handling
+ task parameters. */
+ if( pvParameters == mainREG_TEST_2_PARAMETER )
+ {
+ vRegTest2Task();
+ }
+ else
+ {
+ vRegTestError();
+ }
+
+ /* It is not possible to get here as neither of the two functions called
+ above will ever return. */
+}
+/*-----------------------------------------------------------*/
+
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.cspy.bat b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.cspy.bat
index 3ee2603b8..d3dd24caf 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.cspy.bat
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.cspy.bat
@@ -19,6 +19,6 @@
@REM
-"C:\devtools\IAR Systems\Embedded Workbench 6.5\common\bin\cspybat" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\bin\rl78proc.dll" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\bin\rl78ocd.dll" %1 --plugin "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\bin\rl78bat.dll" --backend -B "--core" "rl78_1" "--near_const_location" "rom0" "--near_const_start" "0xf2000" "--near_const_size" "24.00" "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\config\debugger\ior5f10jgc.ddf" "-d" "e1"
+"C:\devtools\IAR Systems\Embedded Workbench 6.5\common\bin\cspybat" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\bin\rl78proc.dll" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\bin\rl78ocd.dll" %1 --plugin "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\bin\rl78bat.dll" --backend -B "--core" "rl78_2" "--near_const_location" "rom0" "--near_const_start" "0xf3000" "--near_const_size" "27.75" "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\config\debugger\ior5f104pj.ddf" "-d" "tk"
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dbgdt b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dbgdt
index 35797a0dc..154acfded 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dbgdt
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dbgdt
@@ -55,24 +55,24 @@
Workspace
- RTOSDemo RTOSDemo/Demo Source RTOSDemo/Demo Source/StandardDemos RTOSDemo/Kernel Source
+ RTOSDemo RTOSDemo/Demo Source RTOSDemo/Demo Source/StandardDemos RTOSDemo/Kernel Source RTOSDemo/Output
- 0 TabID-10616-6959 Disassembly Disassembly 0
+ 0
- TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\portmacro.h 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\..\Source\portable\MemMang\heap_1.c 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\FreeRTOSConfig.h 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\RegTest.s87 0 0 0 0 0 173 6586 6586 TextEditor $WS_DIR$\..\..\Source\tasks.c 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\port_iodefine.h 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\main.c 0 0 0 0 0 195 10359 10359 6 TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\port.c 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\port_iodefine_ext.h 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\portasm.s87 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\Common\Minimal\dynamic.c 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\LED.h 0 0 0 0 0 0 0 0 0 1000000 1000000 1
+ TextEditor $WS_DIR$\main.c 0 0 0 0 0 139 7563 7563 0 TextEditor $WS_DIR$\LED.h 0 0 0 0 0 66 0 0 TextEditor $WS_DIR$\FreeRTOSConfig.h 0 0 0 0 0 92 6374 6374 0 1000000 1000000 1
- iaridepm.enu1 debuggergui.enu1 rl78ocd.enu1 -2 -2 808 316 -2 -2 141 108 83929 109980 189286 824847 -2 -2 808 198 -2 -2 200 200 119048 203666 119048 824847 -2 -2 106 1682 -2 -2 1684 108 1002381 109980 83929 109980
+ iaridepm.enu1 debuggergui.enu1 rl78ocd.enu1 -2 -2 784 316 -2 -2 141 108 83929 109980 189286 800407 -2 -2 106 1682 -2 -2 1684 108 1002381 109980 83929 109980
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dni b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dni
index 7ff991741..e3076ee7c 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dni
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dni
@@ -1,21 +1,5 @@
-[InterruptLog]
-LogEnabled=0
-SumEnabled=0
-GraphEnabled=0
-ShowTimeLog=1
-ShowTimeSum=1
-SumSortOrder=0
-[Interrupts]
-Enabled=1
-[MemoryMap]
-Enabled=0
-Base=0
-UseAuto=0
-TypeViolation=1
-UnspecRange=1
-ActionState=1
[DebugChecksum]
-Checksum=1634009173
+Checksum=-776555801
[DisAssemblyWindow]
NumStates=_ 1
State 1=_ 1
@@ -163,13 +147,38 @@ ByteLimit=50
ShowArgs=0
[Disassembly]
MixedMode=1
+[InterruptLog]
+LogEnabled=0
+SumEnabled=0
+GraphEnabled=0
+ShowTimeLog=1
+ShowTimeSum=1
+SumSortOrder=0
+[DataLog]
+LogEnabled=0
+SumEnabled=0
+GraphEnabled=0
+ShowTimeLog=1
+ShowTimeSum=1
+[Breakpoints2]
+Count=0
+[Interrupts]
+Enabled=1
+[MemoryMap]
+Enabled=0
+Base=0
+UseAuto=0
+TypeViolation=1
+UnspecRange=1
+ActionState=1
+[Trace1]
+Enabled=0
+ShowSource=1
[DataSample]
LogEnabled=0
GraphEnabled=0
ShowTimeLog=1
ShowTimeSum=1
-[Breakpoints]
-Count=0
[Log file]
LoggingEnabled=_ 0
LogFile=_ ""
@@ -177,10 +186,6 @@ Category=_ 0
[TermIOLog]
LoggingEnabled=_ 0
LogFile=_ ""
-[Aliases]
-A0=_ "C:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87" "E:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87"
-Count=1
-SuppressDialog=1
[TraceHelper]
Enabled=0
ShowSource=1
@@ -192,3 +197,9 @@ Mode=0
Graph=0
Symbiont=0
Exclusions=
+[Breakpoints]
+Count=0
+[Aliases]
+A0=_ "C:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87" "E:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87"
+Count=1
+SuppressDialog=1
diff --git a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.wsdt b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.wsdt
index fe68ffdb5..16f19c879 100644
--- a/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.wsdt
+++ b/FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.wsdt
@@ -3,7 +3,7 @@
- RTOSDemo/RSKRL78G1C
+ RTOSDemo/YRDKRL78G14
@@ -25,7 +25,7 @@
Workspace
- RTOSDemo
+ RTOSDemo RTOSDemo/Demo Source RTOSDemo/Demo Source/main.c RTOSDemo/Output
@@ -35,14 +35,14 @@
- TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\portmacro.h 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\..\Source\portable\MemMang\heap_1.c 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\FreeRTOSConfig.h 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\RegTest.s87 0 0 0 0 0 173 6586 6586 TextEditor $WS_DIR$\..\..\Source\tasks.c 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\port_iodefine.h 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\main.c 0 0 0 0 0 204 10653 10653 TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\port.c 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\port_iodefine_ext.h 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\..\Source\portable\IAR\RL78\portasm.s87 0 0 0 0 0 0 0 0 TextEditor $WS_DIR$\..\Common\Minimal\dynamic.c 0 0 0 0 0 371 16495 16495 TextEditor $WS_DIR$\LED.h 0 0 0 0 0 66 4654 4654 11 0 1000000 1000000 1
+ TextEditor $WS_DIR$\main.c 0 0 0 0 0 139 7563 7563 0 TextEditor $WS_DIR$\LED.h 0 0 0 0 0 66 0 0 TextEditor $WS_DIR$\FreeRTOSConfig.h 0 0 0 0 0 92 6374 6374 0 1000000 1000000 1
- iaridepm.enu1 -2 -2 639 409 -2 -2 647 471 385119 479633 244643 652749 -2 -2 299 1682 -2 -2 1684 301 1002381 306517 505357 608961
+ iaridepm.enu1 -2 -2 639 409 -2 -2 647 471 385119 479633 244643 652749 -2 -2 299 1682 -2 -2 1684 301 1002381 306517 505357 608961