+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
-<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">\r
- <storageModule moduleId="org.eclipse.cdt.core.settings">\r
- <buildSystem id="Xtensa.600602548">\r
- <storageModule id="Xtensa.600602548" moduleId="org.eclipse.cdt.core.settings"/>\r
- </buildSystem>\r
- <cconfiguration id="Xtensa.600602548">\r
- <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
- <configuration buildProperties="" description="" errorParsers="org.eclipse.cdt.core.VCErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.CWDLocator;com.tensilica.xide.cdt.XCCErrorParser;org.eclipse.cdt.core.GASErrorParser;com.tensilica.xide.cdt.XtLDErrorParser;com.tensilica.xide.cdt.TCErrorParser;com.tensilica.xide.cdt.FlexLmErrorParser" id="Xtensa.600602548" name="Xtensa" parent="org.eclipse.cdt.build.core.prefbase.cfg">\r
- <folderInfo id="Xtensa.600602548." name="/" resourcePath="">\r
- <toolChain errorParsers="" id="org.eclipse.cdt.build.core.prefbase.toolchain.1124911838" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">\r
- <targetPlatform binaryParser="com.tensilica.xide.cdt.XtensaELF" id="org.eclipse.cdt.build.core.prefbase.toolchain.1124911838.1653706502" name=""/>\r
- <builder command="${default_xttools_make_path}" enableAutoBuild="false" errorParsers="org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.CWDLocator" id="org.eclipse.cdt.build.core.settings.default.builder.1420142413" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder">\r
- <outputEntries>\r
- <entry excluding="**/.genned|**/*.pstamp|**/*.props|**/*.d|**/objFiles.list|**/*.interlock|**/*.icmiss|**/*.dcmiss|**/*.icmiss_cyc|**/*.dcmiss_cyc|**/*.cc_miss|**/*.cc_miss_cyc|**/*.cyc|**/*.insn|**/*.bdelay" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="bin"/>\r
- </outputEntries>\r
- </builder>\r
- <tool errorParsers="org.eclipse.cdt.core.VCErrorParser;org.eclipse.cdt.core.GASErrorParser" id="org.eclipse.cdt.build.core.settings.holder.libs.283188354" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>\r
- <tool errorParsers="org.eclipse.cdt.core.VCErrorParser;org.eclipse.cdt.core.GASErrorParser" id="org.eclipse.cdt.build.core.settings.holder.1363672131" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">\r
- <option id="org.eclipse.cdt.build.core.settings.holder.incpaths.818579882" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/arch/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/tools/RG-2017.8-win32/XtensaTools/lib/xcc/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/tools/RG-2017.8-win32/XtensaTools/xtensa-elf/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include/xcc/c++"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include/xcc/c++/xtensa-elf"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/Tensilica_Simulator_Xplorer_XCC"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/Common/include"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Source/include"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Source/portable/XCC/Xtensa"/>\r
- <listOptionValue builtIn="false" value=""../${workspace_loc:RTOSDemo\FreeRTOS_Source\include}""/>\r
- <listOptionValue builtIn="false" value=""../${workspace_loc:RTOSDemo\FreeRTOS_Source\portable\XCC}""/>\r
- <listOptionValue builtIn="false" value=""C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\Tensilica_Simulator_Xplorer_XCC""/>\r
- </option>\r
- <option id="org.eclipse.cdt.build.core.settings.holder.symbols.1072492848" name="Symbols" superClass="org.eclipse.cdt.build.core.settings.holder.symbols" valueType="definedSymbols">\r
- <listOptionValue builtIn="false" value="__CHAR_BIT__=8"/>\r
- <listOptionValue builtIn="false" value="__WCHAR_MAX__=65535U"/>\r
- <listOptionValue builtIn="false" value="__FLT_EVAL_METHOD__=0"/>\r
- <listOptionValue builtIn="false" value="__FINITE_MATH_ONLY__=0"/>\r
- <listOptionValue builtIn="false" value="__GNUC_PATCHLEVEL__=0"/>\r
- <listOptionValue builtIn="false" value="__SHRT_MAX__=32767"/>\r
- <listOptionValue builtIn="false" value="__UINTMAX_TYPE__=long"/>\r
- <listOptionValue builtIn="false" value="__CHAR_UNSIGNED__=1"/>\r
- <listOptionValue builtIn="false" value="__XCC__=12000"/>\r
- <listOptionValue builtIn="false" value="__SCHAR_MAX__=127"/>\r
- <listOptionValue builtIn="false" value="__USER_LABEL_PREFIX__"/>\r
- <listOptionValue builtIn="false" value="__STDC_HOSTED__=1"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_EL__=1"/>\r
- <listOptionValue builtIn="false" value="__XCC_MINOR__=8"/>\r
- <listOptionValue builtIn="false" value="__GNUC__=4"/>\r
- <listOptionValue builtIn="false" value="__LONG_LONG_MAX__=9223372036854775807LL"/>\r
- <listOptionValue builtIn="false" value="__GXX_ABI_VERSION=1002"/>\r
- <listOptionValue builtIn="false" value="__REGISTER_PREFIX__"/>\r
- <listOptionValue builtIn="false" value="__NO_INLINE__=1"/>\r
- <listOptionValue builtIn="false" value="__VERSION__="4.2.0"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_SOFT_FLOAT__=1"/>\r
- <listOptionValue builtIn="false" value="__SIZE_TYPE__=unsigned"/>\r
- <listOptionValue builtIn="false" value="__ELF__=1"/>\r
- <listOptionValue builtIn="false" value="__xtensa__=1"/>\r
- <listOptionValue builtIn="false" value="__LONG_MAX__=2147483647L"/>\r
- <listOptionValue builtIn="false" value="__WCHAR_TYPE__=short"/>\r
- <listOptionValue builtIn="false" value="__INT_MAX__=2147483647"/>\r
- <listOptionValue builtIn="false" value="__WINT_TYPE__=unsigned"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_WINDOWED_ABI__=1"/>\r
- <listOptionValue builtIn="false" value="__XTENSA__=1"/>\r
- <listOptionValue builtIn="false" value="__INTMAX_MAX__=9223372036854775807LL"/>\r
- <listOptionValue builtIn="false" value="__INTMAX_TYPE__=long"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_SOFT_DOUBLE__=1"/>\r
- <listOptionValue builtIn="false" value="__GNUC_MINOR__=2"/>\r
- <listOptionValue builtIn="false" value="__STDC__=1"/>\r
- <listOptionValue builtIn="false" value="__PTRDIFF_TYPE__=int"/>\r
- <listOptionValue builtIn="false" value="__GNUC_GNU_INLINE__=1"/>\r
- </option>\r
- <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1208833786" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>\r
- </tool>\r
- <tool errorParsers="org.eclipse.cdt.core.VCErrorParser;org.eclipse.cdt.core.GASErrorParser" id="org.eclipse.cdt.build.core.settings.holder.29534978" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">\r
- <option id="org.eclipse.cdt.build.core.settings.holder.incpaths.1529034681" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/arch/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/tools/RG-2017.8-win32/XtensaTools/lib/xcc/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/tools/RG-2017.8-win32/XtensaTools/xtensa-elf/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include/xcc/c++"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include/xcc/c++/xtensa-elf"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/Tensilica_Simulator_Xplorer_XCC"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/Common/include"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Source/include"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Source/portable/XCC/Xtensa"/>\r
- <listOptionValue builtIn="false" value=""../${workspace_loc:RTOSDemo\FreeRTOS_Source\include}""/>\r
- <listOptionValue builtIn="false" value=""../${workspace_loc:RTOSDemo\FreeRTOS_Source\portable\XCC}""/>\r
- <listOptionValue builtIn="false" value=""C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\Tensilica_Simulator_Xplorer_XCC""/>\r
- </option>\r
- <option id="org.eclipse.cdt.build.core.settings.holder.symbols.459736431" name="Symbols" superClass="org.eclipse.cdt.build.core.settings.holder.symbols" valueType="definedSymbols">\r
- <listOptionValue builtIn="false" value="__CHAR_BIT__=8"/>\r
- <listOptionValue builtIn="false" value="__WCHAR_MAX__=65535U"/>\r
- <listOptionValue builtIn="false" value="__FLT_EVAL_METHOD__=0"/>\r
- <listOptionValue builtIn="false" value="__FINITE_MATH_ONLY__=0"/>\r
- <listOptionValue builtIn="false" value="__GNUC_PATCHLEVEL__=0"/>\r
- <listOptionValue builtIn="false" value="__SHRT_MAX__=32767"/>\r
- <listOptionValue builtIn="false" value="__UINTMAX_TYPE__=long"/>\r
- <listOptionValue builtIn="false" value="__CHAR_UNSIGNED__=1"/>\r
- <listOptionValue builtIn="false" value="__XCC__=12000"/>\r
- <listOptionValue builtIn="false" value="__SCHAR_MAX__=127"/>\r
- <listOptionValue builtIn="false" value="__USER_LABEL_PREFIX__"/>\r
- <listOptionValue builtIn="false" value="__STDC_HOSTED__=1"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_EL__=1"/>\r
- <listOptionValue builtIn="false" value="__XCC_MINOR__=8"/>\r
- <listOptionValue builtIn="false" value="__GNUC__=4"/>\r
- <listOptionValue builtIn="false" value="__LONG_LONG_MAX__=9223372036854775807LL"/>\r
- <listOptionValue builtIn="false" value="__GXX_ABI_VERSION=1002"/>\r
- <listOptionValue builtIn="false" value="__REGISTER_PREFIX__"/>\r
- <listOptionValue builtIn="false" value="__NO_INLINE__=1"/>\r
- <listOptionValue builtIn="false" value="__VERSION__="4.2.0"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_SOFT_FLOAT__=1"/>\r
- <listOptionValue builtIn="false" value="__SIZE_TYPE__=unsigned"/>\r
- <listOptionValue builtIn="false" value="__ELF__=1"/>\r
- <listOptionValue builtIn="false" value="__xtensa__=1"/>\r
- <listOptionValue builtIn="false" value="__LONG_MAX__=2147483647L"/>\r
- <listOptionValue builtIn="false" value="__WCHAR_TYPE__=short"/>\r
- <listOptionValue builtIn="false" value="__INT_MAX__=2147483647"/>\r
- <listOptionValue builtIn="false" value="__WINT_TYPE__=unsigned"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_WINDOWED_ABI__=1"/>\r
- <listOptionValue builtIn="false" value="__XTENSA__=1"/>\r
- <listOptionValue builtIn="false" value="__INTMAX_MAX__=9223372036854775807LL"/>\r
- <listOptionValue builtIn="false" value="__INTMAX_TYPE__=long"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_SOFT_DOUBLE__=1"/>\r
- <listOptionValue builtIn="false" value="__GNUC_MINOR__=2"/>\r
- <listOptionValue builtIn="false" value="__STDC__=1"/>\r
- <listOptionValue builtIn="false" value="__PTRDIFF_TYPE__=int"/>\r
- <listOptionValue builtIn="false" value="__GNUC_GNU_INLINE__=1"/>\r
- </option>\r
- <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1865337768" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>\r
- </tool>\r
- <tool errorParsers="org.eclipse.cdt.core.VCErrorParser;org.eclipse.cdt.core.GASErrorParser" id="org.eclipse.cdt.build.core.settings.holder.541186543" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">\r
- <option id="org.eclipse.cdt.build.core.settings.holder.incpaths.2101310742" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/arch/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/tools/RG-2017.8-win32/XtensaTools/lib/xcc/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/tools/RG-2017.8-win32/XtensaTools/xtensa-elf/include"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include/xcc/c++"/>\r
- <listOptionValue builtIn="false" value="C:/devtools/xtensa/XtDevTools/install/builds/RG-2017.8-win32/sample_controller/xtensa-elf/include/xcc/c++/xtensa-elf"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/Tensilica_Simulator_Xplorer_XCC"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/Common/include"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Source/include"/>\r
- <listOptionValue builtIn="false" value="C:/Users/ribarry/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Source/portable/XCC/Xtensa"/>\r
- <listOptionValue builtIn="false" value=""../${workspace_loc:RTOSDemo\FreeRTOS_Source\include}""/>\r
- <listOptionValue builtIn="false" value=""../${workspace_loc:RTOSDemo\FreeRTOS_Source\portable\XCC}""/>\r
- <listOptionValue builtIn="false" value=""C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\Tensilica_Simulator_Xplorer_XCC""/>\r
- </option>\r
- <option id="org.eclipse.cdt.build.core.settings.holder.symbols.740810983" name="Symbols" superClass="org.eclipse.cdt.build.core.settings.holder.symbols" valueType="definedSymbols">\r
- <listOptionValue builtIn="false" value="__CHAR_BIT__=8"/>\r
- <listOptionValue builtIn="false" value="__WCHAR_MAX__=65535U"/>\r
- <listOptionValue builtIn="false" value="__FLT_EVAL_METHOD__=0"/>\r
- <listOptionValue builtIn="false" value="__FINITE_MATH_ONLY__=0"/>\r
- <listOptionValue builtIn="false" value="__GNUC_PATCHLEVEL__=0"/>\r
- <listOptionValue builtIn="false" value="__SHRT_MAX__=32767"/>\r
- <listOptionValue builtIn="false" value="__UINTMAX_TYPE__=long"/>\r
- <listOptionValue builtIn="false" value="__CHAR_UNSIGNED__=1"/>\r
- <listOptionValue builtIn="false" value="__XCC__=12000"/>\r
- <listOptionValue builtIn="false" value="__SCHAR_MAX__=127"/>\r
- <listOptionValue builtIn="false" value="__USER_LABEL_PREFIX__"/>\r
- <listOptionValue builtIn="false" value="__STDC_HOSTED__=1"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_EL__=1"/>\r
- <listOptionValue builtIn="false" value="__XCC_MINOR__=8"/>\r
- <listOptionValue builtIn="false" value="__GNUC__=4"/>\r
- <listOptionValue builtIn="false" value="__LONG_LONG_MAX__=9223372036854775807LL"/>\r
- <listOptionValue builtIn="false" value="__GXX_ABI_VERSION=1002"/>\r
- <listOptionValue builtIn="false" value="__REGISTER_PREFIX__"/>\r
- <listOptionValue builtIn="false" value="__NO_INLINE__=1"/>\r
- <listOptionValue builtIn="false" value="__VERSION__="4.2.0"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_SOFT_FLOAT__=1"/>\r
- <listOptionValue builtIn="false" value="__SIZE_TYPE__=unsigned"/>\r
- <listOptionValue builtIn="false" value="__ELF__=1"/>\r
- <listOptionValue builtIn="false" value="__xtensa__=1"/>\r
- <listOptionValue builtIn="false" value="__LONG_MAX__=2147483647L"/>\r
- <listOptionValue builtIn="false" value="__WCHAR_TYPE__=short"/>\r
- <listOptionValue builtIn="false" value="__INT_MAX__=2147483647"/>\r
- <listOptionValue builtIn="false" value="__WINT_TYPE__=unsigned"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_WINDOWED_ABI__=1"/>\r
- <listOptionValue builtIn="false" value="__XTENSA__=1"/>\r
- <listOptionValue builtIn="false" value="__INTMAX_MAX__=9223372036854775807LL"/>\r
- <listOptionValue builtIn="false" value="__INTMAX_TYPE__=long"/>\r
- <listOptionValue builtIn="false" value="__XTENSA_SOFT_DOUBLE__=1"/>\r
- <listOptionValue builtIn="false" value="__GNUC_MINOR__=2"/>\r
- <listOptionValue builtIn="false" value="__STDC__=1"/>\r
- <listOptionValue builtIn="false" value="__PTRDIFF_TYPE__=int"/>\r
- <listOptionValue builtIn="false" value="__GNUC_GNU_INLINE__=1"/>\r
- </option>\r
- <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1982908514" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>\r
- </tool>\r
- </toolChain>\r
- </folderInfo>\r
- </configuration>\r
- </storageModule>\r
- <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="Xtensa.600602548" moduleId="org.eclipse.cdt.core.settings" name="Xtensa">\r
- <externalSettings/>\r
- <extensions>\r
- <extension id="com.tensilica.xide.cdt.XtensaELF" point="org.eclipse.cdt.core.BinaryParser"/>\r
- <extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
- <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
- <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>\r
- <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
- <extension id="com.tensilica.xide.cdt.FlexLmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
- <extension id="com.tensilica.xide.cdt.TCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
- <extension id="com.tensilica.xide.cdt.XtLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
- <extension id="com.tensilica.xide.cdt.XCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
- </extensions>\r
- </storageModule>\r
- <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
- </cconfiguration>\r
- </storageModule>\r
- <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
- <project id="RTOSDemo.null.2024905137" name="RTOSDemo"/>\r
- </storageModule>\r
- <storageModule moduleId="scannerConfiguration">\r
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>\r
- <scannerConfigBuildInfo instanceId="Xtensa.600602548">\r
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>\r
- </scannerConfigBuildInfo>\r
- </storageModule>\r
-</cproject>\r
<type>1</type>\r
<locationURI>PARENT-1-PROJECT_LOC/Common/Minimal/GenQTest.c</locationURI>\r
</link>\r
+ <link>\r
+ <name>CommonDemoTasks/IntQueue.c</name>\r
+ <type>1</type>\r
+ <locationURI>PARENT-1-PROJECT_LOC/Common/Minimal/IntQueue.c</locationURI>\r
+ </link>\r
<link>\r
<name>CommonDemoTasks/IntSemTest.c</name>\r
<type>1</type>\r
<type>1</type>\r
<locationURI>PARENT-1-PROJECT_LOC/Common/Minimal/death.c</locationURI>\r
</link>\r
- <link>\r
- <name>CommonDemoTasks/dynamic.c</name>\r
- <type>1</type>\r
- <locationURI>PARENT-1-PROJECT_LOC/Common/Minimal/dynamic.c</locationURI>\r
- </link>\r
<link>\r
<name>CommonDemoTasks/flop.c</name>\r
<type>1</type>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/port.c</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/port.c</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/port.c</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/portasm.S</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/portasm.S</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/portasm.S</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/portbenchmark.h</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/portbenchmark.h</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/portbenchmark.h</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/portclib.c</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/portclib.c</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/portclib.c</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/portmacro.h</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/portmacro.h</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/portmacro.h</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/porttrace.h</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/porttrace.h</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/porttrace.h</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/readme_xtensa.txt</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/readme_xtensa.txt</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/readme_xtensa.txt</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_api.h</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_api.h</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_api.h</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_config.h</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_config.h</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_config.h</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_context.S</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_context.S</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_context.S</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_context.h</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_context.h</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_context.h</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_init.c</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_init.c</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_init.c</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_intr.c</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_intr.c</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_intr.c</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_intr_asm.S</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_intr_asm.S</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_intr_asm.S</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_overlay_os_hook.c</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_overlay_os_hook.c</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_overlay_os_hook.c</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_rtos.h</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_rtos.h</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_rtos.h</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_timer.h</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_timer.h</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_timer.h</locationURI>\r
</link>\r
<link>\r
<name>FreeRTOS_Source/portable/XCC/xtensa_vectors.S</name>\r
<type>1</type>\r
- <locationURI>PARENT-2-PROJECT_LOC/Source/portable/XCC/Xtensa/xtensa_vectors.S</locationURI>\r
+ <locationURI>PARENT-2-PROJECT_LOC/Source/portable/ThirdParty/XCC/Xtensa/xtensa_vectors.S</locationURI>\r
</link>\r
</linkedResources>\r
</projectDescription>\r
#define FREERTOS_CONFIG_H\r
\r
\r
-/* Required for configuration-dependent settings */\r
+/* Required for configuration-dependent settings. */\r
#include "xtensa_config.h"\r
\r
-/*-----------------------------------------------------------\r
+/*---------------------------------------------------------------------------\r
* Application specific definitions.\r
*\r
* These definitions should be adjusted for your particular hardware and\r
* application requirements.\r
*\r
- * Note that the default heap size is deliberately kept small so that\r
- * the build is more likely to succeed for configurations with limited\r
- * memory.\r
- *\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
- *----------------------------------------------------------*/\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ *---------------------------------------------------------------------------\r
+ */\r
\r
-#define configUSE_PREEMPTION 1\r
-#define configUSE_IDLE_HOOK 0\r
+#define configUSE_PREEMPTION 1\r
+#define configUSE_IDLE_HOOK 0\r
\r
#ifdef SMALL_TEST\r
-#define configUSE_TICK_HOOK 0\r
+ #define configUSE_TICK_HOOK 0\r
#else\r
-#define configUSE_TICK_HOOK 1\r
+ #define configUSE_TICK_HOOK 1\r
#endif\r
\r
-#define configTICK_RATE_HZ ( 1000 )\r
+#define configTICK_RATE_HZ ( 1000 )\r
\r
/* Default clock rate for simulator */\r
-#define configCPU_CLOCK_HZ 10000000 //_RB_ was 2MHz\r
+#define configCPU_CLOCK_HZ 10000000\r
\r
-/* This has impact on speed of search for highest priority */\r
-#ifdef SMALL_TEST\r
-#define configMAX_PRIORITIES ( 7 )\r
-#else\r
-#define configMAX_PRIORITIES ( 7 ) //_RB_\r
-#endif\r
+/* Max possible priorities. */\r
+#define configMAX_PRIORITIES ( 7 )\r
\r
-/* Minimal stack size. This may need to be increased for your application */\r
-/* NOTE: The FreeRTOS demos may not work reliably with stack size < 4KB. */\r
-/* The Xtensa-specific examples should be fine with XT_STACK_MIN_SIZE. */\r
-/* NOTE: the size is defined in terms of StackType_t units not bytes. */\r
-#if !(defined XT_STACK_MIN_SIZE)\r
-#error XT_STACK_MIN_SIZE not defined, did you include xtensa_config.h ?\r
+/**\r
+ * Minimal stack size. This may need to be increased for your application.\r
+ *\r
+ * @note: The FreeRTOS demos may not work reliably with stack size < 4KB. The\r
+ * Xtensa-specific examples should be fine with XT_STACK_MIN_SIZE.\r
+ *\r
+ * @note: The size is defined in terms of StackType_t units not bytes.\r
+ */\r
+#if !( defined XT_STACK_MIN_SIZE )\r
+ #error XT_STACK_MIN_SIZE not defined, did you include xtensa_config.h ?\r
#endif\r
\r
#ifdef SMALL_TEST\r
-#define configMINIMAL_STACK_SIZE (XT_STACK_MIN_SIZE / sizeof(StackType_t))\r
+ #define configMINIMAL_STACK_SIZE ( XT_STACK_MIN_SIZE / sizeof( StackType_t ) )\r
#else\r
-#define configMINIMAL_STACK_SIZE (XT_STACK_MIN_SIZE > 1024 ? XT_STACK_MIN_SIZE : 1024)\r
+ #define configMINIMAL_STACK_SIZE ( XT_STACK_MIN_SIZE > 1024 ? XT_STACK_MIN_SIZE : 1024 )\r
#endif\r
\r
-/* The Xtensa port uses a separate interrupt stack. Adjust the stack size */\r
-/* to suit the needs of your specific application. */\r
-/* NOTE: the size is defined in bytes. */\r
+/**\r
+ * The Xtensa port uses a separate interrupt stack. Adjust the stack size to\r
+ * suit the needs of your specific application.\r
+ *\r
+ * @note: the size is defined in bytes.\r
+ */\r
#ifndef configISR_STACK_SIZE\r
-#define configISR_STACK_SIZE 2048\r
+ #define configISR_STACK_SIZE 2048\r
#endif\r
\r
-/* Minimal heap size to make sure examples can run on memory limited\r
- configs. Adjust this to suit your system. */\r
+/**\r
+ * Minimal heap size to make sure examples can run on memory limited configs.\r
+ * Adjust this to suit your system.\r
+ */\r
#ifdef SMALL_TEST\r
-#define configTOTAL_HEAP_SIZE ( ( size_t ) (16 * 1024) )\r
+ #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 16 * 1024 ) )\r
#else\r
-#define configTOTAL_HEAP_SIZE ( ( size_t ) (512 * 1024) )\r
+ #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 512 * 1024 ) )\r
#endif\r
\r
-#define configMAX_TASK_NAME_LEN ( 8 )\r
-#define configUSE_TRACE_FACILITY 0 /* Used by vTaskList in main.c */\r
-#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* Used by vTaskList in main.c */\r
-#define configUSE_TRACE_FACILITY_2 0 /* Provided by Xtensa port patch */\r
-#define configBENCHMARK 0 /* Provided by Xtensa port patch */\r
-#define configUSE_16_BIT_TICKS 0\r
-#define configIDLE_SHOULD_YIELD 0\r
-#define configQUEUE_REGISTRY_SIZE 0\r
+#define configMAX_TASK_NAME_LEN ( 8 )\r
+#define configUSE_TRACE_FACILITY 0\r
+#define configUSE_STATS_FORMATTING_FUNCTIONS 0\r
+#define configUSE_TRACE_FACILITY_2 0 /* Provided by Xtensa port patch. */\r
+#define configBENCHMARK 0 /* Provided by Xtensa port patch. */\r
+#define configUSE_16_BIT_TICKS 0\r
+#define configIDLE_SHOULD_YIELD 0\r
+#define configQUEUE_REGISTRY_SIZE 0\r
\r
#ifdef SMALL_TEST\r
-#define configUSE_MUTEXES 1\r
-#define configUSE_RECURSIVE_MUTEXES 1\r
-#define configUSE_COUNTING_SEMAPHORES 1\r
-#define configCHECK_FOR_STACK_OVERFLOW 0\r
+ #define configUSE_MUTEXES 1\r
+ #define configUSE_RECURSIVE_MUTEXES 1\r
+ #define configUSE_COUNTING_SEMAPHORES 1\r
+ #define configCHECK_FOR_STACK_OVERFLOW 0\r
#else\r
-#define configUSE_MUTEXES 1\r
-#define configUSE_RECURSIVE_MUTEXES 1\r
-#define configUSE_COUNTING_SEMAPHORES 1\r
-#define configCHECK_FOR_STACK_OVERFLOW 2\r
+ #define configUSE_MUTEXES 1\r
+ #define configUSE_RECURSIVE_MUTEXES 1\r
+ #define configUSE_COUNTING_SEMAPHORES 1\r
+ #define configCHECK_FOR_STACK_OVERFLOW 2\r
#endif\r
\r
/* Co-routine definitions. */\r
-#define configUSE_CO_ROUTINES 0\r
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
-\r
-/* Set the following definitions to 1 to include the API function, or zero\r
- to exclude the API function. */\r
-#define INCLUDE_vTaskPrioritySet 1\r
-#define INCLUDE_uxTaskPriorityGet 1\r
-#define INCLUDE_vTaskDelete 1\r
-#define INCLUDE_vTaskCleanUpResources 0\r
-#define INCLUDE_vTaskSuspend 1\r
-#define INCLUDE_vTaskDelayUntil 1\r
-#define INCLUDE_vTaskDelay 1\r
-#define INCLUDE_uxTaskGetStackHighWaterMark 1\r
-#define INCLUDE_xTaskAbortDelay 1\r
-#define INCLUDE_xTaskGetHandle 1\r
-#define INCLUDE_xSemaphoreGetMutexHolder 1\r
-\r
-/* The priority at which the tick interrupt runs. This should probably be\r
- kept at 1. */\r
-#define configKERNEL_INTERRUPT_PRIORITY 1\r
-\r
-/* The maximum interrupt priority from which FreeRTOS.org API functions can\r
- be called. Only API functions that end in ...FromISR() can be used within\r
- interrupts. */\r
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY XCHAL_EXCM_LEVEL\r
-\r
-/* XT_USE_THREAD_SAFE_CLIB is defined in xtensa_config.h and can be\r
- overridden from the compiler/make command line. The small test\r
- however always disables C lib thread safety to minimize size. */\r
+#define configUSE_CO_ROUTINES 0\r
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
+\r
+/**\r
+ * Set the following definitions to 1 to include the API function, or zero to\r
+ * exclude the API function.\r
+ */\r
+#define INCLUDE_vTaskPrioritySet 1\r
+#define INCLUDE_uxTaskPriorityGet 1\r
+#define INCLUDE_vTaskDelete 1\r
+#define INCLUDE_vTaskCleanUpResources 0\r
+#define INCLUDE_vTaskSuspend 1\r
+#define INCLUDE_vTaskDelayUntil 1\r
+#define INCLUDE_vTaskDelay 1\r
+#define INCLUDE_uxTaskGetStackHighWaterMark 1\r
+#define INCLUDE_xTaskAbortDelay 1\r
+#define INCLUDE_xTaskGetHandle 1\r
+#define INCLUDE_xSemaphoreGetMutexHolder 1\r
+\r
+/**\r
+ * The priority at which the tick interrupt runs. This should probably be kept\r
+ * at 1.\r
+ */\r
+#define configKERNEL_INTERRUPT_PRIORITY 1\r
+\r
+/**\r
+ * The maximum interrupt priority from which FreeRTOS.org API functions can be\r
+ * called. Only API functions that end in ...FromISR() can be used within\r
+ * interrupts.\r
+ */\r
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY XCHAL_EXCM_LEVEL\r
+\r
+/**\r
+ * XT_USE_THREAD_SAFE_CLIB is defined in xtensa_config.h and can be overridden\r
+ * from the compiler/make command line. The small test however always disables C\r
+ * lib thread safety to minimize size.\r
+ */\r
#ifdef SMALL_TEST\r
- #define configUSE_NEWLIB_REENTRANT 0\r
-#else\r
-#if (XT_USE_THREAD_SAFE_CLIB > 0u)\r
- #if XT_HAVE_THREAD_SAFE_CLIB\r
- #define configUSE_NEWLIB_REENTRANT 0 //_RB_ 1\r
- #else\r
- #error "Error: thread-safe C library support not available for this C library."\r
- #endif\r
+ #define configUSE_NEWLIB_REENTRANT 0\r
#else\r
- #define configUSE_NEWLIB_REENTRANT 0\r
-#endif\r
+ #if ( XT_USE_THREAD_SAFE_CLIB > 0u )\r
+ #if XT_HAVE_THREAD_SAFE_CLIB\r
+ #define configUSE_NEWLIB_REENTRANT 0\r
+ #else\r
+ #error "Error: thread-safe C library support not available for this C library."\r
+ #endif\r
+ #else\r
+ #define configUSE_NEWLIB_REENTRANT 0\r
+ #endif\r
#endif\r
\r
/* Test FreeRTOS timers (with timer task) and more. */\r
-/* Some files don't compile if this flag is disabled */\r
-#define configUSE_TIMERS 1\r
-#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 2 )\r
-#define configTIMER_QUEUE_LENGTH 10\r
-#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE\r
+#define configUSE_TIMERS 1\r
+#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 2 )\r
+#define configTIMER_QUEUE_LENGTH 10\r
+#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE\r
\r
#ifdef SMALL_TEST\r
-#define INCLUDE_xTimerPendFunctionCall 0\r
-#define INCLUDE_eTaskGetState 0\r
-#define configUSE_QUEUE_SETS 0\r
+ #define INCLUDE_xTimerPendFunctionCall 0\r
+ #define INCLUDE_eTaskGetState 0\r
+ #define configUSE_QUEUE_SETS 0\r
#else\r
-#define INCLUDE_xTimerPendFunctionCall 1\r
-#define INCLUDE_eTaskGetState 1\r
-#define configUSE_QUEUE_SETS 1\r
+ #define INCLUDE_xTimerPendFunctionCall 1\r
+ #define INCLUDE_eTaskGetState 1\r
+ #define configUSE_QUEUE_SETS 1\r
#endif\r
\r
-/* Specific config for XTENSA (these can be deleted and they will take default values) */\r
-\r
-#if (!defined XT_SIMULATOR) && (!defined XT_BOARD)\r
-#define configXT_SIMULATOR 1 /* Simulator mode */\r
-#define configXT_BOARD 0 /* Board mode */\r
+/**\r
+ * Specific config for XTENSA (these can be deleted and they will take default\r
+ * values).\r
+ */\r
+#if ( !defined XT_SIMULATOR ) && ( !defined XT_BOARD )\r
+ #define configXT_SIMULATOR 1 /* Simulator mode. */\r
+ #define configXT_BOARD 0 /* Board mode. */\r
#endif\r
\r
#ifndef SMALL_TEST\r
+ #if ( !defined XT_INTEXC_HOOKS )\r
+ #define configXT_INTEXC_HOOKS 1 /* Exception hooks used by certain tests. */\r
+ #endif\r
\r
-#if (!defined XT_INTEXC_HOOKS)\r
-#define configXT_INTEXC_HOOKS 1 /* Exception hooks used by certain tests */\r
-#endif\r
-\r
-#if configUSE_TRACE_FACILITY_2\r
-#define configASSERT_2 1 /* Specific to Xtensa port */\r
+ #if configUSE_TRACE_FACILITY_2\r
+ #define configASSERT_2 1 /* Specific to Xtensa port. */\r
+ #endif\r
#endif\r
\r
-#endif\r
-\r
-/* It is a good idea to define configASSERT() while developing. configASSERT()\r
-uses the same semantics as the standard C assert() macro. */\r
+/**\r
+ * It is a good idea to define configASSERT() while developing. configASSERT()\r
+ * uses the same semantics as the standard C assert() macro.\r
+ */\r
#if !defined __ASSEMBLER__\r
extern void vAssertCalled( unsigned long ulLine, const char * const pcFileName );\r
#endif\r
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __LINE__, __FILE__ )\r
\r
-#define configSTREAM_BUFFER_TRIGGER_LEVEL_TEST_MARGIN ( 2 )\r
+#define configSTREAM_BUFFER_TRIGGER_LEVEL_TEST_MARGIN ( 2 ) /* Used by stream buffer tests. */\r
\r
#endif /* FREERTOS_CONFIG_H */\r
-\r
\r
/* Check if Timer1 is available. */\r
#if XCHAL_TIMER1_INTERRUPT != XTHAL_TIMER_UNCONFIGURED\r
- #if XCHAL_INT_LEVEL(XCHAL_TIMER1_INTERRUPT) <= XCHAL_EXCM_LEVEL\r
- #define SECOND_TIMER_AVAILABLE 1\r
+ #if XCHAL_INT_LEVEL( XCHAL_TIMER1_INTERRUPT ) <= XCHAL_EXCM_LEVEL\r
+ #define SECOND_TIMER_AVAILABLE 1\r
#endif\r
#endif\r
\r
#ifndef SECOND_TIMER_AVAILABLE\r
- #define SECOND_TIMER_AVAILABLE 0\r
+ #define SECOND_TIMER_AVAILABLE 0\r
#endif\r
\r
-/* Timer0 is used to drive systick and therefore we use Timer1\r
+/**\r
+ * Timer0 is used to drive systick and therefore we use Timer1\r
* as second interrupt which runs on a higher priority than\r
* Timer0. This ensures that systick will get interrupted by\r
- * this timer and hence we can test interrupt nesting. */\r
-#define SECOND_TIMER_INDEX 1\r
+ * this timer and hence we can test interrupt nesting.\r
+ */\r
+#define SECOND_TIMER_INDEX 1\r
\r
-/* Frequency of the second timer - This timer is configured at\r
- * a frequency offset of 17 from the systick timer. */\r
-#define SECOND_TIMER_TICK_RATE_HZ ( configTICK_RATE_HZ + 17 )\r
-#define SECOND_TIMER_TICK_DIVISOR ( configCPU_CLOCK_HZ / SECOND_TIMER_TICK_RATE_HZ )\r
+/**\r
+ * Frequency of the second timer - This timer is configured at\r
+ * a frequency offset of 17 from the systick timer.\r
+ */\r
+#define SECOND_TIMER_TICK_RATE_HZ ( configTICK_RATE_HZ + 17 )\r
+#define SECOND_TIMER_TICK_DIVISOR ( configCPU_CLOCK_HZ / SECOND_TIMER_TICK_RATE_HZ )\r
/*-----------------------------------------------------------*/\r
\r
/* Defined in main_full.c. */\r
extern BaseType_t xTimerForQueueTestInitialized;\r
/*-----------------------------------------------------------*/\r
\r
-/* Interrupt handler for timer interrupt. */\r
+/**\r
+ * Interrupt handler for timer interrupt.\r
+ */\r
#if( SECOND_TIMER_AVAILABLE == 1 )\r
static void prvTimer2Handler( void *arg );\r
#endif /* SECOND_TIMER_AVAILABLE */\r
/*-----------------------------------------------------------*/\r
\r
/*\r
- * Xtensa timers work by comparing a cycle counter with a preset value. Once the match occurs\r
- * an interrupt is generated, and the handler has to set a new cycle count into the comparator.\r
- * To avoid clock drift due to interrupt latency, the new cycle count is computed from the old,\r
- * not the time the interrupt was serviced. However if a timer interrupt is ever serviced more\r
- * than one tick late, it is necessary to process multiple ticks until the new cycle count is\r
- * in the future, otherwise the next timer interrupt would not occur until after the cycle\r
- * counter had wrapped (2^32 cycles later).\r
+ * Xtensa timers work by comparing a cycle counter with a preset value.\r
+ * Once the match occurs an interrupt is generated, and the handler has\r
+ * to set a new cycle count into the comparator. To avoid clock drift\r
+ * due to interrupt latency, the new cycle count is computed from the\r
+ * old, not the time the interrupt was serviced. However if a timer\r
+ * interrupt is ever serviced more than one tick late, it is necessary\r
+ * to process multiple ticks until the new cycle count is in the future,\r
+ * otherwise the next timer interrupt would not occur until after the\r
+ * cycle counter had wrapped (2^32 cycles later).\r
\r
do {\r
ticks++;\r
#ifndef INT_QUEUE_TIMER_H\r
#define INT_QUEUE_TIMER_H\r
\r
+/**\r
+ * The function called from interrupt tests to initialise timer.\r
+ */\r
void vInitialiseTimerForIntQueueTest( void );\r
-void vTimer2Handler_C( void );\r
\r
#endif /* INT_QUEUE_TIMER_H */\r
-\r
*/\r
\r
/******************************************************************************\r
- * This project provides two demo applications. A simple blinky style project,\r
- * and a more comprehensive test and demo application. The\r
- * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is used to select between the two.\r
- * The simply blinky demo is implemented and described in main_blinky.c. The\r
- * more comprehensive test and demo application is implemented and described in\r
- * main_full.c.\r
+ * This project provides two demo applications:\r
+ * - A simple blinky style demo application.\r
+ * - A more comprehensive test and demo application.\r
+ * The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY macro is used to select between the two.\r
*\r
- * This file implements the code that is not demo specific, including the\r
- * hardware setup and FreeRTOS hook functions.\r
+ * The simply blinky demo is implemented and described in the file main_blinky.c.\r
+ * The more comprehensive test and demo application is implemented and described\r
+ * in the file main_full.c.\r
+ *\r
+ * This file implements the code that is not demo specific, including the FreeRTOS\r
+ * hook functions.\r
*\r
*******************************************************************************\r
*/\r
#include "FreeRTOS.h"\r
#include "task.h"\r
\r
-/* This project provides two demo applications. A simple blinky style demo\r
-application, and a more comprehensive test and demo application. The\r
-mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is used to select between the two.\r
-\r
-If mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is 1 then the blinky demo will be built.\r
-The blinky demo is implemented and described in main_blinky.c.\r
-\r
-If mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is not 1 then the comprehensive test and\r
-demo application will be built. The comprehensive test and demo application is\r
-implemented and described in main_full.c. */\r
+/**\r
+ * This project provides two demo applications:\r
+ * - A simple blinky style demo application.\r
+ * - A more comprehensive test and demo application.\r
+ * The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY macro is used to select between the two.\r
+ *\r
+ * If mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1 then the blinky demo will be\r
+ * built. The blinky demo is implemented and described in main_blinky.c.\r
+ *\r
+ * If mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0 then the comprehensive test\r
+ * and demo application will be built. The comprehensive test and demo application\r
+ * is implemented and described in main_full.c.\r
+ */\r
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 0\r
-\r
/*-----------------------------------------------------------*/\r
\r
-/*\r
- * main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.\r
- * main_full() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.\r
+/**\r
+ * The entry function for the blinky demo application.\r
+ *\r
+ * This is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.\r
*/\r
extern void main_blinky( void );\r
+\r
+/**\r
+ * The entry function for the comprehensive test and demo application.\r
+ *\r
+ * This is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.\r
+ */\r
extern void main_full( void );\r
\r
-/*\r
+/**\r
* Prototypes for the standard FreeRTOS application hook (callback) functions\r
- * implemented within this file. See http://www.freertos.org/a00016.html .\r
+ * implemented within this file.\r
+ *\r
+ * @see http://www.freertos.org/a00016.html\r
*/\r
void vApplicationMallocFailedHook( void );\r
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );\r
void vApplicationTickHook( void );\r
\r
-/*\r
- * Only the comprehensive demo uses application hook (callback) functions. See\r
- * http://www.freertos.org/a00016.html for more information.\r
+/**\r
+ * The function called from the tick hook.\r
+ *\r
+ * @note Only the comprehensive demo uses application hook (callback) functions.\r
+ *\r
+ * @see http://www.freertos.org/a00016.html\r
*/\r
void vFullDemoTickHookFunction( void );\r
-\r
-\r
/*-----------------------------------------------------------*/\r
\r
int main( void )\r
{\r
/* The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is described at the top\r
- of this file. */\r
+ * of this file. */\r
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )\r
{\r
main_blinky();\r
void vApplicationMallocFailedHook( void )\r
{\r
/* vApplicationMallocFailedHook() will only be called if\r
- configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook\r
- function that will get called if a call to pvPortMalloc() fails.\r
- pvPortMalloc() is called internally by the kernel whenever a task, queue,\r
- timer or semaphore is created. It is also called by various parts of the\r
- demo application. If heap_1.c, heap_2.c or heap_4.c is being used, then the\r
- size of the heap available to pvPortMalloc() is defined by\r
- configTOTAL_HEAP_SIZE in FreeRTOSConfig.h, and the xPortGetFreeHeapSize()\r
- API function can be used to query the size of free heap space that remains\r
- (although it does not provide information on how the remaining heap might be\r
- fragmented). See http://www.freertos.org/a00111.html for more\r
- information. */\r
+ * configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook\r
+ * function that will get called if a call to pvPortMalloc() fails.\r
+ * pvPortMalloc() is called internally by the kernel whenever a task, queue,\r
+ * timer or semaphore is created. It is also called by various parts of the\r
+ * demo application. If heap_1.c, heap_2.c or heap_4.c is being used, then\r
+ * the size of the heap available to pvPortMalloc() is defined by\r
+ * configTOTAL_HEAP_SIZE in FreeRTOSConfig.h, and the xPortGetFreeHeapSize()\r
+ * API function can be used to query the size of free heap space that remains\r
+ * (although it does not provide information on how the remaining heap might be\r
+ * fragmented). See http://www.freertos.org/a00111.html for more information.\r
+ */\r
vAssertCalled( __LINE__, __FILE__ );\r
}\r
/*-----------------------------------------------------------*/\r
( void ) pxTask;\r
\r
/* Run time stack overflow checking is performed if\r
- configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook\r
- function is called if a stack overflow is detected. This function is\r
- provided as an example only as stack overflow checking does not function\r
- when running the FreeRTOS Windows port. */\r
+ * configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook\r
+ * function is called if a stack overflow is detected. */\r
vAssertCalled( __LINE__, __FILE__ );\r
}\r
/*-----------------------------------------------------------*/\r
void vApplicationTickHook( void )\r
{\r
/* This function will be called by each tick interrupt if\r
- configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be\r
- added here, but the tick hook is called from an interrupt context, so\r
- code must not attempt to block, and only the interrupt safe FreeRTOS API\r
- functions can be used (those that end in FromISR()). */\r
-\r
+ * configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be\r
+ * added here, but the tick hook is called from an interrupt context, so\r
+ * code must not attempt to block, and only the interrupt safe FreeRTOS API\r
+ * functions can be used (those that end in FromISR()). */\r
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY != 1 )\r
{\r
vFullDemoTickHookFunction();\r
volatile uint32_t ulSetToNonZeroInDebuggerToContinue = 0;\r
\r
/* Called if an assertion passed to configASSERT() fails. See\r
- http://www.freertos.org/a00110.html#configASSERT for more information. */\r
+ * http://www.freertos.org/a00110.html#configASSERT for more information. */\r
\r
/* Parameters are not used. */\r
( void ) ulLine;\r
( void ) pcFileName;\r
\r
- printf( "ASSERT! Line %ld, file %s\r\n", ulLine, pcFileName );\r
-\r
- taskENTER_CRITICAL();\r
+ taskENTER_CRITICAL();\r
{\r
/* You can step out of this function to debug the assertion by using\r
- the debugger to set ulSetToNonZeroInDebuggerToContinue to a non-zero\r
- value. */\r
+ * the debugger to set ulSetToNonZeroInDebuggerToContinue to a non-zero\r
+ * value. */\r
while( ulSetToNonZeroInDebuggerToContinue == 0 )\r
{\r
__asm volatile( "NOP" );\r
*/\r
\r
/******************************************************************************\r
- * NOTE 1: Windows will not be running the FreeRTOS demo threads continuously, so\r
- * do not expect to get real time behaviour from the FreeRTOS Windows port, or\r
- * this demo application. Also, the timing information in the FreeRTOS+Trace\r
- * logs have no meaningful units. See the documentation page for the Windows\r
- * port for further information:\r
- * http://www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.html\r
- *\r
- * NOTE 2: This project provides two demo applications. A simple blinky style\r
- * project, and a more comprehensive test and demo application. The\r
- * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select\r
- * between the two. See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY\r
- * in main.c. This file implements the simply blinky version. Console output\r
- * is used in place of the normal LED toggling.\r
- *\r
- * NOTE 3: This file only contains the source code that is specific to the\r
+ * NOTE: This file only contains the source code that is specific to the\r
* basic demo. Generic functions, such FreeRTOS hook functions, are defined\r
* in main.c.\r
******************************************************************************\r
*\r
- * main_blinky() creates one queue, one software timer, and two tasks. It then\r
+ * main_blinky() creates one queue, one software timer, and two tasks. It then\r
* starts the scheduler.\r
*\r
* The Queue Send Task:\r
* The queue send task is implemented by the prvQueueSendTask() function in\r
* this file. It uses vTaskDelayUntil() to create a periodic task that sends\r
- * the value 100 to the queue every 200 milliseconds (please read the notes\r
- * above regarding the accuracy of timing under Windows).\r
+ * the value 100 to the queue every 200 milliseconds.\r
*\r
* The Queue Send Software Timer:\r
* The timer is an auto-reload timer with a period of two seconds. The timer's\r
* message to indicate if the data came from the queue send task or the queue\r
* send software timer.\r
*\r
- * Expected Behaviour:\r
+ * Expected Behavior:\r
* - The queue send task writes to the queue every 200ms, so every 200ms the\r
* queue receive task will output a message indicating that data was received\r
* on the queue from the queue send task.\r
- * - The queue send software timer has a period of two seconds, and is reset\r
- * each time a key is pressed. So if two seconds expire without a key being\r
- * pressed then the queue receive task will output a message indicating that\r
- * data was received on the queue from the queue send software timer.\r
- *\r
- * NOTE: Console input and output relies on Windows system calls, which can\r
- * interfere with the execution of the FreeRTOS Windows port. This demo only\r
- * uses Windows system call occasionally. Heavier use of Windows system calls\r
- * can crash the port.\r
+ * - The queue send software timer has a period of two seconds, so every two\r
+ * seconds the queue receive task will output a message indicating that data\r
+ * was received on the queue from the queue send software timer.\r
*/\r
\r
/* Standard includes. */\r
#include "timers.h"\r
#include "semphr.h"\r
\r
-/* Priorities at which the tasks are created. */\r
+/**\r
+ * Priorities at which the tasks are created.\r
+ */\r
#define mainQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )\r
#define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
\r
-/* The rate at which data is sent to the queue. The times are converted from\r
-milliseconds to ticks using the pdMS_TO_TICKS() macro. */\r
+/**\r
+ * The rate at which data is sent to the queue. The times are converted from\r
+ * milliseconds to ticks using the pdMS_TO_TICKS() macro.\r
+ */\r
#define mainTASK_SEND_FREQUENCY_MS pdMS_TO_TICKS( 200UL )\r
#define mainTIMER_SEND_FREQUENCY_MS pdMS_TO_TICKS( 2000UL )\r
\r
-/* The number of items the queue can hold at once. */\r
+/**\r
+ * The number of items the queue can hold at once.\r
+ */\r
#define mainQUEUE_LENGTH ( 2 )\r
\r
-/* The values sent to the queue receive task from the queue send task and the\r
-queue send software timer respectively. */\r
+/**\r
+ * The values sent to the queue receive task from the queue send task and the\r
+ * queue send software timer respectively.\r
+ */\r
#define mainVALUE_SENT_FROM_TASK ( 100UL )\r
#define mainVALUE_SENT_FROM_TIMER ( 200UL )\r
-\r
/*-----------------------------------------------------------*/\r
\r
-/*\r
+/**\r
* The tasks as described in the comments at the top of this file.\r
*/\r
static void prvQueueReceiveTask( void *pvParameters );\r
static void prvQueueSendTask( void *pvParameters );\r
\r
-/*\r
+/**\r
* The callback function executed when the software timer expires.\r
*/\r
static void prvQueueSendTimerCallback( TimerHandle_t xTimerHandle );\r
-\r
/*-----------------------------------------------------------*/\r
\r
-/* The queue used by both tasks. */\r
+/**\r
+ * The queue used by both tasks.\r
+ */\r
static QueueHandle_t xQueue = NULL;\r
\r
-/* A software timer that is started from the tick hook. */\r
+/**\r
+ * A software timer that is started from the tick hook.\r
+ */\r
static TimerHandle_t xTimer = NULL;\r
-\r
/*-----------------------------------------------------------*/\r
\r
-/*** SEE THE COMMENTS AT THE TOP OF THIS FILE ***/\r
void main_blinky( void )\r
{\r
const TickType_t xTimerPeriod = mainTIMER_SEND_FREQUENCY_MS;\r
if( xQueue != NULL )\r
{\r
/* Start the two tasks as described in the comments at the top of this\r
- file. */\r
+ * file. */\r
xTaskCreate( prvQueueReceiveTask, /* The function that implements the task. */\r
"Rx", /* The text name assigned to the task - for debug only as it is not used by the kernel. */\r
configMINIMAL_STACK_SIZE, /* The size of the stack to allocate to the task. */\r
}\r
\r
/* If all is well, the scheduler will now be running, and the following\r
- line will never be reached. If the following line does execute, then\r
- there was insufficient FreeRTOS heap memory available for the idle and/or\r
- timer tasks to be created. See the memory management section on the\r
- FreeRTOS web site for more details. */\r
+ * line will never be reached. If the following line does execute, then\r
+ * there was insufficient FreeRTOS heap memory available for the idle and/or\r
+ * timer tasks to be created. See the memory management section on the\r
+ * FreeRTOS web site for more details. */\r
for( ;; );\r
}\r
/*-----------------------------------------------------------*/\r
for( ;; )\r
{\r
/* Place this task in the blocked state until it is time to run again.\r
- The block time is specified in ticks, pdMS_TO_TICKS() was used to\r
- convert a time specified in milliseconds into a time specified in ticks.\r
- While in the Blocked state this task will not consume any CPU time. */\r
+ * The block time is specified in ticks, pdMS_TO_TICKS() was used to\r
+ * convert a time specified in milliseconds into a time specified in ticks.\r
+ * While in the Blocked state this task will not consume any CPU time. */\r
vTaskDelayUntil( &xNextWakeTime, xBlockTime );\r
\r
/* Send to the queue - causing the queue receive task to unblock and\r
- write to the console. 0 is used as the block time so the send operation\r
- will not block - it shouldn't need to block as the queue should always\r
- have at least one space at this point in the code. */\r
+ * write to the console. 0 is used as the block time so the send operation\r
+ * will not block - it shouldn't need to block as the queue should always\r
+ * have at least one space at this point in the code. */\r
xQueueSend( xQueue, &ulValueToSend, 0U );\r
}\r
}\r
const uint32_t ulValueToSend = mainVALUE_SENT_FROM_TIMER;\r
\r
/* This is the software timer callback function. The software timer has a\r
- period of two seconds and is reset each time a key is pressed. This\r
- callback function will execute if the timer expires, which will only happen\r
- if a key is not pressed for two seconds. */\r
+ * period of two seconds and is reset each time a key is pressed. This\r
+ * callback function will execute if the timer expires, which will only happen\r
+ * if a key is not pressed for two seconds. */\r
\r
/* Avoid compiler warnings resulting from the unused parameter. */\r
( void ) xTimerHandle;\r
\r
/* Send to the queue - causing the queue receive task to unblock and\r
- write out a message. This function is called from the timer/daemon task, so\r
- must not block. Hence the block time is set to 0. */\r
+ * write out a message. This function is called from the timer/daemon task,\r
+ * so must not block. Hence the block time is set to 0. */\r
xQueueSend( xQueue, &ulValueToSend, 0U );\r
}\r
/*-----------------------------------------------------------*/\r
for( ;; )\r
{\r
/* Wait until something arrives in the queue - this task will block\r
- indefinitely provided INCLUDE_vTaskSuspend is set to 1 in\r
- FreeRTOSConfig.h. It will not use any CPU time while it is in the\r
- Blocked state. */\r
+ * indefinitely provided INCLUDE_vTaskSuspend is set to 1 in\r
+ * FreeRTOSConfig.h. It will not use any CPU time while it is in the\r
+ * Blocked state. */\r
xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );\r
\r
/* To get here something must have been received from the queue, but\r
- is it an expected value? Normally calling printf() from a task is not\r
- a good idea. Here there is lots of stack space and only one task is\r
- using console IO so it is ok. However, note the comments at the top of\r
- this file about the risks of making Windows system calls (such as \r
- console output) from a FreeRTOS task. */\r
+ * is it an expected value? This is the only task that uses stdout so its\r
+ * ok to call printf() directly. Do not call printf from any other task. */\r
if( ulReceivedValue == mainVALUE_SENT_FROM_TASK )\r
{\r
printf( "Message received from task\r\n" );\r
}\r
}\r
/*-----------------------------------------------------------*/\r
-\r
/*\r
- * FreeRTOS Kernel V10.1.1\r
- * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r
+ * FreeRTOS Kernel V10.0.1\r
+ * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r
*\r
* Permission is hereby granted, free of charge, to any person obtaining a copy of\r
* this software and associated documentation files (the "Software"), to deal in\r
* 1 tab == 4 spaces!\r
*/\r
\r
-/*\r
- * main() creates all the demo application tasks, then starts the scheduler.\r
+/******************************************************************************\r
+ * NOTE: This file only contains the source code that is specific to the\r
+ * basic demo. Generic functions, such FreeRTOS hook functions, are defined\r
+ * in main.c.\r
+ ******************************************************************************\r
+ *\r
+ * main_full() creates all the demo application tasks, then starts the scheduler.\r
* The web documentation provides more details of the standard demo application\r
* tasks, which provide no particular functionality but do provide a good\r
* 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
- * "Check" task - This only executes every five seconds but has a high priority\r
- * to ensure it gets processor time. Its main function is to check that all the\r
- * standard demo tasks are still operational. While no errors have been\r
- * discovered the check task will print out "OK" and the current simulated tick\r
- * time. If an error is discovered in the execution of a task then the check\r
- * task will print out an appropriate error message.\r
+ * "Register tests":\r
+ * prvRegTest1Task and prvRegTest2Task implement register tests. These functions\r
+ * are just entry points and actual tests are written in the assembler file\r
+ * regtest_xtensa.S. These tests populate core registers with a known set of\r
+ * values and keep verifying them in a loop. Any corruption will indicate an\r
+ * error in context switching mechanism.\r
*\r
+ * "Check" task:\r
+ * This only executes every five seconds but has a high priority to ensure it\r
+ * gets processor time. Its main function is to check that all the standard demo\r
+ * tasks are still operational. While no errors have been discovered the check\r
+ * task will print out "No errors", the current simulated tick time, free heap\r
+ * size and the minimum free heap size so far. If an error is discovered in the\r
+ * execution of a task then the check task will print out an appropriate error\r
+ * message.\r
*/\r
\r
\r
#include "TimerDemo.h"\r
#include "countsem.h"\r
#include "death.h"\r
-#include "dynamic.h"\r
#include "QueueSet.h"\r
#include "QueueOverwrite.h"\r
#include "EventGroupsDemo.h"\r
#include "StreamBufferDemo.h"\r
#include "StreamBufferInterrupt.h"\r
\r
-/* Priorities at which the tasks are created. */\r
+/**\r
+ * Priorities at which the tasks are created.\r
+ */\r
#define mainCHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 2 )\r
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
#define mainFLOP_TASK_PRIORITY ( tskIDLE_PRIORITY )\r
#define mainQUEUE_OVERWRITE_PRIORITY ( tskIDLE_PRIORITY )\r
\r
+/**\r
+ * Period used in timer tests.\r
+ */\r
#define mainTIMER_TEST_PERIOD ( 50 )\r
\r
-/* The task that periodically checks that all the standard demo tasks are\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
+ */\r
+#define mainREG_TEST_TASK_1_PARAMETER ( ( void * ) 0x12345678 )\r
+#define mainREG_TEST_TASK_2_PARAMETER ( ( void * ) 0x87654321 )\r
+\r
+/**\r
+ * Determines whether to enable interrupt queue tests.\r
+ *\r
+ * Interrupt queue tests are used to test interrupt nesting and enabling them\r
+ * interferes with proper functioning of other tests. This macro controls\r
+ * whether to enable interrupt queue tests or all other tests:\r
+ *\r
+ * * When mainENABLE_INT_QUEUE_TESTS is set to 1, interrupt queue tests are\r
+ * enabled and every other test is disabled.\r
+ * * When mainENABLE_INT_QUEUE_TESTS is set to 0, interrupt queue tests are\r
+ * disabled and every other test is enabled.\r
+ */\r
+#define mainENABLE_INT_QUEUE_TESTS ( 0 )\r
+/*-----------------------------------------------------------*/\r
+\r
+/**\r
+ * The task that periodically checks that all the standard demo tasks are\r
* still executing and error free.\r
*/\r
static void prvCheckTask( void *pvParameters );\r
\r
+/**\r
+ * Tasks that implement register tests.\r
+ */\r
+static void prvRegTest1Task( void *pvParameters );\r
+static void prvRegTest2Task( void *pvParameters );\r
+\r
+/**\r
+ * Functions that implement register tests.\r
+ *\r
+ * These are implemented in assembler file regtest_xtensa.S.\r
+ */\r
+extern void vRegTest1( void );\r
+extern void vRegTest2( void );\r
/*-----------------------------------------------------------*/\r
\r
-/* The variable into which error messages are latched. */\r
+/**\r
+ * The variable into which error messages are latched.\r
+ */\r
static char *pcStatusMessage = "No errors";\r
\r
+/**\r
+ * The following two variables are used to communicate the status of the\r
+ * register check tasks to the check task. If the variables keep incrementing,\r
+ * then the register check tasks have not discovered any errors. If a variable\r
+ * stops incrementing, then an error has been found.\r
+ */\r
+volatile unsigned long ulRegTest1Counter = 0UL, ulRegTest2Counter = 0UL;\r
+\r
+/**\r
+ * The following variable is used to communicate whether the timers for the\r
+ * IntQueue tests have been Initialized. This is needed to ensure that the queues\r
+ * are accessed from the tick hook only after they have been created in the\r
+ * interrupt queue test.\r
+ */\r
+volatile BaseType_t xTimerForQueueTestInitialized = pdFALSE;\r
/*-----------------------------------------------------------*/\r
\r
int main_full( void )\r
/* Start the check task as described at the top of this file. */\r
xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
\r
- /* Create the standard demo tasks. */\r
- vStartTaskNotifyTask();\r
- vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
- vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
- vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
- vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );\r
- vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );\r
-\r
- vStartQueuePeekTasks();\r
- vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
- vStartRecursiveMutexTasks();\r
- vStartCountingSemaphoreTasks();\r
- vStartDynamicPriorityTasks();\r
- vStartQueueSetTasks();\r
-\r
- vStartQueueOverwriteTask( mainQUEUE_OVERWRITE_PRIORITY );\r
- vStartEventGroupTasks();\r
- vStartInterruptSemaphoreTasks();\r
- vStartQueueSetPollingTask();\r
- vCreateBlockTimeTasks();\r
-\r
- vCreateAbortDelayTasks();\r
- vStartMessageBufferTasks( configMINIMAL_STACK_SIZE );\r
-\r
- vStartStreamBufferTasks();\r
- vStartStreamBufferInterruptDemo();\r
-\r
- #if( configUSE_PREEMPTION != 0 )\r
+ #if( mainENABLE_INT_QUEUE_TESTS == 0 )\r
{\r
- /* Don't expect these tasks to pass when preemption is not used. */\r
- vStartTimerDemoTask( mainTIMER_TEST_PERIOD );\r
- }\r
- #endif\r
+ /* Create the standard demo tasks. */\r
+ vStartTaskNotifyTask();\r
+ vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
+ vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
+ vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
+ vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );\r
+ vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );\r
+\r
+ vStartQueuePeekTasks();\r
+ vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
+ vStartRecursiveMutexTasks();\r
+ vStartCountingSemaphoreTasks();\r
+ vStartQueueSetTasks();\r
+\r
+ vStartQueueOverwriteTask( mainQUEUE_OVERWRITE_PRIORITY );\r
+ vStartEventGroupTasks();\r
+ vStartInterruptSemaphoreTasks();\r
+ vStartQueueSetPollingTask();\r
+ vCreateBlockTimeTasks();\r
+\r
+ #if( configUSE_PREEMPTION != 0 )\r
+ {\r
+ /* Don't expect these tasks to pass when preemption is not used. */\r
+ vStartTimerDemoTask( mainTIMER_TEST_PERIOD );\r
+ }\r
+ #endif\r
+\r
+ vCreateAbortDelayTasks();\r
+ vStartMessageBufferTasks( configMINIMAL_STACK_SIZE );\r
\r
- /* The suicide tasks must be created last as they need to know how many\r
- tasks were running prior to their creation. This then allows them to\r
- ascertain whether or not the correct/expected number of tasks are running at\r
- any given time. */\r
- vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
+ vStartStreamBufferTasks();\r
+ vStartStreamBufferInterruptDemo();\r
+\r
+ /* Create the register check tasks, as described at the top of this file */\r
+ xTaskCreate( prvRegTest1Task, "Reg1", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_1_PARAMETER, tskIDLE_PRIORITY, NULL );\r
+ xTaskCreate( prvRegTest2Task, "Reg2", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_2_PARAMETER, tskIDLE_PRIORITY, NULL );\r
+\r
+ /* The suicide tasks must be created last as they need to know how many\r
+ * tasks were running prior to their creation. This then allows them to\r
+ * ascertain whether or not the correct/expected number of tasks are\r
+ * running at any given time. */\r
+ vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
+ }\r
+ #else /* mainENABLE_INT_QUEUE_TESTS */\r
+ {\r
+ /* Start interrupt queue test tasks. */\r
+ vStartInterruptQueueTasks();\r
+ }\r
+ #endif /* mainENABLE_INT_QUEUE_TESTS */\r
\r
/* Start the scheduler itself. */\r
vTaskStartScheduler();\r
\r
/* Should never get here unless there was not enough heap space to create\r
- the idle and other system tasks. */\r
+ * the idle and other system tasks. */\r
return 0;\r
}\r
/*-----------------------------------------------------------*/\r
{\r
TickType_t xNextWakeTime;\r
const TickType_t xCycleFrequency = pdMS_TO_TICKS( 5000UL );\r
+static unsigned long ulLastRegTest1Value = 0, ulLastRegTest2Value = 0;\r
\r
/* Just to remove compiler warning. */\r
( void ) pvParameters;\r
/* Place this task in the blocked state until it is time to run again. */\r
vTaskDelayUntil( &xNextWakeTime, xCycleFrequency );\r
\r
- /* Check the standard demo tasks are running without error. */\r
- #if( configUSE_PREEMPTION != 0 )\r
+ #if( mainENABLE_INT_QUEUE_TESTS == 0 )\r
{\r
- /* These tasks are only created when preemption is used. */\r
- if( xAreTimerDemoTasksStillRunning( xCycleFrequency ) != pdTRUE )\r
+ /* Check the standard demo tasks are running without error. */\r
+ #if( configUSE_PREEMPTION != 0 )\r
{\r
- pcStatusMessage = "Error: TimerDemo";\r
+ /* These tasks are only created when preemption is used. */\r
+ if( xAreTimerDemoTasksStillRunning( xCycleFrequency ) != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: TimerDemo";\r
+ }\r
}\r
- }\r
- #endif\r
+ #endif\r
\r
- if( xAreTaskNotificationTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: Notification";\r
- }\r
- else if( xAreIntegerMathsTaskStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: IntMath";\r
- }\r
- else if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: GenQueue";\r
- }\r
- else if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: BlockQueue";\r
- }\r
- else if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: SemTest";\r
- }\r
- else if( xArePollingQueuesStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: PollQueue";\r
- }\r
- else if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: QueuePeek";\r
- }\r
- else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: RecMutex";\r
- }\r
- else if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: CountSem";\r
- }\r
- else if( xAreDynamicPriorityTasksStillRunning() != pdPASS )\r
- {\r
- pcStatusMessage = "Error: Dynamic";\r
- }\r
- else if( xAreQueueSetTasksStillRunning() != pdPASS )\r
- {\r
- pcStatusMessage = "Error: Queue set";\r
- }\r
- else if( xAreEventGroupTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: EventGroup";\r
- }\r
- else if( xIsQueueOverwriteTaskStillRunning() != pdPASS )\r
- {\r
- pcStatusMessage = "Error: Queue overwrite";\r
- }\r
- else if( xAreQueueSetPollTasksStillRunning() != pdPASS )\r
- {\r
- pcStatusMessage = "Error: Queue set polling";\r
- }\r
- else if( xAreBlockTimeTestTasksStillRunning() != pdPASS )\r
- {\r
- pcStatusMessage = "Error: Block time";\r
- }\r
- else if( xAreMessageBufferTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: MessageBuffer";\r
- }\r
- else if( xAreAbortDelayTestTasksStillRunning() != pdPASS )\r
- {\r
- pcStatusMessage = "Error: Abort delay";\r
- }\r
- else if( xAreStreamBufferTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: StreamBuffer";\r
- }\r
- else if( xIsInterruptStreamBufferDemoStillRunning() != pdPASS )\r
- {\r
- pcStatusMessage = "Error: Stream buffer interrupt";\r
- }\r
- else if( xAreInterruptSemaphoreTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: IntSem";\r
- }\r
- else if( xIsCreateTaskStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: Death";\r
+ if( xAreTaskNotificationTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: Notification";\r
+ }\r
+ else if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: BlockQueue";\r
+ }\r
+ else if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: SemTest";\r
+ }\r
+ else if( xArePollingQueuesStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: PollQueue";\r
+ }\r
+ else if( xAreIntegerMathsTaskStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: IntMath";\r
+ }\r
+ else if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: GenQueue";\r
+ }\r
+ else if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: QueuePeek";\r
+ }\r
+ else if( xAreMathsTaskStillRunning() != pdPASS )\r
+ {\r
+ pcStatusMessage = "Error: Flop";\r
+ }\r
+ else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: RecMutex";\r
+ }\r
+ else if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: CountSem";\r
+ }\r
+ else if( xAreQueueSetTasksStillRunning() != pdPASS )\r
+ {\r
+ pcStatusMessage = "Error: Queue set";\r
+ }\r
+ else if( xIsQueueOverwriteTaskStillRunning() != pdPASS )\r
+ {\r
+ pcStatusMessage = "Error: Queue overwrite";\r
+ }\r
+ else if( xAreEventGroupTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: EventGroup";\r
+ }\r
+ else if( xAreInterruptSemaphoreTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: IntSem";\r
+ }\r
+ else if( xAreQueueSetPollTasksStillRunning() != pdPASS )\r
+ {\r
+ pcStatusMessage = "Error: Queue set polling";\r
+ }\r
+ else if( xAreBlockTimeTestTasksStillRunning() != pdPASS )\r
+ {\r
+ pcStatusMessage = "Error: Block time";\r
+ }\r
+ else if( xAreAbortDelayTestTasksStillRunning() != pdPASS )\r
+ {\r
+ pcStatusMessage = "Error: Abort delay";\r
+ }\r
+ else if( xAreMessageBufferTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: MessageBuffer";\r
+ }\r
+ else if( xAreStreamBufferTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: StreamBuffer";\r
+ }\r
+ else if( xIsInterruptStreamBufferDemoStillRunning() != pdPASS )\r
+ {\r
+ pcStatusMessage = "Error: Stream buffer interrupt";\r
+ }\r
+ else if( xIsCreateTaskStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: Death";\r
+ }\r
+ else if( ulLastRegTest1Value == ulRegTest1Counter )\r
+ {\r
+ pcStatusMessage = "Error: Reg Test 1";\r
+ }\r
+ else if( ulLastRegTest2Value == ulRegTest2Counter )\r
+ {\r
+ pcStatusMessage = "Error: Reg Test 2";\r
+ }\r
+\r
+ /* Update register test counters. */\r
+ ulLastRegTest1Value = ulRegTest1Counter;\r
+ ulLastRegTest2Value = ulRegTest2Counter;\r
}\r
- else if( xAreMathsTaskStillRunning() != pdPASS )\r
+ #else /* mainENABLE_INT_QUEUE_TESTS */\r
{\r
- pcStatusMessage = "Error: Flop";\r
+ if( xAreIntQueueTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: IntQueue";\r
+ }\r
}\r
+ #endif /* mainENABLE_INT_QUEUE_TESTS */\r
\r
/* This is the only task that uses stdout so its ok to call printf()\r
- directly. */\r
+ * directly. Do not call printf from any other task. */\r
printf( "%s - tick count %zu - free heap %zu - min free heap %zu\r\n", pcStatusMessage,\r
xTaskGetTickCount(),\r
xPortGetFreeHeapSize(),\r
{\r
TaskHandle_t xTimerTask;\r
\r
- /* Call the periodic timer test, which tests the timer API functions that\r
- can be called from an ISR. */\r
- #if( configUSE_PREEMPTION != 0 )\r
+ #if( mainENABLE_INT_QUEUE_TESTS == 0 )\r
{\r
- /* Only created when preemption is used. */\r
- vTimerPeriodicISRTests();\r
- }\r
- #endif\r
+ /* Exercise using task notifications from an interrupt. */\r
+ xNotifyTaskFromISR();\r
+\r
+ /* Write to a queue that is in use as part of the queue set demo to\r
+ * demonstrate using queue sets from an ISR. */\r
+ vQueueSetAccessQueueSetFromISR();\r
\r
- /* Call the periodic queue overwrite from ISR demo. */\r
- vQueueOverwritePeriodicISRDemo();\r
+ /* Call the periodic queue overwrite from ISR demo. */\r
+ vQueueOverwritePeriodicISRDemo();\r
\r
- /* Write to a queue that is in use as part of the queue set demo to\r
- demonstrate using queue sets from an ISR. */\r
- vQueueSetAccessQueueSetFromISR();\r
- vQueueSetPollingInterruptAccess();\r
+ /* Exercise event groups from interrupts. */\r
+ vPeriodicEventGroupsProcessing();\r
\r
- /* Exercise event groups from interrupts. */\r
- vPeriodicEventGroupsProcessing();\r
+ /* Exercise giving mutexes from an interrupt. */\r
+ vInterruptSemaphorePeriodicTest();\r
+\r
+ /* Queue set access from interrupt. */\r
+ vQueueSetPollingInterruptAccess();\r
+\r
+ /* Call the periodic timer test, which tests the timer API functions that\r
+ * can be called from an ISR. */\r
+ #if( configUSE_PREEMPTION != 0 )\r
+ {\r
+ /* Only created when preemption is used. */\r
+ vTimerPeriodicISRTests();\r
+ }\r
+ #endif\r
\r
- /* Exercise giving mutexes from an interrupt. */\r
- vInterruptSemaphorePeriodicTest();\r
+ /* Writes to stream buffer byte by byte to test the stream buffer trigger\r
+ * level functionality. */\r
+ vPeriodicStreamBufferProcessing();\r
\r
- /* Exercise using task notifications from an interrupt. */\r
- xNotifyTaskFromISR();\r
+ /* Writes a string to a string buffer four bytes at a time to demonstrate\r
+ * a stream being sent from an interrupt to a task. */\r
+ vBasicStreamBufferSendFromISR();\r
+ }\r
+ #else /* mainENABLE_INT_QUEUE_TESTS */\r
+ {\r
+ /* Access queues from interrupt. Make sure to access after the queues have\r
+ * been created. */\r
+ if( xTimerForQueueTestInitialized == pdTRUE )\r
+ {\r
+ portYIELD_FROM_ISR( xFirstTimerHandler() );\r
+ }\r
+ }\r
+ #endif /* mainENABLE_INT_QUEUE_TESTS */\r
+}\r
+/*-----------------------------------------------------------*/\r
\r
- /* Writes to stream buffer byte by byte to test the stream buffer trigger\r
- level functionality. */\r
- vPeriodicStreamBufferProcessing();\r
+static void prvRegTest1Task( void *pvParameters )\r
+{\r
+ /* Although the regtest task is written in assembly, its entry point is\r
+ * written in C for convenience of checking the task parameter is being\r
+ * passed in correctly. */\r
+ if( pvParameters == mainREG_TEST_TASK_1_PARAMETER )\r
+ {\r
+ /* Start the part of the test that is written in assembly. */\r
+ vRegTest1();\r
+ }\r
\r
- /* Writes a string to a string buffer four bytes at a time to demonstrate\r
- a stream being sent from an interrupt to a task. */\r
- vBasicStreamBufferSendFromISR();\r
+ /* The following line will only execute if the task parameter is found to\r
+ * be incorrect. The check task will detect that the regtest loop counter is\r
+ * not being incremented and flag an error. */\r
+ vTaskDelete( NULL );\r
}\r
/*-----------------------------------------------------------*/\r
\r
+static void prvRegTest2Task( void *pvParameters )\r
+{\r
+ /* Although the regtest task is written in assembly, its entry point is\r
+ * written in C for convenience of checking the task parameter is being\r
+ * passed in correctly. */\r
+ if( pvParameters == mainREG_TEST_TASK_2_PARAMETER )\r
+ {\r
+ /* Start the part of the test that is written in assembly. */\r
+ vRegTest2();\r
+ }\r
+\r
+ /* The following line will only execute if the task parameter is found to\r
+ * be incorrect. The check task will detect that the regtest loop counter is\r
+ * not being incremented and flag an error. */\r
+ vTaskDelete( NULL );\r
+}\r
+/*-----------------------------------------------------------*/\r
\r
vRegTest1:\r
\r
- /* Set initial values into the general purpose registers. */\r
- /* a0 = return address, a1 = stack pointer. */\r
+ /* Set initial values into the general purpose registers.\r
+ * a0 = return address, a1 = stack pointer. */\r
#ifdef __XTENSA_WINDOWED_ABI__\r
entry a1, 64\r
- s32i a0, a1, 0 /* Save return address */\r
+ s32i a0, a1, 0 /* Save return address. */\r
#else\r
addi a1, a1, -64\r
- s32i a0, a1, 0 /* Save return address */\r
- s32i a12, a1, 4 /* Save callee-saved regs if call0 ABI */\r
+ s32i a0, a1, 0 /* Save return address. */\r
+ s32i a12, a1, 4 /* Save callee-saved regs if call0 ABI. */\r
s32i a13, a1, 8\r
s32i a14, a1, 12\r
s32i a15, a1, 16\r
_RegTest1Loop:\r
\r
/* Loop checking the values originally loaded into the general purpose\r
- registers remain through the life of the task. */\r
+ * registers remain through the life of the task. */\r
movi a0, 0x11111111\r
bne a0, a2, _RegTest1Error\r
movi a0, 0x22222222\r
bne a0, a15, _RegTest1Error\r
\r
/* Incrememnt the loop counter to prove this task has not gone into the\r
- error null loop. */\r
+ * error null loop. */\r
s32i a2, a1, 20\r
movi a2, ulRegTest1Counter\r
l32i a0, a2, 0\r
\r
vRegTest2:\r
\r
- /* Set initial values into the general purpose registers. */\r
- /* a0 = return address, a1 = stack pointer. */\r
+ /* Set initial values into the general purpose registers.\r
+ * a0 = return address, a1 = stack pointer. */\r
#ifdef __XTENSA_WINDOWED_ABI__\r
entry a1, 64\r
- s32i a0, a1, 0 /* Save return address */\r
+ s32i a0, a1, 0 /* Save return address. */\r
#else\r
addi a1, a1, -64\r
- s32i a0, a1, 0 /* Save return address */\r
- s32i a12, a1, 4 /* Save callee-saved regs if call0 ABI */\r
+ s32i a0, a1, 0 /* Save return address. */\r
+ s32i a12, a1, 4 /* Save callee-saved regs if call0 ABI. */\r
s32i a13, a1, 8\r
s32i a14, a1, 12\r
s32i a15, a1, 16\r
_RegTest2Loop:\r
\r
/* Loop checking the values originally loaded into the general purpose\r
- registers remain through the life of the task. */\r
+ * registers remain through the life of the task. */\r
movi a0, 0x01010101\r
bne a0, a2, _RegTest1Error\r
movi a0, 0x02020202\r
movi a0, 0x0e0e0e0e\r
bne a0, a15, _RegTest1Error\r
\r
- /* Force a yield from one of the reg test tasks to increase coverage. */\r
- /* IMPORTANT: this call will trash some number of registers. Branch */\r
- /* to _ReInit to set things up again. */\r
+ /* Force a yield from one of the reg test tasks to increase coverage.\r
+ * IMPORTANT: this call will trash some number of registers. Branch\r
+ * to _ReInit to set things up again. */\r
#ifdef __XTENSA_WINDOWED_ABI__\r
call8 vPortYield\r
#else\r
#endif\r
\r
/* Increment the loop counter to prove this task has not gone into the\r
- error null loop. */\r
+ * error null loop. */\r
s32i a2, a1, 20\r
movi a2, ulRegTest2Counter\r
l32i a0, a2, 0\r
l32i a2, a1, 20\r
\r
/* Loop again. */\r
- j _ReInit /* See comments above */\r
- /* j _RegTest2Loop */\r
+ j _ReInit /* See comments above about not using j _RegTest2Loop. */\r
\r
_RegTest2Error:\r
.L2:\r
j .L2\r
-\r