Add logic to init global data on bootup

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@473 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2007-12-31 19:05:45 +00:00
parent b6f43e7144
commit c2c6b55515
5 changed files with 65 additions and 19 deletions

7
TODO
View File

@ -17,7 +17,7 @@ NuttX TODO List (Last updated December 13, 2007)
(0) ARM/C5471 (arch/arm/src/c5471/) (0) ARM/C5471 (arch/arm/src/c5471/)
(1) ARM/DM320 (arch/arm/src/dm320/) (1) ARM/DM320 (arch/arm/src/dm320/)
(2) ARM/LPC214x (arch/arm/src/lpc214x/) (2) ARM/LPC214x (arch/arm/src/lpc214x/)
(3) pjrc-8052 / MCS51 (arch/pjrc-8051/) (4) pjrc-8052 / MCS51 (arch/pjrc-8051/)
(0) z80 (arch/z80/) (0) z80 (arch/z80/)
o Task/Scheduler (sched/) o Task/Scheduler (sched/)
@ -306,6 +306,11 @@ o pjrc-8052 / MCS51 (arch/pjrc-8051/)
Status: Open Status: Open
Priority: Medium Priority: Medium
Description Global data is not being initialized. Logic like that of SDCCs
crt0*.s needs to be incorporated into the system boot logic
Status: Open
Priority: Low -- only because there as so many other issues with 8051
o z80 (arch/z80) o z80 (arch/z80)
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^

View File

@ -126,12 +126,8 @@ $(COBJS): %$(OBJEXT): %.c
$(SDCCLIBDIR)/myz80.lib: $(SDCCLIBDIR)/$(SDCCLIB) $(SDCCLIBDIR)/myz80.lib: $(SDCCLIBDIR)/$(SDCCLIB)
@cat $(SDCCLIBDIR)/$(SDCCLIB) | \ @cat $(SDCCLIBDIR)/$(SDCCLIB) | \
grep -v calloc | grep -v malloc | grep -v realloc | \ grep -v alloc | grep -v free | grep -v printf | \
grep -v free | grep -v getenv | grep -v vprintf | \ grep -v _str | grep -v _mem | grep -v crt0\.o \
grep -v sprintf | grep -v _strncpy | grep -v _strchr | \
grep -v _strlen | grep -v _strcmp | grep -v _strcpy | \
grep -v _memcmp | grep -v _memcpy | grep -v _memset | \
grep -v crt0 \
> myz80.lib > myz80.lib
@sudo mv -f myz80.lib $(SDCCLIBDIR)/myz80.lib @sudo mv -f myz80.lib $(SDCCLIBDIR)/myz80.lib
@ -149,6 +145,13 @@ up_mem.h:
@echo "#endif /* __ARCH_MEM_H */" >>up_mem.h @echo "#endif /* __ARCH_MEM_H */" >>up_mem.h
asm_mem.h: asm_mem.h:
@echo " UP_COMPILER_OTHER == 0" > asm_mem.h
@echo " UP_COMPILER_SDCC == 1" >> asm_mem.h
ifeq ($(CC),sdcc)
@echo " UP_COMPILER == 1" >> asm_mem.h
else
@echo " UP_COMPILER == 0" >> asm_mem.h
endif
@echo " UP_STACK_END == ($(CONFIG_DRAM_SIZE) - 1)" >> asm_mem.h @echo " UP_STACK_END == ($(CONFIG_DRAM_SIZE) - 1)" >> asm_mem.h
@echo " UP_STACK_BASE == (UP_STACK_END - $(CONFIG_PROC_STACK_SIZE))" >> asm_mem.h @echo " UP_STACK_BASE == (UP_STACK_END - $(CONFIG_PROC_STACK_SIZE))" >> asm_mem.h
@echo " UP_HEAP1_END == (UP_STACK_END - $(CONFIG_PROC_STACK_SIZE) - 1)" >> asm_mem.h @echo " UP_HEAP1_END == (UP_STACK_END - $(CONFIG_PROC_STACK_SIZE) - 1)" >> asm_mem.h
@ -170,7 +173,8 @@ board/libboard$(LIBEXT):
# This target builds the final executable # This target builds the final executable
pass1.ihx: up_mem.h asm_mem.h $(SDCCLIBDIR)/myz80.lib $(HEAD_AOBJ) board/libboard$(LIBEXT) pass1.ihx: up_mem.h asm_mem.h $(SDCCLIBDIR)/myz80.lib $(HEAD_AOBJ) board/libboard$(LIBEXT)
@echo "-k $(BOARDDIR)" >pass1.lnk # Path to board library @echo "--" >pass1.lnk # Non-interactive
@echo "-k $(BOARDDIR)" >>pass1.lnk # Path to board library
@echo "-k $(SDCCLIBDIR)" >>pass1.lnk # Path to SDCC z80 library @echo "-k $(SDCCLIBDIR)" >>pass1.lnk # Path to SDCC z80 library
@echo "-l libboard$(LIBEXT)" >>pass1.lnk # Name of board library @echo "-l libboard$(LIBEXT)" >>pass1.lnk # Name of board library
@for LIB in $(LINKLIBS); do \ @for LIB in $(LINKLIBS); do \
@ -180,8 +184,9 @@ pass1.ihx: up_mem.h asm_mem.h $(SDCCLIBDIR)/myz80.lib $(HEAD_AOBJ) board/libboar
@echo "-b START=0" >>pass1.lnk # Start of START area @echo "-b START=0" >>pass1.lnk # Start of START area
@echo "-b _CODE=256" >>pass1.lnk # Start of _CODE area @echo "-b _CODE=256" >>pass1.lnk # Start of _CODE area
@echo "-i" >>pass1.lnk # Intel hex format @echo "-i" >>pass1.lnk # Intel hex format
@echo "-m" >>pass1.lnk # Generate a map file @echo "-x" >>pass1.lnk # Hexadecimal
@echo "-j" >>pass1.lnk # Generate a symbol file @echo "-m" >>pass1.lnk # Generate a map file
@echo "-j" >>pass1.lnk # Generate a symbol file
@echo "pass1.ihx" >>pass1.lnk # Path to head object @echo "pass1.ihx" >>pass1.lnk # Path to head object
@echo "$(HEAD_AOBJ)" >>pass1.lnk # Path to head object @echo "$(HEAD_AOBJ)" >>pass1.lnk # Path to head object
@echo "-e" >>pass1.lnk # End of script @echo "-e" >>pass1.lnk # End of script
@ -192,7 +197,8 @@ pass1.ihx: up_mem.h asm_mem.h $(SDCCLIBDIR)/myz80.lib $(HEAD_AOBJ) board/libboar
@$(MAKE) TOPDIR=$(TOPDIR) $(HEAD_AOBJ) @$(MAKE) TOPDIR=$(TOPDIR) $(HEAD_AOBJ)
nuttx.ihx: up_mem.h asm_mem.h $(SDCCLIBDIR)/myz80.lib $(HEAD_AOBJ) board/libboard$(LIBEXT) nuttx.ihx: up_mem.h asm_mem.h $(SDCCLIBDIR)/myz80.lib $(HEAD_AOBJ) board/libboard$(LIBEXT)
@echo "-k $(BOARDDIR)" >nuttx.lnk # Path to board library @echo "--" >nuttx.lnk # Non-interactive
@echo "-k $(BOARDDIR)" >>nuttx.lnk # Path to board library
@echo "-k $(SDCCLIBDIR)" >>nuttx.lnk # Path to SDCC z80 library @echo "-k $(SDCCLIBDIR)" >>nuttx.lnk # Path to SDCC z80 library
@echo "-l libboard$(LIBEXT)" >>nuttx.lnk # Name of board library @echo "-l libboard$(LIBEXT)" >>nuttx.lnk # Name of board library
@for LIB in $(LINKLIBS); do \ @for LIB in $(LINKLIBS); do \
@ -202,6 +208,7 @@ nuttx.ihx: up_mem.h asm_mem.h $(SDCCLIBDIR)/myz80.lib $(HEAD_AOBJ) board/libboar
@echo "-b START=0" >>nuttx.lnk # Start of START area @echo "-b START=0" >>nuttx.lnk # Start of START area
@echo "-b _CODE=256" >>nuttx.lnk # Start of _CODE area @echo "-b _CODE=256" >>nuttx.lnk # Start of _CODE area
@echo "-i" >>nuttx.lnk # Intel hex format @echo "-i" >>nuttx.lnk # Intel hex format
@echo "-x" >>nuttx.lnk # Hexadecimal
@echo "-m" >>nuttx.lnk # Generate a map file @echo "-m" >>nuttx.lnk # Generate a map file
@echo "-j" >>nuttx.lnk # Generate a symbol file @echo "-j" >>nuttx.lnk # Generate a symbol file
@echo "nuttx.ihx" >>nuttx.lnk # Path to head object @echo "nuttx.ihx" >>nuttx.lnk # Path to head object

View File

@ -67,7 +67,7 @@
; Reset entry point ; Reset entry point
;************************************************************************** ;**************************************************************************
.area START (ABS) .area _HEADER (ABS)
.org 0x0000 .org 0x0000
di ; Disable interrupts di ; Disable interrupts
@ -162,17 +162,31 @@
; System start logic ; System start logic
;************************************************************************** ;**************************************************************************
_up_reset: _up_reset::
; Set up the stack pointer at the location determined the Makefile
; and stored in asm_mem.h
ld SP, #UP_STACK_END ; Set stack pointer ld SP, #UP_STACK_END ; Set stack pointer
jp _os_start ; jump to the OS entry point
forever: ; Performed initialization unique to the SDCC toolchain
jp forever
call gsinit ; Initialize the data section
; Then start NuttX
call _os_start ; jump to the OS entry point
; NuttX will never return, but just in case...
_up_halt::
halt ; We should never get here
jp _up_halt
;************************************************************************** ;**************************************************************************
; Common Interrupt handler ; Common Interrupt handler
;************************************************************************** ;**************************************************************************
_up_rstcommon: _up_rstcommon::
; Create a register frame. SP points to top of frame + 4, pushes ; Create a register frame. SP points to top of frame + 4, pushes
; decrement the stack pointer. Already have ; decrement the stack pointer. Already have
; ;
@ -241,10 +255,29 @@ _up_rstcommon:
ex af, af' ; Restore AF (before enabling interrupts) ex af, af' ; Restore AF (before enabling interrupts)
ei ; yes ei ; yes
reti reti
nointenable: nointenable::
ex af, af' ; Restore AF ex af, af' ; Restore AF
reti reti
;**************************************************************************
; Ordering of segments for the linker (SDCC only)
;**************************************************************************
.area _HOME
.area _CODE
.area _GSINIT
.area _GSFINAL
.area _DATA
.area _BSS
.area _HEAP
;**************************************************************************
; Global data initialization logic (SDCC only)
;**************************************************************************
.area _GSINIT
gsinit::
.area _GSFINAL
ret

View File

@ -49,6 +49,7 @@
; up_restoreusercontext ; up_restoreusercontext
;************************************************************************** ;**************************************************************************
.area _CODE
_up_restoreusercontext: _up_restoreusercontext:
; On entry, stack contains return address (not used), then address ; On entry, stack contains return address (not used), then address
; of the register save structure ; of the register save structure

View File

@ -62,7 +62,7 @@
; Name: up_saveusercontext ; Name: up_saveusercontext
;************************************************************************* ;*************************************************************************
; .area _CODE (ABS,OVR) .area _CODE
_up_saveusercontext: _up_saveusercontext:
; Set up a stack frame ; Set up a stack frame