*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
+ */\r
+\r
*----------------------------------------------------------*/\r
\r
+\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 0\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
- *----------------------------------------------------------*/\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
+ -----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
\r
#include <stdio.h>\r
#include "AT91SAM7X256.h"\r
+\r
/*-----------------------------------------------------------\r
* Application specific definitions.\r
*\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
+\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 0\r
\r
#include <stdio.h>\r
#include "lpc23xx.h"\r
+\r
/*-----------------------------------------------------------\r
* Application specific definitions.\r
*\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
/* Value to use on old rev '-' devices. */\r
#include <stdio.h>\r
#include <targets/LPC2368.h>\r
#define vPortYieldProcessor swi_handler\r
+\r
/*-----------------------------------------------------------\r
* Application specific definitions.\r
*\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
+\r
/* Value to use on old rev '-' devices. */\r
//#define configPINSEL2_VALUE 0x50151105\r
\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
+\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 0\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
+\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 0\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
+\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 0\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
+\r
/**\r
* The STR9 port can use either the watchdog or the timer 2 interrupt to generate\r
* the system tick. Set configUSE_WATCHDOG_TICK to 1 to use the watchdog, or\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 0\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
-/*\r
- * See http://www.freertos.org/a00110.html for a description of these\r
- * configuration constants.\r
- */\r
-\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 0\r
+++ /dev/null
-/* Linker script for m5282evb
- *
- * Version:Sourcery G++ Lite 4.2-125
- * BugURL:https://support.codesourcery.com/GNUToolchain/
- *
- * Copyright 2007, 2008 CodeSourcery.
- *
- * The authors hereby grant permission to use, copy, modify, distribute,
- * and license this software and its documentation for any purpose, provided
- * that existing copyright notices are retained in all copies and that this
- * notice is included verbatim in any distributions. No written agreement,
- * license, or royalty fee is required for any of the authorized uses.
- * Modifications to this software may be copyrighted by their authors
- * and need not follow the licensing terms described here, provided that
- * the new terms are clearly indicated on the first page of each file where
- * they apply. */
-
-OUTPUT_ARCH(m68k)
-ENTRY(_start)
-SEARCH_DIR(.)
-GROUP(-lgcc -lc -lcs3 -lcs3hosted -lcs3coldfire)
-
-MEMORY
-{
- ram (rwx) : ORIGIN = 0x00000000, LENGTH = 16M
- rom (rx) : ORIGIN = 0xFFE00000, LENGTH = 2M
- rombar (rx) : ORIGIN = 0xf0000000, LENGTH = 512K
- rambar (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
- ipsbar (rw) : ORIGIN = 0x40000000, LENGTH = 0x20000000
-}
-
-/* These force the linker to search for particular symbols from
- * the start of the link process and thus ensure the user's
- * overrides are picked up
- */
-EXTERN(__cs3_reset_m5282evb)
-INCLUDE coldfire-names.inc
-EXTERN(__cs3_interrupt_vector_coldfire)
-EXTERN(__cs3_start_c main __cs3_stack __cs3_heap_end)
-EXTERN(_start)
-/* force exit to be picked up in a hosted or os environment */
-EXTERN(exit atexit)
-
-PROVIDE(__cs3_heap_start = _end);
-PROVIDE(__cs3_heap_end = __cs3_region_start_ram + __cs3_region_size_ram);
-PROVIDE(__cs3_region_num = (__cs3_regions_end - __cs3_regions) / 20);
-PROVIDE(__cs3_stack = __cs3_region_start_ram + __cs3_region_size_ram);
-
-SECTIONS
-{
-
- .text :
- {
- CREATE_OBJECT_SYMBOLS
- __cs3_region_start_ram = .;
- *(.cs3.region-head.ram)
- ASSERT (. == __cs3_region_start_ram, ".cs3.region-head.ram not permitted");
- __cs3_interrupt_vector = __cs3_interrupt_vector_coldfire;
- *(.cs3.interrupt_vector)
- /* Make sure we pulled in an interrupt vector. */
- ASSERT (. != __cs3_interrupt_vector_coldfire, "No interrupt vector");
-
- PROVIDE(__cs3_reset_m5282evb = _start);
- __cs3_reset = __cs3_reset_m5282evb;
- *(.cs3.reset)
-
- *(.text .text.* .gnu.linkonce.t.*)
-
- . = ALIGN(0x4);
- KEEP (*crtbegin.o(.jcr))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .jcr))
- KEEP (*crtend.o(.jcr))
-
- . = ALIGN(0x4);
- *(.gcc_except_table .gcc_except_table.*)
- } >ram
- .eh_frame_hdr : ALIGN (4)
- {
- KEEP (*(.eh_frame_hdr))
- } >ram
- .eh_frame : ALIGN (4)
- {
- KEEP (*(.eh_frame))
- } >ram
- .rodata : ALIGN (4)
- {
- *(.rodata .rodata.* .gnu.linkonce.r.*)
-
- . = ALIGN(4);
- _init = .;
- LONG (0x4e560000) /* linkw %fp,#0 */
- KEEP(*(.init))
- SHORT (0x4e5e) /* unlk %fp */
- SHORT (0x4e75) /* rts */
-
- . = ALIGN(4);
- __preinit_array_start = .;
- KEEP (*(.preinit_array))
- __preinit_array_end = .;
-
- . = ALIGN(4);
- __init_array_start = .;
- KEEP (*(SORT(.init_array.*)))
- KEEP (*(.init_array))
- __init_array_end = .;
-
- . = ALIGN(4);
- _fini = .;
- LONG (0x4e560000) /* linkw %fp,#0 */
- KEEP(*(.fini))
- SHORT (0x4e5e) /* unlk %fp */
- SHORT (0x4e75) /* rts */
-
- . = ALIGN(4);
- __fini_array_start = .;
- KEEP (*(.fini_array))
- KEEP (*(SORT(.fini_array.*)))
- __fini_array_end = .;
-
- . = ALIGN(0x4);
- KEEP (*crtbegin.o(.ctors))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*crtend.o(.ctors))
-
- . = ALIGN(0x4);
- KEEP (*crtbegin.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*crtend.o(.dtors))
-
- *(.lit)
-
- . = ALIGN(4);
- __cs3_regions = .;
- LONG (0)
- LONG (__cs3_region_init_ram)
- LONG (__cs3_region_start_ram)
- LONG (__cs3_region_init_size_ram)
- LONG (__cs3_region_zero_size_ram)
- LONG (0)
- LONG (__cs3_region_init_rombar)
- LONG (__cs3_region_start_rombar)
- LONG (__cs3_region_init_size_rombar)
- LONG (__cs3_region_zero_size_rombar)
- LONG (0)
- LONG (__cs3_region_init_rambar)
- LONG (__cs3_region_start_rambar)
- LONG (__cs3_region_init_size_rambar)
- LONG (__cs3_region_zero_size_rambar)
- __cs3_regions_end = .;
-
- . = ALIGN (8);
- . = ALIGN (8);
- _etext = .;
- } >ram
-
- .cs3.rom : ALIGN (8)
- {
- __cs3_region_start_rom = .;
- *(.cs3.region-head.rom)
- *(.rom)
- . = ALIGN (8);
- } >rom
- .cs3.rom.bss :
- {
- *(.rom.b)
- . = ALIGN (8);
- } >rom
- /* __cs3_region_end_rom is deprecated */
- __cs3_region_end_rom = __cs3_region_start_rom + LENGTH(rom);
- __cs3_region_size_rom = LENGTH(rom);
- __cs3_region_init_rom = LOADADDR (.cs3.rom);
- __cs3_region_init_size_rom = LOADADDR (.cs3.rom.bss) - LOADADDR (.cs3.rom);
- __cs3_region_zero_size_rom = SIZEOF(.cs3.rom.bss);
-
- .cs3.rombar : ALIGN (8)
- {
- __cs3_region_start_rombar = .;
- *(.cs3.region-head.rombar)
- *(.rombar)
- . = ALIGN (8);
- } >rombar
- .cs3.rombar.bss :
- {
- *(.rombar.b)
- . = ALIGN (8);
- } >rombar
- /* __cs3_region_end_rombar is deprecated */
- __cs3_region_end_rombar = __cs3_region_start_rombar + LENGTH(rombar);
- __cs3_region_size_rombar = LENGTH(rombar);
- __cs3_region_init_rombar = LOADADDR (.cs3.rombar);
- __cs3_region_init_size_rombar = LOADADDR (.cs3.rombar.bss) - LOADADDR (.cs3.rombar);
- __cs3_region_zero_size_rombar = SIZEOF(.cs3.rombar.bss);
-
- .cs3.rambar : ALIGN (8)
- {
- __cs3_region_start_rambar = .;
- *(.cs3.region-head.rambar)
- *(.rambar)
- . = ALIGN (8);
- } >rambar
- .cs3.rambar.bss :
- {
- *(.rambar.b)
- . = ALIGN (8);
- } >rambar
- /* __cs3_region_end_rambar is deprecated */
- __cs3_region_end_rambar = __cs3_region_start_rambar + LENGTH(rambar);
- __cs3_region_size_rambar = LENGTH(rambar);
- __cs3_region_init_rambar = LOADADDR (.cs3.rambar);
- __cs3_region_init_size_rambar = LOADADDR (.cs3.rambar.bss) - LOADADDR (.cs3.rambar);
- __cs3_region_zero_size_rambar = SIZEOF(.cs3.rambar.bss);
-
- .cs3.ipsbar :
- {
- __cs3_region_start_ipsbar = .;
- *(.cs3.region-head.ipsbar)
- . = ALIGN (8);
- } >ipsbar
- /* __cs3_region_end_ipsbar is deprecated */
- __cs3_region_end_ipsbar = __cs3_region_start_ipsbar + LENGTH(ipsbar);
- __cs3_region_size_ipsbar = LENGTH(ipsbar);
-
- .data : ALIGN (8)
- {
-
- *(.got.plt) *(.got)
- *(.shdata)
- *(.data .data.* .gnu.linkonce.d.*)
- . = ALIGN (8);
- *(.ram)
- _edata = .;
- } >ram
- .bss :
- {
- *(.shbss)
- *(.bss .bss.* .gnu.linkonce.b.*)
- *(COMMON)
- . = ALIGN (8);
- *(.ram.b)
- _end = .;
- __end = .;
- } >ram
- /* __cs3_region_end_ram is deprecated */
- __cs3_region_end_ram = __cs3_region_start_ram + LENGTH(ram);
- __cs3_region_size_ram = LENGTH(ram);
- __cs3_region_init_ram = LOADADDR (.text);
- __cs3_region_init_size_ram = _edata - ADDR (.text);
- __cs3_region_zero_size_ram = _end - _edata;
-
- .stab 0 (NOLOAD) : { *(.stab) }
- .stabstr 0 (NOLOAD) : { *(.stabstr) }
- /* DWARF debug sections.
- * Symbols in the DWARF debugging sections are relative to the beginning
- * of the section so we begin them at 0. */
- /* DWARF 1 */
- .debug 0 : { *(.debug) }
- .line 0 : { *(.line) }
- /* GNU DWARF 1 extensions */
- .debug_srcinfo 0 : { *(.debug_srcinfo) }
- .debug_sfnames 0 : { *(.debug_sfnames) }
- /* DWARF 1.1 and DWARF 2 */
- .debug_aranges 0 : { *(.debug_aranges) }
- .debug_pubnames 0 : { *(.debug_pubnames) }
- /* DWARF 2 */
- .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
- .debug_abbrev 0 : { *(.debug_abbrev) }
- .debug_line 0 : { *(.debug_line) }
- .debug_frame 0 : { *(.debug_frame) }
- .debug_str 0 : { *(.debug_str) }
- .debug_loc 0 : { *(.debug_loc) }
- .debug_macinfo 0 : { *(.debug_macinfo) }
- /* SGI/MIPS DWARF 2 extensions */
- .debug_weaknames 0 : { *(.debug_weaknames) }
- .debug_funcnames 0 : { *(.debug_funcnames) }
- .debug_typenames 0 : { *(.debug_typenames) }
- .debug_varnames 0 : { *(.debug_varnames) }
-}
+++ /dev/null
-/*\r
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without modification,\r
- * are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- * this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- * this list of conditions and the following disclaimer in the documentation\r
- * and/or other materials provided with the distribution.\r
- * 3. The name of the author may not be used to endorse or promote products\r
- * derived from this software without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\r
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\r
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\r
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r
- * OF SUCH DAMAGE.\r
- *\r
- * This file is part of the lwIP TCP/IP stack.\r
- *\r
- * Author: Adam Dunkels <adam@sics.se>\r
- *\r
- */\r
-\r
-/* lwIP includes. */\r
-#include "lwip/debug.h"\r
-#include "lwip/def.h"\r
-#include "lwip/sys.h"\r
-#include "lwip/mem.h"\r
-#include "lwip/stats.h"\r
-\r
-struct timeoutlist\r
-{\r
- struct sys_timeouts timeouts;\r
- xTaskHandle pid;\r
-};\r
-\r
-/* This is the number of threads that can be started with sys_thread_new() */\r
-#define SYS_THREAD_MAX 4\r
-\r
-static struct timeoutlist s_timeoutlist[SYS_THREAD_MAX];\r
-static u16_t s_nextthread = 0;\r
-\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-// Creates an empty mailbox.\r
-sys_mbox_t sys_mbox_new(int size)\r
-{\r
- xQueueHandle mbox;\r
- \r
- mbox = xQueueCreate( archMESG_QUEUE_LENGTH, sizeof( void * ) );\r
-\r
-#if SYS_STATS\r
- ++lwip_stats.sys.mbox.used;\r
- if (lwip_stats.sys.mbox.max < lwip_stats.sys.mbox.used) {\r
- lwip_stats.sys.mbox.max = lwip_stats.sys.mbox.used;\r
- }\r
-#endif /* SYS_STATS */\r
-\r
- return mbox;\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-/*\r
- Deallocates a mailbox. If there are messages still present in the\r
- mailbox when the mailbox is deallocated, it is an indication of a\r
- programming error in lwIP and the developer should be notified.\r
-*/\r
-void sys_mbox_free(sys_mbox_t mbox)\r
-{\r
- if( uxQueueMessagesWaiting( mbox ) )\r
- {\r
- /* Line for breakpoint. Should never break here! */\r
- portNOP();\r
-#if SYS_STATS\r
- lwip_stats.sys.mbox.err++;\r
-#endif /* SYS_STATS */\r
- \r
- // TODO notify the user of failure.\r
- }\r
-\r
- vQueueDelete( mbox );\r
-\r
-#if SYS_STATS\r
- --lwip_stats.sys.mbox.used;\r
-#endif /* SYS_STATS */\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-// Posts the "msg" to the mailbox.\r
-void sys_mbox_post(sys_mbox_t mbox, void *data)\r
-{\r
- while ( xQueueSendToBack(mbox, &data, portMAX_DELAY ) != pdTRUE );\r
-}\r
-\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-// Try to post the "msg" to the mailbox.\r
-err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg)\r
-{\r
-err_t result;\r
-\r
- if ( xQueueSend( mbox, &msg, 0 ) == pdPASS )\r
- {\r
- result = ERR_OK;\r
- }\r
- else {\r
- // could not post, queue must be full\r
- result = ERR_MEM;\r
- \r
-#if SYS_STATS\r
- lwip_stats.sys.mbox.err++;\r
-#endif /* SYS_STATS */\r
- \r
- }\r
-\r
- return result;\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-/*\r
- Blocks the thread until a message arrives in the mailbox, but does\r
- not block the thread longer than "timeout" milliseconds (similar to\r
- the sys_arch_sem_wait() function). The "msg" argument is a result\r
- parameter that is set by the function (i.e., by doing "*msg =\r
- ptr"). The "msg" parameter maybe NULL to indicate that the message\r
- should be dropped.\r
-\r
- The return values are the same as for the sys_arch_sem_wait() function:\r
- Number of milliseconds spent waiting or SYS_ARCH_TIMEOUT if there was a\r
- timeout.\r
-\r
- Note that a function with a similar name, sys_mbox_fetch(), is\r
- implemented by lwIP.\r
-*/\r
-u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout)\r
-{\r
-void *dummyptr;\r
-portTickType StartTime, EndTime, Elapsed;\r
-\r
- StartTime = xTaskGetTickCount();\r
-\r
- if ( msg == NULL )\r
- {\r
- msg = &dummyptr;\r
- }\r
- \r
- if ( timeout != 0 )\r
- {\r
- if ( pdTRUE == xQueueReceive( mbox, &(*msg), timeout / portTICK_RATE_MS ) )\r
- {\r
- EndTime = xTaskGetTickCount();\r
- Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;\r
- \r
- return ( Elapsed );\r
- }\r
- else // timed out blocking for message\r
- {\r
- *msg = NULL;\r
- \r
- return SYS_ARCH_TIMEOUT;\r
- }\r
- }\r
- else // block forever for a message.\r
- {\r
- while( pdTRUE != xQueueReceive( mbox, &(*msg), portMAX_DELAY ) ); // time is arbitrary\r
- EndTime = xTaskGetTickCount();\r
- Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;\r
- \r
- return ( Elapsed ); // return time blocked TODO test \r
- }\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-/*\r
- Similar to sys_arch_mbox_fetch, but if message is not ready immediately, we'll\r
- return with SYS_MBOX_EMPTY. On success, 0 is returned.\r
-*/\r
-u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg)\r
-{\r
-void *dummyptr;\r
-\r
- if ( msg == NULL )\r
- {\r
- msg = &dummyptr;\r
- }\r
-\r
- if ( pdTRUE == xQueueReceive( mbox, &(*msg), 0 ) )\r
- {\r
- return ERR_OK;\r
- }\r
- else\r
- {\r
- return SYS_MBOX_EMPTY;\r
- }\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-// Creates and returns a new semaphore. The "count" argument specifies\r
-// the initial state of the semaphore.\r
-sys_sem_t sys_sem_new(u8_t count)\r
-{\r
- xSemaphoreHandle xSemaphore;\r
-\r
- vSemaphoreCreateBinary( xSemaphore );\r
- \r
- if( xSemaphore == NULL )\r
- {\r
- \r
-#if SYS_STATS\r
- ++lwip_stats.sys.sem.err;\r
-#endif /* SYS_STATS */\r
- \r
- return SYS_SEM_NULL; // TODO need assert\r
- }\r
- \r
- if(count == 0) // Means it can't be taken\r
- {\r
- xSemaphoreTake(xSemaphore,1);\r
- }\r
-\r
-#if SYS_STATS\r
- ++lwip_stats.sys.sem.used;\r
- if (lwip_stats.sys.sem.max < lwip_stats.sys.sem.used) {\r
- lwip_stats.sys.sem.max = lwip_stats.sys.sem.used;\r
- }\r
-#endif /* SYS_STATS */\r
- \r
- return xSemaphore;\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-/*\r
- Blocks the thread while waiting for the semaphore to be\r
- signaled. If the "timeout" argument is non-zero, the thread should\r
- only be blocked for the specified time (measured in\r
- milliseconds).\r
-\r
- If the timeout argument is non-zero, the return value is the number of\r
- milliseconds spent waiting for the semaphore to be signaled. If the\r
- semaphore wasn't signaled within the specified time, the return value is\r
- SYS_ARCH_TIMEOUT. If the thread didn't have to wait for the semaphore\r
- (i.e., it was already signaled), the function may return zero.\r
-\r
- Notice that lwIP implements a function with a similar name,\r
- sys_sem_wait(), that uses the sys_arch_sem_wait() function.\r
-*/\r
-u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout)\r
-{\r
-portTickType StartTime, EndTime, Elapsed;\r
-\r
- StartTime = xTaskGetTickCount();\r
-\r
- if( timeout != 0)\r
- {\r
- if( xSemaphoreTake( sem, timeout / portTICK_RATE_MS ) == pdTRUE )\r
- {\r
- EndTime = xTaskGetTickCount();\r
- Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;\r
- \r
- return (Elapsed); // return time blocked TODO test \r
- }\r
- else\r
- {\r
- return SYS_ARCH_TIMEOUT;\r
- }\r
- }\r
- else // must block without a timeout\r
- {\r
- while( xSemaphoreTake( sem, portMAX_DELAY ) != pdTRUE );\r
- EndTime = xTaskGetTickCount();\r
- Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;\r
-\r
- return ( Elapsed ); // return time blocked \r
- \r
- }\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-// Signals a semaphore\r
-void sys_sem_signal(sys_sem_t sem)\r
-{\r
- xSemaphoreGive( sem );\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-// Deallocates a semaphore\r
-void sys_sem_free(sys_sem_t sem)\r
-{\r
-#if SYS_STATS\r
- --lwip_stats.sys.sem.used;\r
-#endif /* SYS_STATS */\r
- \r
- vQueueDelete( sem );\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-// Initialize sys arch\r
-void sys_init(void)\r
-{\r
- int i;\r
-\r
- // Initialize the the per-thread sys_timeouts structures\r
- // make sure there are no valid pids in the list\r
- for(i = 0; i < SYS_THREAD_MAX; i++)\r
- {\r
- s_timeoutlist[i].pid = 0;\r
- s_timeoutlist[i].timeouts.next = NULL;\r
- }\r
-\r
- // keep track of how many threads have been created\r
- s_nextthread = 0;\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-/*\r
- Returns a pointer to the per-thread sys_timeouts structure. In lwIP,\r
- each thread has a list of timeouts which is represented as a linked\r
- list of sys_timeout structures. The sys_timeouts structure holds a\r
- pointer to a linked list of timeouts. This function is called by\r
- the lwIP timeout scheduler and must not return a NULL value.\r
-\r
- In a single threaded sys_arch implementation, this function will\r
- simply return a pointer to a global sys_timeouts variable stored in\r
- the sys_arch module.\r
-*/\r
-struct sys_timeouts *sys_arch_timeouts(void)\r
-{\r
-int i;\r
-xTaskHandle pid;\r
-struct timeoutlist *tl;\r
-\r
- pid = xTaskGetCurrentTaskHandle( );\r
-\r
- for(i = 0; i < s_nextthread; i++)\r
- {\r
- tl = &(s_timeoutlist[i]);\r
- if(tl->pid == pid)\r
- {\r
- return &(tl->timeouts);\r
- }\r
- }\r
-\r
- // Error\r
- return NULL;\r
-}\r
-\r
-/*-----------------------------------------------------------------------------------*/\r
-/*-----------------------------------------------------------------------------------*/\r
-// TODO\r
-/*-----------------------------------------------------------------------------------*/\r
-/*\r
- Starts a new thread with priority "prio" that will begin its execution in the\r
- function "thread()". The "arg" argument will be passed as an argument to the\r
- thread() function. The id of the new thread is returned. Both the id and\r
- the priority are system dependent.\r
-*/\r
-sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio)\r
-{\r
-xTaskHandle CreatedTask;\r
-int result;\r
-\r
- if ( s_nextthread < SYS_THREAD_MAX )\r
- {\r
- result = xTaskCreate( thread, ( signed portCHAR * ) name, stacksize, arg, prio, &CreatedTask );\r
-\r
- // For each task created, store the task handle (pid) in the timers array.\r
- // This scheme doesn't allow for threads to be deleted\r
- s_timeoutlist[s_nextthread++].pid = CreatedTask;\r
-\r
- if(result == pdPASS)\r
- {\r
- return CreatedTask;\r
- }\r
- else\r
- {\r
- return NULL;\r
- }\r
- }\r
- else\r
- {\r
- return NULL;\r
- }\r
-}\r
-\r
-/*\r
- This optional function does a "fast" critical region protection and returns\r
- the previous protection level. This function is only called during very short\r
- critical regions. An embedded system which supports ISR-based drivers might\r
- want to implement this function by disabling interrupts. Task-based systems\r
- might want to implement this by using a mutex or disabling tasking. This\r
- function should support recursive calls from the same task or interrupt. In\r
- other words, sys_arch_protect() could be called while already protected. In\r
- that case the return value indicates that it is already protected.\r
-\r
- sys_arch_protect() is only required if your port is supporting an operating\r
- system.\r
-*/\r
-sys_prot_t sys_arch_protect(void)\r
-{\r
- vPortEnterCritical();\r
- return 1;\r
-}\r
-\r
-/*\r
- This optional function does a "fast" set of critical region protection to the\r
- value specified by pval. See the documentation for sys_arch_protect() for\r
- more information. This function is only required if your port is supporting\r
- an operating system.\r
-*/\r
-void sys_arch_unprotect(sys_prot_t pval)\r
-{\r
- ( void ) pval;\r
- vPortExitCritical();\r
-}\r
-\r
--- /dev/null
+/*\r
+ * Copyright (c) 2001-2003 Swedish Institute of Computer Science.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without modification,\r
+ * are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright notice,\r
+ * this list of conditions and the following disclaimer in the documentation\r
+ * and/or other materials provided with the distribution.\r
+ * 3. The name of the author may not be used to endorse or promote products\r
+ * derived from this software without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\r
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\r
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\r
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\r
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r
+ * OF SUCH DAMAGE.\r
+ *\r
+ * This file is part of the lwIP TCP/IP stack.\r
+ *\r
+ * Author: Adam Dunkels <adam@sics.se>\r
+ *\r
+ */\r
+\r
+/* lwIP includes. */\r
+#include "lwip/debug.h"\r
+#include "lwip/def.h"\r
+#include "lwip/sys.h"\r
+#include "lwip/mem.h"\r
+#include "lwip/stats.h"\r
+\r
+struct timeoutlist\r
+{\r
+ struct sys_timeouts timeouts;\r
+ xTaskHandle pid;\r
+};\r
+\r
+/* This is the number of threads that can be started with sys_thread_new() */\r
+#define SYS_THREAD_MAX 4\r
+\r
+static struct timeoutlist s_timeoutlist[SYS_THREAD_MAX];\r
+static u16_t s_nextthread = 0;\r
+\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+// Creates an empty mailbox.\r
+sys_mbox_t sys_mbox_new(int size)\r
+{\r
+ xQueueHandle mbox;\r
+ \r
+ mbox = xQueueCreate( archMESG_QUEUE_LENGTH, sizeof( void * ) );\r
+\r
+#if SYS_STATS\r
+ ++lwip_stats.sys.mbox.used;\r
+ if (lwip_stats.sys.mbox.max < lwip_stats.sys.mbox.used) {\r
+ lwip_stats.sys.mbox.max = lwip_stats.sys.mbox.used;\r
+ }\r
+#endif /* SYS_STATS */\r
+\r
+ return mbox;\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+/*\r
+ Deallocates a mailbox. If there are messages still present in the\r
+ mailbox when the mailbox is deallocated, it is an indication of a\r
+ programming error in lwIP and the developer should be notified.\r
+*/\r
+void sys_mbox_free(sys_mbox_t mbox)\r
+{\r
+ if( uxQueueMessagesWaiting( mbox ) )\r
+ {\r
+ /* Line for breakpoint. Should never break here! */\r
+ portNOP();\r
+#if SYS_STATS\r
+ lwip_stats.sys.mbox.err++;\r
+#endif /* SYS_STATS */\r
+ \r
+ // TODO notify the user of failure.\r
+ }\r
+\r
+ vQueueDelete( mbox );\r
+\r
+#if SYS_STATS\r
+ --lwip_stats.sys.mbox.used;\r
+#endif /* SYS_STATS */\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+// Posts the "msg" to the mailbox.\r
+void sys_mbox_post(sys_mbox_t mbox, void *data)\r
+{\r
+ while ( xQueueSendToBack(mbox, &data, portMAX_DELAY ) != pdTRUE );\r
+}\r
+\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+// Try to post the "msg" to the mailbox.\r
+err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg)\r
+{\r
+err_t result;\r
+\r
+ if ( xQueueSend( mbox, &msg, 0 ) == pdPASS )\r
+ {\r
+ result = ERR_OK;\r
+ }\r
+ else {\r
+ // could not post, queue must be full\r
+ result = ERR_MEM;\r
+ \r
+#if SYS_STATS\r
+ lwip_stats.sys.mbox.err++;\r
+#endif /* SYS_STATS */\r
+ \r
+ }\r
+\r
+ return result;\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+/*\r
+ Blocks the thread until a message arrives in the mailbox, but does\r
+ not block the thread longer than "timeout" milliseconds (similar to\r
+ the sys_arch_sem_wait() function). The "msg" argument is a result\r
+ parameter that is set by the function (i.e., by doing "*msg =\r
+ ptr"). The "msg" parameter maybe NULL to indicate that the message\r
+ should be dropped.\r
+\r
+ The return values are the same as for the sys_arch_sem_wait() function:\r
+ Number of milliseconds spent waiting or SYS_ARCH_TIMEOUT if there was a\r
+ timeout.\r
+\r
+ Note that a function with a similar name, sys_mbox_fetch(), is\r
+ implemented by lwIP.\r
+*/\r
+u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout)\r
+{\r
+void *dummyptr;\r
+portTickType StartTime, EndTime, Elapsed;\r
+\r
+ StartTime = xTaskGetTickCount();\r
+\r
+ if ( msg == NULL )\r
+ {\r
+ msg = &dummyptr;\r
+ }\r
+ \r
+ if ( timeout != 0 )\r
+ {\r
+ if ( pdTRUE == xQueueReceive( mbox, &(*msg), timeout / portTICK_RATE_MS ) )\r
+ {\r
+ EndTime = xTaskGetTickCount();\r
+ Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;\r
+ \r
+ return ( Elapsed );\r
+ }\r
+ else // timed out blocking for message\r
+ {\r
+ *msg = NULL;\r
+ \r
+ return SYS_ARCH_TIMEOUT;\r
+ }\r
+ }\r
+ else // block forever for a message.\r
+ {\r
+ while( pdTRUE != xQueueReceive( mbox, &(*msg), portMAX_DELAY ) ); // time is arbitrary\r
+ EndTime = xTaskGetTickCount();\r
+ Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;\r
+ \r
+ return ( Elapsed ); // return time blocked TODO test \r
+ }\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+/*\r
+ Similar to sys_arch_mbox_fetch, but if message is not ready immediately, we'll\r
+ return with SYS_MBOX_EMPTY. On success, 0 is returned.\r
+*/\r
+u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg)\r
+{\r
+void *dummyptr;\r
+\r
+ if ( msg == NULL )\r
+ {\r
+ msg = &dummyptr;\r
+ }\r
+\r
+ if ( pdTRUE == xQueueReceive( mbox, &(*msg), 0 ) )\r
+ {\r
+ return ERR_OK;\r
+ }\r
+ else\r
+ {\r
+ return SYS_MBOX_EMPTY;\r
+ }\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+// Creates and returns a new semaphore. The "count" argument specifies\r
+// the initial state of the semaphore.\r
+sys_sem_t sys_sem_new(u8_t count)\r
+{\r
+ xSemaphoreHandle xSemaphore;\r
+\r
+ vSemaphoreCreateBinary( xSemaphore );\r
+ \r
+ if( xSemaphore == NULL )\r
+ {\r
+ \r
+#if SYS_STATS\r
+ ++lwip_stats.sys.sem.err;\r
+#endif /* SYS_STATS */\r
+ \r
+ return SYS_SEM_NULL; // TODO need assert\r
+ }\r
+ \r
+ if(count == 0) // Means it can't be taken\r
+ {\r
+ xSemaphoreTake(xSemaphore,1);\r
+ }\r
+\r
+#if SYS_STATS\r
+ ++lwip_stats.sys.sem.used;\r
+ if (lwip_stats.sys.sem.max < lwip_stats.sys.sem.used) {\r
+ lwip_stats.sys.sem.max = lwip_stats.sys.sem.used;\r
+ }\r
+#endif /* SYS_STATS */\r
+ \r
+ return xSemaphore;\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+/*\r
+ Blocks the thread while waiting for the semaphore to be\r
+ signaled. If the "timeout" argument is non-zero, the thread should\r
+ only be blocked for the specified time (measured in\r
+ milliseconds).\r
+\r
+ If the timeout argument is non-zero, the return value is the number of\r
+ milliseconds spent waiting for the semaphore to be signaled. If the\r
+ semaphore wasn't signaled within the specified time, the return value is\r
+ SYS_ARCH_TIMEOUT. If the thread didn't have to wait for the semaphore\r
+ (i.e., it was already signaled), the function may return zero.\r
+\r
+ Notice that lwIP implements a function with a similar name,\r
+ sys_sem_wait(), that uses the sys_arch_sem_wait() function.\r
+*/\r
+u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout)\r
+{\r
+portTickType StartTime, EndTime, Elapsed;\r
+\r
+ StartTime = xTaskGetTickCount();\r
+\r
+ if( timeout != 0)\r
+ {\r
+ if( xSemaphoreTake( sem, timeout / portTICK_RATE_MS ) == pdTRUE )\r
+ {\r
+ EndTime = xTaskGetTickCount();\r
+ Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;\r
+ \r
+ return (Elapsed); // return time blocked TODO test \r
+ }\r
+ else\r
+ {\r
+ return SYS_ARCH_TIMEOUT;\r
+ }\r
+ }\r
+ else // must block without a timeout\r
+ {\r
+ while( xSemaphoreTake( sem, portMAX_DELAY ) != pdTRUE );\r
+ EndTime = xTaskGetTickCount();\r
+ Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;\r
+\r
+ return ( Elapsed ); // return time blocked \r
+ \r
+ }\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+// Signals a semaphore\r
+void sys_sem_signal(sys_sem_t sem)\r
+{\r
+ xSemaphoreGive( sem );\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+// Deallocates a semaphore\r
+void sys_sem_free(sys_sem_t sem)\r
+{\r
+#if SYS_STATS\r
+ --lwip_stats.sys.sem.used;\r
+#endif /* SYS_STATS */\r
+ \r
+ vQueueDelete( sem );\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+// Initialize sys arch\r
+void sys_init(void)\r
+{\r
+ int i;\r
+\r
+ // Initialize the the per-thread sys_timeouts structures\r
+ // make sure there are no valid pids in the list\r
+ for(i = 0; i < SYS_THREAD_MAX; i++)\r
+ {\r
+ s_timeoutlist[i].pid = 0;\r
+ s_timeoutlist[i].timeouts.next = NULL;\r
+ }\r
+\r
+ // keep track of how many threads have been created\r
+ s_nextthread = 0;\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+/*\r
+ Returns a pointer to the per-thread sys_timeouts structure. In lwIP,\r
+ each thread has a list of timeouts which is represented as a linked\r
+ list of sys_timeout structures. The sys_timeouts structure holds a\r
+ pointer to a linked list of timeouts. This function is called by\r
+ the lwIP timeout scheduler and must not return a NULL value.\r
+\r
+ In a single threaded sys_arch implementation, this function will\r
+ simply return a pointer to a global sys_timeouts variable stored in\r
+ the sys_arch module.\r
+*/\r
+struct sys_timeouts *sys_arch_timeouts(void)\r
+{\r
+int i;\r
+xTaskHandle pid;\r
+struct timeoutlist *tl;\r
+\r
+ pid = xTaskGetCurrentTaskHandle( );\r
+\r
+ for(i = 0; i < s_nextthread; i++)\r
+ {\r
+ tl = &(s_timeoutlist[i]);\r
+ if(tl->pid == pid)\r
+ {\r
+ return &(tl->timeouts);\r
+ }\r
+ }\r
+\r
+ // Error\r
+ return NULL;\r
+}\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+/*-----------------------------------------------------------------------------------*/\r
+// TODO\r
+/*-----------------------------------------------------------------------------------*/\r
+/*\r
+ Starts a new thread with priority "prio" that will begin its execution in the\r
+ function "thread()". The "arg" argument will be passed as an argument to the\r
+ thread() function. The id of the new thread is returned. Both the id and\r
+ the priority are system dependent.\r
+*/\r
+sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio)\r
+{\r
+xTaskHandle CreatedTask;\r
+int result;\r
+\r
+ if ( s_nextthread < SYS_THREAD_MAX )\r
+ {\r
+ result = xTaskCreate( thread, ( signed portCHAR * ) name, stacksize, arg, prio, &CreatedTask );\r
+\r
+ // For each task created, store the task handle (pid) in the timers array.\r
+ // This scheme doesn't allow for threads to be deleted\r
+ s_timeoutlist[s_nextthread++].pid = CreatedTask;\r
+\r
+ if(result == pdPASS)\r
+ {\r
+ return CreatedTask;\r
+ }\r
+ else\r
+ {\r
+ return NULL;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ return NULL;\r
+ }\r
+}\r
+\r
+/*\r
+ This optional function does a "fast" critical region protection and returns\r
+ the previous protection level. This function is only called during very short\r
+ critical regions. An embedded system which supports ISR-based drivers might\r
+ want to implement this function by disabling interrupts. Task-based systems\r
+ might want to implement this by using a mutex or disabling tasking. This\r
+ function should support recursive calls from the same task or interrupt. In\r
+ other words, sys_arch_protect() could be called while already protected. In\r
+ that case the return value indicates that it is already protected.\r
+\r
+ sys_arch_protect() is only required if your port is supporting an operating\r
+ system.\r
+*/\r
+sys_prot_t sys_arch_protect(void)\r
+{\r
+ vPortEnterCritical();\r
+ return 1;\r
+}\r
+\r
+/*\r
+ This optional function does a "fast" set of critical region protection to the\r
+ value specified by pval. See the documentation for sys_arch_protect() for\r
+ more information. This function is only required if your port is supporting\r
+ an operating system.\r
+*/\r
+void sys_arch_unprotect(sys_prot_t pval)\r
+{\r
+ ( void ) pval;\r
+ vPortExitCritical();\r
+}\r
+\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION ( 1 )\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION ( 1 )\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION ( 1 )\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION ( 1 )\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION ( 1 )\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION ( 1 )\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION ( 1 )\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
+\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 0\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
+\r
#define configUSE_PREEMPTION 1\r
#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 0\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
/* The SWI is used by the scheduler. */\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
* application requirements.\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
*\r
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r