From 2453508f59071c79d1d7ed64b2e906ddc70f7a78 Mon Sep 17 00:00:00 2001 From: richardbarry Date: Fri, 18 Sep 2009 20:27:00 +0000 Subject: [PATCH] Update to use the latest Yagarto and change the C handler part of the interrupt routines to use the noinline attribute. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@854 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- .../RTOSDemo/FreeRTOSConfig.h | 2 +- Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile | 5 +- Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld | 4 + Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c | 162 ++++++++++++++++++ .../RTOSDemo/webserver/EMAC_ISR.c | 4 +- 5 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h index 95135242e..0ebc61d04 100644 --- a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h @@ -67,7 +67,7 @@ //#define configPINSEL2_VALUE 0x50151105 /* Value to use on rev 'A' and newer devices. */ -//#define configPINSEL2_VALUE 0x50150105 +#define configPINSEL2_VALUE 0x50150105 #ifndef configPINSEL2_VALUE #error Please uncomment one of the two configPINSEL2_VALUE definitions above, depending on the revision of the LPC2000 device being used. diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile index 07b4291b6..e6d95ec0f 100644 --- a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile @@ -77,7 +77,7 @@ CFLAGS= $(DEBUG) \ -D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\) \ -fomit-frame-pointer \ -mthumb-interwork - + THUMB_SOURCE= \ main.c \ ./ParTest/ParTest.c \ @@ -103,7 +103,8 @@ THUMB_SOURCE= \ $(RTOS_SOURCE_DIR)/queue.c \ $(RTOS_SOURCE_DIR)/tasks.c \ $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx/port.c \ - $(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c + $(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c \ + syscalls.c ARM_SOURCE= \ $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_LPC23xx/portISR.c \ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld index 98dec1aaa..f447e1601 100644 --- a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/lpc2368.ld @@ -8,8 +8,10 @@ MEMORY __stack_end__ = 0x40000000 + 32K - 4; + SECTIONS { + . = 0; startup : { *(.startup)} >flash @@ -20,6 +22,7 @@ SECTIONS *(.rodata*) *(.glue_7) *(.glue_7t) + KEEP(*(.eh_frame)) } >flash __end_of_text__ = .; @@ -38,6 +41,7 @@ SECTIONS *(.bss) } >ram + /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. */ diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c new file mode 100644 index 000000000..5dff88128 --- /dev/null +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/syscalls.c @@ -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 +#include +#include +#include +#include + +/***************************************************************************/ + +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 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 ***/ + + diff --git a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c index 20561d4a3..6d7b55310 100644 --- a/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c +++ b/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/EMAC_ISR.c @@ -6,7 +6,7 @@ void vEMAC_ISR_Wrapper( void ) __attribute__((naked)); /* The handler that does the actual work. */ -void vEMAC_ISR_Handler( void ); +void vEMAC_ISR_Handler( void ) __attribute__((noinline)); extern xSemaphoreHandle xEMACSemaphore; @@ -37,7 +37,7 @@ void vEMAC_ISR_Wrapper( void ) /* Call the handler. This must be a separate function unless you can guarantee that no stack will be used. */ - vEMAC_ISR_Handler(); + __asm volatile ( "bl vEMAC_ISR_Handler" ); /* Restore the context of whichever task is going to run next. */ portRESTORE_CONTEXT(); -- 2.39.5