git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@18 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2007-09-22 14:10:02 +00:00
parent b389116a6f
commit cfdef89c71
6 changed files with 78 additions and 27 deletions

View File

@ -61,15 +61,20 @@ UDEFS =
# Define ASM defines here # Define ASM defines here
UADEFS = UADEFS =
# List C source files here # List ARM-mode C source files here
SRC = chcore.c buzzer.c main.c \ ASRC = chcore.c main.c buzzer.c \
../../ports/ARM7-LPC214x/GCC/lpc214x_serial.c \ ../../ports/ARM7-LPC214x/GCC/lpc214x_serial.c \
../../src/chinit.c ../../src/chdelta.c ../../src/chschd.c ../../src/chthreads.c \ ../../src/chinit.c ../../src/chdelta.c ../../src/chschd.c ../../src/chthreads.c \
../../src/chsem.c ../../src/chevents.c ../../src/chmsg.c ../../src/chsleep.c \ ../../src/chsem.c ../../src/chevents.c ../../src/chmsg.c ../../src/chsleep.c \
../../src/chqueues.c ../../src/chserial.c ../../src/chqueues.c ../../src/chserial.c
# List THUMB-mode C sources here
# NOTE: If any module is compiled in thumb mode then -mthumb-interwork is
# enabled for all modules and that lowers performance.
TSRC =
# List ASM source files here # List ASM source files here
ASRC = crt0.s chcore2.s ASMSRC = crt0.s chcore2.s
# List all user directories here # List all user directories here
UINCDIR = ../../src/include ../../ports/ARM7-LPC214x/GCC UINCDIR = ../../src/include ../../ports/ARM7-LPC214x/GCC
@ -80,12 +85,18 @@ ULIBDIR =
# List all user libraries here # List all user libraries here
ULIBS = ULIBS =
# Define optimisation level here # ARM-specific options here
# NOTE: -mthumb-interwork increases the code size, remove it if you don't really need it. AOPT =
# THUMB-specific options here
TOPT = -mthumb -D THUMB
# Common options here
# NOTE: -mthumb-interwork increases the code size, remove it if you dont have
# Thumb code anywhere in the project.
# NOTE: -ffixed-f7 is only needed if you enabled CH_CURRP_REGISTER_CACHE in chconf.h. # NOTE: -ffixed-f7 is only needed if you enabled CH_CURRP_REGISTER_CACHE in chconf.h.
#OPT = -Os -ggdb -fomit-frame-pointer -fno-strict-aliasing
#OPT = -O0 -ggdb -fomit-frame-pointer -fno-strict-aliasing
OPT = -O2 -ggdb -fomit-frame-pointer -fno-strict-aliasing OPT = -O2 -ggdb -fomit-frame-pointer -fno-strict-aliasing
#OPT += -ffixed-f7
# Define warning options here # Define warning options here
WARN = -Wall -Wstrict-prototypes WARN = -Wall -Wstrict-prototypes
@ -98,33 +109,44 @@ INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR))
LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR))
DEFS = $(DDEFS) $(UDEFS) DEFS = $(DDEFS) $(UDEFS)
ADEFS = $(DADEFS) $(UADEFS) ADEFS = $(DADEFS) $(UADEFS)
OBJS = $(ASRC:.s=.o) $(SRC:.c=.o) AOBJS = $(ASRC:.c=.o)
TOBJS = $(TSRC:.c=.o)
OBJS = $(ASMOBJS) $(AOBJS) $(TOBJS)
ASMOBJS = $(ASMSRC:.s=.o)
LIBS = $(DLIBS) $(ULIBS) LIBS = $(DLIBS) $(ULIBS)
MCFLAGS = -mcpu=$(MCU) MCFLAGS = -mcpu=$(MCU)
#ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(<:.s=.lst) $(ADEFS)
ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(<:.s=.lst) $(ADEFS) ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(<:.s=.lst) $(ADEFS)
CPFLAGS = $(MCFLAGS) $(OPT) $(WARN) -fverbose-asm -Wa,-ahlms=$(<:.c=.lst) $(DEFS) CPFLAGS = $(MCFLAGS) $(OPT) $(WARN) -fverbose-asm -Wa,-ahlms=$(<:.c=.lst) $(DEFS)
LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR) LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR)
ODFLAGS = -x --syms ODFLAGS = -x --syms
ifneq ($(TSRC),)
ASFLAGS += -mthumb-interwork -D THUMB_INTERWORK
CPFLAGS += -mthumb-interwork -D THUMB_INTERWORK
LDFLAGS += -mthumb-interwork
endif
# Generate dependency information # Generate dependency information
CPFLAGS += -MD -MP -MF .dep/$(@F).d CPFLAGS += -MD -MP -MF .dep/$(@F).d
# #
# makefile rules # Makefile rules
# #
all: $(OBJS) $(PROJECT).elf $(PROJECT).hex $(PROJECT).bin $(PROJECT).dmp all: $(OBJS) $(PROJECT).elf $(PROJECT).hex $(PROJECT).bin $(PROJECT).dmp
%o : %c $(AOBJS) : %.o : %.c
$(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ $(CC) -c $(CPFLAGS) $(AOPT) -I . $(INCDIR) $< -o $@
%o : %s $(TOBJS) : %.o : %.c
$(CC) -c $(CPFLAGS) $(TOPT) -I . $(INCDIR) $< -o $@
$(ASMOBJS) : %.o : %.s
$(AS) -c $(ASFLAGS) $< -o $@ $(AS) -c $(ASFLAGS) $< -o $@
%elf: $(OBJS) %elf: $(OBJS)
$(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ $(CC) $(ASMOBJS) $(AOBJS) $(TOBJS) $(LDFLAGS) $(LIBS) -o $@
%hex: %elf %hex: %elf
$(HEX) $< $@ $(HEX) $< $@
@ -142,10 +164,12 @@ clean:
-rm -f $(PROJECT).map -rm -f $(PROJECT).map
-rm -f $(PROJECT).hex -rm -f $(PROJECT).hex
-rm -f $(PROJECT).bin -rm -f $(PROJECT).bin
-rm -f $(SRC:.c=.c.bak) -rm -f $(ASRC:.c=.c.bak)
-rm -f $(SRC:.c=.lst) -rm -f $(ASRC:.c=.lst)
-rm -f $(ASRC:.s=.s.bak) -rm -f $(TSRC:.c=.c.bak)
-rm -f $(ASRC:.s=.lst) -rm -f $(TSRC:.c=.lst)
-rm -f $(ASMSRC:.s=.s.bak)
-rm -f $(ASMSRC:.s=.lst)
-rm -fR .dep -rm -fR .dep
# #

View File

@ -76,9 +76,13 @@ typedef struct {
} }
#endif #endif
#ifdef THUMB
extern void chSysLock(void);
extern void chSysUnlock(void);
#else /* !THUMB */
#define chSysLock() asm("msr CPSR_c, #0x9F") #define chSysLock() asm("msr CPSR_c, #0x9F")
#define chSysUnlock() asm("msr CPSR_c, #0x1F") #define chSysUnlock() asm("msr CPSR_c, #0x1F")
#endif /* THUMB */
#define INT_REQUIRED_STACK 0x40 // Must include registers and stack frames. #define INT_REQUIRED_STACK 0x40 // Must include registers and stack frames.

View File

@ -55,21 +55,41 @@ DefIrqHandler:
FiqHandler: FiqHandler:
b FiqHandler b FiqHandler
#ifdef THUMB_INTERWORK
.globl chSysLock
chSysLock:
msr CPSR_c, #0x9F
bx lr
.globl chSysUnlock
chSysUnlock:
msr CPSR_c, #0x1F
bx lr
#endif
.globl chSysSwitchI .globl chSysSwitchI
chSysSwitchI: chSysSwitchI:
#ifdef MK_CURRP_REGISTER_CACHE #ifdef CH_CURRP_REGISTER_CACHE
stmfd sp!, {r4, r5, r6, r8, r9, r10, r11, lr} stmfd sp!, {r4, r5, r6, r8, r9, r10, r11, lr}
str sp, [r0, #0] str sp, [r0, #0]
ldr sp, [r1, #0] ldr sp, [r1, #0]
#ifdef THUMB_INTERWORK
ldmfd sp!, {r4, r5, r6, r8, r9, r10, r11, lr} ldmfd sp!, {r4, r5, r6, r8, r9, r10, r11, lr}
bx lr bx lr
#else
ldmfd sp!, {r4, r5, r6, r8, r9, r10, r11, pc}
#endif
#else #else
stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
str sp, [r0, #0] str sp, [r0, #0]
ldr sp, [r1, #0] ldr sp, [r1, #0]
#ifdef THUMB_INTERWORK
ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
bx lr bx lr
#else
ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
#endif #endif
#endif /* CH_CURRP_REGISTER_CACHE */
/* /*
* System stack frame structure after a context switch in the * System stack frame structure after a context switch in the

View File

@ -63,7 +63,6 @@ static t_msg Thread3(void *arg) {
if (!(IO0PIN & 0x00010000)) // Button 2 if (!(IO0PIN & 0x00010000)) // Button 2
chFDDWrite(&COM1, (BYTE8 *)"Hello World!\r\n", 14); chFDDWrite(&COM1, (BYTE8 *)"Hello World!\r\n", 14);
chThdSleep(500); chThdSleep(500);
} }
return 0; return 0;
} }
@ -71,9 +70,9 @@ static t_msg Thread3(void *arg) {
int main(int argc, char **argv) { int main(int argc, char **argv) {
chSysInit(); chSysInit();
chThdCreate(NORMALPRIO + 1, 0, waThread1, sizeof(waThread1), Thread1, NULL); chThdCreate(NORMALPRIO, 0, waThread1, sizeof(waThread1), Thread1, NULL);
chThdCreate(NORMALPRIO + 1, 0, waThread2, sizeof(waThread2), Thread2, NULL); chThdCreate(NORMALPRIO, 0, waThread2, sizeof(waThread2), Thread2, NULL);
chThdCreate(NORMALPRIO + 1, 0, waThread3, sizeof(waThread3), Thread3, NULL); chThdCreate(NORMALPRIO, 0, waThread3, sizeof(waThread3), Thread3, NULL);
chSysPause(); chSysPause();
return 0; return 0;
} }

View File

@ -4,7 +4,7 @@
# Project related configuration options # Project related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
PROJECT_NAME = ChibiOS/RT PROJECT_NAME = ChibiOS/RT
PROJECT_NUMBER = "0.1.1 alpha" PROJECT_NUMBER = "0.2.0 alpha"
OUTPUT_DIRECTORY = . OUTPUT_DIRECTORY = .
CREATE_SUBDIRS = NO CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English OUTPUT_LANGUAGE = English

View File

@ -30,6 +30,10 @@ LPC214x-GCC - ChibiOS/RT port for ARM7 LPC2148, the demo targets the
*** Releases *** *** Releases ***
***************************************************************************** *****************************************************************************
*** 0.2.0 ***
- Introduced support for ARM in thumb mode.
- Minor fixes to the ARM demo.
*** 0.1.1 *** *** 0.1.1 ***
- Some fixes into the documentation - Some fixes into the documentation
- Renamed makefiles to Makefiles, upper case M. - Renamed makefiles to Makefiles, upper case M.