static QueueHandle_t xNormallyEmptyQueue, xNormallyFullQueue;\r
\r
/* Variables used to detect a stall in one of the tasks. */\r
-static UBaseType_t uxHighPriorityLoops1 = 0, uxHighPriorityLoops2 = 0, uxLowPriorityLoops1 = 0, uxLowPriorityLoops2 = 0;\r
+static volatile UBaseType_t uxHighPriorityLoops1 = 0, uxHighPriorityLoops2 = 0, uxLowPriorityLoops1 = 0, uxLowPriorityLoops2 = 0;\r
\r
/* Any unexpected behaviour sets xErrorStatus to fail and log the line that\r
caused the error in xErrorLine. */\r
\r
/* The values that are sent to the queues. An incremented value is sent each\r
time to each queue. */\r
-volatile UBaseType_t uxValueForNormallyEmptyQueue = 0, uxValueForNormallyFullQueue = 0;\r
+static volatile UBaseType_t uxValueForNormallyEmptyQueue = 0, uxValueForNormallyFullQueue = 0;\r
\r
/* A handle to some of the tasks is required so they can be suspended/resumed. */\r
TaskHandle_t xHighPriorityNormallyEmptyTask1, xHighPriorityNormallyEmptyTask2, xHighPriorityNormallyFullTask1, xHighPriorityNormallyFullTask2;\r
timerNORMALLY_FULL_TX();\r
timerNORMALLY_FULL_TX();\r
timerNORMALLY_FULL_TX();\r
- timerNORMALLY_FULL_TX();\r
}\r
\r
return xHigherPriorityTaskWoken;\r
#define recmuMAX_COUNT ( 10 )\r
\r
/* Misc. */\r
-#define recmuSHORT_DELAY ( 20 / portTICK_PERIOD_MS )\r
+#define recmuSHORT_DELAY ( pdMS_TO_TICKS( 20 ) )\r
#define recmuNO_DELAY ( ( TickType_t ) 0 )\r
#define recmuEIGHT_TICK_DELAY ( ( TickType_t ) 8 )\r
\r
{\r
xErrorOccurred = pdTRUE;\r
}\r
+\r
+ #if( configUSE_PREEMPTION == 0 )\r
+ taskYIELD();\r
+ #endif\r
}\r
\r
/* Having given it back the same number of times as it was taken, we\r
error will be latched if the polling task has not returned the\r
mutex by the time this fixed period has expired. */\r
vTaskResume( xBlockingTaskHandle );\r
- vTaskResume( xControllingTaskHandle );\r
+ #if( configUSE_PREEMPTION == 0 )\r
+ taskYIELD();\r
+ #endif\r
+\r
+ vTaskResume( xControllingTaskHandle );\r
+ #if( configUSE_PREEMPTION == 0 )\r
+ taskYIELD();\r
+ #endif\r
\r
/* The other two tasks should now have executed and no longer\r
be suspended. */\r
}\r
else\r
{\r
- xReturn = pdTRUE;\r
+ xReturn = pdPASS;\r
}\r
\r
return xReturn;\r
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_mdata"/>\r
</sections>\r
<sections name=".data">\r
- <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1540"/>\r
+ <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1796"/>\r
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data"/>\r
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data"/>\r
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data.*"/>\r
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_end"/>\r
</sections>\r
<sections name=".ustack" isKeep="true">\r
- <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1536"/>\r
+ <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1792"/>\r
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ustack"/>\r
</sections>\r
<sections name=".istack" isKeep="true">\r
- <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="768"/>\r
+ <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1024"/>\r
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_istack"/>\r
</sections>\r
</com.renesas.linkersection.model:SectionContainer>\r
<option id="com.renesas.cdt.core.Compiler.option.deviceShortName.417233635" name="DeviceShortName" superClass="com.renesas.cdt.core.Compiler.option.deviceShortName" value="R5F51138AxFP" valueType="string"/>\r
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.core.Compiler.option.includeFileDir.1240948637" name="Include file directories" superClass="com.renesas.cdt.core.Compiler.option.includeFileDir" valueType="includePath">\r
<listOptionValue builtIn="false" value=""${TCINSTALL}/rx-elf/optlibinc""/>\r
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Full_Demo/FreeRTOS-Plus-CLI}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Full_Demo}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/GCC/RX100}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}""/>\r
<option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.debugLevel.1132150265" name="Debug level" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.debugLevel" value="com.renesas.cdt.rx.HardwareDebug.Compiler.option.debugLevel.level3" valueType="enumerated"/>\r
<option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel.401905200" name="Optimization level" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel.none" valueType="enumerated"/>\r
<option id="com.renesas.cdt.core.Compiler.option.misc67.1560609407" name="Do not Inline functions early before doing `-fprofile-generate' instrumentation and real inlining pass (-fno-early-inlining)" superClass="com.renesas.cdt.core.Compiler.option.misc67" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc61.1724789636" name="Disable emitting extra instructions to save and restore the registers around function calls (-fno-caller-saves )" superClass="com.renesas.cdt.core.Compiler.option.misc61" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc25.1990067973" name="Don't put function addresses in registers(-fno-function-cse)" superClass="com.renesas.cdt.core.Compiler.option.misc25" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc63.2081974601" name="Avoid keeping the whole uncompressed sections in memory, only retaining the compressed ones (-flto-compression-level=0)" superClass="com.renesas.cdt.core.Compiler.option.misc63" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.flto.514099016" name="Enable Link-time optimizations (-flto)" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.flto" value="false" valueType="boolean"/>\r
<inputType id="%Base.Compiler.C.InputType.Id.1426723031" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
<inputType id="Base.Compiler.CPP.InputType.Id.2140325861" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
</tool>\r
<tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id.19236880" name="Assembler" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id">\r
- <option id="com.renesas.cdt.rx.HardwareDebug.Assembler.option.dataEndian.2134524462" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Assembler.option.dataEndian" value="com.renesas.cdt.rx.HardwareDebug.Assembler.option.dataEndian.little" valueType="enumerated"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Assembler.option.dataEndian.2134524462" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Assembler.option.dataEndian" value="Little-endian data" valueType="enumerated"/>\r
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.core.Assembler.option.includeFileDirectories.1447534623" name="Include file directories" superClass="com.renesas.cdt.core.Assembler.option.includeFileDirectories" valueType="includePath">\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}}/src""/>\r
</option>\r
<inputType id="%Base.Assembler.inputType.Id.1467040451" name="Assembler InputType" superClass="%Base.Assembler.inputType.Id"/>\r
</tool>\r
- <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.linker.Id.564427274" name="Linker" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.linker.Id">\r
- <option id="com.renesas.cdt.rx.HardwareDebug.Linker.option.dataEndian.1575779452" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Linker.option.dataEndian" value="com.renesas.cdt.rx.HardwareDebug.Linker.option.dataEndian.little" valueType="enumerated"/>\r
+ <tool command="rx-elf-ld" id="com.renesas.cdt.rx.hardwaredebug.win32.tool.linker.Id.564427274" name="Linker" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.linker.Id">\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Linker.option.dataEndian.1575779452" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Linker.option.dataEndian" value="Little-endian data" valueType="enumerated"/>\r
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.rx.HardwareDebug.Linker.option.archiveSearchDirectories.721512424" name="Archive search directories" superClass="com.renesas.cdt.rx.HardwareDebug.Linker.option.archiveSearchDirectories" valueType="stringList">\r
<listOptionValue builtIn="false" value=""${CONFIGDIR}""/>\r
<listOptionValue builtIn="false" value=""${TCINSTALL}/lib/gcc/rx-elf/${GCC_VERSION}/no-fpu-libs""/>\r
<listOptionValue builtIn="false" value="gcc"/>\r
</option>\r
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.core.Linker.option.userDefinedOptions.1648005936" name="User defined options" superClass="com.renesas.cdt.core.Linker.option.userDefinedOptions" valueType="stringList">\r
- <listOptionValue builtIn="false" value="-e_PowerON_Reset"/>\r
+ <listOptionValue builtIn="false" value="-Wl,-e_PowerON_Reset"/>\r
</option>\r
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.core.Linker.option.linkOrderList.1612883595" name="" superClass="com.renesas.cdt.core.Linker.option.linkOrderList" valueType="stringList">\r
- <listOptionValue builtIn="false" value="".\src\RTOSDemo.o""/>\r
- <listOptionValue builtIn="false" value="".\src\hardware_setup.o""/>\r
- <listOptionValue builtIn="false" value="".\src\interrupt_handlers.o""/>\r
- <listOptionValue builtIn="false" value="".\src\reset_program.o""/>\r
- <listOptionValue builtIn="false" value="".\src\vector_table.o""/>\r
<listOptionValue builtIn="false" value="".\libRTOSDemo.a""/>\r
+ <listOptionValue builtIn="false" value="".\src/cg_src\r_cg_cgc.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/cg_src\r_cg_cgc_user.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/cg_src\r_cg_hardware_setup.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/cg_src\r_cg_port.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/cg_src\r_cg_port_user.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/cg_src\r_cg_sci.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/cg_src\r_cg_sci_user_GCC.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Renesas_Code\interrupt_handlers.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Renesas_Code\reset_program.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Renesas_Code\vector_table.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\BlockQ.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\EventGroupsDemo.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\GenQTest.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\IntQueue.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\IntSemTest.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\QueueOverwrite.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\TaskNotify.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\TimerDemo.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\blocktim.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\countsem.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\death.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\dynamic.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\flop.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\recmutex.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/Standard_Demo_Tasks\semtest.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo/FreeRTOS-Plus-CLI\FreeRTOS_CLI.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo\IntQueueTimer.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo\RegTest_GCC.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo\Sample-CLI-commands.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo\UARTCommandConsole.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Full_Demo\main_full.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/FreeRTOS_Source/portable/MemMang\heap_4.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/FreeRTOS_Source/portable/GCC/RX100\port.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/FreeRTOS_Source\event_groups.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/FreeRTOS_Source\list.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/FreeRTOS_Source\queue.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/FreeRTOS_Source\tasks.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/FreeRTOS_Source\timers.o""/>\r
+ <listOptionValue builtIn="false" value="".\src/Blinky_Demo\main_blinky.o""/>\r
+ <listOptionValue builtIn="false" value="".\src\main.o""/>\r
</option>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Linker.option.linkOptimizationflto.581799385" name="Enable link-time optimizations (-flto)" superClass="com.renesas.cdt.rx.HardwareDebug.Linker.option.linkOptimizationflto" value="false" valueType="boolean"/>\r
+ <option command="-nostartfiles" id="com.renesas.cdt.rx.HardwareDebug.Linker.option.linkUsingGcc.1103324850" name="Link using "gcc" command instead of "ld" command" superClass="com.renesas.cdt.rx.HardwareDebug.Linker.option.linkUsingGcc" value="false" valueType="boolean"/>\r
</tool>\r
<tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.objcopy.Id.634856905" name="Objcopy" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.objcopy.Id"/>\r
</toolChain>\r
</folderInfo>\r
- <fileInfo id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.485661513.1746000023" name="RegTest_IAR.s" rcbsApplicability="disable" resourcePath="src/Full_Demo/RegTest_IAR.s" toolsToInvoke="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id.19236880.127535740">\r
- <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id.19236880.127535740" name="Assembler" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id.19236880"/>\r
+ <folderInfo id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.485661513.702678308" name="/" resourcePath="src/cg_src">\r
+ <toolChain id="%com.renesas.cdt.rx.hardwaredebug.win32.toolChain.Id.618147174" name="KPIT GNURX-ELF Toolchain" superClass="%com.renesas.cdt.rx.hardwaredebug.win32.toolChain.Id" unusedChildren="">\r
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rx.hardwaredebug.win32.targetPlatform.Id" osList="win32" superClass="com.renesas.cdt.rx.hardwaredebug.win32.targetPlatform.Id"/>\r
+ <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.libgen.Id.1112916106" name="Library Generator" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.libgen.Id.2068462930"/>\r
+ <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1945005018" name="Compiler" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1424807284">\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel.312595561" name="Optimization level" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel.speedCodeSize" valueType="enumerated"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc61.1325218931" name="Disable emitting extra instructions to save and restore the registers around function calls (-fno-caller-saves )" superClass="com.renesas.cdt.core.Compiler.option.misc61" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc25.1192094709" name="Don't put function addresses in registers(-fno-function-cse)" superClass="com.renesas.cdt.core.Compiler.option.misc25" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc63.408932603" name="Avoid keeping the whole uncompressed sections in memory, only retaining the compressed ones (-flto-compression-level=0)" superClass="com.renesas.cdt.core.Compiler.option.misc63" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.flto.389571130" name="Enable Link-time optimizations (-flto)" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.flto" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc67.49719833" name="Do not Inline functions early before doing `-fprofile-generate' instrumentation and real inlining pass (-fno-early-inlining)" superClass="com.renesas.cdt.core.Compiler.option.misc67" value="true" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType.556980850" name="CPU type" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType" value="RX100" valueType="enumerated"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian.1624388464" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian" value="Little-endian data" valueType="enumerated"/>\r
+ <inputType id="%Base.Compiler.C.InputType.Id.1836594921" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
+ <inputType id="Base.Compiler.CPP.InputType.Id.1049685798" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
+ </tool>\r
+ <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id.482302878" name="Assembler" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id.19236880">\r
+ <inputType id="%Base.Assembler.inputType.Id.427384685" name="Assembler InputType" superClass="%Base.Assembler.inputType.Id"/>\r
+ </tool>\r
+ <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.linker.Id.1153111216" name="Linker" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.linker.Id.564427274"/>\r
+ <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.objcopy.Id.1747324511" name="Objcopy" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.objcopy.Id.634856905"/>\r
+ </toolChain>\r
+ </folderInfo>\r
+ <fileInfo id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.485661513.1042285317" name="IntQueue.c" rcbsApplicability="disable" resourcePath="src/Full_Demo/Standard_Demo_Tasks/IntQueue.c" toolsToInvoke="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1424807284.173350745">\r
+ <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1424807284.173350745" name="Compiler" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1424807284">\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType.1173619311" name="CPU type" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType" value="RX100" valueType="enumerated"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian.438635862" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian" value="Little-endian data" valueType="enumerated"/>\r
+ <inputType id="%Base.Compiler.C.InputType.Id.1696311581" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
+ <inputType id="Base.Compiler.CPP.InputType.Id.393257669" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
+ </tool>\r
+ <tool customBuildStep="true" id="org.eclipse.cdt.managedbuilder.ui.rcbs.553315713" name="Resource Custom Build Step">\r
+ <inputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.inputtype.1263892143" name="Resource Custom Build Step Input Type">\r
+ <additionalInput kind="additionalinputdependency"/>\r
+ </inputType>\r
+ <outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1910448590" name="Resource Custom Build Step Output Type"/>\r
+ </tool>\r
+ </fileInfo>\r
+ <fileInfo id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.485661513.498883362" name="IntQueueTimer.c" rcbsApplicability="disable" resourcePath="src/Full_Demo/IntQueueTimer.c" toolsToInvoke="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1424807284.820409184">\r
+ <tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1424807284.820409184" name="Compiler" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1424807284">\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel.445152985" name="Optimization level" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel.speedCodeSize" valueType="enumerated"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc61.351049028" name="Disable emitting extra instructions to save and restore the registers around function calls (-fno-caller-saves )" superClass="com.renesas.cdt.core.Compiler.option.misc61" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc25.20109428" name="Don't put function addresses in registers(-fno-function-cse)" superClass="com.renesas.cdt.core.Compiler.option.misc25" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc63.1500858220" name="Avoid keeping the whole uncompressed sections in memory, only retaining the compressed ones (-flto-compression-level=0)" superClass="com.renesas.cdt.core.Compiler.option.misc63" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.flto.1392792373" name="Enable Link-time optimizations (-flto)" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.flto" value="false" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.core.Compiler.option.misc67.832633692" name="Do not Inline functions early before doing `-fprofile-generate' instrumentation and real inlining pass (-fno-early-inlining)" superClass="com.renesas.cdt.core.Compiler.option.misc67" value="true" valueType="boolean"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType.1973833273" name="CPU type" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType" value="RX100" valueType="enumerated"/>\r
+ <option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian.1233319758" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian" value="Little-endian data" valueType="enumerated"/>\r
+ <inputType id="%Base.Compiler.C.InputType.Id.1583671307" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
+ <inputType id="Base.Compiler.CPP.InputType.Id.61282871" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
+ </tool>\r
</fileInfo>\r
<sourceEntries>\r
- <entry excluding="Full_Demo/RegTest_IAR.s|cg_src/r_cg_sbrk.h|cg_src/r_cg_sbrk.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>\r
+ <entry excluding="Full_Demo/RegTest_IAR.s" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>\r
</sourceEntries>\r
</configuration>\r
</storageModule>\r
<type>2</type>\r
<locationURI>FREERTOS_ROOT/FreeRTOS/Source</locationURI>\r
</link>\r
+ <link>\r
+ <name>src/Full_Demo/FreeRTOS-Plus-CLI</name>\r
+ <type>2</type>\r
+ <locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Source/FreeRTOS-Plus-CLI</locationURI>\r
+ </link>\r
+ <link>\r
+ <name>src/Full_Demo/Sample-CLI-commands.c</name>\r
+ <type>1</type>\r
+ <locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/Sample-CLI-commands.c</locationURI>\r
+ </link>\r
<link>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>2</type>\r
<locationURI>FREERTOS_ROOT/FreeRTOS/Demo/Common/Minimal</locationURI>\r
</link>\r
+ <link>\r
+ <name>src/Full_Demo/UARTCommandConsole.c</name>\r
+ <type>1</type>\r
+ <locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/UARTCommandConsole.c</locationURI>\r
+ </link>\r
<link>\r
<name>src/Full_Demo/Standard_Demo_Tasks/include</name>\r
<type>2</type>\r
</linkedResources>\r
<filteredResources>\r
<filter>\r
- <id>1442930329366</id>\r
+ <id>1443980078370</id>\r
<name></name>\r
<type>10</type>\r
<matcher>\r
<arguments>1.0-name-matches-false-false-settings</arguments>\r
</matcher>\r
</filter>\r
+ <filter>\r
+ <id>1443980078370</id>\r
+ <name></name>\r
+ <type>6</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-RTOSDemo.dep</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443980078380</id>\r
+ <name></name>\r
+ <type>6</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-RTOSDemo.ew*</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443980078390</id>\r
+ <name></name>\r
+ <type>10</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-Debug</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443979933599</id>\r
+ <name>src</name>\r
+ <type>6</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-PriorityDefinitions.h</arguments>\r
+ </matcher>\r
+ </filter>\r
<filter>\r
<id>1442848178229</id>\r
<name>src/FreeRTOS_Source</name>\r
<arguments>1.0-name-matches-false-false-croutine.c</arguments>\r
</matcher>\r
</filter>\r
+ <filter>\r
+ <id>1443970320129</id>\r
+ <name>src/cg_src</name>\r
+ <type>6</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-*_IAR.*</arguments>\r
+ </matcher>\r
+ </filter>\r
<filter>\r
<id>1442848203356</id>\r
<name>src/FreeRTOS_Source/portable</name>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849604975</id>\r
+ <id>1443970649129</id>\r
+ <name>src/Full_Demo/FreeRTOS-Plus-CLI</name>\r
+ <type>5</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-FreeRTOS_CLI.h</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443970649129</id>\r
+ <name>src/Full_Demo/FreeRTOS-Plus-CLI</name>\r
+ <type>5</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-*.url</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443970649139</id>\r
+ <name>src/Full_Demo/FreeRTOS-Plus-CLI</name>\r
+ <type>5</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-FreeRTOS_CLI.c</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443988296032</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849604980</id>\r
+ <id>1443988296042</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849604984</id>\r
+ <id>1443988296042</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849604987</id>\r
+ <id>1443988296042</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849604991</id>\r
+ <id>1443988296052</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849604996</id>\r
+ <id>1443988296062</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849605000</id>\r
+ <id>1443988296062</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849605004</id>\r
+ <id>1443988296072</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849605009</id>\r
+ <id>1443988296072</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849605013</id>\r
+ <id>1443988296082</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849605017</id>\r
+ <id>1443988296082</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849605021</id>\r
+ <id>1443988296092</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849605026</id>\r
+ <id>1443988296102</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442849605030</id>\r
- <name>src/Full_Demo/Standard_Demo_Tasks</name>\r
- <type>5</type>\r
- <matcher>\r
- <id>org.eclipse.ui.ide.multiFilter</id>\r
- <arguments>1.0-name-matches-false-false-TimerDemo.c</arguments>\r
- </matcher>\r
- </filter>\r
- <filter>\r
- <id>1442849605033</id>\r
+ <id>1443988296102</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
<configuration id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.485661513" name="HardwareDebug">\r
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">\r
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>\r
- <provider class="com.renesas.cdt.common.build.spec.RXGCCBuiltinSpecsDetector" console="false" env-hash="-41386653944825589" id="RXGCCBuiltinSpecsDetector" keep-relative-paths="false" name="Renesas GCCBuildinCompilerSettings" options-hash="-645709713" parameter="rx-elf-gcc -E -P -v -dD ${INPUTS}" prefer-non-shared="true">\r
+ <provider class="com.renesas.cdt.common.build.spec.RXGCCBuiltinSpecsDetector" console="false" env-hash="-83633861543855079" id="RXGCCBuiltinSpecsDetector" keep-relative-paths="false" name="Renesas GCCBuildinCompilerSettings" options-hash="-645709713" parameter="rx-elf-gcc -E -P -v -dD ${INPUTS}" prefer-non-shared="true">\r
<language-scope id="org.eclipse.cdt.core.gcc"/>\r
<language-scope id="org.eclipse.cdt.core.g++"/>\r
</provider>\r
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.delay" value="3"/>\r
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/>\r
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>\r
-<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RX113-RSK_GCC_e2studio\RTOSDemo\HardwareDebug\RTOSDemo.x"/>\r
+<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RX100_RX113-RSK_GCC_e2studio_IAR\HardwareDebug\RTOSDemo.x"/>\r
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>\r
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/>\r
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>\r
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="true"/>\r
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>\r
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>\r
-<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RX113-RSK_GCC_e2studio\RTOSDemo\HardwareDebug\RTOSDemo.x"/>\r
+<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value="C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\RX100_RX113-RSK_GCC_e2studio_IAR\HardwareDebug\RTOSDemo.x"/>\r
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>\r
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>\r
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>\r
</plugin>\r
<plugin>\r
<file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>\r
- <loadFlag>0</loadFlag>\r
+ <loadFlag>1</loadFlag>\r
</plugin>\r
<plugin>\r
<file>$TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin</file>\r
</option>\r
<option>\r
<name>IccOptLevel</name>\r
- <state>1</state>\r
+ <state>0</state>\r
</option>\r
<option>\r
<name>IccOptStrategy</name>\r
<version>0</version>\r
- <state>0</state>\r
+ <state>2</state>\r
</option>\r
<option>\r
<name>IccOptLevelSlave</name>\r
- <state>1</state>\r
+ <state>0</state>\r
</option>\r
<option>\r
<name>IccOptAllowList</name>\r
<state>$PROJ_DIR$\..\..\Source\portable\IAR\RX100</state>\r
<state>$PROJ_DIR$\..\Common\include</state>\r
<state>$PROJ_DIR$\src\Full_Demo</state>\r
+ <state>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-CLI</state>\r
</option>\r
<option>\r
<name>CCStdIncCheck</name>\r
<file>\r
<name>$PROJ_DIR$\src\cg_src\r_cg_sci.c</name>\r
</file>\r
+ <file>\r
+ <name>$PROJ_DIR$\src\cg_src\r_cg_sci_user_IAR.c</name>\r
+ </file>\r
</group>\r
<group>\r
<name>FreeRTOS_Source</name>\r
</group>\r
<group>\r
<name>Full_Demo</name>\r
+ <group>\r
+ <name>FreeRTOS+CLI</name>\r
+ <file>\r
+ <name>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-CLI\FreeRTOS_CLI.c</name>\r
+ </file>\r
+ </group>\r
<group>\r
<name>Standard_Demo_Tasks</name>\r
<file>\r
<file>\r
<name>$PROJ_DIR$\..\Common\Minimal\TaskNotify.c</name>\r
</file>\r
- <file>\r
- <name>$PROJ_DIR$\..\Common\Minimal\TimerDemo.c</name>\r
- </file>\r
</group>\r
<file>\r
<name>$PROJ_DIR$\src\Full_Demo\IntQueueTimer.c</name>\r
<file>\r
<name>$PROJ_DIR$\src\Full_Demo\RegTest_IAR.s</name>\r
</file>\r
+ <file>\r
+ <name>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Demo\Common\FreeRTOS_Plus_CLI_Demos\Sample-CLI-commands.c</name>\r
+ </file>\r
+ <file>\r
+ <name>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Demo\Common\FreeRTOS_Plus_CLI_Demos\UARTCommandConsole.c</name>\r
+ </file>\r
</group>\r
<file>\r
<name>$PROJ_DIR$\src\FreeRTOSConfig.h</name>\r
<Debug-Log>\r
\r
\r
- <ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log>\r
+ <PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log>\r
<Build>\r
<ColumnWidth0>20</ColumnWidth0>\r
<ColumnWidth1>1216</ColumnWidth1>\r
<ColumnWidth2>324</ColumnWidth2>\r
<ColumnWidth3>81</ColumnWidth3>\r
- </Build>\r
+ <PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Debug-Log</Factory></Window></Windows></PreferedWindows></Build>\r
<Workspace>\r
<ColumnWidths>\r
\r
\r
\r
\r
- <Column0>255</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>\r
+ <Column0>239</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>\r
</Workspace>\r
<Disassembly>\r
<col-names>\r
<Windows/>\r
</PreferedWindows>\r
</Register>\r
- </Static>\r
+ <TASKVIEW><Column0>200</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3><Column4>100</Column4><Column5>100</Column5><Column6>100</Column6><Column7>100</Column7><Column8>150</Column8></TASKVIEW></Static>\r
<Windows>\r
\r
\r
- <Wnd2>\r
- <Tabs>\r
- <Tab>\r
- <Identity>TabID-6594-3339</Identity>\r
- <TabName>Debug Log</TabName>\r
- <Factory>Debug-Log</Factory>\r
- <Session/>\r
- </Tab>\r
- <Tab>\r
- <Identity>TabID-6072-3348</Identity>\r
- <TabName>Build</TabName>\r
- <Factory>Build</Factory>\r
- <Session/>\r
- </Tab>\r
- </Tabs>\r
- \r
- <SelectedTab>0</SelectedTab></Wnd2><Wnd3>\r
+ <Wnd0>\r
<Tabs>\r
<Tab>\r
<Identity>TabID-17343-3342</Identity>\r
<Factory>Workspace</Factory>\r
<Session>\r
\r
- <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode></NodeDict></Session>\r
+ <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS_Source</ExpandedNode><ExpandedNode>RTOSDemo/Full_Demo</ExpandedNode><ExpandedNode>RTOSDemo/Full_Demo/Standard_Demo_Tasks</ExpandedNode></NodeDict></Session>\r
</Tab>\r
</Tabs>\r
\r
- <SelectedTab>0</SelectedTab></Wnd3></Windows>\r
+ <SelectedTab>0</SelectedTab></Wnd0><Wnd2><Tabs><Tab><Identity>TabID-12090-10424</Identity><TabName>Tasks</TabName><Factory>TASKVIEW</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd2></Windows>\r
<Editor>\r
\r
\r
\r
\r
- <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\src\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>111</YPos2><SelStart2>6264</SelStart2><SelEnd2>6264</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+ <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\src\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>124</YPos2><SelStart2>6239</SelStart2><SelEnd2>6239</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\src\Full_Demo\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>190</YPos2><SelStart2>11132</SelStart2><SelEnd2>11132</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\IntQueue.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>697</YPos2><SelStart2>26662</SelStart2><SelEnd2>26662</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>3309</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\QueueOverwrite.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>213</YPos2><SelStart2>8115</SelStart2><SelEnd2>8115</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
<Positions>\r
\r
\r
\r
\r
\r
- <Top><Row0><Sizes><Toolbar-00C882C0><key>iaridepm.enu1</key></Toolbar-00C882C0></Sizes></Row0><Row1><Sizes><Toolbar-1542CDB8><key>debuggergui.enu1</key></Toolbar-1542CDB8></Sizes></Row1><Row2><Sizes/></Row2></Top><Left><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>718</Bottom><Right>329</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>197024</sizeVertCX><sizeVertCY>731707</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd2></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+ <Top><Row0><Sizes><Toolbar-0114A4B8><key>iaridepm.enu1</key></Toolbar-0114A4B8><Toolbar-0CA66D80><key>debuggergui.enu1</key></Toolbar-0CA66D80></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>469</Bottom><Right>329</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>197024</sizeVertCX><sizeVertCY>478659</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>471</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>473</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>480691</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd2></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
</Desktop>\r
</Project>\r
\r
[DebugChecksum]\r
-Checksum=-948946463\r
+Checksum=-1824360014\r
[CodeCoverage]\r
Enabled=_ 0\r
[Stack]\r
RegMode=0\r
Endian=0\r
ExtMemBlockNum=55\r
-ExtMemEndian_000=0 \r
-ExtMemCondAccess_000=0 \r
-ExtMemEndian_001=0 \r
-ExtMemCondAccess_001=0 \r
-ExtMemEndian_002=0 \r
-ExtMemCondAccess_002=0 \r
-ExtMemEndian_003=0 \r
-ExtMemCondAccess_003=0 \r
-ExtMemEndian_004=0 \r
-ExtMemCondAccess_004=0 \r
-ExtMemEndian_005=0 \r
-ExtMemCondAccess_005=0 \r
-ExtMemEndian_006=0 \r
-ExtMemCondAccess_006=0 \r
-ExtMemEndian_007=0 \r
-ExtMemCondAccess_007=0 \r
-ExtMemEndian_008=0 \r
-ExtMemCondAccess_008=0 \r
-ExtMemEndian_009=0 \r
-ExtMemCondAccess_009=0 \r
-ExtMemEndian_010=0 \r
-ExtMemCondAccess_010=0 \r
-ExtMemEndian_011=0 \r
-ExtMemCondAccess_011=0 \r
-ExtMemEndian_012=0 \r
-ExtMemCondAccess_012=0 \r
-ExtMemEndian_013=0 \r
-ExtMemCondAccess_013=0 \r
-ExtMemEndian_014=0 \r
-ExtMemCondAccess_014=0 \r
-ExtMemEndian_015=0 \r
-ExtMemCondAccess_015=0 \r
-ExtMemEndian_016=0 \r
-ExtMemCondAccess_016=0 \r
-ExtMemEndian_017=0 \r
-ExtMemCondAccess_017=0 \r
-ExtMemEndian_018=0 \r
-ExtMemCondAccess_018=0 \r
-ExtMemEndian_019=0 \r
-ExtMemCondAccess_019=0 \r
-ExtMemEndian_020=0 \r
-ExtMemCondAccess_020=0 \r
-ExtMemEndian_021=0 \r
-ExtMemCondAccess_021=0 \r
-ExtMemEndian_022=0 \r
-ExtMemCondAccess_022=0 \r
-ExtMemEndian_023=0 \r
-ExtMemCondAccess_023=0 \r
-ExtMemEndian_024=0 \r
-ExtMemCondAccess_024=0 \r
-ExtMemEndian_025=0 \r
-ExtMemCondAccess_025=0 \r
-ExtMemEndian_026=0 \r
-ExtMemCondAccess_026=0 \r
-ExtMemEndian_027=0 \r
-ExtMemCondAccess_027=0 \r
-ExtMemEndian_028=0 \r
-ExtMemCondAccess_028=0 \r
-ExtMemEndian_029=0 \r
-ExtMemCondAccess_029=0 \r
-ExtMemEndian_030=0 \r
-ExtMemCondAccess_030=0 \r
-ExtMemEndian_031=0 \r
-ExtMemCondAccess_031=0 \r
-ExtMemEndian_032=0 \r
-ExtMemCondAccess_032=0 \r
-ExtMemEndian_033=0 \r
-ExtMemCondAccess_033=0 \r
-ExtMemEndian_034=0 \r
-ExtMemCondAccess_034=0 \r
-ExtMemEndian_035=0 \r
-ExtMemCondAccess_035=0 \r
-ExtMemEndian_036=0 \r
-ExtMemCondAccess_036=0 \r
-ExtMemEndian_037=0 \r
-ExtMemCondAccess_037=0 \r
-ExtMemEndian_038=0 \r
-ExtMemCondAccess_038=0 \r
-ExtMemEndian_039=0 \r
-ExtMemCondAccess_039=0 \r
-ExtMemEndian_040=0 \r
-ExtMemCondAccess_040=0 \r
-ExtMemEndian_041=0 \r
-ExtMemCondAccess_041=0 \r
-ExtMemEndian_042=0 \r
-ExtMemCondAccess_042=0 \r
-ExtMemEndian_043=0 \r
-ExtMemCondAccess_043=0 \r
-ExtMemEndian_044=0 \r
-ExtMemCondAccess_044=0 \r
-ExtMemEndian_045=0 \r
-ExtMemCondAccess_045=0 \r
-ExtMemEndian_046=0 \r
-ExtMemCondAccess_046=0 \r
-ExtMemEndian_047=0 \r
-ExtMemCondAccess_047=0 \r
-ExtMemEndian_048=0 \r
-ExtMemCondAccess_048=0 \r
-ExtMemEndian_049=0 \r
-ExtMemCondAccess_049=0 \r
-ExtMemEndian_050=0 \r
-ExtMemCondAccess_050=0 \r
-ExtMemEndian_051=0 \r
-ExtMemCondAccess_051=0 \r
-ExtMemEndian_052=0 \r
-ExtMemCondAccess_052=0 \r
-ExtMemEndian_053=0 \r
-ExtMemCondAccess_053=0 \r
-ExtMemEndian_054=0 \r
-ExtMemCondAccess_054=0 \r
+ExtMemEndian_000=0 \r
+ExtMemCondAccess_000=0 \r
+ExtMemEndian_001=0 \r
+ExtMemCondAccess_001=0 \r
+ExtMemEndian_002=0 \r
+ExtMemCondAccess_002=0 \r
+ExtMemEndian_003=0 \r
+ExtMemCondAccess_003=0 \r
+ExtMemEndian_004=0 \r
+ExtMemCondAccess_004=0 \r
+ExtMemEndian_005=0 \r
+ExtMemCondAccess_005=0 \r
+ExtMemEndian_006=0 \r
+ExtMemCondAccess_006=0 \r
+ExtMemEndian_007=0 \r
+ExtMemCondAccess_007=0 \r
+ExtMemEndian_008=0 \r
+ExtMemCondAccess_008=0 \r
+ExtMemEndian_009=0 \r
+ExtMemCondAccess_009=0 \r
+ExtMemEndian_010=0 \r
+ExtMemCondAccess_010=0 \r
+ExtMemEndian_011=0 \r
+ExtMemCondAccess_011=0 \r
+ExtMemEndian_012=0 \r
+ExtMemCondAccess_012=0 \r
+ExtMemEndian_013=0 \r
+ExtMemCondAccess_013=0 \r
+ExtMemEndian_014=0 \r
+ExtMemCondAccess_014=0 \r
+ExtMemEndian_015=0 \r
+ExtMemCondAccess_015=0 \r
+ExtMemEndian_016=0 \r
+ExtMemCondAccess_016=0 \r
+ExtMemEndian_017=0 \r
+ExtMemCondAccess_017=0 \r
+ExtMemEndian_018=0 \r
+ExtMemCondAccess_018=0 \r
+ExtMemEndian_019=0 \r
+ExtMemCondAccess_019=0 \r
+ExtMemEndian_020=0 \r
+ExtMemCondAccess_020=0 \r
+ExtMemEndian_021=0 \r
+ExtMemCondAccess_021=0 \r
+ExtMemEndian_022=0 \r
+ExtMemCondAccess_022=0 \r
+ExtMemEndian_023=0 \r
+ExtMemCondAccess_023=0 \r
+ExtMemEndian_024=0 \r
+ExtMemCondAccess_024=0 \r
+ExtMemEndian_025=0 \r
+ExtMemCondAccess_025=0 \r
+ExtMemEndian_026=0 \r
+ExtMemCondAccess_026=0 \r
+ExtMemEndian_027=0 \r
+ExtMemCondAccess_027=0 \r
+ExtMemEndian_028=0 \r
+ExtMemCondAccess_028=0 \r
+ExtMemEndian_029=0 \r
+ExtMemCondAccess_029=0 \r
+ExtMemEndian_030=0 \r
+ExtMemCondAccess_030=0 \r
+ExtMemEndian_031=0 \r
+ExtMemCondAccess_031=0 \r
+ExtMemEndian_032=0 \r
+ExtMemCondAccess_032=0 \r
+ExtMemEndian_033=0 \r
+ExtMemCondAccess_033=0 \r
+ExtMemEndian_034=0 \r
+ExtMemCondAccess_034=0 \r
+ExtMemEndian_035=0 \r
+ExtMemCondAccess_035=0 \r
+ExtMemEndian_036=0 \r
+ExtMemCondAccess_036=0 \r
+ExtMemEndian_037=0 \r
+ExtMemCondAccess_037=0 \r
+ExtMemEndian_038=0 \r
+ExtMemCondAccess_038=0 \r
+ExtMemEndian_039=0 \r
+ExtMemCondAccess_039=0 \r
+ExtMemEndian_040=0 \r
+ExtMemCondAccess_040=0 \r
+ExtMemEndian_041=0 \r
+ExtMemCondAccess_041=0 \r
+ExtMemEndian_042=0 \r
+ExtMemCondAccess_042=0 \r
+ExtMemEndian_043=0 \r
+ExtMemCondAccess_043=0 \r
+ExtMemEndian_044=0 \r
+ExtMemCondAccess_044=0 \r
+ExtMemEndian_045=0 \r
+ExtMemCondAccess_045=0 \r
+ExtMemEndian_046=0 \r
+ExtMemCondAccess_046=0 \r
+ExtMemEndian_047=0 \r
+ExtMemCondAccess_047=0 \r
+ExtMemEndian_048=0 \r
+ExtMemCondAccess_048=0 \r
+ExtMemEndian_049=0 \r
+ExtMemCondAccess_049=0 \r
+ExtMemEndian_050=0 \r
+ExtMemCondAccess_050=0 \r
+ExtMemEndian_051=0 \r
+ExtMemCondAccess_051=0 \r
+ExtMemEndian_052=0 \r
+ExtMemCondAccess_052=0 \r
+ExtMemEndian_053=0 \r
+ExtMemCondAccess_053=0 \r
+ExtMemEndian_054=0 \r
+ExtMemCondAccess_054=0 \r
InputClock=16.000000\r
ICLK=32.000000\r
AllowClkSrcChange=1\r
ActionState=1\r
[Simulator]\r
Freq=98000000\r
+[DataSample]\r
+LogEnabled=0\r
+GraphEnabled=0\r
+ShowTimeLog=1\r
[DriverProfiling]\r
Enabled=0\r
Mode=1\r
Graph=0\r
Symbiont=0\r
Exclusions=\r
-[DataSample]\r
-LogEnabled=0\r
-GraphEnabled=0\r
-ShowTimeLog=1\r
[Log file]\r
LoggingEnabled=_ 0\r
LogFile=_ ""\r
LoggingEnabled=_ 0\r
LogFile=_ ""\r
[Breakpoints]\r
-Count=0\r
+Bp0=_ "STD_CODE" "{$PROJ_DIR$\src\Full_Demo\main_full.c}.415.4" 1 0 0 0 "" 0 ""\r
+Bp1=_ "STD_CODE" "{$PROJ_DIR$\..\Common\Minimal\IntQueue.c}.302.2" 1 0 0 0 "" 0 ""\r
+Count=2\r
[Monitor Execution]\r
Leave target running=0\r
Release target=0\r
<Factory>Workspace</Factory>\r
<Session>\r
\r
- <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Blinky_Demo</ExpandedNode></NodeDict></Session>\r
+ <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Full_Demo</ExpandedNode><ExpandedNode>RTOSDemo/Full_Demo/Standard_Demo_Tasks</ExpandedNode></NodeDict></Session>\r
</Tab>\r
</Tabs>\r
\r
\r
\r
\r
- <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\src\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>111</YPos2><SelStart2>6264</SelStart2><SelEnd2>6264</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+ <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\src\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>64</YPos2><SelStart2>6239</SelStart2><SelEnd2>6239</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
<Positions>\r
\r
\r
\r
\r
\r
- <Top><Row0><Sizes><Toolbar-00C882C0><key>iaridepm.enu1</key></Toolbar-00C882C0></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>627</Bottom><Right>400</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>239286</sizeVertCX><sizeVertCY>639228</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>313</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>315</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>320122</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+ <Top><Row0><Sizes><Toolbar-0114A4B8><key>iaridepm.enu1</key></Toolbar-0114A4B8></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>627</Bottom><Right>400</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>239286</sizeVertCX><sizeVertCY>639228</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>313</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>315</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>320122</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
</Desktop>\r
</Workspace>\r
\r
*\r
* The Queue Send Task:\r
* The queue send task is implemented by the prvQueueSendTask() function in\r
- * this file. prvQueueSendTask() sits in a loop that causes it to repeatedly\r
- * block for 200 milliseconds, before sending the value 100 to the queue that\r
- * was created within main_blinky(). Once the value is sent, the task loops\r
- * back around to block for another 200 milliseconds...and so on.\r
+ * this file. It sends the value 100 to the queue every 200 milliseconds.\r
*\r
* The Queue Receive Task:\r
* The queue receive task is implemented by the prvQueueReceiveTask() function\r
- * in this file. prvQueueReceiveTask() sits in a loop where it repeatedly\r
- * blocks on attempts to read data from the queue that was created within\r
- * main_blinky(). When data is received, the task checks the value of the\r
- * data, and if the value equals the expected 100, toggles an LED. The 'block\r
- * time' parameter passed to the queue receive function specifies that the\r
- * task should be held in the Blocked state indefinitely to wait for data to\r
- * be available on the queue. The queue receive task will only leave the\r
- * Blocked state when the queue send task writes to the queue. As the queue\r
- * send task writes to the queue every 200 milliseconds, the queue receive\r
- * task leaves the Blocked state every 200 milliseconds, and therefore toggles\r
- * the LED every 200 milliseconds.\r
+ * in this file. It blocks on the queue to wait for data to arrive from the\r
+ * queue send task - toggling the LED each time it receives the value 100. The\r
+ * queue send task writes to the queue every 200ms, so the LED should toggle\r
+ * every 200ms.\r
*/\r
\r
/* Kernel includes. */\r
\r
/* The rate at which data is sent to the queue. The 200ms value is converted\r
to ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainQUEUE_SEND_FREQUENCY_MS ( 200 / portTICK_PERIOD_MS )\r
+#define mainQUEUE_SEND_FREQUENCY_MS ( pdMS_TO_TICKS( 200UL ) )\r
\r
/* The number of items the queue can hold. This is 1 as the receive task\r
will remove items as they are added, meaning the send task should always find\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
-#define configUSE_IDLE_HOOK 0\r
+#define configUSE_IDLE_HOOK 1\r
#define configUSE_TICK_HOOK 1\r
#define configCPU_CLOCK_HZ ( 32000000 ) /* Set in mcu_info.h. */\r
#define configPERIPHERAL_CLOCK_HZ ( 32000000 ) /* Set in muc_info.h. */\r
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )\r
-#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 125 )\r
-#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 45 * 1024 ) )\r
+#define configMAX_PRIORITIES ( 7 )\r
+#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 38 * 1024 ) )\r
#define configMAX_TASK_NAME_LEN ( 12 )\r
#define configUSE_TRACE_FACILITY 1\r
#define configUSE_16_BIT_TICKS 0\r
#define configUSE_MALLOC_FAILED_HOOK 0\r
#define configUSE_APPLICATION_TASK_TAG 0\r
#define configUSE_COUNTING_SEMAPHORES 1\r
+#define configUSE_TICKLESS_IDLE 0\r
\r
-#define configMAX_PRIORITIES ( 7 )\r
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
+#ifdef __ICCRX__\r
+ #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 )\r
+#endif\r
+\r
+#ifdef __GNUC__\r
+ #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 120 )\r
+#endif\r
+/* This demo makes use of one or more example stats formatting functions. These\r
+format the raw data provided by the uxTaskGetSystemState() function in to human\r
+readable ASCII form. See the notes in the implementation of vTaskList() within\r
+FreeRTOS/Source/tasks.c for limitations. */\r
+#define configUSE_STATS_FORMATTING_FUNCTIONS 1\r
\r
/* Software timer definitions. */\r
#define configUSE_TIMERS 1\r
/* The maximum interrupt priority from which FreeRTOS API calls can be made.\r
Interrupts that use a priority above this will not be effected by anything the\r
kernel is doing. */\r
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4\r
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY 5\r
\r
/* Set the following definitions to 1 to include the API function, or zero\r
-to exclude the API function. */\r
-\r
+to exclude the API function - alternative just use the linker to remove unused\r
+functions - which would be normal anyway. */\r
#define INCLUDE_vTaskPrioritySet 1\r
#define INCLUDE_uxTaskPriorityGet 1\r
#define INCLUDE_vTaskDelete 1\r
#define INCLUDE_eTaskGetState 1\r
#define INCLUDE_xTimerPendFunctionCall 1\r
\r
+/* Assert stops the system on the line that failed the assert(), which can then\r
+be viewed by pausing the debugger. */\r
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }\r
\r
-/* The configPRE_SLEEP_PROCESSING() and configPOST_SLEEP_PROCESSING() macros\r
-allow the application writer to add additional code before and after the MCU is\r
-placed into the low power state respectively. The implementations provided in\r
-this demo can be extended to save even more power - for example the analog\r
-input used by the low power demo could be switched off in the pre-sleep macro\r
-and back on again in the post sleep macro. */\r
-void vPreSleepProcessing( unsigned long xExpectedIdleTime );\r
-void vPostSleepProcessing( unsigned long xExpectedIdleTime );\r
-#define configPRE_SLEEP_PROCESSING( xExpectedIdleTime ) vPreSleepProcessing( xExpectedIdleTime );\r
-#define configPOST_SLEEP_PROCESSING( xExpectedIdleTime ) vPostSleepProcessing( xExpectedIdleTime );\r
+/* The buffer into which output generated by FreeRTOS+CLI is placed. This must\r
+be at least big enough to contain the output of the task-stats command, as the\r
+example implementation does not include buffer overlow checking. */\r
+#define configCOMMAND_INT_MAX_OUTPUT_SIZE 3500\r
+#define configINCLUDE_QUERY_HEAP_COMMAND 1\r
\r
/* configTICK_VECTOR must be set to the interrupt vector used by the peripheral\r
that generates the tick interrupt. */\r
#define configTICK_VECTOR VECT_CMT0_CMI0\r
\r
+/* Override some of the priorities set in the common demo tasks. This is\r
+required to ensure false positive timing errors are not reported. */\r
+#define bktPRIMARY_PRIORITY ( configMAX_PRIORITIES - 3 )\r
+#define bktSECONDARY_PRIORITY ( configMAX_PRIORITIES - 4 )\r
+#define intqHIGHER_PRIORITY ( configMAX_PRIORITIES - 3 )\r
+\r
#endif /* FREERTOS_CONFIG_H */\r
* This file contains the non-portable and therefore RX62N specific parts of\r
* the IntQueue standard demo task - namely the configuration of the timers\r
* that generate the interrupts and the interrupt entry points.\r
+ *\r
+ * ***NOTE***: When using GCC it is best to compile this file with maximum speed\r
+ * optimisation - otherwise standard demo tasks that monitor their own\r
+ * performance might fail assertion tests.\r
*/\r
\r
/* Scheduler includes. */\r
#include "IntQueue.h"\r
\r
#define tmrTIMER_0_1_FREQUENCY ( 2000UL )\r
-#define tmrTIMER_2_3_FREQUENCY ( 2111UL )\r
+#define tmrTIMER_2_3_FREQUENCY ( 2007UL )\r
\r
void vInitialiseTimerForIntQueueTest( void )\r
{\r
*\r
******************************************************************************\r
*\r
- * main_full() creates all the demo application tasks and software timers, then\r
+ * main_full() creates a set of demo application tasks and software timers, then\r
* starts the scheduler. The web documentation provides more details of the\r
* standard demo application tasks, which provide no particular functionality,\r
* but do provide a good example of how to use the FreeRTOS API.\r
* In addition to the standard demo tasks, the following tasks and tests are\r
* defined and/or created within this file:\r
*\r
+ * "FreeRTOS+CLI command console" - The command console uses SCI1 for its\r
+ * input and output. The baud rate is set to 19200. Type "help" to see a list\r
+ * of registered commands. The FreeRTOS+CLI license is different to the\r
+ * FreeRTOS license, see http://www.FreeRTOS.org/cli for license and usage\r
+ * details.\r
+ *\r
* "Reg test" tasks - These fill both the core and floating point registers with\r
* known values, then check that each register maintains its expected value for\r
* the lifetime of the task. Each task uses a different set of values. The reg\r
* error in the context switching mechanism.\r
*\r
* "Check" task - The check task period is initially set to three seconds. The\r
- * task checks that all the standard demo tasks, and the register check tasks,\r
- * are not only still executing, but are executing without reporting any errors.\r
- * If the check task discovers that a task has either stalled, or reported an\r
- * error, then it changes its own execution period from the initial three\r
- * seconds, to just 200ms. The check task also toggles an LED each time it is\r
- * called. This provides a visual indication of the system status: If the LED\r
- * toggles every three seconds, then no issues have been discovered. If the LED\r
- * toggles every 200ms, then an issue has been discovered with at least one\r
- * task.\r
+ * task checks that all the standard demo tasks are not only still executing,\r
+ * but are executing without reporting any errors. If the check task discovers\r
+ * that a task has either stalled, or reported an error, then it changes its own\r
+ * execution period from the initial three seconds, to just 200ms. The check\r
+ * task also toggles an LED on each iteration of its loop. This provides a\r
+ * visual indication of the system status: If the LED toggles every three\r
+ * seconds, then no issues have been discovered. If the LED toggles every\r
+ * 200ms, then an issue has been discovered with at least one task.\r
*/\r
\r
/* Standard includes. */\r
#include "partest.h"\r
#include "comtest2.h"\r
#include "serial.h"\r
-#include "TimerDemo.h"\r
#include "QueueOverwrite.h"\r
#include "IntQueue.h"\r
#include "EventGroupsDemo.h"\r
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3UL )\r
#define mainFLOP_TASK_PRIORITY ( tskIDLE_PRIORITY )\r
#define mainUART_COMMAND_CONSOLE_STACK_SIZE ( configMINIMAL_STACK_SIZE * 3UL )\r
-#define mainCOM_TEST_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )\r
#define mainCHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )\r
#define mainQUEUE_OVERWRITE_PRIORITY ( tskIDLE_PRIORITY )\r
\r
/* The priority used by the UART command console task. */\r
-#define mainUART_COMMAND_CONSOLE_TASK_PRIORITY ( configMAX_PRIORITIES - 2 )\r
-\r
-/* A block time of zero simply means "don't block". */\r
-#define mainDONT_BLOCK ( 0UL )\r
+#define mainUART_COMMAND_CONSOLE_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
\r
/* The period after which the check timer will expire, in ms, provided no errors\r
have been reported by any of the standard demo tasks. ms are converted to the\r
equivalent in ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainNO_ERROR_CHECK_TASK_PERIOD ( 3000UL / portTICK_PERIOD_MS )\r
+#define mainNO_ERROR_CHECK_TASK_PERIOD pdMS_TO_TICKS( 3000UL )\r
\r
/* The period at which the check timer will expire, in ms, if an error has been\r
reported in one of the standard demo tasks. ms are converted to the equivalent\r
in ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainERROR_CHECK_TASK_PERIOD ( 200UL / portTICK_PERIOD_MS )\r
+#define mainERROR_CHECK_TASK_PERIOD pdMS_TO_TICKS( 200UL )\r
\r
/* Parameters that are passed into the register check tasks solely for the\r
purpose of ensuring parameters are passed into tasks correctly. */\r
-#define mainREG_TEST_1_PARAMETER ( ( void * ) 0x12121212UL )\r
-#define mainREG_TEST_2_PARAMETER ( ( void * ) 0x12345678UL )\r
+#define mainREG_TEST_1_PARAMETER ( ( void * ) 0x12121212UL )\r
+#define mainREG_TEST_2_PARAMETER ( ( void * ) 0x12345678UL )\r
\r
/* The base period used by the timer test tasks. */\r
#define mainTIMER_TEST_PERIOD ( 50 )\r
*/\r
static void prvPseudoRandomiser( void *pvParameters );\r
\r
+/*\r
+ * Register commands that can be used with FreeRTOS+CLI. The commands are\r
+ * defined in CLI-Commands.c and File-Related-CLI-Command.c respectively.\r
+ */\r
+extern void vRegisterSampleCLICommands( void );\r
+\r
+/*\r
+ * The task that manages the FreeRTOS+CLI input and output.\r
+ */\r
+extern void vUARTCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );\r
+\r
/*-----------------------------------------------------------*/\r
\r
/* The following two variables are used to communicate the status of the\r
stops incrementing, then an error has been found. */\r
volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;\r
\r
-/* String for display in the web server. It is set to an error message if the\r
-check task detects an error. */\r
-const char *pcStatusMessage = "All tasks running without error";\r
/*-----------------------------------------------------------*/\r
\r
void main_full( void )\r
vStartGenericQueueTasks( tskIDLE_PRIORITY );\r
vStartRecursiveMutexTasks();\r
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
-//_RB_ vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
- vStartTimerDemoTask( mainTIMER_TEST_PERIOD );\r
+ vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
vStartQueueOverwriteTask( mainQUEUE_OVERWRITE_PRIORITY );\r
vStartEventGroupTasks();\r
vStartTaskNotifyTask();\r
xTaskCreate( prvRegTest2Task, "RegTst2", configMINIMAL_STACK_SIZE, mainREG_TEST_2_PARAMETER, tskIDLE_PRIORITY, NULL );\r
\r
/* Create the task that just adds a little random behaviour. */\r
- xTaskCreate( prvPseudoRandomiser, "Rnd", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );\r
+ xTaskCreate( prvPseudoRandomiser, "Rnd", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 2, NULL );\r
+\r
+ /* Start the tasks that implements the command console on the UART, as\r
+ described above. */\r
+ vUARTCommandConsoleStart( mainUART_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );\r
+\r
+ /* Register the standard CLI commands. */\r
+ vRegisterSampleCLICommands();\r
\r
/* Create the task that performs the 'check' functionality, as described at\r
the top of this file. */\r
ulErrorFound |= 1UL << 0UL;\r
}\r
\r
-#ifdef _RB_\r
if( xAreMathsTaskStillRunning() != pdTRUE )\r
{\r
ulErrorFound |= 1UL << 1UL;\r
}\r
-#endif\r
+\r
if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )\r
{\r
ulErrorFound |= 1UL << 2UL;\r
ulErrorFound |= 1UL << 8UL;\r
}\r
\r
- if( xAreTimerDemoTasksStillRunning( ( TickType_t ) mainNO_ERROR_CHECK_TASK_PERIOD ) != pdPASS )\r
- {\r
- ulErrorFound |= 1UL << 9UL;\r
- }\r
-\r
if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )\r
{\r
ulErrorFound |= 1UL << 10UL;\r
gone wrong (it might just be that the loop back connector required\r
by the comtest tasks has not been fitted). */\r
xDelayPeriod = mainERROR_CHECK_TASK_PERIOD;\r
- pcStatusMessage = "Error found in at least one task.";\r
}\r
}\r
}\r
\r
static void prvPseudoRandomiser( void *pvParameters )\r
{\r
-const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL, ulMinDelay = ( 35 / portTICK_PERIOD_MS );\r
+const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL, ulMinDelay = pdMS_TO_TICKS( 35 );\r
volatile uint32_t ulNextRand = ( uint32_t ) &pvParameters, ulValue;\r
\r
/* This task does nothing other than ensure there is a little bit of\r
__asm volatile( "NOP" );\r
__asm volatile( "NOP" );\r
__asm volatile( "NOP" );\r
-\r
+ vTaskDelay( 2 );\r
ulValue--;\r
}\r
}\r
\r
void vFullDemoTickHook( void )\r
{\r
- /* The full demo includes a software timer demo/test that requires\r
- prodding periodically from the tick interrupt. */\r
- vTimerPeriodicISRTests();\r
-\r
/* Call the periodic queue overwrite from ISR demo. */\r
vQueueOverwritePeriodicISRDemo();\r
\r
+++ /dev/null
-/*******************************************************************************\r
- * DISCLAIMER\r
- * This software is supplied by Renesas Electronics Corporation and is only\r
- * intended for use with Renesas products. No other uses are authorized. This\r
- * software is owned by Renesas Electronics Corporation and is protected under\r
- * all applicable laws, including copyright laws.\r
- * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
- * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT\r
- * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE\r
- * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.\r
- * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS\r
- * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR\r
- * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE\r
- * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
- * Renesas reserves the right, without notice, to make changes to this software\r
- * and to discontinue the availability of this software. By using this software,\r
- * you agree to the additional terms and conditions found by accessing the\r
- * following link:\r
- * http://www.renesas.com/disclaimer\r
- *******************************************************************************/\r
-/* Copyright (C) 2014 Renesas Electronics Corporation. All rights reserved. */\r
-/*******************************************************************************\r
- * File Name : r_rsk_async.c\r
- * Version : 1.00\r
- * Device(s) : R5F51138AxFP\r
- * Tool-Chain : CCRX\r
- * H/W Platform : RSKRX113\r
- * Description : Functions used to send data via the SCI in asynchronous mode\r
- *******************************************************************************/\r
-/*******************************************************************************\r
- * History : 26.08.2014 Ver. 1.00 First Release\r
- *******************************************************************************/\r
-\r
-/*******************************************************************************\r
- System Includes\r
- *******************************************************************************/\r
-/* Following header file provides string type definitions. */\r
-#include <string.h>\r
-\r
-/*******************************************************************************\r
- User Includes (Project Level Includes)\r
- *******************************************************************************/\r
-/* Defines port registers */\r
-#include "r_cg_macrodriver.h"\r
-#include "r_cg_sci.h"\r
-#include "r_rsk_async.h"\r
-\r
-/*******************************************************************************\r
- User Defines\r
- *******************************************************************************/\r
-\r
-/*******************************************************************************\r
- * Global Variables\r
- *******************************************************************************/\r
-\r
-/* Declaration of the command string to clear the terminal screen */\r
-static const char cmd_clr_scr[] =\r
-{ 27, 91, 50, 74, 0, 27, 91, 72, 0 };\r
-\r
-/*******************************************************************************\r
- * Function Prototypes\r
- *******************************************************************************/\r
-\r
-/* text_write function prototype */\r
-static void text_write (const char * const msg_string);\r
-\r
-/*******************************************************************************\r
- * Function Name: R_ASYNC_Init\r
- * Description : This function initialises the SCI channel connected to the\r
- * RS232 connector on the RSK. The channel is configured for\r
- * transmission and reception, and instructions are sent to the\r
- * terminal.\r
- * Argument : none\r
- * Return value : none\r
- *******************************************************************************/\r
-void R_ASYNC_Init (void)\r
-{\r
-\r
- /* Set up SCI1 receive buffer */\r
- R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
-\r
- /* Enable SCI1 operations */\r
- R_SCI1_Start();\r
-\r
- /* Clear the text on terminal window */\r
- text_write(cmd_clr_scr);\r
-\r
- /* Display splash screen on terminal window */\r
- text_write("Renesas RSKRX113 Async Serial \r\n");\r
-\r
- /* Inform user on how to stop transmission */\r
- text_write("Press 'z' to stop and any key to resume\r\n\n");\r
-}\r
-/*******************************************************************************\r
- * End of function R_ASYNC_Init\r
- *******************************************************************************/\r
-\r
-/*******************************************************************************\r
- * Function Name : text_write\r
- * Description : Transmits null-terminated string.\r
- * Argument : (char*) msg_string - null terminated string\r
- * Return value : None\r
- *******************************************************************************/\r
-static void text_write (const char * const msg_string)\r
-{\r
- R_SCI1_AsyncTransmit((uint8_t *) msg_string, (uint16_t) strlen(msg_string));\r
-}\r
-/*******************************************************************************\r
- * End of function text_write\r
- *******************************************************************************/\r
-\r
+++ /dev/null
-/*******************************************************************************\r
- * DISCLAIMER\r
- * This software is supplied by Renesas Electronics Corporation and is only\r
- * intended for use with Renesas products. No other uses are authorized. This\r
- * software is owned by Renesas Electronics Corporation and is protected under\r
- * all applicable laws, including copyright laws.\r
- * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
- * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT\r
- * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE\r
- * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.\r
- * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS\r
- * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR\r
- * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE\r
- * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
- * Renesas reserves the right, without notice, to make changes to this software\r
- * and to discontinue the availability of this software. By using this software,\r
- * you agree to the additional terms and conditions found by accessing the\r
- * following link:\r
- * http://www.renesas.com/disclaimer\r
- *******************************************************************************/\r
-/* Copyright (C) 2014 Renesas Electronics Corporation. All rights reserved. */\r
-/*******************************************************************************\r
- * File Name : r_rsk_async.h\r
- * Version : 1.00\r
- * Device(s) : R5F51138AxFP\r
- * Tool-Chain : CCRX\r
- * H/W Platform : RSKRX113\r
- * Description : Functions used to send data via the SCI in asynchronous mode\r
- ******************************************************************************/\r
-/*******************************************************************************\r
- * History : 26.08.2014 Ver. 1.00 First Release\r
- *******************************************************************************/\r
-\r
-/*******************************************************************************\r
- * Macro Definitions\r
- *******************************************************************************/\r
-/* Multiple inclusion prevention macro */\r
-#ifndef R_RSK_ASYNC_H\r
-#define R_RSK_ASYNC_H\r
-\r
-/*******************************************************************************\r
- * Global Function Prototypes\r
- *******************************************************************************/\r
-/* initialise asynchronous transmission*/\r
-void R_ASYNC_Init (void);\r
-\r
-/* End of multiple inclusion prevention macro */\r
-#endif\r
-\r
extern void vPortTickISR( void );\r
extern void vIntQTimerISR0( void );\r
extern void vIntQTimerISR1( void );\r
+extern void r_sci1_transmit_interrupt( void );\r
+extern void r_sci1_transmitend_interrupt( void );\r
+extern void r_sci1_receive_interrupt( void );\r
+extern void r_sci1_receiveerror_interrupt( void );\r
\r
#define FVECT_SECT __attribute__ ((section (".fvectors")))\r
\r
//;0x0364 SCI0_TEI0\r
(fp)INT_Excep_SCI0_TEI0,\r
//;0x0368 SCI1_ERI1\r
- (fp)INT_Excep_SCI1_ERI1,\r
+ (fp)r_sci1_receiveerror_interrupt,\r
//;0x036C SCI1_RXI1\r
- (fp)INT_Excep_SCI1_RXI1,\r
+ (fp)r_sci1_receive_interrupt,\r
//;0x0370 SCI1_TXI1\r
- (fp)INT_Excep_SCI1_TXI1,\r
+ (fp)r_sci1_transmit_interrupt,\r
//;0x0374 SCI1_TEI1\r
- (fp)INT_Excep_SCI1_TEI1,\r
+ (fp)r_sci1_transmitend_interrupt,\r
//;0x0378 SCI5_ERI5\r
(fp)INT_Excep_SCI5_ERI5,\r
//;0x037C SCI5_RXI5\r
***********************************************************************************************************************/\r
#ifdef __ICCRX__\r
#include <iorx113.h>\r
+ #include <stdint.h>\r
#endif\r
\r
#ifdef __GNUC__\r
+++ /dev/null
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.\r
-* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED\r
-* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY\r
-* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,\r
-* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR\r
-* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability \r
-* of this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer\r
-*\r
-* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-* File Name : r_cg_sbrk.c\r
-* Version : Code Generator for RX113 V1.02.01.02 [28 May 2015]\r
-* Device(s) : R5F51138AxFP\r
-* Tool-Chain : CCRX\r
-* Description : Program of sbrk.\r
-* Creation Date: 21/09/2015\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Pragma directive\r
-***********************************************************************************************************************/\r
-/* Start user code for pragma. Do not edit comment generated here */\r
-/* End user code. Do not edit comment generated here */\r
-\r
-/***********************************************************************************************************************\r
-Includes\r
-***********************************************************************************************************************/\r
-#include "r_cg_macrodriver.h"\r
-#include <stddef.h>\r
-#include <stdio.h>\r
-#include "r_cg_sbrk.h"\r
-#include "r_cg_userdefine.h"\r
-\r
-/***********************************************************************************************************************\r
-Global variables and functions\r
-***********************************************************************************************************************/\r
-\r
-int8_t *sbrk(size_t size);\r
-\r
-extern int8_t *_s1ptr;\r
-\r
-union HEAP_TYPE\r
-{\r
- int16_t dummy ; /* Dummy for 4-byte boundary */\r
- int8_t heap[HEAPSIZE]; /* Declaration of the area managed by sbrk */\r
-};\r
-\r
-static union HEAP_TYPE heap_area ;\r
-\r
-/* End address allocated by sbrk */\r
-static int8_t *brk = (int8_t *) &heap_area;\r
-\r
-/**************************************************************************/\r
-/* sbrk:Memory area allocation */\r
-/* Return value:Start address of allocated area (Pass) */\r
-/* -1 (Failure) */\r
-/**************************************************************************/\r
-int8_t *sbrk(size_t size) /* Assigned area size */\r
-{\r
- int8_t *p;\r
-\r
- if (brk+size > heap_area.heap + HEAPSIZE) /* Empty area size */\r
- {\r
- p = (int8_t *)-1;\r
- }\r
- else\r
- {\r
- p = brk; /* Area assignment */\r
- brk += size; /* End address update */\r
- }\r
-\r
- return p;\r
-}\r
-\r
-/* Start user code for adding. Do not edit comment generated here */\r
-/* End user code. Do not edit comment generated here */\r
+++ /dev/null
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.\r
-* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED\r
-* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY\r
-* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,\r
-* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR\r
-* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability \r
-* of this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer\r
-*\r
-* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-* File Name : r_cg_sbrk.h\r
-* Version : Code Generator for RX113 V1.02.01.02 [28 May 2015]\r
-* Device(s) : R5F51138AxFP\r
-* Tool-Chain : CCRX\r
-* Description : Header file of sbrk file.\r
-* Creation Date: 21/09/2015\r
-***********************************************************************************************************************/\r
-#ifndef _SBRK_H\r
-#define _SBRK_H\r
-\r
-/***********************************************************************************************************************\r
-Macro definitions (Register bit)\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Macro definitions\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Typedef definitions\r
-***********************************************************************************************************************/\r
-#define HEAPSIZE (0x400U) /* Size of area managed by sbrk */\r
-\r
-/***********************************************************************************************************************\r
-Global functions\r
-***********************************************************************************************************************/\r
-\r
-#endif
\ No newline at end of file
void R_SCI1_Stop(void);\r
MD_STATUS R_SCI1_Serial_Send(uint8_t * const tx_buf, uint16_t tx_num);\r
MD_STATUS R_SCI1_Serial_Receive(uint8_t * const rx_buf, uint16_t rx_num);\r
-static void r_sci1_callback_transmitend(void);\r
-static void r_sci1_callback_receiveend(void);\r
-static void r_sci1_callback_receiveerror(void);\r
+void r_sci1_callback_transmitend(void);\r
+void r_sci1_callback_receiveend(void);\r
+void r_sci1_callback_receiveerror(void);\r
\r
/* Start user code for function. Do not edit comment generated here */\r
\r
+++ /dev/null
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.\r
-* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED\r
-* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY\r
-* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,\r
-* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR\r
-* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability \r
-* of this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer\r
-*\r
-* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-* File Name : r_cg_sci_user.c\r
-* Version : Code Generator for RX113 V1.02.01.02 [28 May 2015]\r
-* Device(s) : R5F51138AxFP\r
-* Tool-Chain : CCRX\r
-* Description : This file implements device driver for SCI module.\r
-* Creation Date: 21/09/2015\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Pragma directive\r
-***********************************************************************************************************************/\r
-/* Start user code for pragma. Do not edit comment generated here */\r
-/* End user code. Do not edit comment generated here */\r
-\r
-/***********************************************************************************************************************\r
-Includes\r
-***********************************************************************************************************************/\r
-#include "r_cg_macrodriver.h"\r
-#include "r_cg_sci.h"\r
-/* Start user code for include. Do not edit comment generated here */\r
-#include "rskrx113def.h"\r
-//_RB_#include "r_cg_cmt.h"\r
-/* End user code. Do not edit comment generated here */\r
-#include "r_cg_userdefine.h"\r
-\r
-/***********************************************************************************************************************\r
-Global variables and functions\r
-***********************************************************************************************************************/\r
-extern uint8_t * gp_sci1_tx_address; /* SCI1 send buffer address */\r
-extern uint16_t g_sci1_tx_count; /* SCI1 send data number */\r
-extern uint8_t * gp_sci1_rx_address; /* SCI1 receive buffer address */\r
-extern uint16_t g_sci1_rx_count; /* SCI1 receive data number */\r
-extern uint16_t g_sci1_rx_length; /* SCI1 receive data length */\r
-/* Start user code for global. Do not edit comment generated here */\r
-\r
-/* Global used to receive a character from the PC terminal */\r
-uint8_t g_rx_char;\r
-\r
-/* Flag used to control transmission to PC terminal */\r
-volatile uint8_t g_tx_flag = FALSE;\r
-\r
-/* Flag used locally to detect transmission complete */\r
-static volatile uint8_t sci1_txdone;\r
-\r
-/* End user code. Do not edit comment generated here */\r
-\r
-/***********************************************************************************************************************\r
-* Function Name: r_sci1_transmit_interrupt\r
-* Description : None\r
-* Arguments : None\r
-* Return Value : None\r
-***********************************************************************************************************************/\r
-#if FAST_INTERRUPT_VECTOR == VECT_SCI1_TXI1\r
-#pragma interrupt r_sci1_transmit_interrupt(vect=VECT(SCI1,TXI1),fint)\r
-#else\r
-#pragma interrupt r_sci1_transmit_interrupt(vect=VECT(SCI1,TXI1))\r
-#endif\r
-static void r_sci1_transmit_interrupt(void)\r
-{\r
- if (g_sci1_tx_count > 0U)\r
- {\r
- SCI1.TDR = *gp_sci1_tx_address;\r
- gp_sci1_tx_address++;\r
- g_sci1_tx_count--;\r
- }\r
- else \r
- {\r
- SCI1.SCR.BIT.TIE = 0U;\r
- SCI1.SCR.BIT.TEIE = 1U;\r
- }\r
-}\r
-/***********************************************************************************************************************\r
-* Function Name: r_sci1_transmitend_interrupt\r
-* Description : None\r
-* Arguments : None\r
-* Return Value : None\r
-***********************************************************************************************************************/\r
-#if FAST_INTERRUPT_VECTOR == VECT_SCI1_TEI1\r
-#pragma interrupt r_sci1_transmitend_interrupt(vect=VECT(SCI1,TEI1),fint)\r
-#else\r
-#pragma interrupt r_sci1_transmitend_interrupt(vect=VECT(SCI1,TEI1))\r
-#endif\r
-static void r_sci1_transmitend_interrupt(void)\r
-{\r
- /* Set TXD1 pin */\r
- PORT1.PMR.BYTE &= 0xBFU;\r
- SCI1.SCR.BIT.TIE = 0U;\r
- SCI1.SCR.BIT.TE = 0U;\r
- SCI1.SCR.BIT.TEIE = 0U;\r
-\r
- r_sci1_callback_transmitend();\r
-}\r
-/***********************************************************************************************************************\r
-* Function Name: r_sci1_receive_interrupt\r
-* Description : None\r
-* Arguments : None\r
-* Return Value : None\r
-***********************************************************************************************************************/\r
-#if FAST_INTERRUPT_VECTOR == VECT_SCI1_RXI1\r
-#pragma interrupt r_sci1_receive_interrupt(vect=VECT(SCI1,RXI1),fint)\r
-#else\r
-#pragma interrupt r_sci1_receive_interrupt(vect=VECT(SCI1,RXI1))\r
-#endif\r
-static void r_sci1_receive_interrupt(void)\r
-{\r
- if (g_sci1_rx_length > g_sci1_rx_count)\r
- {\r
- *gp_sci1_rx_address = SCI1.RDR;\r
- gp_sci1_rx_address++;\r
- g_sci1_rx_count++;\r
-\r
- if (g_sci1_rx_length == g_sci1_rx_count)\r
- {\r
- r_sci1_callback_receiveend();\r
- }\r
- }\r
-}\r
-/***********************************************************************************************************************\r
-* Function Name: r_sci1_receiveerror_interrupt\r
-* Description : None\r
-* Arguments : None\r
-* Return Value : None\r
-***********************************************************************************************************************/\r
-#if FAST_INTERRUPT_VECTOR == VECT_SCI1_ERI1\r
-#pragma interrupt r_sci1_receiveerror_interrupt(vect=VECT(SCI1,ERI1),fint)\r
-#else\r
-#pragma interrupt r_sci1_receiveerror_interrupt(vect=VECT(SCI1,ERI1))\r
-#endif\r
-static void r_sci1_receiveerror_interrupt(void)\r
-{\r
- uint8_t err_type;\r
-\r
- r_sci1_callback_receiveerror();\r
-\r
- /* Clear overrun, framing and parity error flags */\r
- err_type = SCI1.SSR.BYTE;\r
- SCI1.SSR.BYTE = err_type & 0xC7U;\r
-}\r
-/***********************************************************************************************************************\r
-* Function Name: r_sci1_callback_transmitend\r
-* Description : This function is a callback function when SCI1 finishes transmission.\r
-* Arguments : None\r
-* Return Value : None\r
-***********************************************************************************************************************/\r
-static void r_sci1_callback_transmitend(void)\r
-{\r
- /* Start user code. Do not edit comment generated here */\r
- sci1_txdone = TRUE;\r
-\r
- /* End user code. Do not edit comment generated here */\r
-}\r
-/***********************************************************************************************************************\r
-* Function Name: r_sci1_callback_receiveend\r
-* Description : This function is a callback function when SCI1 finishes reception.\r
-* Arguments : None\r
-* Return Value : None\r
-***********************************************************************************************************************/\r
-static void r_sci1_callback_receiveend(void)\r
-{\r
- /* Start user code. Do not edit comment generated here */\r
- /* Check the contents of g_rx_char */\r
- if ('z' == g_rx_char)\r
- {\r
- /* Stop the timer used to control transmission to PC terminal*/\r
-//_RB_ R_CMT0_Stop();\r
-\r
- /* Turn off LED0 and turn on LED1 to indicate serial transmission\r
- inactive */\r
- LED0 = LED_OFF;\r
- LED1 = LED_ON;\r
- }\r
- else\r
- {\r
- /* Start the timer used to control transmission to PC terminal*/\r
-//_RB_ R_CMT0_Start();\r
-\r
- /* Turn on LED0 and turn off LED1 to indicate serial transmission\r
- active */\r
- LED0 = LED_ON;\r
- LED1 = LED_OFF;\r
- }\r
-\r
- /* Set up SCI1 receive buffer again */\r
- R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
-\r
- /* End user code. Do not edit comment generated here */\r
-}\r
-/***********************************************************************************************************************\r
-* Function Name: r_sci1_callback_receiveerror\r
-* Description : This function is a callback function when SCI1 reception encounters error.\r
-* Arguments : None\r
-* Return Value : None\r
-***********************************************************************************************************************/\r
-static void r_sci1_callback_receiveerror(void)\r
-{\r
- /* Start user code. Do not edit comment generated here */\r
- /* End user code. Do not edit comment generated here */\r
-}\r
-\r
-/* Start user code for adding. Do not edit comment generated here */\r
-/***********************************************************************************************************************\r
- * Function Name: R_SCI1_AsyncTransmit\r
- * Description : This function sends SCI1 data and waits for the transmit end flag.\r
- * Arguments : tx_buf -\r
- * transfer buffer pointer\r
- * tx_num -\r
- * buffer size\r
- * Return Value : status -\r
- * MD_OK or MD_ARGERROR\r
- ***********************************************************************************************************************/\r
-MD_STATUS R_SCI1_AsyncTransmit (uint8_t * const tx_buf, const uint16_t tx_num)\r
-{\r
- MD_STATUS status = MD_OK;\r
-\r
- /* clear the flag before initiating a new transmission */\r
- sci1_txdone = FALSE;\r
-\r
- /* Send the data using the API */\r
- status = R_SCI1_Serial_Send(tx_buf, tx_num);\r
-\r
- /* Wait for the transmit end flag */\r
- while (FALSE == sci1_txdone)\r
- {\r
- /* Wait */\r
- }\r
- return (status);\r
-}\r
-/***********************************************************************************************************************\r
- * End of function R_SCI1_AsyncTransmit\r
- ***********************************************************************************************************************/\r
-\r
-/* End user code. Do not edit comment generated here */\r
--- /dev/null
+/***********************************************************************************************************************\r
+* DISCLAIMER\r
+* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.\r
+* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
+* applicable laws, including copyright laws. \r
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED\r
+* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY\r
+* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,\r
+* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR\r
+* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
+* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability \r
+* of this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
+* following link:\r
+* http://www.renesas.com/disclaimer\r
+*\r
+* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.\r
+***********************************************************************************************************************/\r
+\r
+/***********************************************************************************************************************\r
+* File Name : r_cg_sci_user.c\r
+* Version : Code Generator for RX113 V1.02.01.02 [28 May 2015]\r
+* Device(s) : R5F51138AxFP\r
+* Tool-Chain : CCRX\r
+* Description : This file implements device driver for SCI module.\r
+* Creation Date: 21/09/2015\r
+***********************************************************************************************************************/\r
+\r
+/***********************************************************************************************************************\r
+Pragma directive\r
+***********************************************************************************************************************/\r
+/* Start user code for pragma. Do not edit comment generated here */\r
+\r
+\r
+/*\r
+ * This file originated from an example project for the RSK - it has been\r
+ * adapted to allow it to be used in the FreeRTOS demo. Functions required by\r
+ * UARTCommandConsole.c have been added.\r
+ *\r
+ * ***NOTE***: Transmitting generates an interrupt for each character, which\r
+ * consumes CPU time, and can cause standard demo RTOS tasks that monitor their\r
+ * own performance to fail asserts - therefore when using GCC it is best to\r
+ * compile this file with maximum speed optimisation.\r
+ */\r
+\r
+\r
+\r
+/* End user code. Do not edit comment generated here */\r
+\r
+/***********************************************************************************************************************\r
+Includes\r
+***********************************************************************************************************************/\r
+#include "r_cg_macrodriver.h"\r
+#include "r_cg_sci.h"\r
+/* Start user code for include. Do not edit comment generated here */\r
+#include "rskrx113def.h"\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "queue.h"\r
+#include "serial.h"\r
+/* End user code. Do not edit comment generated here */\r
+#include "r_cg_userdefine.h"\r
+\r
+/***********************************************************************************************************************\r
+Global variables and functions\r
+***********************************************************************************************************************/\r
+extern uint8_t * gp_sci1_tx_address; /* SCI1 send buffer address */\r
+extern uint16_t g_sci1_tx_count; /* SCI1 send data number */\r
+extern uint8_t * gp_sci1_rx_address; /* SCI1 receive buffer address */\r
+extern uint16_t g_sci1_rx_count; /* SCI1 receive data number */\r
+extern uint16_t g_sci1_rx_length; /* SCI1 receive data length */\r
+/* Start user code for global. Do not edit comment generated here */\r
+\r
+/* Global used to receive a character from the PC terminal */\r
+uint8_t g_rx_char;\r
+\r
+/* Flag used to control transmission to PC terminal */\r
+volatile uint8_t g_tx_flag = FALSE;\r
+\r
+/* Characters received from the UART are stored in this queue, ready to be\r
+received by the application. ***NOTE*** Using a queue in this way is very\r
+convenient, but also very inefficient. It can be used here because characters\r
+will only arrive slowly. In a higher bandwidth system a circular RAM buffer or\r
+DMA should be used in place of this queue. */\r
+static QueueHandle_t xRxQueue = NULL;\r
+\r
+/* When a task calls vSerialPutString() its handle is stored in xSendingTask,\r
+before being placed into the Blocked state (so does not use any CPU time) to\r
+wait for the transmission to end. The task handle is then used from the UART\r
+transmit end interrupt to remove the task from the Blocked state. */\r
+static TaskHandle_t xSendingTask = NULL;\r
+\r
+/* Flag used locally to detect transmission complete. This is used by the\r
+auto generated API only. */\r
+static volatile uint8_t sci1_txdone;\r
+\r
+/* End user code. Do not edit comment generated here */\r
+\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_transmit_interrupt\r
+* Description : None\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_transmit_interrupt(void) __attribute__((interrupt));\r
+void r_sci1_transmit_interrupt(void)\r
+{\r
+ if (g_sci1_tx_count > 0U)\r
+ {\r
+ SCI1.TDR = *gp_sci1_tx_address;\r
+ gp_sci1_tx_address++;\r
+ g_sci1_tx_count--;\r
+ }\r
+ else \r
+ {\r
+ SCI1.SCR.BIT.TIE = 0U;\r
+ SCI1.SCR.BIT.TEIE = 1U;\r
+ }\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_transmitend_interrupt\r
+* Description : None\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_transmitend_interrupt(void) __attribute__((interrupt));\r
+void r_sci1_transmitend_interrupt(void)\r
+{\r
+ /* Set TXD1 pin */\r
+ PORT1.PMR.BYTE &= 0xBFU;\r
+ SCI1.SCR.BIT.TIE = 0U;\r
+ SCI1.SCR.BIT.TE = 0U;\r
+ SCI1.SCR.BIT.TEIE = 0U;\r
+\r
+ r_sci1_callback_transmitend();\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_receive_interrupt\r
+* Description : None\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_receive_interrupt(void) __attribute__((interrupt));\r
+void r_sci1_receive_interrupt(void)\r
+{\r
+ if (g_sci1_rx_length > g_sci1_rx_count)\r
+ {\r
+ *gp_sci1_rx_address = SCI1.RDR;\r
+ gp_sci1_rx_address++;\r
+ g_sci1_rx_count++;\r
+\r
+ if (g_sci1_rx_length == g_sci1_rx_count)\r
+ {\r
+ r_sci1_callback_receiveend();\r
+ }\r
+ }\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_receiveerror_interrupt\r
+* Description : None\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_receiveerror_interrupt(void) __attribute__((interrupt));\r
+void r_sci1_receiveerror_interrupt(void)\r
+{\r
+ uint8_t err_type;\r
+\r
+ r_sci1_callback_receiveerror();\r
+\r
+ /* Clear overrun, framing and parity error flags */\r
+ err_type = SCI1.SSR.BYTE;\r
+ SCI1.SSR.BYTE = err_type & ( uint8_t ) 0xC7;\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_callback_transmitend\r
+* Description : This function is a callback function when SCI1 finishes transmission.\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_callback_transmitend(void)\r
+{\r
+ /* Start user code. Do not edit comment generated here */\r
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
+\r
+ /* The sci1_txdone flag is used by the auto generated API only. */\r
+ sci1_txdone = TRUE;\r
+\r
+ if( xSendingTask != NULL )\r
+ {\r
+ /* A task is waiting for the end of the Tx, unblock it now.\r
+ http://www.freertos.org/vTaskNotifyGiveFromISR.html */\r
+ vTaskNotifyGiveFromISR( xSendingTask, &xHigherPriorityTaskWoken );\r
+ xSendingTask = NULL;\r
+\r
+ portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
+ }\r
+ /* End user code. Do not edit comment generated here */\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_callback_receiveend\r
+* Description : This function is a callback function when SCI1 finishes reception.\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_callback_receiveend(void)\r
+{\r
+ /* Start user code. Do not edit comment generated here */\r
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
+\r
+ configASSERT( xRxQueue );\r
+\r
+ /* Transmitting generates an interrupt for each character, which consumes\r
+ CPU time, and can cause standard demo RTOS tasks that monitor their own\r
+ performance to fail asserts - so don't receive new CLI commands if a\r
+ transmit is not already in progress. */\r
+ if( sci1_txdone == TRUE )\r
+ {\r
+ /* Characters received from the UART are stored in this queue, ready to be\r
+ received by the application. ***NOTE*** Using a queue in this way is very\r
+ convenient, but also very inefficient. It can be used here because\r
+ characters will only arrive slowly. In a higher bandwidth system a circular\r
+ RAM buffer or DMA should be used in place of this queue. */\r
+ xQueueSendFromISR( xRxQueue, &g_rx_char, &xHigherPriorityTaskWoken );\r
+ }\r
+\r
+ /* Set up SCI1 receive buffer again */\r
+ R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
+\r
+ /* See http://www.freertos.org/xQueueOverwriteFromISR.html for information\r
+ on the semantics of this ISR. */\r
+ portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
+ /* End user code. Do not edit comment generated here */\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_callback_receiveerror\r
+* Description : This function is a callback function when SCI1 reception encounters error.\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_callback_receiveerror(void)\r
+{\r
+ /* Start user code. Do not edit comment generated here */\r
+ /* End user code. Do not edit comment generated here */\r
+}\r
+\r
+/* Start user code for adding. Do not edit comment generated here */\r
+/***********************************************************************************************************************\r
+ * Function Name: R_SCI1_AsyncTransmit\r
+ * Description : This function sends SCI1 data and waits for the transmit end flag.\r
+ * Arguments : tx_buf -\r
+ * transfer buffer pointer\r
+ * tx_num -\r
+ * buffer size\r
+ * Return Value : status -\r
+ * MD_OK or MD_ARGERROR\r
+ ***********************************************************************************************************************/\r
+MD_STATUS R_SCI1_AsyncTransmit (uint8_t * const tx_buf, const uint16_t tx_num)\r
+{\r
+ MD_STATUS status = MD_OK;\r
+\r
+ /* clear the flag before initiating a new transmission */\r
+ sci1_txdone = FALSE;\r
+\r
+ /* Send the data using the API */\r
+ status = R_SCI1_Serial_Send(tx_buf, tx_num);\r
+\r
+ /* Wait for the transmit end flag */\r
+ while (FALSE == sci1_txdone)\r
+ {\r
+ /* Wait */\r
+ }\r
+ return (status);\r
+}\r
+/***********************************************************************************************************************\r
+ * End of function R_SCI1_AsyncTransmit\r
+ ***********************************************************************************************************************/\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )\r
+{\r
+ ( void ) ulWantedBaud;\r
+ ( void ) uxQueueLength;\r
+\r
+ /* Characters received from the UART are stored in this queue, ready to be\r
+ received by the application. ***NOTE*** Using a queue in this way is very\r
+ convenient, but also very inefficient. It can be used here because\r
+ characters will only arrive slowly. In a higher bandwidth system a circular\r
+ RAM buffer or DMA should be used in place of this queue. */\r
+ xRxQueue = xQueueCreate( uxQueueLength, sizeof( char ) );\r
+ configASSERT( xRxQueue );\r
+\r
+ /* Set up SCI1 receive buffer */\r
+ R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
+\r
+ /* Ensure the interrupt priority is at or below\r
+ configMAX_SYSCALL_INTERRUPT_PRIORITY. */\r
+ IPR( SCI1, ERI1 ) = configKERNEL_INTERRUPT_PRIORITY + 1;\r
+\r
+ /* Enable SCI1 operations */\r
+ R_SCI1_Start();\r
+\r
+ /* Only one UART is supported, so it doesn't matter what is returned\r
+ here. */\r
+ return 0;\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )\r
+{\r
+const TickType_t xMaxBlockTime = pdMS_TO_TICKS( 5000 );\r
+\r
+ /* Only one port is supported. */\r
+ ( void ) pxPort;\r
+\r
+ /* Clear the flag before initiating a new transmission */\r
+ sci1_txdone = FALSE;\r
+\r
+ /* Don't send the string unless the previous string has been sent. */\r
+ if( xSendingTask == NULL )\r
+ {\r
+ /* Ensure the calling task's notification state is not already\r
+ pending. */\r
+ vTaskNotifyClear( NULL );\r
+\r
+ /* Store the handle of the transmitting task. This is used to unblock\r
+ the task when the transmission has completed. */\r
+ xSendingTask = xTaskGetCurrentTaskHandle();\r
+\r
+ /* Send the string using the auto-generated API. */\r
+ R_SCI1_Serial_Send( ( uint8_t * ) pcString, usStringLength );\r
+\r
+ /* Wait in the Blocked state (so not using any CPU time) until the\r
+ transmission has completed. */\r
+ ulTaskNotifyTake( pdTRUE, xMaxBlockTime );\r
+ }\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, TickType_t xBlockTime )\r
+{\r
+ /* Only one UART is supported. */\r
+ ( void ) pxPort;\r
+\r
+ /* Return a received character, if any are available. Otherwise block to\r
+ wait for a character. */\r
+ return xQueueReceive( xRxQueue, pcRxedChar, xBlockTime );\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, TickType_t xBlockTime )\r
+{\r
+ /* Just mapped to vSerialPutString() so the block time is not used. */\r
+ ( void ) xBlockTime;\r
+\r
+ vSerialPutString( pxPort, &cOutChar, sizeof( cOutChar ) );\r
+ return pdPASS;\r
+}\r
+\r
+/* End user code. Do not edit comment generated here */\r
--- /dev/null
+/***********************************************************************************************************************\r
+* DISCLAIMER\r
+* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.\r
+* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
+* applicable laws, including copyright laws. \r
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED\r
+* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY\r
+* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,\r
+* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR\r
+* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
+* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability \r
+* of this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
+* following link:\r
+* http://www.renesas.com/disclaimer\r
+*\r
+* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.\r
+***********************************************************************************************************************/\r
+\r
+/***********************************************************************************************************************\r
+* File Name : r_cg_sci_user.c\r
+* Version : Code Generator for RX113 V1.02.01.02 [28 May 2015]\r
+* Device(s) : R5F51138AxFP\r
+* Tool-Chain : CCRX\r
+* Description : This file implements device driver for SCI module.\r
+* Creation Date: 21/09/2015\r
+***********************************************************************************************************************/\r
+\r
+/***********************************************************************************************************************\r
+Pragma directive\r
+***********************************************************************************************************************/\r
+/* Start user code for pragma. Do not edit comment generated here */\r
+\r
+\r
+/*\r
+ * This file originated from an example project for the RSK - it has been\r
+ * adapted to allow it to be used in the FreeRTOS demo. Functions required by\r
+ * UARTCommandConsole.c have been added.\r
+ */\r
+\r
+\r
+\r
+/* End user code. Do not edit comment generated here */\r
+\r
+/***********************************************************************************************************************\r
+Includes\r
+***********************************************************************************************************************/\r
+#include "r_cg_macrodriver.h"\r
+#include "r_cg_sci.h"\r
+/* Start user code for include. Do not edit comment generated here */\r
+#include "rskrx113def.h"\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "queue.h"\r
+#include "serial.h"\r
+/* End user code. Do not edit comment generated here */\r
+#include "r_cg_userdefine.h"\r
+\r
+/***********************************************************************************************************************\r
+Global variables and functions\r
+***********************************************************************************************************************/\r
+extern uint8_t * gp_sci1_tx_address; /* SCI1 send buffer address */\r
+extern uint16_t g_sci1_tx_count; /* SCI1 send data number */\r
+extern uint8_t * gp_sci1_rx_address; /* SCI1 receive buffer address */\r
+extern uint16_t g_sci1_rx_count; /* SCI1 receive data number */\r
+extern uint16_t g_sci1_rx_length; /* SCI1 receive data length */\r
+/* Start user code for global. Do not edit comment generated here */\r
+\r
+/* Global used to receive a character from the PC terminal */\r
+uint8_t g_rx_char;\r
+\r
+/* Flag used to control transmission to PC terminal */\r
+volatile uint8_t g_tx_flag = FALSE;\r
+\r
+/* Characters received from the UART are stored in this queue, ready to be\r
+received by the application. ***NOTE*** Using a queue in this way is very\r
+convenient, but also very inefficient. It can be used here because characters\r
+will only arrive slowly. In a higher bandwidth system a circular RAM buffer or\r
+DMA should be used in place of this queue. */\r
+static QueueHandle_t xRxQueue = NULL;\r
+\r
+/* When a task calls vSerialPutString() its handle is stored in xSendingTask,\r
+before being placed into the Blocked state (so does not use any CPU time) to\r
+wait for the transmission to end. The task handle is then used from the UART\r
+transmit end interrupt to remove the task from the Blocked state. */\r
+static TaskHandle_t xSendingTask = NULL;\r
+\r
+/* Flag used locally to detect transmission complete. This is used by the\r
+auto generated API only. */\r
+static volatile uint8_t sci1_txdone;\r
+\r
+/* End user code. Do not edit comment generated here */\r
+\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_transmit_interrupt\r
+* Description : None\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+#pragma vector = VECT_SCI1_TXI1\r
+#if FAST_INTERRUPT_VECTOR == VECT_SCI1_TXI1\r
+__fast_interrupt static void r_sci1_transmit_interrupt(void)\r
+#else\r
+__interrupt static void r_sci1_transmit_interrupt(void)\r
+#endif\r
+{\r
+ if (g_sci1_tx_count > 0U)\r
+ {\r
+ SCI1.TDR = *gp_sci1_tx_address;\r
+ gp_sci1_tx_address++;\r
+ g_sci1_tx_count--;\r
+ }\r
+ else \r
+ {\r
+ SCI1.SCR.BIT.TIE = 0U;\r
+ SCI1.SCR.BIT.TEIE = 1U;\r
+ }\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_transmitend_interrupt\r
+* Description : None\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+#pragma vector = VECT_SCI1_TEI1\r
+#if FAST_INTERRUPT_VECTOR == VECT_SCI1_TEI1\r
+__fast_interrupt static void r_sci1_transmitend_interrupt(void)\r
+#else\r
+__interrupt static void r_sci1_transmitend_interrupt(void)\r
+#endif\r
+{\r
+ /* Set TXD1 pin */\r
+ PORT1.PMR.BYTE &= 0xBFU;\r
+ SCI1.SCR.BIT.TIE = 0U;\r
+ SCI1.SCR.BIT.TE = 0U;\r
+ SCI1.SCR.BIT.TEIE = 0U;\r
+\r
+ r_sci1_callback_transmitend();\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_receive_interrupt\r
+* Description : None\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+#pragma vector = VECT_SCI1_RXI1\r
+#if FAST_INTERRUPT_VECTOR == VECT_SCI1_RXI1\r
+__fast_interrupt static void r_sci1_receive_interrupt(void)\r
+#else\r
+__interrupt static void r_sci1_receive_interrupt(void)\r
+#endif\r
+{\r
+ if (g_sci1_rx_length > g_sci1_rx_count)\r
+ {\r
+ *gp_sci1_rx_address = SCI1.RDR;\r
+ gp_sci1_rx_address++;\r
+ g_sci1_rx_count++;\r
+\r
+ if (g_sci1_rx_length == g_sci1_rx_count)\r
+ {\r
+ r_sci1_callback_receiveend();\r
+ }\r
+ }\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_receiveerror_interrupt\r
+* Description : None\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+#pragma vector = VECT_SCI1_ERI1\r
+#if FAST_INTERRUPT_VECTOR == VECT_SCI1_ERI1\r
+__fast_interrupt static void r_sci1_receiveerror_interrupt(void)\r
+#else\r
+__interrupt static void r_sci1_receiveerror_interrupt(void)\r
+#endif\r
+{\r
+ uint8_t err_type;\r
+\r
+ r_sci1_callback_receiveerror();\r
+\r
+ /* Clear overrun, framing and parity error flags */\r
+ err_type = SCI1.SSR.BYTE;\r
+ SCI1.SSR.BYTE = err_type & ( uint8_t ) 0xC7;\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_callback_transmitend\r
+* Description : This function is a callback function when SCI1 finishes transmission.\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_callback_transmitend(void)\r
+{\r
+ /* Start user code. Do not edit comment generated here */\r
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
+\r
+ /* The sci1_txdone flag is used by the auto generated API only. */\r
+ sci1_txdone = TRUE;\r
+\r
+ if( xSendingTask != NULL )\r
+ {\r
+ /* A task is waiting for the end of the Tx, unblock it now.\r
+ http://www.freertos.org/vTaskNotifyGiveFromISR.html */\r
+ vTaskNotifyGiveFromISR( xSendingTask, &xHigherPriorityTaskWoken );\r
+ xSendingTask = NULL;\r
+\r
+ portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
+ }\r
+ /* End user code. Do not edit comment generated here */\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_callback_receiveend\r
+* Description : This function is a callback function when SCI1 finishes reception.\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_callback_receiveend(void)\r
+{\r
+ /* Start user code. Do not edit comment generated here */\r
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
+\r
+ configASSERT( xRxQueue );\r
+\r
+ /* Transmitting generates an interrupt for each character, which consumes\r
+ CPU time, and can cause standard demo RTOS tasks that monitor their own\r
+ performance to fail asserts - so don't receive new CLI commands if a\r
+ transmit is not already in progress. */\r
+ if( sci1_txdone == TRUE )\r
+ {\r
+ /* Characters received from the UART are stored in this queue, ready to be\r
+ received by the application. ***NOTE*** Using a queue in this way is very\r
+ convenient, but also very inefficient. It can be used here because\r
+ characters will only arrive slowly. In a higher bandwidth system a circular\r
+ RAM buffer or DMA should be used in place of this queue. */\r
+ xQueueSendFromISR( xRxQueue, &g_rx_char, &xHigherPriorityTaskWoken );\r
+ }\r
+\r
+ /* Set up SCI1 receive buffer again */\r
+ R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
+\r
+ /* See http://www.freertos.org/xQueueOverwriteFromISR.html for information\r
+ on the semantics of this ISR. */\r
+ portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
+ /* End user code. Do not edit comment generated here */\r
+}\r
+/***********************************************************************************************************************\r
+* Function Name: r_sci1_callback_receiveerror\r
+* Description : This function is a callback function when SCI1 reception encounters error.\r
+* Arguments : None\r
+* Return Value : None\r
+***********************************************************************************************************************/\r
+void r_sci1_callback_receiveerror(void)\r
+{\r
+ /* Start user code. Do not edit comment generated here */\r
+ /* End user code. Do not edit comment generated here */\r
+}\r
+\r
+/* Start user code for adding. Do not edit comment generated here */\r
+/***********************************************************************************************************************\r
+ * Function Name: R_SCI1_AsyncTransmit\r
+ * Description : This function sends SCI1 data and waits for the transmit end flag.\r
+ * Arguments : tx_buf -\r
+ * transfer buffer pointer\r
+ * tx_num -\r
+ * buffer size\r
+ * Return Value : status -\r
+ * MD_OK or MD_ARGERROR\r
+ ***********************************************************************************************************************/\r
+MD_STATUS R_SCI1_AsyncTransmit (uint8_t * const tx_buf, const uint16_t tx_num)\r
+{\r
+ MD_STATUS status = MD_OK;\r
+\r
+ /* clear the flag before initiating a new transmission */\r
+ sci1_txdone = FALSE;\r
+\r
+ /* Send the data using the API */\r
+ status = R_SCI1_Serial_Send(tx_buf, tx_num);\r
+\r
+ /* Wait for the transmit end flag */\r
+ while (FALSE == sci1_txdone)\r
+ {\r
+ /* Wait */\r
+ }\r
+ return (status);\r
+}\r
+/***********************************************************************************************************************\r
+ * End of function R_SCI1_AsyncTransmit\r
+ ***********************************************************************************************************************/\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )\r
+{\r
+ ( void ) ulWantedBaud;\r
+ ( void ) uxQueueLength;\r
+\r
+ /* Characters received from the UART are stored in this queue, ready to be\r
+ received by the application. ***NOTE*** Using a queue in this way is very\r
+ convenient, but also very inefficient. It can be used here because\r
+ characters will only arrive slowly. In a higher bandwidth system a circular\r
+ RAM buffer or DMA should be used in place of this queue. */\r
+ xRxQueue = xQueueCreate( uxQueueLength, sizeof( char ) );\r
+ configASSERT( xRxQueue );\r
+\r
+ /* Set up SCI1 receive buffer */\r
+ R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
+\r
+ /* Ensure the interrupt priority is at or below\r
+ configMAX_SYSCALL_INTERRUPT_PRIORITY. */\r
+ IPR( SCI1, ERI1 ) = configMAX_SYSCALL_INTERRUPT_PRIORITY - 1;\r
+\r
+ /* Enable SCI1 operations */\r
+ R_SCI1_Start();\r
+\r
+ /* Only one UART is supported, so it doesn't matter what is returned\r
+ here. */\r
+ return 0;\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )\r
+{\r
+const TickType_t xMaxBlockTime = pdMS_TO_TICKS( 5000 );\r
+\r
+ /* Only one port is supported. */\r
+ ( void ) pxPort;\r
+\r
+ /* Clear the flag before initiating a new transmission */\r
+ sci1_txdone = FALSE;\r
+\r
+ /* Don't send the string unless the previous string has been sent. */\r
+ if( xSendingTask == NULL )\r
+ {\r
+ /* Ensure the calling task's notification state is not already\r
+ pending. */\r
+ vTaskNotifyClear( NULL );\r
+\r
+ /* Store the handle of the transmitting task. This is used to unblock\r
+ the task when the transmission has completed. */\r
+ xSendingTask = xTaskGetCurrentTaskHandle();\r
+\r
+ /* Send the string using the auto-generated API. */\r
+ R_SCI1_Serial_Send( ( uint8_t * ) pcString, usStringLength );\r
+\r
+ /* Wait in the Blocked state (so not using any CPU time) until the\r
+ transmission has completed. */\r
+ ulTaskNotifyTake( pdTRUE, xMaxBlockTime );\r
+ }\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, TickType_t xBlockTime )\r
+{\r
+ /* Only one UART is supported. */\r
+ ( void ) pxPort;\r
+\r
+ /* Return a received character, if any are available. Otherwise block to\r
+ wait for a character. */\r
+ return xQueueReceive( xRxQueue, pcRxedChar, xBlockTime );\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, TickType_t xBlockTime )\r
+{\r
+ /* Just mapped to vSerialPutString() so the block time is not used. */\r
+ ( void ) xBlockTime;\r
+\r
+ vSerialPutString( pxPort, &cOutChar, sizeof( cOutChar ) );\r
+ return pdPASS;\r
+}\r
+\r
+/* End user code. Do not edit comment generated here */\r
#include "task.h"\r
#include "semphr.h"\r
\r
-/* Renesas includes. */\r
/* Renesas includes. */\r
#include <rskrx113def.h>\r
#include "r_cg_macrodriver.h"\r
}\r
#endif\r
\r
+ /* Should never get reached. */\r
return 0;\r
}\r
/*-----------------------------------------------------------*/\r
\r
static void prvSetupHardware( void )\r
{\r
+ /* Some hardware setup is performed before main() is called. This routine\r
+ just ensures the LEDs start off. */\r
LED0 = LED_OFF;\r
LED1 = LED_OFF;\r
LED2 = LED_OFF;\r
\r
void vApplicationTickHook( void )\r
{\r
+ /* The tick hook is not used by the blinky demo, but is by the full demo. */\r
#if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0\r
{\r
extern void vFullDemoTickHook( void );\r
/*-----------------------------------------------------------*/\r
\r
/* The RX port uses this callback function to configure its tick interrupt.\r
-This allows the application to choose the tick interrupt source. */\r
+This allows the application to choose the tick interrupt source.\r
+***NOTE***: configTICK_VECTOR must be set in FreeRTOSConfig.h to be correct for\r
+whichever vector is used. */\r
void vApplicationSetupTimerInterrupt( void )\r
{\r
const uint32_t ulEnableRegisterWrite = 0xA50BUL, ulDisableRegisterWrite = 0xA500UL;\r
<option id="com.renesas.cdt.renesas.Compiler.option.deviceShortName.491615829" name="DeviceShortName" superClass="com.renesas.cdt.renesas.Compiler.option.deviceShortName" value="R5F51138AxFP" valueType="string"/>\r
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.renesas.Compiler.option.incFileDirectories.1906083430" name="Include file directories" superClass="com.renesas.cdt.renesas.Compiler.option.incFileDirectories" valueType="includePath">\r
<listOptionValue builtIn="false" value=""${TCINSTALL}/include""/>\r
+ <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Full_Demo/FreeRTOS-Plus-CLI}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Full_Demo/Standard_Demo_Tasks/include}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Full_Demo}""/>\r
- <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Renesas_Code}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/Renesas/RX100}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}}""/>\r
</fileInfo>\r
<folderInfo id="com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.941970450.497502634" name="/" resourcePath="src/FreeRTOS_Source">\r
<toolChain id="com.renesas.cdt.rxc.hardwaredebug.win32.toolChain.Id.45016972" name="Renesas RXC Toolchain" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.toolChain.Id" unusedChildren="">\r
- <tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.compiler.Id.1830726910" name="Compiler" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.compiler.Id.741766106"/>\r
- <tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.assembler.Id.252059482" name="Assembler" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.assembler.Id.1503720976"/>\r
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rxc.hardwaredebug.win32.targetPlatform.Id" isAbstract="false" osList="win32" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.targetPlatform.Id"/>\r
+ <tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.compiler.Id.1830726910" name="Compiler" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.compiler.Id.741766106">\r
+ <inputType id="%Base.Compiler.Shc.C.Input.Id.1332314765" name="C Input" superClass="%Base.Compiler.Shc.C.Input.Id"/>\r
+ <inputType id="%Base.Compiler.Shc.C.Input1.Id.1495032261" name="C++ Input" superClass="%Base.Compiler.Shc.C.Input1.Id"/>\r
+ </tool>\r
+ <tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.assembler.Id.252059482" name="Assembler" outputFlag="" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.assembler.Id.1503720976">\r
+ <inputType id="%Base.Assembler.shcInputType.Id.1764572327" name="Assembler InputType" superClass="%Base.Assembler.shcInputType.Id"/>\r
+ </tool>\r
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.linker.Id.270734961" name="Linker" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.linker.Id.1635879936"/>\r
<tool id="%com.renesas.cdt.rxc.hardwaredebug.win32.tool.libgen.Id.345810510" name="Standard Library" superClass="%com.renesas.cdt.rxc.hardwaredebug.win32.tool.libgen.Id.763608360"/>\r
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.convertor.Id.2001992067" name="Converter" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.convertor.Id.345873254"/>\r
</toolChain>\r
</folderInfo>\r
<sourceEntries>\r
- <entry excluding="cg_src/r_cg_sbrk.h|cg_src/r_cg_sbrk.c|cg_src/r_cg_main.c|cg_src/r_cg_cmt_user.c|cg_src/r_cg_cmt.h|cg_src/r_cg_cmt.c|cg_src - Copy|r_okaya_lcd.c|cg_src_OLD|r_cg_vecttbl.c|r_cg_vect.h|r_cg_userdefine.h|r_cg_stacksct.h|r_cg_sci.h|r_cg_sci.c|r_cg_sci_user.c|r_cg_sbrk.h|r_cg_sbrk.c|r_cg_resetprg.c|r_cg_port.h|r_cg_port.c|r_cg_port_user.c|r_cg_main.c|r_cg_macrodriver.h|r_cg_lpc.h|r_cg_lpc.c|r_cg_lpc_user.c|r_cg_intprg.c|r_cg_icu.h|r_cg_icu.c|r_cg_icu_user.c|r_cg_hardware_setup.c|r_cg_dbsct.c|r_cg_cmt.h|r_cg_cmt.c|r_cg_cmt_user.c|r_cg_cgc.h|r_cg_cgc.c|r_cg_cgc_user.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>\r
+ <entry excluding="cg_src/r_cg_main.c|cg_src/r_cg_cmt_user.c|cg_src/r_cg_cmt.h|cg_src/r_cg_cmt.c|cg_src - Copy|r_okaya_lcd.c|cg_src_OLD|r_cg_vecttbl.c|r_cg_vect.h|r_cg_userdefine.h|r_cg_stacksct.h|r_cg_sci.h|r_cg_sci.c|r_cg_sci_user.c|r_cg_sbrk.h|r_cg_sbrk.c|r_cg_resetprg.c|r_cg_port.h|r_cg_port.c|r_cg_port_user.c|r_cg_main.c|r_cg_macrodriver.h|r_cg_lpc.h|r_cg_lpc.c|r_cg_lpc_user.c|r_cg_intprg.c|r_cg_icu.h|r_cg_icu.c|r_cg_icu_user.c|r_cg_hardware_setup.c|r_cg_dbsct.c|r_cg_cmt.h|r_cg_cmt.c|r_cg_cmt_user.c|r_cg_cgc.h|r_cg_cgc.c|r_cg_cgc_user.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>\r
</sourceEntries>\r
</configuration>\r
</storageModule>\r
<type>2</type>\r
<locationURI>FREERTOS_ROOT/FreeRTOS/Source</locationURI>\r
</link>\r
+ <link>\r
+ <name>src/Full_Demo/FreeRTOS-Plus-CLI</name>\r
+ <type>2</type>\r
+ <locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Source/FreeRTOS-Plus-CLI</locationURI>\r
+ </link>\r
+ <link>\r
+ <name>src/Full_Demo/Sample-CLI-commands.c</name>\r
+ <type>1</type>\r
+ <locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/Sample-CLI-commands.c</locationURI>\r
+ </link>\r
<link>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>2</type>\r
<locationURI>FREERTOS_ROOT/FreeRTOS/Demo/Common/Minimal</locationURI>\r
</link>\r
+ <link>\r
+ <name>src/Full_Demo/UARTCommandConsole.c</name>\r
+ <type>1</type>\r
+ <locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/UARTCommandConsole.c</locationURI>\r
+ </link>\r
<link>\r
<name>src/Full_Demo/Standard_Demo_Tasks/include</name>\r
<type>2</type>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201321</id>\r
+ <id>1443945160058</id>\r
+ <name>src/Full_Demo/FreeRTOS-Plus-CLI</name>\r
+ <type>5</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-*.c</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443945160058</id>\r
+ <name>src/Full_Demo/FreeRTOS-Plus-CLI</name>\r
+ <type>5</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-*.h</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443945160068</id>\r
+ <name>src/Full_Demo/FreeRTOS-Plus-CLI</name>\r
+ <type>5</type>\r
+ <matcher>\r
+ <id>org.eclipse.ui.ide.multiFilter</id>\r
+ <arguments>1.0-name-matches-false-false-*.url</arguments>\r
+ </matcher>\r
+ </filter>\r
+ <filter>\r
+ <id>1443988432315</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201326</id>\r
+ <id>1443988432325</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201332</id>\r
+ <id>1443988432325</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201337</id>\r
+ <id>1443988432335</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201342</id>\r
+ <id>1443988432345</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201347</id>\r
+ <id>1443988432345</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201353</id>\r
+ <id>1443988432355</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201358</id>\r
+ <id>1443988432365</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201363</id>\r
+ <id>1443988432365</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201367</id>\r
+ <id>1443988432375</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201373</id>\r
+ <id>1443988432385</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201377</id>\r
+ <id>1443988432395</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201382</id>\r
+ <id>1443988432405</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
</matcher>\r
</filter>\r
<filter>\r
- <id>1442838201387</id>\r
+ <id>1443988432415</id>\r
<name>src/Full_Demo/Standard_Demo_Tasks</name>\r
<type>5</type>\r
<matcher>\r
<arguments>1.0-name-matches-false-false-TaskNotify.c</arguments>\r
</matcher>\r
</filter>\r
- <filter>\r
- <id>1442838201391</id>\r
- <name>src/Full_Demo/Standard_Demo_Tasks</name>\r
- <type>5</type>\r
- <matcher>\r
- <id>org.eclipse.ui.ide.multiFilter</id>\r
- <arguments>1.0-name-matches-false-false-TimerDemo.c</arguments>\r
- </matcher>\r
- </filter>\r
<filter>\r
<id>1442832632368</id>\r
<name>src/FreeRTOS_Source/portable/MemMang</name>\r
*\r
* The Queue Send Task:\r
* The queue send task is implemented by the prvQueueSendTask() function in\r
- * this file. prvQueueSendTask() sits in a loop that causes it to repeatedly\r
- * block for 200 milliseconds, before sending the value 100 to the queue that\r
- * was created within main_blinky(). Once the value is sent, the task loops\r
- * back around to block for another 200 milliseconds...and so on.\r
+ * this file. It sends the value 100 to the queue every 200 milliseconds.\r
*\r
* The Queue Receive Task:\r
* The queue receive task is implemented by the prvQueueReceiveTask() function\r
- * in this file. prvQueueReceiveTask() sits in a loop where it repeatedly\r
- * blocks on attempts to read data from the queue that was created within\r
- * main_blinky(). When data is received, the task checks the value of the\r
- * data, and if the value equals the expected 100, toggles an LED. The 'block\r
- * time' parameter passed to the queue receive function specifies that the\r
- * task should be held in the Blocked state indefinitely to wait for data to\r
- * be available on the queue. The queue receive task will only leave the\r
- * Blocked state when the queue send task writes to the queue. As the queue\r
- * send task writes to the queue every 200 milliseconds, the queue receive\r
- * task leaves the Blocked state every 200 milliseconds, and therefore toggles\r
- * the LED every 200 milliseconds.\r
+ * in this file. It blocks on the queue to wait for data to arrive from the\r
+ * queue send task - toggling the LED each time it receives the value 100. The\r
+ * queue send task writes to the queue every 200ms, so the LED should toggle\r
+ * every 200ms.\r
*/\r
\r
/* Kernel includes. */\r
\r
/* The rate at which data is sent to the queue. The 200ms value is converted\r
to ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainQUEUE_SEND_FREQUENCY_MS ( 200 / portTICK_PERIOD_MS )\r
+#define mainQUEUE_SEND_FREQUENCY_MS ( pdMS_TO_TICKS( 200UL ) )\r
\r
/* The number of items the queue can hold. This is 1 as the receive task\r
will remove items as they are added, meaning the send task should always find\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
-#define configUSE_IDLE_HOOK 0\r
+#define configUSE_IDLE_HOOK 1\r
#define configUSE_TICK_HOOK 1\r
#define configCPU_CLOCK_HZ ( 32000000 ) /* Set in mcu_info.h. */\r
#define configPERIPHERAL_CLOCK_HZ ( 32000000 ) /* Set in muc_info.h. */\r
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )\r
+#define configMAX_PRIORITIES ( 7 )\r
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 )\r
-#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 45 * 1024 ) )\r
+#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 38 * 1024 ) )\r
#define configMAX_TASK_NAME_LEN ( 12 )\r
#define configUSE_TRACE_FACILITY 1\r
#define configUSE_16_BIT_TICKS 0\r
#define configUSE_MALLOC_FAILED_HOOK 0\r
#define configUSE_APPLICATION_TASK_TAG 0\r
#define configUSE_COUNTING_SEMAPHORES 1\r
+#define configUSE_TICKLESS_IDLE 0\r
\r
-#define configMAX_PRIORITIES ( 7 )\r
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
+/* This demo makes use of one or more example stats formatting functions. These\r
+format the raw data provided by the uxTaskGetSystemState() function in to human\r
+readable ASCII form. See the notes in the implementation of vTaskList() within\r
+FreeRTOS/Source/tasks.c for limitations. */\r
+#define configUSE_STATS_FORMATTING_FUNCTIONS 1\r
\r
/* Software timer definitions. */\r
#define configUSE_TIMERS 1\r
-#define configTIMER_TASK_PRIORITY ( 3 )\r
+#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )\r
#define configTIMER_QUEUE_LENGTH 5\r
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE )\r
\r
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4\r
\r
/* Set the following definitions to 1 to include the API function, or zero\r
-to exclude the API function. */\r
-\r
+to exclude the API function - alternative just use the linker to remove unused\r
+functions - which would be normal anyway. */\r
#define INCLUDE_vTaskPrioritySet 1\r
#define INCLUDE_uxTaskPriorityGet 1\r
#define INCLUDE_vTaskDelete 1\r
#define INCLUDE_eTaskGetState 1\r
#define INCLUDE_xTimerPendFunctionCall 1\r
\r
-#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }\r
-\r
-/* The configPRE_SLEEP_PROCESSING() and configPOST_SLEEP_PROCESSING() macros\r
-allow the application writer to add additional code before and after the MCU is\r
-placed into the low power state respectively. The implementations provided in\r
-this demo can be extended to save even more power - for example the analog\r
-input used by the low power demo could be switched off in the pre-sleep macro\r
-and back on again in the post sleep macro. */\r
-void vPreSleepProcessing( unsigned long xExpectedIdleTime );\r
-void vPostSleepProcessing( unsigned long xExpectedIdleTime );\r
-#define configPRE_SLEEP_PROCESSING( xExpectedIdleTime ) vPreSleepProcessing( xExpectedIdleTime );\r
-#define configPOST_SLEEP_PROCESSING( xExpectedIdleTime ) vPostSleepProcessing( xExpectedIdleTime );\r
+/* Assert stops the system on the line that failed the assert(), which can then\r
+be viewed by pausing the debugger. */\r
+#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); brk(); for( ;; ); }\r
+\r
+/* The buffer into which output generated by FreeRTOS+CLI is placed. This must\r
+be at least big enough to contain the output of the task-stats command, as the\r
+example implementation does not include buffer overlow checking. */\r
+#define configCOMMAND_INT_MAX_OUTPUT_SIZE 3500\r
+#define configINCLUDE_QUERY_HEAP_COMMAND 1\r
\r
/* configTICK_VECTOR must be set to the interrupt vector used by the peripheral\r
that generates the tick interrupt. */\r
*\r
******************************************************************************\r
*\r
- * main_full() creates all the demo application tasks and software timers, then\r
+ * main_full() creates a set of demo application tasks and software timers, then\r
* starts the scheduler. The web documentation provides more details of the\r
* standard demo application tasks, which provide no particular functionality,\r
* but do provide a good example of how to use the FreeRTOS API.\r
* In addition to the standard demo tasks, the following tasks and tests are\r
* defined and/or created within this file:\r
*\r
+ * "FreeRTOS+CLI command console" - The command console uses SCI1 for its\r
+ * input and output. The baud rate is set to 19200. Type "help" to see a list\r
+ * of registered commands. The FreeRTOS+CLI license is different to the\r
+ * FreeRTOS license, see http://www.FreeRTOS.org/cli for license and usage\r
+ * details.\r
+ *\r
* "Reg test" tasks - These fill both the core and floating point registers with\r
* known values, then check that each register maintains its expected value for\r
* the lifetime of the task. Each task uses a different set of values. The reg\r
* error in the context switching mechanism.\r
*\r
* "Check" task - The check task period is initially set to three seconds. The\r
- * task checks that all the standard demo tasks, and the register check tasks,\r
- * are not only still executing, but are executing without reporting any errors.\r
- * If the check task discovers that a task has either stalled, or reported an\r
- * error, then it changes its own execution period from the initial three\r
- * seconds, to just 200ms. The check task also toggles an LED each time it is\r
- * called. This provides a visual indication of the system status: If the LED\r
- * toggles every three seconds, then no issues have been discovered. If the LED\r
- * toggles every 200ms, then an issue has been discovered with at least one\r
- * task.\r
+ * task checks that all the standard demo tasks are not only still executing,\r
+ * but are executing without reporting any errors. If the check task discovers\r
+ * that a task has either stalled, or reported an error, then it changes its own\r
+ * execution period from the initial three seconds, to just 200ms. The check\r
+ * task also toggles an LED on each iteration of its loop. This provides a\r
+ * visual indication of the system status: If the LED toggles every three\r
+ * seconds, then no issues have been discovered. If the LED toggles every\r
+ * 200ms, then an issue has been discovered with at least one task.\r
*/\r
\r
/* Standard includes. */\r
#include "partest.h"\r
#include "comtest2.h"\r
#include "serial.h"\r
-#include "TimerDemo.h"\r
#include "QueueOverwrite.h"\r
#include "IntQueue.h"\r
#include "EventGroupsDemo.h"\r
#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2UL )\r
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3UL )\r
#define mainUART_COMMAND_CONSOLE_STACK_SIZE ( configMINIMAL_STACK_SIZE * 3UL )\r
-#define mainCOM_TEST_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )\r
#define mainCHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )\r
#define mainQUEUE_OVERWRITE_PRIORITY ( tskIDLE_PRIORITY )\r
\r
/* The priority used by the UART command console task. */\r
-#define mainUART_COMMAND_CONSOLE_TASK_PRIORITY ( configMAX_PRIORITIES - 2 )\r
-\r
-/* A block time of zero simply means "don't block". */\r
-#define mainDONT_BLOCK ( 0UL )\r
+#define mainUART_COMMAND_CONSOLE_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
\r
/* The period after which the check timer will expire, in ms, provided no errors\r
have been reported by any of the standard demo tasks. ms are converted to the\r
equivalent in ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainNO_ERROR_CHECK_TASK_PERIOD ( 3000UL / portTICK_PERIOD_MS )\r
+#define mainNO_ERROR_CHECK_TASK_PERIOD pdMS_TO_TICKS( 3000UL )\r
\r
/* The period at which the check timer will expire, in ms, if an error has been\r
reported in one of the standard demo tasks. ms are converted to the equivalent\r
in ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainERROR_CHECK_TASK_PERIOD ( 200UL / portTICK_PERIOD_MS )\r
+#define mainERROR_CHECK_TASK_PERIOD pdMS_TO_TICKS( 200UL )\r
\r
/* Parameters that are passed into the register check tasks solely for the\r
purpose of ensuring parameters are passed into tasks correctly. */\r
-#define mainREG_TEST_1_PARAMETER ( ( void * ) 0x12121212UL )\r
-#define mainREG_TEST_2_PARAMETER ( ( void * ) 0x12345678UL )\r
+#define mainREG_TEST_1_PARAMETER ( ( void * ) 0x12121212UL )\r
+#define mainREG_TEST_2_PARAMETER ( ( void * ) 0x12345678UL )\r
\r
/* The base period used by the timer test tasks. */\r
#define mainTIMER_TEST_PERIOD ( 50 )\r
*/\r
static void prvPseudoRandomiser( void *pvParameters );\r
\r
+/*\r
+ * Register commands that can be used with FreeRTOS+CLI. The commands are\r
+ * defined in CLI-Commands.c and File-Related-CLI-Command.c respectively.\r
+ */\r
+extern void vRegisterSampleCLICommands( void );\r
+\r
+/*\r
+ * The task that manages the FreeRTOS+CLI input and output.\r
+ */\r
+extern void vUARTCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );\r
+\r
/*-----------------------------------------------------------*/\r
\r
/* The following two variables are used to communicate the status of the\r
stops incrementing, then an error has been found. */\r
volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;\r
\r
-/* String for display in the web server. It is set to an error message if the\r
-check task detects an error. */\r
-const char *pcStatusMessage = "All tasks running without error";\r
/*-----------------------------------------------------------*/\r
\r
void main_full( void )\r
vStartGenericQueueTasks( tskIDLE_PRIORITY );\r
vStartRecursiveMutexTasks();\r
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
- vStartTimerDemoTask( mainTIMER_TEST_PERIOD );\r
vStartQueueOverwriteTask( mainQUEUE_OVERWRITE_PRIORITY );\r
vStartEventGroupTasks();\r
vStartTaskNotifyTask();\r
/* Create the task that just adds a little random behaviour. */\r
xTaskCreate( prvPseudoRandomiser, "Rnd", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );\r
\r
+ /* Start the tasks that implements the command console on the UART, as\r
+ described above. */\r
+ vUARTCommandConsoleStart( mainUART_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );\r
+\r
+ /* Register the standard CLI commands. */\r
+ vRegisterSampleCLICommands();\r
+\r
/* Create the task that performs the 'check' functionality, as described at\r
the top of this file. */\r
xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
ulErrorFound |= 1UL << 8UL;\r
}\r
\r
- if( xAreTimerDemoTasksStillRunning( ( TickType_t ) mainNO_ERROR_CHECK_TASK_PERIOD ) != pdPASS )\r
- {\r
- ulErrorFound |= 1UL << 9UL;\r
- }\r
-\r
if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )\r
{\r
ulErrorFound |= 1UL << 10UL;\r
gone wrong (it might just be that the loop back connector required\r
by the comtest tasks has not been fitted). */\r
xDelayPeriod = mainERROR_CHECK_TASK_PERIOD;\r
- pcStatusMessage = "Error found in at least one task.";\r
}\r
}\r
}\r
\r
void vFullDemoTickHook( void )\r
{\r
- /* The full demo includes a software timer demo/test that requires\r
- prodding periodically from the tick interrupt. */\r
- vTimerPeriodicISRTests();\r
-\r
/* Call the periodic queue overwrite from ISR demo. */\r
vQueueOverwritePeriodicISRDemo();\r
\r
+++ /dev/null
-/*******************************************************************************\r
- * DISCLAIMER\r
- * This software is supplied by Renesas Electronics Corporation and is only\r
- * intended for use with Renesas products. No other uses are authorized. This\r
- * software is owned by Renesas Electronics Corporation and is protected under\r
- * all applicable laws, including copyright laws.\r
- * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
- * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT\r
- * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE\r
- * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.\r
- * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS\r
- * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR\r
- * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE\r
- * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
- * Renesas reserves the right, without notice, to make changes to this software\r
- * and to discontinue the availability of this software. By using this software,\r
- * you agree to the additional terms and conditions found by accessing the\r
- * following link:\r
- * http://www.renesas.com/disclaimer\r
- *******************************************************************************/\r
-/* Copyright (C) 2014 Renesas Electronics Corporation. All rights reserved. */\r
-/*******************************************************************************\r
- * File Name : r_rsk_async.c\r
- * Version : 1.00\r
- * Device(s) : R5F51138AxFP\r
- * Tool-Chain : CCRX\r
- * H/W Platform : RSKRX113\r
- * Description : Functions used to send data via the SCI in asynchronous mode\r
- *******************************************************************************/\r
-/*******************************************************************************\r
- * History : 26.08.2014 Ver. 1.00 First Release\r
- *******************************************************************************/\r
-\r
-/*******************************************************************************\r
- System Includes\r
- *******************************************************************************/\r
-/* Following header file provides string type definitions. */\r
-#include <string.h>\r
-\r
-/*******************************************************************************\r
- User Includes (Project Level Includes)\r
- *******************************************************************************/\r
-/* Defines port registers */\r
-#include "r_cg_macrodriver.h"\r
-#include "r_cg_sci.h"\r
-#include "r_rsk_async.h"\r
-\r
-/*******************************************************************************\r
- User Defines\r
- *******************************************************************************/\r
-\r
-/*******************************************************************************\r
- * Global Variables\r
- *******************************************************************************/\r
-\r
-/* Declaration of the command string to clear the terminal screen */\r
-static const char cmd_clr_scr[] =\r
-{ 27, 91, 50, 74, 0, 27, 91, 72, 0 };\r
-\r
-/*******************************************************************************\r
- * Function Prototypes\r
- *******************************************************************************/\r
-\r
-/* text_write function prototype */\r
-static void text_write (const char * const msg_string);\r
-\r
-/*******************************************************************************\r
- * Function Name: R_ASYNC_Init\r
- * Description : This function initialises the SCI channel connected to the\r
- * RS232 connector on the RSK. The channel is configured for\r
- * transmission and reception, and instructions are sent to the\r
- * terminal.\r
- * Argument : none\r
- * Return value : none\r
- *******************************************************************************/\r
-void R_ASYNC_Init (void)\r
-{\r
-\r
- /* Set up SCI1 receive buffer */\r
- R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
-\r
- /* Enable SCI1 operations */\r
- R_SCI1_Start();\r
-\r
- /* Clear the text on terminal window */\r
- text_write(cmd_clr_scr);\r
-\r
- /* Display splash screen on terminal window */\r
- text_write("Renesas RSKRX113 Async Serial \r\n");\r
-\r
- /* Inform user on how to stop transmission */\r
- text_write("Press 'z' to stop and any key to resume\r\n\n");\r
-}\r
-/*******************************************************************************\r
- * End of function R_ASYNC_Init\r
- *******************************************************************************/\r
-\r
-/*******************************************************************************\r
- * Function Name : text_write\r
- * Description : Transmits null-terminated string.\r
- * Argument : (char*) msg_string - null terminated string\r
- * Return value : None\r
- *******************************************************************************/\r
-static void text_write (const char * const msg_string)\r
-{\r
- R_SCI1_AsyncTransmit((uint8_t *) msg_string, (uint16_t) strlen(msg_string));\r
-}\r
-/*******************************************************************************\r
- * End of function text_write\r
- *******************************************************************************/\r
-\r
+++ /dev/null
-/*******************************************************************************\r
- * DISCLAIMER\r
- * This software is supplied by Renesas Electronics Corporation and is only\r
- * intended for use with Renesas products. No other uses are authorized. This\r
- * software is owned by Renesas Electronics Corporation and is protected under\r
- * all applicable laws, including copyright laws.\r
- * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
- * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT\r
- * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE\r
- * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.\r
- * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS\r
- * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR\r
- * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE\r
- * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
- * Renesas reserves the right, without notice, to make changes to this software\r
- * and to discontinue the availability of this software. By using this software,\r
- * you agree to the additional terms and conditions found by accessing the\r
- * following link:\r
- * http://www.renesas.com/disclaimer\r
- *******************************************************************************/\r
-/* Copyright (C) 2014 Renesas Electronics Corporation. All rights reserved. */\r
-/*******************************************************************************\r
- * File Name : r_rsk_async.h\r
- * Version : 1.00\r
- * Device(s) : R5F51138AxFP\r
- * Tool-Chain : CCRX\r
- * H/W Platform : RSKRX113\r
- * Description : Functions used to send data via the SCI in asynchronous mode\r
- ******************************************************************************/\r
-/*******************************************************************************\r
- * History : 26.08.2014 Ver. 1.00 First Release\r
- *******************************************************************************/\r
-\r
-/*******************************************************************************\r
- * Macro Definitions\r
- *******************************************************************************/\r
-/* Multiple inclusion prevention macro */\r
-#ifndef R_RSK_ASYNC_H\r
-#define R_RSK_ASYNC_H\r
-\r
-/*******************************************************************************\r
- * Global Function Prototypes\r
- *******************************************************************************/\r
-/* initialise asynchronous transmission*/\r
-void R_ASYNC_Init (void);\r
-\r
-/* End of multiple inclusion prevention macro */\r
-#endif\r
-\r
void R_SCI1_Stop(void);\r
MD_STATUS R_SCI1_Serial_Send(uint8_t * const tx_buf, uint16_t tx_num);\r
MD_STATUS R_SCI1_Serial_Receive(uint8_t * const rx_buf, uint16_t rx_num);\r
-static void r_sci1_callback_transmitend(void);\r
-static void r_sci1_callback_receiveend(void);\r
-static void r_sci1_callback_receiveerror(void);\r
+void r_sci1_callback_transmitend(void);\r
+void r_sci1_callback_receiveend(void);\r
+void r_sci1_callback_receiveerror(void);\r
\r
/* Start user code for function. Do not edit comment generated here */\r
\r
extern volatile uint8_t g_tx_flag;\r
\r
/* End user code. Do not edit comment generated here */\r
-#endif
\ No newline at end of file
+#endif\r
Pragma directive\r
***********************************************************************************************************************/\r
/* Start user code for pragma. Do not edit comment generated here */\r
+\r
+\r
+/*\r
+ * This file originated from an example project for the RSK - it has been\r
+ * adapted to allow it to be used in the FreeRTOS demo. Functions required by\r
+ * UARTCommandConsole.c have been added.\r
+ */\r
+\r
+\r
+\r
/* End user code. Do not edit comment generated here */\r
\r
/***********************************************************************************************************************\r
#include "r_cg_sci.h"\r
/* Start user code for include. Do not edit comment generated here */\r
#include "rskrx113def.h"\r
-//_RB_#include "r_cg_cmt.h"\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "queue.h"\r
+#include "serial.h"\r
/* End user code. Do not edit comment generated here */\r
#include "r_cg_userdefine.h"\r
\r
/* Flag used to control transmission to PC terminal */\r
volatile uint8_t g_tx_flag = FALSE;\r
\r
-/* Flag used locally to detect transmission complete */\r
+/* Characters received from the UART are stored in this queue, ready to be\r
+received by the application. ***NOTE*** Using a queue in this way is very\r
+convenient, but also very inefficient. It can be used here because characters\r
+will only arrive slowly. In a higher bandwidth system a circular RAM buffer or\r
+DMA should be used in place of this queue. */\r
+static QueueHandle_t xRxQueue = NULL;\r
+\r
+/* When a task calls vSerialPutString() its handle is stored in xSendingTask,\r
+before being placed into the Blocked state (so does not use any CPU time) to\r
+wait for the transmission to end. The task handle is then used from the UART\r
+transmit end interrupt to remove the task from the Blocked state. */\r
+static TaskHandle_t xSendingTask = NULL;\r
+\r
+/* Flag used locally to detect transmission complete. This is used by the\r
+auto generated API only. */\r
static volatile uint8_t sci1_txdone;\r
\r
/* End user code. Do not edit comment generated here */\r
\r
/* Clear overrun, framing and parity error flags */\r
err_type = SCI1.SSR.BYTE;\r
- SCI1.SSR.BYTE = err_type & 0xC7U;\r
+ SCI1.SSR.BYTE = err_type & ( uint8_t ) 0xC7;\r
}\r
/***********************************************************************************************************************\r
* Function Name: r_sci1_callback_transmitend\r
* Arguments : None\r
* Return Value : None\r
***********************************************************************************************************************/\r
-static void r_sci1_callback_transmitend(void)\r
+void r_sci1_callback_transmitend(void)\r
{\r
/* Start user code. Do not edit comment generated here */\r
- sci1_txdone = TRUE;\r
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
+\r
+ /* The sci1_txdone flag is used by the auto generated API only. */\r
+ sci1_txdone = TRUE;\r
\r
+ if( xSendingTask != NULL )\r
+ {\r
+ /* A task is waiting for the end of the Tx, unblock it now.\r
+ http://www.freertos.org/vTaskNotifyGiveFromISR.html */\r
+ vTaskNotifyGiveFromISR( xSendingTask, &xHigherPriorityTaskWoken );\r
+ xSendingTask = NULL;\r
+\r
+ portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
+ }\r
/* End user code. Do not edit comment generated here */\r
}\r
/***********************************************************************************************************************\r
* Arguments : None\r
* Return Value : None\r
***********************************************************************************************************************/\r
-static void r_sci1_callback_receiveend(void)\r
+void r_sci1_callback_receiveend(void)\r
{\r
/* Start user code. Do not edit comment generated here */\r
- /* Check the contents of g_rx_char */\r
- if ('z' == g_rx_char)\r
- {\r
- /* Stop the timer used to control transmission to PC terminal*/\r
-//_RB_ R_CMT0_Stop();\r
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
\r
- /* Turn off LED0 and turn on LED1 to indicate serial transmission\r
- inactive */\r
- LED0 = LED_OFF;\r
- LED1 = LED_ON;\r
- }\r
- else\r
- {\r
- /* Start the timer used to control transmission to PC terminal*/\r
-//_RB_ R_CMT0_Start();\r
+ configASSERT( xRxQueue );\r
\r
- /* Turn on LED0 and turn off LED1 to indicate serial transmission\r
- active */\r
- LED0 = LED_ON;\r
- LED1 = LED_OFF;\r
- }\r
+ /* Transmitting generates an interrupt for each character, which consumes\r
+ CPU time, and can cause standard demo RTOS tasks that monitor their own\r
+ performance to fail asserts - so don't receive new CLI commands if a\r
+ transmit is not already in progress. */\r
+ if( sci1_txdone == TRUE )\r
+ {\r
+ /* Characters received from the UART are stored in this queue, ready to be\r
+ received by the application. ***NOTE*** Using a queue in this way is very\r
+ convenient, but also very inefficient. It can be used here because\r
+ characters will only arrive slowly. In a higher bandwidth system a circular\r
+ RAM buffer or DMA should be used in place of this queue. */\r
+ xQueueSendFromISR( xRxQueue, &g_rx_char, &xHigherPriorityTaskWoken );\r
+ }\r
\r
/* Set up SCI1 receive buffer again */\r
R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
\r
+ /* See http://www.freertos.org/xQueueOverwriteFromISR.html for information\r
+ on the semantics of this ISR. */\r
+ portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
/* End user code. Do not edit comment generated here */\r
}\r
/***********************************************************************************************************************\r
* Arguments : None\r
* Return Value : None\r
***********************************************************************************************************************/\r
-static void r_sci1_callback_receiveerror(void)\r
+void r_sci1_callback_receiveerror(void)\r
{\r
/* Start user code. Do not edit comment generated here */\r
/* End user code. Do not edit comment generated here */\r
* End of function R_SCI1_AsyncTransmit\r
***********************************************************************************************************************/\r
\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )\r
+{\r
+ ( void ) ulWantedBaud;\r
+ ( void ) uxQueueLength;\r
+\r
+ /* Characters received from the UART are stored in this queue, ready to be\r
+ received by the application. ***NOTE*** Using a queue in this way is very\r
+ convenient, but also very inefficient. It can be used here because\r
+ characters will only arrive slowly. In a higher bandwidth system a circular\r
+ RAM buffer or DMA should be used in place of this queue. */\r
+ xRxQueue = xQueueCreate( uxQueueLength, sizeof( char ) );\r
+ configASSERT( xRxQueue );\r
+\r
+ /* Set up SCI1 receive buffer */\r
+ R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
+\r
+ /* Ensure the interrupt priority is at or below\r
+ configMAX_SYSCALL_INTERRUPT_PRIORITY. */\r
+ IPR( SCI1, ERI1 ) = configMAX_SYSCALL_INTERRUPT_PRIORITY - 1;\r
+\r
+ /* Enable SCI1 operations */\r
+ R_SCI1_Start();\r
+\r
+ /* Only one UART is supported, so it doesn't matter what is returned\r
+ here. */\r
+ return 0;\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )\r
+{\r
+const TickType_t xMaxBlockTime = pdMS_TO_TICKS( 5000 );\r
+\r
+ /* Only one port is supported. */\r
+ ( void ) pxPort;\r
+\r
+ /* Clear the flag before initiating a new transmission */\r
+ sci1_txdone = FALSE;\r
+\r
+ /* Don't send the string unless the previous string has been sent. */\r
+ if( xSendingTask == NULL )\r
+ {\r
+ /* Ensure the calling task's notification state is not already\r
+ pending. */\r
+ vTaskNotifyClear( NULL );\r
+\r
+ /* Store the handle of the transmitting task. This is used to unblock\r
+ the task when the transmission has completed. */\r
+ xSendingTask = xTaskGetCurrentTaskHandle();\r
+\r
+ /* Send the string using the auto-generated API. */\r
+ R_SCI1_Serial_Send( ( uint8_t * ) pcString, usStringLength );\r
+\r
+ /* Wait in the Blocked state (so not using any CPU time) until the\r
+ transmission has completed. */\r
+ ulTaskNotifyTake( pdTRUE, xMaxBlockTime );\r
+ }\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, TickType_t xBlockTime )\r
+{\r
+ /* Only one UART is supported. */\r
+ ( void ) pxPort;\r
+\r
+ /* Return a received character, if any are available. Otherwise block to\r
+ wait for a character. */\r
+ return xQueueReceive( xRxQueue, pcRxedChar, xBlockTime );\r
+}\r
+\r
+/* Function required in order to link UARTCommandConsole.c - which is used by\r
+multiple different demo application. */\r
+signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, TickType_t xBlockTime )\r
+{\r
+ /* Just mapped to vSerialPutString() so the block time is not used. */\r
+ ( void ) xBlockTime;\r
+\r
+ vSerialPutString( pxPort, &cOutChar, sizeof( cOutChar ) );\r
+ return pdPASS;\r
+}\r
+\r
/* End user code. Do not edit comment generated here */\r
* implemented and described in main_full.c.\r
*\r
* This file implements the code that is not demo specific, including the\r
- * hardware setup, standard FreeRTOS hook functions, and the ISR hander called\r
- * by the RTOS after interrupt entry (including nesting) has been taken care of.\r
+ * hardware setup and standard FreeRTOS hook functions.\r
*\r
* ENSURE TO READ THE DOCUMENTATION PAGE FOR THIS PORT AND DEMO APPLICATION ON\r
* THE http://www.FreeRTOS.org WEB SITE FOR FULL INFORMATION ON USING THIS DEMO\r
#include "task.h"\r
#include "semphr.h"\r
\r
-/* Renesas includes. */\r
/* Renesas includes. */\r
#include <rskrx113def.h>\r
#include "r_cg_macrodriver.h"\r
#include "r_cg_sci.h"\r
-#include "r_rsk_async.h"\r
\r
/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,\r
or 0 to run the more comprehensive test and demo application. */\r
-#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 0\r
+#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 1\r
\r
/*-----------------------------------------------------------*/\r
\r
}\r
#endif\r
\r
+ /* Should never get reached. */\r
return 0;\r
}\r
/*-----------------------------------------------------------*/\r
\r
static void prvSetupHardware( void )\r
{\r
- /* Set up SCI1 receive buffer */\r
- R_SCI1_Serial_Receive((uint8_t *) &g_rx_char, 1);\r
-\r
- /* Enable SCI1 operations */\r
- R_SCI1_Start();\r
-\r
+ /* Some hardware setup is performed before main() is called. This routine\r
+ just ensures the LEDs start off. */\r
LED0 = LED_OFF;\r
LED1 = LED_OFF;\r
LED2 = LED_OFF;\r
\r
void vApplicationTickHook( void )\r
{\r
+ /* The tick hook is not used by the blinky demo, but is by the full demo. */\r
#if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0\r
{\r
extern void vFullDemoTickHook( void );\r
/*-----------------------------------------------------------*/\r
\r
/* The RX port uses this callback function to configure its tick interrupt.\r
-This allows the application to choose the tick interrupt source. */\r
+This allows the application to choose the tick interrupt source.\r
+***NOTE***: configTICK_VECTOR must be set in FreeRTOSConfig.h to be correct for\r
+whichever vector is used. */\r
void vApplicationSetupTimerInterrupt( void )\r
{\r
const uint32_t ulEnableRegisterWrite = 0xA50BUL, ulDisableRegisterWrite = 0xA500UL;\r
+++ /dev/null
-/*\r
- FreeRTOS V8.2.2 - Copyright (C) 2015 Real Time Engineers Ltd.\r
- All rights reserved\r
-\r
- VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
-\r
- This file is part of the FreeRTOS distribution.\r
-\r
- FreeRTOS is free software; you can redistribute it and/or modify it under\r
- the terms of the GNU General Public License (version 2) as published by the\r
- Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
-\r
- ***************************************************************************\r
- >>! NOTE: The modification to the GPL is included to allow you to !<<\r
- >>! distribute a combined work that includes FreeRTOS without being !<<\r
- >>! obliged to provide the source code for proprietary components !<<\r
- >>! outside of the FreeRTOS kernel. !<<\r
- ***************************************************************************\r
-\r
- FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
- FOR A PARTICULAR PURPOSE. Full license text is available on the following\r
- link: http://www.freertos.org/a00114.html\r
-\r
- ***************************************************************************\r
- * *\r
- * FreeRTOS provides completely free yet professionally developed, *\r
- * robust, strictly quality controlled, supported, and cross *\r
- * platform software that is more than just the market leader, it *\r
- * is the industry's de facto standard. *\r
- * *\r
- * Help yourself get started quickly while simultaneously helping *\r
- * to support the FreeRTOS project by purchasing a FreeRTOS *\r
- * tutorial book, reference manual, or both: *\r
- * http://www.FreeRTOS.org/Documentation *\r
- * *\r
- ***************************************************************************\r
-\r
- http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading\r
- the FAQ page "My application does not run, what could be wrong?". Have you\r
- defined configASSERT()?\r
-\r
- http://www.FreeRTOS.org/support - In return for receiving this top quality\r
- embedded software for free we request you assist our global community by\r
- participating in the support forum.\r
-\r
- http://www.FreeRTOS.org/training - Investing in training allows your team to\r
- be as productive as possible as early as possible. Now you can receive\r
- FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
- Ltd, and the world's leading authority on the world's leading RTOS.\r
-\r
- http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
- including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
- compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
-\r
- http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
- Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
-\r
- http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
- Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS\r
- licenses offer ticketed support, indemnification and commercial middleware.\r
-\r
- http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
- engineered and independently SIL3 certified version for use in safety and\r
- mission critical applications that require provable dependability.\r
-\r
- 1 tab == 4 spaces!\r
-*/\r
-\r
-/*\r
- The tasks defined on this page demonstrate the use of recursive mutexes.\r
-\r
- For recursive mutex functionality the created mutex should be created using\r
- xSemaphoreCreateRecursiveMutex(), then be manipulated\r
- using the xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() API\r
- functions.\r
-\r
- This demo creates three tasks all of which access the same recursive mutex:\r
-\r
- prvRecursiveMutexControllingTask() has the highest priority so executes \r
- first and grabs the mutex. It then performs some recursive accesses - \r
- between each of which it sleeps for a short period to let the lower \r
- priority tasks execute. When it has completed its demo functionality\r
- it gives the mutex back before suspending itself.\r
-\r
- prvRecursiveMutexBlockingTask() attempts to access the mutex by performing\r
- a blocking 'take'. The blocking task has a lower priority than the \r
- controlling task so by the time it executes the mutex has already been\r
- taken by the controlling task, causing the blocking task to block. It \r
- does not unblock until the controlling task has given the mutex back, \r
- and it does not actually run until the controlling task has suspended \r
- itself (due to the relative priorities). When it eventually does obtain\r
- the mutex all it does is give the mutex back prior to also suspending \r
- itself. At this point both the controlling task and the blocking task are \r
- suspended.\r
-\r
- prvRecursiveMutexPollingTask() runs at the idle priority. It spins round\r
- a tight loop attempting to obtain the mutex with a non-blocking call. As\r
- the lowest priority task it will not successfully obtain the mutex until\r
- both the controlling and blocking tasks are suspended. Once it eventually \r
- does obtain the mutex it first unsuspends both the controlling task and\r
- blocking task prior to giving the mutex back - resulting in the polling\r
- task temporarily inheriting the controlling tasks priority.\r
-*/\r
-\r
-/* Scheduler include files. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* Demo app include files. */\r
-#include "recmutex.h"\r
-\r
-/* Priorities assigned to the three tasks. */\r
-#define recmuCONTROLLING_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )\r
-#define recmuBLOCKING_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
-#define recmuPOLLING_TASK_PRIORITY ( tskIDLE_PRIORITY + 0 )\r
-\r
-/* In this version the tick period is very long, so the short delay cannot be\r
-for too many ticks, or the check task will execute and find that the recmutex\r
-tasks have not completed their functionality and then signal an error. The\r
-delay does however have to be long enough to allow the lower priority tasks\r
-a chance of executing - this is basically achieved by reducing the number\r
-of times the loop that takes/gives the recursive mutex executes. */\r
-#define recmuMAX_COUNT ( 2 )\r
-#define recmuSHORT_DELAY ( 20 )\r
-#define recmuNO_DELAY ( ( TickType_t ) 0 )\r
-#define recmuFIVE_TICK_DELAY ( ( TickType_t ) 5 )\r
-\r
-/* The three tasks as described at the top of this file. */\r
-static void prvRecursiveMutexControllingTask( void *pvParameters );\r
-static void prvRecursiveMutexBlockingTask( void *pvParameters );\r
-static void prvRecursiveMutexPollingTask( void *pvParameters );\r
-\r
-/* The mutex used by the demo. */\r
-static SemaphoreHandle_t xMutex;\r
-\r
-/* Variables used to detect and latch errors. */\r
-static volatile portBASE_TYPE xErrorOccurred = pdFALSE, xControllingIsSuspended = pdFALSE, xBlockingIsSuspended = pdFALSE;\r
-static volatile unsigned portBASE_TYPE uxControllingCycles = 0, uxBlockingCycles = 0, uxPollingCycles = 0;\r
-\r
-/* Handles of the two higher priority tasks, required so they can be resumed \r
-(unsuspended). */\r
-static TaskHandle_t xControllingTaskHandle, xBlockingTaskHandle, xPollingTaskHandle;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vStartRecursiveMutexTasks( void )\r
-{\r
- /* Just creates the mutex and the three tasks. */\r
-\r
- xMutex = xSemaphoreCreateRecursiveMutex();\r
-\r
- /* vQueueAddToRegistry() adds the mutex to the registry, if one is\r
- in use. The registry is provided as a means for kernel aware \r
- debuggers to locate mutex and has no purpose if a kernel aware debugger\r
- is not being used. The call to vQueueAddToRegistry() will be removed\r
- by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is \r
- defined to be less than 1. */\r
- vQueueAddToRegistry( ( QueueHandle_t ) xMutex, "Recursive_Mutex" );\r
-\r
-\r
- if( xMutex != NULL )\r
- {\r
- xTaskCreate( prvRecursiveMutexControllingTask, "Rec1Ctrl", configMINIMAL_STACK_SIZE, NULL, recmuCONTROLLING_TASK_PRIORITY, &xControllingTaskHandle );\r
- xTaskCreate( prvRecursiveMutexBlockingTask, "Rec2Blck", configMINIMAL_STACK_SIZE, NULL, recmuBLOCKING_TASK_PRIORITY, &xBlockingTaskHandle );\r
- xTaskCreate( prvRecursiveMutexPollingTask, "Rec3Poll", configMINIMAL_STACK_SIZE, NULL, recmuPOLLING_TASK_PRIORITY, &xPollingTaskHandle );\r
- }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvRecursiveMutexControllingTask( void *pvParameters )\r
-{\r
-unsigned portBASE_TYPE ux;\r
-\r
- /* Just to remove compiler warning. */\r
- ( void ) pvParameters;\r
-\r
- for( ;; )\r
- {\r
- /* Should not be able to 'give' the mutex, as we have not yet 'taken'\r
- it. The first time through, the mutex will not have been used yet,\r
- subsequent times through, at this point the mutex will be held by the\r
- polling task. */\r
- if( xSemaphoreGiveRecursive( xMutex ) == pdPASS )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
-\r
- for( ux = 0; ux < recmuMAX_COUNT; ux++ )\r
- {\r
- /* We should now be able to take the mutex as many times as\r
- we like.\r
- \r
- The first time through the mutex will be immediately available, on\r
- subsequent times through the mutex will be held by the polling task\r
- at this point and this Take will cause the polling task to inherit\r
- the priority of this task. In this case the block time must be\r
- long enough to ensure the polling task will execute again before the\r
- block time expires. If the block time does expire then the error\r
- flag will be set here. */\r
- if( xSemaphoreTakeRecursive( xMutex, recmuFIVE_TICK_DELAY ) != pdPASS )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
-\r
- /* Ensure the other task attempting to access the mutex (and the\r
- other demo tasks) are able to execute to ensure they either block\r
- (where a block time is specified) or return an error (where no \r
- block time is specified) as the mutex is held by this task. */\r
- vTaskDelay( recmuSHORT_DELAY );\r
- }\r
-\r
- /* For each time we took the mutex, give it back. */\r
- for( ux = 0; ux < recmuMAX_COUNT; ux++ )\r
- {\r
- /* Ensure the other task attempting to access the mutex (and the\r
- other demo tasks) are able to execute. */\r
- vTaskDelay( recmuSHORT_DELAY );\r
-\r
- /* We should now be able to give the mutex as many times as we\r
- took it. When the mutex is available again the Blocking task\r
- should be unblocked but not run because it has a lower priority\r
- than this task. The polling task should also not run at this point\r
- as it too has a lower priority than this task. */\r
- if( xSemaphoreGiveRecursive( xMutex ) != pdPASS )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
-\r
- #if configUSE_PREEMPTION == 0\r
- taskYIELD();\r
- #endif\r
- }\r
-\r
- /* Having given it back the same number of times as it was taken, we\r
- should no longer be the mutex owner, so the next give should fail. */\r
- if( xSemaphoreGiveRecursive( xMutex ) == pdPASS )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
-\r
- /* Keep count of the number of cycles this task has performed so a \r
- stall can be detected. */\r
- uxControllingCycles++;\r
-\r
- /* Suspend ourselves so the blocking task can execute. */\r
- xControllingIsSuspended = pdTRUE;\r
- vTaskSuspend( NULL );\r
- xControllingIsSuspended = pdFALSE;\r
- }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvRecursiveMutexBlockingTask( void *pvParameters )\r
-{\r
- /* Just to remove compiler warning. */\r
- ( void ) pvParameters;\r
-\r
- for( ;; )\r
- {\r
- /* This task will run while the controlling task is blocked, and the\r
- controlling task will block only once it has the mutex - therefore\r
- this call should block until the controlling task has given up the \r
- mutex, and not actually execute past this call until the controlling \r
- task is suspended. */\r
- if( xSemaphoreTakeRecursive( xMutex, portMAX_DELAY ) == pdPASS )\r
- {\r
- if( xControllingIsSuspended != pdTRUE )\r
- {\r
- /* Did not expect to execute until the controlling task was\r
- suspended. */\r
- xErrorOccurred = pdTRUE;\r
- }\r
- else\r
- {\r
- /* Give the mutex back before suspending ourselves to allow\r
- the polling task to obtain the mutex. */\r
- if( xSemaphoreGiveRecursive( xMutex ) != pdPASS )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
-\r
- xBlockingIsSuspended = pdTRUE;\r
- vTaskSuspend( NULL );\r
- xBlockingIsSuspended = pdFALSE;\r
- }\r
- }\r
- else\r
- {\r
- /* We should not leave the xSemaphoreTakeRecursive() function\r
- until the mutex was obtained. */\r
- xErrorOccurred = pdTRUE;\r
- }\r
-\r
- /* The controlling and blocking tasks should be in lock step. */\r
- if( uxControllingCycles != ( uxBlockingCycles + 1 ) )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
-\r
- /* Keep count of the number of cycles this task has performed so a \r
- stall can be detected. */\r
- uxBlockingCycles++;\r
- }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvRecursiveMutexPollingTask( void *pvParameters )\r
-{\r
- /* Just to remove compiler warning. */\r
- ( void ) pvParameters;\r
-\r
- for( ;; )\r
- {\r
- /* Keep attempting to obtain the mutex. We should only obtain it when\r
- the blocking task has suspended itself, which in turn should only\r
- happen when the controlling task is also suspended. */\r
- if( xSemaphoreTakeRecursive( xMutex, recmuNO_DELAY ) == pdPASS )\r
- {\r
- /* Is the blocking task suspended? */\r
- if( ( xBlockingIsSuspended != pdTRUE ) || ( xControllingIsSuspended != pdTRUE ) )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
- else\r
- {\r
- /* Keep count of the number of cycles this task has performed \r
- so a stall can be detected. */\r
- uxPollingCycles++;\r
-\r
- /* We can resume the other tasks here even though they have a\r
- higher priority than the polling task. When they execute they\r
- will attempt to obtain the mutex but fail because the polling\r
- task is still the mutex holder. The polling task (this task)\r
- will then inherit the higher priority. The Blocking task will\r
- block indefinitely when it attempts to obtain the mutex, the\r
- Controlling task will only block for a fixed period and an\r
- error will be latched if the polling task has not returned the\r
- mutex by the time this fixed period has expired. */ \r
- vTaskResume( xBlockingTaskHandle );\r
- #if configUSE_PREEMPTION == 0\r
- taskYIELD();\r
- #endif\r
-\r
- vTaskResume( xControllingTaskHandle );\r
- #if configUSE_PREEMPTION == 0\r
- taskYIELD();\r
- #endif\r
-\r
- /* The other two tasks should now have executed and no longer\r
- be suspended. */\r
- if( ( xBlockingIsSuspended == pdTRUE ) || ( xControllingIsSuspended == pdTRUE ) )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- } \r
- \r
- /* Release the mutex, disinheriting the higher priority again. */\r
- if( xSemaphoreGiveRecursive( xMutex ) != pdPASS )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
-\r
- #if configUSE_PREEMPTION == 0\r
- taskYIELD();\r
- #endif\r
- }\r
- }\r
-\r
- #if configUSE_PREEMPTION == 0\r
- {\r
- taskYIELD();\r
- }\r
- #endif\r
- }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This is called to check that all the created tasks are still running. */\r
-portBASE_TYPE xAreRecursiveMutexTasksStillRunning( void )\r
-{\r
-portBASE_TYPE xReturn;\r
-static unsigned portBASE_TYPE uxLastControllingCycles = 0, uxLastBlockingCycles = 0, uxLastPollingCycles = 0;\r
-\r
- /* Is the controlling task still cycling? */\r
- if( uxLastControllingCycles == uxControllingCycles )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
- else\r
- {\r
- uxLastControllingCycles = uxControllingCycles;\r
- }\r
-\r
- /* Is the blocking task still cycling? */\r
- if( uxLastBlockingCycles == uxBlockingCycles )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
- else\r
- {\r
- uxLastBlockingCycles = uxBlockingCycles;\r
- }\r
-\r
- /* Is the polling task still cycling? */\r
- if( uxLastPollingCycles == uxPollingCycles )\r
- {\r
- xErrorOccurred = pdTRUE;\r
- }\r
- else\r
- {\r
- uxLastPollingCycles = uxPollingCycles;\r
- }\r
-\r
- if( xErrorOccurred == pdTRUE )\r
- {\r
- xReturn = pdFAIL;\r
- }\r
- else\r
- {\r
- xReturn = pdTRUE;\r
- }\r
-\r
- return xReturn;\r
-}\r
-\r
-\r
-\r
-\r
<ClCompile Include="..\Common\Minimal\QueueOverwrite.c" />\r
<ClCompile Include="..\Common\Minimal\QueueSet.c" />\r
<ClCompile Include="..\Common\Minimal\QueueSetPolling.c" />\r
+ <ClCompile Include="..\Common\Minimal\recmutex.c" />\r
<ClCompile Include="..\Common\Minimal\semtest.c" />\r
<ClCompile Include="..\Common\Minimal\TaskNotify.c" />\r
<ClCompile Include="..\Common\Minimal\timerdemo.c" />\r
- <ClCompile Include="DemosModifiedForLowTickRate\recmutex.c" />\r
<ClCompile Include="main.c">\r
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
<Filter Include="FreeRTOS Source\Source\Portable">\r
<UniqueIdentifier>{88f409e6-d396-4ac5-94bd-7a99c914be46}</UniqueIdentifier>\r
</Filter>\r
- <Filter Include="Demo App Source\Common Demo Tasks\ModifiedForLowTickRate">\r
- <UniqueIdentifier>{143cf5a3-f134-4439-9f71-a201ae23b44b}</UniqueIdentifier>\r
- </Filter>\r
<Filter Include="Configuration Files">\r
<UniqueIdentifier>{19ff1a34-36de-4c48-9d10-3fb1fa0d1fa4}</UniqueIdentifier>\r
<Extensions>h;hpp;hxx;hm;inl</Extensions>\r
<ClCompile Include="..\Common\Minimal\blocktim.c">\r
<Filter>Demo App Source\Common Demo Tasks</Filter>\r
</ClCompile>\r
- <ClCompile Include="DemosModifiedForLowTickRate\recmutex.c">\r
- <Filter>Demo App Source\Common Demo Tasks\ModifiedForLowTickRate</Filter>\r
- </ClCompile>\r
<ClCompile Include="..\..\Source\timers.c">\r
<Filter>FreeRTOS Source\Source</Filter>\r
</ClCompile>\r
<ClCompile Include="..\Common\Minimal\QueueSetPolling.c">\r
<Filter>Demo App Source\Common Demo Tasks</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\Common\Minimal\recmutex.c">\r
+ <Filter>Demo App Source\Common Demo Tasks</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
<ItemGroup>\r
<ClInclude Include="FreeRTOSConfig.h">\r
#include "string.h"\r
\r
/* Hardware specifics. */\r
-#warning Used to include the chip specific header here.\r
#include "machine.h"\r
\r
/*-----------------------------------------------------------*/\r
#define portEXIT_CRITICAL() vTaskExitCritical()\r
\r
/* As this port allows interrupt nesting... */\r
-#define portSET_INTERRUPT_MASK_FROM_ISR() get_ipl(); set_ipl( ( long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
-#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ) set_ipl( ( long ) uxSavedInterruptStatus )\r
+#define portSET_INTERRUPT_MASK_FROM_ISR() ( UBaseType_t ) get_ipl(); set_ipl( ( signed long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ) set_ipl( ( signed long ) uxSavedInterruptStatus )\r
\r
/*-----------------------------------------------------------*/\r
\r