]> 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 14:04:40 +0000 (14:04 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 18 Sep 2009 14:04:40 +0000 (14:04 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@852 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/Makefile
Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USB_ISR.c
Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/atmel-rom.ld
Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/syscalls.c [new file with mode: 0644]
Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/EMAC_ISR.c

index b68a7d8556f76b3084684c3b3ae84531bd296bc8..6eb83205e980cf1f1fb61b68d53af57a86ddf807 100644 (file)
@@ -105,7 +105,8 @@ THUMB_SOURCE= \
                $(RTOS_SOURCE_DIR)/tasks.c \\r
                $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_AT91SAM7S/port.c \\r
                $(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c \\r
-               ./USB/USBSample.c\r
+               ./USB/USBSample.c \\r
+               syscalls.c\r
 \r
 ARM_SOURCE= \\r
                $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_AT91SAM7S/portISR.c \\r
index 1f64aec6377a6c3095f7d3f48e24b71332f460e8..f2df80edaf8d1dedc733103347a795f5681b4a9d 100644 (file)
@@ -83,7 +83,7 @@ void vUSB_ISR_Wrapper( void ) __attribute__((naked));
  * Actual ISR handler.  This must be separate from the entry point as the stack\r
  * is used.\r
  */\r
-void vUSB_ISR_Handler( void );\r
+void vUSB_ISR_Handler( void ) __attribute__((noinline));\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -182,7 +182,7 @@ void vUSB_ISR_Wrapper( void )
 \r
        /* Call the handler itself.  This must be a separate function as it uses\r
        the stack. */\r
-       vUSB_ISR_Handler();\r
+       __asm volatile ("bl vUSB_ISR_Handler");\r
 \r
        /* Restore the context of the task that is going to \r
        execute next. This might not be the same as the originally \r
index db22b4acd93d5ef9fc48198633ccee440ac4a539..17139f7ae60bd056a32a5ddbbad605a5755f9c80 100644 (file)
@@ -36,6 +36,12 @@ SECTIONS
                *(.bss)\r
        } >ram\r
 \r
+       . = ALIGN(4);\r
+       .eh_frame :\r
+       {\r
+                KEEP (*(.eh_frame))\r
+       } > ram\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_AT91SAM7X256_Eclipse/RTOSDemo/syscalls.c b/Demo/ARM7_AT91SAM7X256_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 1d88c2f5b0d2e61ed29eea702f2876aad17ff372..f399b0e4d51fc52f03df6d039de27cb50d334cc9 100644 (file)
@@ -54,7 +54,7 @@ void vEMACISR_Wrapper( void ) __attribute__((naked));
 \r
 /* Handler called by the ISR wrapper.  This must be kept a separate\r
 function to ensure the stack frame is correctly set up. */\r
-void vEMACISR_Handler( void );\r
+void vEMACISR_Handler( void ) __attribute__((noinline));\r
 \r
 static xSemaphoreHandle xEMACSemaphore;\r
 \r
@@ -103,7 +103,7 @@ void vEMACISR_Wrapper( void )
        \r
        /* Call the handler task to do the actual work.  This must be a separate\r
        function to ensure the stack frame is correctly set up. */\r
-       vEMACISR_Handler();\r
+       __asm volatile ("bl vEMACISR_Handler");\r
        \r
        /* Restore the context of whichever task is the next to run. */\r
        portRESTORE_CONTEXT();\r