mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 11:09:01 +01:00 
			
		
		
		
	Add Rowley CrossFire LPC2138 demo files.
This commit is contained in:
		
							parent
							
								
									b18929ef7d
								
							
						
					
					
						commit
						41b142bae4
					
				
							
								
								
									
										88
									
								
								Demo/ARM7_LPC2138_Rowley/FreeRTOSConfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								Demo/ARM7_LPC2138_Rowley/FreeRTOSConfig.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,88 @@
 | 
			
		||||
/*
 | 
			
		||||
	FreeRTOS.org V4.0.5 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
 | 
			
		||||
	This file is part of the FreeRTOS.org distribution.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS.org is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
	the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
	(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS.org 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.  See the
 | 
			
		||||
	GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
	You should have received a copy of the GNU General Public License
 | 
			
		||||
	along with FreeRTOS.org; if not, write to the Free Software
 | 
			
		||||
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 | 
			
		||||
	A special exception to the GPL can be applied should you wish to distribute
 | 
			
		||||
	a combined work that includes FreeRTOS.org, without being obliged to provide
 | 
			
		||||
	the source code for any proprietary components.  See the licensing section 
 | 
			
		||||
	of http://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
	can be applied.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
	See http://www.FreeRTOS.org for documentation, latest information, license 
 | 
			
		||||
	and contact details.  Please ensure to read the configuration and relevant 
 | 
			
		||||
	port sections of the online documentation.
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef FREERTOS_CONFIG_H
 | 
			
		||||
#define FREERTOS_CONFIG_H
 | 
			
		||||
 | 
			
		||||
#include <LPC2138.h>
 | 
			
		||||
#define vPortYieldProcessor swi_handler
 | 
			
		||||
 | 
			
		||||
/* For compatability with the LPC2106 header. */
 | 
			
		||||
#define T0_IR T0IR
 | 
			
		||||
#define T0_PR T0PR
 | 
			
		||||
#define T0_MR0 T0MR0
 | 
			
		||||
#define T0_MCR T0MCR
 | 
			
		||||
#define T0_TCR T0TCR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------
 | 
			
		||||
 * 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. 
 | 
			
		||||
 *----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#define configUSE_PREEMPTION		1
 | 
			
		||||
#define configUSE_IDLE_HOOK			0
 | 
			
		||||
#define configUSE_TICK_HOOK			0
 | 
			
		||||
/* In this case configCPU_CLOCK_HZ is actually set to the pclk frequency, not
 | 
			
		||||
the CPU frequency. */
 | 
			
		||||
#define configCPU_CLOCK_HZ			( 58982400UL )	/* =14.7456MHz xtal multiplied by 4 using the PLL. */
 | 
			
		||||
#define configTICK_RATE_HZ			( ( portTickType ) 1000 )
 | 
			
		||||
#define configMAX_PRIORITIES		( ( unsigned portBASE_TYPE ) 6 )
 | 
			
		||||
#define configMINIMAL_STACK_SIZE	( ( unsigned portSHORT ) 128 )
 | 
			
		||||
#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 18 * 1024 ) )
 | 
			
		||||
#define configMAX_TASK_NAME_LEN		( 15 )
 | 
			
		||||
#define configUSE_TRACE_FACILITY	1
 | 
			
		||||
#define configUSE_16_BIT_TICKS		0
 | 
			
		||||
#define configIDLE_SHOULD_YIELD		1
 | 
			
		||||
 | 
			
		||||
/* Co-routine definitions. */
 | 
			
		||||
#define configUSE_CO_ROUTINES 		0
 | 
			
		||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
 | 
			
		||||
 | 
			
		||||
/* Set the following definitions to 1 to include the API function, or zero
 | 
			
		||||
to exclude the API function. */
 | 
			
		||||
 | 
			
		||||
#define INCLUDE_vTaskPrioritySet		1
 | 
			
		||||
#define INCLUDE_uxTaskPriorityGet		1
 | 
			
		||||
#define INCLUDE_vTaskDelete				1
 | 
			
		||||
#define INCLUDE_vTaskCleanUpResources	0
 | 
			
		||||
#define INCLUDE_vTaskSuspend			1
 | 
			
		||||
#define INCLUDE_vTaskDelayUntil			1
 | 
			
		||||
#define INCLUDE_vTaskDelay				1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* FREERTOS_CONFIG_H */
 | 
			
		||||
							
								
								
									
										54
									
								
								Demo/ARM7_LPC2138_Rowley/RTOSDemo.hzp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Demo/ARM7_LPC2138_Rowley/RTOSDemo.hzp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
			
		||||
<!DOCTYPE CrossStudio_Project_File>
 | 
			
		||||
<solution version="1" Name="RTOSDemo" >
 | 
			
		||||
  <project Name="RTOSDemo" >
 | 
			
		||||
    <configuration arm_target_loader_parameter="14745600" Target="LPC2138" arm_simulator_memory_simulation_parameter="LPC21;0x80000;0x10000" property_groups_file_path="$(StudioDir)/targets/Philips_LPC210X/propertyGroups.xml" oscillator_frequency="14.7456MHz" linker_memory_map_file="$(StudioDir)/targets/Philips_LPC210X/Philips_LPC2138_MemoryMap.xml" gcc_entry_point="reset_handler" arm_architecture="v4T" linker_additional_files="$(StudioDir)/lib/liblpc2000$(LibExt)$(LIB)" project_directory="" link_include_startup_code="No" project_type="Executable" Name="Common" arm_target_debug_interface_type="ARM7TDI" arm_core_type="ARM7TDMI-S" arm_simulator_memory_simulation_filename="$(StudioDir)/targets/Philips_LPC210X/LPC2000SimulatorMemory.dll" />
 | 
			
		||||
    <configuration linker_section_placement_file="$(StudioDir)/targets/sram_placement.xml" target_reset_script="SRAMReset()" Name="RAM" Placement="RAM" />
 | 
			
		||||
    <configuration arm_target_flash_loader_file_path="$(StudioDir)/targets/Philips_LPC210X/Release/Loader.elf" linker_section_placement_file="$(StudioDir)/targets/flash_placement.xml" target_reset_script="FLASHReset()" arm_target_flash_loader_type="Comms Channel Loader" Name="Flash" Placement="Flash" />
 | 
			
		||||
    <folder Name="Source Files" >
 | 
			
		||||
      <configuration filter="c;cpp;cxx;cc;h;s;asm;inc" Name="Common" />
 | 
			
		||||
      <folder Name="RTOS Source" >
 | 
			
		||||
        <file file_name="../../Source/tasks.c" Name="tasks.c" >
 | 
			
		||||
          <configuration build_exclude_from_build="No" Name="THUMB Flash Debug" />
 | 
			
		||||
        </file>
 | 
			
		||||
        <file file_name="../../Source/list.c" Name="list.c" />
 | 
			
		||||
        <file file_name="../../Source/queue.c" Name="queue.c" />
 | 
			
		||||
        <file file_name="../../Source/portable/MemMang/heap_1.c" Name="heap_1.c" />
 | 
			
		||||
        <file file_name="../../Source/portable/GCC/ARM7_LPC2000/portISR.c" Name="portISR.c" >
 | 
			
		||||
          <configuration arm_instruction_set="ARM" Name="THUMB" />
 | 
			
		||||
        </file>
 | 
			
		||||
        <file file_name="../../Source/portable/GCC/ARM7_LPC2000/port.c" Name="port.c" />
 | 
			
		||||
      </folder>
 | 
			
		||||
      <folder Name="Demo Source" >
 | 
			
		||||
        <file file_name="main.c" Name="main.c" />
 | 
			
		||||
        <file file_name="../Common/Minimal/PollQ.c" Name="PollQ.c" />
 | 
			
		||||
        <file file_name="../Common/Minimal/BlockQ.c" Name="BlockQ.c" />
 | 
			
		||||
        <file file_name="../Common/Minimal/death.c" Name="death.c" />
 | 
			
		||||
        <file file_name="../Common/Minimal/dynamic.c" Name="dynamic.c" />
 | 
			
		||||
        <file file_name="../Common/Minimal/integer.c" Name="integer.c" />
 | 
			
		||||
        <file file_name="../Common/Minimal/semtest.c" Name="semtest.c" />
 | 
			
		||||
        <file file_name="mainISR.c" Name="mainISR.c" >
 | 
			
		||||
          <configuration arm_instruction_set="ARM" Name="THUMB" />
 | 
			
		||||
        </file>
 | 
			
		||||
        <file file_name="../Common/Minimal/blocktim.c" Name="blocktim.c" />
 | 
			
		||||
      </folder>
 | 
			
		||||
    </folder>
 | 
			
		||||
    <folder Name="System Files" >
 | 
			
		||||
      <file file_name="$(StudioDir)/source/crt0.s" Name="crt0.s" />
 | 
			
		||||
      <file file_name="$(StudioDir)/targets/Philips_LPC210X/Philips_LPC210X_Startup.s" Name="Philips_LPC210X_Startup.s" />
 | 
			
		||||
      <file file_name="$(StudioDir)/targets/Philips_LPC210X/Philips_LPC210X_Target.js" Name="Philips_LPC210X_Target.js" >
 | 
			
		||||
        <configuration Name="Common" file_type="Reset Script" />
 | 
			
		||||
      </file>
 | 
			
		||||
    </folder>
 | 
			
		||||
    <file file_name="threads.js" Name="threads.js" />
 | 
			
		||||
  </project>
 | 
			
		||||
  <configuration inherited_configurations="ARM;Flash;Debug" Name="ARM Flash Debug" />
 | 
			
		||||
  <configuration arm_library_instruction_set="ARM" c_preprocessor_definitions="__ARM" arm_instruction_set="ARM" hidden="Yes" Name="ARM" />
 | 
			
		||||
  <configuration c_preprocessor_definitions="__FLASH_BUILD" hidden="Yes" Name="Flash" />
 | 
			
		||||
  <configuration c_preprocessor_definitions="DEBUG" link_include_startup_code="No" gcc_optimization_level="None" build_debug_information="Yes" hidden="Yes" Name="Debug" />
 | 
			
		||||
  <configuration inherited_configurations="ARM;Flash;Release" Name="ARM Flash Release" />
 | 
			
		||||
  <configuration c_preprocessor_definitions="NDEBUG" link_include_startup_code="No" gcc_optimization_level="Level 1" build_debug_information="No" hidden="Yes" Name="Release" />
 | 
			
		||||
  <configuration inherited_configurations="THUMB;Flash;Debug" Name="THUMB Flash Debug" />
 | 
			
		||||
  <configuration arm_library_instruction_set="THUMB" c_preprocessor_definitions="__THUMB;THUMB_INTERWORK" arm_instruction_set="THUMB" hidden="Yes" Name="THUMB" />
 | 
			
		||||
  <configuration inherited_configurations="THUMB;Flash;Release" Name="THUMB Flash Release" />
 | 
			
		||||
  <configuration c_preprocessor_definitions="GCC_ARM7;SUPERVISOR_START;VECTORED_IRQ_INTERRUPTS" c_user_include_directories=".;..\\..\\Source\\include;..\\..\\Source\\GCC\\ARM7_LPC2000;..\\Common\\Include" Name="Common" c_system_include_directories="$(StudioDir)/include;$(StudioDir)/include/targets" />
 | 
			
		||||
</solution>
 | 
			
		||||
							
								
								
									
										84
									
								
								Demo/ARM7_LPC2138_Rowley/RTOSDemo.hzs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								Demo/ARM7_LPC2138_Rowley/RTOSDemo.hzs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,84 @@
 | 
			
		||||
<!DOCTYPE CrossStudio_for_ARM_Session_File>
 | 
			
		||||
<session>
 | 
			
		||||
 <Autos>
 | 
			
		||||
  <Watches active="0" />
 | 
			
		||||
 </Autos>
 | 
			
		||||
 <Bookmarks/>
 | 
			
		||||
 <Breakpoints>
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="144" length="0" triggertype="0" useHWbreakpoint="false" group="Breakpoints" breakdatatype="0" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="" filename="C:\E\Dev\_FreeRTOS\Demo\ARM7_LPC2138_Rowley\main.c" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="D_Abort" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="FIQ" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="IRQ" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="P_Abort" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="Reset" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="SWI" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="Undef" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="BusFault" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="ExceptionEntryReturnFault" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="HardFault" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="MemManage" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="Reset" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="UsageFault_CheckingError" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="UsageFault_Coprocessor" filename="" />
 | 
			
		||||
  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="UsageFault_StateError" filename="" />
 | 
			
		||||
 </Breakpoints>
 | 
			
		||||
 <ExecutionCountWindow/>
 | 
			
		||||
 <Memory1>
 | 
			
		||||
  <MemoryWindow autoEvaluate="0" addressText="0x102248" numColumns="8" sizeText="128" dataSize="1" radix="16" addressSpace="" />
 | 
			
		||||
 </Memory1>
 | 
			
		||||
 <Memory2>
 | 
			
		||||
  <MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" addressSpace="" />
 | 
			
		||||
 </Memory2>
 | 
			
		||||
 <Memory3>
 | 
			
		||||
  <MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" addressSpace="" />
 | 
			
		||||
 </Memory3>
 | 
			
		||||
 <Memory4>
 | 
			
		||||
  <MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" addressSpace="" />
 | 
			
		||||
 </Memory4>
 | 
			
		||||
 <Project>
 | 
			
		||||
  <ProjectSessionItem path="RTOSDemo" name="unnamed" />
 | 
			
		||||
  <ProjectSessionItem path="RTOSDemo;RTOSDemo" name="unnamed" />
 | 
			
		||||
  <ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files" name="unnamed" />
 | 
			
		||||
  <ProjectSessionItem path="RTOSDemo;RTOSDemo;Source Files;RTOS Source" name="unnamed" />
 | 
			
		||||
 </Project>
 | 
			
		||||
 <Register1>
 | 
			
		||||
  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="CPU - Current Mode" visibleGroups="CPU - Current Mode" decimalDisplays="" binaryDisplays="" />
 | 
			
		||||
 </Register1>
 | 
			
		||||
 <Register2>
 | 
			
		||||
  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
 | 
			
		||||
 </Register2>
 | 
			
		||||
 <Register3>
 | 
			
		||||
  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
 | 
			
		||||
 </Register3>
 | 
			
		||||
 <Register4>
 | 
			
		||||
  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
 | 
			
		||||
 </Register4>
 | 
			
		||||
 <SourceNavigatorWindow/>
 | 
			
		||||
 <TraceWindow>
 | 
			
		||||
  <Trace wrap="Yes" type="1" enabled="Yes" />
 | 
			
		||||
 </TraceWindow>
 | 
			
		||||
 <Watch1>
 | 
			
		||||
  <Watches active="1" >
 | 
			
		||||
   <Watchpoint evalMode="1" linenumber="0" evalType="1" radix="-1" name="pxCurrentTCB" expression="pxCurrentTCB" filename="" />
 | 
			
		||||
  </Watches>
 | 
			
		||||
 </Watch1>
 | 
			
		||||
 <Watch2>
 | 
			
		||||
  <Watches active="0" />
 | 
			
		||||
 </Watch2>
 | 
			
		||||
 <Watch3>
 | 
			
		||||
  <Watches active="0" />
 | 
			
		||||
 </Watch3>
 | 
			
		||||
 <Watch4>
 | 
			
		||||
  <Watches active="0" />
 | 
			
		||||
 </Watch4>
 | 
			
		||||
 <Files>
 | 
			
		||||
  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="19" debugPath="C:\Devtools\Rowley Associates Limited\CrossWorks for ARM 1.6\source\crt0.s" y="27" useHTMLEdit="0" path="C:\Devtools\Rowley Associates Limited\CrossWorks for ARM 1.6\source\crt0.s" left="0" selected="0" name="unnamed" top="60" />
 | 
			
		||||
  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="0" debugPath="C:\Devtools\Rowley Associates Limited\CrossWorks for ARM 1.6\targets\Philips_LPC210X\Philips_LPC210X_Startup.s" y="142" useHTMLEdit="0" path="C:\Devtools\Rowley Associates Limited\CrossWorks for ARM 1.6\targets\Philips_LPC210X\Philips_LPC210X_Startup.s" left="0" selected="0" name="unnamed" top="120" />
 | 
			
		||||
  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="0" debugPath="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM7_LPC2000\port.c" y="0" useHTMLEdit="0" path="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM7_LPC2000\port.c" left="0" selected="0" name="unnamed" top="0" />
 | 
			
		||||
  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="22" debugPath="C:\E\Dev\FreeRTOS\\Source\portable\GCC\ARM7_LPC2000\portmacro.h" y="223" useHTMLEdit="0" path="C:\E\Dev\FreeRTOS\\Source\portable\GCC\ARM7_LPC2000\portmacro.h" left="0" selected="0" name="unnamed" top="0" />
 | 
			
		||||
  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="57" debugPath="C:\E\Dev\FreeRTOS\Source\list.c" y="93" useHTMLEdit="0" path="C:\E\Dev\FreeRTOS\Source\list.c" left="0" selected="0" name="unnamed" top="72" />
 | 
			
		||||
  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="0" debugPath="C:\E\Dev\FreeRTOS\\Source\\include\list.h" y="0" useHTMLEdit="0" path="C:\E\Dev\FreeRTOS\\Source\\include\list.h" left="0" selected="0" name="unnamed" top="65" />
 | 
			
		||||
  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="0" debugPath="C:\E\Dev\FreeRTOS\Source\tasks.c" y="0" useHTMLEdit="0" path="C:\E\Dev\FreeRTOS\Source\tasks.c" left="0" selected="1" name="unnamed" top="156" />
 | 
			
		||||
 </Files>
 | 
			
		||||
 <ARMCrossStudioWindow activeProject="RTOSDemo" autoConnectTarget="/USB CrossConnect for ARM" debugSearchFileMap="" fileDialogInitialDirectory="C:\E\Dev\FreeRTOS\Demo\ARM7_LPC2138_Rowley" fileDialogDefaultFilter="*.js" autoConnectCapabilities="1407" debugSearchPath="" buildConfiguration="THUMB Flash Debug" />
 | 
			
		||||
</session>
 | 
			
		||||
							
								
								
									
										330
									
								
								Demo/ARM7_LPC2138_Rowley/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								Demo/ARM7_LPC2138_Rowley/main.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,330 @@
 | 
			
		||||
/*
 | 
			
		||||
	FreeRTOS.org V4.0.5 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
 | 
			
		||||
	This file is part of the FreeRTOS.org distribution.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS.org is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
	the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
	(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS.org 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.  See the
 | 
			
		||||
	GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
	You should have received a copy of the GNU General Public License
 | 
			
		||||
	along with FreeRTOS.org; if not, write to the Free Software
 | 
			
		||||
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 | 
			
		||||
	A special exception to the GPL can be applied should you wish to distribute
 | 
			
		||||
	a combined work that includes FreeRTOS.org, without being obliged to provide
 | 
			
		||||
	the source code for any proprietary components.  See the licensing section 
 | 
			
		||||
	of http://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
	can be applied.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
	See http://www.FreeRTOS.org for documentation, latest information, license 
 | 
			
		||||
	and contact details.  Please ensure to read the configuration and relevant 
 | 
			
		||||
	port sections of the online documentation.
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file contains a demo created to execute on the Rowley Associates
 | 
			
		||||
 * LPC2138 CrossFire development board.
 | 
			
		||||
 *
 | 
			
		||||
 * main() creates all the demo application tasks, then starts the scheduler.  
 | 
			
		||||
 * The WEB documentation provides more details of the standard demo application 
 | 
			
		||||
 * tasks.
 | 
			
		||||
 * 
 | 
			
		||||
 * Main.c also creates a task called "Check".  This only executes every few 
 | 
			
		||||
 * seconds but has a high priority so is guaranteed to get processor time.  
 | 
			
		||||
 * Its function is to check that all the other tasks are still operational.
 | 
			
		||||
 * Each standard demo task maintains a unique count that is incremented each 
 | 
			
		||||
 * time the task successfully completes its function.  Should any error occur 
 | 
			
		||||
 * within such a task the count is permanently halted.  The check task inspects 
 | 
			
		||||
 * the count of each task to ensure it has changed since the last time the 
 | 
			
		||||
 * check task executed.  If all the count variables have changed all the tasks 
 | 
			
		||||
 * are still executing error free, and the check task writes "PASS" to the
 | 
			
		||||
 * CrossStudio terminal IO window.  Should any task contain an error at any time 
 | 
			
		||||
 * the error is latched and "FAIL" written to the terminal IO window.
 | 
			
		||||
 *
 | 
			
		||||
 * Finally, main() sets up an interrupt service routine and task to handle
 | 
			
		||||
 * pushes of the button that is built into the CrossFire board.  When the button
 | 
			
		||||
 * is pushed the ISR wakes the button task - which generates a table of task
 | 
			
		||||
 * status information which is also displayed on the terminal IO window. 
 | 
			
		||||
 *
 | 
			
		||||
 * A print task is defined to ensure exclusive and consistent access to the 
 | 
			
		||||
 * terminal IO.  This is the only task that is allowed to access the terminal.
 | 
			
		||||
 * The check and button task therefore do not access the terminal directly but 
 | 
			
		||||
 * instead pass a pointer to the message they wish to display to the print task.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Standard includes. */
 | 
			
		||||
#include <__cross_studio_io.h>
 | 
			
		||||
 | 
			
		||||
/* Scheduler includes. */
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "Task.h"
 | 
			
		||||
#include "queue.h"
 | 
			
		||||
#include "semphr.h"
 | 
			
		||||
 | 
			
		||||
/* Demo app includes. */
 | 
			
		||||
#include "BlockQ.h"
 | 
			
		||||
#include "death.h"
 | 
			
		||||
#include "dynamic.h"
 | 
			
		||||
#include "integer.h"
 | 
			
		||||
#include "PollQ.h"
 | 
			
		||||
#include "blocktim.h"
 | 
			
		||||
 | 
			
		||||
/* Hardware configuration definitions. */
 | 
			
		||||
#define mainBUS_CLK_FULL					( ( unsigned portCHAR ) 0x01 )
 | 
			
		||||
#define mainLED_BIT							0x80000000
 | 
			
		||||
#define mainP0_14__EINT_1					( 2 << 28 )
 | 
			
		||||
#define mainEINT_1_EDGE_SENSITIVE			2
 | 
			
		||||
#define mainEINT_1_FALLING_EDGE_SENSITIVE	0
 | 
			
		||||
#define mainEINT_1_CHANNEL					15
 | 
			
		||||
#define mainEINT_1_VIC_CHANNEL_BIT			( 1 << mainEINT_1_CHANNEL )
 | 
			
		||||
#define mainEINT_1_ENABLE_BIT				( 1 << 5 )
 | 
			
		||||
 | 
			
		||||
/* Demo application definitions. */
 | 
			
		||||
#define mainQUEUE_SIZE						( 3 )
 | 
			
		||||
#define mainLED_DELAY						( ( portTickType ) 500 / portTICK_RATE_MS )
 | 
			
		||||
#define mainCHECK_DELAY						( ( portTickType ) 5000 / portTICK_RATE_MS )
 | 
			
		||||
#define mainLIST_BUFFER_SIZE				2048
 | 
			
		||||
 | 
			
		||||
/* Task priorities. */
 | 
			
		||||
#define mainLED_TASK_PRIORITY				( tskIDLE_PRIORITY + 2 )
 | 
			
		||||
#define mainQUEUE_POLL_PRIORITY				( tskIDLE_PRIORITY + 2 )
 | 
			
		||||
#define mainCHECK_TASK_PRIORITY				( tskIDLE_PRIORITY + 3 )
 | 
			
		||||
#define mainSEM_TEST_PRIORITY				( tskIDLE_PRIORITY + 1 )
 | 
			
		||||
#define mainBLOCK_Q_PRIORITY				( tskIDLE_PRIORITY + 2 )
 | 
			
		||||
#define mainPRINT_TASK_PRIORITY				( tskIDLE_PRIORITY + 0 )
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* The semaphore used to wake the button task from within the external interrupt
 | 
			
		||||
handler. */
 | 
			
		||||
xSemaphoreHandle xButtonSemaphore;
 | 
			
		||||
 | 
			
		||||
/* The queue that is used to send message to vPrintTask for display in the 
 | 
			
		||||
terminal output window. */
 | 
			
		||||
xQueueHandle xPrintQueue;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Simply flashes the on board LED every mainLED_DELAY milliseconds.
 | 
			
		||||
 */
 | 
			
		||||
static void vLEDTask( void *pvParameters );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Checks the status of all the demo tasks then prints a message to the
 | 
			
		||||
 * CrossStudio terminal IO windows.  The message will be either PASS or FAIL
 | 
			
		||||
 * depending on the status of the demo applications tasks.  A FAIL status will
 | 
			
		||||
 * be latched.
 | 
			
		||||
 *
 | 
			
		||||
 * Messages are not written directly to the terminal, but passed to vPrintTask
 | 
			
		||||
 * via a queue.
 | 
			
		||||
 */
 | 
			
		||||
static void vCheckTask( void *pvParameters );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Controls all terminal output.  If a task wants to send a message to the
 | 
			
		||||
 * terminal IO it posts a pointer to the text to vPrintTask via a queue.  This
 | 
			
		||||
 * ensures serial access to the terminal IO.
 | 
			
		||||
 */
 | 
			
		||||
static void vPrintTask( void *pvParameter );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Simply waits for an interrupt to be generated from the built in button, then
 | 
			
		||||
 * generates a table of tasks states that is then written by vPrintTask to the
 | 
			
		||||
 * terminal output window within CrossStudio.
 | 
			
		||||
 */
 | 
			
		||||
static void vButtonHandlerTask( void *pvParameters );
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
int main( void )
 | 
			
		||||
{
 | 
			
		||||
	/* Setup the peripheral bus to be the same as the PLL output. */
 | 
			
		||||
	VPBDIV = mainBUS_CLK_FULL;
 | 
			
		||||
 | 
			
		||||
	/* Create the queue used to pass message to vPrintTask. */
 | 
			
		||||
	xPrintQueue = xQueueCreate( mainQUEUE_SIZE, sizeof( portCHAR * ) );
 | 
			
		||||
 | 
			
		||||
	/* Create the semaphore used to wake vButtonHandlerTask(). */
 | 
			
		||||
	vSemaphoreCreateBinary( xButtonSemaphore );
 | 
			
		||||
	xSemaphoreTake( xButtonSemaphore, 0 );
 | 
			
		||||
 | 
			
		||||
	/* Start the standard demo tasks. */
 | 
			
		||||
	vStartIntegerMathTasks( tskIDLE_PRIORITY );
 | 
			
		||||
	vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
 | 
			
		||||
	vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
 | 
			
		||||
	vStartDynamicPriorityTasks();
 | 
			
		||||
	vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
 | 
			
		||||
    vCreateBlockTimeTasks();
 | 
			
		||||
 | 
			
		||||
	/* Start the tasks defined within this file. */
 | 
			
		||||
	xTaskCreate( vLEDTask, "LED", configMINIMAL_STACK_SIZE, NULL, mainLED_TASK_PRIORITY, NULL );
 | 
			
		||||
    xTaskCreate( vCheckTask, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
 | 
			
		||||
    xTaskCreate( vPrintTask, "Print", configMINIMAL_STACK_SIZE, NULL, mainPRINT_TASK_PRIORITY, NULL );
 | 
			
		||||
    xTaskCreate( vButtonHandlerTask, "Button", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
 | 
			
		||||
 | 
			
		||||
	/* Start the scheduler. */
 | 
			
		||||
	vTaskStartScheduler();
 | 
			
		||||
 | 
			
		||||
	/* The scheduler should now running, so we will only ever reach here if we
 | 
			
		||||
	ran out of heap space. */
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void vLEDTask( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
	/* Configure IO. */
 | 
			
		||||
	IO0DIR |= mainLED_BIT;
 | 
			
		||||
	IO0SET = mainLED_BIT;
 | 
			
		||||
 | 
			
		||||
	for( ;; )
 | 
			
		||||
	{
 | 
			
		||||
		/* Not very exiting - just delay... */
 | 
			
		||||
		vTaskDelay( mainLED_DELAY );
 | 
			
		||||
 | 
			
		||||
		/* ...set the IO ... */
 | 
			
		||||
        IO0CLR = mainLED_BIT;
 | 
			
		||||
 | 
			
		||||
		/* ...delay again... */
 | 
			
		||||
		vTaskDelay( mainLED_DELAY );
 | 
			
		||||
 | 
			
		||||
		/* ...then clear the IO. */
 | 
			
		||||
		IO0SET = mainLED_BIT;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void vCheckTask( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
portBASE_TYPE xErrorOccurred = pdFALSE;
 | 
			
		||||
portTickType xLastExecutionTime;
 | 
			
		||||
const portCHAR * const pcPassMessage = "PASS\n";
 | 
			
		||||
const portCHAR * const pcFailMessage = "FAIL\n";
 | 
			
		||||
 | 
			
		||||
	/* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()
 | 
			
		||||
	works correctly. */
 | 
			
		||||
	xLastExecutionTime = xTaskGetTickCount();
 | 
			
		||||
 | 
			
		||||
	for( ;; )
 | 
			
		||||
	{
 | 
			
		||||
		/* Perform this check every mainCHECK_DELAY milliseconds. */
 | 
			
		||||
		vTaskDelayUntil( &xLastExecutionTime, mainCHECK_DELAY );
 | 
			
		||||
 | 
			
		||||
		/* Has an error been found in any task? */
 | 
			
		||||
 | 
			
		||||
		if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			xErrorOccurred = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
		if( xArePollingQueuesStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			xErrorOccurred = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
		if( xAreSemaphoreTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			xErrorOccurred = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
		if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			xErrorOccurred = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
		if( xAreBlockingQueuesStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			xErrorOccurred = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			xErrorOccurred = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Send either a pass or fail message.  If an error is found it is
 | 
			
		||||
		never cleared again. */
 | 
			
		||||
		if( xErrorOccurred == pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
			xQueueSend( xPrintQueue, &pcFailMessage, portMAX_DELAY );
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			xQueueSend( xPrintQueue, &pcPassMessage, portMAX_DELAY );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void vPrintTask( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
portCHAR *pcMessage;
 | 
			
		||||
 | 
			
		||||
	for( ;; )
 | 
			
		||||
	{
 | 
			
		||||
		/* Wait for a message to arrive. */
 | 
			
		||||
		while( xQueueReceive( xPrintQueue, &pcMessage, portMAX_DELAY ) != pdPASS );
 | 
			
		||||
 | 
			
		||||
		/* Write the message to the terminal IO. */
 | 
			
		||||
		debug_printf( "%s", pcMessage );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void vButtonHandlerTask( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
static portCHAR cListBuffer[ mainLIST_BUFFER_SIZE ];
 | 
			
		||||
const portCHAR *pcList = &( cListBuffer[ 0 ] );
 | 
			
		||||
const portCHAR * const pcHeader = "\nTask          State  Priority  Stack	#\n************************************************";
 | 
			
		||||
extern void (vButtonISR) ( void );
 | 
			
		||||
 | 
			
		||||
	/* Configure the interrupt. */
 | 
			
		||||
	portENTER_CRITICAL();	
 | 
			
		||||
	{
 | 
			
		||||
		/* Configure P0.14 to generate interrupts. */
 | 
			
		||||
		PINSEL0 |= mainP0_14__EINT_1; 
 | 
			
		||||
		EXTMODE = mainEINT_1_EDGE_SENSITIVE;
 | 
			
		||||
		EXTPOLAR = mainEINT_1_FALLING_EDGE_SENSITIVE;
 | 
			
		||||
 | 
			
		||||
		/* Setup the VIC for EINT 1. */
 | 
			
		||||
		VICIntSelect &= ~mainEINT_1_VIC_CHANNEL_BIT;
 | 
			
		||||
		VICIntEnable |= mainEINT_1_VIC_CHANNEL_BIT;
 | 
			
		||||
		VICVectAddr1 = ( portLONG ) vButtonISR;
 | 
			
		||||
		VICVectCntl1 = mainEINT_1_ENABLE_BIT | mainEINT_1_CHANNEL;
 | 
			
		||||
	}
 | 
			
		||||
	portEXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
	for( ;; )
 | 
			
		||||
	{
 | 
			
		||||
		/* Wait for an interrupt. */
 | 
			
		||||
		while( xSemaphoreTake( xButtonSemaphore, portMAX_DELAY ) != pdPASS );
 | 
			
		||||
 | 
			
		||||
		/* Send the column headers to the print task for display. */
 | 
			
		||||
		xQueueSend( xPrintQueue, &pcHeader, portMAX_DELAY );
 | 
			
		||||
 | 
			
		||||
		/* Create the list of task states. */
 | 
			
		||||
		vTaskList( cListBuffer );
 | 
			
		||||
 | 
			
		||||
		/* Send the task status information to the print task for display. */
 | 
			
		||||
		xQueueSend( xPrintQueue, &pcList, portMAX_DELAY );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										54
									
								
								Demo/ARM7_LPC2138_Rowley/mainISR.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Demo/ARM7_LPC2138_Rowley/mainISR.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
			
		||||
/*
 | 
			
		||||
	FreeRTOS.org V4.0.5 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
 | 
			
		||||
	This file is part of the FreeRTOS.org distribution.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS.org is free software; you can redistribute it and/or modify
 | 
			
		||||
	it under the terms of the GNU General Public License as published by
 | 
			
		||||
	the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
	(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
	FreeRTOS.org 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.  See the
 | 
			
		||||
	GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
	You should have received a copy of the GNU General Public License
 | 
			
		||||
	along with FreeRTOS.org; if not, write to the Free Software
 | 
			
		||||
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 | 
			
		||||
	A special exception to the GPL can be applied should you wish to distribute
 | 
			
		||||
	a combined work that includes FreeRTOS.org, without being obliged to provide
 | 
			
		||||
	the source code for any proprietary components.  See the licensing section 
 | 
			
		||||
	of http://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
	can be applied.
 | 
			
		||||
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
	See http://www.FreeRTOS.org for documentation, latest information, license 
 | 
			
		||||
	and contact details.  Please ensure to read the configuration and relevant 
 | 
			
		||||
	port sections of the online documentation.
 | 
			
		||||
	***************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "semphr.h"
 | 
			
		||||
 | 
			
		||||
#define isrCLEAR_EINT_1 2
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Interrupt routine that simply wakes vButtonHandlerTask on each interrupt 
 | 
			
		||||
 * generated by a push of the built in button.
 | 
			
		||||
 */
 | 
			
		||||
void vButtonISR( void ) __attribute__ ((naked));
 | 
			
		||||
extern xSemaphoreHandle xButtonSemaphore;
 | 
			
		||||
 | 
			
		||||
void vButtonISR( void )
 | 
			
		||||
{
 | 
			
		||||
	portENTER_SWITCHING_ISR();
 | 
			
		||||
		xSemaphoreGiveFromISR( xButtonSemaphore, pdFALSE );
 | 
			
		||||
        EXTINT = isrCLEAR_EINT_1;
 | 
			
		||||
        VICVectAddr = 0;
 | 
			
		||||
	portEXIT_SWITCHING_ISR( pdTRUE );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										118
									
								
								Demo/ARM7_LPC2138_Rowley/threads.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								Demo/ARM7_LPC2138_Rowley/threads.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,118 @@
 | 
			
		||||
function decode_stack(sp)
 | 
			
		||||
{
 | 
			
		||||
  var i;
 | 
			
		||||
  var a = new Array();
 | 
			
		||||
 | 
			
		||||
  var current_task;
 | 
			
		||||
 | 
			
		||||
  current_task = Debug.evaluate("pxCurrentTCB");
 | 
			
		||||
 | 
			
		||||
  if( current_task == 0 )
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  sp += 4; /* skip stored ulCriticalNesting */
 | 
			
		||||
  a[16] = Debug.evaluate("*(unsigned long*)" + sp); 
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i <= 15; i++)
 | 
			
		||||
  {
 | 
			
		||||
    sp += 4;
 | 
			
		||||
    a[i] = Debug.evaluate("*(unsigned long*)" + sp); 
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function add_task(task, state)
 | 
			
		||||
{
 | 
			
		||||
  var tcb, task_name;
 | 
			
		||||
 | 
			
		||||
  var current_task;
 | 
			
		||||
 | 
			
		||||
  current_task = Debug.evaluate("pxCurrentTCB");
 | 
			
		||||
 | 
			
		||||
  if( current_task == 0 )
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  tcb = Debug.evaluate("*(tskTCB *)" + task);
 | 
			
		||||
  task_name = Debug.evaluate("(char*)&(*(tskTCB *)" + task + ").pcTaskName[0]");
 | 
			
		||||
  Threads.add("#" + tcb.uxTCBNumber + " \"" + task_name + "\"", tcb.uxPriority, state, decode_stack(tcb.pxTopOfStack));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function add_list(list, state, current_task)
 | 
			
		||||
{
 | 
			
		||||
  var i, index, item, end;
 | 
			
		||||
  var current_task;
 | 
			
		||||
 | 
			
		||||
  current_task = Debug.evaluate("pxCurrentTCB");
 | 
			
		||||
 | 
			
		||||
  if( current_task == 0 )
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (list.uxNumberOfItems)
 | 
			
		||||
  {
 | 
			
		||||
    index = list.pxIndex;
 | 
			
		||||
    end = list.xListEnd;
 | 
			
		||||
    for (i = 0; i < list.uxNumberOfItems + 1; i++)
 | 
			
		||||
    {
 | 
			
		||||
      item = Debug.evaluate("*(xListItem *)" + index);
 | 
			
		||||
      if (index != end)
 | 
			
		||||
      {
 | 
			
		||||
        task = item.pvOwner;
 | 
			
		||||
        if (task) add_task(task, (task == current_task) ? "executing" : state);
 | 
			
		||||
      }
 | 
			
		||||
      index = item.pxNext;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update() 
 | 
			
		||||
{
 | 
			
		||||
  var i, current_task, list, lists, max_priority;
 | 
			
		||||
 | 
			
		||||
  Threads.clear();
 | 
			
		||||
 | 
			
		||||
  current_task = Debug.evaluate("pxCurrentTCB");
 | 
			
		||||
 | 
			
		||||
  if( current_task == 0 )
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  Threads.newqueue("Ready");
 | 
			
		||||
  lists = Debug.evaluate("pxReadyTasksLists");
 | 
			
		||||
  if (lists)
 | 
			
		||||
  { 
 | 
			
		||||
    max_priority = Debug.evaluate("uxTopUsedPriority");
 | 
			
		||||
    max_priority = Debug.evaluate("*(long *)" + max_priority);
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i <= max_priority; i++)
 | 
			
		||||
    {
 | 
			
		||||
      list = Debug.evaluate("((xList*)" + lists + ")[" + (max_priority - i) + "]");
 | 
			
		||||
      add_list(list, "ready", current_task);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Threads.newqueue("Blocked");
 | 
			
		||||
 | 
			
		||||
  list = Debug.evaluate("pxDelayedTaskList");
 | 
			
		||||
  if (list)
 | 
			
		||||
  {
 | 
			
		||||
    list = Debug.evaluate("**(xList **)" + list);
 | 
			
		||||
    add_list(list, "blocked");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  list = Debug.evaluate("pxOverflowDelayedTaskList");
 | 
			
		||||
  if (list)
 | 
			
		||||
  {
 | 
			
		||||
    list = Debug.evaluate("**(xList **)" + list);
 | 
			
		||||
    add_list(list, "blocked");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Threads.newqueue("Suspended");
 | 
			
		||||
 | 
			
		||||
  list = Debug.evaluate("xSuspendedTaskList");
 | 
			
		||||
  if (list)
 | 
			
		||||
  {
 | 
			
		||||
    list = Debug.evaluate("*(xList *)" + list);
 | 
			
		||||
    add_list(list, "suspended");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user