Migrated RL78/IAR port to EWRL78v3+ (#799)

pull/806/head
Felipe Torrezan 3 years ago committed by GitHub
parent 1509e4f742
commit fc9396f576
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -284,6 +284,7 @@ FREERTOS_IGNORED_FILES = [
'platform.h',
'platform_config.h',
'FreeRTOS_asm_vectors.S',
'interrupt_vector.s',
'gdbinit'
]

@ -1,123 +0,0 @@
/*
* FreeRTOS V202112.00
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://aws.amazon.com/freertos
*
*/
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_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
*----------------------------------------------------------*/
/* This #ifdef prevents the enclosed code being included from within an
asm file. It is valid in a C file, but not valid in an asm file. */
#ifdef __IAR_SYSTEMS_ICC__
#pragma language=extended
#pragma system_include
#include <intrinsics.h>
/* Device specific includes. */
#include <ior5f100le.h>
#include <ior5f100le_ext.h>
#endif /* __IAR_SYSTEMS_ICC__ */
#define configUSE_PREEMPTION 1
#define configTICK_RATE_HZ ( ( unsigned short ) 1000 )
#define configMAX_PRIORITIES ( 4 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 80 )
#define configMAX_TASK_NAME_LEN ( 10 )
#define configUSE_TRACE_FACILITY 0
#define configUSE_16_BIT_TICKS 1
#define configIDLE_SHOULD_YIELD 1
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 3420 ) )
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configUSE_MUTEXES 1
/* Hook function definitions. */
#define configUSE_IDLE_HOOK 1
#define configUSE_TICK_HOOK 0
#define configUSE_MALLOC_FAILED_HOOK 1
/* Software timer definitions. */
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 2 )
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
/* 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 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 0
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 0
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetIdleTaskHandle 0
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
/* Tick interrupt vector - this must match the INTIT_vect definition contained
in the ior5fnnnn.h header file included at the top of this file (the value is
dependent on the hardware being used. */
#define configTICK_VECTOR 56
/******************************************************************************
* PORT SPECIFIC CONFIGURATION OPTIONS
******************************************************************************/
/*
* RL78/G13 Clock Source Configuration
* 1 = use internal High Speed Clock Source (typically 32Mhz on the RL78/G13)
* 0 = use external Clock Source
*/
#define configCLOCK_SOURCE 1
#if configCLOCK_SOURCE == 0
#define configCPU_CLOCK_HZ ( ( unsigned long ) 20000000 ) /* using the external clock source */
#else
#define configCPU_CLOCK_HZ ( ( unsigned long ) 32000000 ) /* using the internal high speed clock */
#endif /* configCLOCK_SOURCE */
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
#endif /* FREERTOS_CONFIG_H */

@ -0,0 +1,3 @@
# FreeRTOS demo:<br>RL78_RL78G13_Promo_Board_IAR
This demo has been was superseded by [RL78_Multiple_IAR](../RL78_multiple_IAR), which also includes a _build configuration_ for the Renesas Promotion Board for RL78/G13 (__YRPBRL78G13__) as well as multiple `build configurations` for other Renesas evaluation boards.

@ -1,286 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<project>
<fileVersion>2</fileVersion>
<configuration>
<name>Debug</name>
<toolchain>
<name>RL78</name>
</toolchain>
<debug>1</debug>
<settings>
<name>C-SPY</name>
<archiveVersion>1</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>DebugMandatory</name>
<state>1</state>
</option>
<option>
<name>DebugInput</name>
<state>1</state>
</option>
<option>
<name>DebugProcessorVariant</name>
<state>0</state>
</option>
<option>
<name>DebuggerNearConstLocation</name>
<state>0</state>
</option>
<option>
<name>DebugRunToEnable</name>
<state>1</state>
</option>
<option>
<name>DebugRunToName</name>
<state>main</state>
</option>
<option>
<name>DebugMacOverride</name>
<state>0</state>
</option>
<option>
<name>DebugMacFile</name>
<state></state>
</option>
<option>
<name>DynDriver</name>
<state>TKRL78</state>
</option>
<option>
<name>DebugDDFOverride</name>
<state>0</state>
</option>
<option>
<name>DebugDDFFile</name>
<state>$TOOLKIT_DIR$\CONFIG\DDF\ior5f100le.ddf</state>
</option>
<option>
<name>DebugCUseExtraOptions</name>
<state>0</state>
</option>
<option>
<name>DebugExtraOptions</name>
<state></state>
</option>
<option>
<name>DebugImagesSuppressCheck1</name>
<state>0</state>
</option>
<option>
<name>DebugImagesPath1</name>
<state></state>
</option>
<option>
<name>DebugImagesSuppressCheck2</name>
<state>0</state>
</option>
<option>
<name>DebugImagesPath2</name>
<state></state>
</option>
<option>
<name>DebugImagesSuppressCheck3</name>
<state>0</state>
</option>
<option>
<name>DebugImagesPath3</name>
<state></state>
</option>
<option>
<name>DebugImagesOffset1</name>
<state></state>
</option>
<option>
<name>DebugImagesOffset2</name>
<state></state>
</option>
<option>
<name>DebugImagesOffset3</name>
<state></state>
</option>
<option>
<name>DebugImagesUse1</name>
<state>0</state>
</option>
<option>
<name>DebugImagesUse2</name>
<state>0</state>
</option>
<option>
<name>DebugImagesUse3</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>E1RL78</name>
<archiveVersion>1</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>E1Mandatory</name>
<state>0</state>
</option>
<option>
<name>E1SuppressLoad</name>
<state>0</state>
</option>
<option>
<name>E1VerifyLoad</name>
<state>0</state>
</option>
<option>
<name>E1LogFile</name>
<state>$PROJ_DIR$\cspycomm.log</state>
</option>
<option>
<name>E1DoLogfile</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>E20RL78</name>
<archiveVersion>1</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>E20Mandatory</name>
<state>0</state>
</option>
<option>
<name>E20SuppressLoad</name>
<state>0</state>
</option>
<option>
<name>E20VerifyLoad</name>
<state>0</state>
</option>
<option>
<name>E20LogFile</name>
<state>$PROJ_DIR$\cspycomm.log</state>
</option>
<option>
<name>E20DoLogfile</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>IECRL78</name>
<archiveVersion>1</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>IecMandatory</name>
<state>0</state>
</option>
<option>
<name>IecSuppressLoad</name>
<state>0</state>
</option>
<option>
<name>IecVerifyLoad</name>
<state>0</state>
</option>
<option>
<name>IecLogFile</name>
<state>$PROJ_DIR$\cspycomm.log</state>
</option>
<option>
<name>IecDoLogfile</name>
<state>0</state>
</option>
<option>
<name>IecSupExchAdapter</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>SIMRL78</name>
<archiveVersion>1</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>SimMandatory</name>
<state>1</state>
</option>
</data>
</settings>
<settings>
<name>TKRL78</name>
<archiveVersion>1</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>TKMandatory</name>
<state>0</state>
</option>
<option>
<name>TKSuppressLoad</name>
<state>0</state>
</option>
<option>
<name>TKVerifyLoad</name>
<state>0</state>
</option>
<option>
<name>TKLogFile</name>
<state>$PROJ_DIR$\cspycomm.log</state>
</option>
<option>
<name>TKDoLogfile</name>
<state>0</state>
</option>
</data>
</settings>
<debuggerPlugins>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
<loadFlag>1</loadFlag>
</plugin>
<plugin>
<file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin</file>
<loadFlag>1</loadFlag>
</plugin>
<plugin>
<file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
<loadFlag>1</loadFlag>
</plugin>
</debuggerPlugins>
</configuration>
</project>

@ -1,910 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<project>
<fileVersion>2</fileVersion>
<configuration>
<name>Debug</name>
<toolchain>
<name>RL78</name>
</toolchain>
<debug>1</debug>
<settings>
<name>General</name>
<archiveVersion>2</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>GenDeviceSelect</name>
<state>R5F100LE RL78 - R5F100LE</state>
</option>
<option>
<name>GenCodeModel</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>GenDataModel</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>GenNearConstLocation</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>GenNearConstStart</name>
<state>0xf2000</state>
</option>
<option>
<name>GenNearConstSize</name>
<state>51.75</state>
</option>
<option>
<name>GOutputBinary</name>
<state>0</state>
</option>
<option>
<name>ExePath</name>
<state>Debug\Exe</state>
</option>
<option>
<name>ObjPath</name>
<state>Debug\Obj</state>
</option>
<option>
<name>ListPath</name>
<state>Debug\List</state>
</option>
<option>
<name>GenRuntimeLibSelect</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>GenRuntimeLibSelectSlave</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>GenRTDescription</name>
<state>Use the normal configuration of the C/EC++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
</option>
<option>
<name>GenRTConfigPath</name>
<state>$TOOLKIT_DIR$\LIB\dlrl78nn1n.h</state>
</option>
<option>
<name>GenRTLibraryPath</name>
<state>$TOOLKIT_DIR$\LIB\dlrl78nn1n.r87</state>
</option>
<option>
<name>GenHwSupport</name>
<state>0</state>
</option>
<option>
<name>GenLibInFormatter</name>
<version>0</version>
<state>2</state>
</option>
<option>
<name>GenLibInFormatterDescription</name>
<state>No specifier n, no float, no scan set, no assignment suppressing.</state>
</option>
<option>
<name>GenLibOutFormatter</name>
<version>0</version>
<state>3</state>
</option>
<option>
<name>GenLibOutFormatterDescription</name>
<state>No specifier a or A, no specifier n, no float, no flags.</state>
</option>
<option>
<name>GenStackSize</name>
<state>130</state>
</option>
<option>
<name>GenNearHeapSize</name>
<state>0</state>
</option>
<option>
<name>GenFarHeapSize</name>
<state>0</state>
</option>
<option>
<name>GeneralEnableMisra</name>
<state>0</state>
</option>
<option>
<name>GeneralMisraVerbose</name>
<state>0</state>
</option>
<option>
<name>GeneralMisraVer</name>
<state>0</state>
</option>
<option>
<name>GeneralMisraRules04</name>
<version>0</version>
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
</option>
<option>
<name>GeneralMisraRules98</name>
<version>0</version>
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
</option>
</data>
</settings>
<settings>
<name>ICCRL78</name>
<archiveVersion>2</archiveVersion>
<data>
<version>5</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>IccDivModInstr</name>
<state>0</state>
</option>
<option>
<name>IccCore</name>
<state>0</state>
</option>
<option>
<name>IccCodeModel</name>
<state>0</state>
</option>
<option>
<name>IccDataModel</name>
<state>0</state>
</option>
<option>
<name>IccNearConstLocation</name>
<state>0</state>
</option>
<option>
<name>IccObjPrefix</name>
<state>1</state>
</option>
<option>
<name>IccLibConfigHeader</name>
<state>1</state>
</option>
<option>
<name>IccLang</name>
<state>0</state>
</option>
<option>
<name>IccCDialect</name>
<state>1</state>
</option>
<option>
<name>IccAllowVLA</name>
<state>0</state>
</option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccRelaxedFpPrecision</name>
<state>0</state>
</option>
<option>
<name>IccRequirePrototypes</name>
<state>0</state>
</option>
<option>
<name>IccLanguageConformance</name>
<state>0</state>
</option>
<option>
<name>IccCharIs</name>
<state>1</state>
</option>
<option>
<name>IccMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>IccOptLevel</name>
<state>0</state>
</option>
<option>
<name>IccOptStrategy</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>IccOptLevelSlave</name>
<state>0</state>
</option>
<option>
<name>IccOptAllowList</name>
<version>0</version>
<state>00000</state>
</option>
<option>
<name>IccWrksegEnable</name>
<state>0</state>
</option>
<option>
<name>IccWrksegSize</name>
<state>20</state>
</option>
<option>
<name>IccCalltFuncRt</name>
<state>0</state>
</option>
<option>
<name>IccModuleTypeOverride</name>
<state>0</state>
</option>
<option>
<name>IccModuleType</name>
<state>0</state>
</option>
<option>
<name>IccObjModuleNameOverride</name>
<state>0</state>
</option>
<option>
<name>IccObjModuleName</name>
<state>$FILE_BNAME$</state>
</option>
<option>
<name>IccCodeSegmentNameOverride</name>
<state>0</state>
</option>
<option>
<name>IccCodeSegmentName</name>
<state>CODE</state>
</option>
<option>
<name>IccGenerateDebugInfo</name>
<state>1</state>
</option>
<option>
<name>IccOutputFile</name>
<state>$FILE_BNAME$.r87</state>
</option>
<option>
<name>CCDefines</name>
<state></state>
</option>
<option>
<name>CCPreprocFile</name>
<state>0</state>
</option>
<option>
<name>CCPreprocComments</name>
<state>0</state>
</option>
<option>
<name>CCPreprocLine</name>
<state>0</state>
</option>
<option>
<name>CCListCFile</name>
<state>0</state>
</option>
<option>
<name>CCListCMnemonics</name>
<state>1</state>
</option>
<option>
<name>CCListCMessages</name>
<state>0</state>
</option>
<option>
<name>CCListAssFile</name>
<state>0</state>
</option>
<option>
<name>CCListAssSource</name>
<state>1</state>
</option>
<option>
<name>CCEnableRemarks</name>
<state>0</state>
</option>
<option>
<name>CCDiagSuppress</name>
<state>Pa082</state>
</option>
<option>
<name>CCDiagRemark</name>
<state></state>
</option>
<option>
<name>CCDiagWarning</name>
<state></state>
</option>
<option>
<name>CCDiagError</name>
<state></state>
</option>
<option>
<name>CCDiagWarnAreErr</name>
<state>0</state>
</option>
<option>
<name>CCCompilerRuntimeInfo</name>
<state>0</state>
</option>
<option>
<name>PreInclude</name>
<state></state>
</option>
<option>
<name>CCIncludePath2</name>
<state>$PROJ_DIR$\..\..\Source\include</state>
<state>$PROJ_DIR$\..\Common\include</state>
<state>$PROJ_DIR$</state>
<state>$PROJ_DIR$\..\..\Source\portable\IAR\RL78</state>
</option>
<option>
<name>CCStdIncCheck</name>
<state>0</state>
</option>
<option>
<name>CompilerMisraOverride</name>
<state>0</state>
</option>
<option>
<name>CompilerMisraRules04</name>
<version>0</version>
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
</option>
<option>
<name>CompilerMisraRules98</name>
<version>0</version>
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
</option>
<option>
<name>IccUseExtraOptions</name>
<state>0</state>
</option>
<option>
<name>IccExtraOptions</name>
<state></state>
</option>
</data>
</settings>
<settings>
<name>ARL78</name>
<archiveVersion>2</archiveVersion>
<data>
<version>1</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>AsmCore</name>
<state>0</state>
</option>
<option>
<name>AsmHwSupport</name>
<state>0</state>
</option>
<option>
<name>AsmObjPrefix</name>
<state>1</state>
</option>
<option>
<name>AsmOutputFile</name>
<state>$FILE_BNAME$.r87</state>
</option>
<option>
<name>AsmCaseSensitivity</name>
<state>1</state>
</option>
<option>
<name>AsmMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>AsmAllowMnemonics</name>
<state>0</state>
</option>
<option>
<name>AsmAllowDirectives</name>
<state>0</state>
</option>
<option>
<name>AsmMacroChars</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>AsmDebugInfo</name>
<state>1</state>
</option>
<option>
<name>AsmListFile</name>
<state>0</state>
</option>
<option>
<name>AsmListNoDiagnostics</name>
<state>0</state>
</option>
<option>
<name>AsmListIncludeCrossRef</name>
<state>0</state>
</option>
<option>
<name>AsmListMacroDefinitions</name>
<state>0</state>
</option>
<option>
<name>AsmListNoMacroExpansion</name>
<state>0</state>
</option>
<option>
<name>AsmListAssembledOnly</name>
<state>0</state>
</option>
<option>
<name>AsmListTruncateMultiline</name>
<state>0</state>
</option>
<option>
<name>AsmStdIncludeIgnore</name>
<state>0</state>
</option>
<option>
<name>AsmIncludePath</name>
<state>$PROJ_DIR$\..\..\Source\portable\IAR\RL78</state>
<state>$PROJ_DIR$</state>
</option>
<option>
<name>AsmDefines</name>
<state></state>
<state>__NEAR_DATA_MODEL__</state>
</option>
<option>
<name>AsmPreprocOutput</name>
<state>0</state>
</option>
<option>
<name>AsmPreprocComment</name>
<state>0</state>
</option>
<option>
<name>AsmPreprocLine</name>
<state>0</state>
</option>
<option>
<name>AsmEnableRemarks</name>
<state>0</state>
</option>
<option>
<name>AsmDiagnosticsSuppress</name>
<state></state>
</option>
<option>
<name>AsmDiagnosticsRemark</name>
<state></state>
</option>
<option>
<name>AsmDiagnosticsWarning</name>
<state></state>
</option>
<option>
<name>AsmDiagnosticsError</name>
<state></state>
</option>
<option>
<name>AsmDiagnosticsWarningsAreErrors</name>
<state>0</state>
</option>
<option>
<name>AsmLimitNumberOfErrors</name>
<state>0</state>
</option>
<option>
<name>AsmMaxNumberOfErrors</name>
<state>100</state>
</option>
<option>
<name>AsmUseExtraOptions</name>
<state>0</state>
</option>
<option>
<name>AsmExtraOptions</name>
<state></state>
</option>
<option>
<name>AsmCodeModel</name>
<state>0</state>
</option>
<option>
<name>AsmDataModel</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>CUSTOM</name>
<archiveVersion>3</archiveVersion>
<data>
<extensions></extensions>
<cmdline></cmdline>
</data>
</settings>
<settings>
<name>BICOMP</name>
<archiveVersion>0</archiveVersion>
<data/>
</settings>
<settings>
<name>BUILDACTION</name>
<archiveVersion>1</archiveVersion>
<data>
<prebuild></prebuild>
<postbuild></postbuild>
</data>
</settings>
<settings>
<name>XLINK</name>
<archiveVersion>2</archiveVersion>
<data>
<version>13</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>XOutOverride</name>
<state>0</state>
</option>
<option>
<name>OutputFile</name>
<state>RTOSDemo.d87</state>
</option>
<option>
<name>OutputFormat</name>
<version>11</version>
<state>23</state>
</option>
<option>
<name>FormatVariant</name>
<version>8</version>
<state>2</state>
</option>
<option>
<name>SecondaryOutputFile</name>
<state>(None for the selected format)</state>
</option>
<option>
<name>XDefines</name>
<state></state>
</option>
<option>
<name>AlwaysOutput</name>
<state>0</state>
</option>
<option>
<name>OverlapWarnings</name>
<state>0</state>
</option>
<option>
<name>NoGlobalCheck</name>
<state>0</state>
</option>
<option>
<name>XList</name>
<state>1</state>
</option>
<option>
<name>SegmentMap</name>
<state>1</state>
</option>
<option>
<name>ListSymbols</name>
<state>2</state>
</option>
<option>
<name>PageLengthCheck</name>
<state>0</state>
</option>
<option>
<name>PageLength</name>
<state>80</state>
</option>
<option>
<name>XIncludes</name>
<state>$TOOLKIT_DIR$\LIB\</state>
</option>
<option>
<name>ModuleStatus</name>
<state>0</state>
</option>
<option>
<name>XclOverride</name>
<state>0</state>
</option>
<option>
<name>XclFile</name>
<state>$TOOLKIT_DIR$\CONFIG\lnkr5f100le.xcl</state>
</option>
<option>
<name>XclFileSlave</name>
<state></state>
</option>
<option>
<name>XLinkMisraHandler</name>
<state>0</state>
</option>
<option>
<name>XlinkExtraOptionsCheck</name>
<state>0</state>
</option>
<option>
<name>XlinkExtraOptions</name>
<state></state>
</option>
<option>
<name>DoFill</name>
<state>0</state>
</option>
<option>
<name>FillerByte</name>
<state>0xFF</state>
</option>
<option>
<name>DoCrc</name>
<state>0</state>
</option>
<option>
<name>CrcSize</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>CrcAlgo</name>
<state>1</state>
</option>
<option>
<name>CrcPoly</name>
<state>0x11021</state>
</option>
<option>
<name>CrcCompl</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>RangeCheckAlternatives</name>
<state>0</state>
</option>
<option>
<name>SuppressAllWarn</name>
<state>0</state>
</option>
<option>
<name>SuppressDiags</name>
<state>w18, w6</state>
</option>
<option>
<name>TreatAsWarn</name>
<state></state>
</option>
<option>
<name>TreatAsErr</name>
<state></state>
</option>
<option>
<name>ModuleLocalSym</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>CrcBitOrder</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>IncludeSuppressed</name>
<state>0</state>
</option>
<option>
<name>ModuleSummary</name>
<state>1</state>
</option>
<option>
<name>xcProgramEntryLabel</name>
<state>__program_start</state>
</option>
<option>
<name>DebugInformation</name>
<state>0</state>
</option>
<option>
<name>RuntimeControl</name>
<state>1</state>
</option>
<option>
<name>IoEmulation</name>
<state>1</state>
</option>
<option>
<name>AllowExtraOutput</name>
<state>0</state>
</option>
<option>
<name>GenerateExtraOutput</name>
<state>1</state>
</option>
<option>
<name>XExtraOutOverride</name>
<state>1</state>
</option>
<option>
<name>ExtraOutputFile</name>
<state>RTOSDemo.a87</state>
</option>
<option>
<name>ExtraOutputFormat</name>
<version>11</version>
<state>23</state>
</option>
<option>
<name>ExtraFormatVariant</name>
<version>8</version>
<state>2</state>
</option>
<option>
<name>xcOverrideProgramEntryLabel</name>
<state>0</state>
</option>
<option>
<name>xcProgramEntryLabelSelect</name>
<state>0</state>
</option>
<option>
<name>ListOutputFormat</name>
<state>0</state>
</option>
<option>
<name>BufferedTermOutput</name>
<state>1</state>
</option>
<option>
<name>OverlaySystemMap</name>
<state>0</state>
</option>
<option>
<name>RawBinaryFile</name>
<state></state>
</option>
<option>
<name>RawBinarySymbol</name>
<state></state>
</option>
<option>
<name>RawBinarySegment</name>
<state></state>
</option>
<option>
<name>RawBinaryAlign</name>
<state></state>
</option>
<option>
<name>CrcAlign</name>
<state>1</state>
</option>
<option>
<name>CrcInitialValue</name>
<state>0x0</state>
</option>
<option>
<name>XlinkNearConstLocation</name>
<state>1</state>
</option>
<option>
<name>XlinkRTLibraryFile</name>
<state>1</state>
</option>
<option>
<name>XlinkHwSupport</name>
<state>1</state>
</option>
<option>
<name>XlinkLibIOConfig</name>
<state>1</state>
</option>
<option>
<name>XlinkStackSize</name>
<state>1</state>
</option>
<option>
<name>XlinkNearHeap</name>
<state>1</state>
</option>
<option>
<name>XlinkFarHeap</name>
<state>1</state>
</option>
</data>
</settings>
<settings>
<name>XAR</name>
<archiveVersion>2</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>XarOutOverride</name>
<state>0</state>
</option>
<option>
<name>XarInputs</name>
<state></state>
</option>
<option>
<name>XarOutputFile</name>
<state></state>
</option>
</data>
</settings>
<settings>
<name>INTERNAL_HWSUPPORT</name>
<archiveVersion>2</archiveVersion>
<data/>
</settings>
<settings>
<name>BILINK</name>
<archiveVersion>0</archiveVersion>
<data/>
</settings>
</configuration>
<group>
<name>Demo Source</name>
<group>
<name>StandardDemos</name>
<file>
<name>$PROJ_DIR$\..\Common\Minimal\blocktim.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Common\Minimal\PollQ.c</name>
</file>
</group>
<file>
<name>$PROJ_DIR$\main.c</name>
</file>
<file>
<name>$PROJ_DIR$\RegTest.s87</name>
</file>
</group>
<group>
<name>Kernel Source</name>
<file>
<name>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_1.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\list.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\portable\IAR\RL78\port.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\portable\IAR\RL78\portasm.s87</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\queue.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\tasks.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\timers.c</name>
</file>
</group>
</project>

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<workspace>
<project>
<path>$WS_DIR$\RTOSDemo.ewp</path>
</project>
<batchBuild/>
</workspace>

@ -1,188 +0,0 @@
;/*
; * FreeRTOS V202112.00
; * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
; *
; * Permission is hereby granted, free of charge, to any person obtaining a copy of
; * this software and associated documentation files (the "Software"), to deal in
; * the Software without restriction, including without limitation the rights to
; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
; * the Software, and to permit persons to whom the Software is furnished to do so,
; * subject to the following conditions:
; *
; * The above copyright notice and this permission notice shall be included in all
; * copies or substantial portions of the Software.
; *
; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
; *
; * https://www.FreeRTOS.org
; * https://aws.amazon.com/freertos
; *
; * 1 tab == 4 spaces!
; */
;
; This file defines the RegTest tasks as described at the top of main.c
;
;------------------------------------------------------------------------------
#if __CORE__ != __RL78_1__
#error "This file is only for RL78 Devices"
#endif
; Functions implemented in this file
;------------------------------------------------------------------------------
PUBLIC vRegTest1
PUBLIC vRegTest2
; Functions used by this file
;------------------------------------------------------------------------------
EXTERN vRegTestError
;------------------------------------------------------------------------------
; Fill all the registers with known values, then check that the registers
; contain the expected value. An incorrect value being indicative of an
; error in the context switch mechanism.
;
; Input: NONE
;
; Call: Created as a task.
;
; Output: NONE
;
;------------------------------------------------------------------------------
RSEG CODE:CODE
vRegTest1:
; First fill the registers.
MOVW AX, #0x1122
MOVW BC, #0x3344
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:
; Continuously check that the register values remain at their expected
; values. The BRK is to test the yield. This task runs at low priority
; so will also regularly get preempted.
BRK
; Compare with the expected value.
CMPW AX, #0x1122
BZ +5
; Jump over the branch to vRegTestError() if the register contained the
; expected value - otherwise flag an error by executing vRegTestError().
BR vRegTestError
; Repeat for all the registers.
MOVW AX, BC
CMPW AX, #0x3344
BZ +5
BR vRegTestError
MOVW AX, DE
CMPW AX, #0x5566
BZ +5
BR vRegTestError
MOVW AX, HL
CMPW AX, #0x7788
BZ +5
BR vRegTestError
MOV A, CS
CMP A, #0x01
BZ +5
BR vRegTestError
#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 A, ES
CMP A, #0x02
BZ +5
BR vRegTestError
#endif
MOVW AX, #0x1122
BR loop1
;------------------------------------------------------------------------------
; Fill all the registers with known values, then check that the registers
; contain the expected value. An incorrect value being indicative of an
; error in the context switch mechanism.
;
; Input: NONE
;
; Call: Created as a task.
;
; Output: NONE
;
;------------------------------------------------------------------------------
RSEG CODE:CODE
vRegTest2:
MOVW AX, #0x99aa
MOVW BC, #0xbbcc
MOVW DE, #0xddee
MOVW HL, #0xff12
MOV CS, #0x03
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
MOV ES, #0x04
#endif
loop2:
CMPW AX, #0x99aa
BZ +5
BR vRegTestError
MOVW AX, BC
CMPW AX, #0xbbcc
BZ +5
BR vRegTestError
MOVW AX, DE
CMPW AX, #0xddee
BZ +5
BR vRegTestError
MOVW AX, HL
CMPW AX, #0xff12
BZ +5
BR vRegTestError
MOV A, CS
CMP A, #0x03
BZ +5
BR vRegTestError
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
MOV A, ES
CMP A, #0x04
BZ +5
BR vRegTestError
#endif
MOVW AX, #0x99aa
BR loop2
END

@ -1,413 +0,0 @@
/*
* FreeRTOS V202112.00
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://aws.amazon.com/freertos
*
*/
/*
*
* 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"
/* 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_PERIOD_MS constant. */
#define mainCHECK_TIMER_PERIOD_MS ( 3000UL / portTICK_PERIOD_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_PERIOD_MS
constant. */
#define mainERROR_CHECK_TIMER_PERIOD_MS ( 200UL / portTICK_PERIOD_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 )
/* The LED toggled by the check timer. */
#define mainLED_0 P7_bit.no7
/* A block time of zero simple means "don't block". */
#define mainDONT_BLOCK ( 0U )
/*-----------------------------------------------------------*/
/*
* The 'check' timer callback function, as described at the top of this file.
*/
static void prvCheckTimerCallback( TimerHandle_t xTimer );
/*
* The 'demo' timer callback function, as described at the top of this file.
*/
static void prvDemoTimerCallback( TimerHandle_t xTimer );
/*
* This function is called from the C startup routine to setup the processor -
* in particular the clock source.
*/
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 );
/*-----------------------------------------------------------*/
/* If an error is discovered by one of the RegTest tasks then this flag is set
to pdFAIL. The 'check' timer then inspects this flag to detect errors within
the RegTest tasks. */
static short sRegTestStatus = pdPASS;
/* The check timer. This uses prvCheckTimerCallback() as its callback
function. */
static TimerHandle_t xCheckTimer = NULL;
/* The demo timer. This uses prvDemoTimerCallback() as its callback function. */
static TimerHandle_t xDemoTimer = NULL;
/* This variable is incremented each time the demo timer expires. */
static volatile unsigned long ulDemoSoftwareTimerCounter = 0UL;
/* RL78 Option Byte Definition. Watchdog disabled, LVI enabled, OCD interface
enabled. */
__root __far const unsigned char OptionByte[] @ 0x00C0 =
{
0x6eU, 0xffU, 0xe8U, 0x85U
};
/* Security byte definition */
__root __far const unsigned char SecuIDCode[] @ 0x00C4 =
{
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54
};
/*-----------------------------------------------------------*/
short 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( "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( "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( ;; );
}
/*-----------------------------------------------------------*/
static void prvDemoTimerCallback( TimerHandle_t 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( TimerHandle_t xTimer )
{
static portBASE_TYPE xChangedTimerPeriodAlready = pdFALSE, xErrorStatus = pdPASS;
/* Inspect the status of the standard demo tasks. */
if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
{
xErrorStatus = pdFAIL;
}
if( xArePollingQueuesStillRunning() != pdTRUE )
{
xErrorStatus = pdFAIL;
}
if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
{
xErrorStatus = pdFAIL;
}
/* Inspect the status of the reg test tasks. */
if( sRegTestStatus != pdPASS )
{
xErrorStatus = pdFAIL;
}
/* 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. */
mainLED_0 = !mainLED_0;
}
/*-----------------------------------------------------------*/
int __low_level_init(void)
{
unsigned char ucResetFlag = RESF;
portDISABLE_INTERRUPTS();
/* Clock Configuration:
In this port, to use the internal high speed clock source of the
microcontroller, define the configCLOCK_SOURCE as 1 in FreeRTOSConfig.h. To
use an external clock define configCLOCK_SOURCE as 0. */
#if configCLOCK_SOURCE == 1
{
/* Set fMX */
CMC = 0x00;
MSTOP = 1U;
/* Set fMAIN */
MCM0 = 0U;
/* Set fSUB */
XTSTOP = 1U;
OSMC = 0x10;
/* Set fCLK */
CSS = 0U;
/* Set fIH */
HIOSTOP = 0U;
}
#else
{
unsigned char ucTempStabset, ucTempStabWait;
/* Set fMX */
CMC = 0x41;
OSTS = 0x07;
MSTOP = 0U;
ucTempStabset = 0xFF;
do
{
ucTempStabWait = OSTC;
ucTempStabWait &= ucTempStabset;
}
while( ucTempStabWait != ucTempStabset );
/* Set fMAIN */
MCM0 = 1U;
/* Set fSUB */
XTSTOP = 1U;
OSMC = 0x10;
/* Set fCLK */
CSS = 0U;
/* Set fIH */
HIOSTOP = 0U;
}
#endif /* configCLOCK_SOURCE == 1 */
/* LED port initialization - set port register. */
P7 &= 0x7F;
/* Set port mode register. */
PM7 &= 0x7F;
/* Switch pin initialization - enable pull-up resistor. */
PU12_bit.no0 = 1;
return pdTRUE;
}
/*-----------------------------------------------------------*/
void vRegTestError( void )
{
/* Called by the RegTest tasks if an error is found. lRegTestStatus is
inspected by the check task. */
sRegTestStatus = pdFAIL;
/* Do not return from here as the reg test tasks clobber all registers so
function calls may not function correctly. */
for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationMallocFailedHook( void )
{
/* Called if a call to pvPortMalloc() fails because there is insufficient
free memory available in the FreeRTOS heap. pvPortMalloc() is called
internally by FreeRTOS API functions that create tasks, queues, software
timers, and semaphores. The size of the FreeRTOS heap is set by the
configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h. */
taskDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
{
( void ) pcTaskName;
( void ) pxTask;
/* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
function is called if a stack overflow is detected. */
taskDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationIdleHook( void )
{
volatile size_t xFreeHeapSpace;
/* This is just a trivial example of an idle hook. It is called on each
cycle of the idle task. It must *NOT* attempt to block. In this case the
idle task just queries the amount of FreeRTOS heap that remains. See the
memory management section on the http://www.FreeRTOS.org web site for memory
management options. If there is a lot of heap memory free then the
configTOTAL_HEAP_SIZE value in FreeRTOSConfig.h can be reduced to free up
RAM. */
xFreeHeapSpace = xPortGetFreeHeapSize();
}

@ -1,15 +0,0 @@
@REM This batch file has been generated by the IAR Embedded Workbench
@REM C-SPY Debugger, as an aid to preparing a command line for running
@REM the cspybat command line utility using the appropriate settings.
@REM
@REM You can launch cspybat by typing the name of this batch file followed
@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
@REM Note that this file is generated every time a new debug session
@REM is initialized, so you may want to move or rename the file before
@REM making changes.
@REM
"C:\devtools\IAR Systems\Embedded Workbench 6.0\common\bin\cspybat" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rl78\bin\rl78proc.dll" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rl78\bin\rl78ocd.dll" %1 --plugin "C:\devtools\IAR Systems\Embedded Workbench 6.0\rl78\bin\rl78bat.dll" --backend -B "--core" "rl78_1" "--near_const_location" "rom0" "--near_const_start" "0xf2000" "--near_const_size" "51.75" "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rl78\CONFIG\DDF\ior5f100le.ddf" "-d" "tk"

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<Project>
<Desktop>
<Static>
<Debug-Log>
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>912</ColumnWidth1></Debug-Log>
<Build>
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>684</ColumnWidth1><ColumnWidth2>182</ColumnWidth2><ColumnWidth3>45</ColumnWidth3></Build>
<Workspace>
<ColumnWidths>
<Column0>188</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Disassembly>
<PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><MixedMode>1</MixedMode><CodeCovShow>1</CodeCovShow><InstrProfShow>1</InstrProfShow></Disassembly>
<STACK2><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></STACK2><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register></Static>
<Windows>
<Wnd0>
<Tabs>
<Tab>
<Identity>TabID-30626-17561</Identity>
<TabName>Debug Log</TabName>
<Factory>Debug-Log</Factory>
<Session/>
</Tab>
<Tab>
<Identity>TabID-30103-17570</Identity>
<TabName>Build</TabName>
<Factory>Build</Factory>
<Session/>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd0><Wnd1>
<Tabs>
<Tab>
<Identity>TabID-8606-17564</Identity>
<TabName>Workspace</TabName>
<Factory>Workspace</Factory>
<Session>
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/StandardDemos</ExpandedNode><ExpandedNode>RTOSDemo/Kernel Source</ExpandedNode></NodeDict></Session>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd1></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>231</YPos><SelStart>11243</SelStart><SelEnd>11243</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-01bf0d90><key>iaridepm.enu1</key></Toolbar-01bf0d90></Sizes></Row0><Row1><Sizes><Toolbar-02bb4d40><key>debuggergui.enu1</key></Toolbar-02bb4d40><Toolbar-02bb55d8><key>rl78ocd.enu1</key></Toolbar-02bb55d8></Sizes></Row1></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>631</Bottom><Right>262</Right><x>-2</x><y>-2</y><xscreen>264</xscreen><yscreen>244</yscreen><sizeHorzCX>206250</sizeHorzCX><sizeHorzCY>259023</sizeHorzCY><sizeVertCX>206250</sizeVertCX><sizeVertCY>671975</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>242</Bottom><Right>1282</Right><x>-2</x><y>-2</y><xscreen>1284</xscreen><yscreen>244</yscreen><sizeHorzCX>1003125</sizeHorzCX><sizeHorzCY>259023</sizeHorzCY><sizeVertCX>206250</sizeVertCX><sizeVertCY>259023</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Project>

@ -1,185 +0,0 @@
[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=-1460440724
[DisAssemblyWindow]
NumStates=_ 1
State 1=_ 1
[InstructionProfiling]
Enabled=_ 0
[CodeCoverage]
Enabled=_ 0
[E1]
Map0=0,0,65535,65536
Map1=1,1044224,1048319,4096
MapEntries=2
HWsettings=1,0,0,0,4,0,1,0,16,16
HWsettingsCube=2,4294967295,2,4294967295,0,1,0,0
HWsettingsRsuid=55555555555555555554
EventEntries=0
SeqName0=
SeqData0=0,0
SeqEnable10=0,0,0,0,0,0,0,0,0,0
SeqEnable20=0,0,0,0,0,0,0,0,0,0
SeqEnable30=0,0,0,0,0,0,0,0,0,0
SeqEnable40=0,0,0,0,0,0,0,0,0,0
SeqDisable0=0,0,0,0,0,0,0,0,0,0
SeqData20=0,0,0,0,0,0
SeqName1=
SeqData1=0,0
SeqEnable11=0,0,0,0,0,0,0,0,0,0
SeqEnable21=0,0,0,0,0,0,0,0,0,0
SeqEnable31=0,0,0,0,0,0,0,0,0,0
SeqEnable41=0,0,0,0,0,0,0,0,0,0
SeqDisable1=0,0,0,0,0,0,0,0,0,0
SeqData21=0,0,0,0,0,0
SeqName2=
SeqData2=0,0
SeqEnable12=0,0,0,0,0,0,0,0,0,0
SeqEnable22=0,0,0,0,0,0,0,0,0,0
SeqEnable32=0,0,0,0,0,0,0,0,0,0
SeqEnable42=0,0,0,0,0,0,0,0,0,0
SeqDisable2=0,0,0,0,0,0,0,0,0,0
SeqData22=0,0,0,0,0,0
SeqName3=
SeqData3=0,0
SeqEnable13=0,0,0,0,0,0,0,0,0,0
SeqEnable23=0,0,0,0,0,0,0,0,0,0
SeqEnable33=0,0,0,0,0,0,0,0,0,0
SeqEnable43=0,0,0,0,0,0,0,0,0,0
SeqDisable3=0,0,0,0,0,0,0,0,0,0
SeqData23=0,0,0,0,0,0
SeqName4=
SeqData4=0,0
SeqEnable14=0,0,0,0,0,0,0,0,0,0
SeqEnable24=0,0,0,0,0,0,0,0,0,0
SeqEnable34=0,0,0,0,0,0,0,0,0,0
SeqEnable44=0,0,0,0,0,0,0,0,0,0
SeqDisable4=0,0,0,0,0,0,0,0,0,0
SeqData24=0,0,0,0,0,0
TraceSettings=64,0,0,0,0,0,8192
TimerSettings=0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CoverSettings=1048192,1048207,0
Version=1,xxx.txt
LastDevFile=DR5F100LE.DVF
EmulType=64
BreakToggle=0
EventLimits=0, 1, 1, 0, 0, 0, 2
LastSetupFailed=1
[StackPlugin]
Enabled=1
OverflowWarningsEnabled=1
WarningThreshold=90
SpWarningsEnabled=1
WarnHow=0
UseTrigger=1
TriggerName=main
LimitSize=0
ByteLimit=50
[TK]
LastSetupFailed=0
Map0=0,0,65535,65536
Map1=1,1044224,1048319,4096
MapEntries=2
HWsettings=1,0,0,2,4,0,1,0,16,1
HWsettingsCube=2,4294967295,2,4294967295,0,1,0,0
HWsettingsRsuid=55555555555555555554
EventEntries=0
SeqName0=
SeqData0=0,0
SeqEnable10=0,0,0,0,0,0,0,0,0,0
SeqEnable20=0,0,0,0,0,0,0,0,0,0
SeqEnable30=0,0,0,0,0,0,0,0,0,0
SeqEnable40=0,0,0,0,0,0,0,0,0,0
SeqDisable0=0,0,0,0,0,0,0,0,0,0
SeqData20=0,0,0,0,0,0
SeqName1=
SeqData1=0,0
SeqEnable11=0,0,0,0,0,0,0,0,0,0
SeqEnable21=0,0,0,0,0,0,0,0,0,0
SeqEnable31=0,0,0,0,0,0,0,0,0,0
SeqEnable41=0,0,0,0,0,0,0,0,0,0
SeqDisable1=0,0,0,0,0,0,0,0,0,0
SeqData21=0,0,0,0,0,0
SeqName2=
SeqData2=0,0
SeqEnable12=0,0,0,0,0,0,0,0,0,0
SeqEnable22=0,0,0,0,0,0,0,0,0,0
SeqEnable32=0,0,0,0,0,0,0,0,0,0
SeqEnable42=0,0,0,0,0,0,0,0,0,0
SeqDisable2=0,0,0,0,0,0,0,0,0,0
SeqData22=0,0,0,0,0,0
SeqName3=
SeqData3=0,0
SeqEnable13=0,0,0,0,0,0,0,0,0,0
SeqEnable23=0,0,0,0,0,0,0,0,0,0
SeqEnable33=0,0,0,0,0,0,0,0,0,0
SeqEnable43=0,0,0,0,0,0,0,0,0,0
SeqDisable3=0,0,0,0,0,0,0,0,0,0
SeqData23=0,0,0,0,0,0
SeqName4=
SeqData4=0,0
SeqEnable14=0,0,0,0,0,0,0,0,0,0
SeqEnable24=0,0,0,0,0,0,0,0,0,0
SeqEnable34=0,0,0,0,0,0,0,0,0,0
SeqEnable44=0,0,0,0,0,0,0,0,0,0
SeqDisable4=0,0,0,0,0,0,0,0,0,0
SeqData24=0,0,0,0,0,0
TraceSettings=64,0,0,0,0,0,8192
TimerSettings=0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CoverSettings=1048192,1048207,0
Version=1,trace.txt
LastDevFile=DR5F100LE.DVF
EmulType=256
BreakToggle=0
EventLimits=0, 1, 1, 0, 0, 0, 2
[Stack]
FillEnabled=0
OverflowWarningsEnabled=1
WarningThreshold=90
SpWarningsEnabled=1
WarnLogOnly=1
UseTrigger=1
TriggerName=main
LimitSize=0
ByteLimit=50
[CallStack]
ShowArgs=0
[Log file]
LoggingEnabled=_ 0
LogFile=_ ""
Category=_ 0
[TermIOLog]
LoggingEnabled=_ 0
LogFile=_ ""
[TraceHelper]
Enabled=0
ShowSource=1
[CallStackLog]
Enabled=0
[DriverProfiling]
Enabled=0
Mode=0
Graph=0
Symbiont=0
[Breakpoints]
Bp0=_ "STD_CODE" "{$PROJ_DIR$\..\..\Source\portable\MemMang\heap_1.c}.121.4@1" 1 0 0 0 "" 0 ""
Count=1
[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

@ -1,49 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<Workspace>
<ConfigDictionary>
<CurrentConfigs><Project>RTOSDemo/Debug</Project></CurrentConfigs></ConfigDictionary>
<Desktop>
<Static>
<Workspace>
<ColumnWidths>
<Column0>244</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Build><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>684</ColumnWidth1><ColumnWidth2>182</ColumnWidth2><ColumnWidth3>45</ColumnWidth3></Build><TerminalIO/><Debug-Log><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1218</ColumnWidth1></Debug-Log><Disassembly><MixedMode>1</MixedMode><CodeCovShow>1</CodeCovShow><InstrProfShow>1</InstrProfShow></Disassembly><Find-in-Files><ColumnWidth0>439</ColumnWidth0><ColumnWidth1>62</ColumnWidth1><ColumnWidth2>753</ColumnWidth2></Find-in-Files></Static>
<Windows>
<Wnd2>
<Tabs>
<Tab>
<Identity>TabID-25565-17041</Identity>
<TabName>Workspace</TabName>
<Factory>Workspace</Factory>
<Session>
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode></NodeDict></Session>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-4654-17433</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-7454-1824</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab><Tab><Identity>TabID-32037-14096</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>60</YPos><SelStart>11655</SelStart><SelEnd>11655</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-01336518><key>iaridepm.enu1</key></Toolbar-01336518></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>629</Bottom><Right>318</Right><x>-2</x><y>-2</y><xscreen>263</xscreen><yscreen>200</yscreen><sizeHorzCX>156548</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>190476</sizeVertCX><sizeVertCY>642566</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>309</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>311</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>316701</sizeHorzCY><sizeVertCX>205357</sizeVertCX><sizeVertCY>258656</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Workspace>

@ -0,0 +1,15 @@
# This file should be kept if there is any C-STAT (Static Analysis Tool) custom selection
RTOSDemo.ewt
# Files that are automatically regenerated by the IDE
RTOSDemo.dep
*.log
# Subdirectories that are automatically regenerated by the IDE
settings
QB_R5F10ELE_TB
RSK*
YR*
# Other stale files
*.bak

@ -1,89 +0,0 @@
;/*
; * FreeRTOS V202112.00
; * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
; *
; * Permission is hereby granted, free of charge, to any person obtaining a copy of
; * this software and associated documentation files (the "Software"), to deal in
; * the Software without restriction, including without limitation the rights to
; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
; * the Software, and to permit persons to whom the Software is furnished to do so,
; * subject to the following conditions:
; *
; * The above copyright notice and this permission notice shall be included in all
; * copies or substantial portions of the Software.
; *
; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
; *
; * https://www.FreeRTOS.org
; * https://aws.amazon.com/freertos
; *
; * 1 tab == 4 spaces!
; */
;*
; * 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

@ -20,7 +20,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://aws.amazon.com/freertos
* https://github.com/FreeRTOS
*
*/
@ -39,64 +39,71 @@
* See http://www.freertos.org/a00110.html
*----------------------------------------------------------*/
/* This #ifdef prevents the enclosed code being included from within an
asm file. It is valid in a C file, but not valid in an asm file. */
/*
* This #ifdef prevents the enclosed code being included from within an
* `asm` source file. It is valid in a C file, but not valid in an asm file.
*/
#ifdef __IAR_SYSTEMS_ICC__
#pragma system_include
#include <intrinsics.h>
#pragma system_include
#include <intrinsics.h>
#endif /* __IAR_SYSTEMS_ICC__ */
/* Include hardware dependent header files to allow this demo to run on
multiple evaluation boards. */
/*
* Include hardware dependent header files to allow this demo to run on multiple
* evaluation boards.
*/
#include "demo_specific_io.h"
#define configUSE_PREEMPTION 1
#define configTICK_RATE_HZ ( ( unsigned short ) 1000 )
#define configMAX_PRIORITIES ( 4 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 75 )
#define configMAX_TASK_NAME_LEN ( 10 )
#define configUSE_TRACE_FACILITY 0
#define configUSE_16_BIT_TICKS 1
#define configIDLE_SHOULD_YIELD 1
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 3420 ) )
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configUSE_MUTEXES 1
#define configUSE_PREEMPTION 1
#define configTICK_RATE_HZ ( ( unsigned short ) 1000 )
#define configMAX_PRIORITIES ( 4 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 75 )
#define configMAX_TASK_NAME_LEN ( 10 )
#define configUSE_TRACE_FACILITY 0
#define configUSE_16_BIT_TICKS 1
#define configIDLE_SHOULD_YIELD 1
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 3420 ) )
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configUSE_MUTEXES 1
#define configQUEUE_REGISTRY_SIZE (10)
/* Hook function definitions. */
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configUSE_MALLOC_FAILED_HOOK 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configUSE_MALLOC_FAILED_HOOK 1
/* Software timer definitions. */
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 2 )
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 2 )
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 0
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
#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 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 0
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetIdleTaskHandle 0
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
/*
* Set the following definitions to 1 to include the API function, or zero
* to exclude the API function.
*/
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 0
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetIdleTaskHandle 0
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
/* Tick interrupt vector - this must match the INTIT_vect definition contained
in the ior5fnnnn.h header file included at the top of this file (the value is
dependent on the hardware being used. */
#define configTICK_VECTOR INTIT_vect
/*
* Tick interrupt vector - this demo uses the RL78 Interval Timer peripheral.
* The INTIT_vect definition can be found in the <ior5f1nnn.h> header file.
*/
#define configTICK_VECTOR INTIT_vect
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
#endif /* FREERTOS_CONFIG_H */

@ -0,0 +1,182 @@
# FreeRTOS for the Renesas RL78 microcontrollers
This directory contains an application that demonstrates the use of FreeRTOS on a [Renesas RL78 16-bit microcontroller](https://renesas.com/rl78) using the [IAR compiler](https://www.iar.com/ewrl78).
## Overview
The demo project includes multiple _build configurations_. Each _build configuration_ is set for an evaluation board.
| __Build Configuration__ | __Description__ |
| - | - |
| [YRPBRL78G13][url-yrpbrl78g13] | Renesas Promotion Board RL78/G13 |
| [YRPBRL78G14][url-yrpbrl78g14] | Renesas Promotion Board RL78/G14 |
| [YRDKRL78G14][url-yrdkrl78g14] | Renesas Development Kit RL78/G14 |
| [RSKRL78G1C][url-rskrl78g1c] | Renesas Starter Kit RL78/G1C |
| [RSKRL78L13][url-rskrl78l13] | Renesas Starter Kit RL78/L13 |
| [RSKRL78L1C][url-rskrl78l1c] | Renesas Starter Kit RL78/L1C |
| [QB_R5F10ELE_TB][url-qb-r5f10ele-tb] | Renesas Target Board RL78/G1A |
<!-- links -->
[url-yrpbrl78g13]: https://renesas.com/yrpbrl78g13
[url-yrpbrl78g14]: https://renesas.com/yrpbrl78g14
[url-yrdkrl78g14]: https://renesas.com/yrdkrl78g14
[url-rskrl78g1c]: https://www.renesas.com/products/microcontrollers-microprocessors/rl78-low-power-8-16-bit-mcus/rl78g1c-starter-kit-renesas-starter-kit-rl78g1c
[url-rskrl78l13]: https://www.renesas.com/products/microcontrollers-microprocessors/rl78-low-power-8-16-bit-mcus/rl78-l13-starter-kit-renesas-starter-kit-rl78l13
[url-rskrl78l1c]: https://www.renesas.com/products/microcontrollers-microprocessors/rl78-low-power-8-16-bit-mcus/rl78-l1c-starter-kit-renesas-starter-kit-rl78l1c
[url-qb-r5f10ele-tb]: https://renesas.com/qb-r5f10ele-tb
>:warning: This demo project requires __IAR Embedded Workbench for Renesas RL78__ (EWRL78) version __3.10.1 or later__.
## Important notes
Please read all the following sections before using this RTOS port.
* [Source Code Organization](#source-code-organization)
* [The Demo Application](#the-demo-application)
* [Configuration and Usage Details](#configuration-and-usage-details)
>:bulb: See also the FAQ [My application does not run, what could be wrong?](https://www.freertos.org/FAQHelp.html)
## Source Code Organization
The FreeRTOS download contains the source code for all the FreeRTOS ports, so contains many more files than used by this demo.
>:bulb: See the [Source Code Organization](https://www.freertos.org/a00017.html) section for a description of the downloaded files and information on creating a new project.
## The Demo Application
### Demo application hardware setup
The demo application makes use of an LED that is mounted directly onto each of the supported hardware platforms. No hardware setup is required.
### Functionality
`mainCREATE_SIMPLE_BLINKY_DEMO_ONLY` is defined in [main.c](https://github.com/FreeRTOS/FreeRTOS/blob/main/FreeRTOS/Demo/RL78_multiple_IAR/main.c). If `mainCREATE_SIMPLE_BLINKY_DEMO_ONLY` is set to __1__ then `main()` will call `main_blinky()`, which creates a simple 'blinky' style demo. If `mainCREATE_SIMPLE_BLINKY_DEMO_ONLY` is set to __0__ then `main()` will call `main_full()` which creates a more comprehensive demo.
### Functionality when `mainCREATE_SIMPLE_BLINKY_DEMO_ONLY` is set to 1
`main_blinky()` creates one queue, and two tasks before starting the RTOS scheduler.
* The **"Queue Send"** Task:
The queue send task is implemented by the `prvQueueSendTask()` function in __main_blinky.c__. `prvQueueSendTask()` sits in a loop that causes it to repeatedly block for 200 ms, 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 ms, and so on.
* The **"Queue Receive"** Task:
The queue receive task is implemented by the `prvQueueReceiveTask()` function in __main_blinky.c__. `prvQueueReceiveTask()` sits in a loop where it repeatedly blocks on attempts to read data from the queue that was created within `main_blinky()`, toggling an LED each time the value 100 is received.
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 ms, the queue receive task leaves the Blocked state and toggles the LED every 200 ms.
### Functionality when `mainCREATE_SIMPLE_BLINKY_DEMO_ONLY` is set to 0
`main_full()` creates 13 tasks, 4 queues, and 2 software timers. Many of the tasks are from the set of standard demo tasks that are used with all the RTOS demos, and are documented on the [FreeRTOS.org](https://freertos.org) website.
The following tasks and timers are created in addition to the standard demo tasks.
* The __"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"__ Software Timer and Callback Function:
The demo software 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"__ Software Timer and Callback Function:
The check software timer period is initially set to 3 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 3 seconds, to just 200 ms.
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 3 seconds, then no issues have been discovered. If the LED toggles every 200 ms, then an issue has been discovered with at least one task.
### Building the demo application
1. Launch the __IAR Embedded Workbench for Renesas RL78__.
2. In the menu, select __File____Open Workspace__ and choose the __RTOSDemo.eww__ workspace.
3. Use the drop-down list at the top of the Workspace window to select the _build configuration_ that is correct for the target hardware being used.
4. Press <kbd>F7</kbd> to build the project. The project should build without any errors or warnings.
### Programming the microcontroller and debugging
1. Ensure the target board is connected to the host computer as appropriate. Some development boards include a built in __TK__ interface and only require a USB cable. Other boards require a __Renesas E1 Emulator__ (or later) debug interface.
2. In the menu, select __Project____Download and Debug__. When a debug session is launched for the first time in the EWRL78, a message will show up saying that the emulator has to be configured before downloading a new application. Click the __OK__ button to open the "Emulator Hardware Setup" window for the debug probe. The configuration window provides several options such as "Power supply" for when powering the evaluation board directly from the probe. Once the configuration is complete, the flash memory will be programmed and the program initialization will execute until the debugger breaks on the `main()` function entry point.
## Configuration and Usage Details
### RTOS port specific configuration
Configuration items specific to this demo are contained in [FreeRTOSConfig.h](FreeRTOSConfig.h). The constants defined in this file can be edited to suit your application.
Each port defines `BaseType_t` to equal the most efficient data type for that processor. This port defines `BaseType_t` to be of type `short`.
>:warning: `vPortEndScheduler()` has not been implemented.
### Memory models
The FreeRTOS port will automatically switch between the __near__ and __far__ memory models, depending on the settings in the IAR project options.
This port has been tested with 2 memory model combinations, which are:
| __Combination__ | __Code Model__ | __Data Model__ |
| --------------- | -------------- | -------------- |
| Combination 1 | NEAR | NEAR |
| Combination 2 | FAR | FAR |
### Writing interrupt service routines
Interrupt service routines that cannot cause a context switch have no special requirements and can be written as described by the IAR compiler documentation.
Often you will require an interrupt service routine to cause a context switch. For example, a serial port character being received may unblock a high priority task that was blocked waiting for the character to arrive. If the unblocked task has a higher priority than the current task (the task that was interrupted by the ISR), then the ISR should return directly to the unblocked task. The use of the IAR tools necessitates such interrupt service routines are entered using an assembly file wrapper as it can be seen in the [interrupt_vector.s](interrupt_vector.s) file. An example is provided below, and another example is provided in [main.c](main.c).
__Assembly wrapper__ in [interrupt_vector.s](interrupt_vector.s):
```assembly
; The portmacro.h header provides the portSAVE_CONTEXT() and
; portRESTORE_context() macros.
#include "portmacro.h"
...
PUBLIC _vAnExampleISR_ASM_Wrapper
EXTERN _vAnExampleISR_C_Handler
SECTION `.text`:CODE
_vAnExampleISR_ASM_Wrapper:
portSAVE_CONTEXT ; The wrapped ISR must start with the portSAVE_CONTEXT() macro.
CALL _vAnExampleISR_C_Handler ; Once the context has been saved the C handler can be called.
portRESTORE_CONTEXT ; The wrapped ISR must end with the to portRESTORE_CONTEXT() macro.
RETI ; Returns from the interrupt to whichever task task is now the task selected
; to run (which might differ from the task that was running before the ISR.
...
;-------------------------------------------------------------------------------
; Place a pointer to the _vAnExampleISR_ASM_Wrapper at the correct index into
; the interrupt vector table. This is an example for a ISR which needs context
; switch.
;
; NOTE: 0x3A is used is purely as an example. The correct vector index for
; the interrupt being installed must be used.
;-------------------------------------------------------------------------------
___interrupt_tab_0x3A:
DATA16
DC16 _vAnExampleISR_ASM_Wrapper
;-------------------------------------------------------------------------------
```
The C portion of the interrupt handler is just a standard C function.
```c
/* This standard C function is called from the assembly wrapper above. */
void vISRHandler( void )
{
short sHigherPriorityTaskWoken = pdFALSE;
/* Handler code goes here, for purposes of demonstration, assume
at some point the hander calls xSemaphoreGiveFromISR().*/
xSemaphoreGiveFromISR( xSemaphore, &sHigherPriorityTaskWoken );
/* If giving the semaphore unblocked a task, and the unblocked task has a
priority that is higher than the currently running task, then
sHigherPriorityTaskWoken will have been set to pdTRUE. 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 );
}
```
The C portion of the example interrupt handler.
### Resources used by the RTOS kernel
By default the RTOS kernel uses the RL78 Interval Timer peripheral to generate the RTOS tick. The application writer can modify the `vApplicationSetupTimerInterrupt()` in the [main.c]() such that their own tick interrupt configuration is used in place of the default.
>:warning: `vPortTickISR()` must be installed as the handler for which ever interrupt is used to generate the RTOS tick.
>:warning: The RTOS kernel also requires __exclusive__ use of the __BRK software interrupt__ instruction.
### Compiler options
As with all the ports, it is essential that the correct compiler options are used. The best way to ensure this is to base your application on the provided demo application files.
### Memory allocation
The [heap_1,c](https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/portable/MemMang/heap_1.c) is included in the demo application project to provide the memory allocation required by the RTOS kernel. Please refer to the [Memory Management](https://www.freertos.org/a00111.html) section of the API documentation for full information.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,10 +1,39 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml version="1.0" encoding="UTF-8"?>
<workspace>
<project>
<path>$WS_DIR$\RTOSDemo.ewp</path>
</project>
<batchBuild/>
<project>
<path>$WS_DIR$\RTOSDemo.ewp</path>
</project>
<batchBuild>
<batchDefinition>
<name>Build All!</name>
<member>
<project>RTOSDemo</project>
<configuration>YRPBRL78G13</configuration>
</member>
<member>
<project>RTOSDemo</project>
<configuration>YRPBRL78G14</configuration>
</member>
<member>
<project>RTOSDemo</project>
<configuration>YRDKRL78G14</configuration>
</member>
<member>
<project>RTOSDemo</project>
<configuration>RSKRL78G1C</configuration>
</member>
<member>
<project>RTOSDemo</project>
<configuration>RSKRL78L13</configuration>
</member>
<member>
<project>RTOSDemo</project>
<configuration>RSKRL78L1C</configuration>
</member>
<member>
<project>RTOSDemo</project>
<configuration>QB_R5F10ELE_TB</configuration>
</member>
</batchDefinition>
</batchBuild>
</workspace>

@ -0,0 +1,181 @@
/*
* FreeRTOS V202112.00
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://github.com/FreeRTOS
*
*/
;
; This file defines the RegTest tasks as described at the top of main.c
;
; Functions implemented in this file
;-------------------------------------------------------------------------------
PUBLIC _vRegTest1Task
PUBLIC _vRegTest2Task
; Functions and variables used by this file
;-------------------------------------------------------------------------------
EXTERN _vRegTestError
EXTERN _usRegTest1LoopCounter
EXTERN _usRegTest2LoopCounter
;-------------------------------------------------------------------------------
; Fill all the registers with known values, then check that the registers
; contain the expected value. An incorrect value being indicative of an
; error in the context switch mechanism.
;
; Input: NONE
;
; Call: Created as a task.
;
; Output: NONE
;
;-------------------------------------------------------------------------------
SECTION .text:CODE
_vRegTest1Task:
; First fill the registers.
MOVW AX, #0x1122
MOVW BC, #0x3344
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:
; Continuously check that the register values remain at their expected
; values. The BRK is to test the yield. This task runs at low priority
; so will also regularly get preempted.
BRK
; Compare with the expected value.
CMPW AX, #0x1122
SKZ
; Jump over the branch to vRegTestError() if the register contained the
; expected value - otherwise flag an error by executing vRegTestError().
BR _vRegTestError
; Repeat for all the registers.
MOVW AX, BC
CMPW AX, #0x3344
SKZ
BR _vRegTestError
MOVW AX, DE
CMPW AX, #0x5566
SKZ
BR _vRegTestError
MOVW AX, HL
CMPW AX, #0x7788
SKZ
BR _vRegTestError
MOV A, CS
CMP A, #0x01
SKZ
BR _vRegTestError
#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 A, ES
CMP A, #0x02
SKZ
BR _vRegTestError
#endif
; Indicate that this task is still cycling.
INCW _usRegTest1LoopCounter
MOVW AX, #0x1122
BR loop1
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; Fill all the registers with known values, then check that the registers
; contain the expected value. An incorrect value being indicative of an
; error in the context switch mechanism.
;
; Input: NONE
;
; Call: Created as a task.
;
; Output: NONE
;
;------------------------------------------------------------------------------
SECTION .text:CODE
_vRegTest2Task:
MOVW AX, #0x99aa
MOVW BC, #0xbbcc
MOVW DE, #0xddee
MOVW HL, #0xff12
MOV CS, #0x03
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
MOV ES, #0x04
#endif
loop2:
CMPW AX, #0x99aa
SKZ
BR _vRegTestError
MOVW AX, BC
CMPW AX, #0xbbcc
SKZ
BR _vRegTestError
MOVW AX, DE
CMPW AX, #0xddee
SKZ
BR _vRegTestError
MOVW AX, HL
CMPW AX, #0xff12
SKZ
BR _vRegTestError
MOV A, CS
CMP A, #0x03
SKZ
BR _vRegTestError
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
MOV A, ES
CMP A, #0x04
SKZ
BR _vRegTestError
#endif
; Indicate that this task is still cycling.
INCW _usRegTest2LoopCounter
MOVW AX, #0x99aa
BR loop2
;-------------------------------------------------------------------------------
END

@ -1,193 +0,0 @@
;/*
; * FreeRTOS V202112.00
; * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
; *
; * Permission is hereby granted, free of charge, to any person obtaining a copy of
; * this software and associated documentation files (the "Software"), to deal in
; * the Software without restriction, including without limitation the rights to
; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
; * the Software, and to permit persons to whom the Software is furnished to do so,
; * subject to the following conditions:
; *
; * The above copyright notice and this permission notice shall be included in all
; * copies or substantial portions of the Software.
; *
; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
; *
; * https://www.FreeRTOS.org
; * https://aws.amazon.com/freertos
; *
; * 1 tab == 4 spaces!
; */
;
; This file defines the RegTest tasks as described at the top of main.c
;
;------------------------------------------------------------------------------
; Functions implemented in this file
;------------------------------------------------------------------------------
PUBLIC vRegTest1Task
PUBLIC vRegTest2Task
; Functions and variables used by this file
;------------------------------------------------------------------------------
EXTERN vRegTestError
EXTERN usRegTest1LoopCounter
EXTERN usRegTest2LoopCounter
;------------------------------------------------------------------------------
; Fill all the registers with known values, then check that the registers
; contain the expected value. An incorrect value being indicative of an
; error in the context switch mechanism.
;
; Input: NONE
;
; Call: Created as a task.
;
; Output: NONE
;
;------------------------------------------------------------------------------
RSEG CODE:CODE
vRegTest1Task:
; First fill the registers.
MOVW AX, #0x1122
MOVW BC, #0x3344
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:
; Continuously check that the register values remain at their expected
; values. The BRK is to test the yield. This task runs at low priority
; so will also regularly get preempted.
BRK
; Compare with the expected value.
CMPW AX, #0x1122
SKZ
; Jump over the branch to vRegTestError() if the register contained the
; expected value - otherwise flag an error by executing vRegTestError().
BR vRegTestError
; Repeat for all the registers.
MOVW AX, BC
CMPW AX, #0x3344
SKZ
BR vRegTestError
MOVW AX, DE
CMPW AX, #0x5566
SKZ
BR vRegTestError
MOVW AX, HL
CMPW AX, #0x7788
SKZ
BR vRegTestError
MOV A, CS
CMP A, #0x01
SKZ
BR vRegTestError
#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 A, ES
CMP A, #0x02
SKZ
BR vRegTestError
#endif
; Indicate that this task is still cycling.
INCW usRegTest1LoopCounter
MOVW AX, #0x1122
BR loop1
;------------------------------------------------------------------------------
; Fill all the registers with known values, then check that the registers
; contain the expected value. An incorrect value being indicative of an
; error in the context switch mechanism.
;
; Input: NONE
;
; Call: Created as a task.
;
; Output: NONE
;
;------------------------------------------------------------------------------
RSEG CODE:CODE
vRegTest2Task:
MOVW AX, #0x99aa
MOVW BC, #0xbbcc
MOVW DE, #0xddee
MOVW HL, #0xff12
MOV CS, #0x03
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
MOV ES, #0x04
#endif
loop2:
CMPW AX, #0x99aa
SKZ
BR vRegTestError
MOVW AX, BC
CMPW AX, #0xbbcc
SKZ
BR vRegTestError
MOVW AX, DE
CMPW AX, #0xddee
SKZ
BR vRegTestError
MOVW AX, HL
CMPW AX, #0xff12
SKZ
BR vRegTestError
MOV A, CS
CMP A, #0x03
SKZ
BR vRegTestError
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
MOV A, ES
CMP A, #0x04
SKZ
BR vRegTestError
#endif
; Indicate that this task is still cycling.
INCW usRegTest2LoopCounter
MOVW AX, #0x99aa
BR loop2
END

@ -20,64 +20,73 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://aws.amazon.com/freertos
* https://github.com/FreeRTOS
*
*/
#ifndef LED_IO_H
#define LED_IO_H
#ifndef DEMO_SPECIFIC_IO_H
#define DEMO_SPECIFIC_IO_H
/* Include the register definition file that is correct for the hardware being
used. The C and assembler pre-processor must have one of the following board
definitions defined to have the correct register definition header file
included. Alternatively, just manually include the correct files here. */
#if !defined(__IASMRL78__) && !defined(__ICCRL78__)
#error "The demo_specific_io.h header requires IAR Toolchain for RL78."
#endif
/* Include register definition header files that match the device in use.
A symbol definition for the board must be set in in two different places:
[C/C++ Compiler]/[Preprocessor] as well as in [Assembler]/[Preprocessor].
NOTE: Use as reference for when adding other boards. */
#ifdef YRPBRL78G13
#include "ior5f100le.h"
#include "ior5f100le_ext.h"
#define LED_BIT ( P7_bit.no7 )
#define LED_INIT() P7 &= 0x7F; PM7 &= 0x7F
#endif /* YRPBRL78G13 */
#ifdef YRPBRL78G13
#include <ior5f100le.h>
#include <ior5f100le_ext.h>
#define LED_BIT ( P7_bit.no7 )
#define LED_INIT() P7 &= 0x7F; PM7 &= 0x7F
#endif /* YRPBRL78G13 */
#ifdef YRDKRL78G14
#include "ior5f104pj.h"
#include "ior5f104pj_ext.h"
#define LED_BIT ( P4_bit.no1 )
#define LED_INIT() LED_BIT = 0
#endif /* YRDKRL78G14 */
#ifdef YRPBRL78G14
#include <ior5f104le.h>
#include <ior5f104le_ext.h>
#define LED_BIT ( P7_bit.no7 )
#define LED_INIT() P7 &= 0x7F; PM7 &= 0x7F
#endif /* YRPBRL78G14 */
#ifdef RSKRL78G1C
#include "ior5f10jgc.h"
#include "ior5f10jgc_ext.h"
#define LED_BIT ( P0_bit.no1 )
#define LED_INIT() P0 &= 0xFD; PM0 &= 0xFD
#endif /* RSKRL78G1C */
#ifdef YRDKRL78G14
#include <ior5f104pj.h>
#include <ior5f104pj_ext.h>
#define LED_BIT ( P4_bit.no1 )
#define LED_INIT() P4 &= 0xFD; PM4 &= 0xFD
#endif /* YRDKRL78G14 */
#ifdef RSKRL78L1C
#include "ior5f110pj.h"
#include "ior5f110pj_ext.h"
#define LED_BIT ( P4_bit.no1 )
#define LED_INIT() P4 &= 0xFD; PM4 &= 0xFD
#endif /* RSKRL78L1C */
#ifdef RSKRL78G1C
#include <ior5f10jgc.h>
#include <ior5f10jgc_ext.h>
#define LED_BIT ( P0_bit.no1 )
#define LED_INIT() P0 &= 0xFD; PM0 &= 0xFD
#endif /* RSKRL78G1C */
#ifdef RSKRL78L13
#include "ior5f10wmg.h"
#include "ior5f10wmg_ext.h"
#define LED_BIT ( P4_bit.no1 )
#define LED_INIT() P4 &= 0xFD; PM4 &= 0xFD
#endif /* RSKRL78L13 */
#ifdef RSKRL78L1C
#include <ior5f110pj.h>
#include <ior5f110pj_ext.h>
#define LED_BIT ( P4_bit.no1 )
#define LED_INIT() P4 &= 0xFD; PM4 &= 0xFD
#endif /* RSKRL78L1C */
#ifdef RL78_G1A_TB
#include "ior5f10ele.h"
#include "ior5f10ele_ext.h"
#define LED_BIT ( P6_bit.no2 )
#define LED_INIT() P6 &= 0xFB; PM6 &= 0xFB
#endif /* RL78_G1A_TB */
#ifdef RSKRL78L13
#include <ior5f10wmg.h>
#include <ior5f10wmg_ext.h>
#define LED_BIT ( P4_bit.no1 )
#define LED_INIT() P4 &= 0xFD; PM4 &= 0xFD
#endif /* RSKRL78L13 */
#ifndef LED_BIT
#error The hardware platform is not defined
#endif
#ifdef QB_R5F10ELE_TB
#include <ior5f10ele.h>
#include <ior5f10ele_ext.h>
#define LED_BIT ( P6_bit.no2 )
#define LED_INIT() P6 &= 0xFB; PM6 &= 0xFB
#endif /* QB_R5F10ELE_TB */
#endif /* LED_IO_H */
#ifndef LED_BIT
#error "The hardware platform is not defined."
#endif
#endif /* DEMO_SPECIFIC_IO_H */

@ -0,0 +1,515 @@
;-------------------------------------------------------------------------------
; This file contains an Interrupt Vector Table used by the
; IAR C/C++ Compiler for RL78 version 3.xx or later.
;
; Modified for use with Amazon FreeRTOS.
;
; IAR Source License
;
; The following license agreement applies to linker command files,
; example projects (unless another license is explicitly stated), the
; cstartup code, low_level_init.c, and some other low-level runtime
; library files.
;
; Copyright 2016-2022 IAR Systems AB.
;
; This source code is the property of IAR Systems. The source code may only
; be used together with the IAR Embedded Workbench. Redistribution and use
; in source and binary forms, with or without modification, is permitted
; provided that the following conditions are met:
;
; - Redistributions of source code, in whole or in part, must retain the
; above copyright notice, this list of conditions and the disclaimer below.
;
; - IAR Systems name may not be used to endorse or promote products
; derived from this software without specific prior written permission.
;
; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
;-------------------------------------------------------------------------------
NAME _interrupt_vector_table
#if !defined(__IASMRL78__) || (__VER__ < 310)
#error "This demo requires the IAR Assembler for RL78 version 3.10 or later."
#endif
; The portmacro.h header provides the portSAVE_CONTEXT() and
; portRESTORE_context() macros.
#include "portmacro.h"
; Hardware includes.
#include "demo_specific_io.h"
; The interrupt handler for the _vPortTickISR is installed according to the
; address of INTIT_vect interrupt, defined in the `<ior5f1nnn.h>` header.
EXTERN _vPortTickISR
; The interrupt handler for the _vPortYield is always installed in the address
; of the BRK_I_vect interrupt, also defined in the `<ior5f1nnn.h>` header.
EXTERN _vPortYield
;-------------------------------------------------------------------------------
; This demo does not include a functional ISR other the ones required by
; FreeRTOS.
;
; ISRs that do not cause a context switch have no special requirements and
; can be written as per compiler documentation.
;
; The Assembly wrapper uses a callback function named _vAnExampleISR_C_Handler
; which is implemented in `main.c`. See the documentation page for this demo
; on the FreeRTOS.prg website for full instructions.
;
; NOTE: vAnExampleISR_ASM_Wrapper needs to be installed into the relevant
; vector in the Interrupt Vector Table below. For this example, it is
; installed into the interrupt vector table under the address 0x3A.
;-------------------------------------------------------------------------------
PUBLIC _vAnExampleISR_ASM_Wrapper
EXTERN _vAnExampleISR_C_Handler
SECTION `.text`:CODE
_vAnExampleISR_ASM_Wrapper:
portSAVE_CONTEXT ; The wrapped ISR must start with the portSAVE_CONTEXT() macro.
CALL _vAnExampleISR_C_Handler ; Once the context has been saved the C handler can be called.
portRESTORE_CONTEXT ; The wrapped ISR must end with the to portRESTORE_CONTEXT() macro.
RETI ; Returns from the interrupt to whichever task task is now the task selected
; to run (which might differ from the task that was running before the ISR.
;-------------------------------------------------------------------------------
PUBLIC _interrupt_vector_table
EXTERN ___interrupt_0x00
PUBLIC ___interrupt_tab_0x00
EXTERN ___interrupt_0x04
PUBLIC ___interrupt_tab_0x04
EXTERN ___interrupt_0x06
PUBLIC ___interrupt_tab_0x06
EXTERN ___interrupt_0x08
PUBLIC ___interrupt_tab_0x08
EXTERN ___interrupt_0x0A
PUBLIC ___interrupt_tab_0x0A
EXTERN ___interrupt_0x0C
PUBLIC ___interrupt_tab_0x0C
EXTERN ___interrupt_0x0E
PUBLIC ___interrupt_tab_0x0E
EXTERN ___interrupt_0x10
PUBLIC ___interrupt_tab_0x10
EXTERN ___interrupt_0x12
PUBLIC ___interrupt_tab_0x12
EXTERN ___interrupt_0x14
PUBLIC ___interrupt_tab_0x14
EXTERN ___interrupt_0x16
PUBLIC ___interrupt_tab_0x16
EXTERN ___interrupt_0x18
PUBLIC ___interrupt_tab_0x18
EXTERN ___interrupt_0x1A
PUBLIC ___interrupt_tab_0x1A
EXTERN ___interrupt_0x1C
PUBLIC ___interrupt_tab_0x1C
EXTERN ___interrupt_0x1E
PUBLIC ___interrupt_tab_0x1E
EXTERN ___interrupt_0x20
PUBLIC ___interrupt_tab_0x20
EXTERN ___interrupt_0x22
PUBLIC ___interrupt_tab_0x22
EXTERN ___interrupt_0x24
PUBLIC ___interrupt_tab_0x24
EXTERN ___interrupt_0x26
PUBLIC ___interrupt_tab_0x26
EXTERN ___interrupt_0x28
PUBLIC ___interrupt_tab_0x28
EXTERN ___interrupt_0x2A
PUBLIC ___interrupt_tab_0x2A
EXTERN ___interrupt_0x2C
PUBLIC ___interrupt_tab_0x2C
EXTERN ___interrupt_0x2E
PUBLIC ___interrupt_tab_0x2E
EXTERN ___interrupt_0x30
PUBLIC ___interrupt_tab_0x30
EXTERN ___interrupt_0x32
PUBLIC ___interrupt_tab_0x32
EXTERN ___interrupt_0x34
PUBLIC ___interrupt_tab_0x34
EXTERN ___interrupt_0x36
PUBLIC ___interrupt_tab_0x36
EXTERN ___interrupt_0x38
PUBLIC ___interrupt_tab_0x38
EXTERN ___interrupt_0x3A
PUBLIC ___interrupt_tab_0x3A
EXTERN ___interrupt_0x3C
PUBLIC ___interrupt_tab_0x3C
EXTERN ___interrupt_0x3E
PUBLIC ___interrupt_tab_0x3E
EXTERN ___interrupt_0x40
PUBLIC ___interrupt_tab_0x40
EXTERN ___interrupt_0x42
PUBLIC ___interrupt_tab_0x42
EXTERN ___interrupt_0x44
PUBLIC ___interrupt_tab_0x44
EXTERN ___interrupt_0x46
PUBLIC ___interrupt_tab_0x46
EXTERN ___interrupt_0x48
PUBLIC ___interrupt_tab_0x48
EXTERN ___interrupt_0x4A
PUBLIC ___interrupt_tab_0x4A
EXTERN ___interrupt_0x4C
PUBLIC ___interrupt_tab_0x4C
EXTERN ___interrupt_0x4E
PUBLIC ___interrupt_tab_0x4E
EXTERN ___interrupt_0x50
PUBLIC ___interrupt_tab_0x50
EXTERN ___interrupt_0x52
PUBLIC ___interrupt_tab_0x52
EXTERN ___interrupt_0x54
PUBLIC ___interrupt_tab_0x54
EXTERN ___interrupt_0x56
PUBLIC ___interrupt_tab_0x56
EXTERN ___interrupt_0x58
PUBLIC ___interrupt_tab_0x58
EXTERN ___interrupt_0x5A
PUBLIC ___interrupt_tab_0x5A
EXTERN ___interrupt_0x5C
PUBLIC ___interrupt_tab_0x5C
EXTERN ___interrupt_0x5E
PUBLIC ___interrupt_tab_0x5E
EXTERN ___interrupt_0x60
PUBLIC ___interrupt_tab_0x60
EXTERN ___interrupt_0x62
PUBLIC ___interrupt_tab_0x62
EXTERN ___interrupt_0x64
PUBLIC ___interrupt_tab_0x64
EXTERN ___interrupt_0x66
PUBLIC ___interrupt_tab_0x66
EXTERN ___interrupt_0x68
PUBLIC ___interrupt_tab_0x68
EXTERN ___interrupt_0x6A
PUBLIC ___interrupt_tab_0x6A
EXTERN ___interrupt_0x6C
PUBLIC ___interrupt_tab_0x6C
EXTERN ___interrupt_0x6E
PUBLIC ___interrupt_tab_0x6E
EXTERN ___interrupt_0x70
PUBLIC ___interrupt_tab_0x70
EXTERN ___interrupt_0x72
PUBLIC ___interrupt_tab_0x72
EXTERN ___interrupt_0x74
PUBLIC ___interrupt_tab_0x74
EXTERN ___interrupt_0x76
PUBLIC ___interrupt_tab_0x76
EXTERN ___interrupt_0x78
PUBLIC ___interrupt_tab_0x78
EXTERN ___interrupt_0x7A
PUBLIC ___interrupt_tab_0x7A
EXTERN ___interrupt_0x7C
PUBLIC ___interrupt_tab_0x7C
EXTERN ___interrupt_0x7E
PUBLIC ___interrupt_tab_0x7E
;-------------------------------------------------------------------------------
; Reset Vector
; The reset vector is placed in the `.reset` section.
;-------------------------------------------------------------------------------
SECTION `.reset`:CONST:ROOT(1)
_interrupt_vector_table:
___interrupt_tab_0x00:
DATA16
DC16 ___interrupt_0x00
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; Interrupt Vector Table
; The table is placed in the `.intvec` section.
;-------------------------------------------------------------------------------
SECTION `.intvec`:CONST:ROOT(1)
___interrupt_tab_0x04:
DATA16
DC16 ___interrupt_0x04
___interrupt_tab_0x06:
DATA16
DC16 ___interrupt_0x06
___interrupt_tab_0x08:
DATA16
DC16 ___interrupt_0x08
___interrupt_tab_0x0A:
DATA16
DC16 ___interrupt_0x0A
___interrupt_tab_0x0C:
DATA16
DC16 ___interrupt_0x0C
___interrupt_tab_0x0E:
DATA16
DC16 ___interrupt_0x0E
___interrupt_tab_0x10:
DATA16
DC16 ___interrupt_0x10
___interrupt_tab_0x12:
DATA16
DC16 ___interrupt_0x12
___interrupt_tab_0x14:
DATA16
DC16 ___interrupt_0x14
___interrupt_tab_0x16:
DATA16
DC16 ___interrupt_0x16
___interrupt_tab_0x18:
DATA16
DC16 ___interrupt_0x18
___interrupt_tab_0x1A:
DATA16
DC16 ___interrupt_0x1A
___interrupt_tab_0x1C:
DATA16
DC16 ___interrupt_0x1C
___interrupt_tab_0x1E:
DATA16
DC16 ___interrupt_0x1E
___interrupt_tab_0x20:
DATA16
DC16 ___interrupt_0x20
___interrupt_tab_0x22:
DATA16
DC16 ___interrupt_0x22
___interrupt_tab_0x24:
DATA16
DC16 ___interrupt_0x24
___interrupt_tab_0x26:
DATA16
DC16 ___interrupt_0x26
___interrupt_tab_0x28:
DATA16
DC16 ___interrupt_0x28
___interrupt_tab_0x2A:
DATA16
DC16 ___interrupt_0x2A
___interrupt_tab_0x2C:
DATA16
DC16 ___interrupt_0x2C
___interrupt_tab_0x2E:
DATA16
DC16 ___interrupt_0x2E
___interrupt_tab_0x30:
DATA16
DC16 ___interrupt_0x30
___interrupt_tab_0x32:
DATA16
DC16 ___interrupt_0x32
___interrupt_tab_0x34:
DATA16
DC16 ___interrupt_0x34
___interrupt_tab_0x36:
DATA16
DC16 ___interrupt_0x36
;-------------------------------------------------------------------------------
; Install the _vPortTickISR handler for the RL78 devices where INTIT_vect==56.
; Otherwise, installs the C Runtime Library default.
;-------------------------------------------------------------------------------
___interrupt_tab_0x38:
DATA16
#if (0x38 == INTIT_vect)
DC16 _vPortTickISR
#else
DC16 ___interrupt_0x38
#endif
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; Place a pointer to the _vAnExampleISR_ASM_Wrapper at the correct index into
; the interrupt vector table. This is an example for a ISR which needs context
; switch.
;
; NOTE: 0x3A is used is purely as an example. The correct vector index for
; the interrupt being installed must be used.
;-------------------------------------------------------------------------------
___interrupt_tab_0x3A:
DATA16
DC16 _vAnExampleISR_ASM_Wrapper
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
; Install the _vPortTickISR handler for the RL78 devices where INTIT_vect==60.
; Otherwise, installs the C Runtime Library default.
;-------------------------------------------------------------------------------
___interrupt_tab_0x3C: ; --- INTIT_vect(?)
DATA16
#if (0x3C == INTIT_vect)
DC16 _vPortTickISR
#else
DC16 ___interrupt_0x3C
#endif
;-------------------------------------------------------------------------------
___interrupt_tab_0x3E:
DATA16
DC16 ___interrupt_0x3E
___interrupt_tab_0x40:
DATA16
DC16 ___interrupt_0x40
___interrupt_tab_0x42:
DATA16
DC16 ___interrupt_0x42
___interrupt_tab_0x44:
DATA16
DC16 ___interrupt_0x44
___interrupt_tab_0x46:
DATA16
DC16 ___interrupt_0x46
___interrupt_tab_0x48:
DATA16
DC16 ___interrupt_0x48
___interrupt_tab_0x4A:
DATA16
DC16 ___interrupt_0x4A
___interrupt_tab_0x4C:
DATA16
DC16 ___interrupt_0x4C
___interrupt_tab_0x4E:
DATA16
DC16 ___interrupt_0x4E
___interrupt_tab_0x50:
DATA16
DC16 ___interrupt_0x50
___interrupt_tab_0x52:
DATA16
DC16 ___interrupt_0x52
___interrupt_tab_0x54:
DATA16
DC16 ___interrupt_0x54
___interrupt_tab_0x56:
DATA16
DC16 ___interrupt_0x56
___interrupt_tab_0x58:
DATA16
DC16 ___interrupt_0x58
___interrupt_tab_0x5A:
DATA16
DC16 ___interrupt_0x5A
___interrupt_tab_0x5C:
DATA16
DC16 ___interrupt_0x5C
___interrupt_tab_0x5E:
DATA16
DC16 ___interrupt_0x5E
___interrupt_tab_0x60:
DATA16
DC16 ___interrupt_0x60
___interrupt_tab_0x62:
DATA16
DC16 ___interrupt_0x62
___interrupt_tab_0x64:
DATA16
DC16 ___interrupt_0x64
___interrupt_tab_0x66:
DATA16
DC16 ___interrupt_0x66
___interrupt_tab_0x68:
DATA16
DC16 ___interrupt_0x68
___interrupt_tab_0x6A:
DATA16
DC16 ___interrupt_0x6A
___interrupt_tab_0x6C:
DATA16
DC16 ___interrupt_0x6C
___interrupt_tab_0x6E:
DATA16
DC16 ___interrupt_0x6E
___interrupt_tab_0x70:
DATA16
DC16 ___interrupt_0x70
___interrupt_tab_0x72:
DATA16
DC16 ___interrupt_0x72
___interrupt_tab_0x74:
DATA16
DC16 ___interrupt_0x74
___interrupt_tab_0x76:
DATA16
DC16 ___interrupt_0x76
___interrupt_tab_0x78:
DATA16
DC16 ___interrupt_0x78
___interrupt_tab_0x7A:
DATA16
DC16 ___interrupt_0x7A
___interrupt_tab_0x7C:
DATA16
DC16 ___interrupt_0x7C
;-------------------------------------------------------------------------------
; The BRK_I_vect (0x7E) is used by the RTOS context switch.
;-------------------------------------------------------------------------------
___interrupt_tab_0x7E:
DATA16
DC16 _vPortYield
;-------------------------------------------------------------------------------
END
;-------------------------------------------------------------------------------

@ -20,7 +20,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://aws.amazon.com/freertos
* https://github.com/FreeRTOS
*
*/
@ -58,7 +58,7 @@
/* 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 0
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 0
/*-----------------------------------------------------------*/
@ -71,7 +71,7 @@ extern void main_full( void );
/*
* This function is called from the C startup routine to setup the processor -
* in particular the clock source.
* in particular the CPU clock source.
*/
int __low_level_init(void);
@ -82,6 +82,9 @@ void vApplicationIdleHook( void );
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );
void vApplicationTickHook( void );
/* Prototype for the application-implemented timer for the OS tick */
void vApplicationSetupTimerInterrupt( void );
/*-----------------------------------------------------------*/
/* This variable is not actually used, but provided to allow an example of how
@ -92,115 +95,171 @@ static SemaphoreHandle_t xSemaphore = NULL;
enabled. */
__root __far const unsigned char OptionByte[] @ 0x00C0 =
{
0x6eU, 0xffU, 0xe8U, 0x85U
0x6eU, 0xffU, 0xe8U, 0x85U
};
/* Security byte definition */
__root __far const unsigned char ucSecurityCode[] @ 0x00C4 =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/*-----------------------------------------------------------*/
void main( void )
{
/* 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
/* 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
}
/*-----------------------------------------------------------*/
void vAnExampleISR_C_Handler( void )
{
/*
* 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.
*/
/*
* 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 interrupt_vector.s.
* Also see the documentation page for this demo on the FreeRTOS.org website
* for full instructions.
*/
short sHigherPriorityTaskWoken = pdFALSE;
/* Handler code goes here...*/
/* Handler code goes here...*/
/* For purposes of demonstration, assume at some point the hander calls
xSemaphoreGiveFromISR().*/
xSemaphoreGiveFromISR( xSemaphore, &sHigherPriorityTaskWoken );
/* For purposes of demonstration, assume at some point the hander calls
xSemaphoreGiveFromISR().*/
xSemaphoreGiveFromISR( xSemaphore, &sHigherPriorityTaskWoken );
/* 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 );
/* 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 );
}
/*-----------------------------------------------------------*/
int __low_level_init(void)
{
portDISABLE_INTERRUPTS();
portDISABLE_INTERRUPTS();
/* Set fMX */
CMC = 0x00;
MSTOP = 1U;
/* Set fMX */
CMC = 0x00;
MSTOP = 1U;
/* Set fMAIN */
MCM0 = 0U;
/* Set fMAIN */
MCM0 = 0U;
/* Set fSUB */
XTSTOP = 1U;
OSMC = 0x10;
/* Set fSUB */
XTSTOP = 1U;
OSMC = 0x10;
/* Set fCLK */
CSS = 0U;
/* Set fCLK */
CSS = 0U;
/* Set fIH */
HIOSTOP = 0U;
/* Set fIH */
HIOSTOP = 0U;
/* LED port initialization. */
LED_INIT();
/* Board's LED initialization. */
LED_INIT();
return pdTRUE;
return pdTRUE;
}
/*-----------------------------------------------------------*/
void vApplicationSetupTimerInterrupt( void )
{
const uint16_t usClockHz = 15000UL; /* Internal clock. */
const uint16_t usCompareMatch = ( usClockHz / configTICK_RATE_HZ ) + 1UL;
/* Use the internal 15 kHz clock. */
OSMC = ( uint8_t ) 0x16;
/* The clock source for the Interval Timer peripheral used for generating
the tick interrupt depends on the RL78 device in use. */
#if configTICK_VECTOR == 0x38
{
/* Supply the interval timer clock. */
RTCEN = ( uint8_t ) 1U;
/* Disable INTIT interrupt. */
ITMK = ( uint8_t ) 1;
/* Disable ITMC operation. */
ITMC = ( uint8_t ) 0x0000;
/* Clear INIT interrupt. */
ITIF = ( uint8_t ) 0;
/* Set interval and enable interrupt operation. */
ITMC = usCompareMatch | 0x8000U;
/* Enable INTIT interrupt. */
ITMK = ( uint8_t ) 0;
}
#elif configTICK_VECTOR == 0x3C
{
/* Supply the interval timer clock. */
TMKAEN = ( uint8_t ) 1U;
/* Disable INTIT interrupt. */
TMKAMK = ( uint8_t ) 1;
/* Disable ITMC operation. */
ITMC = ( uint8_t ) 0x0000;
/* Clear INIT interrupt. */
TMKAIF = ( uint8_t ) 0;
/* Set interval and enable interrupt operation. */
ITMC = usCompareMatch | 0x8000U;
/* Enable INTIT interrupt. */
TMKAMK = ( uint8_t ) 0;
}
#else
#error "It is necessary to configure a suitable timer interrupt for the tick."
#endif
}
/*-----------------------------------------------------------*/
void vApplicationMallocFailedHook( void )
{
/* Called if a call to pvPortMalloc() fails because there is insufficient
free memory available in the FreeRTOS heap. pvPortMalloc() is called
internally by FreeRTOS API functions that create tasks, queues, software
timers, and semaphores. The size of the FreeRTOS heap is set by the
configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h. */
taskDISABLE_INTERRUPTS();
for( ;; );
/* Called if a call to pvPortMalloc() fails because there is insufficient
free memory available in the FreeRTOS heap. pvPortMalloc() is called
internally by FreeRTOS API functions that create tasks, queues, software
timers, and semaphores. The size of the FreeRTOS heap is set by the
configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h. */
taskDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
{
( void ) pcTaskName;
( void ) pxTask;
/* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
function is called if a stack overflow is detected. */
taskDISABLE_INTERRUPTS();
for( ;; );
( void ) pcTaskName;
( void ) pxTask;
/* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
function is called if a stack overflow is detected. */
taskDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
@ -208,17 +267,15 @@ void vApplicationIdleHook( void )
{
volatile size_t xFreeHeapSpace;
/* This is just a trivial example of an idle hook. It is called on each
cycle of the idle task. It must *NOT* attempt to block. In this case the
idle task just queries the amount of FreeRTOS heap that remains. See the
memory management section on the http://www.FreeRTOS.org web site for memory
management options. If there is a lot of heap memory free then the
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;
/* This is just a trivial example of an idle hook. It is called on each
cycle of the idle task. It must *NOT* attempt to block. In this case the
idle task just queries the amount of FreeRTOS heap that remains. See the
memory management section on the http://www.FreeRTOS.org web site for memory
management options. If there is a lot of heap memory free then the
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;
}

@ -20,7 +20,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://aws.amazon.com/freertos
* https://github.com/FreeRTOS
*
*/
@ -74,25 +74,25 @@
#include "demo_specific_io.h"
/* Priorities at which the tasks are created. */
#define mainQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
#define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
#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_PERIOD_MS constant. */
#define mainQUEUE_SEND_FREQUENCY_MS ( 200 / portTICK_PERIOD_MS )
#define mainQUEUE_SEND_FREQUENCY_MS ( 200 / portTICK_PERIOD_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 )
#define mainQUEUE_LENGTH ( 1 )
/* Used to check the task parameter passing in both supported memory models. */
#if __DATA_MODEL__ == __DATA_MODEL_FAR__
#define mainQUEUE_SEND_PARAMETER ( ( void * ) 0x12345678UL )
#define mainQUEUE_RECEIVE_PARAMETER ( ( void * ) 0x11223344UL )
#define mainQUEUE_SEND_PARAMETER ( ( void * ) 0x12345678UL )
#define mainQUEUE_RECEIVE_PARAMETER ( ( void * ) 0x11223344UL )
#else
#define mainQUEUE_SEND_PARAMETER ( ( void * ) 0x1234U )
#define mainQUEUE_RECEIVE_PARAMETER ( ( void * ) 0x1122U )
#define mainQUEUE_SEND_PARAMETER ( ( void * ) 0x1234U )
#define mainQUEUE_RECEIVE_PARAMETER ( ( void * ) 0x1122U )
#endif
/*-----------------------------------------------------------*/
@ -117,32 +117,32 @@ static QueueHandle_t 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. */
"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. */
mainQUEUE_RECEIVE_PARAMETER, /* The parameter passed to the task - just used to check the port 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, "TX", configMINIMAL_STACK_SIZE, mainQUEUE_SEND_PARAMETER, 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( ;; );
/* 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. */
"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. */
mainQUEUE_RECEIVE_PARAMETER, /* The parameter passed to the task - just used to check the port 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, "TX", configMINIMAL_STACK_SIZE, mainQUEUE_SEND_PARAMETER, 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( ;; );
}
/*-----------------------------------------------------------*/
@ -151,23 +151,25 @@ static void prvQueueSendTask( void *pvParameters )
TickType_t xNextWakeTime;
const unsigned long ulValueToSend = 100UL;
/* Check the parameter was passed in correctly. */
configASSERT( pvParameters == mainQUEUE_SEND_PARAMETER )
/* 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 );
}
/* Check the parameter was passed in correctly. */
configASSERT( pvParameters == mainQUEUE_SEND_PARAMETER )
/* 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 );
}
}
/*-----------------------------------------------------------*/
@ -176,24 +178,27 @@ static void prvQueueReceiveTask( void *pvParameters )
unsigned long ulReceivedValue;
const unsigned long ulExpectedValue = 100UL;
/* Check the parameter was passed in correctly. */
configASSERT( pvParameters == mainQUEUE_RECEIVE_PARAMETER )
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;
}
}
/* Check the parameter was passed in correctly. */
configASSERT( pvParameters == mainQUEUE_RECEIVE_PARAMETER )
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;
}
}
}
/*-----------------------------------------------------------*/

@ -20,7 +20,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://aws.amazon.com/freertos
* https://github.com/FreeRTOS
*
*/
@ -94,28 +94,28 @@
/* 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_PERIOD_MS constant. */
#define mainCHECK_TIMER_PERIOD_MS ( 3000UL / portTICK_PERIOD_MS )
#define mainCHECK_TIMER_PERIOD_MS ( 3000UL / portTICK_PERIOD_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_PERIOD_MS
constant. */
#define mainERROR_CHECK_TIMER_PERIOD_MS ( 200UL / portTICK_PERIOD_MS )
#define mainERROR_CHECK_TIMER_PERIOD_MS ( 200UL / portTICK_PERIOD_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 )
#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 )
#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 )
#define mainREG_TEST_1_PARAMETER ( ( void * ) 0x1234 )
#define mainREG_TEST_2_PARAMETER ( ( void * ) 0x5678 )
/*-----------------------------------------------------------*/
@ -173,69 +173,67 @@ 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. */
"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, "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( "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( "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( ;; );
/* 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. */
"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, "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( "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( "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( TimerHandle_t 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++;
/* 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++;
}
/*-----------------------------------------------------------*/
@ -244,126 +242,126 @@ static void prvCheckTimerCallback( TimerHandle_t 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;
/* 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( ;; );
/* 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. */
/* 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. */
/* 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. */
}
/*-----------------------------------------------------------*/

@ -1,24 +0,0 @@
@REM This batch file has been generated by the IAR Embedded Workbench
@REM C-SPY Debugger, as an aid to preparing a command line for running
@REM the cspybat command line utility using the appropriate settings.
@REM
@REM Note that this file is generated every time a new debug session
@REM is initialized, so you may want to move or rename the file before
@REM making changes.
@REM
@REM You can launch cspybat by typing the name of this batch file followed
@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
@REM
@REM Read about available command line parameters in the C-SPY Debugging
@REM Guide. Hints about additional command line parameters that may be
@REM useful in specific cases:
@REM --download_only Downloads a code image without starting a debug
@REM session afterwards.
@REM --silent Omits the sign-on message.
@REM --timeout Limits the maximum allowed execution time.
@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_2" "--near_const_location" "rom0" "--near_const_start" "0xf3000" "--near_const_size" "35.75" "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rl78\config\debugger\ior5f110pj.ddf" "-d" "e1"

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<Project>
<Desktop>
<Static>
<Debug-Log>
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>912</ColumnWidth1></Debug-Log>
<Build>
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>684</ColumnWidth1><ColumnWidth2>182</ColumnWidth2><ColumnWidth3>45</ColumnWidth3></Build>
<Workspace>
<ColumnWidths>
<Column0>255</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Disassembly>
<PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><MixedMode>1</MixedMode><CodeCovShow>1</CodeCovShow><InstrProfShow>1</InstrProfShow><col-names><item>Disassembly</item><item>_I0</item></col-names><col-widths><item>500</item><item>20</item></col-widths><DisasmHistory/><ShowCodeCoverage>0</ShowCodeCoverage><ShowInstrProfiling>0</ShowInstrProfiling></Disassembly>
<STACK2><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></STACK2><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><WATCH_1><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><expressions><item/></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>179</item><item>150</item><item>100</item><item>100</item></col-widths></WATCH_1><CallStack><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Frame</item><item>_I0</item></col-names><col-widths><item>400</item><item>20</item></col-widths></CallStack><Breakpoints><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Breakpoint</item><item>_I0</item></col-names><col-widths><item>500</item><item>35</item></col-widths></Breakpoints></Static>
<Windows>
<Wnd0>
<Tabs>
<Tab>
<Identity>TabID-30626-17561</Identity>
<TabName>Debug Log</TabName>
<Factory>Debug-Log</Factory>
<Session/>
</Tab>
<Tab>
<Identity>TabID-30103-17570</Identity>
<TabName>Build</TabName>
<Factory>Build</Factory>
<Session/>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd0><Wnd1>
<Tabs>
<Tab>
<Identity>TabID-8606-17564</Identity>
<TabName>Workspace</TabName>
<Factory>Workspace</Factory>
<Session>
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/StandardDemos</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/main_full.c</ExpandedNode><ExpandedNode>RTOSDemo/Kernel Source</ExpandedNode><ExpandedNode>RTOSDemo/Output</ExpandedNode></NodeDict></Session>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd1></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>241</YPos2><SelStart2>13257</SelStart2><SelEnd2>13257</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>62</YPos2><SelStart2>10664</SelStart2><SelEnd2>10664</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\ExampleISR.s87</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>66</YPos2><SelStart2>4592</SelStart2><SelEnd2>4592</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\RL78\ISR_Support.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>0</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>142</YPos2><SelStart2>7176</SelStart2><SelEnd2>7176</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\tasks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>2220</YPos2><SelStart2>76534</SelStart2><SelEnd2>76534</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\dynamic.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>432</YPos2><SelStart2>17463</SelStart2><SelEnd2>17463</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>71</YPos2><SelStart2>5114</SelStart2><SelEnd2>5116</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\timers.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>461</YPos2><SelStart2>19747</SelStart2><SelEnd2>19747</SelEnd2></Tab><ActiveTab>8</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\RegTest.s87</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>168</YPos2><SelStart2>6068</SelStart2><SelEnd2>6068</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\RL78\portmacro.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>85</YPos2><SelStart2>5368</SelStart2><SelEnd2>5376</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-029D9C80><key>iaridepm.enu1</key></Toolbar-029D9C80></Sizes></Row0><Row1><Sizes><Toolbar-142947E8><key>debuggergui.enu1</key></Toolbar-142947E8></Sizes></Row1><Row2><Sizes><Toolbar-14294A40><key>rl78ocd.enu1</key></Toolbar-14294A40></Sizes></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10><Row11><Sizes/></Row11><Row12><Sizes/></Row12><Row13><Sizes/></Row13><Row14><Sizes/></Row14><Row15><Sizes/></Row15><Row16><Sizes/></Row16><Row17><Sizes/></Row17><Row18><Sizes/></Row18><Row19><Sizes/></Row19></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>615</Bottom><Right>345</Right><x>-2</x><y>-2</y><xscreen>9</xscreen><yscreen>8</yscreen><sizeHorzCX>5357</sizeHorzCX><sizeHorzCY>8130</sizeHorzCY><sizeVertCX>206548</sizeVertCX><sizeVertCY>627033</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>277</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>279</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>283537</sizeHorzCY><sizeVertCX>5357</sizeVertCX><sizeVertCY>8130</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Project>

@ -1,210 +0,0 @@
[DebugChecksum]
Checksum=-1598462895
[DisAssemblyWindow]
NumStates=_ 1
State 1=_ 1
[InstructionProfiling]
Enabled=_ 0
[CodeCoverage]
Enabled=_ 0
[E1]
Map0=0,0,131071,131072
Map1=1,1040128,1048319,8192
MapEntries=2
HWsettings=2,0,1,2,4,0,1,0,16,17,0
HWsettingsCube=2,4294967295,2,4294967295,0,1,0,0
HWsettingsRsuid=00000000000000000000
EventEntries=0
SeqName0=
SeqData0=0,0
SeqEnable10=0,0,0,0,0,0,0,0,0,0
SeqEnable20=0,0,0,0,0,0,0,0,0,0
SeqEnable30=0,0,0,0,0,0,0,0,0,0
SeqEnable40=0,0,0,0,0,0,0,0,0,0
SeqDisable0=0,0,0,0,0,0,0,0,0,0
SeqData20=0,0,0,0,0,0
SeqName1=
SeqData1=0,0
SeqEnable11=0,0,0,0,0,0,0,0,0,0
SeqEnable21=0,0,0,0,0,0,0,0,0,0
SeqEnable31=0,0,0,0,0,0,0,0,0,0
SeqEnable41=0,0,0,0,0,0,0,0,0,0
SeqDisable1=0,0,0,0,0,0,0,0,0,0
SeqData21=0,0,0,0,0,0
SeqName2=
SeqData2=0,0
SeqEnable12=0,0,0,0,0,0,0,0,0,0
SeqEnable22=0,0,0,0,0,0,0,0,0,0
SeqEnable32=0,0,0,0,0,0,0,0,0,0
SeqEnable42=0,0,0,0,0,0,0,0,0,0
SeqDisable2=0,0,0,0,0,0,0,0,0,0
SeqData22=0,0,0,0,0,0
SeqName3=
SeqData3=0,0
SeqEnable13=0,0,0,0,0,0,0,0,0,0
SeqEnable23=0,0,0,0,0,0,0,0,0,0
SeqEnable33=0,0,0,0,0,0,0,0,0,0
SeqEnable43=0,0,0,0,0,0,0,0,0,0
SeqDisable3=0,0,0,0,0,0,0,0,0,0
SeqData23=0,0,0,0,0,0
SeqName4=
SeqData4=0,0
SeqEnable14=0,0,0,0,0,0,0,0,0,0
SeqEnable24=0,0,0,0,0,0,0,0,0,0
SeqEnable34=0,0,0,0,0,0,0,0,0,0
SeqEnable44=0,0,0,0,0,0,0,0,0,0
SeqDisable4=0,0,0,0,0,0,0,0,0,0
SeqData24=0,0,0,0,0,0
TraceSettings=128,0,0,0,0,0,8192
TimerSettings=0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CoverSettings=1048192,1048207,0
Version=1,trace.txt
LastDevFile=DR5F10WMG.DVF
EmulType=64
BreakToggle=0
EventLimits=0,1,1,0,0,0,1
LastSetupFailed=0
ForceHwSetup=0
[StackPlugin]
Enabled=1
OverflowWarningsEnabled=1
WarningThreshold=90
SpWarningsEnabled=1
WarnHow=0
UseTrigger=1
TriggerName=main
LimitSize=0
ByteLimit=50
[TK]
LastSetupFailed=0
Map0=0,0,65535,65536
Map1=1,1044224,1048319,4096
MapEntries=2
HWsettings=2,0,1,2,4,0,1,0,16,1,0
HWsettingsCube=2,4294967295,2,4294967295,0,1,0,0
HWsettingsRsuid=00000000000000000000
EventEntries=0
SeqName0=
SeqData0=0,0
SeqEnable10=0,0,0,0,0,0,0,0,0,0
SeqEnable20=0,0,0,0,0,0,0,0,0,0
SeqEnable30=0,0,0,0,0,0,0,0,0,0
SeqEnable40=0,0,0,0,0,0,0,0,0,0
SeqDisable0=0,0,0,0,0,0,0,0,0,0
SeqData20=0,0,0,0,0,0
SeqName1=
SeqData1=0,0
SeqEnable11=0,0,0,0,0,0,0,0,0,0
SeqEnable21=0,0,0,0,0,0,0,0,0,0
SeqEnable31=0,0,0,0,0,0,0,0,0,0
SeqEnable41=0,0,0,0,0,0,0,0,0,0
SeqDisable1=0,0,0,0,0,0,0,0,0,0
SeqData21=0,0,0,0,0,0
SeqName2=
SeqData2=0,0
SeqEnable12=0,0,0,0,0,0,0,0,0,0
SeqEnable22=0,0,0,0,0,0,0,0,0,0
SeqEnable32=0,0,0,0,0,0,0,0,0,0
SeqEnable42=0,0,0,0,0,0,0,0,0,0
SeqDisable2=0,0,0,0,0,0,0,0,0,0
SeqData22=0,0,0,0,0,0
SeqName3=
SeqData3=0,0
SeqEnable13=0,0,0,0,0,0,0,0,0,0
SeqEnable23=0,0,0,0,0,0,0,0,0,0
SeqEnable33=0,0,0,0,0,0,0,0,0,0
SeqEnable43=0,0,0,0,0,0,0,0,0,0
SeqDisable3=0,0,0,0,0,0,0,0,0,0
SeqData23=0,0,0,0,0,0
SeqName4=
SeqData4=0,0
SeqEnable14=0,0,0,0,0,0,0,0,0,0
SeqEnable24=0,0,0,0,0,0,0,0,0,0
SeqEnable34=0,0,0,0,0,0,0,0,0,0
SeqEnable44=0,0,0,0,0,0,0,0,0,0
SeqDisable4=0,0,0,0,0,0,0,0,0,0
SeqData24=0,0,0,0,0,0
TraceSettings=128,0,0,0,0,0,8192
TimerSettings=0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CoverSettings=1048192,1048207,0
Version=1,trace.txt
LastDevFile=DR5F100LE.DVF
EmulType=256
BreakToggle=0
EventLimits=0,1,1,0,0,0,1
ForceHwSetup=0
[Stack]
FillEnabled=0
OverflowWarningsEnabled=1
WarningThreshold=90
SpWarningsEnabled=0
WarnLogOnly=1
UseTrigger=1
TriggerName=main
LimitSize=0
ByteLimit=50
[CallStack]
ShowArgs=0
[Disassembly]
MixedMode=1
[CallStackLog]
Enabled=0
[DataSample]
LogEnabled=0
GraphEnabled=0
ShowTimeLog=1
ShowTimeSum=1
[Log file]
LoggingEnabled=_ 0
LogFile=_ ""
Category=_ 0
[TermIOLog]
LoggingEnabled=_ 0
LogFile=_ ""
[TraceHelper]
Enabled=0
ShowSource=1
[DriverProfiling]
Enabled=0
Mode=0
Graph=0
Symbiont=0
Exclusions=
[Breakpoints]
Count=0
[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]
Bp0=_ 0 "STD_CODE2" "{$PROJ_DIR$\RegTest.s87}.172.1" 0 0 1 "" 0 ""
Bp1=_ 1 "STD_CODE2" "{$PROJ_DIR$\main_full.c}.346.2" 0 0 1 "" 0 ""
Bp2=_ 1 "STD_CODE2" "{$PROJ_DIR$\main_full.c}.352.3" 0 0 1 "" 0 ""
Count=3
[Interrupts]
Enabled=1
[MemoryMap]
Enabled=0
Base=0
UseAuto=0
TypeViolation=1
UnspecRange=1
ActionState=1
[Trace1]
Enabled=0
ShowSource=1
[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
[Simulator]
Freq=10000000

@ -1,49 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<Workspace>
<ConfigDictionary>
<CurrentConfigs><Project>RTOSDemo/YRPBRL78G13</Project></CurrentConfigs></ConfigDictionary>
<Desktop>
<Static>
<Workspace>
<ColumnWidths>
<Column0>369</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Build><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>684</ColumnWidth1><ColumnWidth2>182</ColumnWidth2><ColumnWidth3>45</ColumnWidth3></Build><TerminalIO/><Debug-Log><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1218</ColumnWidth1></Debug-Log><Disassembly><MixedMode>1</MixedMode><CodeCovShow>1</CodeCovShow><InstrProfShow>1</InstrProfShow></Disassembly><Find-in-Files><ColumnWidth0>439</ColumnWidth0><ColumnWidth1>62</ColumnWidth1><ColumnWidth2>753</ColumnWidth2></Find-in-Files><Select-Ambiguous-Definitions><ColumnWidth0>580</ColumnWidth0><ColumnWidth1>82</ColumnWidth1><ColumnWidth2>994</ColumnWidth2></Select-Ambiguous-Definitions></Static>
<Windows>
<Wnd2>
<Tabs>
<Tab>
<Identity>TabID-25565-17041</Identity>
<TabName>Workspace</TabName>
<Factory>Workspace</Factory>
<Session>
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Kernel Source</ExpandedNode></NodeDict></Session>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-4654-17433</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-7454-1824</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab><Tab><Identity>TabID-16124-30648</Identity><TabName>Ambiguous Definitions</TabName><Factory>Select-Ambiguous-Definitions</Factory><Session/></Tab><Tab><Identity>TabID-21155-6491</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>67</YPos2><SelStart2>7176</SelStart2><SelEnd2>7176</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-029D9C80><key>iaridepm.enu1</key></Toolbar-029D9C80></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10><Row11><Sizes/></Row11><Row12><Sizes/></Row12><Row13><Sizes/></Row13><Row14><Sizes/></Row14><Row15><Sizes/></Row15><Row16><Sizes/></Row16><Row17><Sizes/></Row17><Row18><Sizes/></Row18><Row19><Sizes/></Row19><Row20><Sizes/></Row20><Row21><Sizes/></Row21></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>506</Bottom><Right>443</Right><x>-2</x><y>-2</y><xscreen>12633</xscreen><yscreen>8269</yscreen><sizeHorzCX>7519643</sizeHorzCX><sizeHorzCY>8403455</sizeHorzCY><sizeVertCX>264881</sizeVertCX><sizeVertCY>516260</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>434</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>436</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>443089</sizeHorzCY><sizeVertCX>9869643</sizeVertCX><sizeVertCY>10667683</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Workspace>

@ -1060,6 +1060,7 @@ isset
itemlength
itesm
itm
itmc
itteratio
itu
ivr
@ -2884,6 +2885,7 @@ usbqueue
usbufferaddress
usbuffersize
uscheckstatus
usclockhz
usdocumentlength
userguide
usermode

Loading…
Cancel
Save