forked from epagris/FreeRTOS-Kernel
		
	Add the beginnings of a Microblaze project for the KC705.
This commit is contained in:
		
							parent
							
								
									501a531d46
								
							
						
					
					
						commit
						acfbb7dd14
					
				@ -89,12 +89,16 @@
 | 
			
		||||
/* Dimensions the buffer into which input characters are placed. */
 | 
			
		||||
#define cmdMAX_INPUT_SIZE		50
 | 
			
		||||
 | 
			
		||||
/* Dimentions a buffer to be used by the UART driver, if the UART driver uses a
 | 
			
		||||
buffer at all. */
 | 
			
		||||
#define cmdQUEUE_LENGTH			25
 | 
			
		||||
 | 
			
		||||
/* DEL acts as a backspace. */
 | 
			
		||||
#define cmdASCII_DEL		( 0x7F )
 | 
			
		||||
 | 
			
		||||
#define cmdMAX_MUTEX_WAIT		( ( ( TickType_t ) 300 ) / ( portTICK_PERIOD_MS ) )
 | 
			
		||||
/* The maximum time to wait for the mutex that guards the UART to become
 | 
			
		||||
available. */
 | 
			
		||||
#define cmdMAX_MUTEX_WAIT		pdMS_TO_TICKS( 300 )
 | 
			
		||||
 | 
			
		||||
#ifndef configCLI_BAUD_RATE
 | 
			
		||||
	#define configCLI_BAUD_RATE	115200
 | 
			
		||||
@ -115,7 +119,11 @@ static const char * const pcWelcomeMessage = "FreeRTOS command server.\r\nType H
 | 
			
		||||
static const char * const pcEndOfOutputMessage = "\r\n[Press ENTER to execute the previous command again]\r\n>";
 | 
			
		||||
static const char * const pcNewLine = "\r\n";
 | 
			
		||||
 | 
			
		||||
SemaphoreHandle_t xTxMutex = NULL;
 | 
			
		||||
/* Used to guard access to the UART in case messages are sent to the UART from
 | 
			
		||||
more than one task. */
 | 
			
		||||
static SemaphoreHandle_t xTxMutex = NULL;
 | 
			
		||||
 | 
			
		||||
/* The handle to the UART port, which is not used by all ports. */
 | 
			
		||||
static xComPortHandle xPort = 0;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										254
									
								
								FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/.cproject
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/.cproject
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,254 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 | 
			
		||||
	<storageModule moduleId="org.eclipse.cdt.core.settings">
 | 
			
		||||
		<cconfiguration id="xilinx.gnu.mb.exe.debug.1168698469">
 | 
			
		||||
			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="xilinx.gnu.mb.exe.debug.1168698469" moduleId="org.eclipse.cdt.core.settings" name="Debug">
 | 
			
		||||
				<externalSettings/>
 | 
			
		||||
				<extensions>
 | 
			
		||||
					<extension id="com.xilinx.sdk.managedbuilder.XELF.mb" point="org.eclipse.cdt.core.BinaryParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
				</extensions>
 | 
			
		||||
			</storageModule>
 | 
			
		||||
			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 | 
			
		||||
				<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="xilinx.gnu.mb.exe.debug.1168698469" name="Debug" parent="xilinx.gnu.mb.exe.debug">
 | 
			
		||||
					<folderInfo id="xilinx.gnu.mb.exe.debug.1168698469." name="/" resourcePath="">
 | 
			
		||||
						<toolChain id="xilinx.gnu.mb.exe.debug.toolchain.14883112" name="Xilinx MicroBlaze GNU Toolchain" superClass="xilinx.gnu.mb.exe.debug.toolchain">
 | 
			
		||||
							<targetPlatform binaryParser="com.xilinx.sdk.managedbuilder.XELF.mb" id="xilinx.mb.target.gnu.base.debug.440787793" isAbstract="false" name="Debug Platform" superClass="xilinx.mb.target.gnu.base.debug"/>
 | 
			
		||||
							<builder buildPath="${workspace_loc:/RTOSDemo}/Debug" enableAutoBuild="true" id="xilinx.gnu.mb.toolchain.builder.debug.1044145320" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU make" superClass="xilinx.gnu.mb.toolchain.builder.debug"/>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.c.toolchain.assembler.debug.346786001" name="MicroBlaze gcc assembler" superClass="xilinx.gnu.mb.c.toolchain.assembler.debug">
 | 
			
		||||
								<option id="xilinx.gnu.mb.assembler.usele.2013548111" name="Produce little endian code (-mlittle-endian)" superClass="xilinx.gnu.mb.assembler.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.both.assembler.option.flags.912339622" name="Assembler Flags" superClass="xilinx.gnu.both.assembler.option.flags" value="--gdwarf2" valueType="string"/>
 | 
			
		||||
								<inputType id="xilinx.gnu.assembler.input.456766962" superClass="xilinx.gnu.assembler.input"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.c.toolchain.compiler.debug.610152912" name="MicroBlaze gcc compiler" superClass="xilinx.gnu.mb.c.toolchain.compiler.debug">
 | 
			
		||||
								<option defaultValue="gnu.c.optimization.level.none" id="xilinx.gnu.compiler.option.optimization.level.572742481" name="Optimization Level" superClass="xilinx.gnu.compiler.option.optimization.level" value="gnu.c.optimization.level.none" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.option.debugging.level.1760804237" name="Debug Level" superClass="xilinx.gnu.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.mbversion.1077404609" name="MicroBlaze Version" superClass="xilinx.gnu.mb.compiler.inferred.mbversion" value="9.4" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.norelax.1720907536" name="No relaxation (-Wl,--no-relax)" superClass="xilinx.gnu.mb.compiler.inferred.norelax" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.garbage.529193311" name="Enable garbage collector (-ffunction-sections -fdata-sections)" superClass="xilinx.gnu.mb.compiler.inferred.garbage" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usele.1753088010" name="Produce little endian code (-mlittle-endian)" superClass="xilinx.gnu.mb.compiler.inferred.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usebarrel.407815412" name="Use Barrel Shifter (-mxl-barrel-shift)" superClass="xilinx.gnu.mb.compiler.inferred.usebarrel" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usepcmp.871489971" name="Use Pattern Compare (-mxl-pattern-compare)" superClass="xilinx.gnu.mb.compiler.inferred.usepcmp" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.mul.1218170537" name="Hardware Multiplier" superClass="xilinx.gnu.mb.compiler.inferred.mul" value="xilinx.gnu.mb.compiler.inferred.mul.64bit" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.inferred.swplatform.includes.1674856733" name="Software Platform Include Path" superClass="xilinx.gnu.compiler.inferred.swplatform.includes" valueType="includePath">
 | 
			
		||||
									<listOptionValue builtIn="false" value="../../BSP/microblaze_0/include"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.dircategory.includes.926330011" name="Include Paths" superClass="xilinx.gnu.compiler.dircategory.includes" valueType="includePath">
 | 
			
		||||
									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}""/>
 | 
			
		||||
									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Full_Demo/FreeRTOS+CLI}""/>
 | 
			
		||||
									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Full_Demo/Common_Demo_Source/include}""/>
 | 
			
		||||
									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/>
 | 
			
		||||
									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/GCC/MicroBlazeV8}""/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usediv.176140776" name="Use hardware divider (-mno-xl-soft-div)" superClass="xilinx.gnu.mb.compiler.inferred.usediv" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.fpu.1263402929" name="FPU" superClass="xilinx.gnu.mb.compiler.inferred.fpu" value="xilinx.gnu.mb.compiler.inferred.fpu.full" valueType="enumerated"/>
 | 
			
		||||
								<inputType id="xilinx.gnu.compiler.input.958217800" name="C source files" superClass="xilinx.gnu.compiler.input"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.cxx.toolchain.compiler.debug.1001275207" name="MicroBlaze g++ compiler" superClass="xilinx.gnu.mb.cxx.toolchain.compiler.debug">
 | 
			
		||||
								<option defaultValue="gnu.c.optimization.level.none" id="xilinx.gnu.compiler.option.optimization.level.1814020666" name="Optimization Level" superClass="xilinx.gnu.compiler.option.optimization.level" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.option.debugging.level.557344078" name="Debug Level" superClass="xilinx.gnu.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.mbversion.1730413776" name="MicroBlaze Version" superClass="xilinx.gnu.mb.compiler.inferred.mbversion" value="9.4" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.norelax.2057549652" name="No relaxation (-Wl,--no-relax)" superClass="xilinx.gnu.mb.compiler.inferred.norelax" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.garbage.1466989666" name="Enable garbage collector (-ffunction-sections -fdata-sections)" superClass="xilinx.gnu.mb.compiler.inferred.garbage" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usele.907576056" name="Produce little endian code (-mlittle-endian)" superClass="xilinx.gnu.mb.compiler.inferred.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usebarrel.1583387880" name="Use Barrel Shifter (-mxl-barrel-shift)" superClass="xilinx.gnu.mb.compiler.inferred.usebarrel" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usepcmp.338938483" name="Use Pattern Compare (-mxl-pattern-compare)" superClass="xilinx.gnu.mb.compiler.inferred.usepcmp" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.mul.323827691" name="Hardware Multiplier" superClass="xilinx.gnu.mb.compiler.inferred.mul" value="xilinx.gnu.mb.compiler.inferred.mul.64bit" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.inferred.swplatform.includes.573056167" name="Software Platform Include Path" superClass="xilinx.gnu.compiler.inferred.swplatform.includes" valueType="includePath">
 | 
			
		||||
									<listOptionValue builtIn="false" value="../../BSP/microblaze_0/include"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usediv.1480225555" name="Use hardware divider (-mno-xl-soft-div)" superClass="xilinx.gnu.mb.compiler.inferred.usediv" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.fpu.1629241772" name="FPU" superClass="xilinx.gnu.mb.compiler.inferred.fpu" value="xilinx.gnu.mb.compiler.inferred.fpu.full" valueType="enumerated"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.toolchain.archiver.1141491931" name="MicroBlaze archiver" superClass="xilinx.gnu.mb.toolchain.archiver"/>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.c.toolchain.linker.debug.94585141" name="MicroBlaze gcc linker" superClass="xilinx.gnu.mb.c.toolchain.linker.debug">
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.mbversion.821554565" name="MicroBlaze Version" superClass="xilinx.gnu.mb.linker.inferred.mbversion" value="9.4" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.norelax.1563907624" name="No relaxation (-Wl,--no-relax)" superClass="xilinx.gnu.mb.linker.inferred.norelax" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.garbage.991496872" name="Enable garbage collector (-Wl,--gc-sections)" superClass="xilinx.gnu.mb.linker.inferred.garbage" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usele.884251288" name="Produce little endian artifacts (-mlittle-endian)" superClass="xilinx.gnu.mb.linker.inferred.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usebarrel.1310399395" name="Use Barrel Shifter (-mxl-barrel-shift)" superClass="xilinx.gnu.mb.linker.inferred.usebarrel" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usepcmp.800637548" name="Use Pattern Compare (-mxl-pattern-compare)" superClass="xilinx.gnu.mb.linker.inferred.usepcmp" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.mul.2032017329" name="Hardware Multiplier" superClass="xilinx.gnu.mb.linker.inferred.mul" value="xilinx.gnu.mb.linker.inferred.mul.64bit" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.linker.inferred.swplatform.lpath.1354401171" name="Software Platform Library Path" superClass="xilinx.gnu.linker.inferred.swplatform.lpath" valueType="libPaths">
 | 
			
		||||
									<listOptionValue builtIn="false" value="../../BSP/microblaze_0/lib"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.linker.inferred.swplatform.flags.449938459" name="Software Platform Inferred Flags" superClass="xilinx.gnu.linker.inferred.swplatform.flags" valueType="libs">
 | 
			
		||||
									<listOptionValue builtIn="false" value="-Wl,--start-group,-lxil,-lgcc,-lc,--end-group"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.c.linker.option.lscript.1597632372" name="Linker Script" superClass="xilinx.gnu.c.linker.option.lscript" value="../src/lscript.ld" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.c.link.option.other.1673037487" name="Other options (-XLinker [option])" superClass="xilinx.gnu.c.link.option.other" valueType="stringList">
 | 
			
		||||
									<listOptionValue builtIn="false" value="-Map=RTOSDemo.map"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usediv.1149988771" name="Use hardware divider (-mno-xl-soft-div)" superClass="xilinx.gnu.mb.linker.inferred.usediv" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.fpu.1650544141" name="FPU" superClass="xilinx.gnu.mb.linker.inferred.fpu" value="xilinx.gnu.mb.linker.inferred.fpu.full" valueType="enumerated"/>
 | 
			
		||||
								<inputType id="xilinx.gnu.linker.input.1784733490" superClass="xilinx.gnu.linker.input">
 | 
			
		||||
									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 | 
			
		||||
									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
 | 
			
		||||
								</inputType>
 | 
			
		||||
								<inputType id="xilinx.gnu.linker.input.lscript.1166267030" name="Linker Script" superClass="xilinx.gnu.linker.input.lscript"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.cxx.toolchain.linker.debug.1439732386" name="MicroBlaze g++ linker" superClass="xilinx.gnu.mb.cxx.toolchain.linker.debug">
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.mbversion.1509934549" name="MicroBlaze Version" superClass="xilinx.gnu.mb.linker.inferred.mbversion" value="9.4" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.norelax.539737090" name="No relaxation (-Wl,--no-relax)" superClass="xilinx.gnu.mb.linker.inferred.norelax" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.garbage.219174910" name="Enable garbage collector (-Wl,--gc-sections)" superClass="xilinx.gnu.mb.linker.inferred.garbage" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usele.1849950874" name="Produce little endian artifacts (-mlittle-endian)" superClass="xilinx.gnu.mb.linker.inferred.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usebarrel.126401047" name="Use Barrel Shifter (-mxl-barrel-shift)" superClass="xilinx.gnu.mb.linker.inferred.usebarrel" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usepcmp.2099748712" name="Use Pattern Compare (-mxl-pattern-compare)" superClass="xilinx.gnu.mb.linker.inferred.usepcmp" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.mul.1773978162" name="Hardware Multiplier" superClass="xilinx.gnu.mb.linker.inferred.mul" value="xilinx.gnu.mb.linker.inferred.mul.64bit" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.linker.inferred.swplatform.lpath.769655640" name="Software Platform Library Path" superClass="xilinx.gnu.linker.inferred.swplatform.lpath" valueType="libPaths">
 | 
			
		||||
									<listOptionValue builtIn="false" value="../../BSP/microblaze_0/lib"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.linker.inferred.swplatform.flags.29683512" name="Software Platform Inferred Flags" superClass="xilinx.gnu.linker.inferred.swplatform.flags" valueType="libs">
 | 
			
		||||
									<listOptionValue builtIn="false" value="-Wl,--start-group,-lxil,-lgcc,-lc,--end-group"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.c.linker.option.lscript.1987661405" name="Linker Script" superClass="xilinx.gnu.c.linker.option.lscript" value="../src/lscript.ld" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usediv.1593855945" name="Use hardware divider (-mno-xl-soft-div)" superClass="xilinx.gnu.mb.linker.inferred.usediv" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.fpu.1402555537" name="FPU" superClass="xilinx.gnu.mb.linker.inferred.fpu" value="xilinx.gnu.mb.linker.inferred.fpu.full" valueType="enumerated"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.size.debug.725684245" name="MicroBlaze Print Size" superClass="xilinx.gnu.mb.size.debug"/>
 | 
			
		||||
						</toolChain>
 | 
			
		||||
					</folderInfo>
 | 
			
		||||
					<sourceEntries>
 | 
			
		||||
						<entry excluding="src/platform.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
 | 
			
		||||
					</sourceEntries>
 | 
			
		||||
				</configuration>
 | 
			
		||||
			</storageModule>
 | 
			
		||||
			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 | 
			
		||||
		</cconfiguration>
 | 
			
		||||
		<cconfiguration id="xilinx.gnu.mb.exe.release.414255757">
 | 
			
		||||
			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="xilinx.gnu.mb.exe.release.414255757" moduleId="org.eclipse.cdt.core.settings" name="Release">
 | 
			
		||||
				<externalSettings/>
 | 
			
		||||
				<extensions>
 | 
			
		||||
					<extension id="com.xilinx.sdk.managedbuilder.XELF.mb" point="org.eclipse.cdt.core.BinaryParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 | 
			
		||||
				</extensions>
 | 
			
		||||
			</storageModule>
 | 
			
		||||
			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 | 
			
		||||
				<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="xilinx.gnu.mb.exe.release.414255757" name="Release" parent="xilinx.gnu.mb.exe.release">
 | 
			
		||||
					<folderInfo id="xilinx.gnu.mb.exe.release.414255757." name="/" resourcePath="">
 | 
			
		||||
						<toolChain id="xilinx.gnu.mb.exe.release.toolchain.1439667655" name="Xilinx MicroBlaze GNU Toolchain" superClass="xilinx.gnu.mb.exe.release.toolchain">
 | 
			
		||||
							<targetPlatform binaryParser="com.xilinx.sdk.managedbuilder.XELF.mb" id="xilinx.mb.target.gnu.base.release.591406865" isAbstract="false" name="Debug Platform" superClass="xilinx.mb.target.gnu.base.release"/>
 | 
			
		||||
							<builder buildPath="${workspace_loc:/RTOSDemo}/Release" enableAutoBuild="true" id="xilinx.gnu.mb.toolchain.builder.release.1813699512" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU make" superClass="xilinx.gnu.mb.toolchain.builder.release"/>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.c.toolchain.assembler.release.256772050" name="MicroBlaze gcc assembler" superClass="xilinx.gnu.mb.c.toolchain.assembler.release">
 | 
			
		||||
								<option id="xilinx.gnu.mb.assembler.usele.738447571" name="Produce little endian code (-mlittle-endian)" superClass="xilinx.gnu.mb.assembler.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<inputType id="xilinx.gnu.assembler.input.610027049" superClass="xilinx.gnu.assembler.input"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.c.toolchain.compiler.release.1443217249" name="MicroBlaze gcc compiler" superClass="xilinx.gnu.mb.c.toolchain.compiler.release">
 | 
			
		||||
								<option defaultValue="gnu.c.optimization.level.more" id="xilinx.gnu.compiler.option.optimization.level.21573265" name="Optimization Level" superClass="xilinx.gnu.compiler.option.optimization.level" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.option.debugging.level.1736905032" name="Debug Level" superClass="xilinx.gnu.compiler.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.mbversion.1564374944" name="MicroBlaze Version" superClass="xilinx.gnu.mb.compiler.inferred.mbversion" value="9.4" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.norelax.1980824775" name="No relaxation (-Wl,--no-relax)" superClass="xilinx.gnu.mb.compiler.inferred.norelax" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.garbage.1188317904" name="Enable garbage collector (-ffunction-sections -fdata-sections)" superClass="xilinx.gnu.mb.compiler.inferred.garbage" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usele.1634323562" name="Produce little endian code (-mlittle-endian)" superClass="xilinx.gnu.mb.compiler.inferred.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usebarrel.572581704" name="Use Barrel Shifter (-mxl-barrel-shift)" superClass="xilinx.gnu.mb.compiler.inferred.usebarrel" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usepcmp.697475189" name="Use Pattern Compare (-mxl-pattern-compare)" superClass="xilinx.gnu.mb.compiler.inferred.usepcmp" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.mul.18073345" name="Hardware Multiplier" superClass="xilinx.gnu.mb.compiler.inferred.mul" value="xilinx.gnu.mb.compiler.inferred.mul.64bit" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.inferred.swplatform.includes.2035386135" name="Software Platform Include Path" superClass="xilinx.gnu.compiler.inferred.swplatform.includes" valueType="includePath">
 | 
			
		||||
									<listOptionValue builtIn="false" value="../../BSP/microblaze_0/include"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usediv.1563197894" name="Use hardware divider (-mno-xl-soft-div)" superClass="xilinx.gnu.mb.compiler.inferred.usediv" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.fpu.1688506526" name="FPU" superClass="xilinx.gnu.mb.compiler.inferred.fpu" value="xilinx.gnu.mb.compiler.inferred.fpu.full" valueType="enumerated"/>
 | 
			
		||||
								<inputType id="xilinx.gnu.compiler.input.1636598870" name="C source files" superClass="xilinx.gnu.compiler.input"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.cxx.toolchain.compiler.release.1123156887" name="MicroBlaze g++ compiler" superClass="xilinx.gnu.mb.cxx.toolchain.compiler.release">
 | 
			
		||||
								<option defaultValue="gnu.c.optimization.level.more" id="xilinx.gnu.compiler.option.optimization.level.305690179" name="Optimization Level" superClass="xilinx.gnu.compiler.option.optimization.level" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.option.debugging.level.1674840845" name="Debug Level" superClass="xilinx.gnu.compiler.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.mbversion.1420112600" name="MicroBlaze Version" superClass="xilinx.gnu.mb.compiler.inferred.mbversion" value="9.4" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.norelax.131790279" name="No relaxation (-Wl,--no-relax)" superClass="xilinx.gnu.mb.compiler.inferred.norelax" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.garbage.697175300" name="Enable garbage collector (-ffunction-sections -fdata-sections)" superClass="xilinx.gnu.mb.compiler.inferred.garbage" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usele.1682568396" name="Produce little endian code (-mlittle-endian)" superClass="xilinx.gnu.mb.compiler.inferred.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usebarrel.1995445573" name="Use Barrel Shifter (-mxl-barrel-shift)" superClass="xilinx.gnu.mb.compiler.inferred.usebarrel" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usepcmp.1968082329" name="Use Pattern Compare (-mxl-pattern-compare)" superClass="xilinx.gnu.mb.compiler.inferred.usepcmp" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.mul.1521748201" name="Hardware Multiplier" superClass="xilinx.gnu.mb.compiler.inferred.mul" value="xilinx.gnu.mb.compiler.inferred.mul.64bit" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.compiler.inferred.swplatform.includes.1583494665" name="Software Platform Include Path" superClass="xilinx.gnu.compiler.inferred.swplatform.includes" valueType="includePath">
 | 
			
		||||
									<listOptionValue builtIn="false" value="../../BSP/microblaze_0/include"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.usediv.1207551196" name="Use hardware divider (-mno-xl-soft-div)" superClass="xilinx.gnu.mb.compiler.inferred.usediv" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.compiler.inferred.fpu.1106593933" name="FPU" superClass="xilinx.gnu.mb.compiler.inferred.fpu" value="xilinx.gnu.mb.compiler.inferred.fpu.full" valueType="enumerated"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.toolchain.archiver.1268379117" name="MicroBlaze archiver" superClass="xilinx.gnu.mb.toolchain.archiver"/>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.c.toolchain.linker.release.269837122" name="MicroBlaze gcc linker" superClass="xilinx.gnu.mb.c.toolchain.linker.release">
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.mbversion.2042414685" name="MicroBlaze Version" superClass="xilinx.gnu.mb.linker.inferred.mbversion" value="9.4" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.norelax.1265316944" name="No relaxation (-Wl,--no-relax)" superClass="xilinx.gnu.mb.linker.inferred.norelax" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.garbage.1863317292" name="Enable garbage collector (-Wl,--gc-sections)" superClass="xilinx.gnu.mb.linker.inferred.garbage" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usele.149684890" name="Produce little endian artifacts (-mlittle-endian)" superClass="xilinx.gnu.mb.linker.inferred.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usebarrel.125003317" name="Use Barrel Shifter (-mxl-barrel-shift)" superClass="xilinx.gnu.mb.linker.inferred.usebarrel" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usepcmp.1032378219" name="Use Pattern Compare (-mxl-pattern-compare)" superClass="xilinx.gnu.mb.linker.inferred.usepcmp" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.mul.28454705" name="Hardware Multiplier" superClass="xilinx.gnu.mb.linker.inferred.mul" value="xilinx.gnu.mb.linker.inferred.mul.64bit" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.linker.inferred.swplatform.lpath.464601386" name="Software Platform Library Path" superClass="xilinx.gnu.linker.inferred.swplatform.lpath" valueType="libPaths">
 | 
			
		||||
									<listOptionValue builtIn="false" value="../../BSP/microblaze_0/lib"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.linker.inferred.swplatform.flags.2029257059" name="Software Platform Inferred Flags" superClass="xilinx.gnu.linker.inferred.swplatform.flags" valueType="libs">
 | 
			
		||||
									<listOptionValue builtIn="false" value="-Wl,--start-group,-lxil,-lgcc,-lc,--end-group"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.c.linker.option.lscript.627698424" name="Linker Script" superClass="xilinx.gnu.c.linker.option.lscript" value="../src/lscript.ld" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usediv.339122145" name="Use hardware divider (-mno-xl-soft-div)" superClass="xilinx.gnu.mb.linker.inferred.usediv" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.fpu.1438305304" name="FPU" superClass="xilinx.gnu.mb.linker.inferred.fpu" value="xilinx.gnu.mb.linker.inferred.fpu.full" valueType="enumerated"/>
 | 
			
		||||
								<inputType id="xilinx.gnu.linker.input.295030377" superClass="xilinx.gnu.linker.input">
 | 
			
		||||
									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 | 
			
		||||
									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
 | 
			
		||||
								</inputType>
 | 
			
		||||
								<inputType id="xilinx.gnu.linker.input.lscript.1843704465" name="Linker Script" superClass="xilinx.gnu.linker.input.lscript"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.cxx.toolchain.linker.release.2049764997" name="MicroBlaze g++ linker" superClass="xilinx.gnu.mb.cxx.toolchain.linker.release">
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.mbversion.408481026" name="MicroBlaze Version" superClass="xilinx.gnu.mb.linker.inferred.mbversion" value="9.4" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.norelax.321430253" name="No relaxation (-Wl,--no-relax)" superClass="xilinx.gnu.mb.linker.inferred.norelax" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.garbage.1811933000" name="Enable garbage collector (-Wl,--gc-sections)" superClass="xilinx.gnu.mb.linker.inferred.garbage" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usele.1277050026" name="Produce little endian artifacts (-mlittle-endian)" superClass="xilinx.gnu.mb.linker.inferred.usele" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usebarrel.1525237857" name="Use Barrel Shifter (-mxl-barrel-shift)" superClass="xilinx.gnu.mb.linker.inferred.usebarrel" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usepcmp.893116745" name="Use Pattern Compare (-mxl-pattern-compare)" superClass="xilinx.gnu.mb.linker.inferred.usepcmp" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.mul.1695487004" name="Hardware Multiplier" superClass="xilinx.gnu.mb.linker.inferred.mul" value="xilinx.gnu.mb.linker.inferred.mul.64bit" valueType="enumerated"/>
 | 
			
		||||
								<option id="xilinx.gnu.linker.inferred.swplatform.lpath.2083028820" name="Software Platform Library Path" superClass="xilinx.gnu.linker.inferred.swplatform.lpath" valueType="libPaths">
 | 
			
		||||
									<listOptionValue builtIn="false" value="../../BSP/microblaze_0/lib"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.linker.inferred.swplatform.flags.919481051" name="Software Platform Inferred Flags" superClass="xilinx.gnu.linker.inferred.swplatform.flags" valueType="libs">
 | 
			
		||||
									<listOptionValue builtIn="false" value="-Wl,--start-group,-lxil,-lgcc,-lc,--end-group"/>
 | 
			
		||||
								</option>
 | 
			
		||||
								<option id="xilinx.gnu.c.linker.option.lscript.1354969079" name="Linker Script" superClass="xilinx.gnu.c.linker.option.lscript" value="../src/lscript.ld" valueType="string"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.usediv.1252380414" name="Use hardware divider (-mno-xl-soft-div)" superClass="xilinx.gnu.mb.linker.inferred.usediv" value="true" valueType="boolean"/>
 | 
			
		||||
								<option id="xilinx.gnu.mb.linker.inferred.fpu.320989190" name="FPU" superClass="xilinx.gnu.mb.linker.inferred.fpu" value="xilinx.gnu.mb.linker.inferred.fpu.full" valueType="enumerated"/>
 | 
			
		||||
							</tool>
 | 
			
		||||
							<tool id="xilinx.gnu.mb.size.release.1391967460" name="MicroBlaze Print Size" superClass="xilinx.gnu.mb.size.release"/>
 | 
			
		||||
						</toolChain>
 | 
			
		||||
					</folderInfo>
 | 
			
		||||
				</configuration>
 | 
			
		||||
			</storageModule>
 | 
			
		||||
			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 | 
			
		||||
		</cconfiguration>
 | 
			
		||||
	</storageModule>
 | 
			
		||||
	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 | 
			
		||||
	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 | 
			
		||||
		<project id="RTOSDemo.xilinx.gnu.mb.exe.1839712182" name="Xilinx MicroBlaze Executable" projectType="xilinx.gnu.mb.exe"/>
 | 
			
		||||
	</storageModule>
 | 
			
		||||
	<storageModule moduleId="scannerConfiguration">
 | 
			
		||||
		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 | 
			
		||||
		<scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.debug.1168698469;xilinx.gnu.mb.exe.debug.1168698469.;xilinx.gnu.mb.c.toolchain.compiler.debug.610152912;xilinx.gnu.compiler.input.958217800">
 | 
			
		||||
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>
 | 
			
		||||
		</scannerConfigBuildInfo>
 | 
			
		||||
		<scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.debug.1168698469;xilinx.gnu.mb.exe.debug.1168698469.">
 | 
			
		||||
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>
 | 
			
		||||
		</scannerConfigBuildInfo>
 | 
			
		||||
		<scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.release.414255757;xilinx.gnu.mb.exe.release.414255757.">
 | 
			
		||||
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>
 | 
			
		||||
		</scannerConfigBuildInfo>
 | 
			
		||||
		<scannerConfigBuildInfo instanceId="xilinx.gnu.mb.exe.release.414255757;xilinx.gnu.mb.exe.release.414255757.;xilinx.gnu.mb.c.toolchain.compiler.release.1443217249;xilinx.gnu.compiler.input.1636598870">
 | 
			
		||||
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.xilinx.managedbuilder.ui.MBGCCManagedMakePerProjectProfileC"/>
 | 
			
		||||
		</scannerConfigBuildInfo>
 | 
			
		||||
	</storageModule>
 | 
			
		||||
	<storageModule moduleId="refreshScope" versionNumber="2">
 | 
			
		||||
		<configuration configurationName="Debug">
 | 
			
		||||
			<resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>
 | 
			
		||||
		</configuration>
 | 
			
		||||
		<configuration configurationName="Release">
 | 
			
		||||
			<resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>
 | 
			
		||||
		</configuration>
 | 
			
		||||
	</storageModule>
 | 
			
		||||
</cproject>
 | 
			
		||||
							
								
								
									
										250
									
								
								FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/.project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/.project
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,250 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<projectDescription>
 | 
			
		||||
	<name>RTOSDemo</name>
 | 
			
		||||
	<comment></comment>
 | 
			
		||||
	<projects>
 | 
			
		||||
		<project>BSP</project>
 | 
			
		||||
	</projects>
 | 
			
		||||
	<buildSpec>
 | 
			
		||||
		<buildCommand>
 | 
			
		||||
			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 | 
			
		||||
			<arguments>
 | 
			
		||||
			</arguments>
 | 
			
		||||
		</buildCommand>
 | 
			
		||||
		<buildCommand>
 | 
			
		||||
			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 | 
			
		||||
			<triggers>full,incremental,</triggers>
 | 
			
		||||
			<arguments>
 | 
			
		||||
			</arguments>
 | 
			
		||||
		</buildCommand>
 | 
			
		||||
	</buildSpec>
 | 
			
		||||
	<natures>
 | 
			
		||||
		<nature>org.eclipse.cdt.core.cnature</nature>
 | 
			
		||||
		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 | 
			
		||||
		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 | 
			
		||||
	</natures>
 | 
			
		||||
	<linkedResources>
 | 
			
		||||
		<link>
 | 
			
		||||
			<name>src/FreeRTOS_Source</name>
 | 
			
		||||
			<type>2</type>
 | 
			
		||||
			<locationURI>FREERTOS_ROOT/FreeRTOS/Source</locationURI>
 | 
			
		||||
		</link>
 | 
			
		||||
		<link>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source</name>
 | 
			
		||||
			<type>2</type>
 | 
			
		||||
			<locationURI>FREERTOS_ROOT/FreeRTOS/Demo/Common</locationURI>
 | 
			
		||||
		</link>
 | 
			
		||||
		<link>
 | 
			
		||||
			<name>src/Full_Demo/FreeRTOS+CLI</name>
 | 
			
		||||
			<type>2</type>
 | 
			
		||||
			<locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Source/FreeRTOS-Plus-CLI</locationURI>
 | 
			
		||||
		</link>
 | 
			
		||||
		<link>
 | 
			
		||||
			<name>src/Full_Demo/Sample-CLI-commands.c</name>
 | 
			
		||||
			<type>1</type>
 | 
			
		||||
			<locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/Sample-CLI-commands.c</locationURI>
 | 
			
		||||
		</link>
 | 
			
		||||
		<link>
 | 
			
		||||
			<name>src/Full_Demo/UARTCommandConsole.c</name>
 | 
			
		||||
			<type>1</type>
 | 
			
		||||
			<locationURI>FREERTOS_ROOT/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/UARTCommandConsole.c</locationURI>
 | 
			
		||||
		</link>
 | 
			
		||||
	</linkedResources>
 | 
			
		||||
	<filteredResources>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1420634088772</id>
 | 
			
		||||
			<name>src/FreeRTOS_Source</name>
 | 
			
		||||
			<type>6</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-croutine.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1420634120346</id>
 | 
			
		||||
			<name>src/FreeRTOS_Source/portable</name>
 | 
			
		||||
			<type>9</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-GCC</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1420634120356</id>
 | 
			
		||||
			<name>src/FreeRTOS_Source/portable</name>
 | 
			
		||||
			<type>9</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-MemMang</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1420646347327</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source</name>
 | 
			
		||||
			<type>9</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-include</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1420646347337</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source</name>
 | 
			
		||||
			<type>9</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-Minimal</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1420635505242</id>
 | 
			
		||||
			<name>src/FreeRTOS_Source/portable/GCC</name>
 | 
			
		||||
			<type>9</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-MicroBlazeV8</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421332822358</id>
 | 
			
		||||
			<name>src/FreeRTOS_Source/portable/MemMang</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-heap_4.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118832</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-sp_flop.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118842</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-semtest.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118842</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-dynamic.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118852</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-countsem.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118852</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-GenQTest.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118852</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-recmutex.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118862</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-partest.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118872</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-comtest2.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118872</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-TimerDemo.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118872</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-EventGroupsDemo.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118882</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-TaskNotify.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118882</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-IntSemTest.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118892</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-flash_timer.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1421425118892</id>
 | 
			
		||||
			<name>src/Full_Demo/Common_Demo_Source/Minimal</name>
 | 
			
		||||
			<type>5</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.ui.ide.multiFilter</id>
 | 
			
		||||
				<arguments>1.0-name-matches-false-false-blocktim.c</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
	</filteredResources>
 | 
			
		||||
	<variableList>
 | 
			
		||||
		<variable>
 | 
			
		||||
			<name>FREERTOS_ROOT</name>
 | 
			
		||||
			<value>$%7BPARENT-4-PROJECT_LOC%7D</value>
 | 
			
		||||
		</variable>
 | 
			
		||||
	</variableList>
 | 
			
		||||
</projectDescription>
 | 
			
		||||
@ -0,0 +1,231 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
 | 
			
		||||
    All rights reserved
 | 
			
		||||
 | 
			
		||||
    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is free software; you can redistribute it and/or modify it under
 | 
			
		||||
    the terms of the GNU General Public License (version 2) as published by the
 | 
			
		||||
    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
    >>!   NOTE: The modification to the GPL is included to allow you to     !<<
 | 
			
		||||
    >>!   distribute a combined work that includes FreeRTOS without being   !<<
 | 
			
		||||
    >>!   obliged to provide the source code for proprietary components     !<<
 | 
			
		||||
    >>!   outside of the FreeRTOS kernel.                                   !<<
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE.  Full license text is available on the following
 | 
			
		||||
    link: http://www.freertos.org/a00114.html
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    FreeRTOS provides completely free yet professionally developed,    *
 | 
			
		||||
     *    robust, strictly quality controlled, supported, and cross          *
 | 
			
		||||
     *    platform software that is more than just the market leader, it     *
 | 
			
		||||
     *    is the industry's de facto standard.                               *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    Help yourself get started quickly while simultaneously helping     *
 | 
			
		||||
     *    to support the FreeRTOS project by purchasing a FreeRTOS           *
 | 
			
		||||
     *    tutorial book, reference manual, or both:                          *
 | 
			
		||||
     *    http://www.FreeRTOS.org/Documentation                              *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading
 | 
			
		||||
	the FAQ page "My application does not run, what could be wrong?".  Have you
 | 
			
		||||
	defined configASSERT()?
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/support - In return for receiving this top quality
 | 
			
		||||
	embedded software for free we request you assist our global community by
 | 
			
		||||
	participating in the support forum.
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/training - Investing in training allows your team to
 | 
			
		||||
	be as productive as possible as early as possible.  Now you can receive
 | 
			
		||||
	FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
 | 
			
		||||
	Ltd, and the world's leading authority on the world's leading RTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
 | 
			
		||||
    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
 | 
			
		||||
    compatible FAT file system, and our tiny thread aware UDP/IP stack.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
 | 
			
		||||
    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
 | 
			
		||||
    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS
 | 
			
		||||
    licenses offer ticketed support, indemnification and commercial middleware.
 | 
			
		||||
 | 
			
		||||
    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
 | 
			
		||||
    engineered and independently SIL3 certified version for use in safety and
 | 
			
		||||
    mission critical applications that require provable dependability.
 | 
			
		||||
 | 
			
		||||
    1 tab == 4 spaces!
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * NOTE 1:  This project provides two demo applications.  A simple blinky
 | 
			
		||||
 * style project, and a more comprehensive test and demo application.  The
 | 
			
		||||
 * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select
 | 
			
		||||
 * between the two.  See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY
 | 
			
		||||
 * in main.c.  This file implements the simply blinky style version.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE 2:  This file only contains the source code that is specific to the
 | 
			
		||||
 * basic demo.  Generic functions, such FreeRTOS hook functions, and functions
 | 
			
		||||
 * required to configure the hardware are defined in main.c.
 | 
			
		||||
 ******************************************************************************
 | 
			
		||||
 *
 | 
			
		||||
 * main_blinky() creates one queue, and two tasks.  It then starts the
 | 
			
		||||
 * scheduler.
 | 
			
		||||
 *
 | 
			
		||||
 * The Queue Send Task:
 | 
			
		||||
 * The queue send task is implemented by the prvQueueSendTask() function in
 | 
			
		||||
 * this file.  prvQueueSendTask() sits in a loop that causes it to repeatedly
 | 
			
		||||
 * block for 200 milliseconds, before sending the value 100 to the queue that
 | 
			
		||||
 * was created within main_blinky().  Once the value is sent, the task loops
 | 
			
		||||
 * back around to block for another 200 milliseconds...and so on.
 | 
			
		||||
 *
 | 
			
		||||
 * The Queue Receive Task:
 | 
			
		||||
 * The queue receive task is implemented by the prvQueueReceiveTask() function
 | 
			
		||||
 * in this file.  prvQueueReceiveTask() sits in a loop where it repeatedly
 | 
			
		||||
 * blocks on attempts to read data from the queue that was created within
 | 
			
		||||
 * main_blinky().  When data is received, the task checks the value of the
 | 
			
		||||
 * data, and if the value equals the expected 100, toggles an LED.  The 'block
 | 
			
		||||
 * time' parameter passed to the queue receive function specifies that the
 | 
			
		||||
 * task should be held in the Blocked state indefinitely to wait for data to
 | 
			
		||||
 * be available on the queue.  The queue receive task will only leave the
 | 
			
		||||
 * Blocked state when the queue send task writes to the queue.  As the queue
 | 
			
		||||
 * send task writes to the queue every 200 milliseconds, the queue receive
 | 
			
		||||
 * task leaves the Blocked state every 200 milliseconds, and therefore toggles
 | 
			
		||||
 * the LED every 200 milliseconds.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Kernel includes. */
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "task.h"
 | 
			
		||||
#include "semphr.h"
 | 
			
		||||
 | 
			
		||||
/* Standard demo includes. */
 | 
			
		||||
#include "partest.h"
 | 
			
		||||
 | 
			
		||||
/* Priorities at which the tasks are created. */
 | 
			
		||||
#define mainQUEUE_RECEIVE_TASK_PRIORITY		( tskIDLE_PRIORITY + 2 )
 | 
			
		||||
#define	mainQUEUE_SEND_TASK_PRIORITY		( tskIDLE_PRIORITY + 1 )
 | 
			
		||||
 | 
			
		||||
/* The rate at which data is sent to the queue.  The 200ms value is converted
 | 
			
		||||
to ticks using the pdMS_TO_TICKS() macro. */
 | 
			
		||||
#define mainQUEUE_SEND_FREQUENCY_MS			( pdMS_TO_TICKS( 200UL ) )
 | 
			
		||||
 | 
			
		||||
/* The number of items the queue can hold.  This is 1 as the receive task
 | 
			
		||||
will remove items as they are added, meaning the send task should always find
 | 
			
		||||
the queue empty. */
 | 
			
		||||
#define mainQUEUE_LENGTH					( 1 )
 | 
			
		||||
 | 
			
		||||
/* The LED toggled by the Rx task. */
 | 
			
		||||
#define mainTASK_LED						( 0 )
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The tasks as described in the comments at the top of this file.
 | 
			
		||||
 */
 | 
			
		||||
static void prvQueueReceiveTask( void *pvParameters );
 | 
			
		||||
static void prvQueueSendTask( void *pvParameters );
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* The queue used by both tasks. */
 | 
			
		||||
static QueueHandle_t xQueue = NULL;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void main_blinky( void )
 | 
			
		||||
{
 | 
			
		||||
	/* Create the queue. */
 | 
			
		||||
	xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( uint32_t ) );
 | 
			
		||||
 | 
			
		||||
	if( xQueue != NULL )
 | 
			
		||||
	{
 | 
			
		||||
		/* Start the two tasks as described in the comments at the top of this
 | 
			
		||||
		file. */
 | 
			
		||||
		xTaskCreate( prvQueueReceiveTask,				/* The function that implements the task. */
 | 
			
		||||
					"Rx", 								/* The text name assigned to the task - for debug only as it is not used by the kernel. */
 | 
			
		||||
					configMINIMAL_STACK_SIZE, 			/* The size of the stack to allocate to the task. */
 | 
			
		||||
					NULL, 								/* The parameter passed to the task - not used in this case. */
 | 
			
		||||
					mainQUEUE_RECEIVE_TASK_PRIORITY, 	/* The priority assigned to the task. */
 | 
			
		||||
					NULL );								/* The task handle is not required, so NULL is passed. */
 | 
			
		||||
 | 
			
		||||
		xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL );
 | 
			
		||||
 | 
			
		||||
		/* Start the tasks and timer running. */
 | 
			
		||||
		vTaskStartScheduler();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* If all is well, the scheduler will now be running, and the following
 | 
			
		||||
	line will never be reached.  If the following line does execute, then
 | 
			
		||||
	there was either insufficient FreeRTOS heap memory available for the idle
 | 
			
		||||
	and/or timer tasks to be created, or vTaskStartScheduler() was called from
 | 
			
		||||
	User mode.  See the memory management section on the FreeRTOS web site for
 | 
			
		||||
	more details on the FreeRTOS heap http://www.freertos.org/a00111.html.  The
 | 
			
		||||
	mode from which main() is called is set in the C start up code and must be
 | 
			
		||||
	a privileged mode (not user mode). */
 | 
			
		||||
	for( ;; );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvQueueSendTask( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
TickType_t xNextWakeTime;
 | 
			
		||||
const uint32_t ulValueToSend = 100UL;
 | 
			
		||||
 | 
			
		||||
	/* Remove compiler warning about unused parameter. */
 | 
			
		||||
	( void ) pvParameters;
 | 
			
		||||
 | 
			
		||||
	/* Initialise xNextWakeTime - this only needs to be done once. */
 | 
			
		||||
	xNextWakeTime = xTaskGetTickCount();
 | 
			
		||||
 | 
			
		||||
	for( ;; )
 | 
			
		||||
	{
 | 
			
		||||
		/* Place this task in the blocked state until it is time to run again. */
 | 
			
		||||
		vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_FREQUENCY_MS );
 | 
			
		||||
 | 
			
		||||
		/* Send to the queue - causing the queue receive task to unblock and
 | 
			
		||||
		toggle the LED.  0 is used as the block time so the sending operation
 | 
			
		||||
		will not block - it shouldn't need to block as the queue should always
 | 
			
		||||
		be empty at this point in the code. */
 | 
			
		||||
		xQueueSend( xQueue, &ulValueToSend, 0U );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvQueueReceiveTask( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
uint32_t ulReceivedValue;
 | 
			
		||||
const uint32_t ulExpectedValue = 100UL;
 | 
			
		||||
 | 
			
		||||
	/* Remove compiler warning about unused parameter. */
 | 
			
		||||
	( void ) pvParameters;
 | 
			
		||||
 | 
			
		||||
	for( ;; )
 | 
			
		||||
	{
 | 
			
		||||
		/* Wait until something arrives in the queue - this task will block
 | 
			
		||||
		indefinitely provided INCLUDE_vTaskSuspend is set to 1 in
 | 
			
		||||
		FreeRTOSConfig.h. */
 | 
			
		||||
		xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
 | 
			
		||||
 | 
			
		||||
		/*  To get here something must have been received from the queue, but
 | 
			
		||||
		is it the expected value?  If it is, toggle the LED. */
 | 
			
		||||
		if( ulReceivedValue == ulExpectedValue )
 | 
			
		||||
		{
 | 
			
		||||
			vParTestToggleLED( mainTASK_LED );
 | 
			
		||||
			ulReceivedValue = 0U;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,188 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
 | 
			
		||||
    All rights reserved
 | 
			
		||||
 | 
			
		||||
    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is free software; you can redistribute it and/or modify it under
 | 
			
		||||
    the terms of the GNU General Public License (version 2) as published by the
 | 
			
		||||
    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
    >>!   NOTE: The modification to the GPL is included to allow you to     !<<
 | 
			
		||||
    >>!   distribute a combined work that includes FreeRTOS without being   !<<
 | 
			
		||||
    >>!   obliged to provide the source code for proprietary components     !<<
 | 
			
		||||
    >>!   outside of the FreeRTOS kernel.                                   !<<
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE.  Full license text is available on the following
 | 
			
		||||
    link: http://www.freertos.org/a00114.html
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    FreeRTOS provides completely free yet professionally developed,    *
 | 
			
		||||
     *    robust, strictly quality controlled, supported, and cross          *
 | 
			
		||||
     *    platform software that is more than just the market leader, it     *
 | 
			
		||||
     *    is the industry's de facto standard.                               *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    Help yourself get started quickly while simultaneously helping     *
 | 
			
		||||
     *    to support the FreeRTOS project by purchasing a FreeRTOS           *
 | 
			
		||||
     *    tutorial book, reference manual, or both:                          *
 | 
			
		||||
     *    http://www.FreeRTOS.org/Documentation                              *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading
 | 
			
		||||
	the FAQ page "My application does not run, what could be wrong?".  Have you
 | 
			
		||||
	defined configASSERT()?
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/support - In return for receiving this top quality
 | 
			
		||||
	embedded software for free we request you assist our global community by
 | 
			
		||||
	participating in the support forum.
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/training - Investing in training allows your team to
 | 
			
		||||
	be as productive as possible as early as possible.  Now you can receive
 | 
			
		||||
	FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
 | 
			
		||||
	Ltd, and the world's leading authority on the world's leading RTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
 | 
			
		||||
    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
 | 
			
		||||
    compatible FAT file system, and our tiny thread aware UDP/IP stack.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
 | 
			
		||||
    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
 | 
			
		||||
    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS
 | 
			
		||||
    licenses offer ticketed support, indemnification and commercial middleware.
 | 
			
		||||
 | 
			
		||||
    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
 | 
			
		||||
    engineered and independently SIL3 certified version for use in safety and
 | 
			
		||||
    mission critical applications that require provable dependability.
 | 
			
		||||
 | 
			
		||||
    1 tab == 4 spaces!
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef FREERTOS_CONFIG_H
 | 
			
		||||
#define FREERTOS_CONFIG_H
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------
 | 
			
		||||
 * Application specific definitions.
 | 
			
		||||
 *
 | 
			
		||||
 * These definitions should be adjusted for your particular hardware and
 | 
			
		||||
 * application requirements.
 | 
			
		||||
 *
 | 
			
		||||
 * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
 | 
			
		||||
 * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
 | 
			
		||||
 *
 | 
			
		||||
 * See http://www.freertos.org/a00110.html.
 | 
			
		||||
 *----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* configINTERRUPT_CONTROLLER_TO_USE must be set to the ID of the interrupt
 | 
			
		||||
controller that is going to be used directly by FreeRTOS itself.  Most hardware
 | 
			
		||||
designs will only include on interrupt controller. */
 | 
			
		||||
#define configINTERRUPT_CONTROLLER_TO_USE XPAR_INTC_SINGLE_DEVICE_ID
 | 
			
		||||
 | 
			
		||||
/* If configINSTALL_EXCEPTION_HANDLERS is set to 1, then the kernel will
 | 
			
		||||
automatically install its own exception handlers before the kernel is started,
 | 
			
		||||
if the application writer has not already caused them to be installed using the
 | 
			
		||||
vPortExceptionsInstallHandlers() API function.  See the documentation page for
 | 
			
		||||
this demo on the FreeRTOS.org web site for more information. */
 | 
			
		||||
#define configINSTALL_EXCEPTION_HANDLERS 		1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Constants related to the behaviour or the scheduler. */
 | 
			
		||||
#define configUSE_PREEMPTION					1
 | 
			
		||||
#define configUSE_TIME_SLICING					1
 | 
			
		||||
#define configMAX_PRIORITIES					( 7 )
 | 
			
		||||
#define configTICK_RATE_HZ						( ( TickType_t ) 1000 )
 | 
			
		||||
#define configIDLE_SHOULD_YIELD					1
 | 
			
		||||
#define configUSE_16_BIT_TICKS					0 /* Only for 8 and 16-bit hardware. */
 | 
			
		||||
 | 
			
		||||
/* Constants that describe the hardware and memory usage. */
 | 
			
		||||
#define configCPU_CLOCK_HZ						( Not used in this demo as it is determined by the hardware )
 | 
			
		||||
#define configMINIMAL_STACK_SIZE				( ( uint16_t ) 220 )
 | 
			
		||||
#define configTOTAL_HEAP_SIZE					( ( size_t ) ( 50 * 1024 ) ) /* No effect if heap_3.c is used. */
 | 
			
		||||
#define configMAX_TASK_NAME_LEN					( 12 )
 | 
			
		||||
 | 
			
		||||
/* Constants that build features in or out. */
 | 
			
		||||
#define configUSE_MUTEXES						1
 | 
			
		||||
#define configUSE_TICKLESS_IDLE					0
 | 
			
		||||
#define configUSE_APPLICATION_TASK_TAG			0
 | 
			
		||||
#define configUSE_NEWLIB_REENTRANT 				0
 | 
			
		||||
#define configUSE_CO_ROUTINES 					0
 | 
			
		||||
#define configUSE_COUNTING_SEMAPHORES 			1
 | 
			
		||||
#define configUSE_RECURSIVE_MUTEXES				1
 | 
			
		||||
#define configUSE_QUEUE_SETS					0
 | 
			
		||||
#define configUSE_TASK_NOTIFICATIONS			1
 | 
			
		||||
 | 
			
		||||
/* Constants that define which hook (callback) functions should be used. */
 | 
			
		||||
#define configUSE_IDLE_HOOK						1
 | 
			
		||||
#define configUSE_TICK_HOOK						1
 | 
			
		||||
#define configUSE_MALLOC_FAILED_HOOK			1
 | 
			
		||||
 | 
			
		||||
/* Constants provided for debugging and optimisation assistance. */
 | 
			
		||||
#define configCHECK_FOR_STACK_OVERFLOW			2
 | 
			
		||||
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ )
 | 
			
		||||
#define configQUEUE_REGISTRY_SIZE				0
 | 
			
		||||
 | 
			
		||||
/* Constants related to the generation of run time stats. */
 | 
			
		||||
#define configGENERATE_RUN_TIME_STATS			1
 | 
			
		||||
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vMainConfigTimerForRunTimeStats(); /* Only used when configGENERATE_RUN_TIME_STATS is 1. */
 | 
			
		||||
#define portGET_RUN_TIME_COUNTER_VALUE() 		ulMainGetRunTimeCounterValue();		/* Only used when configGENERATE_RUN_TIME_STATS is 1. */
 | 
			
		||||
 | 
			
		||||
/* Software timer definitions. */
 | 
			
		||||
#define configUSE_TIMERS						1
 | 
			
		||||
#define configTIMER_TASK_PRIORITY				( configMAX_PRIORITIES - 4 )
 | 
			
		||||
#define configTIMER_QUEUE_LENGTH				10
 | 
			
		||||
#define configTIMER_TASK_STACK_DEPTH			( configMINIMAL_STACK_SIZE )
 | 
			
		||||
 | 
			
		||||
/* Set the following definitions to 1 to include the API function, or zero
 | 
			
		||||
to exclude the API function.  NOTE:  Setting an INCLUDE_ parameter to 0 is only
 | 
			
		||||
necessary if the linker does not automatically remove functions that are not
 | 
			
		||||
referenced anyway. */
 | 
			
		||||
#define INCLUDE_vTaskPrioritySet				1
 | 
			
		||||
#define INCLUDE_uxTaskPriorityGet				1
 | 
			
		||||
#define INCLUDE_vTaskDelete						1
 | 
			
		||||
#define INCLUDE_vTaskCleanUpResources			0
 | 
			
		||||
#define INCLUDE_vTaskSuspend					1
 | 
			
		||||
#define INCLUDE_vTaskDelayUntil					1
 | 
			
		||||
#define INCLUDE_vTaskDelay						1
 | 
			
		||||
#define INCLUDE_uxTaskGetStackHighWaterMark		1
 | 
			
		||||
#define INCLUDE_pcTaskGetTaskName				1
 | 
			
		||||
#define INCLUDE_xTaskGetIdleTaskHandle			0
 | 
			
		||||
#define INCLUDE_eTaskGetState					1
 | 
			
		||||
#define INCLUDE_xTaskResumeFromISR				0
 | 
			
		||||
#define INCLUDE_xTaskGetCurrentTaskHandle		1
 | 
			
		||||
#define INCLUDE_xTaskGetSchedulerState			0
 | 
			
		||||
#define INCLUDE_xSemaphoreGetMutexHolder		0
 | 
			
		||||
#define INCLUDE_xTimerPendFunctionCall			1
 | 
			
		||||
 | 
			
		||||
/* This demo does not make use of example stats formatting functions.  These
 | 
			
		||||
format the raw data provided by the uxTaskGetSystemState() function in to human
 | 
			
		||||
readable ASCII form.  See the notes in the implementation of vTaskList() within
 | 
			
		||||
FreeRTOS/Source/tasks.c for limitations. */
 | 
			
		||||
#define configUSE_TRACE_FACILITY				1
 | 
			
		||||
#define configUSE_STATS_FORMATTING_FUNCTIONS	1
 | 
			
		||||
 | 
			
		||||
/* The size of the global output buffer that is available for use when there
 | 
			
		||||
are multiple command interpreters running at once (for example, one on a UART
 | 
			
		||||
and one on TCP/IP).  This is done to prevent an output buffer being defined by
 | 
			
		||||
each implementation - which would waste RAM.  In this case, there is only one
 | 
			
		||||
command interpreter running. */
 | 
			
		||||
#define configCOMMAND_INT_MAX_OUTPUT_SIZE 1024
 | 
			
		||||
 | 
			
		||||
/* Prevent the function prototypes being included from asm files. */
 | 
			
		||||
#ifndef __ASSEMBLER__
 | 
			
		||||
	void vMainConfigTimerForRunTimeStats( void );
 | 
			
		||||
	uint32_t ulMainGetRunTimeCounterValue( void );
 | 
			
		||||
	void vAssertCalled( const char * pcFile, unsigned long ulLine );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* FREERTOS_CONFIG_H */
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,303 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
 | 
			
		||||
    All rights reserved
 | 
			
		||||
 | 
			
		||||
    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is free software; you can redistribute it and/or modify it under
 | 
			
		||||
    the terms of the GNU General Public License (version 2) as published by the
 | 
			
		||||
    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
    >>!   NOTE: The modification to the GPL is included to allow you to     !<<
 | 
			
		||||
    >>!   distribute a combined work that includes FreeRTOS without being   !<<
 | 
			
		||||
    >>!   obliged to provide the source code for proprietary components     !<<
 | 
			
		||||
    >>!   outside of the FreeRTOS kernel.                                   !<<
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE.  Full license text is available on the following
 | 
			
		||||
    link: http://www.freertos.org/a00114.html
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    FreeRTOS provides completely free yet professionally developed,    *
 | 
			
		||||
     *    robust, strictly quality controlled, supported, and cross          *
 | 
			
		||||
     *    platform software that is more than just the market leader, it     *
 | 
			
		||||
     *    is the industry's de facto standard.                               *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    Help yourself get started quickly while simultaneously helping     *
 | 
			
		||||
     *    to support the FreeRTOS project by purchasing a FreeRTOS           *
 | 
			
		||||
     *    tutorial book, reference manual, or both:                          *
 | 
			
		||||
     *    http://www.FreeRTOS.org/Documentation                              *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading
 | 
			
		||||
	the FAQ page "My application does not run, what could be wrong?".  Have you
 | 
			
		||||
	defined configASSERT()?
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/support - In return for receiving this top quality
 | 
			
		||||
	embedded software for free we request you assist our global community by
 | 
			
		||||
	participating in the support forum.
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/training - Investing in training allows your team to
 | 
			
		||||
	be as productive as possible as early as possible.  Now you can receive
 | 
			
		||||
	FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
 | 
			
		||||
	Ltd, and the world's leading authority on the world's leading RTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
 | 
			
		||||
    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
 | 
			
		||||
    compatible FAT file system, and our tiny thread aware UDP/IP stack.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
 | 
			
		||||
    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
 | 
			
		||||
    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS
 | 
			
		||||
    licenses offer ticketed support, indemnification and commercial middleware.
 | 
			
		||||
 | 
			
		||||
    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
 | 
			
		||||
    engineered and independently SIL3 certified version for use in safety and
 | 
			
		||||
    mission critical applications that require provable dependability.
 | 
			
		||||
 | 
			
		||||
    1 tab == 4 spaces!
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The register test task as described in the comments at the top of main-full.c.
 | 
			
		||||
 */
 | 
			
		||||
.global vRegTest1Implementation
 | 
			
		||||
.global vRegTest2Implementation
 | 
			
		||||
 | 
			
		||||
/* Variables that are incremented on each iteration of the reg test tasks -
 | 
			
		||||
provided the tasks have not reported any errors.  The check timer inspects these
 | 
			
		||||
variables to ensure they are still incrementing as expected.  If a variable
 | 
			
		||||
stops incrementing then it is likely that its associate task has stalled or
 | 
			
		||||
detected an error. */
 | 
			
		||||
.extern ulRegTest1LoopCounter
 | 
			
		||||
.extern ulRegTest2LoopCounter
 | 
			
		||||
 | 
			
		||||
#warning Does not seem to test the floating point context register.
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
.section .text
 | 
			
		||||
.align 2
 | 
			
		||||
vRegTest1Implementation:
 | 
			
		||||
	/* First fill the relevant registers with known values.  r0 is always 0, r1
 | 
			
		||||
	is the stack pointer, and r3 is a read only small data area pointer. */
 | 
			
		||||
	addi r3, r0, 3
 | 
			
		||||
	addi r4, r0, 4
 | 
			
		||||
	addi r5, r0, 5
 | 
			
		||||
	addi r6, r0, 6
 | 
			
		||||
	addi r7, r0, 7
 | 
			
		||||
	addi r8, r0, 8
 | 
			
		||||
	addi r9, r0, 9
 | 
			
		||||
	addi r10, r0, 10
 | 
			
		||||
	addi r11, r0, 11
 | 
			
		||||
	addi r12, r0, 12
 | 
			
		||||
	/* R13 = read write small data area anchour. */
 | 
			
		||||
	/* R14 = return address for interrupt. */
 | 
			
		||||
	/* R15 = return address for sub-routine. */
 | 
			
		||||
	/* R16 = return address for trap. */
 | 
			
		||||
	/* R17 = return address for exceptions. */
 | 
			
		||||
	/* R18 = reserved for assembler and compiler temporaries. */
 | 
			
		||||
	addi r19, r0, 19
 | 
			
		||||
	addi r20, r0, 20
 | 
			
		||||
	addi r21, r0, 21
 | 
			
		||||
	addi r22, r0, 22
 | 
			
		||||
	addi r23, r0, 23
 | 
			
		||||
	addi r24, r0, 24
 | 
			
		||||
	addi r25, r0, 25
 | 
			
		||||
	addi r26, r0, 26
 | 
			
		||||
	addi r27, r0, 27
 | 
			
		||||
	addi r28, r0, 28
 | 
			
		||||
	addi r29, r0, 29
 | 
			
		||||
	addi r30, r0, 30
 | 
			
		||||
	addi r31, r0, 31
 | 
			
		||||
 | 
			
		||||
	/* Now test the register values to ensure they contain the same value that
 | 
			
		||||
	was written to them above.	 This task will get preempted frequently so
 | 
			
		||||
	other tasks are likely to have executed since the register values were
 | 
			
		||||
	written.  If any register contains an unexpected value then the task will
 | 
			
		||||
	branch to Error_Loop_1, which in turn prevents it from incrementing its
 | 
			
		||||
	loop counter, enabling the check timer to determine that all is not as it
 | 
			
		||||
	should be. */
 | 
			
		||||
 | 
			
		||||
Loop_Start_1:
 | 
			
		||||
	xori r18, r3, 3
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r4, 4
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r6, 6
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r7, 7
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r8, 8
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r9, 9
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r10, 10
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r11, 11
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r12, 12
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r19, 19
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r20, 20
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r21, 21
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r22, 22
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r23, 23
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r24, 24
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r25, 25
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r26, 26
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r27, 27
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r28, 28
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r29, 29
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r30, 30
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
	xori r18, r31, 31
 | 
			
		||||
	bnei r18, Error_Loop_1
 | 
			
		||||
 | 
			
		||||
	/* If this task has not branched to the error loop, then everything is ok,
 | 
			
		||||
	and the check variable can be incremented to indicate that this task
 | 
			
		||||
	is still running.  Then, brach back to the top to check the register
 | 
			
		||||
	contents again. */
 | 
			
		||||
	lwi r18, r0, ulRegTest1LoopCounter
 | 
			
		||||
	addik r18, r18, 1
 | 
			
		||||
	swi r18, r0, ulRegTest1LoopCounter
 | 
			
		||||
 | 
			
		||||
	bri Loop_Start_1
 | 
			
		||||
 | 
			
		||||
	/* The test function will branch here if it discovers an error.  This part
 | 
			
		||||
	of the code just sits in a NULL loop, which prevents the check variable
 | 
			
		||||
	incrementing any further to allow the check timer to recognize that this
 | 
			
		||||
	test has failed. */
 | 
			
		||||
Error_Loop_1:
 | 
			
		||||
	bri 0
 | 
			
		||||
	nop
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
.section .text
 | 
			
		||||
.align 2
 | 
			
		||||
vRegTest2Implementation:
 | 
			
		||||
	/* First fill the relevant registers with known values.  r0 is always 0, r1
 | 
			
		||||
	is the stack pointer, and r3 is a read only small data area pointer. */
 | 
			
		||||
	addi r3, r0, 30000
 | 
			
		||||
	addi r4, r0, 40000
 | 
			
		||||
	addi r5, r0, 50000
 | 
			
		||||
	addi r6, r0, 60000
 | 
			
		||||
	addi r7, r0, 70000
 | 
			
		||||
	addi r8, r0, 80000
 | 
			
		||||
	addi r9, r0, 90000
 | 
			
		||||
	addi r10, r0, 100000
 | 
			
		||||
	addi r11, r0, 110000
 | 
			
		||||
	addi r12, r0, 120000
 | 
			
		||||
	/* R13 = read write small data area anchour. */
 | 
			
		||||
	/* R14 = return address for interrupt. */
 | 
			
		||||
	/* R15 = return address for sub-routine. */
 | 
			
		||||
	/* R16 = return address for trap. */
 | 
			
		||||
	/* R17 = return address for exceptions. */
 | 
			
		||||
	/* R18 = reserved for assembler and compiler temporaries. */
 | 
			
		||||
	addi r19, r0, 190000
 | 
			
		||||
	addi r20, r0, 200000
 | 
			
		||||
	addi r21, r0, 210000
 | 
			
		||||
	addi r22, r0, 220000
 | 
			
		||||
	addi r23, r0, 230000
 | 
			
		||||
	addi r24, r0, 240000
 | 
			
		||||
	addi r25, r0, 250000
 | 
			
		||||
	addi r26, r0, 260000
 | 
			
		||||
	addi r27, r0, 270000
 | 
			
		||||
	addi r28, r0, 280000
 | 
			
		||||
	addi r29, r0, 290000
 | 
			
		||||
	addi r30, r0, 300000
 | 
			
		||||
	addi r31, r0, 310000
 | 
			
		||||
 | 
			
		||||
	/* Now test the register values to ensure they contain the same value that
 | 
			
		||||
	was written to them above.	 This task will get preempted frequently so
 | 
			
		||||
	other tasks are likely to have executed since the register values were
 | 
			
		||||
	written.  If any register contains an unexpected value then the task will
 | 
			
		||||
	branch to Error_Loop_2, which in turn prevents it from incrementing its
 | 
			
		||||
	loop counter, enabling the check timer to determine that all is not as it
 | 
			
		||||
	should be. */
 | 
			
		||||
 | 
			
		||||
Loop_Start_2:
 | 
			
		||||
	xori r18, r3, 30000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r4, 40000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r6, 60000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r7, 70000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r8, 80000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r9, 90000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r10, 100000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r11, 110000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r12, 120000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r19, 190000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r20, 200000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r21, 210000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r22, 220000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r23, 230000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r24, 240000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r25, 250000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r26, 260000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r27, 270000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r28, 280000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r29, 290000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r30, 300000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
	xori r18, r31, 310000
 | 
			
		||||
	bnei r18, Error_Loop_2
 | 
			
		||||
 | 
			
		||||
	/* If this task has not branched to the error loop, then everything is ok,
 | 
			
		||||
	and the check variable can be incremented to indicate that this task
 | 
			
		||||
	is still running.  Then, brach back to the top to check the register
 | 
			
		||||
	contents again. */
 | 
			
		||||
	lwi r18, r0, ulRegTest2LoopCounter
 | 
			
		||||
	addik r18, r18, 1
 | 
			
		||||
	swi r18, r0, ulRegTest2LoopCounter
 | 
			
		||||
 | 
			
		||||
	bri Loop_Start_2
 | 
			
		||||
 | 
			
		||||
	/* The test function will branch here if it discovers an error.  This part
 | 
			
		||||
	of the code just sits in a NULL loop, which prevents the check variable
 | 
			
		||||
	incrementing any further to allow the check timer to recognize that this
 | 
			
		||||
	test has failed. */
 | 
			
		||||
Error_Loop_2:
 | 
			
		||||
	bri 0
 | 
			
		||||
	nop
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,483 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
 | 
			
		||||
    All rights reserved
 | 
			
		||||
 | 
			
		||||
    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is free software; you can redistribute it and/or modify it under
 | 
			
		||||
    the terms of the GNU General Public License (version 2) as published by the
 | 
			
		||||
    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
    >>!   NOTE: The modification to the GPL is included to allow you to     !<<
 | 
			
		||||
    >>!   distribute a combined work that includes FreeRTOS without being   !<<
 | 
			
		||||
    >>!   obliged to provide the source code for proprietary components     !<<
 | 
			
		||||
    >>!   outside of the FreeRTOS kernel.                                   !<<
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE.  Full license text is available on the following
 | 
			
		||||
    link: http://www.freertos.org/a00114.html
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    FreeRTOS provides completely free yet professionally developed,    *
 | 
			
		||||
     *    robust, strictly quality controlled, supported, and cross          *
 | 
			
		||||
     *    platform software that is more than just the market leader, it     *
 | 
			
		||||
     *    is the industry's de facto standard.                               *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    Help yourself get started quickly while simultaneously helping     *
 | 
			
		||||
     *    to support the FreeRTOS project by purchasing a FreeRTOS           *
 | 
			
		||||
     *    tutorial book, reference manual, or both:                          *
 | 
			
		||||
     *    http://www.FreeRTOS.org/Documentation                              *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading
 | 
			
		||||
	the FAQ page "My application does not run, what could be wrong?".  Have you
 | 
			
		||||
	defined configASSERT()?
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/support - In return for receiving this top quality
 | 
			
		||||
	embedded software for free we request you assist our global community by
 | 
			
		||||
	participating in the support forum.
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/training - Investing in training allows your team to
 | 
			
		||||
	be as productive as possible as early as possible.  Now you can receive
 | 
			
		||||
	FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
 | 
			
		||||
	Ltd, and the world's leading authority on the world's leading RTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
 | 
			
		||||
    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
 | 
			
		||||
    compatible FAT file system, and our tiny thread aware UDP/IP stack.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
 | 
			
		||||
    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
 | 
			
		||||
    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS
 | 
			
		||||
    licenses offer ticketed support, indemnification and commercial middleware.
 | 
			
		||||
 | 
			
		||||
    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
 | 
			
		||||
    engineered and independently SIL3 certified version for use in safety and
 | 
			
		||||
    mission critical applications that require provable dependability.
 | 
			
		||||
 | 
			
		||||
    1 tab == 4 spaces!
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * NOTE 1:  This project provides two demo applications.  A simple blinky
 | 
			
		||||
 * style project, and a more comprehensive test and demo application.  The
 | 
			
		||||
 * mainCREATE_SIMPLY_BLINKY_DEMO_ONLY setting in main.c is used to select
 | 
			
		||||
 * between the two.  See the notes on using mainCREATE_SIMPLY_BLINKY_DEMO_ONLY
 | 
			
		||||
 * in main.c.  This file implements the comprehensive version.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE 2:  This file only contains the source code that is specific to the
 | 
			
		||||
 * full demo.  Generic functions, such FreeRTOS hook functions, and functions
 | 
			
		||||
 * required to configure the hardware, are defined in main.c.
 | 
			
		||||
 *
 | 
			
		||||
 ******************************************************************************
 | 
			
		||||
 *
 | 
			
		||||
 * main_full() creates all the demo application tasks and software timers, then
 | 
			
		||||
 * starts the scheduler.  The web documentation provides more details of the
 | 
			
		||||
 * standard demo application tasks, which provide no particular functionality,
 | 
			
		||||
 * but do provide a good example of how to use the FreeRTOS API.
 | 
			
		||||
 *
 | 
			
		||||
 * In addition to the standard demo tasks, the following tasks and tests are
 | 
			
		||||
 * defined and/or created within this file:
 | 
			
		||||
 *
 | 
			
		||||
 * FreeRTOS+CLI command console.  The command console is access through the
 | 
			
		||||
 * UART to USB connector on the ZC702 Zynq development board (marked J2).  For
 | 
			
		||||
 * reasons of robustness testing the UART driver is deliberately written to be
 | 
			
		||||
 * inefficient and should not be used as a template for a production driver.
 | 
			
		||||
 * Type "help" to see a list of registered commands.  The FreeRTOS+CLI license
 | 
			
		||||
 * is different to the FreeRTOS license, see http://www.FreeRTOS.org/cli for
 | 
			
		||||
 * license and usage details.  The default baud rate is 115200.
 | 
			
		||||
 *
 | 
			
		||||
 * "Reg test" tasks - These fill both the core and floating point registers with
 | 
			
		||||
 * known values, then check that each register maintains its expected value for
 | 
			
		||||
 * the lifetime of the task.  Each task uses a different set of values.  The reg
 | 
			
		||||
 * test tasks execute with a very low priority, so get preempted very
 | 
			
		||||
 * frequently.  A register containing an unexpected value is indicative of an
 | 
			
		||||
 * error in the context switching mechanism.
 | 
			
		||||
 *
 | 
			
		||||
 * "Check" task - The check task period is initially set to three seconds.  The
 | 
			
		||||
 * task checks that all the standard demo tasks, and the register check tasks,
 | 
			
		||||
 * are not only still executing, but are executing without reporting any errors.
 | 
			
		||||
 * If the check task discovers that a task has either stalled, or reported an
 | 
			
		||||
 * error, then it changes its own execution period from the initial three
 | 
			
		||||
 * seconds, to just 200ms.  The check task also toggles an LED each time it is
 | 
			
		||||
 * called.  This provides a visual indication of the system status:  If the LED
 | 
			
		||||
 * toggles every three seconds, then no issues have been discovered.  If the LED
 | 
			
		||||
 * toggles every 200ms, then an issue has been discovered with at least one
 | 
			
		||||
 * task.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Standard includes. */
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
/* Kernel includes. */
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "task.h"
 | 
			
		||||
#include "timers.h"
 | 
			
		||||
#include "semphr.h"
 | 
			
		||||
 | 
			
		||||
/* Standard demo application includes. */
 | 
			
		||||
#include "flash_timer.h"
 | 
			
		||||
#include "flop.h"
 | 
			
		||||
#include "semtest.h"
 | 
			
		||||
#include "dynamic.h"
 | 
			
		||||
#include "blocktim.h"
 | 
			
		||||
#include "countsem.h"
 | 
			
		||||
#include "GenQTest.h"
 | 
			
		||||
#include "recmutex.h"
 | 
			
		||||
#include "partest.h"
 | 
			
		||||
#include "serial.h"
 | 
			
		||||
#include "TimerDemo.h"
 | 
			
		||||
#include "IntQueue.h"
 | 
			
		||||
#include "EventGroupsDemo.h"
 | 
			
		||||
#include "TaskNotify.h"
 | 
			
		||||
#include "IntSemTest.h"
 | 
			
		||||
 | 
			
		||||
/* Priorities for the demo application tasks. */
 | 
			
		||||
#define mainSEM_TEST_PRIORITY				( tskIDLE_PRIORITY + 1UL )
 | 
			
		||||
#define mainBLOCK_Q_PRIORITY				( tskIDLE_PRIORITY + 2UL )
 | 
			
		||||
#define mainCREATOR_TASK_PRIORITY			( tskIDLE_PRIORITY + 3UL )
 | 
			
		||||
#define mainFLOP_TASK_PRIORITY				( tskIDLE_PRIORITY )
 | 
			
		||||
#define mainUART_COMMAND_CONSOLE_STACK_SIZE	( configMINIMAL_STACK_SIZE * 3UL )
 | 
			
		||||
#define mainCOM_TEST_TASK_PRIORITY			( tskIDLE_PRIORITY + 2 )
 | 
			
		||||
#define mainCHECK_TASK_PRIORITY				( configMAX_PRIORITIES - 1 )
 | 
			
		||||
#define mainQUEUE_OVERWRITE_PRIORITY		( tskIDLE_PRIORITY )
 | 
			
		||||
#define mainFLASH_PRIORITY					( tskIDLE_PRIORITY )
 | 
			
		||||
 | 
			
		||||
/* The priority used by the UART command console task. */
 | 
			
		||||
#define mainUART_COMMAND_CONSOLE_TASK_PRIORITY	( configMAX_PRIORITIES - 2 )
 | 
			
		||||
 | 
			
		||||
/* The LED used by the check timer. */
 | 
			
		||||
#define mainCHECK_LED						( 7 )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* A block time of zero simply means "don't block". */
 | 
			
		||||
#define mainDONT_BLOCK						( 0UL )
 | 
			
		||||
 | 
			
		||||
/* The period after which the check timer will expire, in ms, provided no errors
 | 
			
		||||
have been reported by any of the standard demo tasks.  ms are converted to the
 | 
			
		||||
equivalent in ticks using the portTICK_PERIOD_MS constant. */
 | 
			
		||||
#define mainNO_ERROR_CHECK_TASK_PERIOD		( pdMS_TO_TICKS( 3000UL ) )
 | 
			
		||||
 | 
			
		||||
/* The period at which the check timer will expire, in ms, if an error has been
 | 
			
		||||
reported in one of the standard demo tasks.  ms are converted to the equivalent
 | 
			
		||||
in ticks using the portTICK_PERIOD_MS constant. */
 | 
			
		||||
#define mainERROR_CHECK_TASK_PERIOD 		( pdMS_TO_TICKS( 200UL ) )
 | 
			
		||||
 | 
			
		||||
/* Parameters that are passed into the register check tasks solely for the
 | 
			
		||||
purpose of ensuring parameters are passed into tasks correctly. */
 | 
			
		||||
#define mainREG_TEST_TASK_1_PARAMETER		( ( void * ) 0x12345678 )
 | 
			
		||||
#define mainREG_TEST_TASK_2_PARAMETER		( ( void * ) 0x87654321 )
 | 
			
		||||
 | 
			
		||||
/* The base period used by the timer test tasks. */
 | 
			
		||||
#define mainTIMER_TEST_PERIOD				( 50 )
 | 
			
		||||
 | 
			
		||||
/* The number of timers to create that just flash LEDs. */
 | 
			
		||||
#define mainNUM_FLASH_TIMERS				( 3 )
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The check task, as described at the top of this file.
 | 
			
		||||
 */
 | 
			
		||||
static void prvCheckTask( void *pvParameters );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Register check tasks, and the tasks used to write over and check the contents
 | 
			
		||||
 * of the FPU registers, as described at the top of this file.  The nature of
 | 
			
		||||
 * these files necessitates that they are written in an assembly file, but the
 | 
			
		||||
 * entry points are kept in the C file for the convenience of checking the task
 | 
			
		||||
 * parameter.
 | 
			
		||||
 */
 | 
			
		||||
static void prvRegTestTaskEntry1( void *pvParameters );
 | 
			
		||||
extern void vRegTest1Implementation( void );
 | 
			
		||||
static void prvRegTestTaskEntry2( void *pvParameters );
 | 
			
		||||
extern void vRegTest2Implementation( void );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Register commands that can be used with FreeRTOS+CLI.  The commands are
 | 
			
		||||
 * defined in CLI-Commands.c and File-Related-CLI-Command.c respectively.
 | 
			
		||||
 */
 | 
			
		||||
extern void vRegisterSampleCLICommands( void );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The task that manages the FreeRTOS+CLI input and output.
 | 
			
		||||
 */
 | 
			
		||||
extern void vUARTCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * When the full demo is build the tick hook it used to demonstrate API
 | 
			
		||||
 * functions being called from an interrupt and to perform some tests.
 | 
			
		||||
 */
 | 
			
		||||
void vFullDemoTickHook( void );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * When the full demo is build the idle hook is used to create some timers that
 | 
			
		||||
 * cannot be created in main() because the timer demo tasks need the entire
 | 
			
		||||
 * command queue.
 | 
			
		||||
 */
 | 
			
		||||
void vFullDemoIdleHook( void );
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* The following two variables are used to communicate the status of the
 | 
			
		||||
register check tasks to the check task.  If the variables keep incrementing,
 | 
			
		||||
then the register check tasks has not discovered any errors.  If a variable
 | 
			
		||||
stops incrementing, then an error has been found. */
 | 
			
		||||
volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void main_full( void )
 | 
			
		||||
{
 | 
			
		||||
	/* Start all the other standard demo/test tasks.  They have not particular
 | 
			
		||||
	functionality, but do demonstrate how to use the FreeRTOS API and test the
 | 
			
		||||
	kernel port. */
 | 
			
		||||
//	vStartInterruptQueueTasks();
 | 
			
		||||
 | 
			
		||||
	vStartDynamicPriorityTasks();
 | 
			
		||||
	vCreateBlockTimeTasks();
 | 
			
		||||
	vStartCountingSemaphoreTasks();
 | 
			
		||||
	vStartGenericQueueTasks( tskIDLE_PRIORITY );
 | 
			
		||||
	vStartRecursiveMutexTasks();
 | 
			
		||||
	vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
 | 
			
		||||
	vStartTimerDemoTask( mainTIMER_TEST_PERIOD );
 | 
			
		||||
	vStartEventGroupTasks();
 | 
			
		||||
	vStartTaskNotifyTask();
 | 
			
		||||
	vStartInterruptSemaphoreTasks();
 | 
			
		||||
 | 
			
		||||
	/* Note - the set of standard demo tasks contains two versions of
 | 
			
		||||
	vStartMathTasks.c.  One is defined in flop.c, and uses double precision
 | 
			
		||||
	floating point numbers and variables.  The other is defined in sp_flop.c,
 | 
			
		||||
	and uses single precision floating point numbers and variables.  The
 | 
			
		||||
	MicroBlaze floating point unit only handles single precision floating.
 | 
			
		||||
	Therefore, to test the floating point hardware, sp_flop.c should be included
 | 
			
		||||
	in this project. */
 | 
			
		||||
	vStartMathTasks( mainFLOP_TASK_PRIORITY );
 | 
			
		||||
 | 
			
		||||
	/* Start the tasks that implements the command console on the UART, as
 | 
			
		||||
	described above. */
 | 
			
		||||
	vUARTCommandConsoleStart( mainUART_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );
 | 
			
		||||
 | 
			
		||||
	/* Register the standard CLI commands. */
 | 
			
		||||
	vRegisterSampleCLICommands();
 | 
			
		||||
 | 
			
		||||
	/* Create the register check tasks, as described at the top of this	file */
 | 
			
		||||
	xTaskCreate( prvRegTestTaskEntry1, "Reg1", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_1_PARAMETER, tskIDLE_PRIORITY, NULL );
 | 
			
		||||
	xTaskCreate( prvRegTestTaskEntry2, "Reg2", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_2_PARAMETER, tskIDLE_PRIORITY, NULL );
 | 
			
		||||
 | 
			
		||||
	/* Create the task that performs the 'check' functionality,	as described at
 | 
			
		||||
	the top of this file. */
 | 
			
		||||
	xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
 | 
			
		||||
 | 
			
		||||
	/* Start the scheduler. */
 | 
			
		||||
	vTaskStartScheduler();
 | 
			
		||||
 | 
			
		||||
	/* If all is well, the scheduler will now be running, and the following
 | 
			
		||||
	line will never be reached.  If the following line does execute, then
 | 
			
		||||
	there was either insufficient FreeRTOS heap memory available for the idle
 | 
			
		||||
	and/or timer tasks to be created, or vTaskStartScheduler() was called from
 | 
			
		||||
	User mode.  See the memory management section on the FreeRTOS web site for
 | 
			
		||||
	more details on the FreeRTOS heap http://www.freertos.org/a00111.html.  The
 | 
			
		||||
	mode from which main() is called is set in the C start up code and must be
 | 
			
		||||
	a privileged mode (not user mode). */
 | 
			
		||||
	for( ;; );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvCheckTask( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
TickType_t xDelayPeriod = mainNO_ERROR_CHECK_TASK_PERIOD;
 | 
			
		||||
TickType_t xLastExecutionTime;
 | 
			
		||||
static unsigned long ulLastRegTest1Value = 0, ulLastRegTest2Value = 0;
 | 
			
		||||
unsigned long ulErrorFound = pdFALSE;
 | 
			
		||||
 | 
			
		||||
	/* Just to stop compiler warnings. */
 | 
			
		||||
	( void ) pvParameters;
 | 
			
		||||
 | 
			
		||||
	/* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()
 | 
			
		||||
	works correctly. */
 | 
			
		||||
	xLastExecutionTime = xTaskGetTickCount();
 | 
			
		||||
 | 
			
		||||
	/* Cycle for ever, delaying then checking all the other tasks are still
 | 
			
		||||
	operating without error.  The onboard LED is toggled on each iteration.
 | 
			
		||||
	If an error is detected then the delay period is decreased from
 | 
			
		||||
	mainNO_ERROR_CHECK_TASK_PERIOD to mainERROR_CHECK_TASK_PERIOD.  This has the
 | 
			
		||||
	effect of increasing the rate at which the onboard LED toggles, and in so
 | 
			
		||||
	doing gives visual feedback of the system status. */
 | 
			
		||||
	for( ;; )
 | 
			
		||||
	{
 | 
			
		||||
		/* Delay until it is time to execute again. */
 | 
			
		||||
		vTaskDelayUntil( &xLastExecutionTime, xDelayPeriod );
 | 
			
		||||
 | 
			
		||||
		/* Check all the demo tasks (other than the flash tasks) to ensure
 | 
			
		||||
		that they are all still running, and that none have detected an error. */
 | 
			
		||||
if( 0 )//		if( xAreIntQueueTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 0UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreMathsTaskStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 1UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 2UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 4UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ( xAreGenericQueueTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 5UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 6UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreSemaphoreTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 8UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 10UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreInterruptSemaphoreTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 14UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreTimerDemoTasksStillRunning( ( TickType_t ) mainNO_ERROR_CHECK_TASK_PERIOD ) != pdPASS )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 9UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreEventGroupTasksStillRunning() != pdPASS )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 12UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreTaskNotificationTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 13UL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Check that the register test 1 task is still running. */
 | 
			
		||||
		if( ulLastRegTest1Value == ulRegTest1LoopCounter )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 15UL;
 | 
			
		||||
		}
 | 
			
		||||
		ulLastRegTest1Value = ulRegTest1LoopCounter;
 | 
			
		||||
 | 
			
		||||
		/* Check that the register test 2 task is still running. */
 | 
			
		||||
		if( ulLastRegTest2Value == ulRegTest2LoopCounter )
 | 
			
		||||
		{
 | 
			
		||||
			ulErrorFound |= 1UL << 16UL;
 | 
			
		||||
		}
 | 
			
		||||
		ulLastRegTest2Value = ulRegTest2LoopCounter;
 | 
			
		||||
 | 
			
		||||
		/* Toggle the check LED to give an indication of the system status.  If
 | 
			
		||||
		the LED toggles every mainNO_ERROR_CHECK_TASK_PERIOD milliseconds then
 | 
			
		||||
		everything is ok.  A faster toggle indicates an error. */
 | 
			
		||||
		vParTestToggleLED( mainCHECK_LED );
 | 
			
		||||
 | 
			
		||||
		if( ulErrorFound != pdFALSE )
 | 
			
		||||
		{
 | 
			
		||||
			/* An error has been detected in one of the tasks - flash the LED
 | 
			
		||||
			at a higher frequency to give visible feedback that something has
 | 
			
		||||
			gone wrong (it might just be that the loop back connector required
 | 
			
		||||
			by the comtest tasks has not been fitted). */
 | 
			
		||||
			xDelayPeriod = mainERROR_CHECK_TASK_PERIOD;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvRegTestTaskEntry1( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
	/* Although the regtest task is written in assembler, its entry point is
 | 
			
		||||
	written in C for convenience of checking the task parameter is being passed
 | 
			
		||||
	in correctly. */
 | 
			
		||||
	if( pvParameters == mainREG_TEST_TASK_1_PARAMETER )
 | 
			
		||||
	{
 | 
			
		||||
		/* Start the part of the test that is written in assembler. */
 | 
			
		||||
		vRegTest1Implementation();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* The following line will only execute if the task parameter is found to
 | 
			
		||||
	be incorrect.  The check timer will detect that the regtest loop counter is
 | 
			
		||||
	not being incremented and flag an error. */
 | 
			
		||||
	vTaskDelete( NULL );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvRegTestTaskEntry2( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
	/* Although the regtest task is written in assembler, its entry point is
 | 
			
		||||
	written in C for convenience of checking the task parameter is being passed
 | 
			
		||||
	in correctly. */
 | 
			
		||||
	if( pvParameters == mainREG_TEST_TASK_2_PARAMETER )
 | 
			
		||||
	{
 | 
			
		||||
		/* Start the part of the test that is written in assembler. */
 | 
			
		||||
		vRegTest2Implementation();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* The following line will only execute if the task parameter is found to
 | 
			
		||||
	be incorrect.  The check timer will detect that the regtest loop counter is
 | 
			
		||||
	not being incremented and flag an error. */
 | 
			
		||||
	vTaskDelete( NULL );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vFullDemoTickHook( void )
 | 
			
		||||
{
 | 
			
		||||
	/* The full demo includes a software timer demo/test that requires
 | 
			
		||||
	prodding periodically from the tick interrupt. */
 | 
			
		||||
	vTimerPeriodicISRTests();
 | 
			
		||||
 | 
			
		||||
	/* Call the periodic event group from ISR demo. */
 | 
			
		||||
	vPeriodicEventGroupsProcessing();
 | 
			
		||||
 | 
			
		||||
	/* Use task notifications from an interrupt. */
 | 
			
		||||
	xNotifyTaskFromISR();
 | 
			
		||||
 | 
			
		||||
	/* Use mutexes from interrupts. */
 | 
			
		||||
	vInterruptSemaphorePeriodicTest();
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vFullDemoIdleHook( void )
 | 
			
		||||
{
 | 
			
		||||
static uint32_t ulStartedTimers = pdFALSE;
 | 
			
		||||
 | 
			
		||||
	if( ulStartedTimers == pdFALSE )
 | 
			
		||||
	{
 | 
			
		||||
		/* The flash timers are not created from main() as the timer demo needs
 | 
			
		||||
		the entire timer command queue in order to perform some tests. */
 | 
			
		||||
		vStartLEDFlashTimers( mainNUM_FLASH_TIMERS );
 | 
			
		||||
		ulStartedTimers = pdTRUE;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,157 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
 | 
			
		||||
    All rights reserved
 | 
			
		||||
 | 
			
		||||
    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is free software; you can redistribute it and/or modify it under
 | 
			
		||||
    the terms of the GNU General Public License (version 2) as published by the
 | 
			
		||||
    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
    >>!   NOTE: The modification to the GPL is included to allow you to     !<<
 | 
			
		||||
    >>!   distribute a combined work that includes FreeRTOS without being   !<<
 | 
			
		||||
    >>!   obliged to provide the source code for proprietary components     !<<
 | 
			
		||||
    >>!   outside of the FreeRTOS kernel.                                   !<<
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE.  Full license text is available on the following
 | 
			
		||||
    link: http://www.freertos.org/a00114.html
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    FreeRTOS provides completely free yet professionally developed,    *
 | 
			
		||||
     *    robust, strictly quality controlled, supported, and cross          *
 | 
			
		||||
     *    platform software that is more than just the market leader, it     *
 | 
			
		||||
     *    is the industry's de facto standard.                               *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    Help yourself get started quickly while simultaneously helping     *
 | 
			
		||||
     *    to support the FreeRTOS project by purchasing a FreeRTOS           *
 | 
			
		||||
     *    tutorial book, reference manual, or both:                          *
 | 
			
		||||
     *    http://www.FreeRTOS.org/Documentation                              *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading
 | 
			
		||||
	the FAQ page "My application does not run, what could be wrong?".  Have you
 | 
			
		||||
	defined configASSERT()?
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/support - In return for receiving this top quality
 | 
			
		||||
	embedded software for free we request you assist our global community by
 | 
			
		||||
	participating in the support forum.
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/training - Investing in training allows your team to
 | 
			
		||||
	be as productive as possible as early as possible.  Now you can receive
 | 
			
		||||
	FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
 | 
			
		||||
	Ltd, and the world's leading authority on the world's leading RTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
 | 
			
		||||
    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
 | 
			
		||||
    compatible FAT file system, and our tiny thread aware UDP/IP stack.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
 | 
			
		||||
    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
 | 
			
		||||
    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS
 | 
			
		||||
    licenses offer ticketed support, indemnification and commercial middleware.
 | 
			
		||||
 | 
			
		||||
    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
 | 
			
		||||
    engineered and independently SIL3 certified version for use in safety and
 | 
			
		||||
    mission critical applications that require provable dependability.
 | 
			
		||||
 | 
			
		||||
    1 tab == 4 spaces!
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------
 | 
			
		||||
 * Simple IO routines to control the LEDs.
 | 
			
		||||
 *-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Scheduler includes. */
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "task.h"
 | 
			
		||||
 | 
			
		||||
/* Demo includes. */
 | 
			
		||||
#include "partest.h"
 | 
			
		||||
 | 
			
		||||
/* Xilinx includes. */
 | 
			
		||||
#include "xgpio.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define partstNUM_LEDS	8
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* The GPIO instance to which the LEDs are connected. */
 | 
			
		||||
static XGpio xOutputGPIOInstance;
 | 
			
		||||
 | 
			
		||||
/* Maintains the current LED output state. */
 | 
			
		||||
static volatile UBaseType_t uxGPIOState = 0U;
 | 
			
		||||
 | 
			
		||||
/* Constant required by the Xilinx peripheral driver API functions that are
 | 
			
		||||
relevant to the particular hardware set up. */
 | 
			
		||||
static const unsigned long ulGPIOOutputChannel = 1UL;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vParTestInitialise( void )
 | 
			
		||||
{
 | 
			
		||||
portBASE_TYPE xStatus;
 | 
			
		||||
const unsigned char ucSetToOutput = 0U;
 | 
			
		||||
 | 
			
		||||
	/* Initialize the GPIO for the LEDs. */
 | 
			
		||||
	xStatus = XGpio_Initialize( &xOutputGPIOInstance, XPAR_AXI_GPIO_0_DEVICE_ID );
 | 
			
		||||
	if( xStatus == XST_SUCCESS )
 | 
			
		||||
	{
 | 
			
		||||
		/* All bits on this channel are going to be outputs (LEDs). */
 | 
			
		||||
		XGpio_SetDataDirection( &xOutputGPIOInstance, ulGPIOOutputChannel, ucSetToOutput );
 | 
			
		||||
 | 
			
		||||
		/* Start with all LEDs off. */
 | 
			
		||||
		uxGPIOState = 0U;
 | 
			
		||||
		XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ( uint8_t ) uxGPIOState );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	configASSERT( ( xStatus == XST_SUCCESS ) );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vParTestSetLED( UBaseType_t uxLED, BaseType_t xValue )
 | 
			
		||||
{
 | 
			
		||||
	if( uxLED < partstNUM_LEDS )
 | 
			
		||||
	{
 | 
			
		||||
		taskENTER_CRITICAL();
 | 
			
		||||
		{
 | 
			
		||||
			if( xValue != pdFALSE )
 | 
			
		||||
			{
 | 
			
		||||
				uxGPIOState |= ( 1UL << uxLED );
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				uxGPIOState &= ~( 1UL << uxLED );
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ( uint8_t ) uxGPIOState );
 | 
			
		||||
		}
 | 
			
		||||
		taskEXIT_CRITICAL();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
 | 
			
		||||
{
 | 
			
		||||
	if( uxLED < partstNUM_LEDS )
 | 
			
		||||
	{
 | 
			
		||||
		taskENTER_CRITICAL();
 | 
			
		||||
		{
 | 
			
		||||
			uxGPIOState ^= ( 1UL << uxLED );
 | 
			
		||||
			XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ( uint8_t ) uxGPIOState );
 | 
			
		||||
		}
 | 
			
		||||
		taskEXIT_CRITICAL();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,212 @@
 | 
			
		||||
/*******************************************************************/
 | 
			
		||||
/*                                                                 */
 | 
			
		||||
/* This file is automatically generated by linker script generator.*/
 | 
			
		||||
/*                                                                 */
 | 
			
		||||
/* Version:                                 */
 | 
			
		||||
/*                                                                 */
 | 
			
		||||
/* Copyright (c) 2010 Xilinx, Inc.  All rights reserved.           */
 | 
			
		||||
/*                                                                 */
 | 
			
		||||
/* Description : MicroBlaze Linker Script                          */
 | 
			
		||||
/*                                                                 */
 | 
			
		||||
/*******************************************************************/
 | 
			
		||||
 | 
			
		||||
_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x400;
 | 
			
		||||
_HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x4;
 | 
			
		||||
 | 
			
		||||
/* Define Memories in the system */
 | 
			
		||||
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
   microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr : ORIGIN = 0x00000050, LENGTH = 0x0003FFB0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Specify the default entry point to the program */
 | 
			
		||||
 | 
			
		||||
ENTRY(_start)
 | 
			
		||||
 | 
			
		||||
/* Define the sections, and where they are mapped in memory */
 | 
			
		||||
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
.vectors.reset 0x00000000 : {
 | 
			
		||||
   KEEP (*(.vectors.reset))
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.vectors.sw_exception 0x00000008 : {
 | 
			
		||||
   KEEP (*(.vectors.sw_exception))
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.vectors.interrupt 0x00000010 : {
 | 
			
		||||
   KEEP (*(.vectors.interrupt))
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.vectors.hw_exception 0x00000020 : {
 | 
			
		||||
   KEEP (*(.vectors.hw_exception))
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.text : {
 | 
			
		||||
   *(.text)
 | 
			
		||||
   *(.text.*)
 | 
			
		||||
   *(.gnu.linkonce.t.*)
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.init : {
 | 
			
		||||
   KEEP (*(.init))
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.fini : {
 | 
			
		||||
   KEEP (*(.fini))
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.ctors : {
 | 
			
		||||
   __CTOR_LIST__ = .;
 | 
			
		||||
   ___CTORS_LIST___ = .;
 | 
			
		||||
   KEEP (*crtbegin.o(.ctors))
 | 
			
		||||
   KEEP (*(EXCLUDE_FILE(*crtend.o) .ctors))
 | 
			
		||||
   KEEP (*(SORT(.ctors.*)))
 | 
			
		||||
   KEEP (*(.ctors))
 | 
			
		||||
   __CTOR_END__ = .;
 | 
			
		||||
   ___CTORS_END___ = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.dtors : {
 | 
			
		||||
   __DTOR_LIST__ = .;
 | 
			
		||||
   ___DTORS_LIST___ = .;
 | 
			
		||||
   KEEP (*crtbegin.o(.dtors))
 | 
			
		||||
   KEEP (*(EXCLUDE_FILE(*crtend.o) .dtors))
 | 
			
		||||
   KEEP (*(SORT(.dtors.*)))
 | 
			
		||||
   KEEP (*(.dtors))
 | 
			
		||||
   PROVIDE(__DTOR_END__ = .);
 | 
			
		||||
   PROVIDE(___DTORS_END___ = .);
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.rodata : {
 | 
			
		||||
   __rodata_start = .;
 | 
			
		||||
   *(.rodata)
 | 
			
		||||
   *(.rodata.*)
 | 
			
		||||
   *(.gnu.linkonce.r.*)
 | 
			
		||||
   __rodata_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.sdata2 : {
 | 
			
		||||
   . = ALIGN(8);
 | 
			
		||||
   __sdata2_start = .;
 | 
			
		||||
   *(.sdata2)
 | 
			
		||||
   *(.sdata2.*)
 | 
			
		||||
   *(.gnu.linkonce.s2.*)
 | 
			
		||||
   . = ALIGN(8);
 | 
			
		||||
   __sdata2_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.sbss2 : {
 | 
			
		||||
   __sbss2_start = .;
 | 
			
		||||
   *(.sbss2)
 | 
			
		||||
   *(.sbss2.*)
 | 
			
		||||
   *(.gnu.linkonce.sb2.*)
 | 
			
		||||
   __sbss2_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.data : {
 | 
			
		||||
   . = ALIGN(4);
 | 
			
		||||
   __data_start = .;
 | 
			
		||||
   *(.data)
 | 
			
		||||
   *(.data.*)
 | 
			
		||||
   *(.gnu.linkonce.d.*)
 | 
			
		||||
   __data_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.got : {
 | 
			
		||||
   *(.got)
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.got1 : {
 | 
			
		||||
   *(.got1)
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.got2 : {
 | 
			
		||||
   *(.got2)
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.eh_frame : {
 | 
			
		||||
   *(.eh_frame)
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.jcr : {
 | 
			
		||||
   *(.jcr)
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.gcc_except_table : {
 | 
			
		||||
   *(.gcc_except_table)
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.sdata : {
 | 
			
		||||
   . = ALIGN(8);
 | 
			
		||||
   __sdata_start = .;
 | 
			
		||||
   *(.sdata)
 | 
			
		||||
   *(.sdata.*)
 | 
			
		||||
   *(.gnu.linkonce.s.*)
 | 
			
		||||
   __sdata_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.sbss (NOLOAD) : {
 | 
			
		||||
   . = ALIGN(4);
 | 
			
		||||
   __sbss_start = .;
 | 
			
		||||
   *(.sbss)
 | 
			
		||||
   *(.sbss.*)
 | 
			
		||||
   *(.gnu.linkonce.sb.*)
 | 
			
		||||
   . = ALIGN(8);
 | 
			
		||||
   __sbss_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.tdata : {
 | 
			
		||||
   __tdata_start = .;
 | 
			
		||||
   *(.tdata)
 | 
			
		||||
   *(.tdata.*)
 | 
			
		||||
   *(.gnu.linkonce.td.*)
 | 
			
		||||
   __tdata_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.tbss : {
 | 
			
		||||
   __tbss_start = .;
 | 
			
		||||
   *(.tbss)
 | 
			
		||||
   *(.tbss.*)
 | 
			
		||||
   *(.gnu.linkonce.tb.*)
 | 
			
		||||
   __tbss_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.bss (NOLOAD) : {
 | 
			
		||||
   . = ALIGN(4);
 | 
			
		||||
   __bss_start = .;
 | 
			
		||||
   *(.bss)
 | 
			
		||||
   *(.bss.*)
 | 
			
		||||
   *(.gnu.linkonce.b.*)
 | 
			
		||||
   *(COMMON)
 | 
			
		||||
   . = ALIGN(4);
 | 
			
		||||
   __bss_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
_SDA_BASE_ = __sdata_start + ((__sbss_end - __sdata_start) / 2 );
 | 
			
		||||
 | 
			
		||||
_SDA2_BASE_ = __sdata2_start + ((__sbss2_end - __sdata2_start) / 2 );
 | 
			
		||||
 | 
			
		||||
/* Generate Stack and Heap definitions */
 | 
			
		||||
 | 
			
		||||
.heap (NOLOAD) : {
 | 
			
		||||
   . = ALIGN(8);
 | 
			
		||||
   _heap = .;
 | 
			
		||||
   _heap_start = .;
 | 
			
		||||
   . += _HEAP_SIZE;
 | 
			
		||||
   _heap_end = .;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
.stack (NOLOAD) : {
 | 
			
		||||
   _stack_end = .;
 | 
			
		||||
   . += _STACK_SIZE;
 | 
			
		||||
   . = ALIGN(8);
 | 
			
		||||
   _stack = .;
 | 
			
		||||
   __stack = _stack;
 | 
			
		||||
} > microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram_if_cntlr
 | 
			
		||||
 | 
			
		||||
_end = .;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,355 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
 | 
			
		||||
    All rights reserved
 | 
			
		||||
 | 
			
		||||
    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is free software; you can redistribute it and/or modify it under
 | 
			
		||||
    the terms of the GNU General Public License (version 2) as published by the
 | 
			
		||||
    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
    >>!   NOTE: The modification to the GPL is included to allow you to     !<<
 | 
			
		||||
    >>!   distribute a combined work that includes FreeRTOS without being   !<<
 | 
			
		||||
    >>!   obliged to provide the source code for proprietary components     !<<
 | 
			
		||||
    >>!   outside of the FreeRTOS kernel.                                   !<<
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE.  Full license text is available on the following
 | 
			
		||||
    link: http://www.freertos.org/a00114.html
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    FreeRTOS provides completely free yet professionally developed,    *
 | 
			
		||||
     *    robust, strictly quality controlled, supported, and cross          *
 | 
			
		||||
     *    platform software that is more than just the market leader, it     *
 | 
			
		||||
     *    is the industry's de facto standard.                               *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    Help yourself get started quickly while simultaneously helping     *
 | 
			
		||||
     *    to support the FreeRTOS project by purchasing a FreeRTOS           *
 | 
			
		||||
     *    tutorial book, reference manual, or both:                          *
 | 
			
		||||
     *    http://www.FreeRTOS.org/Documentation                              *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading
 | 
			
		||||
	the FAQ page "My application does not run, what could be wrong?".  Have you
 | 
			
		||||
	defined configASSERT()?
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/support - In return for receiving this top quality
 | 
			
		||||
	embedded software for free we request you assist our global community by
 | 
			
		||||
	participating in the support forum.
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/training - Investing in training allows your team to
 | 
			
		||||
	be as productive as possible as early as possible.  Now you can receive
 | 
			
		||||
	FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
 | 
			
		||||
	Ltd, and the world's leading authority on the world's leading RTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
 | 
			
		||||
    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
 | 
			
		||||
    compatible FAT file system, and our tiny thread aware UDP/IP stack.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
 | 
			
		||||
    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
 | 
			
		||||
    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS
 | 
			
		||||
    licenses offer ticketed support, indemnification and commercial middleware.
 | 
			
		||||
 | 
			
		||||
    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
 | 
			
		||||
    engineered and independently SIL3 certified version for use in safety and
 | 
			
		||||
    mission critical applications that require provable dependability.
 | 
			
		||||
 | 
			
		||||
    1 tab == 4 spaces!
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * This project provides two demo applications.  A simple blinky style project,
 | 
			
		||||
 * and a more comprehensive test and demo application.  The
 | 
			
		||||
 * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting (defined in this file) is used to
 | 
			
		||||
 * select between the two.  The simply blinky demo is implemented and described
 | 
			
		||||
 * in main_blinky.c.  The more comprehensive test and demo application is
 | 
			
		||||
 * implemented and described in main_full.c.
 | 
			
		||||
 *
 | 
			
		||||
 * This file implements the code that is not demo specific, including the
 | 
			
		||||
 * hardware setup and FreeRTOS hook functions.
 | 
			
		||||
 *
 | 
			
		||||
 * ENSURE TO READ THE DOCUMENTATION PAGE FOR THIS PORT AND DEMO APPLICATION ON
 | 
			
		||||
 * THE http://www.FreeRTOS.org WEB SITE FOR FULL INFORMATION ON USING THIS DEMO
 | 
			
		||||
 * APPLICATION, AND ITS ASSOCIATE FreeRTOS ARCHITECTURE PORT!
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#warning Try reducing minimal stack size.
 | 
			
		||||
 | 
			
		||||
/* Standard includes. */
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
 | 
			
		||||
/* Scheduler include files. */
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "task.h"
 | 
			
		||||
 | 
			
		||||
/* Demo app includes. */
 | 
			
		||||
#include "partest.h"
 | 
			
		||||
 | 
			
		||||
/* Xilinx includes. */
 | 
			
		||||
#include "xtmrctr.h"
 | 
			
		||||
#include "xil_cache.h"
 | 
			
		||||
 | 
			
		||||
/* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is used to select between the simply
 | 
			
		||||
 * blinky demo and the comprehensive test and demo application.
 | 
			
		||||
 *
 | 
			
		||||
 * When mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1 the simple blinky example
 | 
			
		||||
 * will be run.
 | 
			
		||||
 *
 | 
			
		||||
 * When mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0 the comprehensive test
 | 
			
		||||
 * and demo application will be run.
 | 
			
		||||
 */
 | 
			
		||||
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY	0
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Configure the hardware as necessary to run this demo.
 | 
			
		||||
 */
 | 
			
		||||
static void prvSetupHardware( void );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * See the comments at the top of this file and above the
 | 
			
		||||
 * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY definition.
 | 
			
		||||
 */
 | 
			
		||||
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )
 | 
			
		||||
	extern void main_blinky( void );
 | 
			
		||||
#else
 | 
			
		||||
	extern void main_full( void );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Prototypes for the standard FreeRTOS callback/hook functions implemented
 | 
			
		||||
within this file. */
 | 
			
		||||
void vApplicationMallocFailedHook( void );
 | 
			
		||||
void vApplicationIdleHook( void );
 | 
			
		||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );
 | 
			
		||||
void vApplicationTickHook( void );
 | 
			
		||||
 | 
			
		||||
/* The dual timer is used to generate the RTOS tick interrupt. */
 | 
			
		||||
static XTmrCtr xDualTimerInstance;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
int main( void )
 | 
			
		||||
{
 | 
			
		||||
	/* Configure the hardware ready to run the demo. */
 | 
			
		||||
	prvSetupHardware();
 | 
			
		||||
 | 
			
		||||
	/* The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is described at the top
 | 
			
		||||
	of this file. */
 | 
			
		||||
	#if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )
 | 
			
		||||
	{
 | 
			
		||||
		main_blinky();
 | 
			
		||||
	}
 | 
			
		||||
	#else
 | 
			
		||||
	{
 | 
			
		||||
		main_full();
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
	/* Don't expect to reach here. */
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvSetupHardware( void )
 | 
			
		||||
{
 | 
			
		||||
#warning Stacks are in BRAM.
 | 
			
		||||
#warning Caches are disabled.
 | 
			
		||||
//	init_platform();
 | 
			
		||||
 | 
			
		||||
	microblaze_disable_interrupts();
 | 
			
		||||
 | 
			
		||||
	#if defined( XPAR_MICROBLAZE_USE_ICACHE ) && ( XPAR_MICROBLAZE_USE_ICACHE != 0 )
 | 
			
		||||
	{
 | 
			
		||||
		Xil_ICacheEnable();
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
	#if defined( XPAR_MICROBLAZE_USE_DCACHE ) && ( XPAR_MICROBLAZE_USE_DCACHE != 0 )
 | 
			
		||||
	{
 | 
			
		||||
		Xil_DCacheEnable();
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
	/* Initialise the LEDs.  ParTest is a historic name which used to stand for
 | 
			
		||||
	PARallel port TEST. */
 | 
			
		||||
	vParTestInitialise();
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vApplicationMallocFailedHook( void )
 | 
			
		||||
{
 | 
			
		||||
volatile uint32_t ulDummy = 0;
 | 
			
		||||
 | 
			
		||||
	/* Called if a call to pvPortMalloc() fails because there is insufficient
 | 
			
		||||
	free memory available in the FreeRTOS heap.  pvPortMalloc() is called
 | 
			
		||||
	internally by FreeRTOS API functions that create tasks, queues, software
 | 
			
		||||
	timers, and semaphores.  The size of the FreeRTOS heap is set by the
 | 
			
		||||
	configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h.  Force an
 | 
			
		||||
	assertion failure. */
 | 
			
		||||
	configASSERT( ulDummy != 0 );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
 | 
			
		||||
{
 | 
			
		||||
	( void ) pcTaskName;
 | 
			
		||||
	( void ) pxTask;
 | 
			
		||||
 | 
			
		||||
	/* Run time stack overflow checking is performed if
 | 
			
		||||
	configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2.  This hook
 | 
			
		||||
	function is called if a stack overflow is detected.  Force an assertion
 | 
			
		||||
	failuse. */
 | 
			
		||||
	configASSERT( ( char * ) pxTask == pcTaskName );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vApplicationIdleHook( void )
 | 
			
		||||
{
 | 
			
		||||
	#if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0 )
 | 
			
		||||
	{
 | 
			
		||||
		extern void vFullDemoIdleHook( void );
 | 
			
		||||
 | 
			
		||||
		/* When the full demo is build the idle hook is used to create some
 | 
			
		||||
		timers to flash LEDs. */
 | 
			
		||||
		vFullDemoIdleHook();
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vAssertCalled( const char * pcFile, unsigned long ulLine )
 | 
			
		||||
{
 | 
			
		||||
volatile unsigned long ul = 0;
 | 
			
		||||
 | 
			
		||||
	( void ) pcFile;
 | 
			
		||||
	( void ) ulLine;
 | 
			
		||||
 | 
			
		||||
	taskENTER_CRITICAL();
 | 
			
		||||
	{
 | 
			
		||||
		/* Set ul to a non-zero value using the debugger to step out of this
 | 
			
		||||
		function. */
 | 
			
		||||
		while( ul == 0 )
 | 
			
		||||
		{
 | 
			
		||||
			portNOP();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	taskEXIT_CRITICAL();
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vApplicationTickHook( void )
 | 
			
		||||
{
 | 
			
		||||
	#if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0 )
 | 
			
		||||
	{
 | 
			
		||||
		extern void vFullDemoTickHook( void );
 | 
			
		||||
 | 
			
		||||
		/* When the full demo is build the tick hook is used to demonstrate
 | 
			
		||||
		functions being called from an interrupt and perform some tests. */
 | 
			
		||||
		vFullDemoTickHook();
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* This is an application defined callback function used to install the tick
 | 
			
		||||
interrupt handler.  It is provided as an application callback because the kernel
 | 
			
		||||
will run on lots of different MicroBlaze and FPGA configurations - not all of
 | 
			
		||||
which will have the same timer peripherals defined or available.  This example
 | 
			
		||||
uses the Dual Timer 0.  If that is available on your hardware platform then this
 | 
			
		||||
example callback implementation may not require modification.   The name of the
 | 
			
		||||
interrupt handler that must be installed is vPortTickISR(), which the function
 | 
			
		||||
below declares as an extern. */
 | 
			
		||||
void vApplicationSetupTimerInterrupt( void )
 | 
			
		||||
{
 | 
			
		||||
portBASE_TYPE xStatus;
 | 
			
		||||
const unsigned char ucTimerCounterNumber = ( unsigned char ) 0U;
 | 
			
		||||
const unsigned long ulCounterValue = ( ( XPAR_TMRCTR_0_CLOCK_FREQ_HZ / configTICK_RATE_HZ ) - 1UL );
 | 
			
		||||
extern void vPortTickISR( void *pvUnused );
 | 
			
		||||
 | 
			
		||||
	/* Initialise the timer/counter. */
 | 
			
		||||
	xStatus = XTmrCtr_Initialize( &xDualTimerInstance, XPAR_TMRCTR_0_DEVICE_ID );
 | 
			
		||||
 | 
			
		||||
	if( xStatus == XST_SUCCESS )
 | 
			
		||||
	{
 | 
			
		||||
		/* Install the tick interrupt handler as the timer ISR.
 | 
			
		||||
		*NOTE* The xPortInstallInterruptHandler() API function must be used for
 | 
			
		||||
		this purpose. */
 | 
			
		||||
		xStatus = xPortInstallInterruptHandler( XPAR_INTC_0_TMRCTR_0_VEC_ID, vPortTickISR, NULL );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if( xStatus == pdPASS )
 | 
			
		||||
	{
 | 
			
		||||
		/* Enable the timer interrupt in the interrupt controller.
 | 
			
		||||
		*NOTE* The vPortEnableInterrupt() API function must be used for this
 | 
			
		||||
		purpose. */
 | 
			
		||||
		vPortEnableInterrupt( XPAR_INTC_0_TMRCTR_0_VEC_ID );
 | 
			
		||||
 | 
			
		||||
		/* Configure the timer interrupt handler. */
 | 
			
		||||
		XTmrCtr_SetHandler( &xDualTimerInstance, ( void * ) vPortTickISR, NULL );
 | 
			
		||||
 | 
			
		||||
		/* Set the correct period for the timer. */
 | 
			
		||||
		XTmrCtr_SetResetValue( &xDualTimerInstance, ucTimerCounterNumber, ulCounterValue );
 | 
			
		||||
 | 
			
		||||
		/* Enable the interrupts.  Auto-reload mode is used to generate a
 | 
			
		||||
		periodic tick.  Note that interrupts are disabled when this function is
 | 
			
		||||
		called, so interrupts will not start to be processed until the first
 | 
			
		||||
		task has started to run. */
 | 
			
		||||
		XTmrCtr_SetOptions( &xDualTimerInstance, ucTimerCounterNumber, ( XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION ) );
 | 
			
		||||
 | 
			
		||||
		/* Start the timer. */
 | 
			
		||||
		XTmrCtr_Start( &xDualTimerInstance, ucTimerCounterNumber );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Sanity check that the function executed as expected. */
 | 
			
		||||
	configASSERT( ( xStatus == pdPASS ) );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* This is an application defined callback function used to clear whichever
 | 
			
		||||
interrupt was installed by the the vApplicationSetupTimerInterrupt() callback
 | 
			
		||||
function.  It is provided as an application callback because the kernel will run
 | 
			
		||||
on lots of different MicroBlaze and FPGA configurations - not all of which will
 | 
			
		||||
have the same timer peripherals defined or available.  This example uses the
 | 
			
		||||
dual timer 0.  If that is available on your hardware platform then this example
 | 
			
		||||
callback implementation will not require modification provided the example
 | 
			
		||||
definition of vApplicationSetupTimerInterrupt() is also not modified. */
 | 
			
		||||
void vApplicationClearTimerInterrupt( void )
 | 
			
		||||
{
 | 
			
		||||
unsigned long ulCSR;
 | 
			
		||||
 | 
			
		||||
	/* Clear the timer interrupt */
 | 
			
		||||
	ulCSR = XTmrCtr_GetControlStatusReg( XPAR_TMRCTR_0_BASEADDR, 0 );
 | 
			
		||||
	XTmrCtr_SetControlStatusReg( XPAR_TMRCTR_0_BASEADDR, 0, ulCSR );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void *malloc( size_t x )
 | 
			
		||||
{
 | 
			
		||||
	/* Just to check it never gets called as there is no heap defined (other
 | 
			
		||||
	than the FreeRTOS heap). */
 | 
			
		||||
	for( ;; );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vMainConfigTimerForRunTimeStats( void )
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
uint32_t ulMainGetRunTimeCounterValue( void )
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,245 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
 | 
			
		||||
    All rights reserved
 | 
			
		||||
 | 
			
		||||
    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is free software; you can redistribute it and/or modify it under
 | 
			
		||||
    the terms of the GNU General Public License (version 2) as published by the
 | 
			
		||||
    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
    >>!   NOTE: The modification to the GPL is included to allow you to     !<<
 | 
			
		||||
    >>!   distribute a combined work that includes FreeRTOS without being   !<<
 | 
			
		||||
    >>!   obliged to provide the source code for proprietary components     !<<
 | 
			
		||||
    >>!   outside of the FreeRTOS kernel.                                   !<<
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
 | 
			
		||||
    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
			
		||||
    FOR A PARTICULAR PURPOSE.  Full license text is available on the following
 | 
			
		||||
    link: http://www.freertos.org/a00114.html
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    FreeRTOS provides completely free yet professionally developed,    *
 | 
			
		||||
     *    robust, strictly quality controlled, supported, and cross          *
 | 
			
		||||
     *    platform software that is more than just the market leader, it     *
 | 
			
		||||
     *    is the industry's de facto standard.                               *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
     *    Help yourself get started quickly while simultaneously helping     *
 | 
			
		||||
     *    to support the FreeRTOS project by purchasing a FreeRTOS           *
 | 
			
		||||
     *    tutorial book, reference manual, or both:                          *
 | 
			
		||||
     *    http://www.FreeRTOS.org/Documentation                              *
 | 
			
		||||
     *                                                                       *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading
 | 
			
		||||
	the FAQ page "My application does not run, what could be wrong?".  Have you
 | 
			
		||||
	defined configASSERT()?
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/support - In return for receiving this top quality
 | 
			
		||||
	embedded software for free we request you assist our global community by
 | 
			
		||||
	participating in the support forum.
 | 
			
		||||
 | 
			
		||||
	http://www.FreeRTOS.org/training - Investing in training allows your team to
 | 
			
		||||
	be as productive as possible as early as possible.  Now you can receive
 | 
			
		||||
	FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
 | 
			
		||||
	Ltd, and the world's leading authority on the world's leading RTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
 | 
			
		||||
    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
 | 
			
		||||
    compatible FAT file system, and our tiny thread aware UDP/IP stack.
 | 
			
		||||
 | 
			
		||||
    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
 | 
			
		||||
    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
 | 
			
		||||
 | 
			
		||||
    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
 | 
			
		||||
    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS
 | 
			
		||||
    licenses offer ticketed support, indemnification and commercial middleware.
 | 
			
		||||
 | 
			
		||||
    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
 | 
			
		||||
    engineered and independently SIL3 certified version for use in safety and
 | 
			
		||||
    mission critical applications that require provable dependability.
 | 
			
		||||
 | 
			
		||||
    1 tab == 4 spaces!
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER FOR a UARTLite peripheral.
 | 
			
		||||
 | 
			
		||||
	NOTE:  This is not intended to represent an efficient driver.  It is
 | 
			
		||||
	designed to test the FreeRTOS port.  Normally a UART driver would use a DMA,
 | 
			
		||||
	or at least a circular RAM buffer rather than a queue.  A task notification
 | 
			
		||||
	can then be used to unblock any task that is waiting for a complete message
 | 
			
		||||
	once a complete message has been buffered.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* Scheduler includes. */
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "queue.h"
 | 
			
		||||
#include "comtest_strings.h"
 | 
			
		||||
 | 
			
		||||
/* Library includes. */
 | 
			
		||||
#include "xuartlite.h"
 | 
			
		||||
#include "xuartlite_l.h"
 | 
			
		||||
 | 
			
		||||
/* Demo application includes. */
 | 
			
		||||
#include "serial.h"
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Functions that are installed as the handler for interrupts that are caused by
 | 
			
		||||
Rx and Tx events respectively. */
 | 
			
		||||
static void prvRxHandler( void *pvUnused, unsigned portBASE_TYPE uxByteCount );
 | 
			
		||||
static void prvTxHandler( void *pvUnused, unsigned portBASE_TYPE uxByteCount );
 | 
			
		||||
 | 
			
		||||
/* Structure that hold the state of the UARTLite peripheral used by this demo.
 | 
			
		||||
This is used by the Xilinx peripheral driver API functions. */
 | 
			
		||||
static XUartLite xUartLiteInstance;
 | 
			
		||||
 | 
			
		||||
/* The queue used to hold received characters. */
 | 
			
		||||
static QueueHandle_t xRxedChars;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
 | 
			
		||||
{
 | 
			
		||||
BaseType_t xStatus;
 | 
			
		||||
 | 
			
		||||
	/* The standard demo header file requires a baud rate to be passed into this
 | 
			
		||||
	function.  However, in this case the baud rate is configured when the
 | 
			
		||||
	hardware is generated, leaving the ulWantedBaud parameter redundant. */
 | 
			
		||||
	( void ) ulWantedBaud;
 | 
			
		||||
 | 
			
		||||
	/* Create the queue used to hold Rx characters. */
 | 
			
		||||
	xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed char ) );
 | 
			
		||||
 | 
			
		||||
	/* If the queue was created correctly, then setup the serial port
 | 
			
		||||
	hardware. */
 | 
			
		||||
	if( xRxedChars != NULL )
 | 
			
		||||
	{
 | 
			
		||||
		xStatus = XUartLite_Initialize( &xUartLiteInstance, XPAR_UARTLITE_0_DEVICE_ID );
 | 
			
		||||
 | 
			
		||||
		if( xStatus == XST_SUCCESS )
 | 
			
		||||
		{
 | 
			
		||||
			/* Complete initialisation of the UART and its associated
 | 
			
		||||
			interrupts. */
 | 
			
		||||
			XUartLite_ResetFifos( &xUartLiteInstance );
 | 
			
		||||
 | 
			
		||||
			/* Install the handlers that the standard Xilinx library interrupt
 | 
			
		||||
			service routine will call when Rx and Tx events occur
 | 
			
		||||
			respectively. */
 | 
			
		||||
			XUartLite_SetRecvHandler( &xUartLiteInstance, ( XUartLite_Handler ) prvRxHandler, NULL );
 | 
			
		||||
			XUartLite_SetSendHandler( &xUartLiteInstance, ( XUartLite_Handler ) prvTxHandler, NULL );
 | 
			
		||||
 | 
			
		||||
			/* Install the standard Xilinx library interrupt handler itself.
 | 
			
		||||
			*NOTE* The xPortInstallInterruptHandler() API function must be used
 | 
			
		||||
			for	this purpose. */
 | 
			
		||||
			xStatus = xPortInstallInterruptHandler( XPAR_INTC_0_UARTLITE_0_VEC_ID, ( XInterruptHandler ) XUartLite_InterruptHandler, &xUartLiteInstance );
 | 
			
		||||
 | 
			
		||||
			/* Enable the interrupt in the peripheral. */
 | 
			
		||||
			XUartLite_EnableIntr( xUartLiteInstance.RegBaseAddress );
 | 
			
		||||
 | 
			
		||||
			/* Enable the interrupt in the interrupt controller.
 | 
			
		||||
			*NOTE* The vPortEnableInterrupt() API function must be used for this
 | 
			
		||||
			purpose. */
 | 
			
		||||
			vPortEnableInterrupt( XPAR_INTC_0_UARTLITE_0_VEC_ID );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		configASSERT( xStatus == pdPASS );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* This demo file only supports a single port but something must be
 | 
			
		||||
	returned to comply with the standard demo header file. */
 | 
			
		||||
	return ( xComPortHandle ) 0;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, TickType_t xBlockTime )
 | 
			
		||||
{
 | 
			
		||||
portBASE_TYPE xReturn;
 | 
			
		||||
 | 
			
		||||
	/* The port handle is not required as this driver only supports one port. */
 | 
			
		||||
	( void ) pxPort;
 | 
			
		||||
 | 
			
		||||
	/* Get the next character from the receive queue.  Return false if no
 | 
			
		||||
	characters are available, or arrive before xBlockTime expires. */
 | 
			
		||||
	if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) )
 | 
			
		||||
	{
 | 
			
		||||
		xReturn = pdTRUE;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		xReturn = pdFALSE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return xReturn;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, TickType_t xBlockTime )
 | 
			
		||||
{
 | 
			
		||||
	( void ) pxPort;
 | 
			
		||||
	( void ) xBlockTime;
 | 
			
		||||
 | 
			
		||||
	XUartLite_Send( &xUartLiteInstance, ( unsigned char * ) &cOutChar, sizeof( cOutChar ) );
 | 
			
		||||
	return pdPASS;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )
 | 
			
		||||
{
 | 
			
		||||
	( void ) pxPort;
 | 
			
		||||
 | 
			
		||||
	/* Output uxStringLength bytes starting from pcString. */
 | 
			
		||||
	XUartLite_Send( &xUartLiteInstance, ( unsigned char * ) pcString, usStringLength );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvRxHandler( void *pvUnused, unsigned portBASE_TYPE uxByteCount )
 | 
			
		||||
{
 | 
			
		||||
signed char cRxedChar;
 | 
			
		||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
 | 
			
		||||
 | 
			
		||||
	( void ) pvUnused;
 | 
			
		||||
	( void ) uxByteCount;
 | 
			
		||||
 | 
			
		||||
	/* Place any received characters into the receive queue. */
 | 
			
		||||
	while( XUartLite_IsReceiveEmpty( xUartLiteInstance.RegBaseAddress ) == pdFALSE )
 | 
			
		||||
	{
 | 
			
		||||
		cRxedChar = XUartLite_ReadReg( xUartLiteInstance.RegBaseAddress, XUL_RX_FIFO_OFFSET);
 | 
			
		||||
		xQueueSendFromISR( xRxedChars, &cRxedChar, &xHigherPriorityTaskWoken );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* If calling xQueueSendFromISR() caused a task to unblock, and the task
 | 
			
		||||
	that unblocked has a priority equal to or greater than the task currently
 | 
			
		||||
	in the Running state (the task that was interrupted), then
 | 
			
		||||
	xHigherPriorityTaskWoken will have been set to pdTRUE internally within the
 | 
			
		||||
	xQueueSendFromISR() API function.  If xHigherPriorityTaskWoken is equal to
 | 
			
		||||
	pdTRUE then a context switch should be requested to ensure that the
 | 
			
		||||
	interrupt returns to the highest priority task that is able	to run. */
 | 
			
		||||
	portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvTxHandler( void *pvUnused, unsigned portBASE_TYPE uxByteCount )
 | 
			
		||||
{
 | 
			
		||||
	( void ) pvUnused;
 | 
			
		||||
	( void ) uxByteCount;
 | 
			
		||||
 | 
			
		||||
	/* Nothing to do here.  The Xilinx library function takes care of the
 | 
			
		||||
	transmission. */
 | 
			
		||||
	portNOP();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user