]> git.sur5r.net Git - freertos/commitdiff
Update to use the latest Yagarto and change the C handler part of the interrupt routi...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 18 Sep 2009 20:27:00 +0000 (20:27 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 18 Sep 2009 20:27:00 +0000 (20:27 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@854 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h
Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile
Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld
Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c

index 95135242e917c57cf5331715cb3f0839ec0dff52..0ebc61d0419474f6fa21dd06a7e950ffb96f5124 100644 (file)
@@ -67,7 +67,7 @@
 //#define configPINSEL2_VALUE  0x50151105\r
 \r
 /* Value to use on rev 'A' and newer devices. */\r
-//#define configPINSEL2_VALUE  0x50150105\r
+#define configPINSEL2_VALUE    0x50150105\r
 \r
 #ifndef configPINSEL2_VALUE\r
        #error Please uncomment one of the two configPINSEL2_VALUE definitions above, depending on the revision of the LPC2000 device being used.\r
index 07b4291b6067d4b8b706cce9bdc2ec546afea37d..e6d95ec0fad1c0cf2ceb43bdc6769bb884342a4c 100644 (file)
@@ -77,7 +77,7 @@ CFLAGS= $(DEBUG) \
                -D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\) \\r
                -fomit-frame-pointer \\r
                -mthumb-interwork\r
-                                                                               \r
+               \r
 THUMB_SOURCE= \\r
                main.c \\r
                ./ParTest/ParTest.c \\r
@@ -103,7 +103,8 @@ THUMB_SOURCE= \
                $(RTOS_SOURCE_DIR)/queue.c \\r
                $(RTOS_SOURCE_DIR)/tasks.c \\r
                $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx/port.c \\r
-               $(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c\r
+               $(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c \\r
+               syscalls.c\r
 \r
 ARM_SOURCE= \\r
                $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx/portISR.c \\r
index 98dec1aaaff2f978b2ccf90fb6e689b886b7aa2a..f447e16017e4ecfab1c90fa15e760e8aa60bcc4f 100644 (file)
@@ -8,8 +8,10 @@ MEMORY
 \r
 __stack_end__ = 0x40000000 + 32K - 4;\r
 \r
+\r
 SECTIONS \r
 {\r
+\r
        . = 0;\r
        startup : { *(.startup)} >flash\r
 \r
@@ -20,6 +22,7 @@ SECTIONS
                *(.rodata*)\r
                *(.glue_7)\r
                *(.glue_7t)\r
+               KEEP(*(.eh_frame))              \r
        } >flash\r
 \r
        __end_of_text__ = .;\r
@@ -38,6 +41,7 @@ SECTIONS
                *(.bss)\r
        } >ram\r
 \r
+       \r
        /* Align here to ensure that the .bss section occupies space up to\r
        _end.  Align after .bss to ensure correct alignment even if the\r
        .bss section disappears because there are no input sections.  */\r
diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c
new file mode 100644 (file)
index 0000000..5dff881
--- /dev/null
@@ -0,0 +1,162 @@
+/****************************************************************************
+*  Copyright (c) 2009 by Michael Fischer. All rights reserved.
+*
+*  Redistribution and use in source and binary forms, with or without 
+*  modification, are permitted provided that the following conditions 
+*  are met:
+*  
+*  1. Redistributions of source code must retain the above copyright 
+*     notice, this list of conditions and the following disclaimer.
+*  2. Redistributions in binary form must reproduce the above copyright
+*     notice, this list of conditions and the following disclaimer in the 
+*     documentation and/or other materials provided with the distribution.
+*  3. Neither the name of the author nor the names of its contributors may 
+*     be used to endorse or promote products derived from this software 
+*     without specific prior written permission.
+*
+*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+*  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+*  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
+*  THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+*  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+*  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+*  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
+*  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+*  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 
+*  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
+*  SUCH DAMAGE.
+*
+****************************************************************************
+*  History:
+*
+*  28.03.09  mifi   First Version, based on the original syscall.c from
+*                   newlib version 1.17.0
+****************************************************************************/
+
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+/***************************************************************************/
+
+int _read_r (struct _reent *r, int file, char * ptr, int len)
+{
+  r = r;
+  file = file;
+  ptr = ptr;
+  len = len;
+  
+  errno = EINVAL;
+  return -1;
+}
+
+/***************************************************************************/
+
+int _lseek_r (struct _reent *r, int file, int ptr, int dir)
+{
+  r = r;
+  file = file;
+  ptr = ptr;
+  dir = dir;
+  
+  return 0;
+}
+
+/***************************************************************************/
+
+int _write_r (struct _reent *r, int file, char * ptr, int len)
+{  
+  r = r;
+  file = file;
+  ptr = ptr;
+
+#if 0
+  int index;
+  
+  /* For example, output string by UART */
+  for(index=0; index<len; index++)
+  {
+    if (ptr[index] == '\n')
+    {
+      uart_putc('\r');
+    }  
+
+    uart_putc(ptr[index]);
+  }  
+#endif   
+  
+  return len;
+}
+
+/***************************************************************************/
+
+int _close_r (struct _reent *r, int file)
+{
+  return 0;
+}
+
+/***************************************************************************/
+
+/* Register name faking - works in collusion with the linker.  */
+register char * stack_ptr asm ("sp");
+
+caddr_t _sbrk_r (struct _reent *r, int incr)
+{
+  extern char   end asm ("end"); /* Defined by the linker.  */
+  static char * heap_end;
+  char *        prev_heap_end;
+
+  if (heap_end == NULL)
+    heap_end = & end;
+  
+  prev_heap_end = heap_end;
+  
+  if (heap_end + incr > stack_ptr)
+  {
+      /* Some of the libstdc++-v3 tests rely upon detecting
+        out of memory errors, so do not abort here.  */
+#if 0
+      extern void abort (void);
+
+      _write (1, "_sbrk: Heap and stack collision\n", 32);
+      
+      abort ();
+#else
+      errno = ENOMEM;
+      return (caddr_t) -1;
+#endif
+  }
+  
+  heap_end += incr;
+
+  return (caddr_t) prev_heap_end;
+}
+
+/***************************************************************************/
+
+int _fstat_r (struct _reent *r, int file, struct stat * st)
+{
+  r = r; 
+  file = file;
+   
+  memset (st, 0, sizeof (* st));
+  st->st_mode = S_IFCHR;
+  return 0;
+}
+
+/***************************************************************************/
+
+int _isatty_r(struct _reent *r, int fd)
+{
+  r = r;
+  fd = fd;
+   
+  return 1;
+}
+
+/*** EOF ***/
+
+
index 20561d4a35a7de3eff51b88296642cc2e418a346..6d7b5531088ac9a23badbdf8d42ae1ae2851f6a0 100644 (file)
@@ -6,7 +6,7 @@
 void vEMAC_ISR_Wrapper( void ) __attribute__((naked));\r
 \r
 /* The handler that does the actual work. */\r
-void vEMAC_ISR_Handler( void );\r
+void vEMAC_ISR_Handler( void ) __attribute__((noinline));\r
 \r
 extern xSemaphoreHandle xEMACSemaphore;\r
 \r
@@ -37,7 +37,7 @@ void vEMAC_ISR_Wrapper( void )
     \r
     /* Call the handler.  This must be a separate function unless you can\r
     guarantee that no stack will be used. */\r
-    vEMAC_ISR_Handler();\r
+    __asm volatile ( "bl vEMAC_ISR_Handler" );\r
     \r
     /* Restore the context of whichever task is going to run next. */\r
     portRESTORE_CONTEXT();\r