<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/FreeRTOS_Source/include}""/>\r
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/FreeRTOS_Source/portable/GCC/MicroBlaze}""/>\r
</option>\r
+ <option id="xilinx.gnu.compiler.symbols.defined.522894226" name="Defined symbols (-D)" superClass="xilinx.gnu.compiler.symbols.defined" valueType="definedSymbols"/>\r
<inputType id="xilinx.gnu.compiler.input.264309084" name="C source files" superClass="xilinx.gnu.compiler.input"/>\r
</tool>\r
<tool id="xilinx.gnu.mb.cxx.toolchain.compiler.debug.1757864406" name="MicroBlaze g++ compiler" superClass="xilinx.gnu.mb.cxx.toolchain.compiler.debug">\r
</toolChain>\r
</folderInfo>\r
<sourceEntries>\r
- <entry excluding="main-full.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
+ <entry excluding="src/testperiph.c|ParTest.c|src/xuartlite_selftest_example.c|src/xtmrctr_selftest_example.c|src/xtmrctr_intr_example.c|src/xintc_tapp_example.c|src/xgpio_tapp_example.c|src/xgpio_intr_tapp_example.c|src/xemaclite_polled_example.c|src/xemaclite_intr_example.c|Demo_Source|RegisterTests.c|main-full.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
</sourceEntries>\r
</configuration>\r
</storageModule>\r
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
+ <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>\r
+ <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>\r
<storageModule moduleId="scannerConfiguration">\r
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>\r
<profile id="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC">\r
</scannerInfoProvider>\r
</profile>\r
</scannerConfigBuildInfo>\r
+ <scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.debug.1890710697.1551842913;xilinx.gnu.mb.exe.debug.1890710697.1551842913.">\r
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>\r
+ <profile id="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="mb-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.PPCGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="powerpc-eabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.ARMGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-xilinxa9-eabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.ARMLinuxGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-xilinxa9-linux-gnueabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="makefileGenerator">\r
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ </scannerConfigBuildInfo>\r
+ <scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.debug.1890710697.1551842913;xilinx.gnu.mb.exe.debug.1890710697.1551842913.;xilinx.gnu.mb.c.toolchain.compiler.debug.835271198;xilinx.gnu.compiler.input.264309084">\r
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>\r
+ <profile id="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="mb-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.PPCGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="powerpc-eabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.ARMGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-xilinxa9-eabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.ARMLinuxGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-xilinxa9-linux-gnueabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="makefileGenerator">\r
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ </scannerConfigBuildInfo>\r
<scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.debug.1890710697;xilinx.gnu.mb.exe.debug.1890710697.;xilinx.gnu.mb.c.toolchain.compiler.debug.1867440614;xilinx.gnu.compiler.input.2107818916">\r
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>\r
<profile id="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC">\r
</profile>\r
</scannerConfigBuildInfo>\r
</storageModule>\r
- <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
</cconfiguration>\r
<cconfiguration id="xilinx.gnu.mb.exe.debug.1890710697.1391169017">\r
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="xilinx.gnu.mb.exe.debug.1890710697.1391169017" moduleId="org.eclipse.cdt.core.settings" name="Full">\r
<inputType id="xilinx.gnu.assembler.input.828396103" superClass="xilinx.gnu.assembler.input"/>\r
</tool>\r
<tool id="xilinx.gnu.mb.c.toolchain.compiler.debug.1610218702" name="MicroBlaze gcc compiler" superClass="xilinx.gnu.mb.c.toolchain.compiler.debug">\r
- <option defaultValue="gnu.c.optimization.level.none" id="xilinx.gnu.compiler.option.optimization.level.116271748" name="Optimization Level" superClass="xilinx.gnu.compiler.option.optimization.level" valueType="enumerated"/>\r
+ <option defaultValue="gnu.c.optimization.level.none" id="xilinx.gnu.compiler.option.optimization.level.116271748" name="Optimization Level" superClass="xilinx.gnu.compiler.option.optimization.level" value="gnu.c.optimization.level.none" valueType="enumerated"/>\r
<option id="xilinx.gnu.compiler.option.debugging.level.171855055" name="Debug Level" superClass="xilinx.gnu.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>\r
<option id="xilinx.gnu.mb.compiler.inferred.mbversion.900759104" name="MicroBlaze Version" superClass="xilinx.gnu.mb.compiler.inferred.mbversion" value="8.10.a" valueType="string"/>\r
<option id="xilinx.gnu.mb.compiler.inferred.usele.366091388" name="Produce little endian code (-mlittle-endian)" superClass="xilinx.gnu.mb.compiler.inferred.usele" value="true" valueType="boolean"/>\r
</toolChain>\r
</folderInfo>\r
<sourceEntries>\r
- <entry excluding="main-blinky.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
+ <entry excluding="src/xuartlite_selftest_example.c|src/xtmrctr_selftest_example.c|src/xtmrctr_intr_example.c|src/xintc_tapp_example.c|src/xgpio_tapp_example.c|src/xgpio_intr_tapp_example.c|src/xemaclite_polled_example.c|src/xemaclite_intr_example.c|src/testperiph.c|main-blinky.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
</sourceEntries>\r
</configuration>\r
</storageModule>\r
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
+ <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>\r
+ <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>\r
<storageModule moduleId="scannerConfiguration">\r
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>\r
<profile id="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC">\r
</scannerInfoProvider>\r
</profile>\r
</scannerConfigBuildInfo>\r
+ <scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.debug.1890710697.1551842913;xilinx.gnu.mb.exe.debug.1890710697.1551842913.">\r
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>\r
+ <profile id="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="mb-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.PPCGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="powerpc-eabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.ARMGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-xilinxa9-eabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.ARMLinuxGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-xilinxa9-linux-gnueabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="makefileGenerator">\r
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ </scannerConfigBuildInfo>\r
+ <scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.debug.1890710697.1551842913;xilinx.gnu.mb.exe.debug.1890710697.1551842913.;xilinx.gnu.mb.c.toolchain.compiler.debug.835271198;xilinx.gnu.compiler.input.264309084">\r
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>\r
+ <profile id="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="mb-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.PPCGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="powerpc-eabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.ARMGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-xilinxa9-eabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="com.xilinx.managedbuilder.ui.ARMLinuxGCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-xilinxa9-linux-gnueabi-gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="makefileGenerator">\r
+ <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">\r
+ <buildOutputProvider>\r
+ <openAction enabled="true" filePath=""/>\r
+ <parser enabled="true"/>\r
+ </buildOutputProvider>\r
+ <scannerInfoProvider id="specsFile">\r
+ <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>\r
+ <parser enabled="true"/>\r
+ </scannerInfoProvider>\r
+ </profile>\r
+ </scannerConfigBuildInfo>\r
<scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.debug.1890710697;xilinx.gnu.mb.exe.debug.1890710697.;xilinx.gnu.mb.c.toolchain.compiler.debug.1867440614;xilinx.gnu.compiler.input.2107818916">\r
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>\r
<profile id="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC">\r
</profile>\r
</scannerConfigBuildInfo>\r
</storageModule>\r
- <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
</cconfiguration>\r
</storageModule>\r
<storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
#define configUSE_TICK_HOOK 0\r
#define configCPU_CLOCK_HZ ( XPAR_MICROBLAZE_CORE_CLOCK_FREQ_HZ ) /* Not actually used in this demo as the timer is set up in main and uses the peripheral clock, not the CPU clock. */\r
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )\r
-#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 )\r
+#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 6 )\r
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 40 * 1024 ) )\r
#define configMAX_TASK_NAME_LEN ( 10 )\r
#define configUSE_TRACE_FACILITY 0\r
#define configUSE_MALLOC_FAILED_HOOK 1\r
#define configUSE_APPLICATION_TASK_TAG 0\r
#define configUSE_COUNTING_SEMAPHORES 1\r
-#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 180 )\r
+#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 230 )\r
#define configINTERRUPT_STACK_SIZE configMINIMAL_STACK_SIZE\r
\r
/* Co-routine definitions. */\r
#define INCLUDE_vTaskDelayUntil 1\r
#define INCLUDE_vTaskDelay 1\r
\r
-#define configASSERT( x ) if( ( x ) == 0 ) { portDISABLE_INTERRUPTS(); for( ;; ); }\r
+extern void vAssertCalled( char *pcFile, long lLine );\r
+#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ );\r
\r
#define configINTERRUPT_CONTROLLER_TO_USE XPAR_INTC_SINGLE_DEVICE_ID\r
\r
\r
/* Allocate the stack to be used by the interrupt handler. */\r
pulISRStack = ( unsigned long * ) pvPortMalloc( configINTERRUPT_STACK_SIZE * sizeof( portSTACK_TYPE ) );\r
+ configASSERT( pulISRStack != NULL );\r
\r
/* Restore the context of the first task that is going to run. */\r
if( pulISRStack != NULL )\r
not interrupted by the tick ISR. It is not a problem to do this as\r
each task maintains it's own interrupt status. */\r
portENTER_CRITICAL();\r
+ {\r
/* Jump directly to the yield function to ensure there is no\r
compiler generated prologue code. */\r
asm volatile ( "bralid r14, VPortYieldASM \n\t" \\r
"or r0, r0, r0 \n\t" );\r
+ }\r
portEXIT_CRITICAL();\r
}\r
/*-----------------------------------------------------------*/\r
--- /dev/null
+/*\r
+ FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd.\r
+ \r
+\r
+ ***************************************************************************\r
+ * *\r
+ * FreeRTOS tutorial books are available in pdf and paperback. *\r
+ * Complete, revised, and edited pdf reference manuals are also *\r
+ * available. *\r
+ * *\r
+ * Purchasing FreeRTOS documentation will not only help you, by *\r
+ * ensuring you get running as quickly as possible and with an *\r
+ * in-depth knowledge of how to use FreeRTOS, it will also help *\r
+ * the FreeRTOS project to continue with its mission of providing *\r
+ * professional grade, cross platform, de facto standard solutions *\r
+ * for microcontrollers - completely free of charge! *\r
+ * *\r
+ * >>> See http://www.FreeRTOS.org/Documentation for details. <<< *\r
+ * *\r
+ * Thank you for using FreeRTOS, and thank you for your support! *\r
+ * *\r
+ ***************************************************************************\r
+\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
+ >>>NOTE<<< The modification to the GPL is included to allow you to\r
+ distribute a combined work that includes FreeRTOS without being obliged to\r
+ provide the source code for proprietary components outside of the FreeRTOS\r
+ kernel. FreeRTOS is distributed in the hope that it will be useful, but\r
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ more details. You should have received a copy of the GNU General Public\r
+ License and the FreeRTOS license exception along with FreeRTOS; if not it\r
+ can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
+ by writing to Richard Barry, contact details for whom are available on the\r
+ FreeRTOS WEB site.\r
+\r
+ 1 tab == 4 spaces!\r
+\r
+ http://www.FreeRTOS.org - Documentation, latest information, license and\r
+ contact details.\r
+\r
+ http://www.SafeRTOS.com - A version that is certified for use in safety\r
+ critical systems.\r
+\r
+ http://www.OpenRTOS.com - Commercial support, development, porting,\r
+ licensing and training services.\r
+*/\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+\r
+/*\r
+ * The register test task as described at the top of this file.\r
+ */\r
+void vRegisterTest1( void *pvParameters );\r
+void vRegisterTest2( void *pvParameters );\r
+\r
+/* Variables that are incremented on each iteration of the reg test tasks -\r
+provided the tasks have not reported any errors. The check task inspects these\r
+variables to ensure they are still incrementing as expected. If a variable\r
+stops incrementing then it is likely that its associate task has stalled. */\r
+volatile unsigned long ulRegTest1CycleCount = 0UL, ulRegTest2CycleCount = 0UL;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void vRegisterTest1( void *pvParameters )\r
+{\r
+//_RB_ Why can R5 not be used in this test?\r
+\r
+ /* This task uses an infinite loop that is implemented in the assembly \r
+ code.\r
+ \r
+ First fill the registers with known values. */\r
+ asm volatile ( " addi r3, r0, 3 \n\t" \\r
+ " addi r4, r0, 4 \n\t" \\r
+ " addi r6, r0, 6 \n\t" \\r
+ " addi r7, r0, 7 \n\t" \\r
+ " addi r8, r0, 8 \n\t" \\r
+ " addi r9, r0, 9 \n\t" \\r
+ " addi r10, r0, 10 \n\t" \\r
+ " addi r11, r0, 11 \n\t" \\r
+ " addi r12, r0, 12 \n\t" \\r
+ " addi r16, r0, 16 \n\t" \\r
+ " addi r19, r0, 19 \n\t" \\r
+ " addi r20, r0, 20 \n\t" \\r
+ " addi r21, r0, 21 \n\t" \\r
+ " addi r22, r0, 22 \n\t" \\r
+ " addi r23, r0, 23 \n\t" \\r
+ " addi r24, r0, 24 \n\t" \\r
+ " addi r25, r0, 25 \n\t" \\r
+ " addi r26, r0, 26 \n\t" \\r
+ " addi r27, r0, 27 \n\t" \\r
+ " addi r28, r0, 28 \n\t" \\r
+ " addi r29, r0, 29 \n\t" \\r
+ " addi r30, r0, 30 \n\t" \\r
+ " addi r31, r0, 31 \n\t"\r
+ );\r
+\r
+ /* Now test the register values to ensure they contain the same value that\r
+ was written to them above. This task will get preempted frequently so \r
+ other tasks are likely to have executed since the register values were \r
+ written. */\r
+\r
+ asm volatile ( "Loop_Start_1: \n\t" \\r
+ " xori r18, r3, 3 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r4, 4 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r6, 6 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r7, 7 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r8, 8 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r9, 9 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r10, 10 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r11, 11 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r12, 12 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r16, 16 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r19, 19 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r20, 20 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r21, 21 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r22, 22 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r23, 23 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r24, 24 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r25, 25 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r26, 26 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r27, 27 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r28, 28 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r29, 29 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r30, 30 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t" \\r
+ " xori r18, r31, 31 \n\t" \\r
+ " bnei r18, Error_Loop_1 \n\t"\r
+ );\r
+\r
+ /* If this task has not branched to the error loop, then everything is ok,\r
+ and the check variable should be incremented to indicate that this task\r
+ is still running. Then, brach back to the top to check the registers\r
+ again. */\r
+ asm volatile ( " lwi r18, r0, ulRegTest1CycleCount \n\t" \\r
+ " addik r18, r18, 1 \n\t" \\r
+ " swi r18, r0, ulRegTest1CycleCount \n\t" \\r
+ " \n\t" \\r
+ " bri Loop_Start_1 "\r
+ );\r
+\r
+ /* The test function will branch here if it discovers an error. This part\r
+ of the code just sits in a NULL loop, which prevents the check variable\r
+ incrementing any further to allow the check timer to recognize that this\r
+ test has failed. */\r
+ asm volatile ( "Error_Loop_1: \n\t" \\r
+ " bri 0 \n\t" \\r
+ " nop \n\t" \\r
+ );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vRegisterTest2( void *pvParameters )\r
+{\r
+ /* This task uses an infinite loop that is implemented in the assembly \r
+ code.\r
+ \r
+ First fill the registers with known values. */\r
+ asm volatile ( " addi r3, r0, 103 \n\t" \\r
+ " addi r4, r0, 104 \n\t" \\r
+ " addi r6, r0, 106 \n\t" \\r
+ " addi r7, r0, 107 \n\t" \\r
+ " addi r8, r0, 108 \n\t" \\r
+ " addi r9, r0, 109 \n\t" \\r
+ " addi r10, r0, 1010 \n\t" \\r
+ " addi r11, r0, 1011 \n\t" \\r
+ " addi r12, r0, 1012 \n\t" \\r
+ " addi r16, r0, 1016 \n\t" \\r
+ " addi r19, r0, 1019 \n\t" \\r
+ " addi r20, r0, 1020 \n\t" \\r
+ " addi r21, r0, 1021 \n\t" \\r
+ " addi r22, r0, 1022 \n\t" \\r
+ " addi r23, r0, 1023 \n\t" \\r
+ " addi r24, r0, 1024 \n\t" \\r
+ " addi r25, r0, 1025 \n\t" \\r
+ " addi r26, r0, 1026 \n\t" \\r
+ " addi r27, r0, 1027 \n\t" \\r
+ " addi r28, r0, 1028 \n\t" \\r
+ " addi r29, r0, 1029 \n\t" \\r
+ " addi r30, r0, 1030 \n\t" \\r
+ " addi r31, r0, 1031 \n\t"\r
+ );\r
+\r
+ /* Now test the register values to ensure they contain the same value that\r
+ was written to them above. This task will get preempted frequently so \r
+ other tasks are likely to have executed since the register values were \r
+ written. */\r
+\r
+ asm volatile ( "Loop_Start_2: \n\t" \\r
+ " xori r18, r3, 103 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r4, 104 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r6, 106 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r7, 107 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r8, 108 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r9, 109 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r10, 1010 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r11, 1011 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r12, 1012 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r16, 1016 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r19, 1019 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r20, 1020 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r21, 1021 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r22, 1022 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r23, 1023 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r24, 1024 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r25, 1025 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r26, 1026 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r27, 1027 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r28, 1028 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r29, 1029 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r30, 1030 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t" \\r
+ " xori r18, r31, 1031 \n\t" \\r
+ " bnei r18, Error_Loop_2 \n\t"\r
+ );\r
+\r
+ /* If this task has not branched to the error loop, then everything is ok,\r
+ and the check variable should be incremented to indicate that this task\r
+ is still running. Then, brach back to the top to check the registers\r
+ again. */\r
+ asm volatile ( " lwi r18, r0, ulRegTest2CycleCount \n\t" \\r
+ " addik r18, r18, 1 \n\t" \\r
+ " swi r18, r0, ulRegTest2CycleCount \n\t" \\r
+ " \n\t" \\r
+ " bri Loop_Start_2 "\r
+ );\r
+\r
+ /* The test function will branch here if it discovers an error. This part\r
+ of the code just sits in a NULL loop, which prevents the check variable\r
+ incrementing any further to allow the check timer to recognize that this\r
+ test has failed. */\r
+ asm volatile ( "Error_Loop_2: \n\t" \\r
+ " bri 0 \n\t" \\r
+ " nop \n\t" \\r
+ );\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
\r
/*-----------------------------------------------------------*/\r
\r
-int main(void)\r
+int main( void )\r
{\r
/* Configure the interrupt controller, LED outputs and button inputs. */\r
prvSetupHardware();\r
/* Kernel includes. */\r
#include "FreeRTOS.h"\r
#include "task.h"\r
+#include "timers.h"\r
\r
/* Standard demo includes. */\r
#include "partest.h"\r
\r
#define xPrintf( x )\r
\r
-/* Values that are passed into the reg test tasks using the task parameter. The\r
-tasks check that the values are passed in correctly. */\r
-#define mainREG_TEST_1_PARAMETER ( 0x12121212UL )\r
-#define mainREG_TEST_2_PARAMETER ( 0x12345678UL )\r
-\r
/* Priorities at which the tasks are created. */\r
#define mainCHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )\r
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
#define mainuIP_STACK_SIZE ( configMINIMAL_STACK_SIZE * 3 )\r
\r
/* The LED toggled by the check task. */\r
-#define mainCHECK_LED ( 5 )\r
+#define mainCHECK_LED ( 3 )\r
\r
/* The rate at which mainCHECK_LED will toggle when all the tasks are running\r
without error. Controlled by the check task as described at the top of this\r
file. */\r
-#define mainNO_ERROR_CYCLE_TIME ( 5000 / portTICK_RATE_MS )\r
+#define mainNO_ERROR_CHECK_TIMER_PERIOD ( 5000 / portTICK_RATE_MS )\r
\r
/* The rate at which mainCHECK_LED will toggle when an error has been reported\r
by at least one task. Controlled by the check task as described at the top of\r
this file. */\r
-#define mainERROR_CYCLE_TIME ( 200 / portTICK_RATE_MS )\r
+#define mainERROR_CHECK_TIMER_PERIOD ( 200 / portTICK_RATE_MS )\r
+\r
+/* A block time of zero means "don't block". */
+#define mainDONT_BLOCK ( ( portTickType ) 0 )\r
\r
/*\r
* vApplicationMallocFailedHook() will only be called if\r
/*\r
* The reg test tasks as described at the top of this file.\r
*/\r
-static void prvRegTest1Task( void *pvParameters );\r
-static void prvRegTest2Task( void *pvParameters );\r
+extern void vRegisterTest1( void *pvParameters );\r
+extern void vRegisterTest2( void *pvParameters );\r
\r
/*\r
- * The check task as described at the top of this file.\r
+ * Defines the 'check' functionality as described at the top of this file. This\r
+ * function is the callback function for the 'check' timer.\r
*/\r
-static void prvCheckTask( void *pvParameters );\r
+static void vCheckTimerCallback( xTimerHandle xTimer );\r
+\r
\r
static void prvSetupHardware( void );\r
\r
\r
/*-----------------------------------------------------------*/\r
\r
-/* Variables that are incremented on each iteration of the reg test tasks -\r
-provided the tasks have not reported any errors. The check task inspects these\r
-variables to ensure they are still incrementing as expected. If a variable\r
-stops incrementing then it is likely that its associate task has stalled. */\r
-unsigned long ulRegTest1CycleCount = 0UL, ulRegTest2CycleCount = 0UL;\r
-\r
/* The status message that is displayed at the bottom of the "task stats" web\r
page, which is served by the uIP task. This will report any errors picked up\r
by the reg test task. */\r
\r
static XTmrCtr xTimer0Instance;\r
\r
+/* The 'check' timer, as described at the top of this file. */\r
+static xTimerHandle xCheckTimer = NULL;\r
+\r
/*-----------------------------------------------------------*/\r
+volatile int xyz = 1;\r
\r
-int main(void)\r
+int main( void )\r
{\r
/* Configure the interrupt controller, LED outputs and button inputs. */\r
prvSetupHardware();\r
\r
/* Start the reg test tasks which test the context switching mechanism. */\r
- xTaskCreate( prvRegTest1Task, ( const signed char * const ) "RegTst1", configMINIMAL_STACK_SIZE, ( void * ) mainREG_TEST_1_PARAMETER, tskIDLE_PRIORITY, NULL );\r
- xTaskCreate( prvRegTest2Task, ( const signed char * const ) "RegTst2", configMINIMAL_STACK_SIZE, ( void * ) mainREG_TEST_2_PARAMETER, tskIDLE_PRIORITY, NULL );\r
+// xTaskCreate( vRegisterTest1, ( const signed char * const ) "RegTst1", configMINIMAL_STACK_SIZE, ( void * ) 0, tskIDLE_PRIORITY, NULL );\r
+// xTaskCreate( vRegisterTest2, ( const signed char * const ) "RegTst2", configMINIMAL_STACK_SIZE, ( void * ) 0, tskIDLE_PRIORITY, NULL );\r
\r
/* The web server task. */\r
//_RB_ xTaskCreate( vuIP_Task, "uIP", mainuIP_STACK_SIZE, NULL, mainuIP_TASK_PRIORITY, NULL );\r
\r
- /* Start the check task as described at the top of this file. */\r
- xTaskCreate( prvCheckTask, ( const signed char * const ) "Check", configMINIMAL_STACK_SIZE * 3, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
-\r
/* Create the standard demo tasks. */\r
- vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
- vCreateBlockTimeTasks();\r
- vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
- vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
+// vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
+// vCreateBlockTimeTasks();\r
+// vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
+// vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );\r
vStartLEDFlashTasks( mainFLASH_TASK_PRIORITY );\r
- vStartQueuePeekTasks();\r
- vStartRecursiveMutexTasks();\r
- vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
+// vStartQueuePeekTasks();\r
+// vStartRecursiveMutexTasks();\r
+// vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
\r
/* The suicide tasks must be created last as they need to know how many\r
tasks were running prior to their creation in order to ascertain whether\r
or not the correct/expected number of tasks are running at any given time. */\r
- vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
+// vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
+\r
+ /* Create the 'check' timer - the timer that periodically calls the\r
+ check function as described at the top of this file. Note that, for\r
+ the reasons stated in the comments above the call to\r
+ vStartTimerDemoTask(), that the check timer is not actually started\r
+ until after the scheduler has been started. */\r
+ xCheckTimer = xTimerCreate( ( const signed char * ) "Check timer", mainNO_ERROR_CHECK_TIMER_PERIOD, pdTRUE, ( void * ) 0, vCheckTimerCallback );\r
+\r
+ /* Ensure the check timer will start running as soon as the scheduler\r
+ starts. The block time is set to 0 (mainDONT_BLOCK), but would be\r
+ ingnored at this point anyway as block times can only be specified when\r
+ the scheduler is running. */\r
+ xTimerStart( xCheckTimer, mainDONT_BLOCK );\r
\r
/* Start the tasks running. */\r
vTaskStartScheduler();\r
}\r
/*-----------------------------------------------------------*/\r
\r
-static void prvCheckTask( void *pvParameters )\r
+static void vCheckTimerCallback( xTimerHandle xTimer )\r
{\r
+extern unsigned long ulRegTest1CycleCount, ulRegTest2CycleCount;\r
static volatile unsigned long ulLastRegTest1CycleCount = 0UL, ulLastRegTest2CycleCount = 0UL;\r
-portTickType xNextWakeTime, xCycleFrequency = mainNO_ERROR_CYCLE_TIME;\r
-extern void vSetupHighFrequencyTimer( void );\r
+static long lErrorAlreadyLatched = pdFALSE;\r
\r
- /* Initialise xNextWakeTime - this only needs to be done once. */\r
- xNextWakeTime = xTaskGetTickCount();\r
+ /* This is the callback function used by the 'check' timer, as described\r
+ at the top of this file. */\r
\r
- for( ;; )\r
+#if 0\r
+ /* Check the standard demo tasks are running without error. */\r
+ if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
{\r
- /* Place this task in the blocked state until it is time to run again. */\r
- vTaskDelayUntil( &xNextWakeTime, xCycleFrequency );\r
+ /* Increase the rate at which this task cycles, which will increase the\r
+ rate at which mainCHECK_LED flashes to give visual feedback that an error\r
+ has occurred. */\r
+ pcStatusMessage = "Error: GenQueue";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
\r
- /* Check the standard demo tasks are running without error. */\r
- if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
- {\r
- /* Increase the rate at which this task cycles, which will increase the\r
- rate at which mainCHECK_LED flashes to give visual feedback that an error\r
- has occurred. */ \r
- pcStatusMessage = "Error: GenQueue";\r
- xPrintf( pcStatusMessage );\r
- }\r
- \r
- if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: QueuePeek\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
- \r
- if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: BlockQueue\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
- \r
- if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: BlockTime\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
- \r
- if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: SemTest\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
- \r
- if( xArePollingQueuesStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: PollQueue\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
- \r
- if( xIsCreateTaskStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: Death\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
- \r
- if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
- {\r
- pcStatusMessage = "Error: RecMutex\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
- \r
- if( xAreMathsTaskStillRunning() != pdPASS )\r
- {\r
- pcStatusMessage = "Error: Flop\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
+ if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: QueuePeek\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
\r
- /* Check the reg test tasks are still cycling. They will stop incrementing\r
- their loop counters if they encounter an error. */\r
- if( ulRegTest1CycleCount == ulLastRegTest1CycleCount )\r
- {\r
- pcStatusMessage = "Error: RegTest1\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
+ if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: BlockQueue\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
\r
- if( ulRegTest2CycleCount == ulLastRegTest2CycleCount )\r
- {\r
- pcStatusMessage = "Error: RegTest2\r\n";\r
- xPrintf( pcStatusMessage );\r
- }\r
+ if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: BlockTime\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
+\r
+ if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: SemTest\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
\r
- ulLastRegTest1CycleCount = ulRegTest1CycleCount;\r
- ulLastRegTest2CycleCount = ulRegTest2CycleCount;\r
+ if( xArePollingQueuesStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: PollQueue\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
+\r
+ if( xIsCreateTaskStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: Death\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
\r
- /* Toggle the check LED to give an indication of the system status. If\r
- the LED toggles every 5 seconds then everything is ok. A faster toggle\r
- indicates an error. */\r
- vParTestToggleLED( mainCHECK_LED );\r
- \r
- /* Ensure the LED toggles at a faster rate if an error has occurred. */\r
- if( pcStatusMessage != NULL )\r
+ if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
+ {\r
+ pcStatusMessage = "Error: RecMutex\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
+\r
+ if( xAreMathsTaskStillRunning() != pdPASS )\r
+ {\r
+ pcStatusMessage = "Error: Flop\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
+#endif //_RB_\r
+ /* Check the reg test tasks are still cycling. They will stop incrementing\r
+ their loop counters if they encounter an error. */\r
+ if( ulRegTest1CycleCount == ulLastRegTest1CycleCount )\r
+ {\r
+ pcStatusMessage = "Error: RegTest1\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
+\r
+ if( ulRegTest2CycleCount == ulLastRegTest2CycleCount )\r
+ {\r
+ pcStatusMessage = "Error: RegTest2\r\n";\r
+ xPrintf( pcStatusMessage );\r
+ }\r
+\r
+ ulLastRegTest1CycleCount = ulRegTest1CycleCount;\r
+ ulLastRegTest2CycleCount = ulRegTest2CycleCount;\r
+\r
+ /* Toggle the check LED to give an indication of the system status. If\r
+ the LED toggles every 5 seconds then everything is ok. A faster toggle\r
+ indicates an error. */\r
+ vParTestToggleLED( mainCHECK_LED );\r
+\r
+ if( pcStatusMessage != NULL )\r
+ {\r
+ if( lErrorAlreadyLatched == pdFALSE )\r
{\r
- xCycleFrequency = mainERROR_CYCLE_TIME;\r
+ /* Ensure the LED toggles at a faster rate if an error has occurred.\r
+ This is called from a timer callback so must not attempt to block. */
+ xTimerChangePeriod( xTimer, mainERROR_CHECK_TIMER_PERIOD, mainDONT_BLOCK );\r
+\r
+ /* Just to ensure the timer period is not changed on each execution\r
+ of the callback. */
+ lErrorAlreadyLatched = pdTRUE;\r
}\r
}\r
}\r
{\r
portBASE_TYPE xStatus;\r
const unsigned char ucTimerCounterNumber = ( unsigned char ) 0U;\r
-const unsigned long ulCounterValue = ( ( XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ / configTICK_RATE_HZ ) - 1UL );\r
+//const unsigned long ulCounterValue = ( ( XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ / configTICK_RATE_HZ ) - 1UL );\r
+const unsigned long ulCounterValue = ( ( ( XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ / configTICK_RATE_HZ ) - 1UL ) ) * 2UL; //_RB_ there is a clock set up incorrectly somwehre, the *2 should not be required.\r
extern void vTickISR( void *pvUnused );\r
\r
/* Initialise the timer/counter. */\r
}\r
/*-----------------------------------------------------------*/\r
\r
-/* This function is explained in the comments at the top of this file. */\r
-static void prvRegTest1Task( void *pvParameters )\r
-{\r
- configASSERT( pvParameters == ( void * ) mainREG_TEST_1_PARAMETER );\r
-\r
- for( ;; )\r
- {\r
- vTaskDelay( 10000 );\r
- }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained in the comments at the top of this file. */\r
-static void prvRegTest2Task( void *pvParameters )\r
-{\r
- configASSERT( pvParameters == ( void * ) mainREG_TEST_2_PARAMETER );\r
-\r
- for( ;; )\r
- {\r
- vTaskDelay( 10000 );\r
- }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
char *pcGetTaskStatusMessage( void )\r
{\r
/* Not bothered about a critical section here although technically because of\r
#endif //_RB_\r
\r
#ifdef MICROBLAZE_EXCEPTIONS_ENABLED\r
- microblaze_enable_exceptions();\r
+//_RB_ microblaze_enable_exceptions();\r
#endif\r
}\r
/*-----------------------------------------------------------*/\r
\r
+extern void vAssertCalled( char *pcFile, long lLine )\r
+{\r
+volatile unsigned long ul = 1;\r
+\r
+ taskDISABLE_INTERRUPTS();\r
+ while( ul == 1 )\r
+ {\r
+ /* Just for somewhere to put a breakpoint. */\r
+ portNOP();\r
+ }\r
+ taskENABLE_INTERRUPTS();\r
+}\r
+\r