From 43acaa41660f629f8c4463131c9fab25267ce48b Mon Sep 17 00:00:00 2001 From: dinau Date: Fri, 13 Sep 2013 21:59:11 +0900 Subject: [PATCH 1/2] LPC2368 [GCC_ARM]: Fixed: Compilation and link errors in case "SD" example. --- libraries/mbed/common/retarget.cpp | 7 +++++++ .../TARGET_NXP/TARGET_LPC23XX/TOOLCHAIN_GCC_ARM/LPC2368.ld | 1 + 2 files changed, 8 insertions(+) diff --git a/libraries/mbed/common/retarget.cpp b/libraries/mbed/common/retarget.cpp index 90a5dbe0e9..062602c511 100644 --- a/libraries/mbed/common/retarget.cpp +++ b/libraries/mbed/common/retarget.cpp @@ -439,13 +439,20 @@ extern "C" int __end__; #undef errno extern "C" int errno; +// For ARM7 only +register unsigned char * stack_ptr __asm ("sp"); + // Dynamic memory allocation related syscall. extern "C" caddr_t _sbrk(int incr) { static unsigned char* heap = (unsigned char*)&__end__; unsigned char* prev_heap = heap; unsigned char* new_heap = heap + incr; +#ifdef __get_MSP if (new_heap >= (unsigned char*)__get_MSP()) { +#else + if (new_heap >= stack_ptr) { +#endif errno = ENOMEM; return (caddr_t)-1; } diff --git a/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC23XX/TOOLCHAIN_GCC_ARM/LPC2368.ld b/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC23XX/TOOLCHAIN_GCC_ARM/LPC2368.ld index 9267d0ef86..503141fd5f 100644 --- a/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC23XX/TOOLCHAIN_GCC_ARM/LPC2368.ld +++ b/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC23XX/TOOLCHAIN_GCC_ARM/LPC2368.ld @@ -143,6 +143,7 @@ SECTIONS . = ALIGN( 8 ) ; __heap_start__ = . ; end = . ; + __end__ = . ; .stab 0 (NOLOAD) : { *(.stab) } .stabstr 0 (NOLOAD) : { *(.stabstr) } From efbc52465def222436e7e79f0c99880cd6273cfa Mon Sep 17 00:00:00 2001 From: dinau Date: Fri, 13 Sep 2013 21:59:20 +0900 Subject: [PATCH 2/2] LPC2368 [GCC_ARM]: Silence some warnings. --- .../targets/hal/TARGET_NXP/TARGET_LPC23XX/analogin_api.c | 2 +- .../targets/hal/TARGET_NXP/TARGET_LPC23XX/analogout_api.c | 2 +- .../targets/hal/TARGET_NXP/TARGET_LPC23XX/ethernet_api.c | 6 +++--- .../mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pinmap.c | 4 ++-- .../mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pwmout_api.c | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/analogin_api.c b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/analogin_api.c index caf8643a7a..0958fbaf7a 100644 --- a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/analogin_api.c +++ b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/analogin_api.c @@ -42,7 +42,7 @@ static const PinMap PinMap_ADC[] = { void analogin_init(analogin_t *obj, PinName pin) { obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC); - if (obj->adc == (uint32_t)NC) { + if (obj->adc == (ADCName)NC) { error("ADC pin mapping failed"); } diff --git a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/analogout_api.c b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/analogout_api.c index b7711815bf..1cb557cead 100644 --- a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/analogout_api.c +++ b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/analogout_api.c @@ -25,7 +25,7 @@ static const PinMap PinMap_DAC[] = { void analogout_init(dac_t *obj, PinName pin) { obj->dac = (DACName)pinmap_peripheral(pin, PinMap_DAC); - if (obj->dac == (uint32_t)NC) { + if (obj->dac == (DACName)NC) { error("DAC pin mapping failed"); } diff --git a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/ethernet_api.c b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/ethernet_api.c index f9c7a9a586..4b74b7295b 100644 --- a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/ethernet_api.c +++ b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/ethernet_api.c @@ -697,7 +697,7 @@ int ethernet_receive() { if(receive_idx == -1) { receive_idx = LPC_EMAC->RxConsumeIndex; } else { - while(!(rxstat[receive_idx].Info & RINFO_LAST_FLAG) && (receive_idx != LPC_EMAC->RxProduceIndex)) { + while(!(rxstat[receive_idx].Info & RINFO_LAST_FLAG) && ((uint32_t)receive_idx != LPC_EMAC->RxProduceIndex)) { receive_idx = rinc(receive_idx, NUM_RX_FRAG); } unsigned int info = rxstat[receive_idx].Info; @@ -713,7 +713,7 @@ int ethernet_receive() { LPC_EMAC->RxConsumeIndex = receive_idx; } - if(receive_idx == LPC_EMAC->RxProduceIndex) { + if((uint32_t)receive_idx == LPC_EMAC->RxProduceIndex) { receive_idx = -1; return 0; } @@ -762,7 +762,7 @@ int ethernet_read(char *data, int dlen) { void *pdst, *psrc; int doff = 0; - if(receive_idx == LPC_EMAC->RxProduceIndex || receive_idx == -1) { + if((uint32_t)receive_idx == LPC_EMAC->RxProduceIndex || receive_idx == -1) { return 0; } diff --git a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pinmap.c b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pinmap.c index ca82ec3576..84173661c9 100644 --- a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pinmap.c +++ b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pinmap.c @@ -17,7 +17,7 @@ #include "error.h" void pin_function(PinName pin, int function) { - if (pin == (uint32_t)NC) return; + if (pin == (PinName)NC) return; uint32_t pin_number = (uint32_t)pin - (uint32_t)P0_0; int index = pin_number >> 4; @@ -28,7 +28,7 @@ void pin_function(PinName pin, int function) { } void pin_mode(PinName pin, PinMode mode) { - if (pin == (uint32_t)NC) { return; } + if (pin == (PinName)NC) { return; } uint32_t pin_number = (uint32_t)pin - (uint32_t)P0_0; int index = pin_number >> 5; diff --git a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pwmout_api.c b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pwmout_api.c index 300bf49797..c6da85102d 100644 --- a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pwmout_api.c +++ b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC23XX/pwmout_api.c @@ -57,7 +57,7 @@ static unsigned int pwm_clock_mhz; void pwmout_init(pwmout_t* obj, PinName pin) { // determine the channel PWMName pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM); - if (pwm == (uint32_t)NC) + if (pwm == (PWMName)NC) error("PwmOut pin mapping failed"); obj->pwm = pwm;