diff --git a/cpu/arm/aducrf101/Common/IAR/startup_ADuCRF101.s b/cpu/arm/aducrf101/Common/IAR/startup_ADuCRF101.S similarity index 99% rename from cpu/arm/aducrf101/Common/IAR/startup_ADuCRF101.s rename to cpu/arm/aducrf101/Common/IAR/startup_ADuCRF101.S index 2e3f07a75..bafd5e26e 100644 --- a/cpu/arm/aducrf101/Common/IAR/startup_ADuCRF101.s +++ b/cpu/arm/aducrf101/Common/IAR/startup_ADuCRF101.S @@ -171,7 +171,7 @@ __vector_table THUMB - SECTION .text:CODE:REORDER(1) + SECTION .text:CODE:REORDER:NOROOT(1) Nmi_Handler Fault_Handler MemManage_Handler diff --git a/cpu/arm/aducrf101/Makefile.aducrf101 b/cpu/arm/aducrf101/Makefile.aducrf101 index 337da3385..350e89ab8 100644 --- a/cpu/arm/aducrf101/Makefile.aducrf101 +++ b/cpu/arm/aducrf101/Makefile.aducrf101 @@ -36,51 +36,12 @@ CONTIKI_CPU = $(CONTIKI)/cpu/arm/aducrf101 -CROSS_COMPILE = arm-none-eabi- - -CC = $(CROSS_COMPILE)gcc -LD = $(CROSS_COMPILE)gcc -AS = $(CROSS_COMPILE)gcc -AR = $(CROSS_COMPILE)ar -NM = $(CROSS_COMPILE)nm -OBJCOPY = $(CROSS_COMPILE)objcopy -OBJDUMP = $(CROSS_COMPILE)objdump -STRIP = $(CROSS_COMPILE)strip - -CFLAGS_OPT ?= -Os -CFLAGS_DEBUG ?= -ggdb3 -fomit-frame-pointer -CFLAGS += $(CFLAGS_OPT) $(CFLAGS_DEBUG) -CFLAGS += -std=gnu99 -CFLAGS += -ffreestanding -mcpu=cortex-m3 -mthumb -mno-thumb-interwork -CFLAGS += -ffunction-sections -fdata-sections -fno-common -fno-builtin -CFLAGS += -flto - -ifdef WERROR - CFLAGS += -Wall -Werror - # These warnings are triggered by existing Contiki code - CFLAGS += -Wno-error=pointer-sign - CFLAGS += -Wno-error=char-subscripts - CFLAGS += -Wno-error=unused-variable - CFLAGS += -Wno-error=unused-but-set-variable +ifdef IAR +include $(CONTIKI_CPU)/Makefile.aducrf101.iar +else +include $(CONTIKI_CPU)/Makefile.aducrf101.gnu endif -# UIP code does not follow C aliasing rules -CFLAGS += -fno-strict-aliasing - -LDFLAGS = $(CFLAGS) -LDFLAGS += -specs=nosys.specs -nostartfiles - -# TODO: When it becomes more commonly available, switch to newlib-nano -# for significant size reduction, by uncommenting this: -# LDFLAGS += -specs=nano.specs - -LDFLAGS += -Wl,--gc-sections -LDFLAGS += -Wl,-T$(CONTIKI_CPU)/Common/GCC/ADuCRF101.ld - -# Compiler-specific startup code -CONTIKI_CPU_DIRS += Common/GCC -CONTIKI_SOURCEFILES += crt0.S - ifdef SERIAL_ID CFLAGS += -DSERIAL_ID='$(SERIAL_ID)' endif @@ -113,8 +74,6 @@ CONTIKI_CPU_DIRS += Common CONTIKI_SOURCEFILES += system_ADuCRF101.c CONTIKI_SOURCEFILES += radioeng.c -ASFLAGS += -c $(CFLAGS) - ifdef CORE .PHONY: symbols.c symbols.h symbols.c symbols.h: @@ -127,6 +86,3 @@ symbols.c symbols.h: endif contiki-$(TARGET).a: ${addprefix $(OBJECTDIR)/,symbols.o} - -%.hex: % - $(OBJCOPY) -O ihex $^ $@ diff --git a/cpu/arm/aducrf101/Makefile.aducrf101.gnu b/cpu/arm/aducrf101/Makefile.aducrf101.gnu new file mode 100644 index 000000000..93de277a2 --- /dev/null +++ b/cpu/arm/aducrf101/Makefile.aducrf101.gnu @@ -0,0 +1,86 @@ +# -*- makefile -*- + +# Copyright (c) 2014, Analog Devices, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted (subject to the limitations in the +# disclaimer below) provided that the following conditions are met: +# +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# - 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. +# +# - Neither the name of Analog Devices, Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE +# GRANTED BY THIS LICENSE. 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. + +# Author: Jim Paris + +CROSS_COMPILE = arm-none-eabi- + +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)gcc +AS = $(CROSS_COMPILE)gcc +AR = $(CROSS_COMPILE)ar +NM = $(CROSS_COMPILE)nm +OBJCOPY = $(CROSS_COMPILE)objcopy +OBJDUMP = $(CROSS_COMPILE)objdump +STRIP = $(CROSS_COMPILE)strip + +CFLAGS_OPT ?= -Os +CFLAGS_DEBUG ?= -ggdb3 -fomit-frame-pointer +CFLAGS += $(CFLAGS_OPT) $(CFLAGS_DEBUG) +CFLAGS += -std=gnu99 +CFLAGS += -ffreestanding -mcpu=cortex-m3 -mthumb -mno-thumb-interwork +CFLAGS += -ffunction-sections -fdata-sections -fno-common -fno-builtin +CFLAGS += -flto + +ifdef WERROR + CFLAGS += -Wall -Werror + # These warnings are triggered by existing Contiki code + CFLAGS += -Wno-error=pointer-sign + CFLAGS += -Wno-error=char-subscripts + CFLAGS += -Wno-error=unused-variable + CFLAGS += -Wno-error=unused-but-set-variable +endif + +# UIP code does not follow C aliasing rules +CFLAGS += -fno-strict-aliasing + +LDFLAGS = $(CFLAGS) +LDFLAGS += -specs=nosys.specs -nostartfiles + +# TODO: When it becomes more commonly available, switch to newlib-nano +# for significant size reduction, by uncommenting this: +# LDFLAGS += -specs=nano.specs + +LDFLAGS += -Wl,--gc-sections +LDFLAGS += -Wl,-T$(CONTIKI_CPU)/Common/GCC/ADuCRF101.ld + +ASFLAGS += -c $(CFLAGS) + +# Compiler-specific startup code +CONTIKI_CPU_DIRS += Common/GCC +CONTIKI_SOURCEFILES += crt0.S + +# Rules +%.hex: % + $(OBJCOPY) -O ihex $^ $@ \ No newline at end of file diff --git a/cpu/arm/aducrf101/Makefile.aducrf101.iar b/cpu/arm/aducrf101/Makefile.aducrf101.iar new file mode 100644 index 000000000..08f46be85 --- /dev/null +++ b/cpu/arm/aducrf101/Makefile.aducrf101.iar @@ -0,0 +1,94 @@ +# -*- makefile -*- + +# Copyright (c) 2014, Analog Devices, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted (subject to the limitations in the +# disclaimer below) provided that the following conditions are met: +# +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# - 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. +# +# - Neither the name of Analog Devices, Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE +# GRANTED BY THIS LICENSE. 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. + +# Author: Jim Paris + +# Filename quoting here is very tricky, and probably depends on which Windows +# build of "make" is being used. This works for mingw32-make. + +ifeq ($(IAR_PATH),) + IAR_SUBPATH := $(shell ls "${PROGRAMFILES}\IAR Systems" 2>/dev/null | tail -1) + ifeq ($(IAR_SUBPATH),) + define iar_error + +Unable to find the IAR installation path. Please specify IAR_PATH. +For example: $(MAKE) IAR_PATH="C:\\Program Files (x86)\\IAR Systems\\Embedded Workbench 7.0\\arm" + endef + $(error $(iar_error)) + endif + IAR_PATH := ${PROGRAMFILES}\IAR Systems\${IAR_SUBPATH}\arm +endif + +CC := "$(IAR_PATH)""\\bin\iccarm" +LD := "$(IAR_PATH)""\\bin\ilinkarm" +AS := "$(IAR_PATH)""\\bin\iasmarm" +AR := "$(IAR_PATH)""\\bin\iarchive" +OBJCOPY := "$(IAR_PATH)""\\bin\ielftool" + +CFLAGS += -Ohz +CFLAGS += --silent +CFLAGS += --debug +CFLAGS += --endian=little +CFLAGS += --cpu=Cortex-M3 +CFLAGS += -I"$(IAR_PATH)""\\inc" +CFLAGS += -D__ICCARM__ + +AROPTS = --create +ASFLAGS = -S -s+ -w+ --cpu Cortex-M3 + +LDFLAGS += --config $(CONTIKI_CPU)/Common/IAR/ADUCRF101.icf + +# Compiler-specific startup code +CONTIKI_CPU_DIRS += Common/IAR +CONTIKI_SOURCEFILES += startup_ADuCRF101.S + +# Rules + +CUSTOM_RULE_C_TO_OBJECTDIR_O = 1 +$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR) + $(TRACE_CC) + $(Q)$(CC) $(CFLAGS) $< --dependencies=m $(@:.o=.d) -o $@ + +CUSTOM_RULE_C_TO_O = 1 +%.co: %.c + $(TRACE_CC) + $(Q)$(CC) $(CFLAGS) $< -o $@ + +CUSTOM_RULE_C_TO_CO = 1 +%.co: %.c + $(TRACE_CC) + $(Q)$(CC) $(CFLAGS) -DAUTOSTART_ENABLE $< -o $@ + +%.hex: % + $(OBJCOPY) --silent --ihex $^ $@ diff --git a/cpu/arm/aducrf101/clock.c b/cpu/arm/aducrf101/clock.c index 7f18c0106..18e6f7dac 100644 --- a/cpu/arm/aducrf101/clock.c +++ b/cpu/arm/aducrf101/clock.c @@ -43,9 +43,6 @@ static volatile clock_time_t current_clock = 0; static volatile unsigned long current_seconds = 0; static unsigned int second_countdown = CLOCK_SECOND; -void -SysTick_handler(void) __attribute__ ((interrupt)); - void SysTick_Handler(void) { diff --git a/cpu/arm/aducrf101/dev/uart.c b/cpu/arm/aducrf101/dev/uart.c index 350820a50..569e54fdd 100644 --- a/cpu/arm/aducrf101/dev/uart.c +++ b/cpu/arm/aducrf101/dev/uart.c @@ -35,7 +35,6 @@ * \author Jim Paris */ -#include #include static int (*uart_input_handler)(unsigned char c); @@ -105,7 +104,7 @@ _write(int fd, const void *buf, size_t len) return -1; } - if(fd == STDOUT_FILENO || fd == STDERR_FILENO) { + if(fd == 1 || fd == 2) { int n = len; const unsigned char *p = buf; while(n--) @@ -114,3 +113,12 @@ _write(int fd, const void *buf, size_t len) } return -1; } +/*---------------------------------------------------------------------------*/ +#ifdef __ICCARM__ +/* Connect IAR's __write function to the UART. */ +size_t +__write(int fd, const unsigned char *buf, size_t count) +{ + return _write(fd, buf, count); +} +#endif diff --git a/platform/ev-aducrf101mkxz/contiki-main.c b/platform/ev-aducrf101mkxz/contiki-main.c index 0dd4dee18..134380501 100644 --- a/platform/ev-aducrf101mkxz/contiki-main.c +++ b/platform/ev-aducrf101mkxz/contiki-main.c @@ -37,7 +37,6 @@ #include #include -#include #include #include "contiki.h"