Changeset 429
- Timestamp:
- Jul 3, 2020, 7:19:17 PM (3 years ago)
- Location:
- EcnlProtoTool/trunk
- Files:
-
- 251 added
- 8 deleted
- 353 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/.cproject
r426 r429 49 49 <option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.1804182567" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash" value="true" valueType="boolean"/> 50 50 <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.74647507" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/> 51 <builder buildPath="${workspace_loc:/asp3_dcre}/Debug" id="com.renesas.cdt.managedbuild.gcc.rz.builder.460934776" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="GCC for Renesas Builder" superClass="com.renesas.cdt.managedbuild.gcc.rz.builder"/>51 <builder buildPath="${workspace_loc:/asp3_dcre}/Debug" id="com.renesas.cdt.managedbuild.gcc.rz.builder.460934776" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="GCC for Renesas Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.renesas.cdt.managedbuild.gcc.rz.builder"/> 52 52 <tool id="com.renesas.cdt.managedbuild.gcc.rz.tool.assembler.1682623852" name="Cross ARM GNU Assembler" superClass="com.renesas.cdt.managedbuild.gcc.rz.tool.assembler"> 53 53 <option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.1607103230" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" value="true" valueType="boolean"/> … … 94 94 <option id="toolchain.id" value="gcc-arm-embedded"/> 95 95 <option id="toolchain.version" value="6.3.1.20170620"/> 96 <option id="toolchain.enable" value="true"/> 96 97 </storageModule> 97 98 </cconfiguration> … … 112 113 </configuration> 113 114 </storageModule> 115 <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> 114 116 </cproject> -
EcnlProtoTool/trunk/asp3_dcre/Debug/Makefile
r424 r429 6 6 # Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 # Toyohashi Univ. of Technology, JAPAN 8 # Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory8 # Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # … … 81 81 82 82 # 83 # システムサービスコールライブラリ(libsyssvc.a)のディレクトリ名 84 # (システムサービスコールライブラリもmake対象にする時は,空に定義する) 85 # 86 SYSSVC_LIB = 87 88 # 83 89 # カーネルを関数単位でコンパイルするかどうかの定義 84 90 # … … 89 95 # 90 96 OMIT_TECS = 97 98 # 99 # TECS関係ファイルのディレクトリの定義 100 # 101 TECSDIR = 91 102 92 103 # … … 119 130 120 131 # 121 # 依存関係ファイルを置くディレクトリの定義 122 # 123 DEPDIR = deps 132 # 中間オブジェクトファイルと依存関係ファイルを置くディレクトリの定義 133 # 134 OBJDIR = obj 135 DEPDIR = obj 124 136 125 137 # … … 150 162 endif 151 163 164 TINETDIR = tinet 165 152 166 # 153 167 # mbedサービスの定義 … … 159 173 # 共通コンパイルオプションの定義 160 174 # 161 COPTS := -g -std=gnu99 $(COPTS)175 COPTS := -g -std=gnu99 -ffunction-sections -fdata-sections $(COPTS) 162 176 ifndef OMIT_WARNING_ALL 163 177 COPTS := -Wall $(COPTS) … … 171 185 CDEFS := $(CDEFS) 172 186 INCLUDES := -I. -I$(SRCDIR)/include $(INCLUDES) -I$(SRCDIR) 173 LDFLAGS := $(LDFLAGS) - Wl,-Map=$(OBJNAME).map,--cref187 LDFLAGS := $(LDFLAGS) -L. 174 188 LIBS := $(LIBS) $(CXXLIBS) 175 189 CFLAGS = $(COPTS) $(CDEFS) $(INCLUDES) … … 191 205 APPL_COBJS := sample1n.o sample1.o 192 206 endif 193 APPL_COBJS := $(APPL_COBJS) log_output.o vasyslog.o t_perror.o strerror.o 207 APPL_COBJS := $(APPL_COBJS) log_output.o vasyslog.o t_perror.o strerror.o mbed_stub.o 194 208 APPL_CFLAGS := $(APPL_CFLAGS) 195 209 ifdef APPLDIRS … … 197 211 endif 198 212 199 TINETDIR = tinet200 213 ifdef TINETDIR 201 214 # … … 221 234 SUPPORT_UDP = true 222 235 236 # IGMPを有効に設定 237 #SUPPORT_IGMP = true 238 223 239 # 224 240 # ネットワークサービスの Makefile のインクルード … … 230 246 # システムサービスに関する定義 231 247 # 248 ifdef TCINSTALL 249 GCC_PATH = $(TCINSTALL) 250 else 251 GCC_PATH = $(shell which $(CC))/../../ 252 endif 253 MALLOC_LIB = "${GCC_PATH}arm-none-eabi/lib/thumb/v7-ar/fpv3/hard/libc.a" 254 MALLOC_OBJS = lib_a-reent.o lib_a-impure.o lib_a-malloc.o lib_a-mallocr.o lib_a-calloc.o lib_a-callocr.o lib_a-realloc.o lib_a-reallocr.o lib_a-sbrkr.o lib_a-freer.o 255 232 256 SYSSVC_DIRS := $(TECSGENDIR) $(SRCDIR)/tecs_kernel \ 233 257 $(SYSSVC_DIRS) $(SRCDIR)/syssvc 234 258 SYSSVC_ASMOBJS := $(SYSSVC_ASMOBJS) 235 SYSSVC_COBJS := $( INIT_TECS_COBJ) $(TECS_COBJS) $(SYSSVC_COBJS) \236 $(CXXRTS)259 SYSSVC_COBJS := $(SYSSVC_COBJS) $(TECS_COBJS) \ 260 $(INIT_TECS_COBJ) $(CXXRTS) 237 261 SYSSVC_CFLAGS := $(SYSSVC_CFLAGS) 238 262 INCLUDES := $(INCLUDES) -I$(TECSGENDIR) -I$(SRCDIR)/tecs_kernel -I../../musl-1.1.18/include 239 263 240 264 # 265 # トレースログ記録のサンプルコードに関する定義 266 # 267 ifdef ENABLE_TRACE 268 COPTS := $(COPTS) -DTOPPERS_ENABLE_TRACE 269 SYSSVC_DIRS := $(SYSSVC_DIRS) $(SRCDIR)/arch/tracelog 270 endif 271 272 # 241 273 # ターゲットファイル 242 274 # 243 275 .PHONY: all 244 276 ifndef OMIT_TECS 245 all: tecs 277 all: tecs | $(DEPDIR) 246 278 # @$(MAKE) check 247 279 @$(MAKE) check $(OBJNAME).bin … … 258 290 # コンフィギュレータに関する定義 259 291 # 292 CFG_KERNEL := --kernel asp 260 293 ifndef TINETDIR 261 294 CFG_TRB := -T $(TARGETDIR)/target_kernel.trb … … 266 299 CFG_TABS := --api-table $(TINET_ROOT)/tcpip_api.def:tcpip \ 267 300 --api-table $(SRCDIR)/kernel/kernel_api.def:kernel \ 268 --symval-table $( SRCDIR)/tinet/tcpip_sym.def \301 --symval-table $(TINET_ROOT)/tcpip_sym.def \ 269 302 --symval-table $(SRCDIR)/kernel/kernel_sym.def $(CFG_TABS) 270 303 endif … … 272 305 CFG_COBJS := kernel_cfg.o $(CFG_COBJS) 273 306 CFG_OBJS := $(CFG_ASMOBJS) $(CFG_COBJS) 307 CFG_CFLAGS := -DTOPPERS_CB_TYPE_ONLY $(CFG_CFLAGS) 308 274 309 CFG2_OUT_SRCS := kernel_cfg.h kernel_cfg.c $(CFG2_OUT_SRCS) 275 CFG_CFLAGS := -DTOPPERS_CB_TYPE_ONLY $(CFG_CFLAGS)276 310 277 311 # … … 304 338 $(foreach file,$(KERNEL_FCSRCS),$(file:.c=.o)) 305 339 endif 306 ifdef OMIT_OFFSET_H 307 OFFSET_H = 308 else 340 ifdef TARGET_OFFSET_TRB 309 341 OFFSET_H = offset.h 310 342 endif … … 322 354 endif 323 355 ifndef TARGET_TCPIP_TRB 324 TARGET_TCPIP_TRB := $(SRCDIR)/ tinet/tinet.trb356 TARGET_TCPIP_TRB := $(SRCDIR)/$(TINETDIR)/tinet.trb 325 357 endif 326 358 … … 332 364 vpath %.cfg $(APPL_DIRS) 333 365 vpath %.cdl $(APPL_DIRS) 366 vpath %.bin $(APPL_DIRS) 367 368 # 369 # 中間オブジェクトファイルを置くディレクトリの処理 370 # 371 APPL_ASMOBJS := $(addprefix $(OBJDIR)/, $(APPL_ASMOBJS)) 372 APPL_CXXOBJS := $(addprefix $(OBJDIR)/, $(APPL_CXXOBJS)) 373 APPL_COBJS := $(addprefix $(OBJDIR)/, $(APPL_COBJS)) 374 SYSSVC_ASMOBJS := $(addprefix $(OBJDIR)/, $(SYSSVC_ASMOBJS)) 375 SYSSVC_COBJS := $(addprefix $(OBJDIR)/, $(SYSSVC_COBJS)) 376 KERNEL_ASMOBJS := $(addprefix $(OBJDIR)/, $(KERNEL_ASMOBJS)) 377 KERNEL_COBJS := $(addprefix $(OBJDIR)/, $(KERNEL_COBJS)) 378 KERNEL_LCOBJS := $(addprefix $(OBJDIR)/, $(KERNEL_LCOBJS)) 379 CFG_ASMOBJS := $(addprefix $(OBJDIR)/, $(CFG_ASMOBJS)) 380 CFG_COBJS := $(addprefix $(OBJDIR)/, $(CFG_COBJS)) 381 CFG_DMY := $(addprefix $(OBJDIR)/, $(CFG_DMY)) 382 MALLOC_OBJS := $(addprefix $(OBJDIR)/, $(MALLOC_OBJS)) 334 383 335 384 # 336 385 # コンパイルのための変数の定義 337 386 # 338 KERNEL_LIB_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS) $(KERNEL_LCOBJS)387 APPL_OBJS = $(APPL_ASMOBJS) $(APPL_COBJS) $(APPL_CXXOBJS) 339 388 SYSSVC_OBJS = $(SYSSVC_ASMOBJS) $(SYSSVC_COBJS) $(HIDDEN_OBJS) 340 APPL_OBJS = $(APPL_ASMOBJS) $(APPL_COBJS) $(APPL_CXXOBJS) 389 KERNEL_LIB_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS) $(KERNEL_LCOBJS) $(MALLOC_OBJS) 390 CFG_OBJS = $(CFG_ASMOBJS) $(CFG_COBJS) 341 391 ALL_OBJS = $(START_OBJS) $(APPL_OBJS) $(SYSSVC_OBJS) $(CFG_OBJS) \ 342 392 $(END_OBJS) $(HIDDEN_OBJS) … … 350 400 OBJ_LDFLAGS := $(OBJ_LDFLAGS) -L. 351 401 endif 402 ifdef SYSSVC_LIB 403 LIBS_DEP := $(LIBS_DEP) $(SYSSVC_LIB)/libsyssvc.a 404 OBJ_LDFLAGS := $(OBJ_LDFLAGS) -L$(SYSSVC_LIB) 405 REALCLEAN_FILES := $(REALCLEAN_FILES) libsyssvc.a 406 else 407 LIBS_DEP := $(LIBS_DEP) libsyssvc.a 408 OBJ_LDFLAGS := $(OBJ_LDFLAGS) -L. 409 endif 352 410 353 411 ifdef TEXT_START_ADDRESS … … 372 430 tecs $(TECSGEN_SRCS) $(TECS_HEADERS): $(TECSGEN_TIMESTAMP) ; 373 431 $(TECSGEN_TIMESTAMP): $(APPL_CDL) $(TECS_IMPORTS) 374 $(TECSGEN) $< -R $(INCLUDES) --cpp "$( TECS_CPP)" -g $(TECSGENDIR)432 $(TECSGEN) $< -R $(INCLUDES) --cpp "$(subst ", \", $(TECS_CPP))" -g $(TECSGENDIR) 375 433 376 434 # … … 379 437 cfg1_out.c cfg1_out.db: cfg1_out.timestamp ; 380 438 cfg1_out.timestamp: $(APPL_CFG) $(TECSGEN_TIMESTAMP) 381 echo $(CFG_TABS) 382 $(CFG) --pass 1 --kernel asp $(INCLUDES) $(CFG_TABS) \ 439 $(CFG) --pass 1 $(CFG_KERNEL) $(INCLUDES) $(CFG_TABS) \ 383 440 -M $(DEPDIR)/cfg1_out_c.d $(TARGET_KERNEL_CFG) $< 384 441 385 $(CFG1_OUT): $(START_OBJS) cfg1_out.o $(CFG_DMY) $(END_OBJS) $(HIDDEN_OBJS)442 $(CFG1_OUT): $(START_OBJS) $(OBJDIR)/cfg1_out.o $(CFG_DMY) $(END_OBJS) $(HIDDEN_OBJS) 386 443 $(LINK) $(CFLAGS) $(LDFLAGS) $(CFG1_OUT_LDFLAGS) -o $(CFG1_OUT) \ 387 $(START_OBJS) cfg1_out.o $(CFG_DMY) $(END_OBJS)444 $(START_OBJS) $(OBJDIR)/cfg1_out.o $(CFG_DMY) $(LIBS) $(END_OBJS) $(HIDDEN_OBJS) 388 445 389 446 cfg1_out.syms: $(CFG1_OUT) … … 395 452 $(CFG2_OUT_SRCS) cfg2_out.db: kernel_cfg.timestamp ; 396 453 kernel_cfg.timestamp: cfg1_out.db cfg1_out.syms cfg1_out.srec 397 $(CFG) --pass 2 --kernel asp$(INCLUDES) $(CFG_TRB)454 $(CFG) --pass 2 $(CFG_KERNEL) $(INCLUDES) $(CFG_TRB) 398 455 399 456 # … … 402 459 $(OFFSET_H): offset.timestamp ; 403 460 offset.timestamp: cfg1_out.db cfg1_out.syms cfg1_out.srec 404 $(CFG) --pass 2 -O --kernel asp$(INCLUDES) -T $(TARGET_OFFSET_TRB) \461 $(CFG) --pass 2 -O $(CFG_KERNEL) $(INCLUDES) -T $(TARGET_OFFSET_TRB) \ 405 462 --rom-symbol cfg1_out.syms --rom-image cfg1_out.srec 406 463 … … 414 471 415 472 # 473 # システムサービスコールライブラリファイルの生成 474 # 475 libsyssvc.a: $(filter-out $(OBJDIR)/tBannerMain.o, $(SYSSVC_OBJS)) 476 rm -f libsyssvc.a 477 $(AR) -rcs libsyssvc.a $(filter-out $(OBJDIR)/tBannerMain.o, $(SYSSVC_OBJS)) 478 $(RANLIB) libsyssvc.a 479 480 # 481 # 並列makeのための依存関係の定義 482 # 483 $(APPL_OBJS) $(filter-out $(CFG_DMY), $(SYSSVC_OBJS)): | kernel_cfg.timestamp 484 $(APPL_ASMOBJS) $(filter-out $(CFG_DMY), $(SYSSVC_ASMOBJS)) $(KERNEL_ASMOBJS) $(CFG_ASMOBJS): \ 485 | offset.timestamp 486 487 # 416 488 # 特別な依存関係の定義 417 489 # 418 tBannerMain.o: $(filter-out tBannerMain.o,$(ALL_OBJS)) $(LIBS_DEP) 490 $(OBJDIR)/tBannerMain.o: $(filter-out $(OBJDIR)/tBannerMain.o,$(ALL_OBJS)) \ 491 $(LIBS_DEP) 419 492 420 493 # … … 423 496 $(OBJFILE): $(ALL_OBJS) $(LIBS_DEP) 424 497 $(LINK) $(CFLAGS) $(LDFLAGS) $(OBJ_LDFLAGS) -o $(OBJFILE) \ 498 -Wl,-Map=$(OBJNAME).map,--cref -Wl,--gc-sections -Wl,-e_kernel__start,--gc-keep-exported=_kernel_istk \ 425 499 $(START_OBJS) $(APPL_OBJS) $(SYSSVC_OBJS) $(CFG_OBJS) \ 426 $(ALL_LIBS) $(END_OBJS) 500 -Wl,--start-group $(ALL_LIBS) -Wl,--end-group $(END_OBJS) 501 502 # 503 # 依存関係フォルダの作成 504 # 505 $(DEPDIR): 506 mkdir $@ 427 507 428 508 # … … 452 532 check: check.timestamp ; 453 533 check.timestamp: cfg2_out.db $(OBJNAME).syms $(OBJNAME).srec 454 $(CFG) --pass 3 --kernel asp-O $(INCLUDES) -T $(TARGET_CHECK_TRB) \534 $(CFG) --pass 3 $(CFG_KERNEL) -O $(INCLUDES) -T $(TARGET_CHECK_TRB) \ 455 535 --rom-symbol $(OBJNAME).syms --rom-image $(OBJNAME).srec 456 536 @echo "configuration check passed" … … 461 541 .PHONY: clean 462 542 clean: 463 rm -f \#* *~ *.o $(DEPDIR)/*.d $(CLEAN_FILES) check.timestamp543 rm -f \#* *~ $(OBJDIR)/*.o $(DEPDIR)/*.d $(CLEAN_FILES) check.timestamp 464 544 rm -f $(OBJFILE) $(OBJNAME).syms $(OBJNAME).srec $(OBJNAME).bin 465 545 rm -f kernel_cfg.timestamp $(CFG2_OUT_SRCS) cfg2_out.db … … 471 551 rm -f libkernel.a 472 552 endif 553 ifndef SYSSVC_LIB 554 rm -f libsyssvc.a 555 endif 556 rm -f $(MALLOC_OBJS) 473 557 474 558 .PHONY: cleankernel 475 559 cleankernel: 476 560 rm -f $(OFFSET_H) $(KERNEL_LIB_OBJS) 477 rm -f $(KERNEL_LIB_OBJS:%.o=$(DEPDIR)/%.d) 561 rm -f $(KERNEL_LIB_OBJS:$(OBJDIR)/%.o=$(DEPDIR)/%.d) 562 563 .PHONY: cleansyssvc 564 cleansyssvc: 565 rm -f $(SYSSVC_OBJS) 566 rm -f $(SYSSVC_OBJS:$(OBJDIR)/%.o=$(DEPDIR)/%.d) 478 567 479 568 .PHONY: realclean … … 487 576 # のみを付けてコンパイルする. 488 577 # 489 ALL_CFG_COBJS = $(CFG_COBJS) cfg1_out.o578 ALL_CFG_COBJS = $(CFG_COBJS) $(OBJDIR)/cfg1_out.o 490 579 ALL_CFG_ASMOBJS = $(CFG_ASMOBJS) 491 580 492 $(ALL_CFG_COBJS): %.o: %.c493 $(CC) -c - MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(CFG_CFLAGS) $<494 495 $(ALL_CFG_COBJS: .o=.s): %.s: %.c496 $(CC) -S $(CFLAGS) $(CFG_CFLAGS) $<497 498 $(ALL_CFG_ASMOBJS): %.o: %.S499 $(CC) -c - MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(CFG_CFLAGS) $<581 $(ALL_CFG_COBJS): $(OBJDIR)/%.o: %.c 582 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(CFG_CFLAGS) $< 583 584 $(ALL_CFG_COBJS:$(OBJDIR)/%.o=%.s): %.s: %.c 585 $(CC) -S -o $@ $(CFLAGS) $(CFG_CFLAGS) $< 586 587 $(ALL_CFG_ASMOBJS): $(OBJDIR)/%.o: %.S 588 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(CFG_CFLAGS) $< 500 589 501 590 # … … 549 638 # コンパイルルールの定義 550 639 # 551 $(KERNEL_COBJS): %.o: %.c552 $(CC) -c - MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(KERNEL_CFLAGS) $<553 554 $(KERNEL_COBJS: .o=.s): %.s: %.c555 $(CC) -S $(CFLAGS) $(KERNEL_CFLAGS) $<556 557 $(KERNEL_LCOBJS): %.o:558 $(CC) - DTOPPERS_$(*F) -o $@ -c-MD -MP -MF $(DEPDIR)/$*.d \640 $(KERNEL_COBJS): $(OBJDIR)/%.o: %.c 641 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(KERNEL_CFLAGS) $< 642 643 $(KERNEL_COBJS:$(OBJDIR)/%.o=%.s): %.s: %.c 644 $(CC) -S -o $@ $(CFLAGS) $(KERNEL_CFLAGS) $< 645 646 $(KERNEL_LCOBJS): $(OBJDIR)/%.o: 647 $(CC) -c -o $@ -DTOPPERS_$(*F) -MD -MP -MF $(DEPDIR)/$*.d \ 559 648 $(CFLAGS) $(KERNEL_CFLAGS) $< 560 649 561 $(KERNEL_LCOBJS:.o=.s): %.s: 562 $(CC) -DTOPPERS_$(*F) -o $@ -S $(CFLAGS) $(KERNEL_CFLAGS) $< 563 564 $(KERNEL_ASMOBJS): %.o: %.S 565 $(CC) -c -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(KERNEL_CFLAGS) $< 566 567 $(SYSSVC_COBJS): %.o: %.c 568 $(CC) -c -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(SYSSVC_CFLAGS) $< 569 570 $(SYSSVC_COBJS:.o=.s): %.s: %.c 571 $(CC) -S $(CFLAGS) $(SYSSVC_CFLAGS) $< 572 573 $(SYSSVC_ASMOBJS): %.o: %.S 574 $(CC) -c -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(SYSSVC_CFLAGS) $< 575 576 $(APPL_COBJS): %.o: %.c 577 $(CC) -c -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(APPL_CFLAGS) $< 578 579 $(APPL_COBJS:.o=.s): %.s: %.c 580 $(CC) -S $(CFLAGS) $(APPL_CFLAGS) $< 581 582 $(APPL_CXXOBJS): %.o: %.cpp 583 $(CXX) -c -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(APPL_CFLAGS) $< 584 585 $(APPL_CXXOBJS:.o=.s): %.s: %.cpp 586 $(CXX) -S $(CFLAGS) $(APPL_CFLAGS) $< 587 588 $(APPL_ASMOBJS): %.o: %.S 589 $(CC) -c -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(APPL_CFLAGS) $< 650 $(KERNEL_LCOBJS:$(OBJDIR)/%.o=%.s): %.s: 651 $(CC) -S -o $@ -DTOPPERS_$(*F) $(CFLAGS) $(KERNEL_CFLAGS) $< 652 653 $(KERNEL_ASMOBJS): $(OBJDIR)/%.o: %.S 654 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(KERNEL_CFLAGS) $< 655 656 $(SYSSVC_COBJS): $(OBJDIR)/%.o: %.c 657 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(SYSSVC_CFLAGS) $< 658 659 $(SYSSVC_COBJS:$(OBJDIR)/%.o=%.s): %.s: %.c 660 $(CC) -S -o $@ $(CFLAGS) $(SYSSVC_CFLAGS) $< 661 662 $(SYSSVC_ASMOBJS): $(OBJDIR)/%.o: %.S 663 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(SYSSVC_CFLAGS) $< 664 665 $(APPL_COBJS): $(OBJDIR)/%.o: %.c 666 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(APPL_CFLAGS) $< 667 668 $(APPL_COBJS:$(OBJDIR)/%.o=%.s): %.s: %.c 669 $(CC) -S -o $@ $(CFLAGS) $(APPL_CFLAGS) $< 670 671 $(APPL_CXXOBJS): $(OBJDIR)/%.o: %.cpp 672 $(CXX) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(APPL_CFLAGS) $< 673 674 $(APPL_CXXOBJS:$(OBJDIR)/%.o=%.s): %.s: %.cpp 675 $(CXX) -S -o $@ $(CFLAGS) $(APPL_CFLAGS) $< 676 677 $(APPL_ASMOBJS): $(OBJDIR)/%.o: %.S 678 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(APPL_CFLAGS) $< 679 680 $(MALLOC_OBJS): $(OBJDIR)/%.o: 681 $(AR) x $(MALLOC_LIB) $(notdir $@) 682 mv $(notdir $@) $@ 590 683 591 684 # 592 685 # デフォルトコンパイルルールを上書き 593 686 # 594 %.o: %.c687 $(OBJDIR)/%.o: %.c 595 688 @echo "*** Default compile rules should not be used." 596 $(CC) -c - MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $<689 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $< 597 690 598 691 %.s: %.c 599 692 @echo "*** Default compile rules should not be used." 600 $(CC) -S $(CFLAGS) $<601 602 %.o: %.cpp693 $(CC) -S -o $@ $(CFLAGS) $< 694 695 $(OBJDIR)/%.o: %.cpp 603 696 @echo "*** Default compile rules should not be used." 604 $(CXX) -c - MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $<697 $(CXX) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $< 605 698 606 699 %.s: %.cpp 607 700 @echo "*** Default compile rules should not be used." 608 $(CXX) -S $(CFLAGS) $<609 610 %.o: %.S701 $(CXX) -S -o $@ $(CFLAGS) $< 702 703 $(OBJDIR)/%.o: %.S 611 704 @echo "*** Default compile rules should not be used." 612 $(CC) -c - MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $<705 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $< -
EcnlProtoTool/trunk/asp3_dcre/MANIFEST
r270 r429 1 1 PACKAGE asp3 2 VERSION 3. 1.02 VERSION 3.5.0 3 3 4 4 configure.rb … … 88 88 tecs_kernel/tAlarmNotifier.c 89 89 tecs_kernel/tAlarmNotifier_inline.h 90 tecs_kernel/tCpuExceptionHandler.c91 90 tecs_kernel/tCyclicNotifier.c 92 91 tecs_kernel/tCyclicNotifier_inline.h … … 96 95 tecs_kernel/tISR.c 97 96 tecs_kernel/tInitializeRoutine.c 98 tecs_kernel/tInterruptHandler.c99 97 tecs_kernel/tInterruptRequest_inline.h 100 98 tecs_kernel/tKernel_inline.h … … 119 117 syssvc/tLogTask.cdl 120 118 syssvc/tLogTaskMain.c 119 syssvc/tPutLogSIOPort.c 120 syssvc/tPutLogSIOPort.cdl 121 121 syssvc/tSerialAdapter.c 122 122 syssvc/tSerialAdapter.cdl … … 129 129 syssvc/tTestService.c 130 130 syssvc/tTestService.cdl 131 syssvc/tTestServiceAdapter.c 132 syssvc/tTestServiceAdapter.cdl 131 133 syssvc/test_svc.h 132 134 … … 141 143 arch/tracelog/tTraceLog.c 142 144 arch/tracelog/tTraceLog.cdl 145 146 arch/simtimer/sim_timer.c 147 arch/simtimer/sim_timer.cfg 148 arch/simtimer/sim_timer.h 149 arch/simtimer/sim_timer_cntl.h 150 arch/simtimer/tSimTimerCntl.c 151 arch/simtimer/tSimTimerCntl.cdl 152 arch/simtimer/tSimTimerCntlAdapter.c 153 arch/simtimer/tSimTimerCntlAdapter.cdl 143 154 144 155 utils/applyrename.rb -
EcnlProtoTool/trunk/asp3_dcre/README.txt
r321 r429 1 1 2 TOPPERS/ASP3 Kernel(Release 3. 1)2 TOPPERS/ASP3 Kernel(Release 3.5) 3 3 Toyohashi Open Platform for Embedded Real-Time Systems/ 4 4 Advanced Standard Profile Kernel … … 40 40 グリスト(users@toppers.jp)宛にお願いします. 41 41 42 これらのメーリングリストに投稿されたメールは,ウェブサイトのメーリング 43 リストアーカイブから読むことができますので,公開すべきでない情報(個人 44 情報など)をメール中に含めないように注意をお願いします. 45 42 46 TOPPERSユーザーズメーリングリストへの登録方法については,以下のページに 43 47 説明があります. -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/MANIFEST
r270 r429 1 1 PACKAGE asp3_arch_arm_gcc 2 VERSION 3. 1.02 VERSION 3.2.0 3 3 4 4 MANIFEST -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/Makefile.core
r321 r429 2 2 # Makefileのコア依存部(ARM用) 3 3 # 4 # $Id $4 # $Id: Makefile.core 755 2016-06-12 10:08:22Z ertl-hiro $ 5 5 # 6 6 … … 50 50 # START_OBJSをstart.oに設定し,LDFLAGSに-nostdlibを追加する. 51 51 # 52 START_OBJS = start.o 52 START_OBJS := start.o 53 START_OBJS := $(addprefix $(OBJDIR)/, $(START_OBJS)) 53 54 54 $(START_OBJS): %.o: %.S55 $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<55 $(START_OBJS): $(OBJDIR)/%.o: %.S 56 $(CC) -c -o $@ -MD -MP -MF $(DEPDIR)/$*.d $(CFLAGS) $(KERNEL_CFLAGS) $< 56 57 57 LDFLAGS := -no stdlib$(LDFLAGS)58 LDFLAGS := -nodefaultlibs $(LDFLAGS) -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/arm.c
r321 r429 137 137 * ARMv7におけるデータキャッシュの無効化 138 138 * 139 * レベル0のキャッシュのみを無効化する. 139 * バリアを2か所に入れているのは,ARMアーキテクチャリファレンスマニュ 140 * アルのサンプルコードを踏襲した. 140 141 */ 141 142 #if __TARGET_ARCH_ARM == 7 … … 144 145 armv7_invalidate_dcache(void) 145 146 { 146 uint32_t reg; 147 uint32_t clidr, ccsidr; 148 uint32_t level, no_levels; 147 149 uint32_t way, no_ways, shift_way; 148 150 uint32_t set, no_sets, shift_set; 149 150 CP15_WRITE_CSSELR(0U); 151 CP15_READ_CCSIDR(reg); 152 no_sets = ((reg >> 13) & 0x7fffU) + 1; 153 shift_set = (reg & 0x07U) + 4; 154 no_ways = ((reg >> 3) & 0x3ffU) + 1; 155 shift_way = count_leading_zero(no_ways); 156 157 for (way = 0; way < no_ways; way++){ 158 for (set = 0; set < no_sets; set++) { 159 reg = (way << shift_way) | (set << shift_set); 160 CP15_WRITE_DCISW(reg); 151 uint32_t waylevel, setwaylevel; 152 153 CP15_READ_CLIDR(clidr); 154 no_levels = (clidr >> 24) & 0x07U; 155 for (level = 0; level < no_levels; level++) { 156 if (((clidr >> (level * 3)) & 0x07U) >= 0x02U) { 157 CP15_WRITE_CSSELR(level << 1); 158 inst_sync_barrier(); 159 CP15_READ_CCSIDR(ccsidr); 160 no_sets = ((ccsidr >> 13) & 0x7fffU) + 1; 161 shift_set = (ccsidr & 0x07U) + 4; 162 no_ways = ((ccsidr >> 3) & 0x3ffU) + 1; 163 shift_way = count_leading_zero(no_ways - 1); 164 165 for (way = 0; way < no_ways; way++) { 166 waylevel = (way << shift_way) | (level << 1); 167 for (set = 0; set < no_sets; set++) { 168 setwaylevel = waylevel | (set << shift_set); 169 CP15_WRITE_DCISW(setwaylevel); 170 } 171 } 161 172 } 162 173 } 174 data_sync_barrier(); 163 175 } 164 176 … … 168 180 * ARMv7におけるデータキャッシュのクリーンと無効化 169 181 * 170 * レベル0のキャッシュのみをクリーンと無効化する. 182 * バリアを2か所に入れているのは,ARMアーキテクチャリファレンスマニュ 183 * アルのサンプルコードを踏襲した. 171 184 */ 172 185 #if __TARGET_ARCH_ARM == 7 … … 175 188 armv7_clean_and_invalidate_dcache(void) 176 189 { 177 uint32_t reg; 190 uint32_t clidr, ccsidr; 191 uint32_t level, no_levels; 178 192 uint32_t way, no_ways, shift_way; 179 193 uint32_t set, no_sets, shift_set; 180 181 CP15_WRITE_CSSELR(0U); 182 CP15_READ_CCSIDR(reg); 183 no_sets = ((reg >> 13) & 0x7fffU) + 1; 184 shift_set = (reg & 0x07U) + 4; 185 no_ways = ((reg >> 3) & 0x3ffU) + 1; 186 shift_way = count_leading_zero(no_ways); 187 188 for (way = 0; way < no_ways; way++){ 189 for (set = 0; set < no_sets; set++) { 190 reg = (way << shift_way) | (set << shift_set); 191 CP15_WRITE_DCCISW(reg); 194 uint32_t waylevel, setwaylevel; 195 196 CP15_READ_CLIDR(clidr); 197 no_levels = (clidr >> 24) & 0x07U; 198 for (level = 0; level < no_levels; level++) { 199 if (((clidr >> (level * 3)) & 0x07U) >= 0x02U) { 200 CP15_WRITE_CSSELR(level << 1); 201 inst_sync_barrier(); 202 CP15_READ_CCSIDR(ccsidr); 203 no_sets = ((ccsidr >> 13) & 0x7fffU) + 1; 204 shift_set = (ccsidr & 0x07U) + 4; 205 no_ways = ((ccsidr >> 3) & 0x3ffU) + 1; 206 shift_way = count_leading_zero(no_ways - 1); 207 208 for (way = 0; way < no_ways; way++) { 209 waylevel = (way << shift_way) | (level << 1); 210 for (set = 0; set < no_sets; set++) { 211 setwaylevel = waylevel | (set << shift_set); 212 CP15_WRITE_DCCISW(setwaylevel); 213 } 214 } 192 215 } 193 216 } 217 data_sync_barrier(); 194 218 } 195 219 -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/arm.h
r321 r429 5 5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 6 6 * Toyohashi Univ. of Technology, JAPAN 7 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * … … 53 53 */ 54 54 #ifndef TOPPERS_MACRO_ONLY 55 #ifndef TECSGEN 56 #include "arm_insn.h" /* tecsgenが解釈できないためスキップ */ 57 #endif /* TECSGEN */ 55 #include "arm_insn.h" 58 56 #endif /* TOPPERS_MACRO_ONLY */ 59 57 … … 117 115 #define CP15_SCTLR_DCACHE UINT_C(0x00000004) 118 116 #define CP15_SCTLR_MMU UINT_C(0x00000001) 117 118 /* 119 * CP15のコプロセッサアクセス制御レジスタ(CPACR)の設定値 120 */ 121 #define CP15_CPACR_ASEDIS UINT_C(0x80000000) 122 #define CP15_CPACR_D32DIS UINT_C(0x40000000) 123 #define CP15_CPACR_CP11_FULLACCESS UINT_C(0x00c00000) 124 #define CP15_CPACR_CP10_FULLACCESS UINT_C(0x00300000) 119 125 120 126 /* … … 193 199 #define ARM_MMU_DSCR1_TEX010 0x02000U /* TEXビットが010 */ 194 200 #define ARM_MMU_DSCR1_TEX100 0x04000U /* TEXビットが100 */ 195 #define ARM_MMU_DSCR1_AP01 0x00400U /* APビットが01 */196 #define ARM_MMU_DSCR1_AP10 0x00800U /* APビットが10 */197 #define ARM_MMU_DSCR1_AP11 0x00c00U /* APビットが11 */198 201 #define ARM_MMU_DSCR1_CB00 0x00000U /* Cビットが0,Bビットが0 */ 199 202 #define ARM_MMU_DSCR1_CB01 0x00004U /* Cビットが0,Bビットが1 */ … … 201 204 #define ARM_MMU_DSCR1_CB11 0x0000cU /* Cビットが1,Bビットが1 */ 202 205 203 #if __TARGET_ARCH_ARM >= 6 206 #if __TARGET_ARCH_ARM < 6 207 208 #define ARMV5_MMU_DSCR1_AP01 0x00400U /* APビットが01 */ 209 #define ARMV5_MMU_DSCR1_AP10 0x00800U /* APビットが10 */ 210 #define ARMV5_MMU_DSCR1_AP11 0x00c00U /* APビットが11 */ 211 212 #else /* __TARGET_ARCH_ARM < 6 */ 213 204 214 #define ARMV6_MMU_DSCR1_NONGLOBAL 0x20000U /* グローバルでない */ 205 #define ARMV6_MMU_DSCR1_APX0 0x00000U /* APXビットが0 */ 206 #define ARMV6_MMU_DSCR1_APX1 0x08000U /* APXビットが1 */ 215 #define ARMV6_MMU_DSCR1_AP001 0x00400 /* APビットが001 */ 216 #define ARMV6_MMU_DSCR1_AP010 0x00800 /* APビットが010 */ 217 #define ARMV6_MMU_DSCR1_AP011 0x00c00 /* APビットが011 */ 218 #define ARMV6_MMU_DSCR1_AP101 0x08400 /* APビットが101 */ 219 #define ARMV6_MMU_DSCR1_AP110 0x08800 /* APビットが110 */ 220 #define ARMV6_MMU_DSCR1_AP111 0x08c00 /* APビットが111 */ 207 221 #define ARMV6_MMU_DSCR1_ECC 0x00200U /* ECCが有効(MPCore)*/ 208 222 #define ARMV6_MMU_DSCR1_NOEXEC 0x00010U /* 実行不可 */ 209 #endif /* __TARGET_ARCH_ARM >= 6 */ 223 224 #endif /* __TARGET_ARCH_ARM < 6 */ 210 225 211 226 /* … … 237 252 #define ARMV6_MMU_DSCR2_NONGLOBAL 0x0800U /* グローバルでない */ 238 253 #define ARMV6_MMU_DSCR2_SHARED 0x0400U /* プロセッサ間で共有 */ 239 #define ARMV6_MMU_DSCR2_APX0 0x0000U /* APXビットが0 */ 240 #define ARMV6_MMU_DSCR2_APX1 0x0200U /* APXビットが1 */ 241 #define ARMV6_MMU_DSCR2_AP01 0x0010U /* APビットが01 */ 242 #define ARMV6_MMU_DSCR2_AP10 0x0020U /* APビットが10 */ 243 #define ARMV6_MMU_DSCR2_AP11 0x0030U /* APビットが11 */ 254 #define ARMV6_MMU_DSCR2_AP001 0x0010 /* APビットが001 */ 255 #define ARMV6_MMU_DSCR2_AP010 0x0020 /* APビットが010 */ 256 #define ARMV6_MMU_DSCR2_AP011 0x0030 /* APビットが011 */ 257 #define ARMV6_MMU_DSCR2_AP101 0x0210 /* APビットが101 */ 258 #define ARMV6_MMU_DSCR2_AP110 0x0220 /* APビットが110 */ 259 #define ARMV6_MMU_DSCR2_AP111 0x0230 /* APビットが111 */ 244 260 245 261 /* ラージページのディスクリプタ用 */ … … 318 334 319 335 /* 320 * プロセッサ番号の取得336 * 自プロセッサのインデックス(0オリジン)の取得 321 337 * 322 * マルチプロセッサアフィニティレジスタを読んで,その下位8ビットを返す. 323 * ARMv6では,マルチプロセッサをサポートしている場合にのみ使用できる. 338 * マルチプロセッサアフィニティレジスタを読んで,その下位8ビットを返 339 * す.ARMv6では,マルチプロセッサをサポートしている場合にのみ使用で 340 * きる. 324 341 */ 325 342 #if __TARGET_ARCH_ARM >= 6 326 343 327 Inline uint 32_t328 arm_prc_index(void)344 Inline uint_t 345 get_my_prcidx(void) 329 346 { 330 347 uint32_t reg; 331 348 332 349 CP15_READ_MPIDR(reg); 333 return( reg & 0xffU);350 return((uint_t)(reg & 0xffU)); 334 351 } 335 352 … … 444 461 445 462 #endif /* TOPPERS_MACRO_ONLY */ 463 464 /* 465 * 浮動小数点例外制御レジスタ(FPEXC)の設定値 466 */ 467 #define FPEXC_ENABLE UINT_C(0x40000000) 468 446 469 #endif /* TOPPERS_ARM_H */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/arm_insn.h
r321 r429 5 5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 6 6 * Toyohashi Univ. of Technology, JAPAN 7 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * … … 105 105 * Thumbモードではmrs/msr命令が使用できないため,関数として実現して, 106 106 * ARMモードに移行して実行する. 107 * 108 * current_cpsrとset_cpsrは,__thumb__が定義されない場合にはヘッダファ 109 * イル中で定義されるインライン関数になるため,core_rename.defに登録 110 * せず,先頭の_kernel_を手書きしている. 107 111 */ 108 112 … … 110 114 * ステータスレジスタ(CPSR)の現在値の読出し 111 115 */ 112 extern uint32_t current_cpsr(void); 116 extern uint32_t _kernel_current_cpsr(void); 117 #define current_cpsr() _kernel_current_cpsr() 113 118 114 119 /* 115 120 * ステータスレジスタ(CPSR)の現在値の変更 116 121 */ 117 extern void set_cpsr(uint32_t cpsr); 122 extern void _kernel_set_cpsr(uint32_t cpsr); 123 #define set_cpsr(cpsr) _kernel_set_cpsr(cpsr) 118 124 119 125 #endif /* __thumb__ */ … … 220 226 #define CP15_READ_ACTLR(reg) Asm("mrc p15, 0, %0, c1, c0, 1":"=r"(reg)) 221 227 #define CP15_WRITE_ACTLR(reg) Asm("mcr p15, 0, %0, c1, c0, 1"::"r"(reg)) 228 229 /* コプロセッサアクセス制御レジスタ */ 230 #define CP15_READ_CPACR(reg) Asm("mrc p15, 0, %0, c1, c0, 2":"=r"(reg)) 231 #define CP15_WRITE_CPACR(reg) Asm("mcr p15, 0, %0, c1, c0, 2"::"r"(reg)) 222 232 223 233 /* … … 293 303 294 304 /* ドメインアクセス制御レジスタ */ 295 #define CP15_WRITE_DACR(reg) Asm("mcr p15, 0, %0, c3, c0, 0":: 305 #define CP15_WRITE_DACR(reg) Asm("mcr p15, 0, %0, c3, c0, 0"::"r"(reg)) 296 306 297 307 /* コンテキストIDレジスタ(ARMv6以降)*/ 298 308 #if __TARGET_ARCH_ARM >= 6 299 #define CP15_WRITE_CONTEXTIDR(reg) Asm("mcr p15, 0, %0, c13, c0, 1" 309 #define CP15_WRITE_CONTEXTIDR(reg) Asm("mcr p15, 0, %0, c13, c0, 1"::"r"(reg)) 300 310 #endif /* __TARGET_ARCH_ARM >= 6 */ 301 311 … … 415 425 416 426 #endif /* __TARGET_ARCH_ARM == 7 */ 427 428 /* 429 * 浮動小数点例外制御レジスタ(FPEXC)の現在値の読出し 430 */ 431 Inline uint32_t 432 current_fpexc(void) 433 { 434 uint32_t fpexc; 435 436 Asm("vmrs %0, fpexc" : "=r"(fpexc)); 437 return(fpexc); 438 } 439 440 /* 441 * 浮動小数点例外制御レジスタ(FPEXC)の現在値の変更 442 */ 443 Inline void 444 set_fpexc(uint32_t fpexc) 445 { 446 Asm("vmsr fpexc, %0" : : "r"(fpexc)); 447 } 448 417 449 #endif /* TOPPERS_ARM_INSN_H */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_cfg1_out.h
r321 r429 5 5 */ 6 6 7 /*8 * cfg1_out.cのリンクに必要な定義9 */10 11 7 #include <kernel.h> 12 8 13 void sta_ker(void) {}9 void sta_ker(void) { } 14 10 STK_T *const _kernel_istkpt; 15 16 /*17 * offset.hを生成するための定義18 */19 const uint8_t MAGIC_1 = 0x12;20 const uint16_t MAGIC_2 = 0x1234;21 const uint32_t MAGIC_4 = 0x12345678; -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_check.trb
r321 r429 3 3 # パス3の生成スクリプトのコア依存部(ARM用) 4 4 # 5 # $Id $5 # $Id: core_check.trb 730 2016-04-03 02:04:52Z ertl-hiro $ 6 6 # 7 7 … … 20 20 inhTable = SYMBOL("_kernel_inh_table") 21 21 offset = SYMBOL("__etext") - SYMBOL("__data_start__") 22 $cfgData[:DEF_INH].each do | key, params|22 $cfgData[:DEF_INH].each do |_, params| 23 23 inthdr = PEEK(inhTable + offset + params[:inhno] * $sizeof_FP, $sizeof_FP) 24 24 … … 39 39 # 40 40 excTable = SYMBOL("_kernel_exc_table") 41 $cfgData[:DEF_EXC].each do | key, params|41 $cfgData[:DEF_EXC].each do |_, params| 42 42 exchdr = PEEK(excTable + params[:excno] * $sizeof_FP, $sizeof_FP) 43 43 -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_kernel.h
r321 r429 6 6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2004-201 6by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2004-2019 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * … … 53 53 54 54 /* 55 * ターゲット定義のタスク属性 56 */ 57 #define TA_FPU UINT_C(0x08) /* FPUレジスタをコンテキストに含める */ 58 59 /* 55 60 * スタックの型 56 61 * … … 62 67 * CPU例外ハンドラ番号の数 63 68 */ 64 #define TNUM_EXCNO 669 #define TNUM_EXCNO 7 65 70 66 71 /* 67 72 * CPU例外ハンドラ番号の定義 68 73 */ 69 #define EXCNO_UNDEF 0 70 #define EXCNO_SVC 1 71 #define EXCNO_PABORT 2 72 #define EXCNO_DABORT 3 73 #define EXCNO_IRQ 4 74 #define EXCNO_FIQ 5 74 #define EXCNO_UNDEF UINT_C(0) /* 未定義命令 */ 75 #define EXCNO_SVC UINT_C(1) /* スーパバイザコール */ 76 #define EXCNO_PABORT UINT_C(2) /* プリフェッチアボート */ 77 #define EXCNO_DABORT UINT_C(3) /* データアボート */ 78 #define EXCNO_IRQ UINT_C(4) /* IRQ割込み */ 79 #define EXCNO_FIQ UINT_C(5) /* FIQ割込み */ 80 #define EXCNO_FATAL UINT_C(6) /* フェイタルデータアボート */ 75 81 76 82 #ifndef TOPPERS_MACRO_ONLY -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_kernel.trb
r321 r429 6 6 # 7 7 # Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN 8 # Copyright (C) 2015 ,2016by Embedded and Real-Time Systems Laboratory8 # Copyright (C) 2015-2019 by Embedded and Real-Time Systems Laboratory 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # … … 38 38 # の責任を負わない. 39 39 # 40 # $Id $40 # $Id: core_kernel.trb 662 2016-02-27 02:33:51Z ertl-hiro $ 41 41 # 42 42 … … 48 48 # 有効なCPU例外ハンドラ番号 49 49 # 50 $EXCNO_VALID = [ 0, 1, 2, 3, 4, 5 ]50 $EXCNO_VALID = [ 0, 1, 2, 3, 4, 5, 6 ] 51 51 52 52 # 53 53 # DEF_EXCで使用できるCPU例外ハンドラ番号 54 54 # 55 $EXCNO_DEFEXC_VALID = [ 0, 1, 2, 3, 5 ]55 $EXCNO_DEFEXC_VALID = [ 0, 1, 2, 3, 5, 6 ] 56 56 57 57 # … … 65 65 $kernelCfgC.comment_header("Interrupt Handler Table") 66 66 67 $kernelCfgC.add(" FP _kernel_inh_table[TNUM_INHNO] = {")67 $kernelCfgC.add("/*const*/FP _kernel_inh_table[TNUM_INHNO] = {") 68 68 $INHNO_VALID.each_with_index do |inhnoVal, index| 69 69 $kernelCfgC.add(",") if index > 0 -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_kernel_impl.c
r321 r429 6 6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * … … 73 73 */ 74 74 Inline void 75 config_section_entry( ARM_MMU_CONFIG *p_ammuc)75 config_section_entry(const ARM_MMU_CONFIG *p_ammuc) 76 76 { 77 77 uint32_t vaddr = p_ammuc->vaddr; … … 80 80 uint_t i; 81 81 82 assert(vaddr % ARM_SECTION_SIZE == 0); 83 assert(paddr % ARM_SECTION_SIZE == 0); 84 assert(size % ARM_SECTION_SIZE == 0); 82 85 while (size > 0) { 83 86 #ifdef USE_ARM_SSECTION … … 170 173 171 174 /* 175 * FPUの初期化 176 */ 177 #ifdef USE_ARM_FPU 178 179 void 180 arm_fpu_initialize(void) 181 { 182 uint32_t reg; 183 184 /* 185 * CP10とCP11をアクセス可能に設定する. 186 */ 187 CP15_READ_CPACR(reg); 188 reg |= (CP15_CPACR_CP10_FULLACCESS | CP15_CPACR_CP11_FULLACCESS); 189 CP15_WRITE_CPACR(reg); 190 191 /* 192 * FPUをディスエーブルする. 193 */ 194 set_fpexc(current_fpexc() & ~FPEXC_ENABLE); 195 } 196 197 #endif /* USE_ARM_FPU */ 198 199 /* 172 200 * コア依存の初期化 173 201 */ … … 187 215 arm_mmu_initialize(); 188 216 #endif /* USE_ARM_MMU */ 217 218 /* 219 * FPUの初期化 220 */ 221 #ifdef USE_ARM_FPU 222 arm_fpu_initialize(); 223 #endif /* USE_ARM_FPU */ 189 224 190 225 /* … … 306 341 syslog_0(LOG_EMERG, "FIQ exception occurs."); 307 342 break; 343 case EXCNO_FATAL: 344 syslog_0(LOG_EMERG, "Fatal Data Abort exception occurs."); 345 break; 308 346 } 309 347 xlog_sys(p_excinf); 310 348 311 if (excno == EXCNO_PABORT || excno == EXCNO_DABORT) { 349 if (excno == EXCNO_PABORT || excno == EXCNO_DABORT 350 || excno == EXCNO_FATAL) { 312 351 uint32_t fsr, far; 313 352 -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_kernel_impl.h
r321 r429 6 6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * … … 55 55 56 56 /* 57 * ターゲット依存のタスク属性(エラーチェック用) 58 */ 59 /*#ifdef USE_ARM_FPU*/ 60 #define TARGET_TSKATR (TA_FPU) 61 /*#endif /* USE_ARM_FPU */ 62 63 /* 57 64 * エラーチェック方法の指定 58 65 */ … … 68 75 #define CHECK_MPF_ALIGN 4 /* 固定長メモリプール領域のアライン単位 */ 69 76 #define CHECK_MPF_NONNULL /* 固定長メモリプール領域の非NULLチェック */ 77 #define CHECK_MPK_ALIGN 4 /* カーネルメモリプール領域のアライン単位 */ 78 #define CHECK_MPK_NONNULL /* カーネルメモリプール領域の非NULL */ 79 /* チェック */ 70 80 #define CHECK_MB_ALIGN 4 /* 管理領域のアライン単位 */ 71 81 … … 269 279 * 非タスクコンテキストからのディスパッチ要求 270 280 */ 271 #define request_dispatch ()281 #define request_dispatch_retint() 272 282 273 283 /* … … 324 334 * 割込みハンドラテーブル(kernel_cfg.c) 325 335 */ 326 extern FP inh_table[TNUM_INHNO];336 extern /*const*/FP inh_table[TNUM_INHNO]; 327 337 328 338 /* … … 447 457 * MMUの設定情報(メモリエリアの情報)(target_kernel_impl.c) 448 458 */ 449 extern ARM_MMU_CONFIG arm_memory_area[];459 extern const ARM_MMU_CONFIG arm_memory_area[]; 450 460 451 461 /* … … 458 468 459 469 #ifndef TOPPERS_MACRO_ONLY 470 471 /* 472 * FPUの初期化 473 */ 474 #ifdef USE_ARM_FPU 475 extern void arm_fpu_initialize(void); 476 #endif /* USE_ARM_FPU */ 460 477 461 478 /* -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_offset.trb
r321 r429 3 3 # オフセットファイル生成用Rubyテンプレート(ARM用) 4 4 # 5 # $Id $5 # $Id: core_offset.trb 572 2016-02-01 14:40:09Z ertl-hiro $ 6 6 # 7 7 … … 14 14 # フィールドのオフセットの定義の生成 15 15 # 16 GenerateDefine("TCB_p_tinib", $offsetof_TCB_p_tinib) 17 GenerateDefine("TCB_sp", $offsetof_TCB_sp) 18 GenerateDefine("TCB_pc", $offsetof_TCB_pc) 19 GenerateDefine("TINIB_exinf", $offsetof_TINIB_exinf) 20 GenerateDefine("TINIB_task", $offsetof_TINIB_task) 21 GenerateDefine("TINIB_stksz", $offsetof_TINIB_stksz) 22 GenerateDefine("TINIB_stk", $offsetof_TINIB_stk) 23 GenerateDefine("T_EXCINF_cpsr", $offsetof_T_EXCINF_cpsr) 16 $offsetH.append(<<EOS) 17 #define TCB_p_tinib #{$offsetof_TCB_p_tinib} 18 #define TCB_sp #{$offsetof_TCB_sp} 19 #define TCB_pc #{$offsetof_TCB_pc} 20 #define TINIB_tskatr #{$offsetof_TINIB_tskatr} 21 #define TINIB_exinf #{$offsetof_TINIB_exinf} 22 #define TINIB_task #{$offsetof_TINIB_task} 23 #define TINIB_stksz #{$offsetof_TINIB_stksz} 24 #define TINIB_stk #{$offsetof_TINIB_stk} 25 #define T_EXCINF_cpsr #{$offsetof_T_EXCINF_cpsr} 26 EOS -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_rename.def
r331 r429 16 16 dabort_handler 17 17 fiq_handler 18 current_cpsr19 set_cpsr20 18 21 19 # core_kernel_impl.c 22 20 excpt_nest_count 23 21 arm_mmu_initialize 22 arm_fpu_initialize 24 23 core_initialize 25 24 core_terminate … … 28 27 default_int_handler 29 28 default_exc_handler 29 30 # mpcore_kernel_impl.c 31 mpcore_initialize 32 mpcore_terminate 33 34 # mpcore_timer.c 35 target_hrt_initialize 36 target_hrt_terminate 37 target_hrt_handler 38 target_ovrtimer_initialize 39 target_ovrtimer_terminate 40 target_ovrtimer_handler 30 41 31 42 # gic_kernel_impl.c … … 47 58 pl310_invalidate_all 48 59 pl310_clean_and_invalidate_all 49 50 # target_kernel_impl.c51 arm_tnum_memory_area52 arm_memory_area -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_rename.h
r321 r429 25 25 #define dabort_handler _kernel_dabort_handler 26 26 #define fiq_handler _kernel_fiq_handler 27 #define current_cpsr _kernel_current_cpsr28 #define set_cpsr _kernel_set_cpsr29 27 30 28 /* … … 33 31 #define excpt_nest_count _kernel_excpt_nest_count 34 32 #define arm_mmu_initialize _kernel_arm_mmu_initialize 33 #define arm_fpu_initialize _kernel_arm_fpu_initialize 35 34 #define core_initialize _kernel_core_initialize 36 35 #define core_terminate _kernel_core_terminate … … 39 38 #define default_int_handler _kernel_default_int_handler 40 39 #define default_exc_handler _kernel_default_exc_handler 40 41 /* 42 * mpcore_kernel_impl.c 43 */ 44 #define mpcore_initialize _kernel_mpcore_initialize 45 #define mpcore_terminate _kernel_mpcore_terminate 46 47 /* 48 * mpcore_timer.c 49 */ 50 #define target_hrt_initialize _kernel_target_hrt_initialize 51 #define target_hrt_terminate _kernel_target_hrt_terminate 52 #define target_hrt_handler _kernel_target_hrt_handler 53 #define target_ovrtimer_initialize _kernel_target_ovrtimer_initialize 54 #define target_ovrtimer_terminate _kernel_target_ovrtimer_terminate 55 #define target_ovrtimer_handler _kernel_target_ovrtimer_handler 41 56 42 57 /* … … 65 80 #define pl310_clean_and_invalidate_all _kernel_pl310_clean_and_invalidate_all 66 81 67 /*68 * target_kernel_impl.c69 */70 #define arm_tnum_memory_area _kernel_arm_tnum_memory_area71 #define arm_memory_area _kernel_arm_memory_area72 73 82 74 83 #endif /* TOPPERS_CORE_RENAME_H */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_sil.h
r321 r429 5 5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 6 6 * Toyohashi Univ. of Technology, JAPAN 7 * Copyright (C) 2004-201 6by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2004-2018 by Embedded and Real-Time Systems Laboratory 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * … … 86 86 * ステータスレジスタ(CPSR)の現在値の読出し 87 87 */ 88 extern uint32_t current_cpsr(void);89 #define TOPPERS_current_cpsr() current_cpsr()88 extern uint32_t _kernel_current_cpsr(void); 89 #define TOPPERS_current_cpsr() _kernel_current_cpsr() 90 90 91 91 /* 92 92 * ステータスレジスタ(CPSR)の現在値の変更 93 93 */ 94 extern void set_cpsr(uint32_t cpsr);95 #define TOPPERS_set_cpsr(cpsr) current_cpsr(cpsr)94 extern void _kernel_set_cpsr(uint32_t cpsr); 95 #define TOPPERS_set_cpsr(cpsr) _kernel_set_cpsr(cpsr) 96 96 97 97 #endif /* __thumb__ */ … … 138 138 #define SIL_UNL_INT() (TOPPERS_set_fiq_irq(TOPPERS_fiq_irq_mask)) 139 139 140 /* 141 * メモリ同期バリア 142 */ 143 #ifdef DATA_SYNC_BARRIER 144 #define TOPPERS_SIL_WRITE_SYNC() DATA_SYNC_BARRIER() 145 #elif __TARGET_ARCH_ARM <= 6 146 #define TOPPERS_SIL_WRITE_SYNC() \ 147 Asm("mcr p15, 0, %0, c7, c10, 4"::"r"(0):"memory") 148 #else /* __TARGET_ARCH_ARM <= 6 */ 149 #define TOPPERS_SIL_WRITE_SYNC() Asm("dsb":::"memory") 150 #endif 151 140 152 #endif /* TOPPERS_MACRO_ONLY */ 141 153 #endif /* TOPPERS_CORE_SIL_H */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_support.S
r331 r429 6 6 * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2006-201 7by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * … … 55 55 56 56 /* 57 * 使用する命令セットの定義 58 */ 59 #ifdef USE_ARM_FPU 60 .fpu vfpv3 61 #endif /* USE_ARM_FPU */ 62 63 /* 57 64 * 例外ベクタ 58 65 */ … … 101 108 * マスク全解除状態・ディスパッチ許可状態で呼び出される. 102 109 */ 103 push {r12,lr} /* 戻り番地を保存,r12はダミー */ 110 push {r12,lr} /* 戻り番地(lr)を保存 */ 111 /* r12はアラインメントのため */ 104 112 #ifdef TOPPERS_SUPPORT_OVRHDR 105 113 bl ovrtimer_stop 106 114 #endif /* TOPPERS_SUPPORT_OVRHDR */ 107 stmfd sp!, {r4-r11}/* 非スクラッチレジスタの保存 */115 push {r4-r11} /* 非スクラッチレジスタの保存 */ 108 116 ldr r0, =p_runtsk /* p_runtsk → r0 */ 109 117 ldr r0, [r0] 118 #ifdef USE_ARM_FPU 119 ldr r2, [r0,#TCB_p_tinib] /* p_runtsk->p_tinib → r2 */ 120 ldr r1, [r2,#TINIB_tskatr] /* p_runtsk->p_tinib->tskatr → r1 */ 121 tst r1, #TA_FPU 122 beq 1f 123 vpush {d8-d15} /* 非スクラッチFPUレジスタの保存 */ 124 1: 125 #endif /* USE_ARM_FPU */ 110 126 str sp, [r0,#TCB_sp] /* スタックポインタを保存 */ 111 127 adr r1, dispatch_r … … 114 130 115 131 ALABEL(dispatch_r) 116 ldmfd sp!, {r4-r11} /* 非スクラッチレジスタの復帰 */ 132 /* 133 * 【この時点のレジスタ状態】 134 * r4:p_runtsk(タスク切換え後) 135 */ 136 #ifdef USE_ARM_FPU 137 ldr r2, [r4,#TCB_p_tinib] /* p_runtsk->p_tinib → r2 */ 138 ldr r1, [r2,#TINIB_tskatr] /* p_runtsk->p_tinib->tskatr → r1 */ 139 tst r1, #TA_FPU 140 vmrs r0, fpexc 141 biceq r0, r0, #FPEXC_ENABLE 142 orrne r0, r0, #FPEXC_ENABLE 143 vmsr fpexc, r0 /* FPEXCを設定 */ 144 beq 1f 145 vpop {d8-d15} /* 非スクラッチFPUレジスタの復帰 */ 146 1: 147 #endif /* USE_ARM_FPU */ 148 pop {r4-r11} /* 非スクラッチレジスタの復帰 */ 117 149 #ifdef TOPPERS_SUPPORT_OVRHDR 118 150 bl ovrtimer_start … … 137 169 138 170 /* 171 * 各種のデバイス(特に割込みコントローラ)の設定が完了するのを待つ. 172 */ 173 asm_data_sync_barrier r0 174 175 /* 139 176 * タスクコンテキストに切り換える. 140 177 */ … … 184 221 bl log_dsp_enter 185 222 #endif /* LOG_DSP_ENTER */ 186 223 187 224 ALABEL(dispatcher_0) 188 225 /* … … 232 269 ALABEL(call_exit_kernel) 233 270 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_INTLOCK) 234 ldr r0, =istkpt /* 非タスクコンテキスト のスタックへ*/271 ldr r0, =istkpt /* 非タスクコンテキスト用のスタックに */ 235 272 ldr sp, [r0] 273 ldr r0, =excpt_nest_count /* 例外ネストカウントを1に */ 274 mov r1, #1 275 str r1, [r0] 236 276 b exit_kernel 237 277 … … 243 283 AGLOBAL(start_r) 244 284 /* 245 * ディスパッチャ本体から呼び出されるため,p_runtskはr4に入っている. 285 * 【この時点のレジスタ状態】 286 * r4:p_runtsk(タスク切換え後) 246 287 */ 247 288 ALABEL(start_r) … … 253 294 ldr lr, =ext_tsk /* タスク本体からの戻り番地を設定 */ 254 295 ldr r2, [r4,#TCB_p_tinib] /* p_runtsk->p_tinib → r2 */ 296 #ifdef USE_ARM_FPU 297 ldr r1, [r2,#TINIB_tskatr] /* p_runtsk->p_tinib->tskatr → r1 */ 298 tst r1, #TA_FPU 299 vmrs r0, fpexc 300 biceq r0, r0, #FPEXC_ENABLE 301 orrne r0, r0, #FPEXC_ENABLE 302 vmsr fpexc, r0 /* FPEXCを設定 */ 303 #endif /* USE_ARM_FPU */ 255 304 ldr r0, [r2,#TINIB_exinf] /* exinfをパラメータに */ 256 305 ldr r1, [r2,#TINIB_task] /* タスク起動番地にジャンプ */ … … 270 319 #if __TARGET_ARCH_ARM < 6 271 320 /* 272 * スーパバイザモードに切り換え,スクラッチレジスタ を保存する.321 * スーパバイザモードに切り換え,スクラッチレジスタ+αを保存する. 273 322 */ 274 323 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT) 275 stmfd sp!, {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 276 277 /* 278 * IRQモードに戻して,戻り番地とspsr(戻り先のcpsr)を取得する. 324 push {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 325 326 /* 327 * IRQモードに戻して,戻り番地(lr-4)と戻り先のcpsr(spsr)を取 328 * 得する. 279 329 */ 280 330 msr cpsr_c, #(CPSR_IRQ_MODE AOR CPSR_IRQ_BIT) … … 283 333 284 334 /* 285 * スーパバイザモードに切り換え,戻り番地と spsrを保存する.335 * スーパバイザモードに切り換え,戻り番地と戻り先のcpsrを保存する. 286 336 */ 287 337 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT) 288 str r2, [sp,#0x20] /* 戻り番地をスタックに保存 289 push {r1} /* spsrをスタックに保存 */338 str r2, [sp,#0x20] /* 戻り番地をスタックに保存(pcの場所)*/ 339 push {r1} /* 戻り先のcpsrをスタックに保存 */ 290 340 #else /* __TARGET_ARCH_ARM < 6 */ 291 341 /* 292 * 戻り 先(lr)とspsr(cpsr_svc)をスーパバイザモードのスタックに293 * 保存する.342 * 戻り番地(lr)と戻り先のcpsr(spsr)をスーパバイザモードのスタッ 343 * クに保存する. 294 344 */ 295 345 sub lr, lr, #4 /* 戻り番地の算出 */ … … 297 347 298 348 /* 299 * スーパバイザモードに切り換え,スクラッチレジスタ を保存する.349 * スーパバイザモードに切り換え,スクラッチレジスタ+αを保存する. 300 350 */ 301 351 cps #CPSR_SVC_MODE 302 stmfd sp!,{r0-r5,r12,lr}352 push {r0-r5,r12,lr} 303 353 #endif /* __TARGET_ARCH_ARM < 6 */ 304 354 … … 308 358 and r1, sp, #4 309 359 sub sp, sp, r1 310 push {r0,r1} /* r0はスペース確保のため*/311 360 push {r0,r1} /* スタックポインタの調整値を保存 */ 361 /* r0はスペース確保のため */ 312 362 /* 313 363 * 例外ネストカウントをインクリメントする.割込みが非タスクコンテキ … … 328 378 #endif /* TOPPERS_SUPPORT_OVRHDR */ 329 379 380 #ifdef USE_ARM_FPU 381 /* 382 * FPUをディスエーブルする. 383 */ 384 vmrs r0, fpexc 385 str r0, [sp] /* FPEXCを保存(r0の場所)*/ 386 bic r0, r0, #FPEXC_ENABLE 387 vmsr fpexc, r0 /* FPEXCを設定 */ 388 #endif /* USE_ARM_FPU */ 389 330 390 /* 331 391 * 非タスクコンテキスト用のスタックに切り換える. … … 339 399 /* 340 400 * 割込みコントローラを操作し,割込み番号を取得する. 401 * 402 * irc_begin_intは,スタックトップ(r0の場所)に,irc_end_intで用 403 * いる情報を保存する. 341 404 */ 342 405 bl irc_begin_int … … 345 408 #else /* TNUM_INHNO <= 256 || __TARGET_ARCH_ARM <= 6 */ 346 409 movw r3, #TNUM_INHNO 347 cmp r4, r3 410 cmp r4, r3 348 411 #endif /* TNUM_INHNO <= 256 || __TARGET_ARCH_ARM <= 6 */ 349 412 bhs irq_handler_2 /* スプリアス割込みなら */ … … 420 483 mov sp, r3 421 484 485 #ifdef USE_ARM_FPU 486 /* 487 * FPUを元に戻す. 488 */ 489 ldr r0, [sp] /* FPEXCを復帰 */ 490 vmsr fpexc, r0 491 #endif /* USE_ARM_FPU */ 492 422 493 /* 423 494 * p_runtskがNULLか判定する. … … 433 504 pop {r0,r1} /* スタックポインタの調整を元に戻す */ 434 505 add sp, sp, r1 435 add sp, sp, #40 /* スクラッチレジスタ を捨てる */506 add sp, sp, #40 /* スクラッチレジスタ等を捨てる */ 436 507 b dispatcher_0 437 508 … … 440 511 */ 441 512 ALABEL(irq_handler_3) 513 /* 514 * 【この時点のレジスタ状態】 515 * r0:p_runtsk 516 */ 442 517 ldr r1, =p_schedtsk /* p_schedtsk → r1 */ 443 518 ldr r1, [r1] … … 448 523 * コンテキストを保存する. 449 524 */ 450 stmfd sp!, {r6-r11} /* 非スクラッチレジスタの保存 */ 525 push {r6-r11} /* 残りのレジスタの保存 */ 526 #ifdef USE_ARM_FPU 527 ldr r2, [r0,#TCB_p_tinib] /* p_runtsk->p_tinib → r2 */ 528 ldr r1, [r2,#TINIB_tskatr] /* p_runtsk->p_tinib->tskatr → r1 */ 529 tst r1, #TA_FPU 530 beq 1f /* TA_FPU属性でない場合は分岐 */ 531 #ifdef USE_ARM_FPU_D32 532 vpush {d16-d31} 533 #endif /* USE_ARM_FPU_D32 */ 534 vpush {d0-d15} /* 全FPUレジスタの保存 */ 535 vmrs r1, fpscr 536 push {r1,r2} /* FPSCRの保存 */ 537 1: /* r2はアラインメントのため */ 538 #endif /* USE_ARM_FPU */ 451 539 str sp, [r0,#TCB_sp] /* スタックポインタを保存 */ 452 540 adr r1, ret_int_r /* 実行再開番地を保存 */ … … 457 545 /* 458 546 * コンテキストを復帰する. 459 */ 460 ldmfd sp!, {r6-r11} /* 非スクラッチレジスタの復帰 */ 547 * 548 * 【この時点のレジスタ状態】 549 * r4:p_runtsk(タスク切換え後) 550 */ 551 #ifdef USE_ARM_FPU 552 ldr r2, [r4,#TCB_p_tinib] /* p_runtsk->p_tinib → r2 */ 553 ldr r1, [r2,#TINIB_tskatr] /* p_runtsk->p_tinib->tskatr → r1 */ 554 tst r1, #TA_FPU 555 vmrs r0, fpexc 556 biceq r0, r0, #FPEXC_ENABLE 557 orrne r0, r0, #FPEXC_ENABLE 558 vmsr fpexc, r0 /* FPEXCを設定 */ 559 beq 1f /* TA_FPU属性でない場合は分岐 */ 560 pop {r1,r2} /* FPSCRの復帰 */ 561 vmsr fpscr, r1 562 vpop {d0-d15} /* 全FPUレジスタの復帰 */ 563 #ifdef USE_ARM_FPU_D32 564 vpop {d16-d31} 565 #endif /* USE_ARM_FPU_D32 */ 566 1: 567 #endif /* USE_ARM_FPU */ 568 pop {r6-r11} /* 残りのレジスタの復帰 */ 461 569 462 570 ALABEL(irq_handler_4) … … 469 577 470 578 /* 471 * 割込み /CPU例外処理からのリターン579 * 割込み処理からのリターン 472 580 * 473 * 割込み /CPU例外処理からのリターンにより,CPUロック解除状態に遷474 * 移するようにする必要があるが,ARMはCPSRのビットによってCPUロッ475 * ク状態を表しているため,CPSRを元に戻してリターンすればよい.581 * 割込み処理からのリターンにより,CPUロック解除状態に遷移するよ 582 * うにする必要があるが,ARMはCPSRのビットによってCPUロック状態を 583 * 表しているため,CPSRを元に戻してリターンすればよい. 476 584 */ 477 585 ALABEL(irq_handler_5) … … 480 588 481 589 #if __TARGET_ARCH_ARM < 6 482 ldmfd sp!, {r0}/* 戻り先のcpsrをspsrに設定 */590 pop {r0} /* 戻り先のcpsrをspsrに設定 */ 483 591 msr spsr_cxsf, r0 484 592 ldmfd sp!, {r0-r5,r12,lr,pc}^ /* コンテキストの復帰 */ 485 593 /* ^付きなので,spsr → cpsr */ 486 594 #else /* __TARGET_ARCH_ARM < 6 */ 487 ldmfd sp!, {r0-r5,r12,lr}595 pop {r0-r5,r12,lr} /* スクラッチレジスタ+αの復帰 */ 488 596 rfefd sp! 489 597 #endif /* __TARGET_ARCH_ARM < 6 */ … … 509 617 /* 510 618 * IビットとFビットをセットし,スーパバイザモードに切り換え,スク 511 * ラッチレジスタ を保存する.619 * ラッチレジスタ+αを保存する. 512 620 */ 513 621 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 514 stmfd sp!, {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 515 516 /* 517 * 未定義モードに戻して,戻り番地とspsrを取得する. 622 push {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 623 624 /* 625 * 未定義モードに戻して,戻り番地(lr)と戻り先のcpsr(spsr)を取 626 * 得する. 518 627 */ 519 628 msr cpsr_c, #(CPSR_UND_MODE AOR CPSR_FIQ_IRQ_BIT) … … 522 631 523 632 /* 524 * スーパバイザモードに切り換え,戻り番地と spsrを保存する.633 * スーパバイザモードに切り換え,戻り番地と戻り先のcpsrを保存する. 525 634 */ 526 635 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 527 str r2, [sp,#0x20] /* 戻り番地をスタックに保存 528 push {r1} /* spsrをスタックに保存 */636 str r2, [sp,#0x20] /* 戻り番地をスタックに保存(pcの場所)*/ 637 push {r1} /* 戻り先のcpsrをスタックに保存 */ 529 638 #else /* __TARGET_ARCH_ARM < 6 */ 530 639 /* 531 * 戻り 先(lr)とspsr(cpsr_svc)をスーパバイザモードのスタックに532 * 保存する.640 * 戻り番地(lr)と戻り先のcpsr(spsr)をスーパバイザモードのスタッ 641 * クに保存する. 533 642 */ 534 643 srsfd #CPSR_SVC_MODE! 535 644 536 645 /* 537 * スーパバイザモードに切り換え,スクラッチレジスタ を保存する.646 * スーパバイザモードに切り換え,スクラッチレジスタ+αを保存する. 538 647 */ 539 648 cps #CPSR_SVC_MODE 540 stmfd sp!,{r0-r5,r12,lr}649 push {r0-r5,r12,lr} 541 650 #endif /* __TARGET_ARCH_ARM < 6 */ 542 651 mov r4, #EXCNO_UNDEF … … 558 667 #if __TARGET_ARCH_ARM < 6 559 668 /* 560 * IビットとFビットをセットし,スクラッチレジスタを保存する. 669 * IビットとFビットをセットし,戻り番地(lr),スクラッチレジスタ 670 * +α,戻り先のcpsr(spsr)を保存する(lrは二重に保存される). 561 671 */ 562 672 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 563 stmfd sp!, {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 564 565 /* 566 * 戻り番地とspsrを取得する. 567 */ 568 mov r2, lr 673 push {lr} 674 push {r0-r5,r12,lr} 569 675 mrs r1, spsr 570 571 /* 572 * 戻り番地とspsrを保存する. 573 */ 574 str r2, [sp,#0x20] /* 戻り番地をスタックに保存 */ 575 push {r1} /* spsrをスタックに保存 */ 676 push {r1} 576 677 #else /* __TARGET_ARCH_ARM < 6 */ 577 678 /* 578 * 戻り 先(lr)とspsr(cpsr_svc)をスーパバイザモードのスタックに579 * 保存する.679 * 戻り番地(lr)と戻り先のcpsr(spsr)をスーパバイザモードのスタッ 680 * クに保存する. 580 681 */ 581 682 srsfd #CPSR_SVC_MODE! 582 683 583 684 /* 584 * スーパバイザモードで,スクラッチレジスタを保存する. 585 */ 586 cps #CPSR_SVC_MODE /* 不要と思われる */ 587 stmfd sp!, {r0-r5,r12,lr} 685 * スーパバイザモードで,スクラッチレジスタ+αを保存する. 686 */ 687 push {r0-r5,r12,lr} 588 688 #endif /* __TARGET_ARCH_ARM < 6 */ 589 689 mov r4, #EXCNO_SVC … … 605 705 /* 606 706 * IビットとFビットをセットし,スーパバイザモードに切り換え,スク 607 * ラッチレジスタ を保存する.707 * ラッチレジスタ+αを保存する. 608 708 */ 609 709 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 610 stmfd sp!, {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 611 612 /* 613 * アボートモードに戻して,戻り番地とspsrを取得する. 710 push {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 711 712 /* 713 * アボートモードに戻して,戻り番地(lr)と戻り先のcpsr(spsr)を 714 * 取得する. 614 715 */ 615 716 msr cpsr_c, #(CPSR_ABT_MODE AOR CPSR_FIQ_IRQ_BIT) … … 618 719 619 720 /* 620 * スーパバイザモードに切り換え,戻り番地と spsrを保存する.721 * スーパバイザモードに切り換え,戻り番地と戻り先のcpsrを保存する. 621 722 */ 622 723 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 623 str r2, [sp,#0x20] /* 戻り番地をスタックに保存 624 push {r1} /* spsrをスタックに保存 */724 str r2, [sp,#0x20] /* 戻り番地をスタックに保存(pcの場所)*/ 725 push {r1} /* 戻り先のcpsrをスタックに保存 */ 625 726 #else /* __TARGET_ARCH_ARM < 6 */ 626 727 /* 627 * 戻り 先(lr)とspsr(cpsr_svc)をスーパバイザモードのスタックに628 * 保存する.728 * 戻り番地(lr)と戻り先のcpsr(spsr)をスーパバイザモードのスタッ 729 * クに保存する. 629 730 */ 630 731 srsfd #CPSR_SVC_MODE! 631 732 632 733 /* 633 * スーパバイザモードに切り換え,スクラッチレジスタ を保存する.734 * スーパバイザモードに切り換え,スクラッチレジスタ+αを保存する. 634 735 */ 635 736 cps #CPSR_SVC_MODE 636 stmfd sp!,{r0-r5,r12,lr}737 push {r0-r5,r12,lr} 637 738 #endif /* __TARGET_ARCH_ARM < 6 */ 638 739 mov r4, #EXCNO_PABORT … … 653 754 * データアボートが,CPU例外の入口(start_exc_entryとend_exc_entry 654 755 * の間)で発生した場合には,fatal_dabort_handlerに分岐する.アボー 655 * トモードのspを汎用レジスタの代わりに使用する .656 */ 657 ldr sp, =start_exc_entry+8658 cmp lr, sp756 * トモードのspを汎用レジスタの代わりに使用する(r13と記述している). 757 */ 758 adr r13, start_exc_entry+8 759 cmp lr, r13 659 760 bcc dabort_handler_1 660 ldr sp, =end_exc_entry+8661 cmp lr, sp761 adr r13, end_exc_entry+8 762 cmp lr, r13 662 763 bcc fatal_dabort_handler 663 764 … … 666 767 /* 667 768 * IビットとFビットをセットし,スーパバイザモードに切り換え,スク 668 * ラッチレジスタ を保存する.769 * ラッチレジスタ+αを保存する. 669 770 */ 670 771 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 671 stmfd sp!, {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 672 673 /* 674 * アボートモードに戻して,戻り番地とspsrを取得する. 772 push {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 773 774 /* 775 * アボートモードに戻して,戻り番地(lr)と戻り先のcpsr(spsr)を 776 * 取得する. 675 777 */ 676 778 msr cpsr_c, #(CPSR_ABT_MODE AOR CPSR_FIQ_IRQ_BIT) … … 679 781 680 782 /* 681 * スーパバイザモードに切り換え,戻り番地と spsrを保存する.783 * スーパバイザモードに切り換え,戻り番地と戻り先のcpsrを保存する. 682 784 */ 683 785 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 684 str r2, [sp,#0x20] /* 戻り番地をスタックに保存 685 push {r1} /* spsrをスタックに保存 */786 str r2, [sp,#0x20] /* 戻り番地をスタックに保存(pcの場所)*/ 787 push {r1} /* 戻り先のcpsrをスタックに保存 */ 686 788 #else /* __TARGET_ARCH_ARM < 6 */ 687 789 /* 688 * 戻り 先(lr)とspsr(cpsr_svc)をスーパバイザモードのスタックに689 * 保存する.790 * 戻り番地(lr)と戻り先のcpsr(spsr)をスーパバイザモードのスタッ 791 * クに保存する. 690 792 */ 691 793 srsfd #CPSR_SVC_MODE! 692 794 693 795 /* 694 * スーパバイザモードに切り換え,スクラッチレジスタ を保存する.796 * スーパバイザモードに切り換え,スクラッチレジスタ+αを保存する. 695 797 */ 696 798 cps #CPSR_SVC_MODE 697 stmfd sp!,{r0-r5,r12,lr}799 push {r0-r5,r12,lr} 698 800 #endif /* __TARGET_ARCH_ARM < 6 */ 699 801 mov r4, #EXCNO_DABORT 700 802 b exc_handler_1 701 #endif /* OMIT_DABORT_HANDLER */702 803 703 804 /* … … 708 809 /* 709 810 * IビットとFビットをセットし,スーパバイザモードに切り換え,スタッ 710 * クポインタを初期化し,スクラッチレジスタ を保存する.811 * クポインタを初期化し,スクラッチレジスタ+αを保存する. 711 812 */ 712 813 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 713 814 ldr sp, =istkpt 714 815 ldr sp, [sp] 715 stmfd sp!, {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 716 717 /* 718 * アボートモードに戻して,戻り番地とspsrを取得する. 816 push {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 817 818 /* 819 * アボートモードに戻して,戻り番地(lr)と戻り先のcpsr(spsr)を 820 * 取得する. 719 821 */ 720 822 msr cpsr_c, #(CPSR_ABT_MODE AOR CPSR_FIQ_IRQ_BIT) … … 723 825 724 826 /* 725 * スーパバイザモードに切り換え,戻り番地と spsrを保存する.827 * スーパバイザモードに切り換え,戻り番地と戻り先のcpsrを保存する. 726 828 */ 727 829 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 728 str r2, [sp,#0x20] /* 戻り番地をスタックに保存 729 push {r1} /* spsrをスタックに保存 */830 str r2, [sp,#0x20] /* 戻り番地をスタックに保存(pcの場所)*/ 831 push {r1} /* 戻り先のcpsrをスタックに保存 */ 730 832 #else /* __TARGET_ARCH_ARM < 6 */ 731 833 /* … … 738 840 739 841 /* 740 * アボートモードに戻して,戻り 先(lr)とspsr(cpsr_svc)をスーパ741 * バイザモードのスタックに保存する.842 * アボートモードに戻して,戻り番地(lr)と戻り先のcpsr(spsr)を 843 * スーパバイザモードのスタックに保存する. 742 844 */ 743 845 cps #CPSR_ABT_MODE … … 745 847 746 848 /* 747 * スーパバイザモードに切り換え,スクラッチレジスタ を保存する.849 * スーパバイザモードに切り換え,スクラッチレジスタ+αを保存する. 748 850 */ 749 851 cps #CPSR_SVC_MODE 750 stmfd sp!,{r0-r5,r12,lr}852 push {r0-r5,r12,lr} 751 853 #endif /* __TARGET_ARCH_ARM < 6 */ 752 854 753 855 /* 754 * 例外ネストカウント の最上位ビットを1にする.856 * 例外ネストカウントをインクリメントする. 755 857 */ 756 858 ldr r2, =excpt_nest_count 757 859 ldr r3, [r2] 758 orr r3, r3, #0x80000000860 add r3, r3, #1 759 861 str r3, [r2] 760 862 761 mov r4, #EXCNO_ DABORT863 mov r4, #EXCNO_FATAL 762 864 b exc_handler_1 865 #endif /* OMIT_DABORT_HANDLER */ 763 866 764 867 /* … … 776 879 /* 777 880 * IビットとFビットをセットし,スーパバイザモードに切り換え,スク 778 * ラッチレジスタ を保存する.881 * ラッチレジスタ+αを保存する. 779 882 */ 780 883 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 781 stmfd sp!, {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 782 783 /* 784 * FIQモードに戻して,戻り番地とspsrを取得する. 884 push {r0-r5,r12,lr,pc} /* pcはスペース確保のため */ 885 886 /* 887 * FIQモードに戻して,戻り番地(lr)と戻り先のcpsr(spsr)を取得 888 * する. 785 889 */ 786 890 msr cpsr_c, #(CPSR_FIQ_MODE AOR CPSR_FIQ_IRQ_BIT) … … 789 893 790 894 /* 791 * スーパバイザモードに切り換え,戻り番地と spsrを保存する.895 * スーパバイザモードに切り換え,戻り番地と戻り先のcpsrを保存する. 792 896 */ 793 897 msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT) 794 str r2, [sp,#0x20] /* 戻り番地をスタックに保存 795 push {r1} /* spsrをスタックに保存 */898 str r2, [sp,#0x20] /* 戻り番地をスタックに保存(pcの場所)*/ 899 push {r1} /* 戻り先のcpsrをスタックに保存 */ 796 900 #else /* __TARGET_ARCH_ARM < 6 */ 797 901 /* 798 * 戻り 先(lr)とspsr(cpsr_svc)をスーパバイザモードのスタックに799 * 保存する.902 * 戻り番地(lr)と戻り先のcpsr(spsr)をスーパバイザモードのスタッ 903 * クに保存する. 800 904 */ 801 905 srsfd #CPSR_SVC_MODE! 802 906 803 907 /* 804 * スーパバイザモードに切り換え,スクラッチレジスタ を保存する.908 * スーパバイザモードに切り換え,スクラッチレジスタ+αを保存する. 805 909 */ 806 910 cps #CPSR_SVC_MODE 807 stmfd sp!,{r0-r5,r12,lr}911 push {r0-r5,r12,lr} 808 912 #endif /* __TARGET_ARCH_ARM < 6 */ 809 913 mov r4, #EXCNO_FIQ 810 914 b exc_handler_1 811 915 #endif /* OMIT_FIQ_HANDLER */ 812 916 813 917 ALABEL(end_exc_entry) 814 918 815 919 /* 816 920 * CPU例外ハンドラ出入口処理の共通部分 817 *818 * 【この時点のレジスタ状態】819 * r4:CPU例外ハンドラ番号820 921 */ 821 922 ALABEL(exc_handler_1) 822 923 /* 924 * 【この時点のレジスタ状態】 925 * r4:CPU例外ハンドラ番号 926 * 823 927 * CPU例外が発生した状況の判断に用いるために,CPU例外発生前の割 824 928 * 込み優先度マスクと例外ネストカウントをスタックに保存する. … … 836 940 and r1, sp, #4 837 941 sub sp, sp, r1 838 push {r0,r1} /* r0はスペース確保のため*/839 942 push {r0,r1} /* スタックポインタの調整値を保存 */ 943 /* r0はスペース確保のため */ 840 944 /* 841 945 * カーネル管理外のCPU例外か判定する … … 873 977 #endif /* TOPPERS_SUPPORT_OVRHDR */ 874 978 979 #ifdef USE_ARM_FPU 980 /* 981 * FPUをディスエーブルする. 982 */ 983 vmrs r0, fpexc 984 str r0, [sp] /* FPEXCを保存(r0の場所)*/ 985 bic r0, r0, #FPEXC_ENABLE 986 vmsr fpexc, r0 /* FPEXCを設定 */ 987 #endif /* USE_ARM_FPU */ 988 875 989 /* 876 990 * 非タスクコンテキスト用のスタックに切り換える. … … 890 1004 /* 891 1005 * (必要なら)割込みコントローラを操作する. 1006 * 1007 * irc_begin_excは,スタックトップ(r0の場所)に,irc_end_excで用 1008 * いる情報を保存する. 892 1009 */ 893 1010 bl irc_begin_exc … … 970 1087 mov sp, r3 971 1088 1089 #ifdef USE_ARM_FPU 1090 /* 1091 * FPUを元に戻す. 1092 */ 1093 ldr r0, [sp] /* FPEXCを復帰 */ 1094 vmsr fpexc, r0 1095 #endif /* USE_ARM_FPU */ 1096 972 1097 /* 973 1098 * p_runtskがNULLか判定する. … … 990 1115 */ 991 1116 ALABEL(exc_handler_3) 1117 /* 1118 * 【この時点のレジスタ状態】 1119 * r0:p_runtsk 1120 */ 992 1121 ldr r1, =p_schedtsk /* p_schedtsk → r1 */ 993 1122 ldr r1, [r1] … … 998 1127 * コンテキストを保存する. 999 1128 */ 1000 stmfd sp!, {r6-r11} /* 非スクラッチレジスタの保存 */ 1129 push {r6-r11} /* 残りのレジスタの保存 */ 1130 #ifdef USE_ARM_FPU 1131 ldr r2, [r0,#TCB_p_tinib] /* p_runtsk->p_tinib → r2 */ 1132 ldr r1, [r2,#TINIB_tskatr] /* p_runtsk->p_tinib->tskatr → r1 */ 1133 tst r1, #TA_FPU 1134 beq 1f /* TA_FPU属性でない場合は分岐 */ 1135 #ifdef USE_ARM_FPU_D32 1136 vpush {d16-d31} 1137 #endif /* USE_ARM_FPU_D32 */ 1138 vpush {d0-d15} /* 全FPUレジスタの保存 */ 1139 vmrs r1, fpscr 1140 push {r1,r2} /* FPSCRの保存 */ 1141 1: /* r2はアラインメントのため */ 1142 #endif /* USE_ARM_FPU */ 1001 1143 str sp, [r0,#TCB_sp] /* スタックポインタを保存 */ 1002 1144 adr r1, ret_exc_r /* 実行再開番地を保存 */ … … 1007 1149 /* 1008 1150 * コンテキストを復帰する. 1009 */ 1010 ldmfd sp!, {r6-r11} /* 非スクラッチレジスタの復帰 */ 1151 * 1152 * 【この時点のレジスタ状態】 1153 * r4:p_runtsk(タスク切換え後) 1154 */ 1155 #ifdef USE_ARM_FPU 1156 ldr r2, [r4,#TCB_p_tinib] /* p_runtsk->p_tinib → r2 */ 1157 ldr r1, [r2,#TINIB_tskatr] /* p_runtsk->p_tinib->tskatr → r1 */ 1158 tst r1, #TA_FPU 1159 vmrs r0, fpexc 1160 biceq r0, r0, #FPEXC_ENABLE 1161 orrne r0, r0, #FPEXC_ENABLE 1162 vmsr fpexc, r0 /* FPEXCを設定 */ 1163 beq 1f /* TA_FPU属性でない場合は分岐 */ 1164 pop {r1,r2} /* FPSCRの復帰 */ 1165 vmsr fpscr, r1 1166 vpop {d0-d15} /* 全FPUレジスタの復帰 */ 1167 #ifdef USE_ARM_FPU_D32 1168 vpop {d16-d31} 1169 #endif /* USE_ARM_FPU_D32 */ 1170 1: 1171 #endif /* USE_ARM_FPU */ 1172 pop {r6-r11} /* 残りのレジスタの復帰 */ 1011 1173 1012 1174 ALABEL(exc_handler_4) … … 1031 1193 1032 1194 #if __TARGET_ARCH_ARM < 6 1033 ldmfd sp!, {r0}/* 戻り先のcpsrをspsrに設定 */1195 pop {r0} /* 戻り先のcpsrをspsrに設定 */ 1034 1196 msr spsr_cxsf, r0 1035 1197 ldmfd sp!, {r0-r5,r12,lr,pc}^ /* コンテキストの復帰 */ 1036 1198 /* ^付きなので,spsr → cpsr */ 1037 1199 #else /* __TARGET_ARCH_ARM < 6 */ 1038 ldmfd sp!, {r0-r5,r12,lr}1200 pop {r0-r5,r12,lr} /* スクラッチレジスタ+αの復帰 */ 1039 1201 rfefd sp! 1040 1202 #endif /* __TARGET_ARCH_ARM < 6 */ … … 1061 1223 bne nk_exc_handler_2 /* ならnk_exc_handler_2に分岐 */ 1062 1224 1225 #ifdef USE_ARM_FPU 1226 /* 1227 * FPUをディスエーブルする. 1228 */ 1229 vmrs r0, fpexc 1230 str r0, [sp] /* FPEXCを保存(r0の場所)*/ 1231 bic r0, r0, #FPEXC_ENABLE 1232 vmsr fpexc, r0 /* FPEXCを設定 */ 1233 #endif /* USE_ARM_FPU */ 1234 1063 1235 /* 1064 1236 * 非タスクコンテキスト用のスタックに切り換える. … … 1068 1240 ldr sp, [r2] 1069 1241 push {r0,r3} /* 切換え前のスタックポインタを保存 */ 1070 /* r0は スペース確保のため */1242 /* r0はアラインメントのため */ 1071 1243 ALABEL(nk_exc_handler_2) 1072 1244 /* … … 1101 1273 pop {r0,r3} 1102 1274 mov sp, r3 1275 1276 #ifdef USE_ARM_FPU 1277 /* 1278 * FPUを元に戻す. 1279 */ 1280 ldr r0, [sp] /* FPEXCを復帰 */ 1281 vmsr fpexc, r0 1282 #endif /* USE_ARM_FPU */ 1103 1283 b exc_handler_5 1104 1284 1105 1285 /* 1106 1286 * ステータスレジスタの操作関数 … … 1113 1293 ATEXT 1114 1294 AALIGN(2) 1115 AWEAK( current_cpsr)1116 ALABEL( current_cpsr)1295 AWEAK(_kernel_current_cpsr) 1296 ALABEL(_kernel_current_cpsr) 1117 1297 mrs r0, cpsr_cxsf 1118 1298 bx lr 1119 1299 1120 1300 AALIGN(2) 1121 AWEAK( set_cpsr)1122 ALABEL( set_cpsr)1301 AWEAK(_kernel_set_cpsr) 1302 ALABEL(_kernel_set_cpsr) 1123 1303 msr cpsr_cxsf, r0 1124 1304 bx lr -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_sym.def
r331 r429 1 1 TARGET_ARCH_ARM,__TARGET_ARCH_ARM 2 USE_INTCFG_TABLE,true,bool,defined(USE_INTCFG_TABLE) 2 USE_ARM_FPU,true,bool,defined(USE_ARM_FPU),false 3 USE_ARM_FPU_D32,true,bool,defined(USE_ARM_FPU_D32),false 4 USE_INTCFG_TABLE,true,bool,defined(USE_INTCFG_TABLE),false 5 TA_FPU 3 6 sizeof_TCB,sizeof(TCB) 4 7 offsetof_TCB_p_tinib,"offsetof(TCB,p_tinib)" -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_test.h
r321 r429 4 4 * Advanced Standard Profile Kernel 5 5 * 6 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory6 * Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * … … 36 36 * の責任を負わない. 37 37 * 38 * $Id $38 * $Id: core_test.h 1244 2019-07-16 21:41:05Z ertl-hiro $ 39 39 */ 40 40 … … 54 54 55 55 /* 56 * CPU例外の発生56 * 不正アドレスの定義(メモリのない番地に設定する) 57 57 */ 58 59 58 #ifndef ILLEGAL_IADDR 60 59 #define ILLEGAL_IADDR 0xd0000000U /* 不正命令アドレス */ … … 66 65 67 66 /* 67 * サンプルプログラムで用いるCPU例外の発生 68 */ 69 #if defined(USE_CPUEXC_SVC) 70 71 #define CPUEXC1 EXCNO_SVC /* スーパバイザコール */ 72 #define RAISE_CPU_EXCEPTION RAISE_CPU_EXCEPTION_SVC 73 #define PREPARE_RETURN_CPUEXC PREPARE_RETURN_CPUEXC_SVC 74 75 #elif defined(USE_CPUEXC_PABORT) 76 77 #define CPUEXC1 EXCNO_PABORT /* プリフェッチアボート */ 78 #define RAISE_CPU_EXCEPTION RAISE_CPU_EXCEPTION_PABORT 79 #define PREPARE_RETURN_CPUEXC PREPARE_RETURN_CPUEXC_PABORT 80 81 #elif defined(USE_CPUEXC_DABORT) 82 83 #define CPUEXC1 EXCNO_DABORT /* データアボート */ 84 #define RAISE_CPU_EXCEPTION RAISE_CPU_EXCEPTION_DABORT 85 #define PREPARE_RETURN_CPUEXC PREPARE_RETURN_CPUEXC_DABORT 86 87 #elif defined(USE_CPUEXC_FATAL) 88 89 #define CPUEXC1 EXCNO_FATAL /* フェイタルデータアボート */ 90 #define RAISE_CPU_EXCEPTION RAISE_CPU_EXCEPTION_FATAL 91 /* フェイタルデータアボート例外ハンドラからリターンしてはならない */ 92 93 #else 94 95 #define CPUEXC1 EXCNO_UNDEF /* 未定義命令 */ 96 #define RAISE_CPU_EXCEPTION RAISE_CPU_EXCEPTION_UNDEF 97 #define PREPARE_RETURN_CPUEXC PREPARE_RETURN_CPUEXC_UNDEF 98 99 #endif 100 101 /* 68 102 * スーパバイザコールによるCPU例外の発生 69 103 * 70 * CPU例外ハンドラから,そのままリターンすることができる.svc命令によ 71 * りlrレジスタが上書きされるため,lrレジスタは破壊されるものと指定し 72 * ている. 104 * svc #0によりCPU例外を発生させる.svc命令によりlrレジスタが上書きさ 105 * れるため,lrレジスタは破壊されるものと指定している.CPU例外ハンド 106 * ラからそのままリターンすることで,svc命令の次の命令から実行が継続 107 * する. 73 108 */ 74 #if defined(USE_SVC_CPUEXC) 75 76 #define CPUEXC1 EXCNO_SVC /* スーパバイザコール */ 77 #define RAISE_CPU_EXCEPTION Asm("svc #0":::"lr") 78 #define PREPARE_RETURN_CPUEXC 109 #define RAISE_CPU_EXCEPTION_SVC Asm("svc #0":::"lr") 110 #define PREPARE_RETURN_CPUEXC_SVC 79 111 80 112 /* 81 113 * プリフェッチアボートによるCPU例外の発生 82 114 * 83 * プリフェッチアボートを起こした命令をスキップしてCPU例外ハンドラから 84 * リターンするために,戻り番地はそのままで良い(ARMモードで使うことを 85 * 想定). 115 * 不正な番地を関数の先頭番地として呼び出すことで,プリフェッチアボー 116 * トによるCPU例外を発生させる.不正な番地に分岐した命令をスキップし 117 * てCPU例外ハンドラからリターンするために,戻り番地には,lrレジスタ 118 * の値(不正な番地への分岐命令からのリターン番地が入っている)を設定 119 * する. 86 120 */ 87 #elif defined(USE_PABORT_CPUEXC) 88 89 #define CPUEXC1 EXCNO_PABORT /* プリフェッチアボート */ 90 #define RAISE_CPU_EXCEPTION ((void (*)(void)) ILLEGAL_IADDR)() 91 #define PREPARE_RETURN_CPUEXC 121 #define RAISE_CPU_EXCEPTION_PABORT (((void (*)(void)) ILLEGAL_IADDR)()) 122 #define PREPARE_RETURN_CPUEXC_PABORT (((T_EXCINF *) p_excinf)->pc \ 123 = ((T_EXCINF *) p_excinf)->lr) 92 124 93 125 /* 94 126 * データアボートによるCPU例外の発生 95 127 * 96 * データアボートを起こした命令をスキップしてCPU例外ハンドラからリター 97 * ンするために,戻り番地から4を減算する(ARMモードで使うことを想定). 128 * 不正な番地をリードすることで,データアボートによるCPU例外を発生さ 129 * せる.データアボートを起こした命令をスキップしてCPU例外ハンドラか 130 * らリターンするために,戻り番地から4を減算する(ARMモードで使うこと 131 * を想定している). 98 132 */ 99 #elif defined(USE_DABORT_CPUEXC) 100 101 #include "arm.h" 102 #define CPUEXC1 EXCNO_DABORT /* データアボート */ 103 #define RAISE_CPU_EXCEPTION (void)(*((volatile uint32_t *) ILLEGAL_DADDR)) 104 #define PREPARE_RETURN_CPUEXC ((T_EXCINF *) p_excinf)->pc -= 4U 133 #define RAISE_CPU_EXCEPTION_DABORT (void)(*((volatile uint32_t *) \ 134 ILLEGAL_DADDR)) 135 #define PREPARE_RETURN_CPUEXC_DABORT (((T_EXCINF *) p_excinf)->pc -= 4U) 105 136 106 137 /* 107 * フェイタルデータアボート 処理138 * フェイタルデータアボートによるCPU例外の発生 108 139 * 109 * スタックポインタを不正にして,フェイタルデータアボート処理を行わせ 110 * る.CPU例外ハンドラからはリターンできない. 140 * スタックポインタを不正にして,未定義命令を実行することで,フェイタ 141 * ルデータアボートによるCPU例外を発生させる.CPU例外ハンドラからリター 142 * ンしてはならない. 111 143 */ 112 #elif defined(USE_FATAL_DABORT_CPUEXC) 113 114 #define CPUEXC1 EXCNO_DABORT /* データアボート */ 115 #define RAISE_CPU_EXCEPTION Asm("mov sp, %0"::"I"(ILLEGAL_DADDR)) 144 #define RAISE_CPU_EXCEPTION_FATAL Asm("mov sp, %0\n" \ 145 "\t.word 0xf0500090" \ 146 ::"I"(ILLEGAL_DADDR)) 116 147 117 148 /* 118 149 * 未定義命令によるCPU例外の発生 119 150 * 120 * RAISE_CPU_EXCEPTIONは,ARMモードで使うことを想定している.CPU例外ハ 121 * ンドラから,そのままリターンすることができる.使用している未定義命 122 * 令は,"Multiply and multiply accumulate"命令群のエンコーディング内 123 * における未定義命令である. 151 * 未定義命令によりCPU例外を発生させる.使用している未定義命令は, 152 * "Multiply and multiply accumulate"命令群のエンコーディング内におけ 153 * る未定義命令である.CPU例外ハンドラからそのままリターンすることで, 154 * 未定義命令の次の命令から実行が継続する(ARMモードで使うことを想定 155 * している). 124 156 */ 125 #else 157 #define RAISE_CPU_EXCEPTION_UNDEF Asm(".word 0xf0500090") 158 #define PREPARE_RETURN_CPUEXC_UNDEF 126 159 127 #define CPUEXC1 EXCNO_UNDEF /* 未定義命令 */128 #define RAISE_CPU_EXCEPTION Asm(".word 0xf0500090")129 #define PREPARE_RETURN_CPUEXC130 131 #endif132 160 #endif /* TOPPERS_CORE_TEST_H */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_unrename.h
r321 r429 26 26 #undef dabort_handler 27 27 #undef fiq_handler 28 #undef current_cpsr29 #undef set_cpsr30 28 31 29 /* … … 34 32 #undef excpt_nest_count 35 33 #undef arm_mmu_initialize 34 #undef arm_fpu_initialize 36 35 #undef core_initialize 37 36 #undef core_terminate … … 40 39 #undef default_int_handler 41 40 #undef default_exc_handler 41 42 /* 43 * mpcore_kernel_impl.c 44 */ 45 #undef mpcore_initialize 46 #undef mpcore_terminate 47 48 /* 49 * mpcore_timer.c 50 */ 51 #undef target_hrt_initialize 52 #undef target_hrt_terminate 53 #undef target_hrt_handler 54 #undef target_ovrtimer_initialize 55 #undef target_ovrtimer_terminate 56 #undef target_ovrtimer_handler 42 57 43 58 /* … … 66 81 #undef pl310_clean_and_invalidate_all 67 82 68 /*69 * target_kernel_impl.c70 */71 #undef arm_tnum_memory_area72 #undef arm_memory_area73 74 83 75 84 #endif /* TOPPERS_CORE_RENAME_H */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/gic_kernel_impl.c
r321 r429 227 227 */ 228 228 gicd_set_priority(intno, INT_IPM(intpri)); 229 gicd_set_target(intno, 1U << arm_prc_index());229 gicd_set_target(intno, 1U << get_my_prcidx()); 230 230 231 231 /* -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/gic_kernel_impl.h
r321 r429 3 3 * Toyohashi Open Platform for Embedded Real-Time Systems 4 4 * 5 * Copyright (C) 2006-201 7by Embedded and Real-Time Systems Laboratory5 * Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 7 * … … 67 67 * 割込み番号の定義 68 68 */ 69 #define GIC_INTNO_SGI0 0U70 #define GIC_INTNO_PPI0 16U71 #define GIC_INTNO_SPI0 32U69 #define GIC_INTNO_SGI0 UINT_C(0) 70 #define GIC_INTNO_PPI0 UINT_C(16) 71 #define GIC_INTNO_SPI0 UINT_C(32) 72 72 73 73 /* … … 126 126 #define GICC_EOIR GIC_REG(GICC_BASE, 0x10) 127 127 #define GICC_RPR GIC_REG(GICC_BASE, 0x14) 128 #define GICC_HP IR GIC_REG(GICC_BASE, 0x18)128 #define GICC_HPPIR GIC_REG(GICC_BASE, 0x18) 129 129 130 130 /* … … 198 198 gicc_set_priority(uint_t pri) 199 199 { 200 sil_ wrw_mem(GICC_PMR, pri);200 sil_swrw_mem(GICC_PMR, pri); 201 201 } 202 202 … … 230 230 gicd_disable_int(INTNO intno) 231 231 { 232 sil_ wrw_mem(GICD_ICENABLER(intno / 32), (1U << (intno % 32)));232 sil_swrw_mem(GICD_ICENABLER(intno / 32), (1U << (intno % 32))); 233 233 } 234 234 … … 239 239 gicd_enable_int(INTNO intno) 240 240 { 241 sil_ wrw_mem(GICD_ISENABLER(intno / 32), (1U << (intno % 32)));241 sil_swrw_mem(GICD_ISENABLER(intno / 32), (1U << (intno % 32))); 242 242 } 243 243 … … 248 248 gicd_clear_pending(INTNO intno) 249 249 { 250 sil_ wrw_mem(GICD_ICPENDR(intno / 32), (1U << (intno % 32)));250 sil_swrw_mem(GICD_ICPENDR(intno / 32), (1U << (intno % 32))); 251 251 } 252 252 … … 257 257 gicd_set_pending(INTNO intno) 258 258 { 259 sil_ wrw_mem(GICD_ISPENDR(intno / 32), (1U << (intno % 32)));259 sil_swrw_mem(GICD_ISPENDR(intno / 32), (1U << (intno % 32))); 260 260 } 261 261 … … 271 271 272 272 /* 273 * ソフトウェア生成割込み(SGI)の生成 274 */ 275 Inline void 276 gicd_raise_sgi(INTNO intno) 277 { 278 sil_swrw_mem(GICD_SGIR, (0x02000000 | intno)); 279 } 280 281 /* 273 282 * 割込みのコンフィグレーション 274 283 */ … … 279 288 uint32_t reg; 280 289 281 reg = sil_rew_mem(GICD_ICFGR(intno / 16)); 282 reg &= ~(0x03U << shift); 283 reg |= (config << shift); 284 sil_wrw_mem(GICD_ICFGR(intno / 16), reg); 290 if (intno >= GIC_INTNO_PPI0) { 291 reg = sil_rew_mem(GICD_ICFGR(intno / 16)); 292 reg &= ~(0x03U << shift); 293 reg |= (config << shift); 294 sil_wrw_mem(GICD_ICFGR(intno / 16), reg); 295 } 285 296 } 286 297 … … 318 329 * 割込みターゲットプロセッサの設定 319 330 * 320 * prcsは,ターゲットとするプロセッサを表すビットのビット毎論理和で指321 * 定する.331 * affinityは,ターゲットとするプロセッサを表すビットのビット毎論理和 332 * で指定する. 322 333 * プロセッサ0 : 0x01 323 334 * プロセッサ1 : 0x02 … … 326 337 */ 327 338 Inline void 328 gicd_set_target(INTNO intno, uint_t prcs)339 gicd_set_target(INTNO intno, uint_t affinity) 329 340 { 330 341 uint_t shift = (intno % 4) * 8; … … 333 344 reg = sil_rew_mem(GICD_ITARGETSR(intno / 4)); 334 345 reg &= ~(0xffU << shift); 335 reg |= ( prcs<< shift);346 reg |= (affinity << shift); 336 347 sil_wrw_mem(GICD_ITARGETSR(intno / 4), reg); 337 348 } … … 373 384 */ 374 385 #ifndef TOPPERS_MACRO_ONLY 386 387 /* 388 * 割込み属性の設定のチェック 389 */ 390 Inline bool_t 391 check_intno_cfg(INTNO intno) 392 { 393 return(intcfg_table[intno] != 0U); 394 } 375 395 376 396 /* … … 393 413 394 414 /* 415 * 割込み要求禁止フラグが操作できる割込み番号の範囲の判定 416 */ 417 #ifdef GIC_SUPPORT_DISABLE_SGI 418 #define VALID_INTNO_DISINT(intno) VALID_INTNO(intno) 419 #else /* GIC_SUPPORT_DISABLE_SGI */ 420 #define VALID_INTNO_DISINT(intno) \ 421 (GIC_INTNO_PPI0 <= (intno) && (intno) <= TMAX_INTNO) 422 #endif /* GIC_SUPPORT_DISABLE_SGI */ 423 424 /* 395 425 * 割込み要求禁止フラグのセット 396 * 397 * intnoで指定された割込み要求ラインに対する割込み要求禁止フラグのセッ 398 * トし,割込みを禁止する.割込み属性が設定されていない割込み要求ライ 399 * ンが指定された場合には,falseを返す. 400 */ 401 Inline bool_t 426 */ 427 Inline void 402 428 disable_int(INTNO intno) 403 429 { 404 if (intcfg_table[intno] == 0U) {405 return(false);406 }407 430 gicd_disable_int(intno); 408 return(true);409 431 } 410 432 411 433 /* 412 434 * 割込み要求禁止フラグのクリア 413 * 414 * intnoで指定された割込み要求ラインに対する割込み要求禁止フラグのクリ 415 * アし,割込みを許可する.割込み属性が設定されていない割込み要求ライ 416 * ンが指定された場合には,falseを返す. 435 */ 436 Inline void 437 enable_int(INTNO intno) 438 { 439 gicd_enable_int(intno); 440 } 441 442 /* 443 * 割込み要求がクリアできる割込み番号の範囲の判定 444 */ 445 #define VALID_INTNO_CLRINT(intno) \ 446 (GIC_INTNO_PPI0 <= (intno) && (intno) <= TMAX_INTNO) 447 448 /* 449 * 割込み要求がクリアできる状態か? 417 450 */ 418 451 Inline bool_t 419 enable_int(INTNO intno) 420 { 421 if (intcfg_table[intno] == 0U) { 422 return(false); 452 check_intno_clear(INTNO intno) 453 { 454 return(true); 455 } 456 457 /* 458 * 割込み要求のクリア 459 */ 460 Inline void 461 clear_int(INTNO intno) 462 { 463 gicd_clear_pending(intno); 464 } 465 466 /* 467 * 割込みが要求できる状態か? 468 */ 469 Inline bool_t 470 check_intno_raise(INTNO intno) 471 { 472 return(true); 473 } 474 475 /* 476 * 割込みの要求 477 */ 478 Inline void 479 raise_int(INTNO intno) 480 { 481 if (intno < GIC_INTNO_PPI0) { 482 gicd_raise_sgi(intno); 423 483 } 424 gicd_enable_int(intno); 425 return(true); 426 } 427 428 /* 429 * 割込み要求のクリア 430 */ 431 Inline void 432 clear_int(INTNO intno) 433 { 434 gicd_clear_pending(intno); 484 else { 485 gicd_set_pending(intno); 486 } 435 487 } 436 488 … … 444 496 } 445 497 446 /*447 * 割込み要求のセット448 */449 Inline void450 raise_int(INTNO intno)451 {452 gicd_set_pending(intno);453 }454 455 498 #endif /* TOPPERS_MACRO_ONLY */ 456 499 #endif /* TOPPERS_GIC_KERNEL_IMPL_H */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/gic_support.S
r321 r429 5 5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 6 6 * Toyohashi Univ. of Technology, JAPAN 7 * Copyright (C) 2006-201 7by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * … … 70 70 * 割込み要因を取得する. 71 71 */ 72 #ifdef GIC_PL390_ERRATA /* GIC 390 Errata 801120への対策 */ 73 ldr r1, =GICC_HPPIR 74 ldr r0, [r1] 75 #endif /* GIC_PL390_ERRATA */ 72 76 ldr r1, =GICC_IAR 73 77 ldr r3, [r1] 74 75 /*76 * 割込み番号を求める.77 */78 78 lsl r4, r3, #22 /* 下位10ビットを取り出す */ 79 79 lsr r4, r4, #22 80 80 81 /* 82 * 割込み要求をクリアする. 83 */ 84 and r0, r4, #31 85 mov r2, #1 86 lsl r0, r2, r0 87 ldr r2, =GICD_ICPENDR(0) 88 lsr r1, r4, #5 89 str r0, [r2,r1,lsl #2] 81 #ifdef GIC_PL390_ERRATA /* GIC 390 Errata 733075への対策 */ 82 movw r0, #1023 83 cmp r4, r0 84 beq irc_begin_int_errata_1 85 movw r0, #1022 86 cmp r4, r0 87 beq irc_begin_int_errata_1 88 cmp r3, #0 89 bne irc_begin_int_errata_2 90 ldr r1, =GICD_ISACTIVER(0) /* 割込み要求があるかチェック */ 91 ldr r0, [r1] 92 tst r0, #0x01 93 movweq r4, #1024 /* 無効な割込みとみなす */ 94 ALABEL(irc_begin_int_errata_1) 95 ldr r1, =GICD_IPRIORITYR(0) /* 割込み優先度レジスタ0に書き込み */ 96 ldr r0, [r1] 97 str r0, [r1] 98 asm_data_sync_barrier r0 99 ALABEL(irc_begin_int_errata_2) 100 #endif /* GIC_PL390_ERRATA */ 90 101 91 102 /* … … 107 118 108 119 /* 109 * 割込み番号を返値としてリターンする.120 * r4に割込み番号を入れた状態でリターンする. 110 121 */ 111 122 bx lr -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/pl310.c
r428 r429 43 43 44 44 #include "kernel_impl.h" 45 #include " core_pl310.h"45 #include "pl310.h" 46 46 47 47 Inline uint32_t -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/tUartPL011.c
r321 r429 1 1 /* 2 * TOPPERS/ASP Kernel 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 * Advanced Standard Profile Kernel 5 * 6 * Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory 2 * TOPPERS Software 3 * Toyohashi Open Platform for Embedded Real-Time Systems 4 * 5 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory 7 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 7 * … … 95 94 CELLCB *p_cellcb = GET_CELLCB(idx); 96 95 97 /* 98 * UARTをディスエーブル 99 */ 100 sil_wrw_mem(UART_CR(ATTR_baseAddress), 0U); 101 102 /* 103 * エラーフラグをクリア 104 */ 105 sil_wrw_mem(UART_ECR(ATTR_baseAddress), 0U); 106 107 /* 108 * FIFOを空にする 109 */ 110 while (uart_pl011_getready(p_cellcb)) { 111 (void) uart_pl011_getchar(p_cellcb); 112 } 113 114 /* 115 * ボーレートと通信規格を設定 116 */ 117 sil_wrw_mem(UART_IBRD(ATTR_baseAddress), ATTR_ibrd); 118 sil_wrw_mem(UART_FBRD(ATTR_baseAddress), ATTR_fbrd); 119 sil_wrw_mem(UART_LCR_H(ATTR_baseAddress), ATTR_lcr_h); 120 121 /* 122 * UARTをイネーブル 123 */ 124 sil_wrw_mem(UART_CR(ATTR_baseAddress), 96 if (!VAR_opened) { 97 /* 98 * 既にオープンしている場合は、二重にオープンしない. 99 */ 100 101 /* 102 * UARTをディスエーブル 103 */ 104 sil_wrw_mem(UART_CR(ATTR_baseAddress), 0U); 105 106 /* 107 * エラーフラグをクリア 108 */ 109 sil_wrw_mem(UART_ECR(ATTR_baseAddress), 0U); 110 111 /* 112 * FIFOを空にする 113 */ 114 while (uart_pl011_getready(p_cellcb)) { 115 (void) uart_pl011_getchar(p_cellcb); 116 } 117 118 /* 119 * ボーレートと通信規格を設定 120 */ 121 sil_wrw_mem(UART_IBRD(ATTR_baseAddress), ATTR_ibrd); 122 sil_wrw_mem(UART_FBRD(ATTR_baseAddress), ATTR_fbrd); 123 sil_wrw_mem(UART_LCR_H(ATTR_baseAddress), ATTR_lcr_h); 124 125 /* 126 * UARTをイネーブル 127 */ 128 sil_wrw_mem(UART_CR(ATTR_baseAddress), 125 129 UART_CR_UARTEN|UART_CR_TXE|UART_CR_RXE); 130 131 VAR_opened = true; 132 } 126 133 } 127 134 … … 134 141 CELLCB *p_cellcb = GET_CELLCB(idx); 135 142 136 /* 137 * UARTをディスエーブル 138 */ 139 sil_wrw_mem(UART_CR(ATTR_baseAddress), 0U); 143 if (VAR_opened) { 144 /* 145 * UARTをディスエーブル 146 */ 147 sil_wrw_mem(UART_CR(ATTR_baseAddress), 0U); 148 149 VAR_opened = false; 150 } 140 151 } 141 152 … … 232 243 } 233 244 } 245 246 /* 247 * SIOドライバの終了処理 248 */ 249 void 250 eTerminate_main(CELLIDX idx) 251 { 252 eSIOPort_close(idx); 253 } -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/tUartPL011.cdl
r321 r429 1 1 /* 2 * TOPPERS/ASP Kernel 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 * Advanced Standard Profile Kernel 2 * TOPPERS Software 3 * Toyohashi Open Platform for Embedded Real-Time Systems 5 4 * 6 5 * Copyright (C) 2015 by Ushio Laboratory 7 6 * Graduate School of Engineering Science, Osaka Univ., JAPAN 8 * Copyright (C) 2015 ,2016by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2015-2018 by Embedded and Real-Time Systems Laboratory 9 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 9 * … … 58 57 59 58 entry siHandlerBody eiISR; 59 entry sRoutineBody eTerminate; 60 60 61 61 attr { … … 65 65 uint8_t lcr_h; /* ライン制御レジスタの設定値 */ 66 66 }; 67 var { 68 bool_t opened = false; /* オープン済み */ 69 }; 67 70 }; -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/uart_pl011.h
r321 r429 1 1 /* 2 * TOPPERS/ASP Kernel 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 * Advanced Standard Profile Kernel 2 * TOPPERS Software 3 * Toyohashi Open Platform for Embedded Real-Time Systems 5 4 * 6 5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/Makefile.chip
r321 r429 2 2 # Makefile のチップ依存部(RZ/A1用) 3 3 # 4 # $Id $4 # $Id: Makefile.chip 720 2016-04-01 22:16:17Z ertl-hiro $ 5 5 # 6 6 … … 22 22 # 23 23 KERNEL_DIRS := $(KERNEL_DIRS) $(CHIPDIR) 24 KERNEL_COBJS := $(KERNEL_COBJS) chip_kernel_impl.o mpcore_kernel_impl.o \ 25 gic_kernel_impl.o pl310.o chip_timer.o 24 26 KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) gic_support.o 25 KERNEL_COBJS := $(KERNEL_COBJS) chip_kernel_impl.o gic_kernel_impl.o \ 26 chip_timer.o 27 28 # 29 # システムサービスに関する定義 30 # 31 SYSSVC_DIRS := $(SYSSVC_DIRS) $(CHIPDIR) 27 32 28 33 # -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_kernel.h
r321 r429 3 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 4 * Advanced Standard Profile Kernel 5 * 6 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory5 * 6 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 * 8 * 9 9 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 10 10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 29 29 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 30 30 * 免責すること. 31 * 31 * 32 32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 35 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 36 * の責任を負わない. 37 * 37 * 38 38 * $Id$ 39 39 */ … … 42 42 * kernel.hのターゲット依存部(RZ/A1用) 43 43 * 44 * このヘッダファイルは, kernel.hからインクルードされる.他のファイル45 * から直接インクルードすることはない.このファイルをインクルードする46 * 前に,t_stddef.hがインクルードされるので,それに依存してもよい.44 * このヘッダファイルは,target_kernel.h(または,そこからインクルー 45 * ドされるファイル)のみからインクルードされる.他のファイルから直接 46 * インクルードしてはならない. 47 47 */ 48 48 … … 66 66 * サポートできる機能の定義 67 67 * 68 * ena_int/dis_intとオーバランハンドラをサポートすることができる. 68 * ena_int/dis_int/clr_int/ras_int/prb_intとオーバランハンドラを 69 * サポートすることができる. 69 70 */ 70 71 #define TOPPERS_TARGET_SUPPORT_ENA_INT /* ena_int */ 71 72 #define TOPPERS_TARGET_SUPPORT_DIS_INT /* dis_int */ 73 #define TOPPERS_TARGET_SUPPORT_CLR_INT /* clr_int */ 74 #define TOPPERS_TARGET_SUPPORT_RAS_INT /* ras_int */ 75 #define TOPPERS_TARGET_SUPPORT_PRB_INT /* prb_int */ 72 76 #define TOPPERS_TARGET_SUPPORT_OVRHDR 73 74 /*75 * 高分解能タイマのタイマ周期76 *77 * 2^32 / 33.33…を丸めた値とする.78 */79 #define TCYC_HRTCNT 128849019U80 81 /*82 * 高分解能タイマのカウント値の進み幅83 */84 #define TSTEP_HRTCNT 1U85 86 /*87 * オーバランハンドラの残りプロセッサ時間に指定できる最大値88 *89 * この値をOSタイマへの設定値に変換してタイマに設定した後,タイマの現90 * 在値を読み出してμ秒単位に変換できる値としている.タイマの現在値を91 * μ秒単位に変換する時に34を加えるため,以下の条件を満たす最大の値と92 * する.93 * (TMAX_OVRTIM * 33 + TMAX_OVRTIM / 3 + 1) + 34 < 2^3294 */95 #define TMAX_OVRTIM 128849017U96 77 97 78 /* -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_kernel.trb
r321 r429 27 27 # 割込み要求ライン属性に関するターゲット依存のエラーチェック 28 28 # 29 $cfgData[:CFG_INT].each do | key, params|30 if $INTNO_IRQ0 <= key && key<= $INTNO_IRQ729 $cfgData[:CFG_INT].each do |_, params| 30 if $INTNO_IRQ0 <= params[:intno] && params[:intno] <= $INTNO_IRQ7 31 31 # IRQ割込みの場合 32 32 #(TA_EDGEがセットされている場合) -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_kernel_impl.c
r321 r429 3 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 4 * Advanced Standard Profile Kernel 5 * 5 * 6 6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 * 10 * 11 11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 12 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 31 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 32 * 免責すること. 33 * 33 * 34 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 37 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 38 * の責任を負わない. 39 * 39 * 40 40 * $Id$ 41 41 */ … … 46 46 47 47 #include "kernel_impl.h" 48 #include <sil.h> 48 49 #include "interrupt.h" 50 #include "pl310.h" 49 51 50 52 /* … … 55 57 { 56 58 /* 57 * キャッシュをディスエーブル59 * MPCore依存の初期化 58 60 */ 59 arm_disable_cache();61 mpcore_initialize(); 60 62 61 63 /* 62 * コア依存の初期化64 * L2キャッシュコントローラ(PL310)の初期化 63 65 */ 64 core_initialize(); 65 66 /* 67 * キャッシュをイネーブル 68 */ 69 arm_enable_cache(); 70 71 /* 72 * GICのディストリビュータの初期化 73 */ 74 gicd_initialize(); 75 76 /* 77 * GICのCPUインタフェースの初期化 78 */ 79 gicc_initialize(); 80 81 /* 82 * 分岐予測の無効化とイネーブル 83 */ 84 arm_invalidate_bp(); 85 arm_enable_bp(); 66 pl310_initialize(0x0U, ~0x0U); 86 67 } 87 68 88 69 /* 89 * チップ依存 部の終了処理70 * チップ依存の終了処理 90 71 */ 91 72 void 92 73 chip_terminate(void) 93 74 { 94 extern void software_term_hook(void);95 void (*volatile fp)(void) = software_term_hook;96 97 75 /* 98 * software_term_hookへのポインタを,一旦volatile指定のあるfpに代 99 * 入してから使うのは,0との比較が最適化で削除されないようにするた 100 * めである. 76 * MPCore依存の終了処理 101 77 */ 102 if (fp != 0) { 103 (*fp)(); 104 } 105 106 /* 107 * GICのCPUインタフェースの終了処理 108 */ 109 gicc_terminate(); 110 111 /* 112 * GICのディストリビュータの終了処理 113 */ 114 gicd_terminate(); 115 116 /* 117 * コア依存の終了処理 118 */ 119 core_terminate(); 78 mpcore_terminate(); 120 79 } 121 80 … … 177 136 */ 178 137 gicd_set_priority(intno, INT_IPM(intpri)); 179 gicd_set_target(intno, 1U << arm_prc_index());138 gicd_set_target(intno, 1U << get_my_prcidx()); 180 139 181 140 /* -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_kernel_impl.h
r321 r429 3 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 4 * Advanced Standard Profile Kernel 5 * 5 * 6 6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 * 10 * 11 11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 12 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 31 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 32 * 免責すること. 33 * 33 * 34 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 37 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 38 * の責任を負わない. 39 * 39 * 40 40 * $Id$ 41 41 */ … … 58 58 59 59 /* 60 * MMUの使用に関する設定60 * デフォルトの非タスクコンテキスト用のスタック領域の定義 61 61 */ 62 #define USE_ARM_MMU 63 #define USE_ARM_SSECTION 62 #ifndef DEFAULT_ISTKSZ 63 #define DEFAULT_ISTKSZ 0x2000U /* 8KB */ 64 #endif /* DEFAULT_ISTKSZ */ 64 65 65 66 /* … … 70 71 71 72 /* 72 * GIC依存部の割込み管理機能の初期化は使用しない. 73 * GIC 390 Errataへの対策を実施 74 */ 75 #define GIC_PL390_ERRATA 76 77 /* 78 * GIC依存部の割込み管理機能の初期化は使用しない 73 79 */ 74 80 #define OMIT_GIC_INITIALIZE_INTERRUPT 75 81 76 82 /* 77 * GICに関する定義,コアで共通な定義 78 * 79 * core_kernel_impl.hは,gic_kernel_impl.hからインクルードされる. 83 * MPCoreで共通な定義 80 84 */ 81 #include " gic_kernel_impl.h"85 #include "mpcore_kernel_impl.h" 82 86 83 87 #ifndef TOPPERS_MACRO_ONLY -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_rename.def
r331 r429 6 6 target_hrt_initialize 7 7 target_hrt_terminate 8 target_hrt_set_event9 target_hrt_raise_event10 8 target_hrt_handler 11 9 target_ovrtimer_initialize 12 10 target_ovrtimer_terminate 13 target_ovrtimer_stop14 target_ovrtimer_get_current15 11 target_ovrtimer_handler 16 12 -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_rename.h
r321 r429 15 15 #define target_hrt_initialize _kernel_target_hrt_initialize 16 16 #define target_hrt_terminate _kernel_target_hrt_terminate 17 #define target_hrt_set_event _kernel_target_hrt_set_event18 #define target_hrt_raise_event _kernel_target_hrt_raise_event19 17 #define target_hrt_handler _kernel_target_hrt_handler 20 18 #define target_ovrtimer_initialize _kernel_target_ovrtimer_initialize 21 19 #define target_ovrtimer_terminate _kernel_target_ovrtimer_terminate 22 #define target_ovrtimer_stop _kernel_target_ovrtimer_stop23 #define target_ovrtimer_get_current _kernel_target_ovrtimer_get_current24 20 #define target_ovrtimer_handler _kernel_target_ovrtimer_handler 25 21 -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_stddef.h
r321 r429 1 /*2 * TOPPERS Software3 * Toyohashi Open Platform for Embedded Real-Time Systems4 *5 * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory6 * Graduate School of Information Science, Nagoya Univ., JAPAN7 * Copyright (C) 2011-2016 by Embedded and Real-Time Systems Laboratory8 * Graduate School of Information Science, Nagoya Univ., JAPAN9 *10 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー15 * スコード中に含まれていること.16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記19 * の無保証規定を掲載すること.20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ22 * と.23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに26 * 報告すること.27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを31 * 免責すること.32 *33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ37 * の責任を負わない.38 *39 * $Id$40 */41 42 1 /* 43 2 * t_stddef.hのチップ依存部(RZ/A1用) … … 46 5 * されるファイル)のみからインクルードされる.他のファイルから直接イ 47 6 * ンクルードしてはならない. 7 * 8 * $Id$ 48 9 */ 49 10 … … 64 25 65 26 /* 27 * 開発環境で共通な定義 28 */ 29 #ifndef TOPPERS_MACRO_ONLY 30 #include <stdint.h> 31 #endif /* TOPPERS_MACRO_ONLY */ 32 33 #define TOPPERS_STDFLOAT_TYPE1 34 #include "tool_stddef.h" 35 36 /* 66 37 * コアで共通な定義 67 38 */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_sym.def
r331 r429 1 TARGET_RZA1H,true,bool,defined(TARGET_RZA1H) 2 TARGET_RZA1L,true,bool,defined(TARGET_RZA1L) 1 TARGET_RZA1H,true,bool,defined(TARGET_RZA1H),false 2 TARGET_RZA1L,true,bool,defined(TARGET_RZA1L),false 3 3 TA_NEGEDGE 4 4 TA_POSEDGE -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_timer.c
r321 r429 4 4 * Advanced Standard Profile Kernel 5 5 * 6 * Copyright (C) 2006-201 7by Embedded and Real-Time Systems Laboratory6 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * … … 100 100 101 101 /* 102 * 高分解能タイマへの割込みタイミングの設定103 */104 void105 target_hrt_set_event(HRTCNT hrtcnt)106 {107 uint32_t cnt = hrtcnt * 33 + hrtcnt / 3 + 1;108 uint32_t current;109 110 /*111 * 現在のカウント値を読み,hrtcnt後に割込みが発生するように設定する.112 */113 current = sil_rew_mem(OSTM_CNT(OSTM0_BASE));114 sil_wrw_mem(OSTM_CMP(OSTM0_BASE), current + cnt);115 116 /*117 * 上で現在のカウント値を読んで以降に,cnt以上カウントアップしてい118 * た場合には,割込みを発生させる.119 */120 if (sil_rew_mem(OSTM_CNT(OSTM0_BASE)) - current >= cnt) {121 raise_int(INTNO_OSTM0);122 }123 }124 125 /*126 * 高分解能タイマ割込みの要求127 */128 void129 target_hrt_raise_event(void)130 {131 raise_int(INTNO_OSTM0);132 }133 134 /*135 102 * タイマ割込みハンドラ 136 103 */ … … 143 110 signal_time(); 144 111 } 112 145 113 /* 146 114 * オーバランタイマドライバ … … 183 151 184 152 /* 185 * オーバランタイマの停止186 */187 PRCTIM188 target_ovrtimer_stop(void)189 {190 uint32_t cnt;191 192 /*193 * OSタイマを停止する.194 */195 sil_wrb_mem(OSTM_TT(OSTM1_BASE), OSTM_TT_STOP);196 197 if (probe_int(INTNO_OSTM1)) {198 /*199 * 割込み要求が発生している場合200 */201 clear_int(INTNO_OSTM1);202 return(0U);203 }204 else {205 cnt = sil_rew_mem(OSTM_CNT(OSTM1_BASE));206 return((PRCTIM)((cnt + 34) / 5 * 3 / 20));207 }208 }209 210 /*211 * オーバランタイマの現在値の読出し212 */213 PRCTIM214 target_ovrtimer_get_current(void)215 {216 uint32_t cnt;217 218 if (probe_int(INTNO_OSTM1)) {219 /*220 * 割込み要求が発生している場合221 */222 return(0U);223 }224 else {225 cnt = sil_rew_mem(OSTM_CNT(OSTM1_BASE));226 return((PRCTIM)((cnt + 34) / 5 * 3 / 20));227 }228 }229 230 /*231 153 * オーバランタイマ割込みハンドラ 232 154 * -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_timer.cfg
r321 r429 1 1 /* 2 * タイマドライバのコンフィギュレーションファイル 2 * タイマドライバのコンフィギュレーションファイル(RZ/A1 OSタイマ用) 3 3 * 4 4 * $Id$ … … 10 10 ATT_INI({ TA_NULL, 0, _kernel_target_hrt_initialize }); 11 11 ATT_TER({ TA_NULL, 0, _kernel_target_hrt_terminate }); 12 12 13 CFG_INT(INTNO_TIMER, { TA_ENAINT|INTATR_TIMER, INTPRI_TIMER }); 13 14 DEF_INH(INHNO_TIMER, { TA_NULL, _kernel_target_hrt_handler }); … … 17 18 */ 18 19 #ifdef TOPPERS_SUPPORT_OVRHDR 20 19 21 ATT_INI({ TA_NULL, 0, _kernel_target_ovrtimer_initialize }); 20 22 ATT_TER({ TA_NULL, 0, _kernel_target_ovrtimer_terminate }); 23 21 24 CFG_INT(INTNO_OVRTIMER, { TA_ENAINT|INTATR_OVRTIMER, INTPRI_OVRTIMER }); 22 25 DEF_INH(INHNO_OVRTIMER, { TA_NULL, _kernel_target_ovrtimer_handler }); 26 23 27 #endif /* TOPPERS_SUPPORT_OVRHDR */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_timer.h
r321 r429 6 6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2005-201 6by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2005-2018 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * … … 51 51 #define TOPPERS_CHIP_TIMER_H 52 52 53 #include "kernel/kernel_impl.h" 53 54 #include <sil.h> 54 55 #include "rza1.h" … … 140 141 * 生させるように設定する. 141 142 */ 142 extern void target_hrt_set_event(HRTCNT hrtcnt); 143 Inline void 144 target_hrt_set_event(HRTCNT hrtcnt) 145 { 146 uint32_t cnt = hrtcnt * 33 + hrtcnt / 3 + 1; 147 uint32_t current; 148 149 /* 150 * 現在のカウント値を読み,hrtcnt後に割込みが発生するように設定する. 151 */ 152 current = sil_rew_mem(OSTM_CNT(OSTM0_BASE)); 153 sil_wrw_mem(OSTM_CMP(OSTM0_BASE), current + cnt); 154 155 /* 156 * 上で現在のカウント値を読んで以降に,cnt以上カウントアップしてい 157 * た場合には,割込みを発生させる. 158 */ 159 if (sil_rew_mem(OSTM_CNT(OSTM0_BASE)) - current >= cnt) { 160 raise_int(INTNO_OSTM0); 161 } 162 } 143 163 144 164 /* 145 165 * 高分解能タイマ割込みの要求 146 166 */ 147 extern void target_hrt_raise_event(void); 167 Inline void 168 target_hrt_raise_event(void) 169 { 170 raise_int(INTNO_OSTM0); 171 } 148 172 149 173 /* … … 184 208 * オーバランタイマの停止 185 209 */ 186 extern PRCTIM target_ovrtimer_stop(void); 210 Inline PRCTIM 211 target_ovrtimer_stop(void) 212 { 213 uint32_t cnt; 214 215 /* 216 * OSタイマを停止する. 217 */ 218 sil_wrb_mem(OSTM_TT(OSTM1_BASE), OSTM_TT_STOP); 219 220 if (probe_int(INTNO_OSTM1)) { 221 /* 222 * 割込み要求が発生している場合 223 */ 224 clear_int(INTNO_OSTM1); 225 return(0U); 226 } 227 else { 228 cnt = sil_rew_mem(OSTM_CNT(OSTM1_BASE)); 229 return((PRCTIM)((cnt + 34) / 5 * 3 / 20)); 230 } 231 } 187 232 188 233 /* 189 234 * オーバランタイマの現在値の読出し 190 235 */ 191 extern PRCTIM target_ovrtimer_get_current(void); 236 Inline PRCTIM 237 target_ovrtimer_get_current(void) 238 { 239 uint32_t cnt; 240 241 if (probe_int(INTNO_OSTM1)) { 242 /* 243 * 割込み要求が発生している場合 244 */ 245 return(0U); 246 } 247 else { 248 cnt = sil_rew_mem(OSTM_CNT(OSTM1_BASE)); 249 return((PRCTIM)((cnt + 34) / 5 * 3 / 20)); 250 } 251 } 192 252 193 253 /* -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_unrename.h
r321 r429 16 16 #undef target_hrt_initialize 17 17 #undef target_hrt_terminate 18 #undef target_hrt_set_event19 #undef target_hrt_raise_event20 18 #undef target_hrt_handler 21 19 #undef target_ovrtimer_initialize 22 20 #undef target_ovrtimer_terminate 23 #undef target_ovrtimer_stop24 #undef target_ovrtimer_get_current25 21 #undef target_ovrtimer_handler 26 22 -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/rza1.h
r321 r429 2 2 * TOPPERS Software 3 3 * Toyohashi Open Platform for Embedded Real-Time Systems 4 * 5 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory4 * 5 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 * 7 * 8 8 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 9 9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 28 28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 29 29 * 免責すること. 30 * 30 * 31 31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 34 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 35 * の責任を負わない. 36 * 36 * 37 37 * $Id$ 38 38 */ … … 45 45 #define TOPPERS_RZA1_H 46 46 47 #include <kernel.h> 47 48 #include <sil.h> 49 #include "arm.h" 48 50 49 51 /* … … 84 86 85 87 /* 88 * CP15の補助制御レジスタ(ACTLR)の設定値 89 */ 90 #define CP15_ACTLR_SMP UINT_C(0x00000040) 91 92 /* 86 93 * GIC依存部を使用するための定義 87 94 */ … … 92 99 #define GIC_TNUM_INTNO UINT_C(538) 93 100 #endif /* TOPPERS_RZA1H */ 94 #endif /* GIC_TNUM_INT */101 #endif /* GIC_TNUM_INTNO */ 95 102 96 103 /* … … 256 263 reg = sil_reh_mem(RZA1_IRQRR); 257 264 reg &= ~(0x01U << (intno - INTNO_IRQ0)); 258 sil_ wrh_mem(RZA1_IRQRR, reg);265 sil_swrh_mem(RZA1_IRQRR, reg); 259 266 } 260 267 -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/scif.h
r321 r429 1 1 /* 2 * TOPPERS/ASP Kernel 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 * Advanced Standard Profile Kernel 5 * 2 * TOPPERS Software 3 * Toyohashi Open Platform for Embedded Real-Time Systems 4 * 6 5 * Copyright (C) 2001-2011 by Industrial Technology Institute, 7 6 * Miyagi Prefectural Government, JAPAN 8 7 * Copyright (C) 2007-2016 by Embedded and Real-Time Systems Laboratory 9 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 * 9 * 11 10 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 12 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 31 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 31 * 免責すること. 33 * 32 * 34 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 37 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 37 * の責任を負わない. 39 * 38 * 40 39 * $Id$ 41 40 */ … … 66 65 * シリアルモードレジスタ(SCIF_SCSMR)の設定値 67 66 */ 67 #define SCIF_SCSMR_ASYNC 0x0000U /* 調歩同期式モード */ 68 68 #define SCIF_SCSMR_SYNC 0x0080U /* クロック同期式モード */ 69 #define SCIF_SCSMR_8BIT 0x0000U /* 8ビットデータ */ 69 70 #define SCIF_SCSMR_7BIT 0x0040U /* 7ビットデータ */ 70 #define SCIF_SCSMR_PARITY 0x0020U /* パリティビットの付加 */ 71 #define SCIF_SCSMR_NOPARITY 0x0000U /* パリティビットなし */ 72 #define SCIF_SCSMR_PARITY 0x0020U /* パリティビット付加 */ 73 #define SCIF_SCSMR_EVEN 0x0000U /* 偶数パリティ */ 71 74 #define SCIF_SCSMR_ODD 0x0010U /* 奇数パリティ */ 75 #define SCIF_SCSMR_1STOP 0x0000U /* 1ストッピビット */ 72 76 #define SCIF_SCSMR_2STOP 0x0008U /* 2ストッピビット */ 73 77 #define SCIF_SCSMR_CKS1 0x0000U /* P1φクロック1 */ -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/tSCIF.c
r321 r429 1 1 /* 2 * TOPPERS/ASP Kernel 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 * Advanced Standard Profile Kernel 2 * TOPPERS Software 3 * Toyohashi Open Platform for Embedded Real-Time Systems 5 4 * 6 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory5 * Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 7 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 7 * … … 133 132 uint_t brr; 134 133 135 if (VAR_initialized) { 136 /* 137 * 既に初期化している場合は、二重に初期化しない. 138 */ 139 return; 140 } 141 142 brr = SCIF_CLK / (32 * ATTR_baudRate) - 1; 143 assert(brr <= 255); 144 145 sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 0U); 146 sil_wrh_mem(SCIF_SCFCR(ATTR_baseAddress), 134 if (!VAR_opened) { 135 /* 136 * 既にオープンしている場合は、二重にオープンしない. 137 */ 138 brr = SCIF_CLK / (32 * ATTR_baudRate) - 1; 139 assert(brr <= 255); 140 141 sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 0U); 142 sil_wrh_mem(SCIF_SCFCR(ATTR_baseAddress), 147 143 SCIF_SCFCR_TFRST|SCIF_SCFCR_RFRST); 148 (void) sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress)); 149 (void) sil_reh_mem(SCIF_SCLSR(ATTR_baseAddress)); 150 sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 0U); 151 sil_wrh_mem(SCIF_SCLSR(ATTR_baseAddress), 0U); 152 sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), SCIF_SCSCR_INTCLK); 153 sil_wrh_mem(SCIF_SCSMR(ATTR_baseAddress), SCIF_SCSMR_CKS1); 154 sil_wrh_mem(SCIF_SCEMR(ATTR_baseAddress), 0U); 155 sil_wrb_mem(SCIF_SCBRR(ATTR_baseAddress), (uint8_t) brr); 156 sil_wrh_mem(SCIF_SCFCR(ATTR_baseAddress), 144 (void) sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress)); 145 (void) sil_reh_mem(SCIF_SCLSR(ATTR_baseAddress)); 146 sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 0U); 147 sil_wrh_mem(SCIF_SCLSR(ATTR_baseAddress), 0U); 148 sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), SCIF_SCSCR_INTCLK); 149 sil_wrh_mem(SCIF_SCSMR(ATTR_baseAddress), 150 SCIF_SCSMR_ASYNC|ATTR_mode|SCIF_SCSMR_CKS1); 151 sil_wrh_mem(SCIF_SCEMR(ATTR_baseAddress), 0U); 152 sil_wrb_mem(SCIF_SCBRR(ATTR_baseAddress), (uint8_t) brr); 153 sil_wrh_mem(SCIF_SCFCR(ATTR_baseAddress), 157 154 SCIF_SCFCR_RSTRG_15|SCIF_SCFCR_RTRG_1|SCIF_SCFCR_TTRG_8); 158 sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress),155 sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 159 156 SCIF_SCSCR_TE|SCIF_SCSCR_RE|SCIF_SCSCR_INTCLK); 160 157 161 while ((sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress)) & SCIF_SCFSR_RDF) != 0U) { 162 (void) sil_reb_mem(SCIF_SCFRDR(ATTR_baseAddress)); 163 sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), (uint16_t) ~(SCIF_SCFSR_RDF)); 164 } 165 sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 0U); 166 167 VAR_initialized = true; 158 while ((sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress)) & SCIF_SCFSR_RDF) 159 != 0U) { 160 (void) sil_reb_mem(SCIF_SCFRDR(ATTR_baseAddress)); 161 sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 162 (uint16_t) ~(SCIF_SCFSR_RDF)); 163 } 164 sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 0U); 165 166 VAR_opened = true; 167 } 168 168 } 169 169 … … 176 176 CELLCB *p_cellcb = GET_CELLCB(idx); 177 177 178 sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 0U); 178 if (VAR_opened) { 179 sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 0U); 180 181 VAR_opened = false; 182 } 179 183 } 180 184 … … 284 288 } 285 289 } 290 291 /* 292 * SIOドライバの終了処理 293 */ 294 void 295 eTerminate_main(CELLIDX idx) 296 { 297 CELLCB *p_cellcb = GET_CELLCB(idx); 298 299 if (VAR_opened) { 300 /* 301 * 送信FIFOが空になるまで待つ 302 */ 303 while ((sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress)) 304 & SCIF_SCFSR_TEND) == 0U) ; 305 /* 306 * ポートのクローズ 307 */ 308 eSIOPort_close(idx); 309 } 310 } -
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/tSCIF.cdl
r321 r429 5 5 * Copyright (C) 2015 by Ushio Laboratory 6 6 * Graduate School of Engineering Science, Osaka Univ., JAPAN 7 * Copyright (C) 2015 ,2016by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2015-2018 by Embedded and Real-Time Systems Laboratory 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * … … 61 61 entry siHandlerBody eiRxISR; 62 62 entry siHandlerBody eiTxISR; 63 entry sRoutineBody eTerminate; 63 64 64 65 attr { 65 66 uintptr_t baseAddress; /* SCIFレジスタのベースアドレス */ 66 uint32_t baudRate; /* ボーレートの設定値 */ 67 uint16_t mode; /* モードレジスタの設定値 */ 68 uint32_t baudRate; /* ボーレート */ 67 69 }; 68 70 var { 69 bool_t initialized = false; /* 初期化済み */71 bool_t opened = false; /* オープン済み */ 70 72 }; 71 73 }; -
EcnlProtoTool/trunk/asp3_dcre/arch/gcc/tool_stddef.h
r321 r429 5 5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 6 6 * Toyohashi Univ. of Technology, JAPAN 7 * Copyright (C) 2004-201 1by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2004-2018 by Embedded and Real-Time Systems Laboratory 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * … … 90 90 * 91 91 * TOPPERS_STDINT_TYPE1: char/short/int/long longのビット長がそれぞれ 92 * 8/16/32/64ビットで, ポインタのビット長がlong93 * のビット長と一致する場合92 * 8/16/32/64ビットで,size_tとポインタのビット 93 * 長がlongのビット長と一致する場合 94 94 */ 95 95 #ifdef TOPPERS_STDINT_TYPE1 … … 177 177 #define INT_LEAST8_MIN INT8_MIN 178 178 #define UINT_LEAST8_MAX INT8_MAX 179 180 #define SIZE_MAX ULONG_MAX 179 181 180 182 #endif /* TOPPERS_STDINT_TYPE1 */ -
EcnlProtoTool/trunk/asp3_dcre/arch/tracelog/tTraceLog.c
r331 r429 5 5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 6 6 * Toyohashi Univ. of Technology, JAPAN 7 * Copyright (C) 2005-201 6by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2005-2019 by Embedded and Real-Time Systems Laboratory 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * … … 48 48 #include "kernel/task.h" 49 49 #include "kernel/time_event.h" 50 #ifdef TOPPERS_SUPPORT_PROTECT 51 #include "kernel/domain.h" 52 #endif /* TOPPERS_SUPPORT_PROTECT */ 50 53 #include <sil.h> 51 54 #include <log_output.h> … … 56 59 * 57 60 * デフォルトでは,ログ時刻として,高分解能タイマのカウント値を用いて 58 * いる.ターゲット依存で変更する場合には, SYSLOG_GET_LOGTIMに,ログ時61 * いる.ターゲット依存で変更する場合には,TRACE_GET_LOGTIMに,ログ時 59 62 * 刻を取り出すマクロを定義する. 60 63 */ 61 #ifndef SYSLOG_GET_LOGTIM62 #define SYSLOG_GET_LOGTIM(p_logtim) \64 #ifndef TRACE_GET_LOGTIM 65 #define TRACE_GET_LOGTIM(p_logtim) \ 63 66 (*(p_logtim) = target_hrt_get_current()) 64 #endif /* SYSLOG_GET_TIM */65 66 /* 67 * トレースログの開始 67 #endif /* TRACE_GET_TIM */ 68 69 /* 70 * トレースログの開始(受け口関数) 68 71 */ 69 72 ER … … 81 84 82 85 /* 83 * トレースログの書込み 86 * トレースログの書込み(受け口関数) 84 87 */ 85 88 ER … … 94 97 * トレース時刻の設定 95 98 */ 96 SYSLOG_GET_LOGTIM(&(((SYSLOG *) p_trace)->logtim));99 TRACE_GET_LOGTIM(&(((SYSLOG *) p_trace)->logtim)); 97 100 98 101 /* … … 121 124 122 125 /* 123 * トレースログの読出し 126 * トレースログの読出し(受け口関数) 124 127 */ 125 128 ER … … 203 206 p_tcb = (TCB *) info; 204 207 if (p_tcb == NULL) { 205 tskid = 0;208 tskid = TSK_NONE; 206 209 } 207 210 else { … … 240 243 } 241 244 245 #ifdef TOPPERS_SUPPORT_PROTECT 246 247 static intptr_t 248 get_somid(intptr_t info) 249 { 250 SOMINIB *p_sominib; 251 ID somid; 252 253 p_sominib = (SOMINIB *) info; 254 if (p_sominib == NULL) { 255 somid = TSOM_STP; 256 } 257 else { 258 somid = SOMID(p_sominib); 259 } 260 return((intptr_t) somid); 261 } 262 263 static intptr_t 264 get_twd_domid(intptr_t info) 265 { 266 TWDINIB *p_twdinib; 267 ID domid; 268 269 p_twdinib = (TWDINIB *) info; 270 domid = (ID)(p_twdinib->p_dominib - dominib_table) + TMIN_DOMID; 271 return((intptr_t) domid); 272 } 273 274 #endif /* TOPPERS_SUPPORT_PROTECT */ 275 242 276 /* 243 277 * トレースログの表示 … … 267 301 tracemsg = "dispatch to task %d."; 268 302 break; 303 304 #ifdef TOPPERS_SUPPORT_PROTECT 305 case LOG_TYPE_SCYC|LOG_START: 306 traceinfo[0] = get_somid(p_trace->logpar[0]); 307 tracemsg = "system cycle starts with system operating mode %d."; 308 break; 309 case LOG_TYPE_TWD|LOG_START: 310 if (p_trace->logpar[0] == 0) { 311 tracemsg = "idle window starts."; 312 } 313 else { 314 traceinfo[0] = get_twd_domid(p_trace->logpar[0]); 315 tracemsg = "time window for domain %d starts."; 316 } 317 break; 318 #endif /* TOPPERS_SUPPORT_PROTECT */ 319 269 320 case LOG_TYPE_COMMENT: 270 321 for (i = 1; i < TNUM_LOGPAR; i++) { … … 313 364 } 314 365 315 /* 316 * トレースログのダンプ 317 */ 318 void 319 e TraceLog_dump(void)366 /* 367 * トレースログのダンプ(受け口関数) 368 */ 369 void 370 eDump_main(uintptr_t exinf) 320 371 { 321 372 TRACE trace; … … 325 376 } 326 377 } 327 328 /*329 * トレースログのダンプ(受け口関数)330 */331 void332 tTraceLog_eDump_main(uintptr_t exinf)333 {334 eTraceLog_dump();335 } -
EcnlProtoTool/trunk/asp3_dcre/arch/tracelog/tTraceLog.cdl
r321 r429 1 1 /* 2 * TOPPERS/ASP Kernel 3 * Toyohashi Open Platform for Embedded Real-Time Systems/ 4 * Advanced Standard Profile Kernel 2 * TOPPERS Software 3 * Toyohashi Open Platform for Embedded Real-Time Systems 5 4 * 6 5 * Copyright (C) 2015 by Ushio Laboratory 7 6 * Graduate School of Engineering Science, Osaka Univ., JAPAN 8 * Copyright (C) 2015 ,2016by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2015-2018 by Embedded and Real-Time Systems Laboratory 9 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 9 * … … 68 67 */ 69 68 ER read([out] TRACE *p_trace); 70 71 /*72 * トレースログのダンプ73 */74 void dump(void);75 69 }; 76 70 … … 81 75 celltype tTraceLog { 82 76 entry sTraceLog eTraceLog; 83 entry sRoutineBody eDump; /* 終了処理ルーチンとの接続*/84 call sPutLog cPutLog; /* 低レベル出力との接続 */77 entry sRoutineBody eDump; /* トレースログのダンプ */ 78 call sPutLog cPutLog; /* ダンプ先との接続 */ 85 79 86 80 attr { -
EcnlProtoTool/trunk/asp3_dcre/arch/tracelog/trace_log.h
r331 r429 5 5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 6 6 * Toyohashi Univ. of Technology, JAPAN 7 * Copyright (C) 2004-201 6by Embedded and Real-Time Systems Laboratory7 * Copyright (C) 2004-2019 by Embedded and Real-Time Systems Laboratory 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * … … 41 41 42 42 /* 43 * トレースログ に関する設定43 * トレースログ機能のヘッダファイル 44 44 * 45 45 * このインクルードファイルは,target_kernel_impl.hおよび 46 * target_syssvc.h のみからインクルードされる.また,トレースログ機能の47 * 初期化や記録の開始/停止,トレースログのダンプを行うプログラムから48 * インクルードすることを想定している.49 */ 50 51 #ifndef TOPPERS_TRACE_ CONFIG_H52 #define TOPPERS_TRACE_ CONFIG_H46 * target_syssvc.hからインクルードされる.また,トレースログ機能の初 47 * 期化や記録の開始/停止,トレースログのダンプを行うプログラムからイ 48 * ンクルードすることを想定している. 49 */ 50 51 #ifndef TOPPERS_TRACE_LOG_H 52 #define TOPPERS_TRACE_LOG_H 53 53 54 54 /* … … 75 75 76 76 /* 77 * TECSで記述された テストプログラム用のサービスを直接呼び出すための定義77 * TECSで記述されたトレースログ機能を直接呼び出すための定義 78 78 * 79 79 * C言語で記述されたアプリケーションから,TECSで記述されたトレースログ … … 134 134 135 135 Inline void 136 trace_write_1(uint_t type, intptr_targ1)136 trace_write_1(uint_t type, LOGPAR arg1) 137 137 { 138 138 TRACE trace; … … 144 144 145 145 Inline void 146 trace_write_2(uint_t type, intptr_t arg1, intptr_targ2)146 trace_write_2(uint_t type, LOGPAR arg1, LOGPAR arg2) 147 147 { 148 148 TRACE trace; … … 155 155 156 156 Inline void 157 trace_write_3(uint_t type, intptr_t arg1, intptr_t arg2, intptr_targ3)157 trace_write_3(uint_t type, LOGPAR arg1, LOGPAR arg2, LOGPAR arg3) 158 158 { 159 159 TRACE trace; … … 174 174 175 175 #define trace_1(type, arg1) \ 176 trace_write_1(type, ( intptr_t)(arg1))176 trace_write_1(type, (LOGPAR)(arg1)) 177 177 178 178 #define trace_2(type, arg1, arg2) \ 179 trace_write_2(type, ( intptr_t)(arg1), (intptr_t)(arg2))179 trace_write_2(type, (LOGPAR)(arg1), (LOGPAR)(arg2)) 180 180 181 181 #define trace_3(type, arg1, arg2, arg3) \ 182 trace_write_3(type, ( intptr_t)(arg1), (intptr_t)(arg2), \183 ( intptr_t)(arg3))182 trace_write_3(type, (LOGPAR)(arg1), (LOGPAR)(arg2), \ 183 (LOGPAR)(arg3)) 184 184 185 185 /* 186 186 * トレースログのダンプ 187 *188 * トレースログをダンプする.終了処理ルーチンとして登録することも想定189 * している.引数として,ダンプ先となる文字出力関数へのポインタを渡す.190 * ターゲット依存の低レベル文字出力を利用する場合には,target_putcを渡191 * す.192 187 */ 193 188 Inline void … … 203 198 */ 204 199 #define LOG_TSKSTAT(p_tcb) trace_2(LOG_TYPE_TSKSTAT, p_tcb, p_tcb->tstat) 200 201 #define LOG_DSP_LEAVE(p_tcb) trace_1(LOG_TYPE_DSP|LOG_LEAVE, p_tcb) 202 203 #ifdef TOPPERS_SUPPORT_PROTECT 204 #define LOG_SCYC_START(p_sominib) trace_1(LOG_TYPE_SCYC|LOG_START, p_sominib) 205 #define LOG_TWD_START(p_twdinib) trace_1(LOG_TYPE_TWD|LOG_START, p_twdinib) 206 #endif /* TOPPERS_SUPPORT_PROTECT */ 205 207 206 208 #define LOG_TSYSLOG_ESYSLOG_WRITE_ENTER(priority, p_syslog) \ 207 209 trace_wri_log((TRACE *) p_syslog) 208 210 209 #endif /* TOPPERS_TRACE_ CONFIG_H */211 #endif /* TOPPERS_TRACE_LOG_H */ -
EcnlProtoTool/trunk/asp3_dcre/cfg/GenFile.rb
r321 r429 37 37 # の責任を負わない. 38 38 # 39 # $Id $39 # $Id: GenFile.rb 111 2016-03-16 23:50:27Z ertl-hiro $ 40 40 # 41 41 -
EcnlProtoTool/trunk/asp3_dcre/cfg/MANIFEST
r270 r429 1 PACKAGE cfg 2 VERSION 1.5.0 3 1 4 MANIFEST 2 5 cfg.rb -
EcnlProtoTool/trunk/asp3_dcre/cfg/SRecord.rb
r321 r429 36 36 # の責任を負わない. 37 37 # 38 # $Id $38 # $Id: SRecord.rb 161 2018-12-12 00:45:04Z ertl-hiro $ 39 39 # 40 40 … … 170 170 end 171 171 end 172 173 # 文字列としてのデータ取得 174 def get_string(address) 175 str = "" 176 targetChar = get_data(address, 1).hex 177 while (!targetChar.nil? && targetChar != 0) 178 str += targetChar.chr 179 address += 1 180 targetChar = get_data(address, 1).hex 181 end 182 return(str) 183 end 172 184 end -
EcnlProtoTool/trunk/asp3_dcre/cfg/cfg.rb
r331 r429 1 #!/usr/bin/env ruby 1 #!/usr/bin/env ruby -Eutf-8 -w 2 2 # -*- coding: utf-8 -*- 3 3 # … … 5 5 # 6 6 # Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN 7 # Copyright (C) 2015 ,2016by Embedded and Real-Time Systems Laboratory7 # Copyright (C) 2015-2019 by Embedded and Real-Time Systems Laboratory 8 8 # Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 # … … 37 37 # の責任を負わない. 38 38 # 39 # $Id $39 # $Id: cfg.rb 175 2019-06-19 01:51:58Z ertl-hiro $ 40 40 # 41 41 … … 56 56 # 57 57 # 共通 58 VERSION = "1. 2.2"58 VERSION = "1.5.0" 59 59 60 60 # cfg1_out関係 61 CFG1_PREFIX = "TOPPERS_cfg_" 62 CFG1_MAGIC_NUM = "TOPPERS_magic_number" 63 CFG1_SIZEOF_SIGNED = "TOPPERS_sizeof_signed_t" 64 CFG1_OUT_C = "cfg1_out.c" 65 CFG1_OUT_DB = "cfg1_out.db" 66 CFG1_OUT_SREC = "cfg1_out.srec"