HOS-V4 Advance の開発リポジトリ
Revision | ce36ecd22fd80f0a9e6590613dd63429b57fdd6c (tree) |
---|---|
Zeit | 2008-05-24 18:17:53 |
Autor | ryuz <ryuz> |
Commiter | ryuz |
(none)
@@ -0,0 +1,116 @@ | ||
1 | +# ---------------------------------------------------------------------------- | |
2 | +# Hyper Operating System V4 Advance | |
3 | +# | |
4 | +# Copyright (C) 1998-2007 by Project HOS | |
5 | +# http://sourceforge.jp/projects/hos/ | |
6 | +# ---------------------------------------------------------------------------- | |
7 | + | |
8 | + | |
9 | +# %jp{ターゲット名} | |
10 | +TARGET ?= sample | |
11 | + | |
12 | +# %jp{ディレクトリ定義} | |
13 | +OS_DIR = ../../../.. | |
14 | +KERNEL_DIR = $(OS_DIR)/kernel | |
15 | +KERNEL_CFGRTR_DIR = $(OS_DIR)/cfgrtr/build/gcc | |
16 | +KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake | |
17 | +KERNEL_BUILD_DIR = $(KERNEL_DIR)/build/arm/lpc2000/armcc | |
18 | +OBJS_DIR = objs_$(TARGET) | |
19 | + | |
20 | +# %jp{共通定義読込み} | |
21 | +include $(KERNEL_MAKINC_DIR)/common.inc | |
22 | + | |
23 | + | |
24 | +# デバッグ版のターゲット名変更 | |
25 | +ifeq ($(DEBUG),Yes) | |
26 | +TARGET := $(TARGET)dbg | |
27 | +endif | |
28 | + | |
29 | +# %jp{メモリマップ} | |
30 | +ifeq ($(MEMMAP),ext) | |
31 | +# %jp{外部メモリ} | |
32 | +TARGET := $(TARGET)ext | |
33 | +SECTION_ROM ?= 0x80000000 | |
34 | +SECTION_RAM ?= 0x80010000 | |
35 | +else | |
36 | +ifeq ($(MEMMAP),ram) | |
37 | +# %jp{内蔵RAM} | |
38 | +SECTION_ROM ?= 0x00000000 | |
39 | +SECTION_RAM ?= 0x80010000 | |
40 | +else | |
41 | +# %jp{内蔵ROM} | |
42 | +SECTION_ROM ?= 0x00000000 | |
43 | +SECTION_RAM ?= 0x80010000 | |
44 | +endif | |
45 | +endif | |
46 | + | |
47 | + | |
48 | +# %jp{フラグ設定} | |
49 | +CFLAGS = --cpu=ARM7TDMI-S --apcs=inter --thumb | |
50 | +AFLAGS = --cpu=ARM7TDMI-S --apcs=inter --thumb | |
51 | +LNFLAGS = --ro_base=$(SECTION_ROM) --rw_base=$(SECTION_RAM) --first=vectors.o --entry=$(SECTION_ROM) | |
52 | + | |
53 | + | |
54 | +# %jp{コンフィギュレータ定義} | |
55 | +KERNEL_CFGRTR = $(KERNEL_CFGRTR_DIR)/h4acfg-lpc2000 | |
56 | + | |
57 | + | |
58 | +# 出力ファイル名 | |
59 | +TARGET_EXE = $(TARGET).axf | |
60 | +TARGET_MOT = $(TARGET).mot | |
61 | +TARGET_HEX = $(TARGET).hex | |
62 | + | |
63 | + | |
64 | +# %jp{armcc用の設定読込み} | |
65 | +include $(KERNEL_MAKINC_DIR)/armcc_d.inc | |
66 | + | |
67 | +# ソースディレクトリ | |
68 | +SRC_DIRS += . .. | |
69 | + | |
70 | +# アセンブラファイルの追加 | |
71 | +ASRCS += ./vectors.s \ | |
72 | + ./startup.s \ | |
73 | + ./uish.s | |
74 | + | |
75 | + | |
76 | +# %jp{C言語ファイルの追加} | |
77 | +CSRCS += ../kernel_cfg.c \ | |
78 | + ../main.c \ | |
79 | + ../sample.c \ | |
80 | + ../ostimer.c \ | |
81 | + ../uart.c | |
82 | + | |
83 | + | |
84 | + | |
85 | +# -------------------------------------- | |
86 | +# %jp{ルール} | |
87 | +# -------------------------------------- | |
88 | + | |
89 | +.PHONY : all | |
90 | +all: kernel_make makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX) | |
91 | + | |
92 | +clean: makeexe_clean | |
93 | + rm -f $(TARGET_EXE) $(TARGET_EXE) $(OBJS) ../kernel_cfg.c ../kernel_id.h | |
94 | + | |
95 | +../kernel_cfg.c ../kernel_id.h: ../system.cfg | |
96 | + cpp -E ../system.cfg ../system.i | |
97 | + $(KERNEL_CFGRTR) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h | |
98 | + | |
99 | + | |
100 | +# %jp{ライブラリ生成用設定読込み} | |
101 | +include $(KERNEL_MAKINC_DIR)/makeexe.inc | |
102 | + | |
103 | +# %jp{armcc用のルール定義読込み} | |
104 | +include $(KERNEL_MAKINC_DIR)/armcc_r.inc | |
105 | + | |
106 | + | |
107 | + | |
108 | +# -------------------------------------- | |
109 | +# %jp{依存関係} | |
110 | +# -------------------------------------- | |
111 | + | |
112 | +$(OBJS_DIR)/sample.obj: ../sample.c ../kernel_id.h | |
113 | + | |
114 | + | |
115 | +# end of file | |
116 | + |
@@ -0,0 +1,76 @@ | ||
1 | + | |
2 | + EXPORT Reset_Handler | |
3 | + EXPORT Undefined_Handler | |
4 | + EXPORT Swi_Handler | |
5 | + EXPORT Prefetch_Handler | |
6 | + EXPORT Abort_Handler | |
7 | + IMPORT _kernel_int_isp | |
8 | + | |
9 | + | |
10 | + | |
11 | +; %jp{プロセッサモード定義} | |
12 | +Mode_USR EQU 0x10 ; USR モード | |
13 | +Mode_FIQ EQU 0x11 ; FIQ モード | |
14 | +Mode_IRQ EQU 0x12 ; IRQ モード | |
15 | +Mode_SVC EQU 0x13 ; SVC モード | |
16 | +Mode_ABT EQU 0x17 ; ABT モード | |
17 | +Mode_UND EQU 0x1b ; UND モード | |
18 | +Mode_SYS EQU 0x1f ; SYS モード | |
19 | +Mode_MASK EQU 0x1f ; モードビットマスク | |
20 | + | |
21 | +; %jp{フラグ定義} | |
22 | +T_Bit EQU 0x20 ; T ビット | |
23 | +F_Bit EQU 0x40 ; F ビット | |
24 | +I_Bit EQU 0x80 ; I ビット | |
25 | + | |
26 | + | |
27 | + | |
28 | + CODE32 | |
29 | + | |
30 | + PRESERVE8 | |
31 | + AREA Init, CODE, READONLY | |
32 | + | |
33 | + | |
34 | +; リセットハンドラ | |
35 | +Reset_Handler | |
36 | + ; --- SYSモード移行 | |
37 | + msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit | |
38 | + | |
39 | + ; --- スタック仮設定 | |
40 | + ldr r0, =_kernel_int_isp | |
41 | + ldr sp, [r0] | |
42 | + | |
43 | + ; --- C言語コードにジャンプ | |
44 | + IMPORT __main | |
45 | + bl __main | |
46 | +end_loop | |
47 | + b end_loop | |
48 | + | |
49 | + | |
50 | + | |
51 | + | |
52 | +; SWIハンドラ | |
53 | +Swi_Handler | |
54 | + movs pc, lr | |
55 | + | |
56 | + | |
57 | +; Undefined ハンドラ | |
58 | +Undefined_Handler | |
59 | + b Undefined_Handler | |
60 | + | |
61 | + | |
62 | +; Prefetch ハンドラ | |
63 | +Prefetch_Handler | |
64 | + b Prefetch_Handler | |
65 | + | |
66 | + | |
67 | +; Abort ハンドラ | |
68 | +Abort_Handler | |
69 | + b Abort_Handler | |
70 | + | |
71 | + | |
72 | + | |
73 | + END | |
74 | + | |
75 | + | |
76 | +; end of file |
@@ -0,0 +1,38 @@ | ||
1 | + | |
2 | +HEAP_SIZE EQU 256 | |
3 | + | |
4 | + | |
5 | + EXPORT __user_initial_stackheap | |
6 | + IMPORT __use_two_region_memory | |
7 | + | |
8 | + IMPORT _kernel_int_stkblk | |
9 | + IMPORT _kernel_int_isp | |
10 | + | |
11 | + | |
12 | + PRESERVE8 | |
13 | + AREA UISH, CODE, READONLY | |
14 | + CODE32 | |
15 | + | |
16 | +__user_initial_stackheap FUNCTION | |
17 | + | |
18 | + ldr r0, =User_Heap ; Heap Base | |
19 | + ldr r2, =HEAP_SIZE | |
20 | + add r2, r2, r0 ; Heap Limit | |
21 | + | |
22 | + ldr r1, =_kernel_int_isp | |
23 | + ldr r1, [r1] ; Stack Base | |
24 | + ldr r3, =_kernel_int_stkblk ; Stack Limit | |
25 | + | |
26 | + bx lr | |
27 | + | |
28 | + ENDFUNC | |
29 | + | |
30 | + | |
31 | + | |
32 | + AREA ||.bss||, NOINIT, ALIGN=2 | |
33 | +User_Heap | |
34 | + % HEAP_SIZE | |
35 | + | |
36 | + | |
37 | + | |
38 | + END |
@@ -0,0 +1,42 @@ | ||
1 | + | |
2 | + | |
3 | + IMPORT Reset_Handler | |
4 | + IMPORT Undefined_Handler | |
5 | + IMPORT Swi_Handler | |
6 | + IMPORT Prefetch_Handler | |
7 | + IMPORT Abort_Handler | |
8 | + IMPORT _kernel_irq_hdr | |
9 | + IMPORT _kernel_fiq_hdr | |
10 | + | |
11 | + | |
12 | + CODE32 | |
13 | + | |
14 | + PRESERVE8 | |
15 | + AREA Init, CODE, READONLY | |
16 | + | |
17 | + ENTRY | |
18 | + | |
19 | + ldr pc, Reset_Addr | |
20 | + ldr pc, Undefined_Addr | |
21 | + ldr pc, Swi_Addr | |
22 | + ldr pc, Prefetch_Addr | |
23 | + ldr pc, Abort_Addr | |
24 | + nop | |
25 | + ldr pc, IRQ_Addr | |
26 | + ldr pc, FIQ_Addr | |
27 | + | |
28 | + | |
29 | +Reset_Addr dcd Reset_Handler | |
30 | +Undefined_Addr dcd Undefined_Handler | |
31 | +Swi_Addr dcd Swi_Handler | |
32 | +Prefetch_Addr dcd Prefetch_Handler | |
33 | +Abort_Addr dcd Abort_Handler | |
34 | +IRQ_Addr dcd _kernel_irq_hdr | |
35 | +FIQ_Addr dcd _kernel_fiq_hdr | |
36 | + | |
37 | + | |
38 | + END | |
39 | + | |
40 | + | |
41 | + | |
42 | +; end of file |
@@ -0,0 +1,82 @@ | ||
1 | +/* ------------------------------------------------------------------------ */ | |
2 | +/* Hyper Operating System V4 Advance */ | |
3 | +/* Sample program for ADuC7000 series */ | |
4 | +/* */ | |
5 | +/* Copyright (C) 1998-2007 by Project HOS */ | |
6 | +/* http://sourceforge.jp/projects/hos/ */ | |
7 | +/* ------------------------------------------------------------------------ */ | |
8 | + | |
9 | + | |
10 | + .extern __kernel_int_isp | |
11 | + .extern ___data | |
12 | + .extern ___data_end | |
13 | + .extern ___bss | |
14 | + .extern ___bss_end | |
15 | + .extern main | |
16 | + | |
17 | + .global _reset_handler | |
18 | + .global __main | |
19 | + | |
20 | + | |
21 | + .text | |
22 | + | |
23 | +#define Mode_USR 0x10 | |
24 | +#define Mode_IRQ 0x12 | |
25 | +#define Mode_FIQ 0x11 | |
26 | +#define Mode_SVC 0x13 | |
27 | +#define Mode_UND 0x1b | |
28 | +#define Mode_SYS 0x1f | |
29 | +#define I_Bit 0x80 | |
30 | +#define F_Bit 0x40 | |
31 | +#define T_Bit 0x20 | |
32 | + | |
33 | + | |
34 | +/************************************************ | |
35 | + リセットハンドラ | |
36 | +************************************************/ | |
37 | + .align 4 | |
38 | +_reset_handler: | |
39 | + /* モード設定 */ | |
40 | + msr cpsr_c, #(Mode_SYS | F_Bit | I_Bit) | |
41 | + | |
42 | + /* スタック仮設定 */ | |
43 | + ldr r0, =_kernel_int_isp | |
44 | + ldr sp, [r0] | |
45 | + | |
46 | + | |
47 | + /* DATA領域のコピー */ | |
48 | + ldr r0, =___data_rom | |
49 | + ldr r1, =___data | |
50 | + ldr r2, =___data_end | |
51 | +data_loop: | |
52 | + cmp r1, r2 | |
53 | + ldrcc r3, [r0], #4 | |
54 | + strcc r3, [r1], #4 | |
55 | + bcc data_loop | |
56 | + | |
57 | + | |
58 | + /* BSS領域の初期化 */ | |
59 | + ldr r0, =___bss | |
60 | + ldr r1, =___bss_end | |
61 | + mov r2, #0 | |
62 | +bss_loop: | |
63 | + cmp r0, r1 | |
64 | + strcc r2, [r0], #4 | |
65 | + bcc bss_loop | |
66 | + | |
67 | + | |
68 | + /* main関数の呼び出し */ | |
69 | + bl main | |
70 | +end_loop: | |
71 | + b end_loop | |
72 | + | |
73 | + | |
74 | +__main: | |
75 | + bx lr | |
76 | + | |
77 | + | |
78 | + | |
79 | + .end | |
80 | + | |
81 | + | |
82 | +/* end of file */ |
@@ -0,0 +1,158 @@ | ||
1 | +# ---------------------------------------------------------------------------- | |
2 | +# Hyper Operating System V4 Advance | |
3 | +# | |
4 | +# Copyright (C) 1998-2008 by Project HOS | |
5 | +# http://sourceforge.jp/projects/hos/ | |
6 | +# ---------------------------------------------------------------------------- | |
7 | + | |
8 | + | |
9 | + | |
10 | +# -------------------------------------- | |
11 | +# %jp{各種設定}{setting} | |
12 | +# -------------------------------------- | |
13 | + | |
14 | +# %jp{ターゲット名}%en{target name} | |
15 | +TARGET ?= sample | |
16 | + | |
17 | + | |
18 | +# %jp{ツール定義}%en{tools} | |
19 | +GCC_ARCH ?= arm-elf- | |
20 | +CMD_CC ?= $(GCC_ARCH)gcc | |
21 | +CMD_ASM ?= $(GCC_ARCH)gcc | |
22 | +CMD_LINK ?= $(GCC_ARCH)gcc | |
23 | +CMD_OBJCNV ?= $(GCC_ARCH)objcopy | |
24 | + | |
25 | + | |
26 | +# %jp{アーキテクチャ定義}%en{architecture} | |
27 | +ARCH_NAME ?= lpc2000 | |
28 | +ARCH_CC ?= gcc | |
29 | + | |
30 | + | |
31 | +# %jp{ディレクトリ定義}%en{directories} | |
32 | +TOP_DIR = ../../../.. | |
33 | +KERNEL_DIR = $(TOP_DIR)/kernel | |
34 | +KERNEL_CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc | |
35 | +KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake | |
36 | +KERNEL_BUILD_DIR = $(KERNEL_DIR)/build/arm/lpc2000/gcc | |
37 | + | |
38 | + | |
39 | +# %jp{コンフィギュレータ定義} | |
40 | +KERNEL_CFGRTR = $(KERNEL_CFGRTR_DIR)/h4acfg-$(ARCH_NAME) | |
41 | + | |
42 | + | |
43 | +# %jp{共通定義読込み}%jp{common setting} | |
44 | +include $(KERNEL_MAKINC_DIR)/common.inc | |
45 | + | |
46 | + | |
47 | +# %jp{リンカスクリプト}%en{linker script} | |
48 | +LINK_SCRIPT = link.x | |
49 | + | |
50 | +# %jp{外部メモリ}%en{external memory} | |
51 | +ifeq ($(MEMMAP),ext) | |
52 | +TARGET := $(TARGET)_ext | |
53 | +LINK_SCRIPT = linkext.x | |
54 | +endif | |
55 | + | |
56 | +# %jp{内蔵RAM}%en{internal RAM} | |
57 | +ifeq ($(MEMMAP),ram) | |
58 | +LINK_SCRIPT = linkram.x | |
59 | +endif | |
60 | + | |
61 | + | |
62 | +# %jp{パス設定}%en{add source directories} | |
63 | +INC_DIRS += . .. | |
64 | +SRC_DIRS += . .. | |
65 | + | |
66 | + | |
67 | +# %jp{オプションフラグ}%en{option flags} | |
68 | +AFLAGS = -mcpu=arm7tdmi -mthumb-interwork | |
69 | +CFLAGS = -mcpu=arm7tdmi -mthumb-interwork | |
70 | +LNFLAGS = -mcpu=arm7tdmi -mthumb-interwork -nostartfiles -Wl,-Map,$(TARGET).map,-T$(LINK_SCRIPT) | |
71 | + | |
72 | + | |
73 | +# %jp{コンパイラ依存の設定読込み}%en{compiler dependent definitions} | |
74 | +include $(KERNEL_MAKINC_DIR)/$(ARCH_CC)_d.inc | |
75 | + | |
76 | +# %jp{実行ファイル生成用設定読込み}%en{definitions for exection file} | |
77 | +include $(KERNEL_MAKINC_DIR)/makexe_d.inc | |
78 | + | |
79 | + | |
80 | +# %jp{出力ファイル名}%en{output files} | |
81 | +TARGET_EXE = $(TARGET).$(EXT_EXE) | |
82 | +TARGET_MOT = $(TARGET).$(EXT_MOT) | |
83 | +TARGET_HEX = $(TARGET).$(EXT_HEX) | |
84 | +TARGET_BIN = $(TARGET).$(EXT_BIN) | |
85 | + | |
86 | + | |
87 | + | |
88 | + | |
89 | +# -------------------------------------- | |
90 | +# %jp{ソースファイル}%en{source files} | |
91 | +# -------------------------------------- | |
92 | + | |
93 | +# %jp{アセンブラファイルの追加}%en{assembry sources} | |
94 | +ASRCS += ./vectors.S | |
95 | +ASRCS += ./crt0.S | |
96 | + | |
97 | + | |
98 | +# %jp{C言語ファイルの追加}%en{C sources} | |
99 | +CSRCS += ../kernel_cfg.c | |
100 | +CSRCS += ../main.c | |
101 | +CSRCS += ../sample.c | |
102 | +CSRCS += ../ostimer.c | |
103 | +CSRCS += ../uart.c | |
104 | + | |
105 | + | |
106 | + | |
107 | + | |
108 | +# -------------------------------------- | |
109 | +# %jp{ルール定義}%en{rules} | |
110 | +# -------------------------------------- | |
111 | + | |
112 | +# %jp{ALL}%en{all} | |
113 | +.PHONY : all | |
114 | +all: kernel_make makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX) $(TARGET_BIN) | |
115 | + | |
116 | +# %jp{クリーン}%en{clean} | |
117 | +.PHONY : clean | |
118 | +clean: makeexe_clean | |
119 | + rm -f $(TARGET_EXE) $(TARGET_EXE) $(OBJS) ../kernel_cfg.c ../kernel_id.h | |
120 | + | |
121 | +# %jp{依存関係更新}%en{depend} | |
122 | +.PHONY : depend | |
123 | +depend: makeexe_depend | |
124 | + | |
125 | +# %jp{ソース一括コピー}%en{source files copy} | |
126 | +.PHONY : srccpy | |
127 | +srccpy: makeexe_srccpy | |
128 | + | |
129 | +# %jp{カーネルごとクリーン}%en{mostlyclean} | |
130 | +.PHONY : mostlyclean | |
131 | +mostlyclean: clean kernel_clean | |
132 | + | |
133 | + | |
134 | +# %jp{コンフィギュレータ実行}%en{configurator} | |
135 | +../kernel_cfg.c ../kernel_id.h: ../system.cfg $(KERNEL_CFGRTR) | |
136 | + cpp -E ../system.cfg ../system.i | |
137 | + $(KERNEL_CFGRTR) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h | |
138 | + | |
139 | + | |
140 | +# %jp{実行ファイル生成用設定読込み}%en{rules for exection file} | |
141 | +include $(KERNEL_MAKINC_DIR)/makexe_r.inc | |
142 | + | |
143 | +# %jp{コンパイラ依存のルール定義読込み}%en{rules for compiler} | |
144 | +include $(KERNEL_MAKINC_DIR)/$(ARCH_CC)_r.inc | |
145 | + | |
146 | + | |
147 | + | |
148 | + | |
149 | +# -------------------------------------- | |
150 | +# %jp{依存関係}%en{dependency} | |
151 | +# -------------------------------------- | |
152 | + | |
153 | +$(OBJS_DIR)/sample.$(EXT_OBJ) : ../kernel_id.h | |
154 | + | |
155 | + | |
156 | + | |
157 | +# end of file | |
158 | + |
@@ -0,0 +1,54 @@ | ||
1 | +OUTPUT_ARCH(arm) | |
2 | +ENTRY(_reset_handler) | |
3 | + | |
4 | +MEMORY | |
5 | +{ | |
6 | + vector : o = 0x00000000, l = 0x00000040 | |
7 | + rom : o = 0x00000040, l = 0x0000ffc0 | |
8 | + ram : o = 0x40000000, l = 0x00004000 | |
9 | +} | |
10 | + | |
11 | +SECTIONS | |
12 | +{ | |
13 | + .vector : | |
14 | + { | |
15 | + ___vector = . ; | |
16 | + */vectors.o(.text) | |
17 | + FILL(0xff) | |
18 | + ___vector_end = . ; | |
19 | + } > vector | |
20 | + .text : | |
21 | + { | |
22 | + ___text = . ; | |
23 | + *(.text) | |
24 | + *(.strings) | |
25 | + *(.rodata*) | |
26 | + *(.glue*) | |
27 | + ___text_end = . ; | |
28 | + } > rom | |
29 | + .tors : | |
30 | + { | |
31 | + . = ALIGN(4); | |
32 | + ___ctors = . ; | |
33 | + *(.ctors) | |
34 | + ___ctors_end = . ; | |
35 | + ___dtors = . ; | |
36 | + *(.dtors) | |
37 | + ___dtors_end = . ; | |
38 | + } > rom | |
39 | + data : AT (ADDR(.tors) + SIZEOF(.tors)) | |
40 | + { | |
41 | + ___data_rom = ADDR(.tors) + SIZEOF(.tors); | |
42 | + ___data = . ; | |
43 | + *(.data) | |
44 | + ___data_end = . ; | |
45 | + } > ram | |
46 | + .bss : | |
47 | + { | |
48 | + ___bss = . ; | |
49 | + *(.bss) | |
50 | + *(COMMON) | |
51 | + ___bss_end = . ; | |
52 | + } >ram | |
53 | +} | |
54 | + |
@@ -0,0 +1,54 @@ | ||
1 | +OUTPUT_ARCH(arm) | |
2 | +ENTRY(_reset_handler) | |
3 | + | |
4 | +MEMORY | |
5 | +{ | |
6 | + vector : o = 0x80000000, l = 0x00000040 | |
7 | + rom : o = 0x80000040, l = 0x0000ffc0 | |
8 | + ram : o = 0x80010000, l = 0x00002000 | |
9 | +} | |
10 | + | |
11 | +SECTIONS | |
12 | +{ | |
13 | + .vector : | |
14 | + { | |
15 | + ___vector = . ; | |
16 | + */vectors.o(.text) | |
17 | + FILL(0xff) | |
18 | + ___vector_end = . ; | |
19 | + } > vector | |
20 | + .text : | |
21 | + { | |
22 | + ___text = . ; | |
23 | + *(.text) | |
24 | + *(.strings) | |
25 | + *(.rodata*) | |
26 | + *(.glue*) | |
27 | + ___text_end = . ; | |
28 | + } > rom | |
29 | + .tors : | |
30 | + { | |
31 | + . = ALIGN(4); | |
32 | + ___ctors = . ; | |
33 | + *(.ctors) | |
34 | + ___ctors_end = . ; | |
35 | + ___dtors = . ; | |
36 | + *(.dtors) | |
37 | + ___dtors_end = . ; | |
38 | + } > rom | |
39 | + data : AT (ADDR(.tors) + SIZEOF(.tors)) | |
40 | + { | |
41 | + ___data_rom = ADDR(.tors) + SIZEOF(.tors); | |
42 | + ___data = . ; | |
43 | + *(.data) | |
44 | + ___data_end = . ; | |
45 | + } > ram | |
46 | + .bss : | |
47 | + { | |
48 | + ___bss = . ; | |
49 | + *(.bss) | |
50 | + *(COMMON) | |
51 | + ___bss_end = . ; | |
52 | + } >ram | |
53 | +} | |
54 | + |
@@ -0,0 +1,55 @@ | ||
1 | +/* ------------------------------------------------------------------------ */ | |
2 | +/* Hyper Operating System V4 サンプルプログラム */ | |
3 | +/* ベクタテーブル */ | |
4 | +/* */ | |
5 | +/* Copyright (C) 1998-2007 by Project HOS */ | |
6 | +/* http://sourceforge.jp/projects/hos/ */ | |
7 | +/* ------------------------------------------------------------------------ */ | |
8 | + | |
9 | + | |
10 | + /* --- 外部定数宣言 */ | |
11 | + .global _reset_handler | |
12 | + .global _kernel_und_hdr | |
13 | + .global _kernel_swi_hdr | |
14 | + .global _kernel_pre_hdr | |
15 | + .global _kernel_abt_hdr | |
16 | + .global _kernel_irq_hdr | |
17 | + .global _kernel_fiq_hdr | |
18 | + | |
19 | + | |
20 | + .text | |
21 | + .align 2 | |
22 | + | |
23 | +/* --------------------------------------- */ | |
24 | +/* ベクタ定義 */ | |
25 | +/* --------------------------------------- */ | |
26 | + ldr pc, adr_rst_hdr | |
27 | + ldr pc, adr_und_hdr | |
28 | + ldr pc, adr_swi_hdr | |
29 | + ldr pc, adr_pre_hdr | |
30 | + ldr pc, adr_abt_hdr | |
31 | + nop | |
32 | + ldr pc, adr_irq_hdr | |
33 | + ldr pc, adr_fiq_hdr | |
34 | + | |
35 | + | |
36 | +adr_rst_hdr: | |
37 | + .long _reset_handler | |
38 | +adr_und_hdr: | |
39 | + .long _kernel_und_hdr | |
40 | +adr_swi_hdr: | |
41 | + .long _kernel_swi_hdr | |
42 | +adr_pre_hdr: | |
43 | + .long _kernel_pre_hdr | |
44 | +adr_abt_hdr: | |
45 | + .long _kernel_abt_hdr | |
46 | +adr_irq_hdr: | |
47 | + .long _kernel_irq_hdr | |
48 | +adr_fiq_hdr: | |
49 | + .long _kernel_fiq_hdr | |
50 | + | |
51 | + | |
52 | + .end | |
53 | + | |
54 | + | |
55 | +/* end of file */ |
@@ -0,0 +1,27 @@ | ||
1 | +/** | |
2 | + * Sample program for Hyper Operating System V4 Advance | |
3 | + * | |
4 | + * @file main.c | |
5 | + * @brief %jp{メイン関数}%en{main} | |
6 | + * | |
7 | + * Copyright (C) 1998-2006 by Project HOS | |
8 | + * http://sourceforge.jp/projects/hos/ | |
9 | + */ | |
10 | + | |
11 | + | |
12 | +#include "kernel.h" | |
13 | + | |
14 | + | |
15 | +/** %jp{メイン関数} */ | |
16 | +int main() | |
17 | +{ | |
18 | + | |
19 | + /* %jp{カーネルの動作開始} */ | |
20 | + vsta_knl(); | |
21 | + | |
22 | + return 0; | |
23 | +} | |
24 | + | |
25 | + | |
26 | + | |
27 | +/* end of file */ |
@@ -0,0 +1,72 @@ | ||
1 | +/** | |
2 | + * Sample program for Hyper Operating System V4 Advance | |
3 | + * | |
4 | + * @file ostimer.c | |
5 | + * @brief %jp{OSタイマ}%en{OS timer} | |
6 | + * | |
7 | + * Copyright (C) 1998-2006 by Project HOS | |
8 | + * http://sourceforge.jp/projects/hos/ | |
9 | + */ | |
10 | + | |
11 | + | |
12 | +#include "kernel.h" | |
13 | +#include "ostimer.h" | |
14 | + | |
15 | + | |
16 | +#define T0IR ((volatile UW *)0xe0004000) | |
17 | +#define T0TCR ((volatile UW *)0xe0004004) | |
18 | +#define T0TC ((volatile UW *)0xe0004008) | |
19 | +#define T0PR ((volatile UW *)0xe000400c) | |
20 | +#define T0PC ((volatile UW *)0xe0004010) | |
21 | +#define T0MCR ((volatile UW *)0xe0004014) | |
22 | +#define T0MR0 ((volatile UW *)0xe0004018) | |
23 | +#define T0MR1 ((volatile UW *)0xe000401c) | |
24 | +#define T0MR2 ((volatile UW *)0xe0004020) | |
25 | +#define T0MR3 ((volatile UW *)0xe0004024) | |
26 | +#define T0CCR ((volatile UW *)0xe0004028) | |
27 | +#define T0CR0 ((volatile UW *)0xe000402c) | |
28 | +#define T0CR1 ((volatile UW *)0xe0004030) | |
29 | +#define T0CR2 ((volatile UW *)0xe0004034) | |
30 | +#define T0CR3 ((volatile UW *)0xe0004038) | |
31 | +#define T0EMR ((volatile UW *)0xe000403c) | |
32 | + | |
33 | + | |
34 | +#define INTNO_TIMER0 4 | |
35 | + | |
36 | + | |
37 | +static void OsTimer_Isr(VP_INT exinf); /**< %jp{タイマ割込みサービスルーチン} */ | |
38 | + | |
39 | + | |
40 | +/** %jp{OS用タイマ初期化ルーチン} */ | |
41 | +void OsTimer_Initialize(VP_INT exinf) | |
42 | +{ | |
43 | + T_CISR cisr; | |
44 | + | |
45 | + /* %jp{割り込みサービスルーチン生成} */ | |
46 | + cisr.isratr = TA_HLNG; | |
47 | + cisr.exinf = 0; | |
48 | + cisr.intno = INTNO_TIMER0; | |
49 | + cisr.isr = (FP)OsTimer_Isr; | |
50 | + acre_isr(&cisr); | |
51 | + ena_int(INTNO_TIMER0); | |
52 | + | |
53 | + /* %jp{タイマ動作開始} */ | |
54 | + *T0MR0 = 142000 / 4; | |
55 | + *T0MCR = 0x0003; | |
56 | + *T0TCR = 1; | |
57 | + | |
58 | +} | |
59 | + | |
60 | + | |
61 | +/** %jp{タイマ割り込みハンドラ} */ | |
62 | +void OsTimer_Isr(VP_INT exinf) | |
63 | +{ | |
64 | + /* %jp{割り込み要因クリア} */ | |
65 | + *T0IR= 1; | |
66 | + | |
67 | + /* %jp{タイムティック供給} */ | |
68 | + isig_tim(); | |
69 | +} | |
70 | + | |
71 | + | |
72 | +/* end of file */ |
@@ -0,0 +1,31 @@ | ||
1 | +/** | |
2 | + * Sample program for Hyper Operating System V4 Advance | |
3 | + * | |
4 | + * @file ostimer.c | |
5 | + * @brief %jp{OSタイマ}%en{OS timer} | |
6 | + * | |
7 | + * Copyright (C) 1998-2006 by Project HOS | |
8 | + * http://sourceforge.jp/projects/hos/ | |
9 | + */ | |
10 | + | |
11 | + | |
12 | +#ifndef __ostimer_h__ | |
13 | +#define __ostimer_h__ | |
14 | + | |
15 | + | |
16 | +#ifdef __cplusplus | |
17 | +extern "C" { | |
18 | +#endif | |
19 | + | |
20 | +/** %jp{OS用タイマ初期化ルーチン} */ | |
21 | +void OsTimer_Initialize(VP_INT exinf); | |
22 | + | |
23 | +#ifdef __cplusplus | |
24 | +} | |
25 | +#endif | |
26 | + | |
27 | + | |
28 | +#endif /* __ostimer_h__ */ | |
29 | + | |
30 | + | |
31 | +/* end of file */ |
@@ -0,0 +1,92 @@ | ||
1 | +/** | |
2 | + * Sample program for Hyper Operating System V4 Advance | |
3 | + * | |
4 | + * @file sample.c | |
5 | + * @brief %jp{サンプルプログラム}%en{Sample program} | |
6 | + * | |
7 | + * Copyright (C) 1998-2006 by Project HOS | |
8 | + * http://sourceforge.jp/projects/hos/ | |
9 | + */ | |
10 | + | |
11 | +#include <stdlib.h> | |
12 | +#include <string.h> | |
13 | +#include "kernel.h" | |
14 | +#include "kernel_id.h" | |
15 | +#include "uart.h" | |
16 | + | |
17 | + | |
18 | + | |
19 | +/** %jp{初期化ハンドラ} */ | |
20 | +void Sample_Initialize(VP_INT exinf) | |
21 | +{ | |
22 | + /* %jp{UART初期化} */ | |
23 | + Uart_Initialize(); | |
24 | + | |
25 | + /* %jp{タスク起動} */ | |
26 | + act_tsk(TSKID_WAIT); | |
27 | + act_tsk(TSKID_SIGNAL); | |
28 | +} | |
29 | + | |
30 | + | |
31 | +/** %jp{乱数取得} */ | |
32 | +int GetRand(void) | |
33 | +{ | |
34 | + int r; | |
35 | + | |
36 | + wai_sem(SEMID_RAND); | |
37 | + r = rand(); | |
38 | + sig_sem(SEMID_RAND); | |
39 | + | |
40 | + return r; | |
41 | +} | |
42 | + | |
43 | + | |
44 | + | |
45 | +/** %jp{待ちタスク} */ | |
46 | +void Sample_WaitTask(VP_INT exinf) | |
47 | +{ | |
48 | + TMO tmo; | |
49 | + ER ercd; | |
50 | + | |
51 | + for ( ; ; ) | |
52 | + { | |
53 | + /* 待ち時間を決める */ | |
54 | + tmo = GetRand() % 5; | |
55 | + | |
56 | + /* 待つ */ | |
57 | + ercd = twai_sem(SEMID_TEST, tmo); | |
58 | + switch ( ercd ) | |
59 | + { | |
60 | + case E_OK: | |
61 | + Uart_PutString("OK\n"); | |
62 | + break; | |
63 | + | |
64 | + case E_TMOUT: | |
65 | + Uart_PutString("TMOUT\n"); | |
66 | + break; | |
67 | + | |
68 | + default: | |
69 | + Uart_PutString("error!\n"); | |
70 | + for ( ; ; ) ; | |
71 | + } | |
72 | + } | |
73 | +} | |
74 | + | |
75 | + | |
76 | +/** %jp{sig_semタスク} */ | |
77 | +void Sample_SignalTask(VP_INT exinf) | |
78 | +{ | |
79 | + RELTIM tim; | |
80 | + | |
81 | + for ( ; ; ) | |
82 | + { | |
83 | + tim = GetRand() % 5; | |
84 | + dly_tsk(tim); | |
85 | + | |
86 | + sig_sem(SEMID_TEST); | |
87 | + } | |
88 | +} | |
89 | + | |
90 | + | |
91 | + | |
92 | +/* end of file */ |
@@ -0,0 +1,34 @@ | ||
1 | +/** | |
2 | + * Sample program for Hyper Operating System V4 Advance | |
3 | + * | |
4 | + * @file sample.c | |
5 | + * @brief %jp{サンプルプログラム}%en{Sample program} | |
6 | + * | |
7 | + * Copyright (C) 1998-2006 by Project HOS | |
8 | + * http://sourceforge.jp/projects/hos/ | |
9 | + */ | |
10 | + | |
11 | + | |
12 | + | |
13 | +#ifndef __sample_h__ | |
14 | +#define __sample_h__ | |
15 | + | |
16 | + | |
17 | +#ifdef __cplusplus | |
18 | +extern "C" { | |
19 | +#endif | |
20 | + | |
21 | +void Sample_Initialize(VP_INT exinf); | |
22 | +void Sample_WaitTask(VP_INT exinf); | |
23 | +void Sample_SignalTask(VP_INT exinf); | |
24 | +void Sample_Print(VP_INT exinf); | |
25 | + | |
26 | +#ifdef __cplusplus | |
27 | +} | |
28 | +#endif | |
29 | + | |
30 | + | |
31 | +#endif /* __sample_h__ */ | |
32 | + | |
33 | + | |
34 | +/* end of file */ |
@@ -0,0 +1,37 @@ | ||
1 | +/** | |
2 | + * Sample program for Hyper Operating System V4 Advance | |
3 | + * | |
4 | + * @file system.cfg | |
5 | + * @brief %jp{サンプルのコンフィギュレーション} | |
6 | + * | |
7 | + * Copyright (C) 1998-2006 by Project HOS | |
8 | + * http://sourceforge.jp/projects/hos/ | |
9 | + */ | |
10 | + | |
11 | + | |
12 | +/* %jp{カーネル独自の設定}%en{kernel} */ | |
13 | +KERNEL_HEP_MEM(256, NULL); | |
14 | +KERNEL_SYS_STK(256, NULL); | |
15 | +KERNEL_INT_STK(512, NULL); | |
16 | +KERNEL_MAX_TSKID(5); | |
17 | +KERNEL_MAX_SEMID(6); | |
18 | +KERNEL_MAX_FLGID(2); | |
19 | +KERNEL_MAX_MBXID(2); | |
20 | +KERNEL_MAX_MPFID(2); | |
21 | +KERNEL_MAX_ISRID(4); | |
22 | + | |
23 | + | |
24 | +/* %jp{OSタイマの設定}%en{OS timer} */ | |
25 | +INCLUDE("\"ostimer.h\""); | |
26 | +ATT_INI({TA_HLNG, 0, OsTimer_Initialize}); | |
27 | + | |
28 | +/* %jp{サンプル}%en{Sample program} */ | |
29 | +INCLUDE("\"sample.h\""); | |
30 | +ATT_INI({TA_HLNG, 0, Sample_Initialize}); | |
31 | +CRE_TSK(TSKID_WAIT, {TA_HLNG, 2, Sample_WaitTask, 2, 512, NULL}); | |
32 | +CRE_TSK(TSKID_SIGNAL, {TA_HLNG, 2, Sample_SignalTask, 2, 512, NULL}); | |
33 | +CRE_SEM(SEMID_TEST, {TA_TFIFO, 1, 1}); | |
34 | +CRE_SEM(SEMID_RAND, {TA_TFIFO, 1, 1}); | |
35 | + | |
36 | + | |
37 | +/* end of file */ |
@@ -0,0 +1,94 @@ | ||
1 | +/** | |
2 | + * Sample program for Hyper Operating System V4 Advance | |
3 | + * | |
4 | + * @file uart.c | |
5 | + * @brief %jp{UARTへの出力}%en{UART device driver} | |
6 | + * | |
7 | + * Copyright (C) 1998-2006 by Project HOS | |
8 | + * http://sourceforge.jp/projects/hos/ | |
9 | + */ | |
10 | + | |
11 | + | |
12 | +#include "kernel.h" | |
13 | + | |
14 | +#define PINSEL0 ((volatile UW *)0xe002c000) | |
15 | + | |
16 | +#define U0RBR ((volatile UB *)0xe000c000) | |
17 | +#define U0THR ((volatile UB *)0xe000c000) | |
18 | +#define U0LCR ((volatile UB *)0xe000c00c) | |
19 | +#define U0LSR ((volatile UB *)0xe000c014) | |
20 | +#define U0DLL ((volatile UB *)0xe000c000) | |
21 | +#define U0DLM ((volatile UB *)0xe000c004) | |
22 | + | |
23 | + | |
24 | +#define VPB_CLK (14700000/4) | |
25 | +#define UART_BPS 38400 | |
26 | + | |
27 | + | |
28 | +/* %jp{UARTの初期化} */ | |
29 | +void Uart_Initialize(void) | |
30 | +{ | |
31 | + *PINSEL0 = (*PINSEL0 & 0xfffffff0) | 0x05; | |
32 | + | |
33 | + *U0LCR = 0x80; | |
34 | + *U0DLL = (VPB_CLK / 16.0) / UART_BPS + 0.5; | |
35 | + *U0DLM = 0x00; | |
36 | + *U0LCR = 0x03; | |
37 | +} | |
38 | + | |
39 | + | |
40 | +/* %jp{1文字出力} */ | |
41 | +void Uart_PutChar(int c) | |
42 | +{ | |
43 | + while ( !(*U0LSR & 0x20) ) | |
44 | + ; | |
45 | + | |
46 | + *U0THR = c; | |
47 | +} | |
48 | + | |
49 | + | |
50 | +/* %jp{文字列出力} */ | |
51 | +void Uart_PutString(const char *text) | |
52 | +{ | |
53 | + while ( *text != '\0' ) | |
54 | + { | |
55 | + if ( *text == '\n' ) | |
56 | + { | |
57 | + Uart_PutChar('\r'); | |
58 | + Uart_PutChar('\n'); | |
59 | + } | |
60 | + else | |
61 | + { | |
62 | + Uart_PutChar(*text); | |
63 | + } | |
64 | + | |
65 | + text++; | |
66 | + } | |
67 | +} | |
68 | + | |
69 | + | |
70 | +char Uart_hex2asc(int a) | |
71 | +{ | |
72 | + if ( a < 10 ) | |
73 | + { | |
74 | + return '0' + a; | |
75 | + } | |
76 | + return 'a' + a - 10; | |
77 | +} | |
78 | + | |
79 | + | |
80 | +void Uart_PutHexByte(char c) | |
81 | +{ | |
82 | + Uart_PutChar(Uart_hex2asc((c >> 4) & 0xf)); | |
83 | + Uart_PutChar(Uart_hex2asc((c >> 0) & 0xf)); | |
84 | +} | |
85 | + | |
86 | +void Uart_PutHexWord(int i) | |
87 | +{ | |
88 | + Uart_PutHexByte((i >> 8) & 0xff); | |
89 | + Uart_PutHexByte((i >> 0) & 0xff); | |
90 | +} | |
91 | + | |
92 | + | |
93 | + | |
94 | +/* end of file */ |
@@ -0,0 +1,35 @@ | ||
1 | +/** | |
2 | + * Sample program for Hyper Operating System V4 Advance | |
3 | + * | |
4 | + * @file uart.h | |
5 | + * @brief %jp{UARTへの出力}%en{UART device driver} | |
6 | + * | |
7 | + * Copyright (C) 1998-2006 by Project HOS | |
8 | + * http://sourceforge.jp/projects/hos/ | |
9 | + */ | |
10 | + | |
11 | + | |
12 | +#ifndef __ostimer_h__ | |
13 | +#define __ostimer_h__ | |
14 | + | |
15 | + | |
16 | +#ifdef __cplusplus | |
17 | +extern "C" { | |
18 | +#endif | |
19 | + | |
20 | +void Uart_Initialize(void); /* %jp{UART の初期化} */ | |
21 | +void Uart_PutChar(int c); /* %jp{1文字出力} */ | |
22 | +void Uart_PutString(const char *text); /* %jp{文字列出力} */ | |
23 | + | |
24 | +void Uart_PutHexByte(char c); | |
25 | +void Uart_PutHexWord(int i); | |
26 | + | |
27 | +#ifdef __cplusplus | |
28 | +} | |
29 | +#endif | |
30 | + | |
31 | + | |
32 | +#endif /* __ostimer_h__ */ | |
33 | + | |
34 | + | |
35 | +/* end of file */ |