From 66fff88c9e6182fc01f825b4c9b433f00c59822e Mon Sep 17 00:00:00 2001 From: ryuz Date: Thu, 26 Apr 2007 16:57:55 +0000 Subject: [PATCH] (none) --- aplfw/sample/arm/ez_arm7/armcc/gmake.mak | 140 ++++++++++++++++++++++++++++++ aplfw/sample/arm/ez_arm7/armcc/startup.s | 76 ++++++++++++++++ aplfw/sample/arm/ez_arm7/armcc/uish.s | 38 ++++++++ aplfw/sample/arm/ez_arm7/armcc/vectors.s | 42 +++++++++ aplfw/sample/arm/ez_arm7/gcc/crt0.S | 82 ++++++++++++++++++ aplfw/sample/arm/ez_arm7/gcc/gmake.mak | 144 +++++++++++++++++++++++++++++++ aplfw/sample/arm/ez_arm7/gcc/link.x | 54 ++++++++++++ aplfw/sample/arm/ez_arm7/gcc/linkext.x | 54 ++++++++++++ aplfw/sample/arm/ez_arm7/gcc/vectors.S | 55 ++++++++++++ 9 files changed, 685 insertions(+) create mode 100755 aplfw/sample/arm/ez_arm7/armcc/gmake.mak create mode 100755 aplfw/sample/arm/ez_arm7/armcc/startup.s create mode 100755 aplfw/sample/arm/ez_arm7/armcc/uish.s create mode 100755 aplfw/sample/arm/ez_arm7/armcc/vectors.s create mode 100755 aplfw/sample/arm/ez_arm7/gcc/crt0.S create mode 100755 aplfw/sample/arm/ez_arm7/gcc/gmake.mak create mode 100755 aplfw/sample/arm/ez_arm7/gcc/link.x create mode 100755 aplfw/sample/arm/ez_arm7/gcc/linkext.x create mode 100755 aplfw/sample/arm/ez_arm7/gcc/vectors.S diff --git a/aplfw/sample/arm/ez_arm7/armcc/gmake.mak b/aplfw/sample/arm/ez_arm7/armcc/gmake.mak new file mode 100755 index 0000000..29d0f48 --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/armcc/gmake.mak @@ -0,0 +1,140 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# +# Copyright (C) 1998-2007 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + +# %jp{ターゲット名} +TARGET ?= sample + +# %jp{ディレクトリ} +OS_DIR = ../../../../.. +KERNEL_DIR = $(OS_DIR)/kernel +KERNEL_CFGRTR_DIR = $(OS_DIR)/cfgrtr/build/gcc +KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake +KERNEL_BUILD_DIR = $(KERNEL_DIR)/build/arm/lpc2000/armcc +APLFW_DIR = $(OS_DIR)/aplfw +APLFW_INC_DIR = $(APLFW_DIR) +APLFW_BUILD_DIR = $(APLFW_DIR)/build/arm/arm_v4t/armcc +OBJS_DIR = objs_$(TARGET) + + +# %jp{共通定義読込み} +include $(KERNEL_MAKINC_DIR)/common.inc + + +# %jp{コンフィギュレータ定義} +KERNEL_CFGRTR = $(KERNEL_CFGRTR_DIR)/h4acfg-lpc2000 + + +# %jp{ライブラリ定義} +APLFW_LIB = $(APLFW_BUILD_DIR)/hosaplfw.a + + +# %jp{デバッグ版の定義変更} +ifeq ($(DEBUG),Yes) +TARGET := $(TARGET)dbg +APLFW_LIB = $(APLFW_BUILD_DIR)/hosaplfwdbg.a +endif + + +# %jp{メモリマップ} +ifeq ($(MEMMAP),ext) +# %jp{外部メモリ} +TARGET := $(TARGET)ext +SECTION_ROM ?= 0x80000000 +SECTION_RAM ?= 0x80010000 +else +ifeq ($(MEMMAP),ram) +# %jp{内蔵RAM} +SECTION_ROM ?= 0x00000000 +SECTION_RAM ?= 0x80010000 +else +# %jp{内蔵ROM} +SECTION_ROM ?= 0x00000000 +SECTION_RAM ?= 0x80010000 +endif +endif + + +# %jp{フラグ設定} +CFLAGS = --cpu=ARM7TDMI-S --apcs=inter --thumb +AFLAGS = --cpu=ARM7TDMI-S --apcs=inter --thumb +LNFLAGS = --ro_base=$(SECTION_ROM) --rw_base=$(SECTION_RAM) --first=vectors.o --entry=$(SECTION_ROM) + + +# %jp{出力ファイル名} +TARGET_EXE = $(TARGET).axf +TARGET_MOT = $(TARGET).mot +TARGET_HEX = $(TARGET).hex + + +# %jp{armcc用の設定読込み} +include $(KERNEL_MAKINC_DIR)/armcc_d.inc + + +# %jp{インクルードディレクトリ} +INC_DIRS += $(APLFW_INC_DIR) + +# %jp{ソースディレクトリ} +SRC_DIRS += . .. + + +# %jp{アセンブラファイルの追加} +ASRCS += ./vectors.s \ + ./startup.s \ + ./uish.s + + +# %jp{C言語ファイルの追加} +CSRCS += ../kernel_cfg.c \ + ../main.c \ + ../sample.c \ + ../ostimer.c + +# %jp{ライブラリファイルの追加} +LIBS += $(APLFW_LIB) + + + +# -------------------------------------- +# %jp{ルール} +# -------------------------------------- + +.PHONY : all +all: make_aplfw makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX) + + +.PHONY : make_aplfw +make_aplfw: + make -C $(APLFW_BUILD_DIR) -f gmake.mak + + +clean: makeexe_clean + rm -f $(TARGET_EXE) $(TARGET_EXE) $(OBJS) ../kernel_cfg.c ../kernel_id.h + + +../kernel_cfg.c ../kernel_id.h: ../system.cfg + cpp -E ../system.cfg ../system.i + $(KERNEL_CFGRTR) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h + + + +# %jp{ライブラリ生成用設定読込み} +include $(KERNEL_MAKINC_DIR)/makeexe.inc + +# %jp{armcc用のルール定義読込み} +include $(KERNEL_MAKINC_DIR)/armcc_r.inc + + + +# -------------------------------------- +# %jp{依存関係} +# -------------------------------------- + +$(OBJS_DIR)/sample.obj: ../sample.c ../kernel_id.h + + +# end of file diff --git a/aplfw/sample/arm/ez_arm7/armcc/startup.s b/aplfw/sample/arm/ez_arm7/armcc/startup.s new file mode 100755 index 0000000..727bb02 --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/armcc/startup.s @@ -0,0 +1,76 @@ + + EXPORT Reset_Handler + EXPORT Undefined_Handler + EXPORT Swi_Handler + EXPORT Prefetch_Handler + EXPORT Abort_Handler + IMPORT _kernel_int_isp + + + +; %jp{プロセッサモード定義} +Mode_USR EQU 0x10 ; USR モード +Mode_FIQ EQU 0x11 ; FIQ モード +Mode_IRQ EQU 0x12 ; IRQ モード +Mode_SVC EQU 0x13 ; SVC モード +Mode_ABT EQU 0x17 ; ABT モード +Mode_UND EQU 0x1b ; UND モード +Mode_SYS EQU 0x1f ; SYS モード +Mode_MASK EQU 0x1f ; モードビットマスク + +; %jp{フラグ定義} +T_Bit EQU 0x20 ; T ビット +F_Bit EQU 0x40 ; F ビット +I_Bit EQU 0x80 ; I ビット + + + + CODE32 + + PRESERVE8 + AREA Init, CODE, READONLY + + +; リセットハンドラ +Reset_Handler + ; --- SYSモード移行 + msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit + + ; --- スタック仮設定 + ldr r0, =_kernel_int_isp + ldr sp, [r0] + + ; --- C言語コードにジャンプ + IMPORT __main + bl __main +end_loop + b end_loop + + + + +; SWIハンドラ +Swi_Handler + movs pc, lr + + +; Undefined ハンドラ +Undefined_Handler + b Undefined_Handler + + +; Prefetch ハンドラ +Prefetch_Handler + b Prefetch_Handler + + +; Abort ハンドラ +Abort_Handler + b Abort_Handler + + + + END + + +; end of file diff --git a/aplfw/sample/arm/ez_arm7/armcc/uish.s b/aplfw/sample/arm/ez_arm7/armcc/uish.s new file mode 100755 index 0000000..9309dcb --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/armcc/uish.s @@ -0,0 +1,38 @@ + +HEAP_SIZE EQU 256 + + + EXPORT __user_initial_stackheap + IMPORT __use_two_region_memory + + IMPORT _kernel_int_stkblk + IMPORT _kernel_int_isp + + + PRESERVE8 + AREA UISH, CODE, READONLY + CODE32 + +__user_initial_stackheap FUNCTION + + ldr r0, =User_Heap ; Heap Base + ldr r2, =HEAP_SIZE + add r2, r2, r0 ; Heap Limit + + ldr r1, =_kernel_int_isp + ldr r1, [r1] ; Stack Base + ldr r3, =_kernel_int_stkblk ; Stack Limit + + bx lr + + ENDFUNC + + + + AREA ||.bss||, NOINIT, ALIGN=2 +User_Heap + % HEAP_SIZE + + + + END diff --git a/aplfw/sample/arm/ez_arm7/armcc/vectors.s b/aplfw/sample/arm/ez_arm7/armcc/vectors.s new file mode 100755 index 0000000..d5528a4 --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/armcc/vectors.s @@ -0,0 +1,42 @@ + + + IMPORT Reset_Handler + IMPORT Undefined_Handler + IMPORT Swi_Handler + IMPORT Prefetch_Handler + IMPORT Abort_Handler + IMPORT _kernel_irq_hdr + IMPORT _kernel_fiq_hdr + + + CODE32 + + PRESERVE8 + AREA Init, CODE, READONLY + + ENTRY + + ldr pc, Reset_Addr + ldr pc, Undefined_Addr + ldr pc, Swi_Addr + ldr pc, Prefetch_Addr + ldr pc, Abort_Addr + nop + ldr pc, IRQ_Addr + ldr pc, FIQ_Addr + + +Reset_Addr dcd Reset_Handler +Undefined_Addr dcd Undefined_Handler +Swi_Addr dcd Swi_Handler +Prefetch_Addr dcd Prefetch_Handler +Abort_Addr dcd Abort_Handler +IRQ_Addr dcd _kernel_irq_hdr +FIQ_Addr dcd _kernel_fiq_hdr + + + END + + + +; end of file diff --git a/aplfw/sample/arm/ez_arm7/gcc/crt0.S b/aplfw/sample/arm/ez_arm7/gcc/crt0.S new file mode 100755 index 0000000..e270d74 --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/gcc/crt0.S @@ -0,0 +1,82 @@ +/* ------------------------------------------------------------------------ */ +/* Hyper Operating System V4 Advance */ +/* Sample program for ADuC7000 series */ +/* */ +/* Copyright (C) 1998-2007 by Project HOS */ +/* http://sourceforge.jp/projects/hos/ */ +/* ------------------------------------------------------------------------ */ + + + .extern __kernel_int_isp + .extern ___data + .extern ___data_end + .extern ___bss + .extern ___bss_end + .extern main + + .global _reset_handler + .global __main + + + .text + +#define Mode_USR 0x10 +#define Mode_IRQ 0x12 +#define Mode_FIQ 0x11 +#define Mode_SVC 0x13 +#define Mode_UND 0x1b +#define Mode_SYS 0x1f +#define I_Bit 0x80 +#define F_Bit 0x40 +#define T_Bit 0x20 + + +/************************************************ + リセットハンドラ +************************************************/ + .align 4 +_reset_handler: + /* モード設定 */ + msr cpsr_c, #(Mode_SYS | F_Bit | I_Bit) + + /* スタック仮設定 */ + ldr r0, =_kernel_int_isp + ldr sp, [r0] + + + /* DATA領域のコピー */ + ldr r0, =___data_rom + ldr r1, =___data + ldr r2, =___data_end +data_loop: + cmp r1, r2 + ldrcc r3, [r0], #4 + strcc r3, [r1], #4 + bcc data_loop + + + /* BSS領域の初期化 */ + ldr r0, =___bss + ldr r1, =___bss_end + mov r2, #0 +bss_loop: + cmp r0, r1 + strcc r2, [r0], #4 + bcc bss_loop + + + /* main関数の呼び出し */ + bl main +end_loop: + b end_loop + + +__main: + bx lr + + + + .end + + +/* end of file */ diff --git a/aplfw/sample/arm/ez_arm7/gcc/gmake.mak b/aplfw/sample/arm/ez_arm7/gcc/gmake.mak new file mode 100755 index 0000000..ffacbc8 --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/gcc/gmake.mak @@ -0,0 +1,144 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# +# Copyright (C) 1998-2007 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + +# %jp{ターゲット名} +TARGET ?= sample + +# %jp{ツール定義} +GCC_SYS ?= arm-elf- +CMD_CC ?= $(GCC_SYS)gcc +CMD_ASM ?= $(GCC_SYS)gcc +CMD_LINK ?= $(GCC_SYS)gcc +CMD_OBJCNV ?= $(GCC_SYS)objcopy + +# %jp{ディレクトリ} +OS_DIR = ../../../../.. +KERNEL_DIR = $(OS_DIR)/kernel +KERNEL_CFGRTR_DIR = $(OS_DIR)/cfgrtr/build/gcc +KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake +KERNEL_BUILD_DIR = $(KERNEL_DIR)/build/arm/lpc2000/gcc +APLFW_DIR = $(OS_DIR)/aplfw +APLFW_INC_DIR = $(APLFW_DIR) +APLFW_BUILD_DIR = $(APLFW_DIR)/build/arm/arm_v4t/gcc +OBJS_DIR = objs_$(TARGET) + + +# %jp{共通定義読込み} +include $(KERNEL_MAKINC_DIR)/common.inc + + +# %jp{コンフィギュレータ定義} +KERNEL_CFGRTR = $(KERNEL_CFGRTR_DIR)/h4acfg-lpc2000 + + +# %jp{ライブラリ定義} +APLFW_LIB = $(APLFW_BUILD_DIR)/hosaplfw.a + + +# %jp{デバッグ版の定義変更} +ifeq ($(DEBUG),Yes) +TARGET := $(TARGET)dbg +APLFW_LIB = $(APLFW_BUILD_DIR)/hosaplfwdbg.a +endif + + +# %jp{メモリマップ} +ifeq ($(MEMMAP),ext) +# %jp{外部メモリ} +TARGET := $(TARGET)ext +LINK_SCRIPT = linkext.x +else +ifeq ($(MEMMAP),ram) +# %jp{内蔵RAM} +TARGET := $(TARGET)ram +LINK_SCRIPT = linkram.x +else +# %jp{内蔵ROM} +LINK_SCRIPT = link.x +endif +endif + + +# %jp{フラグ設定} +CFLAGS = -mcpu=arm7tdmi -mthumb-interwork +AFLAGS = -mcpu=arm7tdmi -mthumb-interwork +LNFLAGS = -mcpu=arm7tdmi -mthumb-interwork -nostartfiles -Wl,-Map,$(TARGET).map,-T$(LINK_SCRIPT) + + +# %jp{出力ファイル名} +TARGET_EXE = $(TARGET).elf +TARGET_MOT = $(TARGET).mot +TARGET_HEX = $(TARGET).hex + + +# %jp{gcc用の設定読込み} +include $(KERNEL_MAKINC_DIR)/gcc_d.inc + + +# %jp{インクルードディレクトリ} +INC_DIRS += $(APLFW_INC_DIR) + +# %jp{ソースディレクトリ} +SRC_DIRS += . .. + + +# %jp{アセンブラファイルの追加} +ASRCS += ./vectors.S \ + ./crt0.S + + +# %jp{C言語ファイルの追加} +CSRCS += ../kernel_cfg.c \ + ../main.c \ + ../sample.c \ + ../ostimer.c + +# %jp{ライブラリファイルの追加} +LIBS += $(APLFW_LIB) + + + +# -------------------------------------- +# %jp{ルール} +# -------------------------------------- + +.PHONY : all +all: make_aplfw makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX) + + +.PHONY : make_aplfw +make_aplfw: + make -C $(APLFW_BUILD_DIR) -f gmake.mak + + +clean: makeexe_clean + rm -f $(TARGET_EXE) $(TARGET_EXE) $(OBJS) ../kernel_cfg.c ../kernel_id.h + + +../kernel_cfg.c ../kernel_id.h: ../system.cfg + cpp -E ../system.cfg ../system.i + $(KERNEL_CFGRTR) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h + + + +# %jp{ライブラリ生成用設定読込み} +include $(KERNEL_MAKINC_DIR)/makeexe.inc + +# %jp{gcc用のルール定義読込み} +include $(KERNEL_MAKINC_DIR)/gcc_r.inc + + + +# -------------------------------------- +# %jp{依存関係} +# -------------------------------------- + +$(OBJS_DIR)/sample.obj: ../sample.c ../kernel_id.h + + +# end of file diff --git a/aplfw/sample/arm/ez_arm7/gcc/link.x b/aplfw/sample/arm/ez_arm7/gcc/link.x new file mode 100755 index 0000000..24f4b63 --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/gcc/link.x @@ -0,0 +1,54 @@ +OUTPUT_ARCH(arm) +ENTRY(_reset_handler) + +MEMORY +{ + vector : o = 0x00000000, l = 0x00000040 + rom : o = 0x00000040, l = 0x0000ffc0 + ram : o = 0x40000000, l = 0x00004000 +} + +SECTIONS +{ + .vector : + { + ___vector = . ; + */vectors.o(.text) + FILL(0xff) + ___vector_end = . ; + } > vector + .text : + { + ___text = . ; + *(.text) + *(.strings) + *(.rodata*) + *(.glue*) + ___text_end = . ; + } > rom + .tors : + { + . = ALIGN(4); + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ; + } > rom + data : AT (ADDR(.tors) + SIZEOF(.tors)) + { + ___data_rom = ADDR(.tors) + SIZEOF(.tors); + ___data = . ; + *(.data) + ___data_end = . ; + } > ram + .bss : + { + ___bss = . ; + *(.bss) + *(COMMON) + ___bss_end = . ; + } >ram +} + diff --git a/aplfw/sample/arm/ez_arm7/gcc/linkext.x b/aplfw/sample/arm/ez_arm7/gcc/linkext.x new file mode 100755 index 0000000..466bea7 --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/gcc/linkext.x @@ -0,0 +1,54 @@ +OUTPUT_ARCH(arm) +ENTRY(_reset_handler) + +MEMORY +{ + vector : o = 0x80000000, l = 0x00000040 + rom : o = 0x80000040, l = 0x0000ffc0 + ram : o = 0x80010000, l = 0x00002000 +} + +SECTIONS +{ + .vector : + { + ___vector = . ; + */vectors.o(.text) + FILL(0xff) + ___vector_end = . ; + } > vector + .text : + { + ___text = . ; + *(.text) + *(.strings) + *(.rodata*) + *(.glue*) + ___text_end = . ; + } > rom + .tors : + { + . = ALIGN(4); + ___ctors = . ; + *(.ctors) + ___ctors_end = . ; + ___dtors = . ; + *(.dtors) + ___dtors_end = . ; + } > rom + data : AT (ADDR(.tors) + SIZEOF(.tors)) + { + ___data_rom = ADDR(.tors) + SIZEOF(.tors); + ___data = . ; + *(.data) + ___data_end = . ; + } > ram + .bss : + { + ___bss = . ; + *(.bss) + *(COMMON) + ___bss_end = . ; + } >ram +} + diff --git a/aplfw/sample/arm/ez_arm7/gcc/vectors.S b/aplfw/sample/arm/ez_arm7/gcc/vectors.S new file mode 100755 index 0000000..c0f5a86 --- /dev/null +++ b/aplfw/sample/arm/ez_arm7/gcc/vectors.S @@ -0,0 +1,55 @@ +/* ------------------------------------------------------------------------ */ +/* Hyper Operating System V4 サンプルプログラム */ +/* ベクタテーブル */ +/* */ +/* Copyright (C) 1998-2007 by Project HOS */ +/* http://sourceforge.jp/projects/hos/ */ +/* ------------------------------------------------------------------------ */ + + + /* --- 外部定数宣言 */ + .global _reset_handler + .global _kernel_und_hdr + .global _kernel_swi_hdr + .global _kernel_pre_hdr + .global _kernel_abt_hdr + .global _kernel_irq_hdr + .global _kernel_fiq_hdr + + + .text + .align 2 + +/* --------------------------------------- */ +/* ベクタ定義 */ +/* --------------------------------------- */ + ldr pc, adr_rst_hdr + ldr pc, adr_und_hdr + ldr pc, adr_swi_hdr + ldr pc, adr_pre_hdr + ldr pc, adr_abt_hdr + nop + ldr pc, adr_irq_hdr + ldr pc, adr_fiq_hdr + + +adr_rst_hdr: + .long _reset_handler +adr_und_hdr: + .long _kernel_und_hdr +adr_swi_hdr: + .long _kernel_swi_hdr +adr_pre_hdr: + .long _kernel_pre_hdr +adr_abt_hdr: + .long _kernel_abt_hdr +adr_irq_hdr: + .long _kernel_irq_hdr +adr_fiq_hdr: + .long _kernel_fiq_hdr + + + .end + + +/* end of file */ -- 2.11.0