]> git.sur5r.net Git - freertos/commitdiff
Update all the Rx demos to use timers in their uIP task implementation.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 13 May 2011 17:32:30 +0000 (17:32 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 13 May 2011 17:32:30 +0000 (17:32 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1423 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

47 files changed:
Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/FreeRTOSConfig.h
Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/RTOSDemo.hwp
Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/RTOSDemo.nav
Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/RTOSDemo.tps
Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/SessionRX600_E1_E20_SYSTEM.hsf
Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/uIP_Task.c
Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/webserver/EMAC.c
Demo/RX600_RX62N-RDK_GNURX/RX600_RX62N_RDK_GNURX.tws
Demo/RX600_RX62N-RDK_IAR/FreeRTOSConfig.h
Demo/RX600_RX62N-RDK_IAR/RTOSDemo.ewp
Demo/RX600_RX62N-RDK_IAR/settings/RTOSDemo.cspy.bat
Demo/RX600_RX62N-RDK_IAR/settings/RTOSDemo.dbgdt
Demo/RX600_RX62N-RDK_IAR/settings/RTOSDemo.dni
Demo/RX600_RX62N-RDK_IAR/settings/RTOSDemo.wsdt
Demo/RX600_RX62N-RDK_IAR/uIP_Task.c
Demo/RX600_RX62N-RDK_IAR/webserver/EMAC.c
Demo/RX600_RX62N-RDK_Renesas/RTOSDemo.tws
Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/RTOSDemo.nav
Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.hsf
Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/uIP_Task.c
Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/FreeRTOSConfig.h
Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/RTOSDemo.hwp
Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/RTOSDemo.nav
Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/SessionRX600_E1_E20_SYSTEM.hsf
Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/uIP_Task.c
Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/webserver/EMAC.c
Demo/RX600_RX62N-RSK_GNURX/RX600_RX62N_RSK_GNURX.tws
Demo/RX600_RX62N-RSK_IAR/FreeRTOSConfig.h
Demo/RX600_RX62N-RSK_IAR/RTOSDemo.ewp
Demo/RX600_RX62N-RSK_IAR/settings/RTOSDemo.cspy.bat
Demo/RX600_RX62N-RSK_IAR/settings/RTOSDemo.dbgdt
Demo/RX600_RX62N-RSK_IAR/settings/RTOSDemo.dni
Demo/RX600_RX62N-RSK_IAR/settings/RTOSDemo.wsdt
Demo/RX600_RX62N-RSK_IAR/uIP_Task.c
Demo/RX600_RX62N-RSK_IAR/webserver/EMAC.c
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo.hws
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo.tws
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/Debug/Debug.hdp
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/Debug_RX600_E1_E20_SYSTEM/Debug_RX600_E1_E20_SYSTEM.hdp
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/FreeRTOSConfig.h
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/RTOSDemo.hwp
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/RTOSDemo.nav
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.hsf
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.ini
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/SimDebug_RX600/SimDebug_RX600.hdp
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/uIP_Task.c
Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/webserver/EMAC.c

index 249fc9895f5a2e2f9c5a47a4086a8fc8c064f5a1..c4a7da88cd8a25747865230aec327d87e51853ae 100644 (file)
 #define configMAX_PRIORITIES                   ( ( unsigned portBASE_TYPE ) 7 )\r
 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
 \r
+/* Software timer definitions. */\r
+#define configUSE_TIMERS                               1\r
+#define configTIMER_TASK_PRIORITY              ( 3 )\r
+#define configTIMER_QUEUE_LENGTH               5\r
+#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE )\r
+\r
 /* The interrupt priority used by the kernel itself for the tick interrupt and\r
 the pended interrupt.  This would normally be the lowest priority. */\r
 #define configKERNEL_INTERRUPT_PRIORITY         1\r
@@ -115,6 +121,8 @@ to exclude the API function. */
 #define INCLUDE_uxTaskGetStackHighWaterMark    1\r
 #define INCLUDE_xTaskGetSchedulerState         1\r
 \r
+#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }    \r
+\r
 extern volatile unsigned long ulHighFrequencyTickCount;\r
 #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() portNOP() /* Run time stats use the same timer as the high frequency timer test. */\r
 #define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTickCount\r
index 5d7f002a064d5c44c7cccaa3c5f5ef3cf039a9d8..780e1aba38044b8da01394cd5f33c5d9a07c7e78 100644 (file)
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "User" "C source file|FreeRTOS Source|Portable Layer" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "User" "C source file|FreeRTOS Source" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "User" "C source file|FreeRTOS Source" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "User" "C source file|FreeRTOS Source" 2 \r
 [FOLDER]\r
 "C header file" "C header file" \r
 "C source file" "C source file" \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "099d5a320aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "099d5a320aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "099d5a320aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0b0cb036c811cc10" 2 \r
 "Preprocess Assembly file" "099d5a320aa5bc10" 2 \r
 [OPTIONS_Blinky_GNU Library Generator]\r
 "Single Shot" "099d5a320aa5bc10" 1 \r
 [OPTIONS_Blinky_GNU Linker]\r
-"Single Shot" "099d5a320aa5bc10" 4 \r
+"Single Shot" "083de136c811cc10" 4 \r
 [OPTIONS_Blinky]\r
 "" 0 \r
 "[V|VERSION|2] [B|DOEXTF|1] [S|INCDIR|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03^"|^"$(CONFIGDIR)^"] [B|RSARCH|1] [B|FIXUPLIBS|1] [S|ARCHIVE|lib$(PROJECTNAME).a*libgcc.a] [S|OUTFORM|BOTH] [B|MFILEGEN|1] [S|PLMFILE|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|OUTFILE|^"$(CONFIGDIR)\$(PROJECTNAME).x^"] [S|GROUPDET|.fvectors|0|0||1|0xFFFFFF80|0|1|0|.fvectors|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.text|0|0||1|0xFFF80000|0|0|0|.text|All-files|<<FEND>>|0|.text.*|All-files|<<FEND>>|0|P|All-files|<<FEND>>|1|etext|<<FEND>>|<<CEND>>|<<GEND>>|.rvectors|0|0||0||0|1|1|_rvectors_start|<<FEND>>|0|.rvectors|All-files|<<FEND>>|1|_rvectors_end|<<FEND>>|<<CEND>>|<<GEND>>|.init|0|0||0||0|0|0|.init|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.fini|0|0||0||0|0|0|.fini|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.got|0|0||0||0|0|0|.got|All-files|<<FEND>>|0|.got.plt|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.rodata|0|0||0||0|0|0|.rodata|All-files|<<FEND>>|0|.rodata.*|All-files|<<FEND>>|0|C_1|All-files|<<FEND>>|0|C_2|All-files|<<FEND>>|0|C|All-files|<<FEND>>|1|_erodata|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame_hdr|0|0||0||0|0|0|.eh_frame_hdr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame|0|0||0||0|0|0|.eh_frame|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.jcr|0|0||0||0|0|0|.jcr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.tors|0|0||0||0|0|1|__CTOR_LIST__|<<FEND>>|1|___ctors|<<FEND>>|0|.ctors|All-files|<<FEND>>|1|___ctors_end|<<FEND>>|1|__CTOR_END__|<<FEND>>|1|__DTOR_LIST__|<<FEND>>|1|___dtors|<<FEND>>|0|.dtors|All-files|<<FEND>>|1|___dtors_end|<<FEND>>|1|__DTOR_END__|<<FEND>>|1|_mdata|<<FEND>>|<<CEND>>|<<GEND>>|.istack|0|0||1|0x00017FFC|0|0|1|_istack|<<FEND>>|<<CEND>>|<<GEND>>|.ustack|0|0||1|0x000179BC|0|0|1|_ustack|<<FEND>>|<<CEND>>|<<GEND>>|.data|0|2|_mdata|1|0x00001000|0|0|1|_data|<<FEND>>|0|.data|All-files|<<FEND>>|0|.data.*|All-files|<<FEND>>|0|D|All-files|<<FEND>>|0|D_1|All-files|<<FEND>>|0|D_2|All-files|<<FEND>>|1|_edata|<<FEND>>|<<CEND>>|<<GEND>>|.gcc_exc|0|0||0||0|0|0|.gcc_exc|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.bss|0|0||0||0|0|1|_bss|<<FEND>>|0|.bss|All-files|<<FEND>>|0|.bss.*|All-files|<<FEND>>|0|COMMON|All-files|<<FEND>>|0|B|All-files|<<FEND>>|0|B_1|All-files|<<FEND>>|0|B_2|All-files|<<FEND>>|1|_ebss|<<FEND>>|1|_end|<<FEND>>|<<CEND>>|<<GEND>>|] [S|APPTXT|^"-e _start^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1] [B|DOPROJBUILT|1]\r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "0adae9320aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0adae9320aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0adae9320aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0b0cb036c811cc10" 2 \r
 "Preprocess Assembly file" "0adae9320aa5bc10" 2 \r
 [OPTIONS_Debug_GNU Library Generator]\r
 "Single Shot" "0adae9320aa5bc10" 1 \r
 [OPTIONS_Debug_GNU Linker]\r
-"Single Shot" "097f0a320aa5bc10" 4 \r
+"Single Shot" "083de136c811cc10" 4 \r
 [OPTIONS_Debug]\r
 "" 0 \r
 "[V|VERSION|2] [B|DOEXTF|1] [S|INCDIR|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03^"|^"$(CONFIGDIR)^"] [B|RSARCH|1] [B|FIXUPLIBS|1] [S|ARCHIVE|libgcc.a*lib$(PROJECTNAME).a] [S|OUTFORM|BOTH] [B|MFILEGEN|1] [S|PLMFILE|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|OUTFILE|^"$(CONFIGDIR)\$(PROJECTNAME).x^"] [S|GROUPDET|.fvectors|0|0||1|0xFFFFFF80|0|1|0|.fvectors|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.text|0|0||1|0xFFF80000|0|0|0|.text|All-files|<<FEND>>|0|.text.*|All-files|<<FEND>>|0|P|All-files|<<FEND>>|1|etext|<<FEND>>|<<CEND>>|<<GEND>>|.rvectors|0|0||0||0|1|1|_rvectors_start|<<FEND>>|0|.rvectors|All-files|<<FEND>>|1|_rvectors_end|<<FEND>>|<<CEND>>|<<GEND>>|.init|0|0||0||0|0|0|.init|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.fini|0|0||0||0|0|0|.fini|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.got|0|0||0||0|0|0|.got|All-files|<<FEND>>|0|.got.plt|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.rodata|0|0||0||0|0|0|.rodata|All-files|<<FEND>>|0|.rodata.*|All-files|<<FEND>>|0|C_1|All-files|<<FEND>>|0|C_2|All-files|<<FEND>>|0|C|All-files|<<FEND>>|1|_erodata|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame_hdr|0|0||0||0|0|0|.eh_frame_hdr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame|0|0||0||0|0|0|.eh_frame|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.jcr|0|0||0||0|0|0|.jcr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.tors|0|0||0||0|0|1|__CTOR_LIST__|<<FEND>>|1|___ctors|<<FEND>>|0|.ctors|All-files|<<FEND>>|1|___ctors_end|<<FEND>>|1|__CTOR_END__|<<FEND>>|1|__DTOR_LIST__|<<FEND>>|1|___dtors|<<FEND>>|0|.dtors|All-files|<<FEND>>|1|___dtors_end|<<FEND>>|1|__DTOR_END__|<<FEND>>|1|_mdata|<<FEND>>|<<CEND>>|<<GEND>>|.istack|0|0||1|0x00017FFC|0|0|1|_istack|<<FEND>>|<<CEND>>|<<GEND>>|.ustack|0|0||1|0x000179BC|0|0|1|_ustack|<<FEND>>|<<CEND>>|<<GEND>>|.data|0|2|_mdata|1|0x00001000|0|0|1|_data|<<FEND>>|0|.data|All-files|<<FEND>>|0|.data.*|All-files|<<FEND>>|0|D|All-files|<<FEND>>|0|D_1|All-files|<<FEND>>|0|D_2|All-files|<<FEND>>|1|_edata|<<FEND>>|<<CEND>>|<<GEND>>|.gcc_exc|0|0||0||0|0|0|.gcc_exc|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.bss|0|0||0||0|0|1|_bss|<<FEND>>|0|.bss|All-files|<<FEND>>|0|.bss.*|All-files|<<FEND>>|0|COMMON|All-files|<<FEND>>|0|B|All-files|<<FEND>>|0|B_1|All-files|<<FEND>>|0|B_2|All-files|<<FEND>>|1|_ebss|<<FEND>>|1|_end|<<FEND>>|<<CEND>>|<<GEND>>|] [B|WONCEU|1] [B|OUTTRAD|1] [S|APPTXT|^"-e _start^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1] [B|DOPROJBUILT|1]\r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "08328a320aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "08328a320aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "08328a320aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0b0cb036c811cc10" 2 \r
 "Preprocess Assembly file" "08328a320aa5bc10" 2 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM_GNU Library Generator]\r
 "Single Shot" "08328a320aa5bc10" 1 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM_GNU Linker]\r
-"Single Shot" "0849aa320aa5bc10" 4 \r
+"Single Shot" "083de136c811cc10" 4 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM]\r
 "" 0 \r
 "[V|VERSION|2] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [I|DEBUGLV|2] [B|LINCHLS|1] [B|LINCASS|1] [B|LINCSYM|1] [S|LFILE|^"$(CONFIGDIR)\$(FILELEAF).^"] [S|PROJECTTYPE|CAPPPROJECT] [S|INCDIR|^"$(PROJDIR)^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] " 3 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "020673517aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "020673517aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "020673517aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0b0cb036c811cc10" 2 \r
 "Preprocess Assembly file" "020673517aa5bc10" 2 \r
 [OPTIONS_Debug_with_optimisation_GNU Library Generator]\r
 "Single Shot" "097f0a320aa5bc10" 1 \r
 [OPTIONS_Debug_with_optimisation_GNU Linker]\r
-"Single Shot" "09863a320aa5bc10" 4 \r
+"Single Shot" "083de136c811cc10" 4 \r
 [OPTIONS_Debug_with_optimisation]\r
 "" 0 \r
 "[V|VERSION|2] [B|DOEXTF|1] [S|INCDIR|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03^"|^"$(CONFIGDIR)^"] [B|RSARCH|1] [B|FIXUPLIBS|1] [S|ARCHIVE|lib$(PROJECTNAME).a*libgcc.a] [S|OUTFORM|BOTH] [B|MFILEGEN|1] [S|PLMFILE|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|OUTFILE|^"$(CONFIGDIR)\$(PROJECTNAME).x^"] [S|GROUPDET|.fvectors|0|0||1|0xFFFFFF80|0|1|0|.fvectors|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.text|0|0||1|0xFFF80000|0|0|0|.text|All-files|<<FEND>>|0|.text.*|All-files|<<FEND>>|0|P|All-files|<<FEND>>|1|etext|<<FEND>>|<<CEND>>|<<GEND>>|.rvectors|0|0||0||0|1|1|_rvectors_start|<<FEND>>|0|.rvectors|All-files|<<FEND>>|1|_rvectors_end|<<FEND>>|<<CEND>>|<<GEND>>|.init|0|0||0||0|0|0|.init|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.fini|0|0||0||0|0|0|.fini|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.got|0|0||0||0|0|0|.got|All-files|<<FEND>>|0|.got.plt|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.rodata|0|0||0||0|0|0|.rodata|All-files|<<FEND>>|0|.rodata.*|All-files|<<FEND>>|0|C_1|All-files|<<FEND>>|0|C_2|All-files|<<FEND>>|0|C|All-files|<<FEND>>|1|_erodata|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame_hdr|0|0||0||0|0|0|.eh_frame_hdr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame|0|0||0||0|0|0|.eh_frame|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.jcr|0|0||0||0|0|0|.jcr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.tors|0|0||0||0|0|1|__CTOR_LIST__|<<FEND>>|1|___ctors|<<FEND>>|0|.ctors|All-files|<<FEND>>|1|___ctors_end|<<FEND>>|1|__CTOR_END__|<<FEND>>|1|__DTOR_LIST__|<<FEND>>|1|___dtors|<<FEND>>|0|.dtors|All-files|<<FEND>>|1|___dtors_end|<<FEND>>|1|__DTOR_END__|<<FEND>>|1|_mdata|<<FEND>>|<<CEND>>|<<GEND>>|.istack|0|0||1|0x00017FFC|0|0|1|_istack|<<FEND>>|<<CEND>>|<<GEND>>|.ustack|0|0||1|0x000179BC|0|0|1|_ustack|<<FEND>>|<<CEND>>|<<GEND>>|.data|0|2|_mdata|1|0x00001000|0|0|1|_data|<<FEND>>|0|.data|All-files|<<FEND>>|0|.data.*|All-files|<<FEND>>|0|D|All-files|<<FEND>>|0|D_1|All-files|<<FEND>>|0|D_2|All-files|<<FEND>>|1|_edata|<<FEND>>|<<CEND>>|<<GEND>>|.gcc_exc|0|0||0||0|0|0|.gcc_exc|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.bss|0|0||0||0|0|1|_bss|<<FEND>>|0|.bss|All-files|<<FEND>>|0|.bss.*|All-files|<<FEND>>|0|COMMON|All-files|<<FEND>>|0|B|All-files|<<FEND>>|0|B_1|All-files|<<FEND>>|0|B_2|All-files|<<FEND>>|1|_ebss|<<FEND>>|1|_end|<<FEND>>|<<CEND>>|<<GEND>>|] [S|APPTXT|^"-e _start^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1] [B|DOPROJBUILT|1]\r
index 31df56a75b8798cad9467bb6bfa997807c9c8705..f53607514e5fc4903cf1524f54408f5629c1bfe6 100644 (file)
Binary files a/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/RTOSDemo.nav and b/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/RTOSDemo.nav differ
index fa61cca1ffc2ad4f1b08b2ba3970dd689bf9fb19..dd7288e79b8b205766dd817d85b9990b061f06c1 100644 (file)
@@ -11,7 +11,7 @@
 "Debug_RX600_E1_E20_SYSTEM" \r
 "Debug_with_optimisation" \r
 [CURRENT_CONFIGURATION]\r
-"Debug_with_optimisation\r
+"Debug" \r
 [CURRENT_SESSION]\r
 "SessionRX600_E1_E20_SYSTEM" \r
 [GENERAL_DATA_PROJECT]\r
@@ -21,7 +21,7 @@
 "DefaultSession" \r
 "SessionRX600_E1_E20_SYSTEM" \r
 [GENERAL_DATA_CONFIGURATION_Debug]\r
-"PROJECT_FILES_MODIFIED_DATA_TAG" "TRUE" \r
+"PROJECT_FILES_MODIFIED_DATA_TAG" "FALSE" \r
 [SESSIONS_Debug]\r
 "DefaultSession" \r
 "SessionRX600_E1_E20_SYSTEM" \r
index d84bc7a5e2e55aed431e9b0ba705fca7022b1372..8f6b59b091ce1817c1387131231843cc84c774c8 100644 (file)
 "{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlViews" "0" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_DENORMAL_MODE" "16777216" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_ROUND_MODE" "768" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "000000000000B0FC\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "000000000000C504\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "000000000000C518\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "000000000000C514\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_12" "000000000000C510\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_13" "000000000000C50C\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "0000000042900000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "000000000000C51C\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "000000000000B0FC\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000017FE0" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "000000000000BBB0\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "000000000000C9BC\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "0000000000000004\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "0000000041180000\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_12" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_13" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "000000000000BBB0\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000017FA0" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000000030000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF9135E\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "0000000000000000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF92768" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF8B898\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF8E908" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_21" "0000000080000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_22" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_23" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_24" "0000000000000100" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_25" "1234567887650000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "0000000000000000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "0000000000000000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "0000000000000000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "0000000000000000" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "000000000000BBB0" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "0000000000000000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_9" "000000000000C508\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_9" "00000000A5A5A5A5\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_COUNT" "26" \r
 "{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileDir" "" \r
 "{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileName" "" \r
 "{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlPortBaudIndex" "0" \r
 "{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlPortName" "" \r
 "{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlSendDataTimeout" "50" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlViews" "0\r
+"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlViews" "1\r
 "{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleWndInstanceKey0" "{WK_00000001_DEBUGCONSOLE}RTOSDemoSessionRX600_E1_E20_SYSTEM" \r
 "{B6AE2E1F-5221-4A44-91C2-8C3097B41A69}StartStopCheckAfter" "0" \r
 "{B6AE2E1F-5221-4A44-91C2-8C3097B41A69}StartStopCheckBefore" "0" \r
 "{EEDC9300-6FBE-11D5-8613-00A024591A38}LocalsCtrlViews" "0" \r
 "{EEDC9301-6FBE-11D5-8613-00A024591A38}StackTraceCtrlViews" "0" \r
 "{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlIOFile" "" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlSaveFileDir" "" \r
+"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlSaveFileDir" "$(CONFIGDIR)\r
 "{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlSaveFileName" "" \r
 "{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlViews" "0" \r
 "{F923CED3-3318-4B43-B931-0AE76B289176}TaskTraceCtrlAnalyzeViews" "0" \r
 0 \r
 [WINDOW_POSITION_STATE_DATA_VD1]\r
 "Help" "TOOLBAR 0" 59419 1 5 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_00000001_CmdLine}" "WINDOW" 59422 0 1 "0.07" 400 0 0 100 100 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>" "0.0" \r
+"{WK_00000001_CmdLine}" "WINDOW" 59422 0 1 "0.07" 372 0 0 100 100 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>" "0.0" \r
 "{WK_00000001_DEBUGCONSOLE}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59422 5 0 "1.00" 146 0 0 350 200 17 0 "57634|57637|57633|<<separator>>|32781|32782|<<separator>>|32780|32785|32787" "0.0" \r
 "{WK_00000001_MEMORY}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59422 0 0 "0.27" 252 0 0 350 200 2065 0 "42202|42203|42204|42233|<<separator>>|42206|42205|42230|42229|42207|<<separator>>|42208|42209|42210|49076|42228|42227|<<separator>>|42231|42232|42234|42235|<<separator>>|42211|<<separator>>" "0.0" \r
-"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 0 "1.00" 400 560 340 350 200 18 0 "36756|36757|36758|36759|<<separator>>|36746|36747|<<separator>>|39531|<<separator>>|39500|39534|<<separator>>|36687" "0.0" \r
+"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 0 "1.00" 372 560 340 350 200 18 0 "36756|36757|36758|36759|<<separator>>|36746|36747|<<separator>>|39531|<<separator>>|39500|39534|<<separator>>|36687" "0.0" \r
 "{WK_00000001_REGISTERS}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59421 0 0 "1.00" 413 0 0 350 200 2065 0 "" "0.0" \r
 "{WK_00000001_WATCH}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59421 0 0 "1.00" 441 0 0 853 610 17 0 "32781|32783|<<separator>>|32771|32829|32772|32827|32773|<<separator>>|32786|<<separator>>|32810|32811" "0.0" \r
 "{WK_00000002_WORKSPACE}" "WINDOW" 59420 0 0 "1.00" 342 560 340 350 200 18 0 "" "0.0" \r
 [WINDOW_POSITION_STATE_DATA_VD4]\r
 [WINDOW_Z_ORDER]\r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_GNURX\RTOSDemo\main-full.c" \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_GNURX\RTOSDemo\main-blinky.c" \r
 [TARGET_NAME]\r
 "RX600 Segger J-Link" "" 0 \r
 [STATUSBAR_STATEINFO_VD1]\r
index 1521ef89510078f3be34a2df42baffcd0c4dd050..847c9cbe31eea8954dddfa8b7c305307d7ab0e9f 100644 (file)
@@ -57,7 +57,8 @@
 /* Scheduler includes. */\r
 #include "FreeRTOS.h"\r
 #include "task.h"\r
-#include "semphr.h"\r
+#include "timers.h"\r
+#include "queue.h"\r
 \r
 /* uip includes. */\r
 #include "net/uip.h"\r
 /* Standard constant. */\r
 #define uipTOTAL_FRAME_HEADER_SIZE     54\r
 \r
+/* The ARP timer and the periodic timer share a callback function, so the\r
+respective timer IDs are used to determine which timer actually expired.  These\r
+constants are assigned to the timer IDs. */\r
+#define uipARP_TIMER                           0\r
+#define uipPERIODIC_TIMER                      1\r
+\r
+/* A block time of zero ticks simply means, "don't block". */\r
+#define uipDONT_BLOCK                          0UL\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
  */\r
 static void prvSetMACAddress( void );\r
 \r
+/*\r
+ * Perform any uIP initialisation necessary. \r
+ */\r
+static void prvInitialise_uIP( void );\r
+\r
+/*\r
+ * The callback function that is assigned to both the periodic timer and the\r
+ * ARP timer.\r
+ */\r
+static void prvUIPTimerCallback( xTimerHandle xTimer );\r
+\r
 /*\r
  * Port functions required by the uIP stack.\r
  */\r
-void clock_init( void );\r
 clock_time_t clock_time( void );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
-/* The semaphore used by the ISR to wake the uIP task. */\r
-xSemaphoreHandle xEMACSemaphore = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
+/* The queue used to send TCP/IP events to the uIP stack. */\r
+xQueueHandle xEMACEventQueue = NULL;\r
 \r
-void clock_init(void)\r
-{\r
-       /* This is done when the scheduler starts. */\r
-}\r
 /*-----------------------------------------------------------*/\r
 \r
 clock_time_t clock_time( void )\r
@@ -115,25 +129,14 @@ clock_time_t clock_time( void )
 \r
 void vuIP_Task( void *pvParameters )\r
 {\r
-portBASE_TYPE i, xDoneSomething;\r
-uip_ipaddr_t xIPAddr;\r
-struct timer periodic_timer, arp_timer;\r
+portBASE_TYPE i;\r
+unsigned long ulNewEvent = 0UL;\r
+unsigned long ulUIP_Events = 0UL;\r
 \r
        ( void ) pvParameters;\r
-\r
+       \r
        /* Initialise the uIP stack. */\r
-       timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );\r
-       timer_set( &arp_timer, configTICK_RATE_HZ * 10 );\r
-       uip_init();\r
-       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
-       uip_sethostaddr( &xIPAddr );\r
-       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
-       uip_setnetmask( &xIPAddr );\r
-       prvSetMACAddress();\r
-       httpd_init();\r
-\r
-       /* Create the semaphore used to wake the uIP task. */\r
-       vSemaphoreCreateBinary( xEMACSemaphore );\r
+       prvInitialise_uIP();\r
 \r
        /* Initialise the MAC. */\r
        vInitEmac();\r
@@ -145,49 +148,51 @@ struct timer periodic_timer, arp_timer;
 \r
        for( ;; )\r
        {\r
-               xDoneSomething = pdFALSE;\r
-               \r
-               /* Is there received data ready to be processed? */\r
-               uip_len = ( unsigned short ) ulEMACRead();\r
-               \r
-               if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
-               {\r
-                       /* Standard uIP loop taken from the uIP manual. */\r
-                       if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
+               if( ( ulUIP_Events & uipETHERNET_RX_EVENT ) != 0UL )\r
+               {               \r
+                       /* Is there received data ready to be processed? */\r
+                       uip_len = ( unsigned short ) ulEMACRead();\r
+                       \r
+                       if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
                        {\r
-                               uip_arp_ipin();\r
-                               uip_input();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               /* Standard uIP loop taken from the uIP manual. */\r
+                               if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
                                {\r
-                                       uip_arp_out();\r
-                                       vEMACWrite();\r
+                                       uip_arp_ipin();\r
+                                       uip_input();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               uip_arp_out();\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
-                       }\r
-                       else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
-                       {\r
-                               uip_arp_arpin();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
                                {\r
-                                       vEMACWrite();\r
+                                       uip_arp_arpin();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
+                       }\r
+                       else\r
+                       {\r
+                               ulUIP_Events &= ~uipETHERNET_RX_EVENT;\r
                        }\r
                }\r
-\r
-               if( timer_expired( &periodic_timer ) && ( uip_buf != NULL ) )\r
+               \r
+               if( ( ulUIP_Events & uipPERIODIC_TIMER_EVENT ) != 0UL )\r
                {\r
-                       timer_reset( &periodic_timer );\r
+                       ulUIP_Events &= ~uipPERIODIC_TIMER_EVENT;\r
+                                       \r
                        for( i = 0; i < UIP_CONNS; i++ )\r
                        {\r
                                uip_periodic( i );\r
@@ -201,29 +206,86 @@ struct timer periodic_timer, arp_timer;
                                        vEMACWrite();\r
                                }\r
                        }\r
-\r
-                       /* Call the ARP timer function every 10 seconds. */\r
-                       if( timer_expired( &arp_timer ) )\r
-                       {\r
-                               timer_reset( &arp_timer );\r
-                               uip_arp_timer();\r
-                       }\r
-                       \r
-                       xDoneSomething = pdTRUE;\r
                }\r
                \r
-               if( xDoneSomething == pdFALSE )\r
+               /* Call the ARP timer function every 10 seconds. */\r
+               if( ( ulUIP_Events & uipARP_TIMER_EVENT ) != 0 )\r
+               {\r
+                       ulUIP_Events &= ~uipARP_TIMER_EVENT;\r
+                       uip_arp_timer();\r
+               }\r
+                       \r
+               if( ulUIP_Events == pdFALSE )\r
                {\r
-                       /* We did not receive a packet, and there was no periodic\r
-                       processing to perform.  Block for a fixed period.  If a packet\r
-                       is received during this period we will be woken by the ISR\r
-                       giving us the Semaphore. */\r
-                       xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 20 );\r
+                       xQueueReceive( xEMACEventQueue, &ulNewEvent, portMAX_DELAY );\r
+                       ulUIP_Events |= ulNewEvent;\r
                }\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+static void prvInitialise_uIP( void )\r
+{\r
+xTimerHandle xARPTimer, xPeriodicTimer;\r
+uip_ipaddr_t xIPAddr;\r
+const unsigned long ul_uIPEventQueueLength = 10UL;\r
+\r
+       /* Initialise the uIP stack. */\r
+       uip_init();\r
+       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
+       uip_sethostaddr( &xIPAddr );\r
+       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
+       uip_setnetmask( &xIPAddr );\r
+       prvSetMACAddress();\r
+       httpd_init();\r
+\r
+       /* Create the queue used to sent TCP/IP events to the uIP stack. */\r
+       xEMACEventQueue = xQueueCreate( ul_uIPEventQueueLength, sizeof( unsigned long ) );\r
+\r
+       /* Create and start the uIP timers. */\r
+       xARPTimer = xTimerCreate(       ( const signed char * const ) "ARPTimer", /* Just a name that is helpful for debugging, not used by the kernel. */\r
+                                                               ( 10000UL / portTICK_RATE_MS ), /* Timer period. */\r
+                                                               pdTRUE, /* Autor-reload. */\r
+                                                               ( void * ) uipARP_TIMER,\r
+                                                               prvUIPTimerCallback\r
+                                                       );\r
+\r
+       xPeriodicTimer = xTimerCreate(  ( const signed char * const ) "PeriodicTimer",\r
+                                                                       ( 500 / portTICK_RATE_MS ),\r
+                                                                       pdTRUE, /* Autor-reload. */\r
+                                                                       ( void * ) uipPERIODIC_TIMER,\r
+                                                                       prvUIPTimerCallback\r
+                                                               );\r
+\r
+       configASSERT( xARPTimer );\r
+       configASSERT( xPeriodicTimer );\r
+\r
+       xTimerStart( xARPTimer, portMAX_DELAY );\r
+       xTimerStart( xPeriodicTimer, portMAX_DELAY );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvUIPTimerCallback( xTimerHandle xTimer )\r
+{\r
+static const unsigned long ulARPTimerExpired = uipARP_TIMER_EVENT;\r
+static const unsigned long ulPeriodicTimerExpired = uipPERIODIC_TIMER_EVENT;\r
+\r
+       /* This is a time callback, so calls to xQueueSend() must not attempt to\r
+       block. */\r
+       switch( ( int ) pvTimerGetTimerID( xTimer ) )\r
+       {\r
+               case uipARP_TIMER               :       xQueueSend( xEMACEventQueue, &ulARPTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               case uipPERIODIC_TIMER  :       xQueueSend( xEMACEventQueue, &ulPeriodicTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               default                                 :       /* Should not get here. */\r
+                                                                       break;\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 static void prvSetMACAddress( void )\r
 {\r
 struct uip_eth_addr xAddr;\r
index bf63bb6599ad410088aeb352841f679fbee63b21..945796ab55374c4805058f892799a2e97ff85479 100644 (file)
@@ -242,23 +242,29 @@ unsigned long ulBytesReceived;
 \r
        if( ulBytesReceived > 0 )\r
        {\r
-               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
-               pxCurrentRxDesc->status |= ACT;                 \r
-\r
-               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
-               {\r
-                       /* Restart Ethernet if it has stopped */\r
-                       EDMAC.EDRRR.LONG = 0x00000001L;\r
-               }\r
-\r
                /* Mark the pxDescriptor buffer as free as uip_buf is going to be set to\r
                the buffer that contains the received data. */\r
                prvReturnBuffer( uip_buf );\r
-               \r
+\r
+               /* Point uip_buf to the data about ot be processed. */\r
                uip_buf = ( void * ) pxCurrentRxDesc->buf_p;\r
+               \r
+               /* Allocate a new buffer to the descriptor, as uip_buf is now using it's\r
+               old descriptor. */\r
+               pxCurrentRxDesc->buf_p = ( char * ) prvGetNextBuffer();\r
+\r
+               /* Prepare the descriptor to go again. */\r
+               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
+               pxCurrentRxDesc->status |= ACT;\r
 \r
                /* Move onto the next buffer in the ring. */\r
                pxCurrentRxDesc = pxCurrentRxDesc->next;\r
+               \r
+               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
+               {\r
+                       /* Restart Ethernet if it has stopped */\r
+                       EDMAC.EDRRR.LONG = 0x00000001L;\r
+               }\r
        }\r
 \r
        return ulBytesReceived;\r
@@ -517,6 +523,7 @@ static void prvConfigureEtherCAndEDMAC( void )
        EDMAC.TFTR.LONG = 0x00000000;                           /* Threshold of Tx_FIFO */\r
        EDMAC.FDR.LONG = 0x00000000;                            /* Transmit fifo & receive fifo is 256 bytes */\r
        EDMAC.RMCR.LONG = 0x00000003;                           /* Receive function is normal mode(continued) */\r
+       ETHERC.ECMR.BIT.PRM = 0;                                        /* Ensure promiscuous mode is off. */\r
        \r
        /* Enable the interrupt... */\r
        _IEN( _ETHER_EINT ) = 1;        \r
@@ -527,8 +534,8 @@ void vEMAC_ISR_Handler( void )
 {\r
 unsigned long ul = EDMAC.EESR.LONG;\r
 long lHigherPriorityTaskWoken = pdFALSE;\r
-extern xSemaphoreHandle xEMACSemaphore;\r
-static long ulTxEndInts = 0;\r
+extern xQueueHandle xEMACEventQueue;\r
+const unsigned long ulRxEvent = uipETHERNET_RX_EVENT;\r
 \r
        /* Re-enabled interrupts. */\r
        __asm volatile( "SETPSW I" );\r
@@ -536,13 +543,8 @@ static long ulTxEndInts = 0;
        /* Has a Tx end occurred? */\r
        if( ul & emacTX_END_INTERRUPT )\r
        {\r
-               ++ulTxEndInts;\r
-               if( ulTxEndInts >= 2 )\r
-               {\r
-                       /* Only return the buffer to the pool once both Txes have completed. */\r
-                       prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
-                       ulTxEndInts = 0;\r
-               }\r
+               /* Only return the buffer to the pool once both Txes have completed. */\r
+               prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
                EDMAC.EESR.LONG = emacTX_END_INTERRUPT;\r
        }\r
 \r
@@ -550,7 +552,7 @@ static long ulTxEndInts = 0;
        if( ul & emacRX_END_INTERRUPT )\r
        {\r
                /* Make sure the Ethernet task is not blocked waiting for a packet. */\r
-               xSemaphoreGiveFromISR( xEMACSemaphore, &lHigherPriorityTaskWoken );\r
+               xQueueSendFromISR( xEMACEventQueue, &ulRxEvent, &lHigherPriorityTaskWoken );\r
                portYIELD_FROM_ISR( lHigherPriorityTaskWoken );\r
                EDMAC.EESR.LONG = emacRX_END_INTERRUPT;\r
        }\r
index be1f60a3f8d1568cae7d4416cdf598326b7cc6fc..1b881c6959b80e44bb63302c91b532ea25a4b159 100644 (file)
@@ -7,9 +7,11 @@
 [GENERAL_DATA]\r
 [BREAKPOINTS]\r
 [OPEN_WORKSPACE_FILES]\r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_GNURX\RTOSDemo\main-blinky.c" \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_GNURX\RTOSDemo\main-full.c" \r
 [WORKSPACE_FILE_STATES]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_GNURX\RTOSDemo\main-full.c" -4 -23 1314 460 1 0 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_GNURX\RTOSDemo\main-blinky.c" 66 66 1174 329 0 1 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_GNURX\RTOSDemo\main-full.c" -4 -23 1314 488 1 0 \r
 [LOADED_PROJECTS]\r
 "RTOSDemo" \r
 [END]\r
index 7cb94b7d7419ac2945143c8dc8beaf17deac56ad..17d4fc2f19cf09a3d1eda788f159523b267b6ab2 100644 (file)
 #define configMAX_PRIORITIES                   ( ( unsigned portBASE_TYPE ) 7 )\r
 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
 \r
+/* Software timer definitions. */\r
+#define configUSE_TIMERS                               1\r
+#define configTIMER_TASK_PRIORITY              ( 3 )\r
+#define configTIMER_QUEUE_LENGTH               5\r
+#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE )\r
 \r
 /*\r
 The interrupt priority used by the kernel itself for the tick interrupt and\r
index b8d0cbc26505afcb660c4be0e3e45056b86f93da..6350bd8d709c7fc5c7c9a0175e611e21bad93b48 100644 (file)
@@ -12,7 +12,7 @@
       <name>General</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>4</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>GenIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>GenRopi</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ICCRX</name>\r
       <archiveVersion>3</archiveVersion>\r
       <data>\r
-        <version>10</version>\r
+        <version>11</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IccIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>IccPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveInlining</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveUnrolling</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ARX</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>5</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>AsmIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>AsmPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AsmCpuCore</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ILINK</name>\r
       <archiveVersion>1</archiveVersion>\r
       <data>\r
-        <version>0</version>\r
+        <version>1</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IlinkLogUnusedFragments</name>\r
           <state>0</state>\r
         </option>\r
+        <option>\r
+          <name>IlinkSubnormal</name>\r
+          <state>1</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>General</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>4</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>GenIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>GenRopi</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ICCRX</name>\r
       <archiveVersion>3</archiveVersion>\r
       <data>\r
-        <version>10</version>\r
+        <version>11</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IccIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>IccPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveInlining</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveUnrolling</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ARX</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>5</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>AsmIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>AsmPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AsmCpuCore</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ILINK</name>\r
       <archiveVersion>1</archiveVersion>\r
       <data>\r
-        <version>0</version>\r
+        <version>1</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IlinkLogUnusedFragments</name>\r
           <state>0</state>\r
         </option>\r
+        <option>\r
+          <name>IlinkSubnormal</name>\r
+          <state>1</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>General</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>4</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>GenIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>GenRopi</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ICCRX</name>\r
       <archiveVersion>3</archiveVersion>\r
       <data>\r
-        <version>10</version>\r
+        <version>11</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IccIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>IccPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveInlining</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveUnrolling</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ARX</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>5</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>AsmIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>AsmPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AsmCpuCore</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ILINK</name>\r
       <archiveVersion>1</archiveVersion>\r
       <data>\r
-        <version>0</version>\r
+        <version>1</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IlinkLogUnusedFragments</name>\r
           <state>0</state>\r
         </option>\r
+        <option>\r
+          <name>IlinkSubnormal</name>\r
+          <state>1</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
     <file>\r
       <name>$PROJ_DIR$\..\..\Source\tasks.c</name>\r
     </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\Source\timers.c</name>\r
+    </file>\r
   </group>\r
   <group>\r
     <name>FreeTCPIP (based on uIP)</name>\r
index b5065a38e5bb533f000637232b313cfa8e650907..90ccab79af95ed1f709b5adea802916753f8022b 100644 (file)
@@ -1,33 +1,15 @@
-@REM This bat file has been generated by the IAR Embeddded Workbench\r
-@REM C-SPY interactive debugger,as an aid to preparing a command\r
-@REM line for running the cspybat command line utility with the\r
-@REM appropriate settings.\r
+@REM This batch file has been generated by the IAR Embedded Workbench\r
+@REM C-SPY Debugger, as an aid to preparing a command line for running\r
+@REM the cspybat command line utility using the appropriate settings.\r
 @REM\r
-@REM After making some adjustments to this file, you can launch cspybat\r
-@REM by typing the name of this file followed by the name of the debug\r
-@REM file (usually an ubrof file). Note that this file is generated\r
-@REM every time a new debug session is initialized, so you may want to\r
-@REM move or rename the file before making changes.\r
-@REM\r
-@REM Note: some command line arguments cannot be properly generated\r
-@REM by this process. Specifically, the plugin which is responsible\r
-@REM for the Terminal I/O window (and other C runtime functionality)\r
-@REM comes in a special version for cspybat, and the name of that\r
-@REM plugin dll is not known when generating this file. It resides in\r
-@REM the $TOOLKIT_DIR$\bin folder and is usually called XXXbat.dll or\r
-@REM XXXlibsupportbat.dll, where XXX is the name of the corresponding\r
-@REM tool chain. Replace the '<libsupport_plugin>' parameter\r
-@REM below with the appropriate file name. Other plugins loaded by\r
-@REM C-SPY are usually not needed by, or will not work in, cspybat\r
-@REM but they are listed at the end of this file for reference.\r
+@REM You can launch cspybat by typing the name of this batch file followed\r
+@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).\r
+@REM Note that this file is generated every time a new debug session\r
+@REM is initialized, so you may want to move or rename the file before\r
+@REM making changes.\r
+@REM \r
 \r
 \r
-"C:\devtools\IAR Systems\Embedded Workbench 6.0\common\bin\cspybat" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxproc.dll" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxemue20.dll"  %1 --plugin "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\<libsupport_plugin>" --backend -B "--core" "RX600" "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\config\debugger\ior5f562n8.ddf" "--double" "32" "--endian" "l" "--int" "32" "-d" "emue20" "--emu" "jlink" "--drv_communication" "USB" "--verify_download" "all" \r
+"C:\devtools\IAR Systems\Embedded Workbench 6.0\common\bin\cspybat" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxproc.dll" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxemue20.dll"  %1 --plugin "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxbat.dll" --backend -B "--core" "RX600" "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\config\debugger\ior5f562n8.ddf" "--double" "32" "--endian" "l" "--int" "32" "-d" "emue20" "--emu" "jlink" "--drv_communication" "USB" "--verify_download" "all" \r
 \r
 \r
-@REM Loaded plugins:\r
-@REM    rxLibSupport.dll\r
-@REM    C:\devtools\IAR Systems\Embedded Workbench 6.0\common\plugins\CodeCoverage\CodeCoverage.dll\r
-@REM    C:\devtools\IAR Systems\Embedded Workbench 6.0\common\plugins\Profiling\Profiling.dll\r
-@REM    C:\devtools\IAR Systems\Embedded Workbench 6.0\common\plugins\stack\stack.dll\r
-@REM    C:\devtools\IAR Systems\Embedded Workbench 6.0\common\plugins\SymList\SymList.dll\r
index d48cbdf6511cf61e4569e287a137f34941bd40e6..973cd3fce747f146f18a9baee0bf10194ea43e12 100644 (file)
@@ -31,7 +31,7 @@
       \r
       \r
       \r
-    <Wnd1>\r
+    <Wnd0>\r
         <Tabs>\r
           <Tab>\r
             <Identity>TabID-20000-3827</Identity>\r
           </Tab>\r
         </Tabs>\r
         \r
-      <SelectedTab>0</SelectedTab></Wnd1><Wnd2><Tabs><Tab><Identity>TabID-2655-13188</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd2></Windows>\r
+      <SelectedTab>0</SelectedTab></Wnd0><Wnd3><Tabs><Tab><Identity>TabID-2655-13188</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>\r
     <Editor>\r
       \r
       \r
       \r
       \r
-    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-full.c</Filename><XPos>0</XPos><YPos>53</YPos><SelStart>3048</SelStart><SelEnd>3048</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-full.c</Filename><XPos>0</XPos><YPos>251</YPos><SelStart>12353</SelStart><SelEnd>12353</SelEnd></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>113</YPos><SelStart>6095</SelStart><SelEnd>6104</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\webserver\EMAC.c</Filename><XPos>0</XPos><YPos>134</YPos><SelStart>5833</SelStart><SelEnd>5833</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\uIP_Task.c</Filename><XPos>0</XPos><YPos>226</YPos><SelStart>7106</SelStart><SelEnd>7106</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-blinky.c</Filename><XPos>0</XPos><YPos>87</YPos><SelStart>4804</SelStart><SelEnd>4804</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
     <Positions>\r
       \r
       \r
       \r
       \r
       \r
-    <Top><Row0><Sizes><Toolbar-00a2ab10><key>iaridepm.enu1</key></Toolbar-00a2ab10><Toolbar-02d473b0><key>debuggergui.enu1</key></Toolbar-02d473b0></Sizes></Row0></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>238</Right><x>-2</x><y>-2</y><xscreen>121</xscreen><yscreen>141</yscreen><sizeHorzCX>72024</sizeHorzCX><sizeHorzCY>143585</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd2></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+    <Top><Row0><Sizes><Toolbar-01335fe0><key>iaridepm.enu1</key></Toolbar-01335fe0><Toolbar-07c10450><key>debuggergui.enu1</key></Toolbar-07c10450></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>238</Right><x>-2</x><y>-2</y><xscreen>121</xscreen><yscreen>141</yscreen><sizeHorzCX>72024</sizeHorzCX><sizeHorzCY>143585</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
   </Desktop>\r
 </Project>\r
 \r
index 05ba900d92e3e47edf393cd0e682b724601feabe..48339b9d7b201a2b872242abf19448c958c930cb 100644 (file)
@@ -1,7 +1,7 @@
 [E20]\r
-TimeConnected=1285248097\r
-ComuniDllSave=84541440\r
-FfwnsdDllSave=81330176\r
+TimeConnected=1305306990\r
+ComuniDllSave=194838528\r
+FfwnsdDllSave=194969600\r
 ChipName=R5F562N8\r
 CpuMode=0\r
 InputClock=12.500000\r
@@ -10,8 +10,18 @@ JtagClock=10
 DebugFlags=0,0\r
 EmulatorMode=0\r
 NeedInit=1\r
+BlockBits=0\r
+B0=0,0\r
+B1=0,0\r
+B2=0,0\r
+B3=0,0\r
+TraceMode=0\r
+TraceOutput=2\r
+TraceCapacity=0\r
+TraceRestart=0\r
+OperatingFrequency=12.500000\r
 [DebugChecksum]\r
-Checksum=188492037\r
+Checksum=-1259593031\r
 [DisAssemblyWindow]\r
 NumStates=_ 1\r
 State 1=_ 1\r
@@ -31,10 +41,25 @@ UseTrigger=1
 TriggerName=main\r
 LimitSize=0\r
 ByteLimit=50\r
-[DriverProfiling]\r
-Enabled=0\r
-Source=2\r
-Graph=0\r
+[Stack]\r
+FillEnabled=0\r
+OverflowWarningsEnabled=1\r
+WarningThreshold=90\r
+SpWarningsEnabled=1\r
+WarnLogOnly=1\r
+UseTrigger=1\r
+TriggerName=main\r
+LimitSize=0\r
+ByteLimit=50\r
+[CallStack]\r
+ShowArgs=0\r
+[PowerLog]\r
+LogEnabled=0\r
+GraphEnabled=0\r
+ShowTimeLog=1\r
+ShowTimeSum=0\r
+Title0=Power\r
+Setup0=0 1 0 500 2 0 4 1 0\r
 [Log file]\r
 LoggingEnabled=_ 0\r
 LogFile=_ ""\r
@@ -42,6 +67,13 @@ Category=_ 0
 [TermIOLog]\r
 LoggingEnabled=_ 0\r
 LogFile=_ ""\r
+[CallStackLog]\r
+Enabled=0\r
+[DriverProfiling]\r
+Enabled=0\r
+Mode=3\r
+Graph=0\r
+Symbiont=0\r
 [Breakpoints]\r
 Count=0\r
 [Monitor Execution]\r
index 62d2bb0d728adbc25c30838d0ebfac6ad410855a..6dd1c2cc6e6aa73dc72798912f37b03fbef19b9c 100644 (file)
@@ -3,7 +3,7 @@
 <Workspace>\r
   <ConfigDictionary>\r
     \r
-  <CurrentConfigs><Project>RTOSDemo/Debug-with-optimisation</Project></CurrentConfigs></ConfigDictionary>\r
+  <CurrentConfigs><Project>RTOSDemo/Debug</Project></CurrentConfigs></ConfigDictionary>\r
   <Desktop>\r
     <Static>\r
       <Workspace>\r
@@ -33,7 +33,7 @@
             <Factory>Workspace</Factory>\r
             <Session>\r
               \r
-            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/Portable Layer</ExpandedNode></NodeDict></Session>\r
+            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode></NodeDict></Session>\r
           </Tab>\r
         </Tabs>\r
         \r
       \r
       \r
       \r
-    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-full.c</Filename><XPos>0</XPos><YPos>53</YPos><SelStart>3048</SelStart><SelEnd>3048</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-full.c</Filename><XPos>0</XPos><YPos>44</YPos><SelStart>12353</SelStart><SelEnd>12353</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-blinky.c</Filename><XPos>0</XPos><YPos>49</YPos><SelStart>4804</SelStart><SelEnd>4804</SelEnd></Tab><ActiveTab>1</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
     <Positions>\r
       \r
       \r
       \r
       \r
       \r
-    <Top><Row0><Sizes><Toolbar-00a2ab40><key>iaridepm.enu1</key></Toolbar-00a2ab40></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>706</Bottom><Right>351</Right><x>-2</x><y>-2</y><xscreen>331</xscreen><yscreen>284</yscreen><sizeHorzCX>197024</sizeHorzCX><sizeHorzCY>289206</sizeHorzCY><sizeVertCX>210119</sizeVertCX><sizeVertCY>720978</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>232</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>234</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>238289</sizeHorzCY><sizeVertCX>197024</sizeVertCX><sizeVertCY>289206</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+    <Top><Row0><Sizes><Toolbar-01335fe0><key>iaridepm.enu1</key></Toolbar-01335fe0></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>706</Bottom><Right>351</Right><x>-2</x><y>-2</y><xscreen>331</xscreen><yscreen>284</yscreen><sizeHorzCX>197024</sizeHorzCX><sizeHorzCY>289206</sizeHorzCY><sizeVertCX>210119</sizeVertCX><sizeVertCY>720978</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>232</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>234</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>238289</sizeHorzCY><sizeVertCX>197024</sizeVertCX><sizeVertCY>289206</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
   </Desktop>\r
 </Workspace>\r
 \r
index 1521ef89510078f3be34a2df42baffcd0c4dd050..17a5925a113e143994bfc9e53c5d92427f7bb3fe 100644 (file)
@@ -57,7 +57,8 @@
 /* Scheduler includes. */\r
 #include "FreeRTOS.h"\r
 #include "task.h"\r
-#include "semphr.h"\r
+#include "timers.h"\r
+#include "queue.h"\r
 \r
 /* uip includes. */\r
 #include "net/uip.h"\r
 /* Standard constant. */\r
 #define uipTOTAL_FRAME_HEADER_SIZE     54\r
 \r
+/* The ARP timer and the periodic timer share a callback function, so the\r
+respective timer IDs are used to determine which timer actually expired.  These\r
+constants are assigned to the timer IDs. */\r
+#define uipARP_TIMER                           0\r
+#define uipPERIODIC_TIMER                      1\r
+\r
+/* A block time of zero ticks simply means, "don't block". */\r
+#define uipDONT_BLOCK                          0UL\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
  */\r
 static void prvSetMACAddress( void );\r
 \r
+/*\r
+ * Perform any uIP initialisation necessary.\r
+ */\r
+static void prvInitialise_uIP( void );\r
+\r
+/*\r
+ * The callback function that is assigned to both the periodic timer and the\r
+ * ARP timer.\r
+ */\r
+static void prvUIPTimerCallback( xTimerHandle xTimer );\r
+\r
 /*\r
  * Port functions required by the uIP stack.\r
  */\r
-void clock_init( void );\r
 clock_time_t clock_time( void );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
-/* The semaphore used by the ISR to wake the uIP task. */\r
-xSemaphoreHandle xEMACSemaphore = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
+/* The queue used to send TCP/IP events to the uIP stack. */\r
+xQueueHandle xEMACEventQueue = NULL;\r
 \r
-void clock_init(void)\r
-{\r
-       /* This is done when the scheduler starts. */\r
-}\r
 /*-----------------------------------------------------------*/\r
 \r
 clock_time_t clock_time( void )\r
@@ -115,25 +129,14 @@ clock_time_t clock_time( void )
 \r
 void vuIP_Task( void *pvParameters )\r
 {\r
-portBASE_TYPE i, xDoneSomething;\r
-uip_ipaddr_t xIPAddr;\r
-struct timer periodic_timer, arp_timer;\r
+portBASE_TYPE i;\r
+unsigned long ulNewEvent = 0UL;\r
+unsigned long ulUIP_Events = 0UL;\r
 \r
        ( void ) pvParameters;\r
-\r
+       \r
        /* Initialise the uIP stack. */\r
-       timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );\r
-       timer_set( &arp_timer, configTICK_RATE_HZ * 10 );\r
-       uip_init();\r
-       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
-       uip_sethostaddr( &xIPAddr );\r
-       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
-       uip_setnetmask( &xIPAddr );\r
-       prvSetMACAddress();\r
-       httpd_init();\r
-\r
-       /* Create the semaphore used to wake the uIP task. */\r
-       vSemaphoreCreateBinary( xEMACSemaphore );\r
+       prvInitialise_uIP();\r
 \r
        /* Initialise the MAC. */\r
        vInitEmac();\r
@@ -145,49 +148,51 @@ struct timer periodic_timer, arp_timer;
 \r
        for( ;; )\r
        {\r
-               xDoneSomething = pdFALSE;\r
-               \r
-               /* Is there received data ready to be processed? */\r
-               uip_len = ( unsigned short ) ulEMACRead();\r
-               \r
-               if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
-               {\r
-                       /* Standard uIP loop taken from the uIP manual. */\r
-                       if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
+               if( ( ulUIP_Events & uipETHERNET_RX_EVENT ) != 0UL )\r
+               {               \r
+                       /* Is there received data ready to be processed? */\r
+                       uip_len = ( unsigned short ) ulEMACRead();\r
+                       \r
+                       if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
                        {\r
-                               uip_arp_ipin();\r
-                               uip_input();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               /* Standard uIP loop taken from the uIP manual. */\r
+                               if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
                                {\r
-                                       uip_arp_out();\r
-                                       vEMACWrite();\r
+                                       uip_arp_ipin();\r
+                                       uip_input();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               uip_arp_out();\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
-                       }\r
-                       else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
-                       {\r
-                               uip_arp_arpin();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
                                {\r
-                                       vEMACWrite();\r
+                                       uip_arp_arpin();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
+                       }\r
+                       else\r
+                       {\r
+                               ulUIP_Events &= ~uipETHERNET_RX_EVENT;\r
                        }\r
                }\r
-\r
-               if( timer_expired( &periodic_timer ) && ( uip_buf != NULL ) )\r
+               \r
+               if( ( ulUIP_Events & uipPERIODIC_TIMER_EVENT ) != 0UL )\r
                {\r
-                       timer_reset( &periodic_timer );\r
+                       ulUIP_Events &= ~uipPERIODIC_TIMER_EVENT;\r
+                                       \r
                        for( i = 0; i < UIP_CONNS; i++ )\r
                        {\r
                                uip_periodic( i );\r
@@ -201,29 +206,86 @@ struct timer periodic_timer, arp_timer;
                                        vEMACWrite();\r
                                }\r
                        }\r
-\r
-                       /* Call the ARP timer function every 10 seconds. */\r
-                       if( timer_expired( &arp_timer ) )\r
-                       {\r
-                               timer_reset( &arp_timer );\r
-                               uip_arp_timer();\r
-                       }\r
-                       \r
-                       xDoneSomething = pdTRUE;\r
                }\r
                \r
-               if( xDoneSomething == pdFALSE )\r
+               /* Call the ARP timer function every 10 seconds. */\r
+               if( ( ulUIP_Events & uipARP_TIMER_EVENT ) != 0 )\r
+               {\r
+                       ulUIP_Events &= ~uipARP_TIMER_EVENT;\r
+                       uip_arp_timer();\r
+               }\r
+                       \r
+               if( ulUIP_Events == pdFALSE )\r
                {\r
-                       /* We did not receive a packet, and there was no periodic\r
-                       processing to perform.  Block for a fixed period.  If a packet\r
-                       is received during this period we will be woken by the ISR\r
-                       giving us the Semaphore. */\r
-                       xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 20 );\r
+                       xQueueReceive( xEMACEventQueue, &ulNewEvent, portMAX_DELAY );\r
+                       ulUIP_Events |= ulNewEvent;\r
                }\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+static void prvInitialise_uIP( void )\r
+{\r
+xTimerHandle xARPTimer, xPeriodicTimer;\r
+uip_ipaddr_t xIPAddr;\r
+const unsigned long ul_uIPEventQueueLength = 10UL;\r
+\r
+       /* Initialise the uIP stack. */\r
+       uip_init();\r
+       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
+       uip_sethostaddr( &xIPAddr );\r
+       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
+       uip_setnetmask( &xIPAddr );\r
+       prvSetMACAddress();\r
+       httpd_init();\r
+\r
+       /* Create the queue used to sent TCP/IP events to the uIP stack. */\r
+       xEMACEventQueue = xQueueCreate( ul_uIPEventQueueLength, sizeof( unsigned long ) );\r
+\r
+       /* Create and start the uIP timers. */\r
+       xARPTimer = xTimerCreate(       "ARPTimer", /* Just a name that is helpful for debugging, not used by the kernel. */\r
+                                                               ( 10000UL / portTICK_RATE_MS ), /* Timer period. */\r
+                                                               pdTRUE, /* Autor-reload. */\r
+                                                               ( void * ) uipARP_TIMER,\r
+                                                               prvUIPTimerCallback\r
+                                                       );\r
+\r
+       xPeriodicTimer = xTimerCreate(  "PeriodicTimer",\r
+                                                                       ( 500 / portTICK_RATE_MS ),\r
+                                                                       pdTRUE, /* Autor-reload. */\r
+                                                                       ( void * ) uipPERIODIC_TIMER,\r
+                                                                       prvUIPTimerCallback\r
+                                                               );\r
+\r
+       configASSERT( xARPTimer );\r
+       configASSERT( xPeriodicTimer );\r
+\r
+       xTimerStart( xARPTimer, portMAX_DELAY );\r
+       xTimerStart( xPeriodicTimer, portMAX_DELAY );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvUIPTimerCallback( xTimerHandle xTimer )\r
+{\r
+static const unsigned long ulARPTimerExpired = uipARP_TIMER_EVENT;\r
+static const unsigned long ulPeriodicTimerExpired = uipPERIODIC_TIMER_EVENT;\r
+\r
+       /* This is a time callback, so calls to xQueueSend() must not attempt to\r
+       block. */\r
+       switch( ( int ) pvTimerGetTimerID( xTimer ) )\r
+       {\r
+               case uipARP_TIMER               :       xQueueSend( xEMACEventQueue, &ulARPTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               case uipPERIODIC_TIMER  :       xQueueSend( xEMACEventQueue, &ulPeriodicTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               default                                 :       /* Should not get here. */\r
+                                                                       break;\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 static void prvSetMACAddress( void )\r
 {\r
 struct uip_eth_addr xAddr;\r
index f1eb1fe698edea4c0cd6b070d3f7c12a41dd7c4b..01ce33ecc8dde43069a98de13aaaf339c5443c7c 100644 (file)
@@ -152,7 +152,7 @@ static void prvResetEverything( void );
 /*-----------------------------------------------------------*/\r
 \r
 /* Points to the Rx descriptor currently in use. */\r
-static volatile ethfifo *pxCurrentDesc = NULL;\r
+static volatile ethfifo *pxCurrentRxDesc = NULL;\r
 \r
 /* The buffer used by the uIP stack to both receive and send.  This points to\r
 one of the Ethernet buffers when its actually in use. */\r
@@ -241,23 +241,29 @@ unsigned long ulBytesReceived;
 \r
        if( ulBytesReceived > 0 )\r
        {\r
-               pxCurrentDesc->status &= ~( FP1 | FP0 );\r
-               pxCurrentDesc->status |= ACT;                   \r
-\r
-               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
-               {\r
-                       /* Restart Ethernet if it has stopped */\r
-                       EDMAC.EDRRR.LONG = 0x00000001L;\r
-               }\r
-\r
                /* Mark the pxDescriptor buffer as free as uip_buf is going to be set to\r
                the buffer that contains the received data. */\r
                prvReturnBuffer( uip_buf );\r
+\r
+               /* Point uip_buf to the data about ot be processed. */\r
+               uip_buf = ( void * ) pxCurrentRxDesc->buf_p;\r
                \r
-               uip_buf = ( void * ) pxCurrentDesc->buf_p;\r
+               /* Allocate a new buffer to the descriptor, as uip_buf is now using it's\r
+               old descriptor. */\r
+               pxCurrentRxDesc->buf_p = ( char * ) prvGetNextBuffer();\r
+\r
+               /* Prepare the descriptor to go again. */\r
+               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
+               pxCurrentRxDesc->status |= ACT;\r
 \r
                /* Move onto the next buffer in the ring. */\r
-               pxCurrentDesc = pxCurrentDesc->next;\r
+               pxCurrentRxDesc = pxCurrentRxDesc->next;\r
+               \r
+               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
+               {\r
+                       /* Restart Ethernet if it has stopped */\r
+                       EDMAC.EDRRR.LONG = 0x00000001L;\r
+               }\r
        }\r
 \r
        return ulBytesReceived;\r
@@ -367,7 +373,7 @@ long x;
        pxDescriptor->next = ( ethfifo * ) &( xTxDescriptors[ 0 ] );\r
        \r
        /* Use the first Rx descriptor to start with. */\r
-       pxCurrentDesc = &( xRxDescriptors[ 0 ] );\r
+       pxCurrentRxDesc = &( xRxDescriptors[ 0 ] );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
@@ -439,17 +445,17 @@ static unsigned long prvCheckRxFifoStatus( void )
 {\r
 unsigned long ulReturn = 0;\r
 \r
-       if( ( pxCurrentDesc->status & ACT ) != 0 )\r
+       if( ( pxCurrentRxDesc->status & ACT ) != 0 )\r
        {\r
                /* Current descriptor is still active. */\r
        }\r
-       else if( ( pxCurrentDesc->status & FE ) != 0 )\r
+       else if( ( pxCurrentRxDesc->status & FE ) != 0 )\r
        {\r
                /* Frame error.  Clear the error. */\r
-               pxCurrentDesc->status &= ~( FP1 | FP0 | FE );\r
-               pxCurrentDesc->status &= ~( RMAF | RRF | RTLF | RTSF | PRE | CERF );\r
-               pxCurrentDesc->status |= ACT;\r
-               pxCurrentDesc = pxCurrentDesc->next;\r
+               pxCurrentRxDesc->status &= ~( FP1 | FP0 | FE );\r
+               pxCurrentRxDesc->status &= ~( RMAF | RRF | RTLF | RTSF | PRE | CERF );\r
+               pxCurrentRxDesc->status |= ACT;\r
+               pxCurrentRxDesc = pxCurrentRxDesc->next;\r
 \r
                if( EDMAC.EDRRR.LONG == 0x00000000UL )\r
                {\r
@@ -461,9 +467,9 @@ unsigned long ulReturn = 0;
        {\r
                /* The descriptor contains a frame.  Because of the size of the buffers\r
                the frame should always be complete. */\r
-               if( ( pxCurrentDesc->status & FP0 ) == FP0 )\r
+               if( ( pxCurrentRxDesc->status & FP0 ) == FP0 )\r
                {\r
-                       ulReturn = pxCurrentDesc->size;\r
+                       ulReturn = pxCurrentRxDesc->size;\r
                }\r
                else\r
                {\r
@@ -510,12 +516,13 @@ static void prvConfigureEtherCAndEDMAC( void )
        #if __LITTLE_ENDIAN__ == 1\r
                EDMAC.EDMR.BIT.DE = 1;\r
        #endif\r
-       EDMAC.RDLAR = ( void * ) pxCurrentDesc; /* Initialaize Rx Descriptor List Address */\r
+       EDMAC.RDLAR = ( void * ) pxCurrentRxDesc;       /* Initialaize Rx Descriptor List Address */\r
        EDMAC.TDLAR = ( void * ) &( xTxDescriptors[ 0 ] );/* Initialaize Tx Descriptor List Address */\r
        EDMAC.TRSCER.LONG = 0x00000000;                         /* Copy-back status is RFE & TFE only   */\r
        EDMAC.TFTR.LONG = 0x00000000;                           /* Threshold of Tx_FIFO */\r
        EDMAC.FDR.LONG = 0x00000000;                            /* Transmit fifo & receive fifo is 256 bytes */\r
        EDMAC.RMCR.LONG = 0x00000003;                           /* Receive function is normal mode(continued) */\r
+       ETHERC.ECMR.BIT.PRM = 0;                                        /* Ensure promiscuous mode is off. */\r
        \r
        /* Enable the interrupt... */\r
        _IEN( _ETHER_EINT ) = 1;        \r
@@ -527,21 +534,16 @@ __interrupt void vEMAC_ISR_Handler( void )
 {\r
 unsigned long ul = EDMAC.EESR.LONG;\r
 long lHigherPriorityTaskWoken = pdFALSE;\r
-extern xSemaphoreHandle xEMACSemaphore;\r
-static long ulTxEndInts = 0;\r
+extern xQueueHandle xEMACEventQueue;\r
+const unsigned long ulRxEvent = uipETHERNET_RX_EVENT;\r
 \r
        __enable_interrupt();\r
 \r
        /* Has a Tx end occurred? */\r
        if( ul & emacTX_END_INTERRUPT )\r
        {\r
-               ++ulTxEndInts;\r
-               if( ulTxEndInts >= 2 )\r
-               {\r
-                       /* Only return the buffer to the pool once both Txes have completed. */\r
-                       prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
-                       ulTxEndInts = 0;\r
-               }\r
+               /* Only return the buffer to the pool once both Txes have completed. */\r
+               prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
                EDMAC.EESR.LONG = emacTX_END_INTERRUPT;\r
        }\r
 \r
@@ -549,7 +551,7 @@ static long ulTxEndInts = 0;
        if( ul & emacRX_END_INTERRUPT )\r
        {\r
                /* Make sure the Ethernet task is not blocked waiting for a packet. */\r
-               xSemaphoreGiveFromISR( xEMACSemaphore, &lHigherPriorityTaskWoken );\r
+               xQueueSendFromISR( xEMACEventQueue, &ulRxEvent, &lHigherPriorityTaskWoken );\r
                portYIELD_FROM_ISR( lHigherPriorityTaskWoken );\r
                EDMAC.EESR.LONG = emacRX_END_INTERRUPT;\r
        }\r
index b8156312cdbf57a1cd7b2af259e76bfeb01b2825..4f67687074fcc700d38ea2b1bb1a27d080efbe73 100644 (file)
@@ -10,8 +10,8 @@
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-blinky.c" \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-full.c" \r
 [WORKSPACE_FILE_STATES]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-blinky.c" -4 -23 1312 686 1 1 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-full.c" 0 0 1312 668 0 0 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-blinky.c" 0 0 1312 686 0 1 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-full.c" -4 -23 1312 668 1 0 \r
 [LOADED_PROJECTS]\r
 "RTOSDemo" \r
 [END]\r
index 69eba0c02b1c9cd315af060c4e6441c8f921e0f2..e2d42cc62c22499777c01db5966c872d95d3fe37 100644 (file)
Binary files a/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/RTOSDemo.nav and b/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/RTOSDemo.nav differ
index f7155a0209f8689a92de8f08377b262d7af7f688..e7569680adde6f654da248a7f215154199a81827 100644 (file)
 "{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlViews" "0" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_DENORMAL_MODE" "16777216" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_ROUND_MODE" "768" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "000000000000B5DC" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "000000000000B364\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "000000000000B58C" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "000000000000AD9C\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_12" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_13" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "00000000A5A5A5A5\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "000000000000ADC4\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "000000000000B5DC" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "00000000000130CC\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "000000000000AD9C\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "000000000000B33C\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "000000000000B58C" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000013104\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000000030001" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF8F563\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF92894\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF8B130" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF8B0F0" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_21" "0000000080000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_22" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_23" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_24" "0000000000000100" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_25" "1234567887650000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "0000000000012B18\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "0000000000012B18\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "0000000000000000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "000000000000AE24\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "000000000000ADC4\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "0000000000000000\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "0000000000000000\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "000000000000B33C\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "00000000A5A5A5A5\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_9" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_COUNT" "26" \r
 [WINDOW_POSITION_STATE_DATA_VD4]\r
 [WINDOW_Z_ORDER]\r
 "{WK_TB00000028_RTOSDEBUG} TOOLBAR 0" \r
+"{WK_TB00000013_SYMBOL} TOOLBAR 0" \r
+"{WK_TB00000011_CPU} TOOLBAR 0" \r
 "{WK_TB00000025_HELPSYSTEMTOOL} TOOLBAR 0" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-blinky.c" \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-full.c" \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RDK_Renesas\RTOSDemo\main-blinky.c" \r
 [TARGET_NAME]\r
 "RX600 Segger J-Link" "" 0 \r
 [STATUSBAR_STATEINFO_VD1]\r
 [FLASH_DETAILS]\r
 "" 0 0 "" 0 "" 0 0 "" 0 0 0 0 0 0 0 "" "" "" "" "" \r
 [BREAKPOINTS]\r
-"c:\e\dev\freertos\workingcopy\demo\rx600_rx62n-rdk_renesas\rtosdemo\webserver\emac.c" 413 33252624 1 "{00000000-0000-0000-C000-000000000046}" "" \r
+"c:\e\dev\freertos\workingcopy\demo\rx600_rx62n-rdk_renesas\rtosdemo\webserver\emac.c" 413 0 1 "{00000000-0000-0000-C000-000000000046}" "" \r
 [END]\r
index 0873c9ed8aedbfbcf9d4dd110864ac798287432c..847c9cbe31eea8954dddfa8b7c305307d7ab0e9f 100644 (file)
@@ -228,7 +228,6 @@ static void prvInitialise_uIP( void )
 {\r
 xTimerHandle xARPTimer, xPeriodicTimer;\r
 uip_ipaddr_t xIPAddr;\r
-struct timer periodic_timer, arp_timer;\r
 const unsigned long ul_uIPEventQueueLength = 10UL;\r
 \r
        /* Initialise the uIP stack. */\r
index c1bfab0f40362edd4feb656b353bc4a1bbafcc96..9a67850520362fd1442698c6243d5b2df2062859 100644 (file)
 #define configMAX_PRIORITIES                   ( ( unsigned portBASE_TYPE ) 7 )\r
 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
 \r
+/* Software timer definitions. */\r
+#define configUSE_TIMERS                               1\r
+#define configTIMER_TASK_PRIORITY              ( 3 )\r
+#define configTIMER_QUEUE_LENGTH               5\r
+#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE )\r
+\r
 /* The interrupt priority used by the kernel itself for the tick interrupt and\r
 the pended interrupt.  This would normally be the lowest priority. */\r
 #define configKERNEL_INTERRUPT_PRIORITY         1\r
@@ -115,6 +121,8 @@ to exclude the API function. */
 #define INCLUDE_uxTaskGetStackHighWaterMark    1\r
 #define INCLUDE_xTaskGetSchedulerState         1\r
 \r
+#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }    \r
+\r
 extern volatile unsigned long ulHighFrequencyTickCount;\r
 #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() portNOP() /* Run time stats use the same timer as the high frequency timer test. */\r
 #define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTickCount\r
index 3ac639b75cbd8cf937576ac01b86c6f71b0ab3ed..67449a7003726e1ef794a3c56d8e9bc586a8df01 100644 (file)
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "User" "C source file|FreeRTOS Source|Portable Layer" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "User" "C source file|FreeRTOS Source" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "User" "C source file|FreeRTOS Source" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "User" "C source file" 2 \r
 [FOLDER]\r
 "C header file" "C header file" \r
 "C source file" "C source file" \r
 [OPTIONS_Blinky_GNU Assembler]\r
 "Assembly source file" "0f757b5b0aa5bc10" 4 \r
 [OPTIONS_Blinky_GNU Compiler]\r
-"C source file" "00e05b5b0aa5bc10" 3 \r
-"C++ source file" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flop.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\hwinit.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\inthandler.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\start.asm" "00e05b5b0aa5bc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\HighFrequencyTimerTest.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\IntQueueTimer.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\ParTest.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\Renesas-Files\hwsetup.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-blinky.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-full.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\uIP_Task.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\vects.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\EMAC.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\httpd-cgi.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\phy.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\GCC\RX600\port.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "00e05b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "00e05b5b0aa5bc10" 3 \r
-"Preprocess Assembly file" "00e05b5b0aa5bc10" 2 \r
+"C source file" "00e05b5b0aa5bc10" 2 \r
+"C++ source file" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flop.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\hwinit.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\inthandler.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\start.asm" "00e05b5b0aa5bc10" 3 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\HighFrequencyTimerTest.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\IntQueueTimer.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\ParTest.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\Renesas-Files\hwsetup.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-blinky.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-full.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\uIP_Task.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\vects.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\EMAC.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\httpd-cgi.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\phy.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\GCC\RX600\port.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "08849e57f811cc10" 2 \r
+"Preprocess Assembly file" "00e05b5b0aa5bc10" 3 \r
 [OPTIONS_Blinky_GNU Library Generator]\r
 "Single Shot" "00e05b5b0aa5bc10" 1 \r
 [OPTIONS_Blinky_GNU Linker]\r
-"Single Shot" "0f757b5b0aa5bc10" 5 \r
+"Single Shot" "04611067f811cc10" 5 \r
 [OPTIONS_Blinky]\r
 "" 0 \r
 "[V|VERSION|2] [B|DOEXTF|1] [S|INCDIR|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03^"|^"$(CONFIGDIR)^"] [B|RSARCH|1] [B|FIXUPLIBS|1] [S|ARCHIVE|lib$(PROJECTNAME).a*libgcc.a] [S|OUTFORM|BOTH] [B|MFILEGEN|1] [S|PLMFILE|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|OUTFILE|^"$(CONFIGDIR)\$(PROJECTNAME).x^"] [S|GROUPDET|.fvectors|0|0||1|0xFFFFFF80|0|1|0|.fvectors|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.text|0|0||1|0xFFF80000|0|0|0|.text|All-files|<<FEND>>|0|.text.*|All-files|<<FEND>>|0|P|All-files|<<FEND>>|1|etext|<<FEND>>|<<CEND>>|<<GEND>>|.rvectors|0|0||0||0|1|1|_rvectors_start|<<FEND>>|0|.rvectors|All-files|<<FEND>>|1|_rvectors_end|<<FEND>>|<<CEND>>|<<GEND>>|.init|0|0||0||0|0|0|.init|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.fini|0|0||0||0|0|0|.fini|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.got|0|0||0||0|0|0|.got|All-files|<<FEND>>|0|.got.plt|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.rodata|0|0||0||0|0|0|.rodata|All-files|<<FEND>>|0|.rodata.*|All-files|<<FEND>>|0|C_1|All-files|<<FEND>>|0|C_2|All-files|<<FEND>>|0|C|All-files|<<FEND>>|1|_erodata|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame_hdr|0|0||0||0|0|0|.eh_frame_hdr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame|0|0||0||0|0|0|.eh_frame|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.jcr|0|0||0||0|0|0|.jcr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.tors|0|0||0||0|0|1|__CTOR_LIST__|<<FEND>>|1|___ctors|<<FEND>>|0|.ctors|All-files|<<FEND>>|1|___ctors_end|<<FEND>>|1|__CTOR_END__|<<FEND>>|1|__DTOR_LIST__|<<FEND>>|1|___dtors|<<FEND>>|0|.dtors|All-files|<<FEND>>|1|___dtors_end|<<FEND>>|1|__DTOR_END__|<<FEND>>|1|_mdata|<<FEND>>|<<CEND>>|<<GEND>>|.istack|0|0||1|0x00017FFC|0|0|1|_istack|<<FEND>>|<<CEND>>|<<GEND>>|.ustack|0|0||1|0x000179BC|0|0|1|_ustack|<<FEND>>|<<CEND>>|<<GEND>>|.data|0|2|_mdata|1|0x00001000|0|0|1|_data|<<FEND>>|0|.data|All-files|<<FEND>>|0|.data.*|All-files|<<FEND>>|0|D|All-files|<<FEND>>|0|D_1|All-files|<<FEND>>|0|D_2|All-files|<<FEND>>|1|_edata|<<FEND>>|<<CEND>>|<<GEND>>|.gcc_exc|0|0||0||0|0|0|.gcc_exc|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.bss|0|0||0||0|0|1|_bss|<<FEND>>|0|.bss|All-files|<<FEND>>|0|.bss.*|All-files|<<FEND>>|0|COMMON|All-files|<<FEND>>|0|B|All-files|<<FEND>>|0|B_1|All-files|<<FEND>>|0|B_2|All-files|<<FEND>>|1|_ebss|<<FEND>>|1|_end|<<FEND>>|<<CEND>>|<<GEND>>|] [S|APPTXT|^"-e _start^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1] [B|DOPROJBUILT|1]\r
 " 5 \r
 "[V|VERSION|2] [S|INCDIR|^"$(TCINSTALL)\rx-elf\rx-elf\optlibinc^"|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03\optlibinc^"|^"$(PROJDIR)\include^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\..\..\..\Source\portable\GCC\RX600^"|^"$(PROJDIR)^"|^"$(PROJDIR)\..\..\Common\include^"] [S|DEFINES|DEBUG] [S|OUTPUT|OBJECT] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [B|DEBUG|1] [S|DEBUGFT|Native] [I|DEBUGLV|2] [S|ALIGN4|ALL] [B|LINCSYM|1] [B|LOMITDD|1] [B|LOMITFP|1] [B|OPTIMIZE|0] [I|OPTLV|1] [B|NOSTDINC|1] [S|APPTXT|^"-Wa,-gdwarf2^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1]\r
-" 2 \r
-"[V|VERSION|2] [S|INCDIR|^"$(TCINSTALL)\rx-elf\rx-elf\optlibinc^"|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03\optlibinc^"|^"$(PROJDIR)\include^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\..\..\..\Source\portable\GCC\RX600^"|^"$(PROJDIR)^"|^"$(PROJDIR)\..\..\Common\include^"] [S|DEFINES|DEBUG] [S|OUTPUT|OBJECT] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [B|DEBUG|1] [S|DEBUGFT|Native] [I|DEBUGLV|2] [S|ALIGN4|ALL] [B|LINCSYM|1] [B|LOMITDD|1] [B|LOMITFP|1] [B|OPTIMIZE|0] [I|OPTLV|1] [B|NOSTDINC|1] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1]\r
 " 3 \r
+"[V|VERSION|2] [S|INCDIR|^"$(TCINSTALL)\rx-elf\rx-elf\optlibinc^"|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03\optlibinc^"|^"$(PROJDIR)\include^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\..\..\..\Source\portable\GCC\RX600^"|^"$(PROJDIR)^"|^"$(PROJDIR)\..\..\Common\include^"] [S|DEFINES|DEBUG] [S|OUTPUT|OBJECT] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [B|DEBUG|1] [S|DEBUGFT|Native] [I|DEBUGLV|2] [S|ALIGN4|ALL] [B|LINCSYM|1] [B|LOMITDD|1] [B|LOMITFP|1] [B|OPTIMIZE|0] [I|OPTLV|1] [B|NOSTDINC|1] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1]\r
+" 2 \r
 "[V|VERSION|2] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [I|DEBUGLV|2] [B|LINCHLS|1] [B|LINCASS|1] [B|LINCSYM|1] [S|LFILE|^"$(CONFIGDIR)\$(FILELEAF).^"] [S|PROJECTTYPE|CAPPPROJECT] [S|INCDIR|^"$(PROJDIR)^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] " 4 \r
 "[V|VERSION|2] [S|OUTPUTPATH|^"$(CONFIGDIR)\lib$(PROJECTNAME).a^"] [B|OPTIMIZE|1] [I|OPTTYPE|1] [S|MODE|BUILD/CHANGED] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [B|DOPROJBUILT|1] [B|DOOPTLIB|1] [B|MATH|1] [B|STDIO|1] [B|STDLIB|1] [B|STRING|1] " 1 \r
 [EXCLUDED_FILES_Blinky]\r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "022e4ac89aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "022e4ac89aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "022e4ac89aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "08849e57f811cc10" 2 \r
 "Preprocess Assembly file" "022e4ac89aa5bc10" 2 \r
 [OPTIONS_Debug_GNU Library Generator]\r
 "Single Shot" "00c20b5b0aa5bc10" 1 \r
 [OPTIONS_Debug_GNU Linker]\r
-"Single Shot" "00d92b5b0aa5bc10" 4 \r
+"Single Shot" "04611067f811cc10" 4 \r
 [OPTIONS_Debug]\r
 "" 0 \r
 "[V|VERSION|2] [B|DOEXTF|1] [S|INCDIR|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03^"|^"$(CONFIGDIR)^"] [B|RSARCH|1] [B|FIXUPLIBS|1] [S|ARCHIVE|libgcc.a*lib$(PROJECTNAME).a] [S|OUTFORM|BOTH] [B|MFILEGEN|1] [S|PLMFILE|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|OUTFILE|^"$(CONFIGDIR)\$(PROJECTNAME).x^"] [S|GROUPDET|.fvectors|0|0||1|0xFFFFFF80|0|1|0|.fvectors|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.text|0|0||1|0xFFF80000|0|0|0|.text|All-files|<<FEND>>|0|.text.*|All-files|<<FEND>>|0|P|All-files|<<FEND>>|1|etext|<<FEND>>|<<CEND>>|<<GEND>>|.rvectors|0|0||0||0|1|1|_rvectors_start|<<FEND>>|0|.rvectors|All-files|<<FEND>>|1|_rvectors_end|<<FEND>>|<<CEND>>|<<GEND>>|.init|0|0||0||0|0|0|.init|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.fini|0|0||0||0|0|0|.fini|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.got|0|0||0||0|0|0|.got|All-files|<<FEND>>|0|.got.plt|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.rodata|0|0||0||0|0|0|.rodata|All-files|<<FEND>>|0|.rodata.*|All-files|<<FEND>>|0|C_1|All-files|<<FEND>>|0|C_2|All-files|<<FEND>>|0|C|All-files|<<FEND>>|1|_erodata|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame_hdr|0|0||0||0|0|0|.eh_frame_hdr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame|0|0||0||0|0|0|.eh_frame|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.jcr|0|0||0||0|0|0|.jcr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.tors|0|0||0||0|0|1|__CTOR_LIST__|<<FEND>>|1|___ctors|<<FEND>>|0|.ctors|All-files|<<FEND>>|1|___ctors_end|<<FEND>>|1|__CTOR_END__|<<FEND>>|1|__DTOR_LIST__|<<FEND>>|1|___dtors|<<FEND>>|0|.dtors|All-files|<<FEND>>|1|___dtors_end|<<FEND>>|1|__DTOR_END__|<<FEND>>|1|_mdata|<<FEND>>|<<CEND>>|<<GEND>>|.istack|0|0||1|0x00017FFC|0|0|1|_istack|<<FEND>>|<<CEND>>|<<GEND>>|.ustack|0|0||1|0x000179BC|0|0|1|_ustack|<<FEND>>|<<CEND>>|<<GEND>>|.data|0|2|_mdata|1|0x00001000|0|0|1|_data|<<FEND>>|0|.data|All-files|<<FEND>>|0|.data.*|All-files|<<FEND>>|0|D|All-files|<<FEND>>|0|D_1|All-files|<<FEND>>|0|D_2|All-files|<<FEND>>|1|_edata|<<FEND>>|<<CEND>>|<<GEND>>|.gcc_exc|0|0||0||0|0|0|.gcc_exc|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.bss|0|0||0||0|0|1|_bss|<<FEND>>|0|.bss|All-files|<<FEND>>|0|.bss.*|All-files|<<FEND>>|0|COMMON|All-files|<<FEND>>|0|B|All-files|<<FEND>>|0|B_1|All-files|<<FEND>>|0|B_2|All-files|<<FEND>>|1|_ebss|<<FEND>>|1|_end|<<FEND>>|<<CEND>>|<<GEND>>|] [B|WONCEU|1] [B|OUTTRAD|1] [S|APPTXT|^"-e _start^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1] [B|DOPROJBUILT|1]\r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "00e05b5b0aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "00e05b5b0aa5bc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "00e05b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "08849e57f811cc10" 2 \r
 "Preprocess Assembly file" "00e05b5b0aa5bc10" 2 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM_GNU Library Generator]\r
 "Single Shot" "00e05b5b0aa5bc10" 1 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM_GNU Linker]\r
-"Single Shot" "00e05b5b0aa5bc10" 4 \r
+"Single Shot" "04611067f811cc10" 4 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM]\r
 "" 0 \r
 "[V|VERSION|2] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [I|DEBUGLV|2] [B|LINCHLS|1] [B|LINCASS|1] [B|LINCSYM|1] [S|LFILE|^"$(CONFIGDIR)\$(FILELEAF).^"] [S|PROJECTTYPE|CAPPPROJECT] [S|INCDIR|^"$(PROJDIR)^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] " 3 \r
 [OPTIONS_Debug_with_optimisation_GNU Assembler]\r
 "Assembly source file" "00d92b5b0aa5bc10" 4 \r
 [OPTIONS_Debug_with_optimisation_GNU Compiler]\r
-"C source file" "00d92b5b0aa5bc10" 3 \r
-"C++ source file" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flop.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\hwinit.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\inthandler.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\start.asm" "00d92b5b0aa5bc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\HighFrequencyTimerTest.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\IntQueueTimer.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\ParTest.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\Renesas-Files\hwsetup.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-blinky.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-full.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\uIP_Task.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\vects.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\EMAC.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\httpd-cgi.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\phy.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\GCC\RX600\port.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "00d92b5b0aa5bc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "00d92b5b0aa5bc10" 3 \r
-"Preprocess Assembly file" "00d92b5b0aa5bc10" 2 \r
+"C source file" "00d92b5b0aa5bc10" 2 \r
+"C++ source file" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flop.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\hwinit.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\inthandler.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\GNU-Files\start.asm" "00d92b5b0aa5bc10" 3 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\HighFrequencyTimerTest.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\IntQueueTimer.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\ParTest.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\Renesas-Files\hwsetup.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-blinky.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-full.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\uIP_Task.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\vects.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\EMAC.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\httpd-cgi.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\webserver\phy.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\GCC\RX600\port.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "00d92b5b0aa5bc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "08849e57f811cc10" 2 \r
+"Preprocess Assembly file" "00d92b5b0aa5bc10" 3 \r
 [OPTIONS_Debug_with_optimisation_GNU Library Generator]\r
 "Single Shot" "00d92b5b0aa5bc10" 1 \r
 [OPTIONS_Debug_with_optimisation_GNU Linker]\r
-"Single Shot" "00e05b5b0aa5bc10" 5 \r
+"Single Shot" "04611067f811cc10" 5 \r
 [OPTIONS_Debug_with_optimisation]\r
 "" 0 \r
 "[V|VERSION|2] [B|DOEXTF|1] [S|INCDIR|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03^"|^"$(CONFIGDIR)^"] [B|RSARCH|1] [B|FIXUPLIBS|1] [S|ARCHIVE|lib$(PROJECTNAME).a*libgcc.a] [S|OUTFORM|BOTH] [B|MFILEGEN|1] [S|PLMFILE|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|OUTFILE|^"$(CONFIGDIR)\$(PROJECTNAME).x^"] [S|GROUPDET|.fvectors|0|0||1|0xFFFFFF80|0|1|0|.fvectors|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.text|0|0||1|0xFFF80000|0|0|0|.text|All-files|<<FEND>>|0|.text.*|All-files|<<FEND>>|0|P|All-files|<<FEND>>|1|etext|<<FEND>>|<<CEND>>|<<GEND>>|.rvectors|0|0||0||0|1|1|_rvectors_start|<<FEND>>|0|.rvectors|All-files|<<FEND>>|1|_rvectors_end|<<FEND>>|<<CEND>>|<<GEND>>|.init|0|0||0||0|0|0|.init|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.fini|0|0||0||0|0|0|.fini|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.got|0|0||0||0|0|0|.got|All-files|<<FEND>>|0|.got.plt|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.rodata|0|0||0||0|0|0|.rodata|All-files|<<FEND>>|0|.rodata.*|All-files|<<FEND>>|0|C_1|All-files|<<FEND>>|0|C_2|All-files|<<FEND>>|0|C|All-files|<<FEND>>|1|_erodata|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame_hdr|0|0||0||0|0|0|.eh_frame_hdr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.eh_frame|0|0||0||0|0|0|.eh_frame|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.jcr|0|0||0||0|0|0|.jcr|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.tors|0|0||0||0|0|1|__CTOR_LIST__|<<FEND>>|1|___ctors|<<FEND>>|0|.ctors|All-files|<<FEND>>|1|___ctors_end|<<FEND>>|1|__CTOR_END__|<<FEND>>|1|__DTOR_LIST__|<<FEND>>|1|___dtors|<<FEND>>|0|.dtors|All-files|<<FEND>>|1|___dtors_end|<<FEND>>|1|__DTOR_END__|<<FEND>>|1|_mdata|<<FEND>>|<<CEND>>|<<GEND>>|.istack|0|0||1|0x00017FFC|0|0|1|_istack|<<FEND>>|<<CEND>>|<<GEND>>|.ustack|0|0||1|0x000179BC|0|0|1|_ustack|<<FEND>>|<<CEND>>|<<GEND>>|.data|0|2|_mdata|1|0x00001000|0|0|1|_data|<<FEND>>|0|.data|All-files|<<FEND>>|0|.data.*|All-files|<<FEND>>|0|D|All-files|<<FEND>>|0|D_1|All-files|<<FEND>>|0|D_2|All-files|<<FEND>>|1|_edata|<<FEND>>|<<CEND>>|<<GEND>>|.gcc_exc|0|0||0||0|0|0|.gcc_exc|All-files|<<FEND>>|<<CEND>>|<<GEND>>|.bss|0|0||0||0|0|1|_bss|<<FEND>>|0|.bss|All-files|<<FEND>>|0|.bss.*|All-files|<<FEND>>|0|COMMON|All-files|<<FEND>>|0|B|All-files|<<FEND>>|0|B_1|All-files|<<FEND>>|0|B_2|All-files|<<FEND>>|1|_ebss|<<FEND>>|1|_end|<<FEND>>|<<CEND>>|<<GEND>>|] [S|APPTXT|^"-e _start^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1] [B|DOPROJBUILT|1]\r
 " 5 \r
 "[V|VERSION|2] [S|INCDIR|^"$(TCINSTALL)\rx-elf\rx-elf\optlibinc^"|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03\optlibinc^"|^"$(PROJDIR)\include^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\..\..\..\Source\portable\GCC\RX600^"|^"$(PROJDIR)^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\..\..\Common\Ethernet\FreeTCPIP^"|^"$(PROJDIR)\webserver^"] [S|DEFINES|DEBUG|INCLUDE_HIGH_FREQUENCY_TIMER_TEST] [S|OUTPUT|OBJECT] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [B|DEBUG|1] [S|DEBUGFT|Native] [I|DEBUGLV|2] [S|ALIGN4|ALL] [B|OPTIMIZE|1] [I|OPTLV|1] [B|NOSTDINC|1] [S|APPTXT|^"-Wa,-gdwarf2^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1]\r
-" 2 \r
-"[V|VERSION|2] [S|INCDIR|^"$(TCINSTALL)\rx-elf\rx-elf\optlibinc^"|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03\optlibinc^"|^"$(PROJDIR)\include^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\..\..\..\Source\portable\GCC\RX600^"|^"$(PROJDIR)^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\..\..\Common\Ethernet\FreeTCPIP^"|^"$(PROJDIR)\webserver^"] [S|DEFINES|DEBUG|INCLUDE_HIGH_FREQUENCY_TIMER_TEST] [S|OUTPUT|OBJECT] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [B|DEBUG|1] [S|DEBUGFT|Native] [I|DEBUGLV|2] [S|ALIGN4|ALL] [B|OPTIMIZE|1] [I|OPTLV|1] [B|NOSTDINC|1] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1]\r
 " 3 \r
+"[V|VERSION|2] [S|INCDIR|^"$(TCINSTALL)\rx-elf\rx-elf\optlibinc^"|^"$(TCINSTALL)\rx-elf\lib\gcc\rx-elf\4.5-GNURX_v10.03\optlibinc^"|^"$(PROJDIR)\include^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\..\..\..\Source\portable\GCC\RX600^"|^"$(PROJDIR)^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\..\..\Common\Ethernet\FreeTCPIP^"|^"$(PROJDIR)\webserver^"] [S|DEFINES|DEBUG|INCLUDE_HIGH_FREQUENCY_TIMER_TEST] [S|OUTPUT|OBJECT] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [B|DEBUG|1] [S|DEBUGFT|Native] [I|DEBUGLV|2] [S|ALIGN4|ALL] [B|OPTIMIZE|1] [I|OPTLV|1] [B|NOSTDINC|1] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [I|RMINTREGVAL|0] [I|RMMAXCONSTVAL|0] [I|RMMAXVARSVAL|0] [S|PROJECTTYPE|CAPPPROJECT] [B|DOOPTLIB|1]\r
+" 2 \r
 "[V|VERSION|2] [S|OBJPATH|^"$(CONFIGDIR)\$(FILELEAF).o^"] [I|DEBUGLV|2] [B|LINCHLS|1] [B|LINCASS|1] [B|LINCSYM|1] [S|LFILE|^"$(CONFIGDIR)\$(FILELEAF).^"] [S|PROJECTTYPE|CAPPPROJECT] [S|INCDIR|^"$(PROJDIR)^"] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] " 4 \r
 "[V|VERSION|2] [S|OUTPUTPATH|^"$(CONFIGDIR)\lib$(PROJECTNAME).a^"] [B|OPTIMIZE|1] [I|OPTTYPE|1] [S|MODE|BUILD/CHANGED] [S|CPUTYPE|RX600] [S|ENDIAN|LITTLE] [S|CPU|Other] [B|DOPROJBUILT|1] [B|DOOPTLIB|1] [B|MATH|1] [B|STDIO|1] [B|STDLIB|1] [B|STRING|1] " 1 \r
 [EXCLUDED_FILES_Debug_with_optimisation]\r
index 41e59e1275a3bf4f2bc83d7f932ef738de45d504..f3f3596f919b9e62d0bfdd9afe588722993cf502 100644 (file)
Binary files a/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/RTOSDemo.nav and b/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/RTOSDemo.nav differ
index 9bd8099193084cb9788c316455c29c4e44e0ef0a..a59993835d11ec18017cd79611d89905820588ca 100644 (file)
 "{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlViews" "0" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_DENORMAL_MODE" "16777216" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_ROUND_MODE" "768" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "0000000000017EF4\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "0000000000000004\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "0000000000000002\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "000000000000000A" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "000000000000B678\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "000000000000EB60\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "000000000000EB60\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "00000000FFFFDCDA" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_12" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_13" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "0000000000000001\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "00000000000000EA\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "000000000000BB68" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000017EF4\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000004010000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF851D9\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "000000000000311C\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF8D818" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "000000000000B678" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000017FA0\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000000030004\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF8B4BD\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF8E6D8" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_21" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_22" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_23" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_24" "0000000000000100" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_25" "1234567887650000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "0000000000017F34\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "0000000000000000\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "0000000000003120\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "0000000000017EF4\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_24" "0000000040000100" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_25" "00008A613AE30000" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "000000000000B678\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_9" "00000000A5A5A5A5" \r
 [WINDOW_POSITION_STATE_DATA_VD4]\r
 [WINDOW_Z_ORDER]\r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-full.c" \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-blinky.c" \r
 [TARGET_NAME]\r
 "RX600 E1/E20 SYSTEM" "" 0 \r
 [STATUSBAR_STATEINFO_VD1]\r
index a09782decd2ae25e800565fcd8ccfdc9c02f6aee..847c9cbe31eea8954dddfa8b7c305307d7ab0e9f 100644 (file)
@@ -57,7 +57,8 @@
 /* Scheduler includes. */\r
 #include "FreeRTOS.h"\r
 #include "task.h"\r
-#include "semphr.h"\r
+#include "timers.h"\r
+#include "queue.h"\r
 \r
 /* uip includes. */\r
 #include "net/uip.h"\r
 /* Standard constant. */\r
 #define uipTOTAL_FRAME_HEADER_SIZE     54\r
 \r
+/* The ARP timer and the periodic timer share a callback function, so the\r
+respective timer IDs are used to determine which timer actually expired.  These\r
+constants are assigned to the timer IDs. */\r
+#define uipARP_TIMER                           0\r
+#define uipPERIODIC_TIMER                      1\r
+\r
+/* A block time of zero ticks simply means, "don't block". */\r
+#define uipDONT_BLOCK                          0UL\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
  */\r
 static void prvSetMACAddress( void );\r
 \r
+/*\r
+ * Perform any uIP initialisation necessary. \r
+ */\r
+static void prvInitialise_uIP( void );\r
+\r
+/*\r
+ * The callback function that is assigned to both the periodic timer and the\r
+ * ARP timer.\r
+ */\r
+static void prvUIPTimerCallback( xTimerHandle xTimer );\r
+\r
 /*\r
  * Port functions required by the uIP stack.\r
  */\r
-void clock_init( void );\r
 clock_time_t clock_time( void );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
-/* The semaphore used by the ISR to wake the uIP task. */\r
-xSemaphoreHandle xEMACSemaphore = NULL;\r
+/* The queue used to send TCP/IP events to the uIP stack. */\r
+xQueueHandle xEMACEventQueue = NULL;\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
-void clock_init(void)\r
-{\r
-       /* This is done when the scheduler starts. */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
 clock_time_t clock_time( void )\r
 {\r
        return xTaskGetTickCount();\r
@@ -115,25 +129,14 @@ clock_time_t clock_time( void )
 \r
 void vuIP_Task( void *pvParameters )\r
 {\r
-portBASE_TYPE i, xDoneSomething;\r
-uip_ipaddr_t xIPAddr;\r
-struct timer periodic_timer, arp_timer;\r
+portBASE_TYPE i;\r
+unsigned long ulNewEvent = 0UL;\r
+unsigned long ulUIP_Events = 0UL;\r
 \r
        ( void ) pvParameters;\r
-\r
+       \r
        /* Initialise the uIP stack. */\r
-       timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );\r
-       timer_set( &arp_timer, configTICK_RATE_HZ * 10 );\r
-       uip_init();\r
-       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
-       uip_sethostaddr( &xIPAddr );\r
-       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
-       uip_setnetmask( &xIPAddr );\r
-       prvSetMACAddress();\r
-       httpd_init();\r
-\r
-       /* Create the semaphore used to wake the uIP task. */\r
-       vSemaphoreCreateBinary( xEMACSemaphore );\r
+       prvInitialise_uIP();\r
 \r
        /* Initialise the MAC. */\r
        vInitEmac();\r
@@ -145,49 +148,51 @@ struct timer periodic_timer, arp_timer;
 \r
        for( ;; )\r
        {\r
-               xDoneSomething = pdFALSE;\r
-               \r
-               /* Is there received data ready to be processed? */\r
-               uip_len = ( unsigned short ) ulEMACRead();\r
-               \r
-               if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
-               {\r
-                       /* Standard uIP loop taken from the uIP manual. */\r
-                       if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
+               if( ( ulUIP_Events & uipETHERNET_RX_EVENT ) != 0UL )\r
+               {               \r
+                       /* Is there received data ready to be processed? */\r
+                       uip_len = ( unsigned short ) ulEMACRead();\r
+                       \r
+                       if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
                        {\r
-                               uip_arp_ipin();\r
-                               uip_input();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               /* Standard uIP loop taken from the uIP manual. */\r
+                               if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
                                {\r
-                                       uip_arp_out();\r
-                                       vEMACWrite();\r
+                                       uip_arp_ipin();\r
+                                       uip_input();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               uip_arp_out();\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
-                       }\r
-                       else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
-                       {\r
-                               uip_arp_arpin();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
                                {\r
-                                       vEMACWrite();\r
+                                       uip_arp_arpin();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
+                       }\r
+                       else\r
+                       {\r
+                               ulUIP_Events &= ~uipETHERNET_RX_EVENT;\r
                        }\r
                }\r
-\r
-               if( timer_expired( &periodic_timer ) && ( uip_buf != NULL ) )\r
+               \r
+               if( ( ulUIP_Events & uipPERIODIC_TIMER_EVENT ) != 0UL )\r
                {\r
-                       timer_reset( &periodic_timer );\r
+                       ulUIP_Events &= ~uipPERIODIC_TIMER_EVENT;\r
+                                       \r
                        for( i = 0; i < UIP_CONNS; i++ )\r
                        {\r
                                uip_periodic( i );\r
@@ -201,25 +206,82 @@ struct timer periodic_timer, arp_timer;
                                        vEMACWrite();\r
                                }\r
                        }\r
-\r
-                       /* Call the ARP timer function every 10 seconds. */\r
-                       if( timer_expired( &arp_timer ) )\r
-                       {\r
-                               timer_reset( &arp_timer );\r
-                               uip_arp_timer();\r
-                       }\r
-                       \r
-                       xDoneSomething = pdTRUE;\r
                }\r
                \r
-               if( xDoneSomething == pdFALSE )\r
+               /* Call the ARP timer function every 10 seconds. */\r
+               if( ( ulUIP_Events & uipARP_TIMER_EVENT ) != 0 )\r
                {\r
-                       /* We did not receive a packet, and there was no periodic\r
-                       processing to perform.  Block for a fixed period.  If a packet\r
-                       is received during this period we will be woken by the ISR\r
-                       giving us the Semaphore. */\r
-                       xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 20 );\r
+                       ulUIP_Events &= ~uipARP_TIMER_EVENT;\r
+                       uip_arp_timer();\r
                }\r
+                       \r
+               if( ulUIP_Events == pdFALSE )\r
+               {\r
+                       xQueueReceive( xEMACEventQueue, &ulNewEvent, portMAX_DELAY );\r
+                       ulUIP_Events |= ulNewEvent;\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvInitialise_uIP( void )\r
+{\r
+xTimerHandle xARPTimer, xPeriodicTimer;\r
+uip_ipaddr_t xIPAddr;\r
+const unsigned long ul_uIPEventQueueLength = 10UL;\r
+\r
+       /* Initialise the uIP stack. */\r
+       uip_init();\r
+       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
+       uip_sethostaddr( &xIPAddr );\r
+       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
+       uip_setnetmask( &xIPAddr );\r
+       prvSetMACAddress();\r
+       httpd_init();\r
+\r
+       /* Create the queue used to sent TCP/IP events to the uIP stack. */\r
+       xEMACEventQueue = xQueueCreate( ul_uIPEventQueueLength, sizeof( unsigned long ) );\r
+\r
+       /* Create and start the uIP timers. */\r
+       xARPTimer = xTimerCreate(       ( const signed char * const ) "ARPTimer", /* Just a name that is helpful for debugging, not used by the kernel. */\r
+                                                               ( 10000UL / portTICK_RATE_MS ), /* Timer period. */\r
+                                                               pdTRUE, /* Autor-reload. */\r
+                                                               ( void * ) uipARP_TIMER,\r
+                                                               prvUIPTimerCallback\r
+                                                       );\r
+\r
+       xPeriodicTimer = xTimerCreate(  ( const signed char * const ) "PeriodicTimer",\r
+                                                                       ( 500 / portTICK_RATE_MS ),\r
+                                                                       pdTRUE, /* Autor-reload. */\r
+                                                                       ( void * ) uipPERIODIC_TIMER,\r
+                                                                       prvUIPTimerCallback\r
+                                                               );\r
+\r
+       configASSERT( xARPTimer );\r
+       configASSERT( xPeriodicTimer );\r
+\r
+       xTimerStart( xARPTimer, portMAX_DELAY );\r
+       xTimerStart( xPeriodicTimer, portMAX_DELAY );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvUIPTimerCallback( xTimerHandle xTimer )\r
+{\r
+static const unsigned long ulARPTimerExpired = uipARP_TIMER_EVENT;\r
+static const unsigned long ulPeriodicTimerExpired = uipPERIODIC_TIMER_EVENT;\r
+\r
+       /* This is a time callback, so calls to xQueueSend() must not attempt to\r
+       block. */\r
+       switch( ( int ) pvTimerGetTimerID( xTimer ) )\r
+       {\r
+               case uipARP_TIMER               :       xQueueSend( xEMACEventQueue, &ulARPTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               case uipPERIODIC_TIMER  :       xQueueSend( xEMACEventQueue, &ulPeriodicTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               default                                 :       /* Should not get here. */\r
+                                                                       break;\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -250,28 +312,34 @@ char *c;
        {\r
                /* Is there a command in the string? */\r
                c = strstr( pcInputString, "?" );\r
-               if( c )\r
-               {\r
+           if( c )\r
+           {\r
                        /* Turn the LED's on or off in accordance with the check box status. */\r
                        if( strstr( c, "LED0=1" ) != NULL )\r
                        {\r
-                               /* Turn LEDs on. */\r
-                               vParTestSetLED( 3, 1 );\r
-                               vParTestSetLED( 4, 1 );\r
+                               /* Turn the LEDs on. */\r
+                               vParTestSetLED( 7, 1 );\r
+                               vParTestSetLED( 8, 1 );\r
+                               vParTestSetLED( 9, 1 );\r
+                               vParTestSetLED( 10, 1 );\r
                        }\r
                        else\r
                        {\r
-                               /* Turn LED 4 off. */\r
-                               vParTestSetLED( 3, 0 );\r
-                               vParTestSetLED( 4, 0 );\r
+                               /* Turn the LEDs off. */\r
+                               vParTestSetLED( 7, 0 );\r
+                               vParTestSetLED( 8, 0 );\r
+                               vParTestSetLED( 9, 0 );\r
+                               vParTestSetLED( 10, 0 );\r
                        }\r
-               }\r
+           }\r
                else\r
                {\r
-                       /* Commands to turn LEDs off are not always explicit, turn LED 4\r
-                       off. */\r
-                       vParTestSetLED( 3, 0 );\r
-                       vParTestSetLED( 4, 0 );\r
+                       /* Commands to turn LEDs off are not always explicit. */\r
+                       vParTestSetLED( 7, 0 );\r
+                       vParTestSetLED( 8, 0 );\r
+                       vParTestSetLED( 9, 0 );\r
+                       vParTestSetLED( 10, 0 );\r
                }\r
        }\r
 }\r
+\r
index bf63bb6599ad410088aeb352841f679fbee63b21..945796ab55374c4805058f892799a2e97ff85479 100644 (file)
@@ -242,23 +242,29 @@ unsigned long ulBytesReceived;
 \r
        if( ulBytesReceived > 0 )\r
        {\r
-               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
-               pxCurrentRxDesc->status |= ACT;                 \r
-\r
-               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
-               {\r
-                       /* Restart Ethernet if it has stopped */\r
-                       EDMAC.EDRRR.LONG = 0x00000001L;\r
-               }\r
-\r
                /* Mark the pxDescriptor buffer as free as uip_buf is going to be set to\r
                the buffer that contains the received data. */\r
                prvReturnBuffer( uip_buf );\r
-               \r
+\r
+               /* Point uip_buf to the data about ot be processed. */\r
                uip_buf = ( void * ) pxCurrentRxDesc->buf_p;\r
+               \r
+               /* Allocate a new buffer to the descriptor, as uip_buf is now using it's\r
+               old descriptor. */\r
+               pxCurrentRxDesc->buf_p = ( char * ) prvGetNextBuffer();\r
+\r
+               /* Prepare the descriptor to go again. */\r
+               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
+               pxCurrentRxDesc->status |= ACT;\r
 \r
                /* Move onto the next buffer in the ring. */\r
                pxCurrentRxDesc = pxCurrentRxDesc->next;\r
+               \r
+               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
+               {\r
+                       /* Restart Ethernet if it has stopped */\r
+                       EDMAC.EDRRR.LONG = 0x00000001L;\r
+               }\r
        }\r
 \r
        return ulBytesReceived;\r
@@ -517,6 +523,7 @@ static void prvConfigureEtherCAndEDMAC( void )
        EDMAC.TFTR.LONG = 0x00000000;                           /* Threshold of Tx_FIFO */\r
        EDMAC.FDR.LONG = 0x00000000;                            /* Transmit fifo & receive fifo is 256 bytes */\r
        EDMAC.RMCR.LONG = 0x00000003;                           /* Receive function is normal mode(continued) */\r
+       ETHERC.ECMR.BIT.PRM = 0;                                        /* Ensure promiscuous mode is off. */\r
        \r
        /* Enable the interrupt... */\r
        _IEN( _ETHER_EINT ) = 1;        \r
@@ -527,8 +534,8 @@ void vEMAC_ISR_Handler( void )
 {\r
 unsigned long ul = EDMAC.EESR.LONG;\r
 long lHigherPriorityTaskWoken = pdFALSE;\r
-extern xSemaphoreHandle xEMACSemaphore;\r
-static long ulTxEndInts = 0;\r
+extern xQueueHandle xEMACEventQueue;\r
+const unsigned long ulRxEvent = uipETHERNET_RX_EVENT;\r
 \r
        /* Re-enabled interrupts. */\r
        __asm volatile( "SETPSW I" );\r
@@ -536,13 +543,8 @@ static long ulTxEndInts = 0;
        /* Has a Tx end occurred? */\r
        if( ul & emacTX_END_INTERRUPT )\r
        {\r
-               ++ulTxEndInts;\r
-               if( ulTxEndInts >= 2 )\r
-               {\r
-                       /* Only return the buffer to the pool once both Txes have completed. */\r
-                       prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
-                       ulTxEndInts = 0;\r
-               }\r
+               /* Only return the buffer to the pool once both Txes have completed. */\r
+               prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
                EDMAC.EESR.LONG = emacTX_END_INTERRUPT;\r
        }\r
 \r
@@ -550,7 +552,7 @@ static long ulTxEndInts = 0;
        if( ul & emacRX_END_INTERRUPT )\r
        {\r
                /* Make sure the Ethernet task is not blocked waiting for a packet. */\r
-               xSemaphoreGiveFromISR( xEMACSemaphore, &lHigherPriorityTaskWoken );\r
+               xQueueSendFromISR( xEMACEventQueue, &ulRxEvent, &lHigherPriorityTaskWoken );\r
                portYIELD_FROM_ISR( lHigherPriorityTaskWoken );\r
                EDMAC.EESR.LONG = emacRX_END_INTERRUPT;\r
        }\r
index fc4b5209939dbb80b0ea524a69647e81e66663c8..3bb59c5a0eded9535fbe098bb33dfd46ad349cba 100644 (file)
@@ -7,8 +7,10 @@
 [GENERAL_DATA]\r
 [BREAKPOINTS]\r
 [OPEN_WORKSPACE_FILES]\r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-blinky.c" \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-full.c" \r
 [WORKSPACE_FILE_STATES]\r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-blinky.c" 88 88 1130 405 0 1 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_GNURX\RTOSDemo\main-full.c" -4 -23 1314 608 1 0 \r
 [LOADED_PROJECTS]\r
 "RTOSDemo" \r
index 84e8b1b5595d3aff53420835a903fda5e2bde137..55181ca9c4ca0bd46cf8298410b81e6a352454b4 100644 (file)
 #define configMAX_PRIORITIES                   ( ( unsigned portBASE_TYPE ) 7 )\r
 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
 \r
+/* Software timer definitions. */\r
+#define configUSE_TIMERS                               1\r
+#define configTIMER_TASK_PRIORITY              ( 3 )\r
+#define configTIMER_QUEUE_LENGTH               5\r
+#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE )\r
 \r
-/* \r
+/*\r
 The interrupt priority used by the kernel itself for the tick interrupt and\r
-the pended interrupt is set by configKERNEL_INTERRUPT_PRIORITY.  This would \r
-normally be the lowest priority (1 in this case).  The maximum interrupt \r
+the pended interrupt is set by configKERNEL_INTERRUPT_PRIORITY.  This would\r
+normally be the lowest priority (1 in this case).  The maximum interrupt\r
 priority from which FreeRTOS API calls can be made is set by\r
-configMAX_SYSCALL_INTERRUPT_PRIORITY.  Interrupts that use a priority above this \r
+configMAX_SYSCALL_INTERRUPT_PRIORITY.  Interrupts that use a priority above this\r
 will not be effected by anything the kernel is doing.  Interrupts at or below\r
 this priority can use FreeRTOS API functions - but *only* those that end in\r
 "FromISR".  Both these constants are defined in 'PriorityDefinitions.h' so they\r
@@ -126,6 +131,8 @@ to exclude the API function. */
 #define INCLUDE_uxTaskGetStackHighWaterMark    1\r
 #define INCLUDE_xTaskGetSchedulerState         1\r
 \r
+#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }    \r
+\r
 extern volatile unsigned long ulHighFrequencyTickCount;\r
 #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() portNOP() /* Run time stats use the same timer as the high frequency timer test. */\r
 #define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTickCount\r
index b8d0cbc26505afcb660c4be0e3e45056b86f93da..6350bd8d709c7fc5c7c9a0175e611e21bad93b48 100644 (file)
@@ -12,7 +12,7 @@
       <name>General</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>4</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>GenIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>GenRopi</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ICCRX</name>\r
       <archiveVersion>3</archiveVersion>\r
       <data>\r
-        <version>10</version>\r
+        <version>11</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IccIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>IccPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveInlining</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveUnrolling</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ARX</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>5</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>AsmIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>AsmPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AsmCpuCore</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ILINK</name>\r
       <archiveVersion>1</archiveVersion>\r
       <data>\r
-        <version>0</version>\r
+        <version>1</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IlinkLogUnusedFragments</name>\r
           <state>0</state>\r
         </option>\r
+        <option>\r
+          <name>IlinkSubnormal</name>\r
+          <state>1</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>General</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>4</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>GenIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>GenRopi</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ICCRX</name>\r
       <archiveVersion>3</archiveVersion>\r
       <data>\r
-        <version>10</version>\r
+        <version>11</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IccIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>IccPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveInlining</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveUnrolling</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ARX</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>5</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>AsmIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>AsmPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AsmCpuCore</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ILINK</name>\r
       <archiveVersion>1</archiveVersion>\r
       <data>\r
-        <version>0</version>\r
+        <version>1</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IlinkLogUnusedFragments</name>\r
           <state>0</state>\r
         </option>\r
+        <option>\r
+          <name>IlinkSubnormal</name>\r
+          <state>1</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>General</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>4</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>GenIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>GenRopi</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ICCRX</name>\r
       <archiveVersion>3</archiveVersion>\r
       <data>\r
-        <version>10</version>\r
+        <version>11</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IccIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>IccPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveInlining</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AggressiveUnrolling</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ARX</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>3</version>\r
+        <version>5</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>AsmIntSize</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>AsmPosIndRopi</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AsmCpuCore</name>\r
+          <state>0</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
       <name>ILINK</name>\r
       <archiveVersion>1</archiveVersion>\r
       <data>\r
-        <version>0</version>\r
+        <version>1</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <name>IlinkLogUnusedFragments</name>\r
           <state>0</state>\r
         </option>\r
+        <option>\r
+          <name>IlinkSubnormal</name>\r
+          <state>1</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
     <file>\r
       <name>$PROJ_DIR$\..\..\Source\tasks.c</name>\r
     </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\Source\timers.c</name>\r
+    </file>\r
   </group>\r
   <group>\r
     <name>FreeTCPIP (based on uIP)</name>\r
index 19c267973c5ec46fab05661bf7f5b08171cdd9ff..c5731752e3e712509d50286574cf40ba413ae7c5 100644 (file)
@@ -1,33 +1,15 @@
-@REM This bat file has been generated by the IAR Embeddded Workbench\r
-@REM C-SPY interactive debugger,as an aid to preparing a command\r
-@REM line for running the cspybat command line utility with the\r
-@REM appropriate settings.\r
+@REM This batch file has been generated by the IAR Embedded Workbench\r
+@REM C-SPY Debugger, as an aid to preparing a command line for running\r
+@REM the cspybat command line utility using the appropriate settings.\r
 @REM\r
-@REM After making some adjustments to this file, you can launch cspybat\r
-@REM by typing the name of this file followed by the name of the debug\r
-@REM file (usually an ubrof file). Note that this file is generated\r
-@REM every time a new debug session is initialized, so you may want to\r
-@REM move or rename the file before making changes.\r
-@REM\r
-@REM Note: some command line arguments cannot be properly generated\r
-@REM by this process. Specifically, the plugin which is responsible\r
-@REM for the Terminal I/O window (and other C runtime functionality)\r
-@REM comes in a special version for cspybat, and the name of that\r
-@REM plugin dll is not known when generating this file. It resides in\r
-@REM the $TOOLKIT_DIR$\bin folder and is usually called XXXbat.dll or\r
-@REM XXXlibsupportbat.dll, where XXX is the name of the corresponding\r
-@REM tool chain. Replace the '<libsupport_plugin>' parameter\r
-@REM below with the appropriate file name. Other plugins loaded by\r
-@REM C-SPY are usually not needed by, or will not work in, cspybat\r
-@REM but they are listed at the end of this file for reference.\r
+@REM You can launch cspybat by typing the name of this batch file followed\r
+@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).\r
+@REM Note that this file is generated every time a new debug session\r
+@REM is initialized, so you may want to move or rename the file before\r
+@REM making changes.\r
+@REM \r
 \r
 \r
-"C:\devtools\IAR Systems\Embedded Workbench 6.0\common\bin\cspybat" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxproc.dll" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxemue20.dll"  %1 --plugin "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\<libsupport_plugin>" --backend -B "--core" "RX600" "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\config\debugger\ior5f562n8.ddf" "--double" "32" "--endian" "l" "--int" "32" "-d" "emue20" "--emu" "e1e20" "--drv_communication" "USB" "--verify_download" "all" \r
+"C:\devtools\IAR Systems\Embedded Workbench 6.0\common\bin\cspybat" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxproc.dll" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxemue20.dll"  %1 --plugin "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\bin\rxbat.dll" --backend -B "--core" "RX600" "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.0\rx\config\debugger\ior5f562n8.ddf" "--double" "32" "--endian" "l" "--int" "32" "-d" "emue20" "--emu" "e1e20" "--drv_communication" "USB" "--verify_download" "all" \r
 \r
 \r
-@REM Loaded plugins:\r
-@REM    rxLibSupport.dll\r
-@REM    C:\devtools\IAR Systems\Embedded Workbench 6.0\common\plugins\CodeCoverage\CodeCoverage.dll\r
-@REM    C:\devtools\IAR Systems\Embedded Workbench 6.0\common\plugins\Profiling\Profiling.dll\r
-@REM    C:\devtools\IAR Systems\Embedded Workbench 6.0\common\plugins\stack\stack.dll\r
-@REM    C:\devtools\IAR Systems\Embedded Workbench 6.0\common\plugins\SymList\SymList.dll\r
index 348ed9b1c67d4d8b1924621ef0c3774edaa39682..eb08144306516f53f667f0905bb2b22d18d43339 100644 (file)
@@ -31,7 +31,7 @@
       \r
       \r
       \r
-    <Wnd2>\r
+    <Wnd0>\r
         <Tabs>\r
           <Tab>\r
             <Identity>TabID-20000-3827</Identity>\r
           </Tab>\r
         </Tabs>\r
         \r
-      <SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-2655-13188</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>\r
+      <SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-2655-13188</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1></Windows>\r
     <Editor>\r
       \r
       \r
       \r
       \r
-    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-full.c</Filename><XPos>0</XPos><YPos>245</YPos><SelStart>12507</SelStart><SelEnd>12507</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-full.c</Filename><XPos>0</XPos><YPos>245</YPos><SelStart>12338</SelStart><SelEnd>12338</SelEnd></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>74</YPos><SelStart>4686</SelStart><SelEnd>4686</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\webserver\EMAC.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>13776</SelStart><SelEnd>13776</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-blinky.c</Filename><XPos>0</XPos><YPos>86</YPos><SelStart>4787</SelStart><SelEnd>4787</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\uIP_Task.c</Filename><XPos>0</XPos><YPos>226</YPos><SelStart>7106</SelStart><SelEnd>7106</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
     <Positions>\r
       \r
       \r
       \r
       \r
       \r
-    <Top><Row0><Sizes><Toolbar-00a2ab10><key>iaridepm.enu1</key></Toolbar-00a2ab10><Toolbar-00b05540><key>debuggergui.enu1</key></Toolbar-00b05540></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>238</Right><x>-2</x><y>-2</y><xscreen>121</xscreen><yscreen>141</yscreen><sizeHorzCX>72024</sizeHorzCX><sizeHorzCY>143585</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+    <Top><Row0><Sizes><Toolbar-013360d0><key>iaridepm.enu1</key></Toolbar-013360d0><Toolbar-0b79f4f0><key>debuggergui.enu1</key></Toolbar-0b79f4f0></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>238</Right><x>-2</x><y>-2</y><xscreen>121</xscreen><yscreen>141</yscreen><sizeHorzCX>72024</sizeHorzCX><sizeHorzCY>143585</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
   </Desktop>\r
 </Project>\r
 \r
index d7312a3152117f4abf6bc14d7f0bda9253376273..43d1a401828bfd96c153c52f6f9eeab8defc3174 100644 (file)
@@ -1,7 +1,7 @@
 [E20]\r
-TimeConnected=1285249114\r
-ComuniDllSave=101515264\r
-FfwnsdDllSave=303235072\r
+TimeConnected=1305306678\r
+ComuniDllSave=82903040\r
+FfwnsdDllSave=303890432\r
 ChipName=R5F562N8\r
 CpuMode=0\r
 InputClock=12.500000\r
@@ -10,8 +10,18 @@ JtagClock=10
 DebugFlags=0,0\r
 EmulatorMode=0\r
 NeedInit=1\r
+BlockBits=0\r
+B0=0,0\r
+B1=0,0\r
+B2=0,0\r
+B3=0,0\r
+TraceMode=0\r
+TraceOutput=2\r
+TraceCapacity=0\r
+TraceRestart=0\r
+OperatingFrequency=12.500000\r
 [DebugChecksum]\r
-Checksum=1020766678\r
+Checksum=-127835808\r
 [DisAssemblyWindow]\r
 NumStates=_ 1\r
 State 1=_ 1\r
@@ -31,6 +41,18 @@ UseTrigger=1
 TriggerName=main\r
 LimitSize=0\r
 ByteLimit=50\r
+[Stack]\r
+FillEnabled=0\r
+OverflowWarningsEnabled=1\r
+WarningThreshold=90\r
+SpWarningsEnabled=1\r
+WarnLogOnly=1\r
+UseTrigger=1\r
+TriggerName=main\r
+LimitSize=0\r
+ByteLimit=50\r
+[CallStack]\r
+ShowArgs=0\r
 [Log file]\r
 LoggingEnabled=_ 0\r
 LogFile=_ ""\r
@@ -38,10 +60,13 @@ Category=_ 0
 [TermIOLog]\r
 LoggingEnabled=_ 0\r
 LogFile=_ ""\r
+[CallStackLog]\r
+Enabled=0\r
 [DriverProfiling]\r
 Enabled=0\r
-Source=2\r
+Mode=3\r
 Graph=0\r
+Symbiont=0\r
 [Breakpoints]\r
 Count=0\r
 [Monitor Execution]\r
index f6a5bb44c4fc9f6fa0b445fa9a977e006f78b6c9..d9a205d53bf82dd618a9dcd6d12a012b19b263b4 100644 (file)
@@ -25,7 +25,7 @@
     <Windows>\r
       \r
       \r
-    <Wnd0>\r
+    <Wnd2>\r
         <Tabs>\r
           <Tab>\r
             <Identity>TabID-10758-3386</Identity>\r
@@ -37,7 +37,7 @@
           </Tab>\r
         </Tabs>\r
         \r
-      <SelectedTab>0</SelectedTab></Wnd0><Wnd1>\r
+      <SelectedTab>0</SelectedTab></Wnd2><Wnd3>\r
         <Tabs>\r
           <Tab>\r
             <Identity>TabID-16801-3477</Identity>\r
           </Tab>\r
         <Tab><Identity>TabID-414-15843</Identity><TabName>Breakpoints</TabName><Factory>Breakpoints</Factory></Tab><Tab><Identity>TabID-3320-15993</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs>\r
         \r
-      <SelectedTab>0</SelectedTab></Wnd1></Windows>\r
+      <SelectedTab>0</SelectedTab></Wnd3></Windows>\r
     <Editor>\r
       \r
       \r
       \r
       \r
-    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-full.c</Filename><XPos>0</XPos><YPos>51</YPos><SelStart>12507</SelStart><SelEnd>12507</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-full.c</Filename><XPos>0</XPos><YPos>245</YPos><SelStart>12338</SelStart><SelEnd>12338</SelEnd></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main-blinky.c</Filename><XPos>0</XPos><YPos>86</YPos><SelStart>4787</SelStart><SelEnd>4787</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
     <Positions>\r
       \r
       \r
       \r
       \r
       \r
-    <Top><Row0><Sizes><Toolbar-00a2ab40><key>iaridepm.enu1</key></Toolbar-00a2ab40></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>706</Bottom><Right>351</Right><x>-2</x><y>-2</y><xscreen>331</xscreen><yscreen>284</yscreen><sizeHorzCX>197024</sizeHorzCX><sizeHorzCY>289206</sizeHorzCY><sizeVertCX>210119</sizeVertCX><sizeVertCY>720978</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>232</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>234</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>238289</sizeHorzCY><sizeVertCX>197024</sizeVertCX><sizeVertCY>289206</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+    <Top><Row0><Sizes><Toolbar-013360d0><key>iaridepm.enu1</key></Toolbar-013360d0></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>706</Bottom><Right>351</Right><x>-2</x><y>-2</y><xscreen>331</xscreen><yscreen>284</yscreen><sizeHorzCX>197024</sizeHorzCX><sizeHorzCY>289206</sizeHorzCY><sizeVertCX>210119</sizeVertCX><sizeVertCY>720978</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>232</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>234</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>238289</sizeHorzCY><sizeVertCX>197024</sizeVertCX><sizeVertCY>289206</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
   </Desktop>\r
 </Workspace>\r
 \r
index a09782decd2ae25e800565fcd8ccfdc9c02f6aee..17a5925a113e143994bfc9e53c5d92427f7bb3fe 100644 (file)
@@ -57,7 +57,8 @@
 /* Scheduler includes. */\r
 #include "FreeRTOS.h"\r
 #include "task.h"\r
-#include "semphr.h"\r
+#include "timers.h"\r
+#include "queue.h"\r
 \r
 /* uip includes. */\r
 #include "net/uip.h"\r
 /* Standard constant. */\r
 #define uipTOTAL_FRAME_HEADER_SIZE     54\r
 \r
+/* The ARP timer and the periodic timer share a callback function, so the\r
+respective timer IDs are used to determine which timer actually expired.  These\r
+constants are assigned to the timer IDs. */\r
+#define uipARP_TIMER                           0\r
+#define uipPERIODIC_TIMER                      1\r
+\r
+/* A block time of zero ticks simply means, "don't block". */\r
+#define uipDONT_BLOCK                          0UL\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
  */\r
 static void prvSetMACAddress( void );\r
 \r
+/*\r
+ * Perform any uIP initialisation necessary.\r
+ */\r
+static void prvInitialise_uIP( void );\r
+\r
+/*\r
+ * The callback function that is assigned to both the periodic timer and the\r
+ * ARP timer.\r
+ */\r
+static void prvUIPTimerCallback( xTimerHandle xTimer );\r
+\r
 /*\r
  * Port functions required by the uIP stack.\r
  */\r
-void clock_init( void );\r
 clock_time_t clock_time( void );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
-/* The semaphore used by the ISR to wake the uIP task. */\r
-xSemaphoreHandle xEMACSemaphore = NULL;\r
+/* The queue used to send TCP/IP events to the uIP stack. */\r
+xQueueHandle xEMACEventQueue = NULL;\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
-void clock_init(void)\r
-{\r
-       /* This is done when the scheduler starts. */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
 clock_time_t clock_time( void )\r
 {\r
        return xTaskGetTickCount();\r
@@ -115,25 +129,14 @@ clock_time_t clock_time( void )
 \r
 void vuIP_Task( void *pvParameters )\r
 {\r
-portBASE_TYPE i, xDoneSomething;\r
-uip_ipaddr_t xIPAddr;\r
-struct timer periodic_timer, arp_timer;\r
+portBASE_TYPE i;\r
+unsigned long ulNewEvent = 0UL;\r
+unsigned long ulUIP_Events = 0UL;\r
 \r
        ( void ) pvParameters;\r
-\r
+       \r
        /* Initialise the uIP stack. */\r
-       timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );\r
-       timer_set( &arp_timer, configTICK_RATE_HZ * 10 );\r
-       uip_init();\r
-       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
-       uip_sethostaddr( &xIPAddr );\r
-       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
-       uip_setnetmask( &xIPAddr );\r
-       prvSetMACAddress();\r
-       httpd_init();\r
-\r
-       /* Create the semaphore used to wake the uIP task. */\r
-       vSemaphoreCreateBinary( xEMACSemaphore );\r
+       prvInitialise_uIP();\r
 \r
        /* Initialise the MAC. */\r
        vInitEmac();\r
@@ -145,49 +148,51 @@ struct timer periodic_timer, arp_timer;
 \r
        for( ;; )\r
        {\r
-               xDoneSomething = pdFALSE;\r
-               \r
-               /* Is there received data ready to be processed? */\r
-               uip_len = ( unsigned short ) ulEMACRead();\r
-               \r
-               if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
-               {\r
-                       /* Standard uIP loop taken from the uIP manual. */\r
-                       if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
+               if( ( ulUIP_Events & uipETHERNET_RX_EVENT ) != 0UL )\r
+               {               \r
+                       /* Is there received data ready to be processed? */\r
+                       uip_len = ( unsigned short ) ulEMACRead();\r
+                       \r
+                       if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
                        {\r
-                               uip_arp_ipin();\r
-                               uip_input();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               /* Standard uIP loop taken from the uIP manual. */\r
+                               if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
                                {\r
-                                       uip_arp_out();\r
-                                       vEMACWrite();\r
+                                       uip_arp_ipin();\r
+                                       uip_input();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               uip_arp_out();\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
-                       }\r
-                       else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
-                       {\r
-                               uip_arp_arpin();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
                                {\r
-                                       vEMACWrite();\r
+                                       uip_arp_arpin();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
+                       }\r
+                       else\r
+                       {\r
+                               ulUIP_Events &= ~uipETHERNET_RX_EVENT;\r
                        }\r
                }\r
-\r
-               if( timer_expired( &periodic_timer ) && ( uip_buf != NULL ) )\r
+               \r
+               if( ( ulUIP_Events & uipPERIODIC_TIMER_EVENT ) != 0UL )\r
                {\r
-                       timer_reset( &periodic_timer );\r
+                       ulUIP_Events &= ~uipPERIODIC_TIMER_EVENT;\r
+                                       \r
                        for( i = 0; i < UIP_CONNS; i++ )\r
                        {\r
                                uip_periodic( i );\r
@@ -201,25 +206,82 @@ struct timer periodic_timer, arp_timer;
                                        vEMACWrite();\r
                                }\r
                        }\r
-\r
-                       /* Call the ARP timer function every 10 seconds. */\r
-                       if( timer_expired( &arp_timer ) )\r
-                       {\r
-                               timer_reset( &arp_timer );\r
-                               uip_arp_timer();\r
-                       }\r
-                       \r
-                       xDoneSomething = pdTRUE;\r
                }\r
                \r
-               if( xDoneSomething == pdFALSE )\r
+               /* Call the ARP timer function every 10 seconds. */\r
+               if( ( ulUIP_Events & uipARP_TIMER_EVENT ) != 0 )\r
                {\r
-                       /* We did not receive a packet, and there was no periodic\r
-                       processing to perform.  Block for a fixed period.  If a packet\r
-                       is received during this period we will be woken by the ISR\r
-                       giving us the Semaphore. */\r
-                       xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 20 );\r
+                       ulUIP_Events &= ~uipARP_TIMER_EVENT;\r
+                       uip_arp_timer();\r
                }\r
+                       \r
+               if( ulUIP_Events == pdFALSE )\r
+               {\r
+                       xQueueReceive( xEMACEventQueue, &ulNewEvent, portMAX_DELAY );\r
+                       ulUIP_Events |= ulNewEvent;\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvInitialise_uIP( void )\r
+{\r
+xTimerHandle xARPTimer, xPeriodicTimer;\r
+uip_ipaddr_t xIPAddr;\r
+const unsigned long ul_uIPEventQueueLength = 10UL;\r
+\r
+       /* Initialise the uIP stack. */\r
+       uip_init();\r
+       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
+       uip_sethostaddr( &xIPAddr );\r
+       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
+       uip_setnetmask( &xIPAddr );\r
+       prvSetMACAddress();\r
+       httpd_init();\r
+\r
+       /* Create the queue used to sent TCP/IP events to the uIP stack. */\r
+       xEMACEventQueue = xQueueCreate( ul_uIPEventQueueLength, sizeof( unsigned long ) );\r
+\r
+       /* Create and start the uIP timers. */\r
+       xARPTimer = xTimerCreate(       "ARPTimer", /* Just a name that is helpful for debugging, not used by the kernel. */\r
+                                                               ( 10000UL / portTICK_RATE_MS ), /* Timer period. */\r
+                                                               pdTRUE, /* Autor-reload. */\r
+                                                               ( void * ) uipARP_TIMER,\r
+                                                               prvUIPTimerCallback\r
+                                                       );\r
+\r
+       xPeriodicTimer = xTimerCreate(  "PeriodicTimer",\r
+                                                                       ( 500 / portTICK_RATE_MS ),\r
+                                                                       pdTRUE, /* Autor-reload. */\r
+                                                                       ( void * ) uipPERIODIC_TIMER,\r
+                                                                       prvUIPTimerCallback\r
+                                                               );\r
+\r
+       configASSERT( xARPTimer );\r
+       configASSERT( xPeriodicTimer );\r
+\r
+       xTimerStart( xARPTimer, portMAX_DELAY );\r
+       xTimerStart( xPeriodicTimer, portMAX_DELAY );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvUIPTimerCallback( xTimerHandle xTimer )\r
+{\r
+static const unsigned long ulARPTimerExpired = uipARP_TIMER_EVENT;\r
+static const unsigned long ulPeriodicTimerExpired = uipPERIODIC_TIMER_EVENT;\r
+\r
+       /* This is a time callback, so calls to xQueueSend() must not attempt to\r
+       block. */\r
+       switch( ( int ) pvTimerGetTimerID( xTimer ) )\r
+       {\r
+               case uipARP_TIMER               :       xQueueSend( xEMACEventQueue, &ulARPTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               case uipPERIODIC_TIMER  :       xQueueSend( xEMACEventQueue, &ulPeriodicTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               default                                 :       /* Should not get here. */\r
+                                                                       break;\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -250,28 +312,34 @@ char *c;
        {\r
                /* Is there a command in the string? */\r
                c = strstr( pcInputString, "?" );\r
-               if( c )\r
-               {\r
+           if( c )\r
+           {\r
                        /* Turn the LED's on or off in accordance with the check box status. */\r
                        if( strstr( c, "LED0=1" ) != NULL )\r
                        {\r
-                               /* Turn LEDs on. */\r
-                               vParTestSetLED( 3, 1 );\r
-                               vParTestSetLED( 4, 1 );\r
+                               /* Turn the LEDs on. */\r
+                               vParTestSetLED( 7, 1 );\r
+                               vParTestSetLED( 8, 1 );\r
+                               vParTestSetLED( 9, 1 );\r
+                               vParTestSetLED( 10, 1 );\r
                        }\r
                        else\r
                        {\r
-                               /* Turn LED 4 off. */\r
-                               vParTestSetLED( 3, 0 );\r
-                               vParTestSetLED( 4, 0 );\r
+                               /* Turn the LEDs off. */\r
+                               vParTestSetLED( 7, 0 );\r
+                               vParTestSetLED( 8, 0 );\r
+                               vParTestSetLED( 9, 0 );\r
+                               vParTestSetLED( 10, 0 );\r
                        }\r
-               }\r
+           }\r
                else\r
                {\r
-                       /* Commands to turn LEDs off are not always explicit, turn LED 4\r
-                       off. */\r
-                       vParTestSetLED( 3, 0 );\r
-                       vParTestSetLED( 4, 0 );\r
+                       /* Commands to turn LEDs off are not always explicit. */\r
+                       vParTestSetLED( 7, 0 );\r
+                       vParTestSetLED( 8, 0 );\r
+                       vParTestSetLED( 9, 0 );\r
+                       vParTestSetLED( 10, 0 );\r
                }\r
        }\r
 }\r
+\r
index f1eb1fe698edea4c0cd6b070d3f7c12a41dd7c4b..01ce33ecc8dde43069a98de13aaaf339c5443c7c 100644 (file)
@@ -152,7 +152,7 @@ static void prvResetEverything( void );
 /*-----------------------------------------------------------*/\r
 \r
 /* Points to the Rx descriptor currently in use. */\r
-static volatile ethfifo *pxCurrentDesc = NULL;\r
+static volatile ethfifo *pxCurrentRxDesc = NULL;\r
 \r
 /* The buffer used by the uIP stack to both receive and send.  This points to\r
 one of the Ethernet buffers when its actually in use. */\r
@@ -241,23 +241,29 @@ unsigned long ulBytesReceived;
 \r
        if( ulBytesReceived > 0 )\r
        {\r
-               pxCurrentDesc->status &= ~( FP1 | FP0 );\r
-               pxCurrentDesc->status |= ACT;                   \r
-\r
-               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
-               {\r
-                       /* Restart Ethernet if it has stopped */\r
-                       EDMAC.EDRRR.LONG = 0x00000001L;\r
-               }\r
-\r
                /* Mark the pxDescriptor buffer as free as uip_buf is going to be set to\r
                the buffer that contains the received data. */\r
                prvReturnBuffer( uip_buf );\r
+\r
+               /* Point uip_buf to the data about ot be processed. */\r
+               uip_buf = ( void * ) pxCurrentRxDesc->buf_p;\r
                \r
-               uip_buf = ( void * ) pxCurrentDesc->buf_p;\r
+               /* Allocate a new buffer to the descriptor, as uip_buf is now using it's\r
+               old descriptor. */\r
+               pxCurrentRxDesc->buf_p = ( char * ) prvGetNextBuffer();\r
+\r
+               /* Prepare the descriptor to go again. */\r
+               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
+               pxCurrentRxDesc->status |= ACT;\r
 \r
                /* Move onto the next buffer in the ring. */\r
-               pxCurrentDesc = pxCurrentDesc->next;\r
+               pxCurrentRxDesc = pxCurrentRxDesc->next;\r
+               \r
+               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
+               {\r
+                       /* Restart Ethernet if it has stopped */\r
+                       EDMAC.EDRRR.LONG = 0x00000001L;\r
+               }\r
        }\r
 \r
        return ulBytesReceived;\r
@@ -367,7 +373,7 @@ long x;
        pxDescriptor->next = ( ethfifo * ) &( xTxDescriptors[ 0 ] );\r
        \r
        /* Use the first Rx descriptor to start with. */\r
-       pxCurrentDesc = &( xRxDescriptors[ 0 ] );\r
+       pxCurrentRxDesc = &( xRxDescriptors[ 0 ] );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
@@ -439,17 +445,17 @@ static unsigned long prvCheckRxFifoStatus( void )
 {\r
 unsigned long ulReturn = 0;\r
 \r
-       if( ( pxCurrentDesc->status & ACT ) != 0 )\r
+       if( ( pxCurrentRxDesc->status & ACT ) != 0 )\r
        {\r
                /* Current descriptor is still active. */\r
        }\r
-       else if( ( pxCurrentDesc->status & FE ) != 0 )\r
+       else if( ( pxCurrentRxDesc->status & FE ) != 0 )\r
        {\r
                /* Frame error.  Clear the error. */\r
-               pxCurrentDesc->status &= ~( FP1 | FP0 | FE );\r
-               pxCurrentDesc->status &= ~( RMAF | RRF | RTLF | RTSF | PRE | CERF );\r
-               pxCurrentDesc->status |= ACT;\r
-               pxCurrentDesc = pxCurrentDesc->next;\r
+               pxCurrentRxDesc->status &= ~( FP1 | FP0 | FE );\r
+               pxCurrentRxDesc->status &= ~( RMAF | RRF | RTLF | RTSF | PRE | CERF );\r
+               pxCurrentRxDesc->status |= ACT;\r
+               pxCurrentRxDesc = pxCurrentRxDesc->next;\r
 \r
                if( EDMAC.EDRRR.LONG == 0x00000000UL )\r
                {\r
@@ -461,9 +467,9 @@ unsigned long ulReturn = 0;
        {\r
                /* The descriptor contains a frame.  Because of the size of the buffers\r
                the frame should always be complete. */\r
-               if( ( pxCurrentDesc->status & FP0 ) == FP0 )\r
+               if( ( pxCurrentRxDesc->status & FP0 ) == FP0 )\r
                {\r
-                       ulReturn = pxCurrentDesc->size;\r
+                       ulReturn = pxCurrentRxDesc->size;\r
                }\r
                else\r
                {\r
@@ -510,12 +516,13 @@ static void prvConfigureEtherCAndEDMAC( void )
        #if __LITTLE_ENDIAN__ == 1\r
                EDMAC.EDMR.BIT.DE = 1;\r
        #endif\r
-       EDMAC.RDLAR = ( void * ) pxCurrentDesc; /* Initialaize Rx Descriptor List Address */\r
+       EDMAC.RDLAR = ( void * ) pxCurrentRxDesc;       /* Initialaize Rx Descriptor List Address */\r
        EDMAC.TDLAR = ( void * ) &( xTxDescriptors[ 0 ] );/* Initialaize Tx Descriptor List Address */\r
        EDMAC.TRSCER.LONG = 0x00000000;                         /* Copy-back status is RFE & TFE only   */\r
        EDMAC.TFTR.LONG = 0x00000000;                           /* Threshold of Tx_FIFO */\r
        EDMAC.FDR.LONG = 0x00000000;                            /* Transmit fifo & receive fifo is 256 bytes */\r
        EDMAC.RMCR.LONG = 0x00000003;                           /* Receive function is normal mode(continued) */\r
+       ETHERC.ECMR.BIT.PRM = 0;                                        /* Ensure promiscuous mode is off. */\r
        \r
        /* Enable the interrupt... */\r
        _IEN( _ETHER_EINT ) = 1;        \r
@@ -527,21 +534,16 @@ __interrupt void vEMAC_ISR_Handler( void )
 {\r
 unsigned long ul = EDMAC.EESR.LONG;\r
 long lHigherPriorityTaskWoken = pdFALSE;\r
-extern xSemaphoreHandle xEMACSemaphore;\r
-static long ulTxEndInts = 0;\r
+extern xQueueHandle xEMACEventQueue;\r
+const unsigned long ulRxEvent = uipETHERNET_RX_EVENT;\r
 \r
        __enable_interrupt();\r
 \r
        /* Has a Tx end occurred? */\r
        if( ul & emacTX_END_INTERRUPT )\r
        {\r
-               ++ulTxEndInts;\r
-               if( ulTxEndInts >= 2 )\r
-               {\r
-                       /* Only return the buffer to the pool once both Txes have completed. */\r
-                       prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
-                       ulTxEndInts = 0;\r
-               }\r
+               /* Only return the buffer to the pool once both Txes have completed. */\r
+               prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
                EDMAC.EESR.LONG = emacTX_END_INTERRUPT;\r
        }\r
 \r
@@ -549,7 +551,7 @@ static long ulTxEndInts = 0;
        if( ul & emacRX_END_INTERRUPT )\r
        {\r
                /* Make sure the Ethernet task is not blocked waiting for a packet. */\r
-               xSemaphoreGiveFromISR( xEMACSemaphore, &lHigherPriorityTaskWoken );\r
+               xQueueSendFromISR( xEMACEventQueue, &ulRxEvent, &lHigherPriorityTaskWoken );\r
                portYIELD_FROM_ISR( lHigherPriorityTaskWoken );\r
                EDMAC.EESR.LONG = emacRX_END_INTERRUPT;\r
        }\r
index 8eeee1069ccfca20445fcd0d4bfb16b8e344bd99..f77d5e6e35426684eae9f0e7ba0af3130bb12af9 100644 (file)
@@ -16,7 +16,8 @@
 [WORKSPACE_PROPERTIES]\r
 [HELP_FILES]\r
 "c:\devtools\renesas\hew\tools\renesas\rx\1_0_0\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-"c:\devtools\renesas\hew\tools\renesas\rx\1_0_1\hew\stdlib.chm" "C/C++ Standard Library Help" 1 \r
+"c:\devtools\renesas\hew\tools\renesas\rx\1_0_1\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
+"c:\devtools\renesas\hew\tools\renesas\rx\1_0_2\hew\stdlib.chm" "C/C++ Standard Library Help" 1 \r
 [GENERAL_DATA_PROJECT]\r
 [USERMENUTOOLS]\r
 [CUSTOMPLACEHOLDERS]\r
index dc29e21ab341d4f1c47bc84b3f64a939c847e513..6be12051ef6a15f99add179ab9a591b836c158c2 100644 (file)
@@ -10,8 +10,8 @@
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\main-blinky.c" \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\main-full.c" \r
 [WORKSPACE_FILE_STATES]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\main-blinky.c" 88 88 1100 433 0 1 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\main-full.c" -4 -23 1310 662 1 0 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\main-blinky.c" 88 88 1100 433 0 0 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\main-full.c" -4 -23 1310 680 1 1 \r
 [LOADED_PROJECTS]\r
 "RTOSDemo" \r
 [END]\r
index b2e5c779c3d2e8f1e013c742a8d3261e6799b09c..a8fcbebfd8c531b632912c316cf9c03e27784f73 100644 (file)
Binary files a/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/Debug/Debug.hdp and b/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/Debug/Debug.hdp differ
index f17d5108701c791c2d96ac464e48383b0ef95442..6d5a944c837fd909c0499f162d8f32b4262b4772 100644 (file)
Binary files a/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/Debug_RX600_E1_E20_SYSTEM/Debug_RX600_E1_E20_SYSTEM.hdp and b/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/Debug_RX600_E1_E20_SYSTEM/Debug_RX600_E1_E20_SYSTEM.hdp differ
index 7dc5d501f4ca577636c6542bc0d548aef7929d4e..4c7ee4ba4f3ddfc6703cf06e73e89b44eecc2a6f 100644 (file)
 #define configMAX_PRIORITIES                   ( ( unsigned portBASE_TYPE ) 7 )\r
 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
 \r
+/* Software timer definitions. */\r
+#define configUSE_TIMERS                               1\r
+#define configTIMER_TASK_PRIORITY              ( 3 )\r
+#define configTIMER_QUEUE_LENGTH               5\r
+#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE )\r
+\r
 /* The interrupt priority used by the kernel itself for the tick interrupt and\r
 the pended interrupt.  This would normally be the lowest priority. */\r
 #define configKERNEL_INTERRUPT_PRIORITY         1\r
@@ -120,6 +126,8 @@ to exclude the API function. */
 #define INCLUDE_uxTaskGetStackHighWaterMark    1\r
 #define INCLUDE_xTaskGetSchedulerState         1\r
 \r
+#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }    \r
+\r
 extern volatile unsigned long ulHighFrequencyTickCount;\r
 #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() nop() /* Run time stats use the same timer as the high frequency timer test. */\r
 #define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTickCount\r
index e5f78d3f8197720cf1a50e183eda6ef58507e0e1..2b55a9b3d70d207ec5ec68c2c22aa32ed8c4ffdc 100644 (file)
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port_asm.src" "User" "C source file|FreeRTOS|Portable layer" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "User" "C source file|FreeRTOS" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "User" "C source file|FreeRTOS" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "User" "C source file" 2 \r
 [FOLDER]\r
 "Assembly source file" "Assembly source file" \r
 "C source file" "C source file" \r
 [GENERAL_DATA_SESSION_SessionRX600_E1_E20_SYSTEM]\r
 [GENERAL_DATA_SESSION_SimSessionRX600]\r
 [OPTIONS_Blinky_Renesas OptLinker]\r
-"Single Shot" "06039a50d711cc10" 5 \r
+"Single Shot" "095444c51911cc10" 5 \r
 [OPTIONS_Blinky_Renesas RX Assembler]\r
 "Assembly source file" "0b955de7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\Renesas-Files\lowlvl.src" "0b955de7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "0b955de7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0b955de7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0b955de7c711cc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0d5972c51911cc10" 2 \r
 [OPTIONS_Blinky_Renesas RX C/C++ Library Generator]\r
 "Single Shot" "0b955de7c711cc10" 1 \r
 [OPTIONS_Blinky_Renesas RX Configurator]\r
-"Single Shot" "0bbed540d711cc10" 6 \r
+"Single Shot" "0d5972c51911cc10" 6 \r
 [OPTIONS_Blinky]\r
 "" 0 \r
 "[V|VERSION|1] [B|COMMAND|1] [S|SPEC|UITRON4] [S|OUTPUTPATH|^"$(CONFIGDIR)^"] [S|CPU|RX600] [S|ENDIAN|LITTLE] [S|FINT_REGISTER|0]" 6 \r
 [LINKAGE_ORDER_Blinky]\r
 [GENERAL_DATA_CONFIGURATION_Blinky]\r
 [OPTIONS_Debug_Renesas OptLinker]\r
-"Single Shot" "06039a50d711cc10" 5 \r
+"Single Shot" "095444c51911cc10" 5 \r
 [OPTIONS_Debug_Renesas RX Assembler]\r
 "Assembly source file" "0ce90de7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\Renesas-Files\lowlvl.src" "0ce90de7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "0ce90de7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0ce90de7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0ce90de7c711cc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0d5972c51911cc10" 2 \r
 [OPTIONS_Debug_Renesas RX C/C++ Library Generator]\r
 "Single Shot" "0ce90de7c711cc10" 1 \r
 [OPTIONS_Debug_Renesas RX Configurator]\r
-"Single Shot" "0bbed540d711cc10" 6 \r
+"Single Shot" "0d5972c51911cc10" 6 \r
 [OPTIONS_Debug]\r
 "" 0 \r
 "[V|VERSION|1] [B|COMMAND|1] [S|SPEC|UITRON4] [S|OUTPUTPATH|^"$(CONFIGDIR)^"] [S|CPU|RX600] [S|ENDIAN|LITTLE] [S|FINT_REGISTER|0]" 6 \r
 [LINKAGE_ORDER_Debug]\r
 [GENERAL_DATA_CONFIGURATION_Debug]\r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM_Renesas OptLinker]\r
-"Single Shot" "06039a50d711cc10" 5 \r
+"Single Shot" "095444c51911cc10" 5 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM_Renesas RX Assembler]\r
 "Assembly source file" "0cd2ece7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\Renesas-Files\lowlvl.src" "0cd2ece7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "0d3ebce7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0d3ebce7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0d3ebce7c711cc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0d5972c51911cc10" 2 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM_Renesas RX C/C++ Library Generator]\r
 "Single Shot" "0d3ebce7c711cc10" 1 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM_Renesas RX Configurator]\r
-"Single Shot" "0bbed540d711cc10" 6 \r
+"Single Shot" "0d5972c51911cc10" 6 \r
 [OPTIONS_Debug_RX600_E1_E20_SYSTEM]\r
 "" 0 \r
 "[S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [V|VERSION|1] [S|CPU|RX600] [S|ENDIAN|LITTLE] [S|ROUND|NEAREST] [S|DBL_SIZE|4] [B|SIGNED_CHAR|0] [B|SIGNED_BITFIELD|0] [S|BIT_ORDER|RIGHT] [S|FINT_REGISTER|0] [S|BRANCH|24] [S|LANG|C] [B|RUNTIME|1] [B|CTYPE|0] [B|MATH|0] [B|MATHF|0] [B|STDARG|0] [B|STDIO|0] [B|STDLIB|0] [B|STRING|0] [B|IOS|0] [B|NEW|1] [B|COMPLEX|0] [B|CPPSTRING|0] [S|MODE|BUILD/CHANGED]" 1 \r
 [LINKAGE_ORDER_Debug_RX600_E1_E20_SYSTEM]\r
 [GENERAL_DATA_CONFIGURATION_Debug_RX600_E1_E20_SYSTEM]\r
 [OPTIONS_Debug_with_optimisation_Renesas OptLinker]\r
-"Single Shot" "06039a50d711cc10" 5 \r
+"Single Shot" "095444c51911cc10" 5 \r
 [OPTIONS_Debug_with_optimisation_Renesas RX Assembler]\r
 "Assembly source file" "0d3ebce7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\Renesas-Files\lowlvl.src" "0d3ebce7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "0d279ce7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0d279ce7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0d279ce7c711cc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0d5972c51911cc10" 2 \r
 [OPTIONS_Debug_with_optimisation_Renesas RX C/C++ Library Generator]\r
 "Single Shot" "0d279ce7c711cc10" 1 \r
 [OPTIONS_Debug_with_optimisation_Renesas RX Configurator]\r
-"Single Shot" "0bbed540d711cc10" 6 \r
+"Single Shot" "0d5972c51911cc10" 6 \r
 [OPTIONS_Debug_with_optimisation]\r
 "" 0 \r
 "[V|VERSION|1] [B|COMMAND|1] [S|SPEC|UITRON4] [S|OUTPUTPATH|^"$(CONFIGDIR)^"] [S|CPU|RX600] [S|ENDIAN|LITTLE] [S|FINT_REGISTER|0]" 6 \r
 [LINKAGE_ORDER_Debug_with_optimisation]\r
 [GENERAL_DATA_CONFIGURATION_Debug_with_optimisation]\r
 [OPTIONS_SimDebug_RX600_Renesas OptLinker]\r
-"Single Shot" "06039a50d711cc10" 5 \r
+"Single Shot" "095444c51911cc10" 5 \r
 [OPTIONS_SimDebug_RX600_Renesas RX Assembler]\r
 "Assembly source file" "0cf03de7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-RSK_Renesas\RTOSDemo\Renesas-Files\lowlvl.src" "0cf03de7c711cc10" 4 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "0cf03de7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0cf03de7c711cc10" 2 \r
 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0cf03de7c711cc10" 2 \r
+"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0d5972c51911cc10" 2 \r
 [OPTIONS_SimDebug_RX600_Renesas RX C/C++ Library Generator]\r
 "Single Shot" "0cf03de7c711cc10" 1 \r
 [OPTIONS_SimDebug_RX600_Renesas RX Configurator]\r
-"Single Shot" "0bbed540d711cc10" 6 \r
+"Single Shot" "0d5972c51911cc10" 6 \r
 [OPTIONS_SimDebug_RX600]\r
 "" 0 \r
 "[S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [V|VERSION|1] [S|CPU|RX600] [S|ENDIAN|LITTLE] [S|ROUND|NEAREST] [S|DBL_SIZE|4] [B|SIGNED_CHAR|0] [B|SIGNED_BITFIELD|0] [S|BIT_ORDER|RIGHT] [S|FINT_REGISTER|0] [S|BRANCH|24] [S|LANG|C] [B|RUNTIME|1] [B|CTYPE|0] [B|MATH|0] [B|MATHF|0] [B|STDARG|0] [B|STDIO|0] [B|STDLIB|0] [B|STRING|0] [B|IOS|0] [B|NEW|1] [B|COMPLEX|0] [B|CPPSTRING|0] [S|MODE|BUILD/CHANGED]" 1 \r
index 09bad3e2105169bd3b79739078b36bc803d47eff..955de740ebf5c83e3ace4d2f015b06649f02a4a0 100644 (file)
Binary files a/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/RTOSDemo.nav and b/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/RTOSDemo.nav differ
index f16a25c673d722810cc9ed889470f8c400df0903..fff7fad758aa2922980672280d5edcd6fb1689c9 100644 (file)
 "{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlViews" "0" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_DENORMAL_MODE" "16777216" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_ROUND_MODE" "768" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "000000000000BD20\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "000000000000BB8B\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "000000000000CEC4\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "0000000000000000\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_12" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_13" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "0000000000012A60" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "0000000000000014\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "000000000000BD20\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "00000000000130D0\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000004030004" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF9817C" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "00000000FFF8A81A\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF8B0C8\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "00000000426E0000" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "000000000001097C\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "000000000000CEC4\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "00000000000130CC\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000000030004" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF8C73C" \r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "0000000000000000\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF8B130\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_21" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_22" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_23" "0000000000000000" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_24" "0000000000000100" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_25" "1234567887650000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "000000000000000E\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "00000000000000A5\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "00000000000000A5\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "00000000A5A5A5A5\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "00000000A5A5A5A5\r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "00000000A5A5A5A5\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "000000000000000A\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "0000000000000007\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "0000000041380000\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "0000000000000000\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "0000000000004FD6\r
+"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "000000000000E6AC\r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_9" "00000000A5A5A5A5" \r
 "{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_COUNT" "26" \r
 "{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileDir" "" \r
 0 \r
 [WINDOW_POSITION_STATE_DATA_VD1]\r
 "Help" "TOOLBAR 0" 59419 1 5 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_00000001_CmdLine}" "WINDOW" 59422 0 1 "0.07" 228 0 0 350 200 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>|32820|<<separator>>|32801|32824" "0.0" \r
+"{WK_00000001_CmdLine}" "WINDOW" 59422 0 1 "0.07" 228 0 0 100 100 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>" "0.0" \r
 "{WK_00000001_DEBUGCONSOLE}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59421 0 1 "1.00" 374 0 0 350 200 17 0 "57634|57637|57633|<<separator>>|32781|32782|<<separator>>|32780|32785|32787" "0.0" \r
 "{WK_00000001_DISASSEMBLY}" "WINDOW" 0 0 0 "0.00" 0 0 0 1062 571 9 0 "" "0.0" \r
 "{WK_00000001_IO}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59422 0 2 "0.39" 228 0 0 350 200 17 0 "32817|32826|32819|32820|32821" "0.0" \r
index ae83e6023d5fd286e552d3599c51cee970d8b268..f742d4377aa2cf43afd038a1dcc5d63700fc7aae 100644 (file)
@@ -2,7 +2,7 @@
 DebugMode=0\r
 PowerOut=0\r
 ResetRelease=0\r
-EmulatorSerial=E1:_9KM000237\r
+EmulatorSerial=\r
 McuGroup=RX62N Group\r
 Device=R5F562N8\r
 McuFileDir=RX62NGr\r
index 020f081fb1a28fee2485cb1677361e99369573f1..9b8c90ecf6f19817df3558c65c495563ae4186fe 100644 (file)
Binary files a/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/SimDebug_RX600/SimDebug_RX600.hdp and b/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/SimDebug_RX600/SimDebug_RX600.hdp differ
index 25ed6f964fddef0cd883d7f436a50bfb49b4e390..847c9cbe31eea8954dddfa8b7c305307d7ab0e9f 100644 (file)
@@ -57,7 +57,8 @@
 /* Scheduler includes. */\r
 #include "FreeRTOS.h"\r
 #include "task.h"\r
-#include "semphr.h"\r
+#include "timers.h"\r
+#include "queue.h"\r
 \r
 /* uip includes. */\r
 #include "net/uip.h"\r
 /* Standard constant. */\r
 #define uipTOTAL_FRAME_HEADER_SIZE     54\r
 \r
+/* The ARP timer and the periodic timer share a callback function, so the\r
+respective timer IDs are used to determine which timer actually expired.  These\r
+constants are assigned to the timer IDs. */\r
+#define uipARP_TIMER                           0\r
+#define uipPERIODIC_TIMER                      1\r
+\r
+/* A block time of zero ticks simply means, "don't block". */\r
+#define uipDONT_BLOCK                          0UL\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
  */\r
 static void prvSetMACAddress( void );\r
 \r
+/*\r
+ * Perform any uIP initialisation necessary. \r
+ */\r
+static void prvInitialise_uIP( void );\r
+\r
+/*\r
+ * The callback function that is assigned to both the periodic timer and the\r
+ * ARP timer.\r
+ */\r
+static void prvUIPTimerCallback( xTimerHandle xTimer );\r
+\r
 /*\r
  * Port functions required by the uIP stack.\r
  */\r
-void clock_init( void );\r
 clock_time_t clock_time( void );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
-/* The semaphore used by the ISR to wake the uIP task. */\r
-xSemaphoreHandle xEMACSemaphore = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
+/* The queue used to send TCP/IP events to the uIP stack. */\r
+xQueueHandle xEMACEventQueue = NULL;\r
 \r
-void clock_init(void)\r
-{\r
-       /* This is done when the scheduler starts. */\r
-}\r
 /*-----------------------------------------------------------*/\r
 \r
 clock_time_t clock_time( void )\r
@@ -115,25 +129,14 @@ clock_time_t clock_time( void )
 \r
 void vuIP_Task( void *pvParameters )\r
 {\r
-portBASE_TYPE i, xDoneSomething;\r
-uip_ipaddr_t xIPAddr;\r
-struct timer periodic_timer, arp_timer;\r
+portBASE_TYPE i;\r
+unsigned long ulNewEvent = 0UL;\r
+unsigned long ulUIP_Events = 0UL;\r
 \r
        ( void ) pvParameters;\r
-\r
+       \r
        /* Initialise the uIP stack. */\r
-       timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );\r
-       timer_set( &arp_timer, configTICK_RATE_HZ * 10 );\r
-       uip_init();\r
-       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
-       uip_sethostaddr( &xIPAddr );\r
-       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
-       uip_setnetmask( &xIPAddr );\r
-       prvSetMACAddress();\r
-       httpd_init();\r
-\r
-       /* Create the semaphore used to wake the uIP task. */\r
-       vSemaphoreCreateBinary( xEMACSemaphore );\r
+       prvInitialise_uIP();\r
 \r
        /* Initialise the MAC. */\r
        vInitEmac();\r
@@ -145,49 +148,51 @@ struct timer periodic_timer, arp_timer;
 \r
        for( ;; )\r
        {\r
-               xDoneSomething = pdFALSE;\r
-               \r
-               /* Is there received data ready to be processed? */\r
-               uip_len = ( unsigned short ) ulEMACRead();\r
-               \r
-               if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
-               {\r
-                       /* Standard uIP loop taken from the uIP manual. */\r
-                       if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
+               if( ( ulUIP_Events & uipETHERNET_RX_EVENT ) != 0UL )\r
+               {               \r
+                       /* Is there received data ready to be processed? */\r
+                       uip_len = ( unsigned short ) ulEMACRead();\r
+                       \r
+                       if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
                        {\r
-                               uip_arp_ipin();\r
-                               uip_input();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               /* Standard uIP loop taken from the uIP manual. */\r
+                               if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
                                {\r
-                                       uip_arp_out();\r
-                                       vEMACWrite();\r
+                                       uip_arp_ipin();\r
+                                       uip_input();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               uip_arp_out();\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
-                       }\r
-                       else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
-                       {\r
-                               uip_arp_arpin();\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
+                               else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
                                {\r
-                                       vEMACWrite();\r
+                                       uip_arp_arpin();\r
+\r
+                                       /* If the above function invocation resulted in data that\r
+                                       should be sent out on the network, the global variable\r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               vEMACWrite();\r
+                                       }\r
                                }\r
-                               \r
-                               xDoneSomething = pdTRUE;\r
+                       }\r
+                       else\r
+                       {\r
+                               ulUIP_Events &= ~uipETHERNET_RX_EVENT;\r
                        }\r
                }\r
-\r
-               if( timer_expired( &periodic_timer ) && ( uip_buf != NULL ) )\r
+               \r
+               if( ( ulUIP_Events & uipPERIODIC_TIMER_EVENT ) != 0UL )\r
                {\r
-                       timer_reset( &periodic_timer );\r
+                       ulUIP_Events &= ~uipPERIODIC_TIMER_EVENT;\r
+                                       \r
                        for( i = 0; i < UIP_CONNS; i++ )\r
                        {\r
                                uip_periodic( i );\r
@@ -201,25 +206,82 @@ struct timer periodic_timer, arp_timer;
                                        vEMACWrite();\r
                                }\r
                        }\r
-\r
-                       /* Call the ARP timer function every 10 seconds. */\r
-                       if( timer_expired( &arp_timer ) )\r
-                       {\r
-                               timer_reset( &arp_timer );\r
-                               uip_arp_timer();\r
-                       }\r
-                       \r
-                       xDoneSomething = pdTRUE;\r
                }\r
                \r
-               if( xDoneSomething == pdFALSE )\r
+               /* Call the ARP timer function every 10 seconds. */\r
+               if( ( ulUIP_Events & uipARP_TIMER_EVENT ) != 0 )\r
                {\r
-                       /* We did not receive a packet, and there was no periodic\r
-                       processing to perform.  Block for a fixed period.  If a packet\r
-                       is received during this period we will be woken by the ISR\r
-                       giving us the Semaphore. */\r
-                       xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 20 );\r
+                       ulUIP_Events &= ~uipARP_TIMER_EVENT;\r
+                       uip_arp_timer();\r
                }\r
+                       \r
+               if( ulUIP_Events == pdFALSE )\r
+               {\r
+                       xQueueReceive( xEMACEventQueue, &ulNewEvent, portMAX_DELAY );\r
+                       ulUIP_Events |= ulNewEvent;\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvInitialise_uIP( void )\r
+{\r
+xTimerHandle xARPTimer, xPeriodicTimer;\r
+uip_ipaddr_t xIPAddr;\r
+const unsigned long ul_uIPEventQueueLength = 10UL;\r
+\r
+       /* Initialise the uIP stack. */\r
+       uip_init();\r
+       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
+       uip_sethostaddr( &xIPAddr );\r
+       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
+       uip_setnetmask( &xIPAddr );\r
+       prvSetMACAddress();\r
+       httpd_init();\r
+\r
+       /* Create the queue used to sent TCP/IP events to the uIP stack. */\r
+       xEMACEventQueue = xQueueCreate( ul_uIPEventQueueLength, sizeof( unsigned long ) );\r
+\r
+       /* Create and start the uIP timers. */\r
+       xARPTimer = xTimerCreate(       ( const signed char * const ) "ARPTimer", /* Just a name that is helpful for debugging, not used by the kernel. */\r
+                                                               ( 10000UL / portTICK_RATE_MS ), /* Timer period. */\r
+                                                               pdTRUE, /* Autor-reload. */\r
+                                                               ( void * ) uipARP_TIMER,\r
+                                                               prvUIPTimerCallback\r
+                                                       );\r
+\r
+       xPeriodicTimer = xTimerCreate(  ( const signed char * const ) "PeriodicTimer",\r
+                                                                       ( 500 / portTICK_RATE_MS ),\r
+                                                                       pdTRUE, /* Autor-reload. */\r
+                                                                       ( void * ) uipPERIODIC_TIMER,\r
+                                                                       prvUIPTimerCallback\r
+                                                               );\r
+\r
+       configASSERT( xARPTimer );\r
+       configASSERT( xPeriodicTimer );\r
+\r
+       xTimerStart( xARPTimer, portMAX_DELAY );\r
+       xTimerStart( xPeriodicTimer, portMAX_DELAY );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvUIPTimerCallback( xTimerHandle xTimer )\r
+{\r
+static const unsigned long ulARPTimerExpired = uipARP_TIMER_EVENT;\r
+static const unsigned long ulPeriodicTimerExpired = uipPERIODIC_TIMER_EVENT;\r
+\r
+       /* This is a time callback, so calls to xQueueSend() must not attempt to\r
+       block. */\r
+       switch( ( int ) pvTimerGetTimerID( xTimer ) )\r
+       {\r
+               case uipARP_TIMER               :       xQueueSend( xEMACEventQueue, &ulARPTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               case uipPERIODIC_TIMER  :       xQueueSend( xEMACEventQueue, &ulPeriodicTimerExpired, uipDONT_BLOCK );\r
+                                                                       break;\r
+\r
+               default                                 :       /* Should not get here. */\r
+                                                                       break;\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -250,28 +312,33 @@ char *c;
        {\r
                /* Is there a command in the string? */\r
                c = strstr( pcInputString, "?" );\r
-               if( c )\r
-               {\r
+           if( c )\r
+           {\r
                        /* Turn the LED's on or off in accordance with the check box status. */\r
                        if( strstr( c, "LED0=1" ) != NULL )\r
                        {\r
-                               /* Turn LEDs on. */\r
-                               vParTestSetLED( 3, 1 );\r
-                               vParTestSetLED( 4, 1 );\r
+                               /* Turn the LEDs on. */\r
+                               vParTestSetLED( 7, 1 );\r
+                               vParTestSetLED( 8, 1 );\r
+                               vParTestSetLED( 9, 1 );\r
+                               vParTestSetLED( 10, 1 );\r
                        }\r
                        else\r
                        {\r
-                               /* Turn LED 4 off. */\r
-                               vParTestSetLED( 3, 0 );\r
-                               vParTestSetLED( 4, 0 );\r
+                               /* Turn the LEDs off. */\r
+                               vParTestSetLED( 7, 0 );\r
+                               vParTestSetLED( 8, 0 );\r
+                               vParTestSetLED( 9, 0 );\r
+                               vParTestSetLED( 10, 0 );\r
                        }\r
-               }\r
+           }\r
                else\r
                {\r
-                       /* Commands to turn LEDs off are not always explicit, turn LED 4\r
-                       off. */\r
-                       vParTestSetLED( 3, 0 );\r
-                       vParTestSetLED( 4, 0 );\r
+                       /* Commands to turn LEDs off are not always explicit. */\r
+                       vParTestSetLED( 7, 0 );\r
+                       vParTestSetLED( 8, 0 );\r
+                       vParTestSetLED( 9, 0 );\r
+                       vParTestSetLED( 10, 0 );\r
                }\r
        }\r
 }\r
index 88dd2809496a226ff15b5c4a3bb04d3bac359479..8fe65332679a11572ff201243a24a7cda38a3476 100644 (file)
@@ -246,23 +246,29 @@ unsigned long ulBytesReceived;
 \r
        if( ulBytesReceived > 0 )\r
        {\r
-               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
-               pxCurrentRxDesc->status |= ACT;                 \r
-\r
-               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
-               {\r
-                       /* Restart Ethernet if it has stopped */\r
-                       EDMAC.EDRRR.LONG = 0x00000001L;\r
-               }\r
-\r
                /* Mark the pxDescriptor buffer as free as uip_buf is going to be set to\r
                the buffer that contains the received data. */\r
                prvReturnBuffer( uip_buf );\r
-               \r
+\r
+               /* Point uip_buf to the data about ot be processed. */\r
                uip_buf = ( void * ) pxCurrentRxDesc->buf_p;\r
+               \r
+               /* Allocate a new buffer to the descriptor, as uip_buf is now using it's\r
+               old descriptor. */\r
+               pxCurrentRxDesc->buf_p = prvGetNextBuffer();\r
+\r
+               /* Prepare the descriptor to go again. */\r
+               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
+               pxCurrentRxDesc->status |= ACT;\r
 \r
                /* Move onto the next buffer in the ring. */\r
                pxCurrentRxDesc = pxCurrentRxDesc->next;\r
+               \r
+               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
+               {\r
+                       /* Restart Ethernet if it has stopped */\r
+                       EDMAC.EDRRR.LONG = 0x00000001L;\r
+               }\r
        }\r
 \r
        return ulBytesReceived;\r
@@ -521,7 +527,8 @@ static void prvConfigureEtherCAndEDMAC( void )
        EDMAC.TFTR.LONG = 0x00000000;                           /* Threshold of Tx_FIFO */\r
        EDMAC.FDR.LONG = 0x00000000;                            /* Transmit fifo & receive fifo is 256 bytes */\r
        EDMAC.RMCR.LONG = 0x00000003;                           /* Receive function is normal mode(continued) */\r
-       \r
+       ETHERC.ECMR.BIT.PRM = 0;                                        /* Ensure promiscuous mode is off. */\r
+               \r
        /* Enable the interrupt... */\r
        _IEN( _ETHER_EINT ) = 1;        \r
 }\r
@@ -532,19 +539,14 @@ void vEMAC_ISR_Handler( void )
 {\r
 unsigned long ul = EDMAC.EESR.LONG;\r
 long lHigherPriorityTaskWoken = pdFALSE;\r
-extern xSemaphoreHandle xEMACSemaphore;\r
-static long ulTxEndInts = 0;\r
+extern xQueueHandle xEMACEventQueue;\r
+const unsigned long ulRxEvent = uipETHERNET_RX_EVENT;\r
 \r
        /* Has a Tx end occurred? */\r
        if( ul & emacTX_END_INTERRUPT )\r
        {\r
-               ++ulTxEndInts;\r
-               if( ulTxEndInts >= 2 )\r
-               {\r
-                       /* Only return the buffer to the pool once both Txes have completed. */\r
-                       prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
-                       ulTxEndInts = 0;\r
-               }\r
+               /* Only return the buffer to the pool once both Txes have completed. */\r
+               prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
                EDMAC.EESR.LONG = emacTX_END_INTERRUPT;\r
        }\r
 \r
@@ -552,7 +554,7 @@ static long ulTxEndInts = 0;
        if( ul & emacRX_END_INTERRUPT )\r
        {\r
                /* Make sure the Ethernet task is not blocked waiting for a packet. */\r
-               xSemaphoreGiveFromISR( xEMACSemaphore, &lHigherPriorityTaskWoken );\r
+               xQueueSendFromISR( xEMACEventQueue, &ulRxEvent, &lHigherPriorityTaskWoken );\r
                portYIELD_FROM_ISR( lHigherPriorityTaskWoken );\r
                EDMAC.EESR.LONG = emacRX_END_INTERRUPT;\r
        }\r