From 899aa4ec6bb1162a36c0c1354b519b75c31b707c Mon Sep 17 00:00:00 2001 From: ryuz Date: Wed, 16 Aug 2006 16:27:04 +0000 Subject: [PATCH 1/1] import --- cfgrtr/build/bcc55/bmake.mak | 83 ++ cfgrtr/build/gcc/gmake.mak | 74 ++ cfgrtr/build/vc60/h4acfg.dsp | 313 +++++ cfgrtr/build/vc60/h4acfg.dsw | 29 + cfgrtr/include/analyze.h | 32 + cfgrtr/include/apidef.h | 54 + cfgrtr/include/apiinc.h | 36 + cfgrtr/include/attini.h | 36 + cfgrtr/include/attisr.h | 37 + cfgrtr/include/crealm.h | 38 + cfgrtr/include/crecyc.h | 38 + cfgrtr/include/credtq.h | 38 + cfgrtr/include/creflg.h | 42 + cfgrtr/include/crembf.h | 38 + cfgrtr/include/crembx.h | 38 + cfgrtr/include/crempf.h | 38 + cfgrtr/include/cresem.h | 42 + cfgrtr/include/cretsk.h | 43 + cfgrtr/include/defercd.h | 42 + cfgrtr/include/defexc.h | 41 + cfgrtr/include/definh.h | 37 + cfgrtr/include/deftex.h | 37 + cfgrtr/include/idlstk.h | 36 + cfgrtr/include/intstk.h | 39 + cfgrtr/include/intstk.txt | 36 + cfgrtr/include/knlheap.h | 37 + cfgrtr/include/maxtmout.h | 41 + cfgrtr/include/maxtpri.h | 43 + cfgrtr/include/parpack.h | 37 + cfgrtr/include/read.h | 51 + cfgrtr/include/readcfg.h | 17 + cfgrtr/include/timtic.h | 41 + cfgrtr/source/analyze.cpp | 259 ++++ cfgrtr/source/apidef.cpp | 242 ++++ cfgrtr/source/apiinc.cpp | 94 ++ cfgrtr/source/attini.cpp | 83 ++ cfgrtr/source/attisr.cpp | 121 ++ cfgrtr/source/crealm.cpp | 254 ++++ cfgrtr/source/crecyc.cpp | 257 ++++ cfgrtr/source/credtq.cpp | 285 +++++ cfgrtr/source/creflg.cpp | 263 ++++ cfgrtr/source/crembf.cpp | 291 +++++ cfgrtr/source/crembx.cpp | 114 ++ cfgrtr/source/crempf.cpp | 114 ++ cfgrtr/source/cresem.cpp | 306 +++++ cfgrtr/source/cretsk.cpp | 440 +++++++ cfgrtr/source/defercd.cpp | 44 + cfgrtr/source/defexc.cpp | 156 +++ cfgrtr/source/definh.cpp | 89 ++ cfgrtr/source/deftex.cpp | 126 ++ cfgrtr/source/hos4cfg.cpp | 413 ++++++ cfgrtr/source/idlstk.cpp | 110 ++ cfgrtr/source/intstk.cpp | 158 +++ cfgrtr/source/knlheap.cpp | 108 ++ cfgrtr/source/maxtmout.cpp | 92 ++ cfgrtr/source/maxtpri.cpp | 94 ++ cfgrtr/source/parpack.cpp | 68 + cfgrtr/source/read.cpp | 272 ++++ cfgrtr/source/timtic.cpp | 119 ++ document/profile.txt | 18 + kernel/build/arm/ADuC7019/gcc/gmake.mak | 123 ++ kernel/build/arm/ADuC7019/rvct/gmake.mak | 116 ++ kernel/build/common/gmake.inc | 103 ++ kernel/build/h8/h8300ha/ch38/gmake.mak | 128 ++ kernel/build/h8/h8s2600a/ch38/gmake.mak | 192 +++ kernel/build/mn103/mn1030/gcc/gmake.mak | 123 ++ kernel/build/sh/sh2/gcc/gmake.mak | 122 ++ kernel/build/sh/sh2/hew/hosv4a.Hbp | 2 + kernel/build/sh/sh2/hew/hosv4a.hws | 38 + kernel/build/sh/sh2/hew/hosv4a.tws | 11 + kernel/build/sh/sh2/hew/hosv4a/Readme.txt | 8 + kernel/build/sh/sh2/hew/hosv4a/hosv4a.hwp | 298 +++++ kernel/build/sh/sh2/shc/gmake.mak | 392 ++++++ kernel/build/win/win32/gcc/gmake.mak | 121 ++ kernel/build/win/win32/vc60/hosv4a.dsp | 648 ++++++++++ kernel/build/win/win32/vc60/hosv4a.dsw | 29 + kernel/include/arch/irc/arm/ADuC7019/irc.h | 40 + kernel/include/arch/irc/arm/ADuC7019/ircatr.h | 28 + kernel/include/arch/irc/none/irc.h | 24 + kernel/include/arch/irc/none/ircatr.h | 29 + kernel/include/arch/proc/arm/arm_v4t/proc.h | 67 + kernel/include/arch/proc/arm/arm_v4t/procatr.h | 67 + kernel/include/arch/proc/arm/arm_v6/proc.h | 68 + kernel/include/arch/proc/arm/arm_v6/procatr.h | 66 + kernel/include/arch/proc/h8/h8300h/proc.h | 67 + kernel/include/arch/proc/h8/h8300h/procatr.h | 61 + kernel/include/arch/proc/h8/h8300ha/proc.h | 67 + kernel/include/arch/proc/h8/h8300ha/procatr.h | 65 + kernel/include/arch/proc/h8/h8300hn/proc.h | 67 + kernel/include/arch/proc/h8/h8300hn/procatr.h | 61 + kernel/include/arch/proc/h8/h8s2600a/proc.h | 67 + kernel/include/arch/proc/h8/h8s2600a/procatr.h | 65 + kernel/include/arch/proc/mn103/mn1030/proc.h | 67 + kernel/include/arch/proc/mn103/mn1030/procatr.h | 67 + kernel/include/arch/proc/sh/sh2/proc.h | 68 + kernel/include/arch/proc/sh/sh2/procatr.h | 54 + kernel/include/arch/proc/win/win32/proc.h | 112 ++ kernel/include/arch/proc/win/win32/procatr.h | 49 + kernel/include/config/cfgerr.h | 393 ++++++ kernel/include/config/cfghok.h | 41 + kernel/include/config/cfgknl.h | 486 +++++++ kernel/include/config/cfgsys.h | 103 ++ kernel/include/core/basetyp.h | 760 +++++++++++ kernel/include/core/cmpl.h | 80 ++ kernel/include/core/core.h | 36 + kernel/include/core/dsp.h | 82 ++ kernel/include/core/hep.h | 70 + kernel/include/core/objhdl.h | 39 + kernel/include/core/objid.h | 149 +++ kernel/include/core/opttyp.h | 250 ++++ kernel/include/core/que.h | 169 +++ kernel/include/core/rdq.h | 100 ++ kernel/include/core/sys.h | 119 ++ kernel/include/core/tmq.h | 63 + kernel/include/core/toq.h | 65 + kernel/include/itron.h | 996 +++++++++++++++ kernel/include/kernel.h | 349 +++++ kernel/include/object/flgobj.h | 269 ++++ kernel/include/object/inhobj.h | 58 + kernel/include/object/isrobj.h | 102 ++ kernel/include/object/mbxobj.h | 240 ++++ kernel/include/object/mpfobj.h | 415 ++++++ kernel/include/object/semobj.h | 311 +++++ kernel/include/object/tskobj.h | 959 ++++++++++++++ kernel/include/parser/parserr.h | 412 ++++++ kernel/include/parser/parshok.h | 24 + kernel/include/parser/parsknl.h | 943 ++++++++++++++ kernel/include/parser/parssys.h | 306 +++++ kernel/source/arch/irc/arm/ADuC7019/intc.c | 109 ++ kernel/source/arch/proc/arm/arm_v4t/gcc/armctx.S | 174 +++ kernel/source/arch/proc/arm/arm_v4t/gcc/armirq.S | 125 ++ kernel/source/arch/proc/arm/arm_v4t/rvct/armctx.s | 158 +++ kernel/source/arch/proc/arm/arm_v4t/rvct/armirq.s | 123 ++ kernel/source/arch/proc/arm/arm_v5/rvct/armctx.s | 162 +++ kernel/source/arch/proc/arm/arm_v5/rvct/armirq.s | 123 ++ kernel/source/arch/proc/arm/arm_v6/rvct/armctx.s | 138 ++ kernel/source/arch/proc/arm/arm_v6/rvct/armirq.s | 119 ++ kernel/source/arch/proc/h8/h8300/ctxctl.src | 107 ++ kernel/source/arch/proc/h8/h8300ha/ctxctl.src | 144 +++ kernel/source/arch/proc/h8/h8300ha/intctl.src | 133 ++ kernel/source/arch/proc/h8/h8300ha/mk_vec/mk_vec.c | 125 ++ kernel/source/arch/proc/h8/h8300ha/vect_001.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_002.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_003.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_004.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_005.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_006.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_007.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_008.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_009.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_010.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_011.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_012.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_013.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_014.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_015.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_016.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_017.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_018.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_019.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_020.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_021.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_022.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_023.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_024.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_025.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_026.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_027.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_028.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_029.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_030.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_031.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_032.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_033.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_034.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_035.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_036.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_037.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_038.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_039.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_040.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_041.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_042.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_043.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_044.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_045.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_046.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_047.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_048.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_049.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_050.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_051.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_052.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_053.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_054.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_055.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_056.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_057.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_058.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_059.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_060.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_061.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_062.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_063.src | 24 + kernel/source/arch/proc/h8/h8300ha/vect_dmy.src | 22 + kernel/source/arch/proc/h8/h8s2600a/ctxctl.src | 138 ++ kernel/source/arch/proc/h8/h8s2600a/intctl.src | 133 ++ kernel/source/arch/proc/mn103/mn1030/gcc/ctxctl.S | 151 +++ kernel/source/arch/proc/mn103/mn1030/gcc/intctl.S | 82 ++ kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S | 130 ++ kernel/source/arch/proc/sh/sh2/gcc/intctl.S | 1123 ++++++++++++++++ kernel/source/arch/proc/sh/sh2/shc/ctxctl.src | 167 +++ kernel/source/arch/proc/sh/sh2/shc/dmyhdr.src | 23 + kernel/source/arch/proc/sh/sh2/shc/exchdr.src | 408 ++++++ kernel/source/arch/proc/sh/sh2/shc/inthdr.src | 1346 ++++++++++++++++++++ kernel/source/arch/proc/sh/sh2/shc/mk_vec/mk_vec.c | 138 ++ kernel/source/arch/proc/win/win32/ctxctl.c | 301 +++++ kernel/source/core/dsp/dsp_tsk.c | 78 ++ kernel/source/core/dsp/ent_tsk.c | 36 + kernel/source/core/dsp/idl_lop.c | 31 + kernel/source/core/hep/alc_hep.c | 67 + kernel/source/core/hep/cre_hep.c | 56 + kernel/source/core/hep/fre_hep.c | 72 ++ kernel/source/core/que/add_que.c | 41 + kernel/source/core/que/adf_que.c | 110 ++ kernel/source/core/que/adp_que.c | 178 +++ kernel/source/core/que/nxt_que.c | 77 ++ kernel/source/core/que/rmh_que.c | 105 ++ kernel/source/core/que/rmv_que.c | 115 ++ kernel/source/core/que/rot_que.c | 68 + kernel/source/core/que/trm_que.c | 31 + kernel/source/core/tmq/add_tmq.c | 51 + kernel/source/core/tmq/rmv_tmq.c | 62 + kernel/source/core/tmq/sig_tmq.c | 62 + kernel/source/core/toq/add_toq.c | 104 ++ kernel/source/core/toq/rmv_toq.c | 78 ++ kernel/source/core/toq/sig_toq.c | 97 ++ kernel/source/object/flg/acre_flg.c | 100 ++ kernel/source/object/flg/clr_flg.c | 87 ++ kernel/source/object/flg/cre_flg.c | 97 ++ kernel/source/object/flg/del_flg.c | 105 ++ kernel/source/object/flg/kchk_flg.c | 38 + kernel/source/object/flg/kcre_flg.c | 95 ++ kernel/source/object/flg/pol_flg.c | 139 ++ kernel/source/object/flg/ref_flg.c | 95 ++ kernel/source/object/flg/set_flg.c | 135 ++ kernel/source/object/flg/twai_flg.c | 166 +++ kernel/source/object/flg/wai_flg.c | 181 +++ kernel/source/object/inh/def_inh.c | 27 + kernel/source/object/inh/end_inh.c | 36 + kernel/source/object/inh/exe_inh.c | 35 + kernel/source/object/inh/sta_inh.c | 30 + kernel/source/object/isr/acre_isr.c | 59 + kernel/source/object/isr/exe_isr.c | 39 + kernel/source/object/isr/kcre_isr.c | 56 + kernel/source/object/mbx/acre_mbx.c | 99 ++ kernel/source/object/mbx/kadd_msg.c | 91 ++ kernel/source/object/mbx/kcre_mbx.c | 101 ++ kernel/source/object/mbx/krmv_msg.c | 98 ++ kernel/source/object/mbx/rcv_mbx.c | 106 ++ kernel/source/object/mbx/snd_mbx.c | 99 ++ kernel/source/object/mpf/acre_mpf.c | 102 ++ kernel/source/object/mpf/get_mpf.c | 132 ++ kernel/source/object/mpf/kcre_mpf.c | 189 +++ kernel/source/object/mpf/pget_mpf.c | 108 ++ kernel/source/object/mpf/rel_mpf.c | 122 ++ kernel/source/object/sem/acre_sem.c | 102 ++ kernel/source/object/sem/cre_sem.c | 93 ++ kernel/source/object/sem/del_sem.c | 105 ++ kernel/source/object/sem/kcre_sem.c | 106 ++ kernel/source/object/sem/kwai_sem.c | 117 ++ kernel/source/object/sem/pol_sem.c | 120 ++ kernel/source/object/sem/ref_sem.c | 95 ++ kernel/source/object/sem/sig_sem.c | 122 ++ kernel/source/object/sem/twai_sem.c | 166 +++ kernel/source/object/sem/wai_sem.c | 142 +++ kernel/source/object/sys/dis_dsp.c | 36 + kernel/source/object/sys/ena_dsp.c | 43 + kernel/source/object/sys/get_tid.c | 39 + kernel/source/object/sys/loc_cpu.c | 35 + kernel/source/object/sys/sns_ctx.c | 37 + kernel/source/object/sys/sns_dsp.c | 37 + kernel/source/object/sys/sns_loc.c | 37 + kernel/source/object/sys/sta_knl.c | 98 ++ kernel/source/object/sys/unl_cpu.c | 43 + kernel/source/object/tim/isig_tim.c | 58 + kernel/source/object/tsk/acre_tsk.c | 58 + kernel/source/object/tsk/act_tsk.c | 133 ++ kernel/source/object/tsk/can_wup.c | 74 ++ kernel/source/object/tsk/cre_tsk.c | 48 + kernel/source/object/tsk/dly_tsk.c | 68 + kernel/source/object/tsk/ext_tsk.c | 77 ++ kernel/source/object/tsk/kcre_tsk.c | 173 +++ kernel/source/object/tsk/ref_tsk.c | 80 ++ kernel/source/object/tsk/rel_wai.c | 81 ++ kernel/source/object/tsk/slp_tsk.c | 68 + kernel/source/object/tsk/tcb2id.c | 42 + kernel/source/object/tsk/tget_que.c | 86 ++ kernel/source/object/tsk/wup_tsk.c | 103 ++ sample/h8/h83069/ch38/dbsct.c | 30 + sample/h8/h83069/ch38/gmake.mak | 84 ++ sample/h8/h83069/ch38/lowlvl.src | 52 + sample/h8/h83069/ch38/lowsrc.c | 481 +++++++ sample/h8/h83069/ch38/lowsrc.h | 12 + sample/h8/h83069/ch38/sbrk.c | 49 + sample/h8/h83069/ch38/sbrk.h | 12 + sample/h8/h83069/ch38/startup.src | 22 + sample/h8/h83069/ch38/typedefine.h | 21 + sample/h8/h83069/ch38/vcttbl.src | 76 ++ sample/h8/h83069/main.c | 29 + sample/h8/h83069/ostimer.c | 44 + sample/h8/h83069/ostimer.h | 33 + sample/h8/h83069/sample.c | 159 +++ sample/h8/h83069/sample.h | 35 + sample/h8/h83069/system.cfg | 40 + sample/sh/sh7045/gcc/crt0.S | 113 ++ sample/sh/sh7045/gcc/gmake.mak | 43 + sample/sh/sh7045/gcc/sample.c | 31 + sample/sh/sh7045/gcc/sample.h | 6 + sample/sh/sh7045/gcc/sample.x | 47 + sample/sh/sh7045/gcc/system.cfg | 9 + sample/sh/sh7045/gcc/vector.S | 333 +++++ sample/sh/sh7144/main.c | 27 + sample/sh/sh7144/ostimer.c | 57 + sample/sh/sh7144/ostimer.h | 33 + sample/sh/sh7144/regs_sh7144.h | 284 +++++ sample/sh/sh7144/sample.c | 178 +++ sample/sh/sh7144/sample.h | 35 + sample/sh/sh7144/sci1.c | 60 + sample/sh/sh7144/sci1.h | 34 + sample/sh/sh7144/shc/dbsct.c | 21 + sample/sh/sh7144/shc/gmake.mak | 111 ++ sample/sh/sh7144/shc/readme.txt | 35 + sample/sh/sh7144/shc/sim_io.src | 41 + sample/sh/sh7144/shc/startup.src | 35 + sample/sh/sh7144/shc/vcttbl.src | 274 ++++ sample/sh/sh7144/system.cfg | 41 + sample/win/win32/gcc/gmake.mak | 57 + sample/win/win32/main.c | 27 + sample/win/win32/ostimer.c | 46 + sample/win/win32/ostimer.h | 33 + sample/win/win32/sample.c | 159 +++ sample/win/win32/sample.h | 35 + sample/win/win32/system.cfg | 41 + sample/win/win32/vc60/cfg.bat | 4 + sample/win/win32/vc60/sample.dsp | 137 ++ sample/win/win32/vc60/sample.dsw | 59 + sample/win/win32/wintimer.c | 62 + sample/win/win32/wintimer.h | 35 + test/que/test_que.c | 487 +++++++ test/que/test_que.dsp | 100 ++ test/que/test_que.dsw | 44 + tools/cmtcnv/cmtcnv.c | 181 +++ tools/cmtcnv/cmtcnv.dsp | 100 ++ tools/cmtcnv/cmtcnv.dsw | 29 + 355 files changed, 37828 insertions(+) create mode 100755 cfgrtr/build/bcc55/bmake.mak create mode 100755 cfgrtr/build/gcc/gmake.mak create mode 100755 cfgrtr/build/vc60/h4acfg.dsp create mode 100755 cfgrtr/build/vc60/h4acfg.dsw create mode 100755 cfgrtr/include/analyze.h create mode 100755 cfgrtr/include/apidef.h create mode 100755 cfgrtr/include/apiinc.h create mode 100755 cfgrtr/include/attini.h create mode 100755 cfgrtr/include/attisr.h create mode 100755 cfgrtr/include/crealm.h create mode 100755 cfgrtr/include/crecyc.h create mode 100755 cfgrtr/include/credtq.h create mode 100755 cfgrtr/include/creflg.h create mode 100755 cfgrtr/include/crembf.h create mode 100755 cfgrtr/include/crembx.h create mode 100755 cfgrtr/include/crempf.h create mode 100755 cfgrtr/include/cresem.h create mode 100755 cfgrtr/include/cretsk.h create mode 100755 cfgrtr/include/defercd.h create mode 100755 cfgrtr/include/defexc.h create mode 100755 cfgrtr/include/definh.h create mode 100755 cfgrtr/include/deftex.h create mode 100755 cfgrtr/include/idlstk.h create mode 100755 cfgrtr/include/intstk.h create mode 100755 cfgrtr/include/intstk.txt create mode 100755 cfgrtr/include/knlheap.h create mode 100755 cfgrtr/include/maxtmout.h create mode 100755 cfgrtr/include/maxtpri.h create mode 100755 cfgrtr/include/parpack.h create mode 100755 cfgrtr/include/read.h create mode 100755 cfgrtr/include/readcfg.h create mode 100755 cfgrtr/include/timtic.h create mode 100755 cfgrtr/source/analyze.cpp create mode 100755 cfgrtr/source/apidef.cpp create mode 100755 cfgrtr/source/apiinc.cpp create mode 100755 cfgrtr/source/attini.cpp create mode 100755 cfgrtr/source/attisr.cpp create mode 100755 cfgrtr/source/crealm.cpp create mode 100755 cfgrtr/source/crecyc.cpp create mode 100755 cfgrtr/source/credtq.cpp create mode 100755 cfgrtr/source/creflg.cpp create mode 100755 cfgrtr/source/crembf.cpp create mode 100755 cfgrtr/source/crembx.cpp create mode 100755 cfgrtr/source/crempf.cpp create mode 100755 cfgrtr/source/cresem.cpp create mode 100755 cfgrtr/source/cretsk.cpp create mode 100755 cfgrtr/source/defercd.cpp create mode 100755 cfgrtr/source/defexc.cpp create mode 100755 cfgrtr/source/definh.cpp create mode 100755 cfgrtr/source/deftex.cpp create mode 100755 cfgrtr/source/hos4cfg.cpp create mode 100755 cfgrtr/source/idlstk.cpp create mode 100755 cfgrtr/source/intstk.cpp create mode 100755 cfgrtr/source/knlheap.cpp create mode 100755 cfgrtr/source/maxtmout.cpp create mode 100755 cfgrtr/source/maxtpri.cpp create mode 100755 cfgrtr/source/parpack.cpp create mode 100755 cfgrtr/source/read.cpp create mode 100755 cfgrtr/source/timtic.cpp create mode 100755 document/profile.txt create mode 100755 kernel/build/arm/ADuC7019/gcc/gmake.mak create mode 100755 kernel/build/arm/ADuC7019/rvct/gmake.mak create mode 100755 kernel/build/common/gmake.inc create mode 100755 kernel/build/h8/h8300ha/ch38/gmake.mak create mode 100755 kernel/build/h8/h8s2600a/ch38/gmake.mak create mode 100755 kernel/build/mn103/mn1030/gcc/gmake.mak create mode 100755 kernel/build/sh/sh2/gcc/gmake.mak create mode 100755 kernel/build/sh/sh2/hew/hosv4a.Hbp create mode 100755 kernel/build/sh/sh2/hew/hosv4a.hws create mode 100755 kernel/build/sh/sh2/hew/hosv4a.tws create mode 100755 kernel/build/sh/sh2/hew/hosv4a/Readme.txt create mode 100755 kernel/build/sh/sh2/hew/hosv4a/hosv4a.hwp create mode 100755 kernel/build/sh/sh2/shc/gmake.mak create mode 100755 kernel/build/win/win32/gcc/gmake.mak create mode 100755 kernel/build/win/win32/vc60/hosv4a.dsp create mode 100755 kernel/build/win/win32/vc60/hosv4a.dsw create mode 100755 kernel/include/arch/irc/arm/ADuC7019/irc.h create mode 100755 kernel/include/arch/irc/arm/ADuC7019/ircatr.h create mode 100755 kernel/include/arch/irc/none/irc.h create mode 100755 kernel/include/arch/irc/none/ircatr.h create mode 100755 kernel/include/arch/proc/arm/arm_v4t/proc.h create mode 100755 kernel/include/arch/proc/arm/arm_v4t/procatr.h create mode 100755 kernel/include/arch/proc/arm/arm_v6/proc.h create mode 100755 kernel/include/arch/proc/arm/arm_v6/procatr.h create mode 100755 kernel/include/arch/proc/h8/h8300h/proc.h create mode 100755 kernel/include/arch/proc/h8/h8300h/procatr.h create mode 100755 kernel/include/arch/proc/h8/h8300ha/proc.h create mode 100755 kernel/include/arch/proc/h8/h8300ha/procatr.h create mode 100755 kernel/include/arch/proc/h8/h8300hn/proc.h create mode 100755 kernel/include/arch/proc/h8/h8300hn/procatr.h create mode 100755 kernel/include/arch/proc/h8/h8s2600a/proc.h create mode 100755 kernel/include/arch/proc/h8/h8s2600a/procatr.h create mode 100755 kernel/include/arch/proc/mn103/mn1030/proc.h create mode 100755 kernel/include/arch/proc/mn103/mn1030/procatr.h create mode 100755 kernel/include/arch/proc/sh/sh2/proc.h create mode 100755 kernel/include/arch/proc/sh/sh2/procatr.h create mode 100755 kernel/include/arch/proc/win/win32/proc.h create mode 100755 kernel/include/arch/proc/win/win32/procatr.h create mode 100755 kernel/include/config/cfgerr.h create mode 100755 kernel/include/config/cfghok.h create mode 100755 kernel/include/config/cfgknl.h create mode 100755 kernel/include/config/cfgsys.h create mode 100755 kernel/include/core/basetyp.h create mode 100755 kernel/include/core/cmpl.h create mode 100755 kernel/include/core/core.h create mode 100755 kernel/include/core/dsp.h create mode 100755 kernel/include/core/hep.h create mode 100755 kernel/include/core/objhdl.h create mode 100755 kernel/include/core/objid.h create mode 100755 kernel/include/core/opttyp.h create mode 100755 kernel/include/core/que.h create mode 100755 kernel/include/core/rdq.h create mode 100755 kernel/include/core/sys.h create mode 100755 kernel/include/core/tmq.h create mode 100755 kernel/include/core/toq.h create mode 100755 kernel/include/itron.h create mode 100755 kernel/include/kernel.h create mode 100755 kernel/include/object/flgobj.h create mode 100755 kernel/include/object/inhobj.h create mode 100755 kernel/include/object/isrobj.h create mode 100755 kernel/include/object/mbxobj.h create mode 100755 kernel/include/object/mpfobj.h create mode 100755 kernel/include/object/semobj.h create mode 100755 kernel/include/object/tskobj.h create mode 100755 kernel/include/parser/parserr.h create mode 100755 kernel/include/parser/parshok.h create mode 100755 kernel/include/parser/parsknl.h create mode 100755 kernel/include/parser/parssys.h create mode 100755 kernel/source/arch/irc/arm/ADuC7019/intc.c create mode 100755 kernel/source/arch/proc/arm/arm_v4t/gcc/armctx.S create mode 100755 kernel/source/arch/proc/arm/arm_v4t/gcc/armirq.S create mode 100755 kernel/source/arch/proc/arm/arm_v4t/rvct/armctx.s create mode 100755 kernel/source/arch/proc/arm/arm_v4t/rvct/armirq.s create mode 100755 kernel/source/arch/proc/arm/arm_v5/rvct/armctx.s create mode 100755 kernel/source/arch/proc/arm/arm_v5/rvct/armirq.s create mode 100755 kernel/source/arch/proc/arm/arm_v6/rvct/armctx.s create mode 100755 kernel/source/arch/proc/arm/arm_v6/rvct/armirq.s create mode 100755 kernel/source/arch/proc/h8/h8300/ctxctl.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/ctxctl.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/intctl.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/mk_vec/mk_vec.c create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_001.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_002.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_003.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_004.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_005.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_006.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_007.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_008.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_009.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_010.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_011.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_012.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_013.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_014.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_015.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_016.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_017.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_018.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_019.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_020.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_021.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_022.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_023.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_024.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_025.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_026.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_027.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_028.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_029.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_030.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_031.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_032.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_033.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_034.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_035.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_036.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_037.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_038.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_039.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_040.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_041.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_042.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_043.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_044.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_045.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_046.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_047.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_048.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_049.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_050.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_051.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_052.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_053.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_054.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_055.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_056.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_057.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_058.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_059.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_060.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_061.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_062.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_063.src create mode 100755 kernel/source/arch/proc/h8/h8300ha/vect_dmy.src create mode 100755 kernel/source/arch/proc/h8/h8s2600a/ctxctl.src create mode 100755 kernel/source/arch/proc/h8/h8s2600a/intctl.src create mode 100755 kernel/source/arch/proc/mn103/mn1030/gcc/ctxctl.S create mode 100755 kernel/source/arch/proc/mn103/mn1030/gcc/intctl.S create mode 100755 kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S create mode 100755 kernel/source/arch/proc/sh/sh2/gcc/intctl.S create mode 100755 kernel/source/arch/proc/sh/sh2/shc/ctxctl.src create mode 100755 kernel/source/arch/proc/sh/sh2/shc/dmyhdr.src create mode 100755 kernel/source/arch/proc/sh/sh2/shc/exchdr.src create mode 100755 kernel/source/arch/proc/sh/sh2/shc/inthdr.src create mode 100755 kernel/source/arch/proc/sh/sh2/shc/mk_vec/mk_vec.c create mode 100755 kernel/source/arch/proc/win/win32/ctxctl.c create mode 100755 kernel/source/core/dsp/dsp_tsk.c create mode 100755 kernel/source/core/dsp/ent_tsk.c create mode 100755 kernel/source/core/dsp/idl_lop.c create mode 100755 kernel/source/core/hep/alc_hep.c create mode 100755 kernel/source/core/hep/cre_hep.c create mode 100755 kernel/source/core/hep/fre_hep.c create mode 100755 kernel/source/core/que/add_que.c create mode 100755 kernel/source/core/que/adf_que.c create mode 100755 kernel/source/core/que/adp_que.c create mode 100755 kernel/source/core/que/nxt_que.c create mode 100755 kernel/source/core/que/rmh_que.c create mode 100755 kernel/source/core/que/rmv_que.c create mode 100755 kernel/source/core/que/rot_que.c create mode 100755 kernel/source/core/que/trm_que.c create mode 100755 kernel/source/core/tmq/add_tmq.c create mode 100755 kernel/source/core/tmq/rmv_tmq.c create mode 100755 kernel/source/core/tmq/sig_tmq.c create mode 100755 kernel/source/core/toq/add_toq.c create mode 100755 kernel/source/core/toq/rmv_toq.c create mode 100755 kernel/source/core/toq/sig_toq.c create mode 100755 kernel/source/object/flg/acre_flg.c create mode 100755 kernel/source/object/flg/clr_flg.c create mode 100755 kernel/source/object/flg/cre_flg.c create mode 100755 kernel/source/object/flg/del_flg.c create mode 100755 kernel/source/object/flg/kchk_flg.c create mode 100755 kernel/source/object/flg/kcre_flg.c create mode 100755 kernel/source/object/flg/pol_flg.c create mode 100755 kernel/source/object/flg/ref_flg.c create mode 100755 kernel/source/object/flg/set_flg.c create mode 100755 kernel/source/object/flg/twai_flg.c create mode 100755 kernel/source/object/flg/wai_flg.c create mode 100755 kernel/source/object/inh/def_inh.c create mode 100755 kernel/source/object/inh/end_inh.c create mode 100755 kernel/source/object/inh/exe_inh.c create mode 100755 kernel/source/object/inh/sta_inh.c create mode 100755 kernel/source/object/isr/acre_isr.c create mode 100755 kernel/source/object/isr/exe_isr.c create mode 100755 kernel/source/object/isr/kcre_isr.c create mode 100755 kernel/source/object/mbx/acre_mbx.c create mode 100755 kernel/source/object/mbx/kadd_msg.c create mode 100755 kernel/source/object/mbx/kcre_mbx.c create mode 100755 kernel/source/object/mbx/krmv_msg.c create mode 100755 kernel/source/object/mbx/rcv_mbx.c create mode 100755 kernel/source/object/mbx/snd_mbx.c create mode 100755 kernel/source/object/mpf/acre_mpf.c create mode 100755 kernel/source/object/mpf/get_mpf.c create mode 100755 kernel/source/object/mpf/kcre_mpf.c create mode 100755 kernel/source/object/mpf/pget_mpf.c create mode 100755 kernel/source/object/mpf/rel_mpf.c create mode 100755 kernel/source/object/sem/acre_sem.c create mode 100755 kernel/source/object/sem/cre_sem.c create mode 100755 kernel/source/object/sem/del_sem.c create mode 100755 kernel/source/object/sem/kcre_sem.c create mode 100755 kernel/source/object/sem/kwai_sem.c create mode 100755 kernel/source/object/sem/pol_sem.c create mode 100755 kernel/source/object/sem/ref_sem.c create mode 100755 kernel/source/object/sem/sig_sem.c create mode 100755 kernel/source/object/sem/twai_sem.c create mode 100755 kernel/source/object/sem/wai_sem.c create mode 100755 kernel/source/object/sys/dis_dsp.c create mode 100755 kernel/source/object/sys/ena_dsp.c create mode 100755 kernel/source/object/sys/get_tid.c create mode 100755 kernel/source/object/sys/loc_cpu.c create mode 100755 kernel/source/object/sys/sns_ctx.c create mode 100755 kernel/source/object/sys/sns_dsp.c create mode 100755 kernel/source/object/sys/sns_loc.c create mode 100755 kernel/source/object/sys/sta_knl.c create mode 100755 kernel/source/object/sys/unl_cpu.c create mode 100755 kernel/source/object/tim/isig_tim.c create mode 100755 kernel/source/object/tsk/acre_tsk.c create mode 100755 kernel/source/object/tsk/act_tsk.c create mode 100755 kernel/source/object/tsk/can_wup.c create mode 100755 kernel/source/object/tsk/cre_tsk.c create mode 100755 kernel/source/object/tsk/dly_tsk.c create mode 100755 kernel/source/object/tsk/ext_tsk.c create mode 100755 kernel/source/object/tsk/kcre_tsk.c create mode 100755 kernel/source/object/tsk/ref_tsk.c create mode 100755 kernel/source/object/tsk/rel_wai.c create mode 100755 kernel/source/object/tsk/slp_tsk.c create mode 100755 kernel/source/object/tsk/tcb2id.c create mode 100755 kernel/source/object/tsk/tget_que.c create mode 100755 kernel/source/object/tsk/wup_tsk.c create mode 100755 sample/h8/h83069/ch38/dbsct.c create mode 100755 sample/h8/h83069/ch38/gmake.mak create mode 100755 sample/h8/h83069/ch38/lowlvl.src create mode 100755 sample/h8/h83069/ch38/lowsrc.c create mode 100755 sample/h8/h83069/ch38/lowsrc.h create mode 100755 sample/h8/h83069/ch38/sbrk.c create mode 100755 sample/h8/h83069/ch38/sbrk.h create mode 100755 sample/h8/h83069/ch38/startup.src create mode 100755 sample/h8/h83069/ch38/typedefine.h create mode 100755 sample/h8/h83069/ch38/vcttbl.src create mode 100755 sample/h8/h83069/main.c create mode 100755 sample/h8/h83069/ostimer.c create mode 100755 sample/h8/h83069/ostimer.h create mode 100755 sample/h8/h83069/sample.c create mode 100755 sample/h8/h83069/sample.h create mode 100755 sample/h8/h83069/system.cfg create mode 100755 sample/sh/sh7045/gcc/crt0.S create mode 100755 sample/sh/sh7045/gcc/gmake.mak create mode 100755 sample/sh/sh7045/gcc/sample.c create mode 100755 sample/sh/sh7045/gcc/sample.h create mode 100755 sample/sh/sh7045/gcc/sample.x create mode 100755 sample/sh/sh7045/gcc/system.cfg create mode 100755 sample/sh/sh7045/gcc/vector.S create mode 100755 sample/sh/sh7144/main.c create mode 100755 sample/sh/sh7144/ostimer.c create mode 100755 sample/sh/sh7144/ostimer.h create mode 100755 sample/sh/sh7144/regs_sh7144.h create mode 100755 sample/sh/sh7144/sample.c create mode 100755 sample/sh/sh7144/sample.h create mode 100755 sample/sh/sh7144/sci1.c create mode 100755 sample/sh/sh7144/sci1.h create mode 100755 sample/sh/sh7144/shc/dbsct.c create mode 100755 sample/sh/sh7144/shc/gmake.mak create mode 100755 sample/sh/sh7144/shc/readme.txt create mode 100755 sample/sh/sh7144/shc/sim_io.src create mode 100755 sample/sh/sh7144/shc/startup.src create mode 100755 sample/sh/sh7144/shc/vcttbl.src create mode 100755 sample/sh/sh7144/system.cfg create mode 100755 sample/win/win32/gcc/gmake.mak create mode 100755 sample/win/win32/main.c create mode 100755 sample/win/win32/ostimer.c create mode 100755 sample/win/win32/ostimer.h create mode 100755 sample/win/win32/sample.c create mode 100755 sample/win/win32/sample.h create mode 100755 sample/win/win32/system.cfg create mode 100755 sample/win/win32/vc60/cfg.bat create mode 100755 sample/win/win32/vc60/sample.dsp create mode 100755 sample/win/win32/vc60/sample.dsw create mode 100755 sample/win/win32/wintimer.c create mode 100755 sample/win/win32/wintimer.h create mode 100755 test/que/test_que.c create mode 100755 test/que/test_que.dsp create mode 100755 test/que/test_que.dsw create mode 100755 tools/cmtcnv/cmtcnv.c create mode 100755 tools/cmtcnv/cmtcnv.dsp create mode 100755 tools/cmtcnv/cmtcnv.dsw diff --git a/cfgrtr/build/bcc55/bmake.mak b/cfgrtr/build/bcc55/bmake.mak new file mode 100755 index 0000000..6d23e5f --- /dev/null +++ b/cfgrtr/build/bcc55/bmake.mak @@ -0,0 +1,83 @@ +# ----------------------------------------------------------------------------- +# Hyper Operating System V4 コンフィギュレーター +# Borland-C++ Version 5.5 用 メイクファイル +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ----------------------------------------------------------------------------- + + +# ツール +CC = bcc32 +LINK = bcc32 + + +# オプション +CFLAGS = -c -O2 -I..\..\include -I..\..\..\kernel\include -I..\..\..\kernel\include\arch\proc\$(ARCH_PROC) -I..\..\..\kernel\include\arch\irc\$(ARCH_IRC) +LFLAGS = + + +# ターゲット +!ifndef TARGET +TARGET = h4acfg +!endif + +OBJS_DIR = objs\$(TARGET) + + +# オブジェクトファイル +OBJS = $(OBJS_DIR)\hos4cfg.obj \ + $(OBJS_DIR)\analyze.obj \ + $(OBJS_DIR)\parpack.obj \ + $(OBJS_DIR)\read.obj \ + $(OBJS_DIR)\defercd.obj \ + $(OBJS_DIR)\intstk.obj \ + $(OBJS_DIR)\idlstk.obj \ + $(OBJS_DIR)\knlheap.obj \ + $(OBJS_DIR)\maxtpri.obj \ + $(OBJS_DIR)\apidef.obj \ + $(OBJS_DIR)\apiinc.obj \ + $(OBJS_DIR)\cretsk.obj \ + $(OBJS_DIR)\deftex.obj \ + $(OBJS_DIR)\cresem.obj \ + $(OBJS_DIR)\creflg.obj \ + $(OBJS_DIR)\credtq.obj \ + $(OBJS_DIR)\crembx.obj \ + $(OBJS_DIR)\crempf.obj \ + $(OBJS_DIR)\crembf.obj \ + $(OBJS_DIR)\timtic.obj \ + $(OBJS_DIR)\crecyc.obj \ + $(OBJS_DIR)\crealm.obj \ + $(OBJS_DIR)\defexc.obj \ + $(OBJS_DIR)\attini.obj \ + $(OBJS_DIR)\definh.obj \ + $(OBJS_DIR)\attisr.obj + +.path.cpp = ..\..\source +.path.obj = $(OBJS_DIR) + +.suffixes: +.suffixes: .cpp + + +# ターゲット生成 +$(TARGET): mkdir_objs $(OBJS) + $(LINK) -e$(TARGET) $(OBJS) + +mkdir_objs: + -mkdir objs + -mkdir $(OBJS_DIR) + + +# クリーンアップ +clean: + del $(OBJS) $(TARGET) + +# 推論規則 +.cpp.obj: + $(CC) $(CFLAGS) -o$@ $< + + +# ----------------------------------------------------------------------------- +# Copyright (C) 1998-2006 by Project HOS +# ----------------------------------------------------------------------------- diff --git a/cfgrtr/build/gcc/gmake.mak b/cfgrtr/build/gcc/gmake.mak new file mode 100755 index 0000000..c448af8 --- /dev/null +++ b/cfgrtr/build/gcc/gmake.mak @@ -0,0 +1,74 @@ +# ----------------------------------------------------------------------------- +# HOS-V4a configulator +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ----------------------------------------------------------------------------- + + + +# ツール +CC = g++ +LINK = g++ + + +# オプション +CFLAGS = -O2 -pipe -Wall -I../../include -I../../../kernel/include -I../../../kernel/include/arch/proc/$(ARCH_PROC) -I../../../kernel/include/arch/irc/$(ARCH_IRC) +LFLAGS = + + +# ターゲット +TARGET ?= h4acfg + +# オブジェクトディレクトリ +OBJS_DIR = objs_$(TARGET) + + +# オブジェクトファイル +OBJS = $(OBJS_DIR)/hos4cfg.o \ + $(OBJS_DIR)/analyze.o \ + $(OBJS_DIR)/parpack.o \ + $(OBJS_DIR)/read.o \ + $(OBJS_DIR)/defercd.o \ + $(OBJS_DIR)/intstk.o \ + $(OBJS_DIR)/idlstk.o \ + $(OBJS_DIR)/knlheap.o \ + $(OBJS_DIR)/maxtpri.o \ + $(OBJS_DIR)/apidef.o \ + $(OBJS_DIR)/apiinc.o \ + $(OBJS_DIR)/cretsk.o \ + $(OBJS_DIR)/deftex.o \ + $(OBJS_DIR)/cresem.o \ + $(OBJS_DIR)/creflg.o \ + $(OBJS_DIR)/credtq.o \ + $(OBJS_DIR)/crembx.o \ + $(OBJS_DIR)/crempf.o \ + $(OBJS_DIR)/crembf.o \ + $(OBJS_DIR)/timtic.o \ + $(OBJS_DIR)/crecyc.o \ + $(OBJS_DIR)/crealm.o \ + $(OBJS_DIR)/defexc.o \ + $(OBJS_DIR)/attini.o \ + $(OBJS_DIR)/definh.o \ + $(OBJS_DIR)/attisr.o + + +VPATH=../../source + + +# ターゲット生成 +$(TARGET): mkdir_objs $(OBJS) + $(LINK) $(LFLAGS) $(OBJS) -o $(TARGET) + +mkdir_objs: + mkdir -p $(OBJS_DIR) + +clean: + rm -f $(TARGET) $(TARGET).exe $(OBJS) + +$(OBJS_DIR)/%.o :: %.cpp + $(CC) $(CFLAGS) -c $< -o $@ + + + +# end of file diff --git a/cfgrtr/build/vc60/h4acfg.dsp b/cfgrtr/build/vc60/h4acfg.dsp new file mode 100755 index 0000000..d159599 --- /dev/null +++ b/cfgrtr/build/vc60/h4acfg.dsp @@ -0,0 +1,313 @@ +# Microsoft Developer Studio Project File - Name="h4acfg" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** •ÒW‚µ‚È‚¢‚Å‚­‚¾‚³‚¢ ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=h4acfg - Win32 Debug +!MESSAGE ‚±‚ê‚Í—LŒø‚ÈÒ²¸Ì§²Ù‚Å‚Í‚ ‚è‚Ü‚¹‚ñB ‚±‚ÌÌßÛ¼Þª¸Ä‚ðËÞÙÄނ·‚邽‚ß‚É‚Í NMAKE ‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B +!MESSAGE [Ò²¸Ì§²Ù‚Ì´¸½Îß°Ä] ºÏÝÄނðŽg—p‚µ‚ÄŽÀs‚µ‚Ä‚­‚¾‚³‚¢ +!MESSAGE +!MESSAGE NMAKE /f "h4acfg.mak". +!MESSAGE +!MESSAGE NMAKE ‚ÌŽÀsŽž‚ɍ\¬‚ðŽw’è‚Å‚«‚Ü‚· +!MESSAGE ºÏÝÄÞ ×²Ýã‚Åϸۂ̐ݒè‚ð’è‹`‚µ‚Ü‚·B—á: +!MESSAGE +!MESSAGE NMAKE /f "h4acfg.mak" CFG="h4acfg - Win32 Debug" +!MESSAGE +!MESSAGE ‘I‘ð‰Â”\‚ÈËÞÙÄÞ Ó°ÄÞ: +!MESSAGE +!MESSAGE "h4acfg - Win32 Release" ("Win32 (x86) Console Application" —p) +!MESSAGE "h4acfg - Win32 Debug" ("Win32 (x86) Console Application" —p) +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "h4acfg - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /I "../../../kernel/include" /I "../../../kernel/include/arch/proc/win32" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x411 /d "NDEBUG" +# ADD RSC /l 0x411 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "h4acfg - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../include" /I "../../../kernel/include" /I "../../../kernel/include/arch/proc/win/win32" /I "../../../kernel/include/arch/irc/none" /D "_CONSOLE" /D "WIN32" /D "_DEBUG" /D "_MBCS" /FR /YX /FD /D /GZ /c +# ADD BASE RSC /l 0x411 /d "_DEBUG" +# ADD RSC /l 0x411 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "h4acfg - Win32 Release" +# Name "h4acfg - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\source\analyze.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\apidef.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\apiinc.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\attini.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\attisr.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\crealm.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\crecyc.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\credtq.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\creflg.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\crembf.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\crembx.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\crempf.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\cresem.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\cretsk.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\defercd.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\defexc.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\definh.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\deftex.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\hos4cfg.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\idlstk.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\intstk.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\knlheap.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\maxtmout.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\maxtpri.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\parpack.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\read.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\source\timtic.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\analyze.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\apidef.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\apiinc.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\attini.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\attisr.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\crealm.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\crecyc.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\credtq.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\creflg.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\crembf.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\crembx.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\crempf.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\cresem.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\cretsk.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\defercd.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\defexc.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\definh.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\deftex.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\idlstk.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\intstk.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\knlheap.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\maxtmout.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\maxtpri.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\kernel\include\object\mpfobj.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\parpack.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\read.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\readcfg.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\timtic.h +# End Source File +# End Group +# End Target +# End Project diff --git a/cfgrtr/build/vc60/h4acfg.dsw b/cfgrtr/build/vc60/h4acfg.dsw new file mode 100755 index 0000000..8b20e73 --- /dev/null +++ b/cfgrtr/build/vc60/h4acfg.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# Œx: ‚±‚ÌÜ°¸½Íß°½ ̧²Ù ‚ð•ÒW‚Ü‚½‚͍폜‚µ‚È‚¢‚Å‚­‚¾‚³‚¢! + +############################################################################### + +Project: "h4acfg"=".\h4acfg.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/cfgrtr/include/analyze.h b/cfgrtr/include/analyze.h new file mode 100755 index 0000000..5d5dd91 --- /dev/null +++ b/cfgrtr/include/analyze.h @@ -0,0 +1,32 @@ +// --------------------------------------------------------------------------- +// HOS V4 コンフィギュレーター +// 構文解析クラス +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG__Analyze_h__ +#define __HOSV4CFG__Analyze_h__ + + + +// 構文解析クラス +class CAnalyze +{ +public: + static int SplitState(char* pszApiName, char* pszParams, const char *pszState); // ステートメントをAPI名とパラメーターに分割 + static int SearchChar(char* pszBuf, const char* &pszText, char c); // 特定文字のまでの切り出し + static int GetParameter(char* pszBuf, const char* &pszText); // パラメーターの切り出し + static int DecodeText(char *pszBuf, const char* pszText); // 文字列定数を展開する + static void SpaceCut(char* pszText); // 前後の空白を削除する +}; + + +#endif // __HOSV4CFG__Analyze_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/apidef.h b/cfgrtr/include/apidef.h new file mode 100755 index 0000000..68962d7 --- /dev/null +++ b/cfgrtr/include/apidef.h @@ -0,0 +1,54 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// API定義クラス +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_ApiDef_h__ +#define __HOSV4CFG_ApiDef_h__ + + +#include "parpack.h" + + +#define API_MAX_OBJS 1024 // 最大オブジェクト数 +#define API_MAX_PARAM 4096 // 最大パラメータ文字数 + + +// API定義クラス +class CApiDef +{ +public: + CApiDef(); // コンストラクタ + virtual ~CApiDef(); // デストラクタ + + virtual int AnalyzeApi(const char* pszApiName, const char* pszParams) = 0; // APIの解析 + virtual int AutoId(void); // 自動ID番号割り当て + virtual void WriteId(FILE* fp); // ID 定義ファイル書き出し + virtual void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + virtual void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + virtual void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し + +protected: + virtual int AddParams(const char* pszParams); // パラメーター追加 + virtual int IdToObjNum(int iId); // IDをオブジェクト番号に変換 + + CParamPack* m_pParamPacks[API_MAX_OBJS]; // パラメーターリスト + int m_iId[API_MAX_OBJS]; // ID番号リスト + int m_iObjs; // オブジェクト数 + int m_iResObj; // 予約オブジェクト数 + int m_iMaxId; // 最大ID 番号 + int m_iParams; // パラメーター数 + int m_iParamSyntax[PARAMPACK_MAX]; // パラメーター構文 +}; + + +#endif // __HOSV4CFG_ApiDef_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/apiinc.h b/cfgrtr/include/apiinc.h new file mode 100755 index 0000000..0b7eee2 --- /dev/null +++ b/cfgrtr/include/apiinc.h @@ -0,0 +1,36 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// INCLUDE API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_ApiInclude_h__ +#define __HOSV4CFG_ApiInclude_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// INCLUDE 用 +class CApiInclude : public CApiDef +{ +public: + CApiInclude(); // コンストラクタ + ~CApiInclude(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); // 自動ID番号割り当て + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し +}; + + +#endif // __HOSV4CFG_ApiInclude_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/attini.h b/cfgrtr/include/attini.h new file mode 100755 index 0000000..02aff2d --- /dev/null +++ b/cfgrtr/include/attini.h @@ -0,0 +1,36 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// ATT_INI API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_ApiAttIni_h__ +#define __HOSV4CFG_ApiAttIni_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// ATT_INI 用 +class CApiAttIni : public CApiDef +{ +public: + CApiAttIni(); // コンストラクタ + ~CApiAttIni(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); // 自動ID番号割り当て + void WriteCfgStart(FILE* fp); // cfgファイル定義部書き出し +}; + + +#endif // __HOSV4CFG_ApiAttIni_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/attisr.h b/cfgrtr/include/attisr.h new file mode 100755 index 0000000..9bfc6dc --- /dev/null +++ b/cfgrtr/include/attisr.h @@ -0,0 +1,37 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// ATT_ISR API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_AttIsr_h__ +#define __HOSV4CFG_AttIsr_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// ATT_ISR 用 +class CApiAttIsr : public CApiDef +{ +public: + CApiAttIsr(); // コンストラクタ + ~CApiAttIsr(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し +}; + + +#endif // __HOSV4CFG_AttIsr_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/crealm.h b/cfgrtr/include/crealm.h new file mode 100755 index 0000000..dd75b1f --- /dev/null +++ b/cfgrtr/include/crealm.h @@ -0,0 +1,38 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_ALM API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreAlm_h__ +#define __HOSV4CFG_CreAlm_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_ALM 用 +class CApiCreAlm : public CApiDef +{ +public: + CApiCreAlm(); // コンストラクタ + ~CApiCreAlm(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し +}; + + +#endif // __HOSV4CFG_CreAlm_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/crecyc.h b/cfgrtr/include/crecyc.h new file mode 100755 index 0000000..c9ddefb --- /dev/null +++ b/cfgrtr/include/crecyc.h @@ -0,0 +1,38 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_CYC API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreCyc_h__ +#define __HOSV4CFG_CreCyc_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_CYC 用 +class CApiCreCyc : public CApiDef +{ +public: + CApiCreCyc(); // コンストラクタ + ~CApiCreCyc(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し +}; + + +#endif // __HOSV4CFG_CreCyc_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/credtq.h b/cfgrtr/include/credtq.h new file mode 100755 index 0000000..5dff9f5 --- /dev/null +++ b/cfgrtr/include/credtq.h @@ -0,0 +1,38 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_DTQ API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreDtq_h__ +#define __HOSV4CFG_CreDtq_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_DTQ 用 +class CApiCreDtq : public CApiDef +{ +public: + CApiCreDtq(); // コンストラクタ + ~CApiCreDtq(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し +}; + + +#endif // __HOSV4CFG_CreDtq_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/creflg.h b/cfgrtr/include/creflg.h new file mode 100755 index 0000000..9c80747 --- /dev/null +++ b/cfgrtr/include/creflg.h @@ -0,0 +1,42 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_FLG API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreFlg_h__ +#define __HOSV4CFG_CreFlg_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_FLG 用 +class CApiCreFlg : public CApiDef +{ +public: + CApiCreFlg(); // コンストラクタ + ~CApiCreFlg(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し + +protected: + void WriteFlgcbRam(FILE *fp, int iObj); + void WriteFlgcbRom(FILE *fp, int iObj); +}; + + +#endif // __HOSV4CFG_CreFlg_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/crembf.h b/cfgrtr/include/crembf.h new file mode 100755 index 0000000..b93c9fd --- /dev/null +++ b/cfgrtr/include/crembf.h @@ -0,0 +1,38 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_MBF API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreMbf_h__ +#define __HOSV4CFG_CreMbf_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_MBF 用 +class CApiCreMbf : public CApiDef +{ +public: + CApiCreMbf(); // コンストラクタ + ~CApiCreMbf(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し +}; + + +#endif // __HOSV4CFG_CreMbf_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/crembx.h b/cfgrtr/include/crembx.h new file mode 100755 index 0000000..655b51a --- /dev/null +++ b/cfgrtr/include/crembx.h @@ -0,0 +1,38 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_MBX API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreMbx_h__ +#define __HOSV4CFG_CreMbx_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_MBX 用 +class CApiCreMbx : public CApiDef +{ +public: + CApiCreMbx(); // コンストラクタ + ~CApiCreMbx(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し +}; + + +#endif // __HOSV4CFG_CreMbx_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/crempf.h b/cfgrtr/include/crempf.h new file mode 100755 index 0000000..7f4d9af --- /dev/null +++ b/cfgrtr/include/crempf.h @@ -0,0 +1,38 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_MPF API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreMpf_h__ +#define __HOSV4CFG_CreMpf_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_MPF 用 +class CApiCreMpf : public CApiDef +{ +public: + CApiCreMpf(); // コンストラクタ + ~CApiCreMpf(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し +}; + + +#endif // __HOSV4CFG_CreMpf_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/cresem.h b/cfgrtr/include/cresem.h new file mode 100755 index 0000000..7150c79 --- /dev/null +++ b/cfgrtr/include/cresem.h @@ -0,0 +1,42 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_SEM API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreSem_h__ +#define __HOSV4CFG_CreSem_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_SEM 用 +class CApiCreSem : public CApiDef +{ +public: + CApiCreSem(); // コンストラクタ + ~CApiCreSem(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し + +protected: + void WriteSemcbRam(FILE *fp, int iObj); // SEMCB情報書き出し(RAM部) + void WriteSemcbRom(FILE *fp, int iObj); // SEMCB情報書き出し(ROM部) +}; + + +#endif // __HOSV4CFG_CreSem_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/cretsk.h b/cfgrtr/include/cretsk.h new file mode 100755 index 0000000..e7a1f37 --- /dev/null +++ b/cfgrtr/include/cretsk.h @@ -0,0 +1,43 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_TSK API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_CreTak_h__ +#define __HOSV4CFG_CreTak_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// CRE_TSK 用 +class CApiCreTsk : public CApiDef +{ +public: + CApiCreTsk(); // コンストラクタ + ~CApiCreTsk(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); // 自動ID番号割り当て + void WriteId(FILE* fp); // ID 定義ファイル書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + void WriteCfgStart(FILE* fp); // cfgファイル起動部書き出し + +protected: + void WriteTcbRam(FILE *fp, int iObj); // TCB情報書き出し(RAM部) + void WriteTcbRom(FILE *fp, int iObj); // TCB情報書き出し(ROM部) +}; + + +#endif // __HOSV4CFG_CreTak_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/defercd.h b/cfgrtr/include/defercd.h new file mode 100755 index 0000000..59f28bb --- /dev/null +++ b/cfgrtr/include/defercd.h @@ -0,0 +1,42 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// エラーコード管理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_DefErrorCode_h__ +#define __HOSV4CFG_DefErrorCode_h__ + + +// 正常系エラーコード定義 */ +#define CFG_ERR_NOPROC (-2) // 未処理 +#define CFG_ERR_COMPLETE (-1) // 完了 +#define CFG_ERR_OK 0 // 正常 + +// 異常系エラーコード定義 +#define CFG_ERR_EOF 1 // 予期せぬEOF +#define CFG_ERR_CR 2 // 不正な改行 +#define CFG_ERR_STATE_LEN 3 // 1ステートが長すぎる +#define CFG_ERR_SYNTAX 4 // 構文エラー +#define CFG_ERR_PAREN 5 // ()の不整合 +#define CFG_ERR_BRACE 6 // {}の不整合 +#define CFG_ERR_SEMICOLON 7 // セミコロンが無い +#define CFG_ERR_TEXT 8 // 不正な文字列定数 +#define CFG_ERR_ID_CONFLICT 9 // ID衝突 +#define CFG_ERR_PARAM 10 // パラメーター不正 +#define CFG_ERR_MULTIDEF 11 // 唯一であるべき定義が複数 +#define CFG_ERR_DEF_CONFLICT 12 // ID衝突 + + +const char* GetErrMessage(int iErr); + + +#endif // __HOSV4CFG_DefErrorCode_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/defexc.h b/cfgrtr/include/defexc.h new file mode 100755 index 0000000..ba83ec0 --- /dev/null +++ b/cfgrtr/include/defexc.h @@ -0,0 +1,41 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// DEF_EXC API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_DefExc_h__ +#define __HOSV4CFG_DefExc_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// DEF_EXC 用 +class CApiDefExc : public CApiDef +{ +public: + CApiDefExc(); // コンストラクタ + ~CApiDefExc(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し + +protected: + int m_iMaxExcNo; + int m_iMinExcNo; +}; + + +#endif // __HOSV4CFG_DefExc_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/definh.h b/cfgrtr/include/definh.h new file mode 100755 index 0000000..14b16fc --- /dev/null +++ b/cfgrtr/include/definh.h @@ -0,0 +1,37 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// ATT_INI API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_ApiDefInh_h__ +#define __HOSV4CFG_ApiDefInh_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// ATT_INI 用 +class CApiDefInh : public CApiDef +{ +public: + CApiDefInh(); // コンストラクタ + ~CApiDefInh(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); // 自動ID番号割り当て + void WriteCfgDef(FILE* fp); + void WriteCfgStart(FILE* fp); // cfgファイル定義部書き出し +}; + + +#endif // __HOSV4CFG_ApiDefInh_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/deftex.h b/cfgrtr/include/deftex.h new file mode 100755 index 0000000..dfc0700 --- /dev/null +++ b/cfgrtr/include/deftex.h @@ -0,0 +1,37 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// DEF_TEX API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_DefTex_h__ +#define __HOSV4CFG_DefTex_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// DEF_TEX 用 +class CApiDefTex : public CApiDef +{ +public: + CApiDefTex(); // コンストラクタ + ~CApiDefTex(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); // 自動ID番号割り当て + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル初期化部書き出し +}; + + +#endif // __HOSV4CFG_DefTex_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/idlstk.h b/cfgrtr/include/idlstk.h new file mode 100755 index 0000000..8ac60cd --- /dev/null +++ b/cfgrtr/include/idlstk.h @@ -0,0 +1,36 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_IDL_STK API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_IdleStack_h__ +#define __HOSV4CFG_IdleStack_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// HOS_KERNEL_HEAP 用 +class CApiIdleStack : public CApiDef +{ +public: + CApiIdleStack(); // コンストラクタ + ~CApiIdleStack(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し +}; + + +#endif // __HOSV4CFG_IdleStack_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/intstk.h b/cfgrtr/include/intstk.h new file mode 100755 index 0000000..d19feab --- /dev/null +++ b/cfgrtr/include/intstk.h @@ -0,0 +1,39 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_INT_STK API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_IntStack_h__ +#define __HOSV4CFG_IntStack_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// HOS_KERNEL_HEAP 用 +class CApiIntStack : public CApiDef +{ +public: + CApiIntStack(); // コンストラクタ + ~CApiIntStack(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + +protected: + char m_szStackPointer[API_MAX_PARAM]; +}; + + +#endif // __HOSV4CFG_IntStack_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/intstk.txt b/cfgrtr/include/intstk.txt new file mode 100755 index 0000000..cfc6f5f --- /dev/null +++ b/cfgrtr/include/intstk.txt @@ -0,0 +1,36 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_INT_STK API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_IntStack_h__ +#define __HOSV4CFG_IntStack_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// HOS_KERNEL_HEAP 用 +class CApiIntStack : public CApiDef +{ +public: + CApiIntStack(); // コンストラクタ + ~CApiIntStack(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し +}; + + +#endif // __HOSV4CFG_IntStack_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/knlheap.h b/cfgrtr/include/knlheap.h new file mode 100755 index 0000000..49552b1 --- /dev/null +++ b/cfgrtr/include/knlheap.h @@ -0,0 +1,37 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_KERNEL_HEAP API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_KernelHeap_h__ +#define __HOSV4CFG_KernelHeap_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// HOS_KERNEL_HEAP 用 +class CApiKernelHeap : public CApiDef +{ +public: + CApiKernelHeap(); // コンストラクタ + ~CApiKernelHeap(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgIni(FILE* fp); // cfgファイル起動部書き出し +}; + + +#endif // __HOSV4CFG_KernelHeap_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/maxtmout.h b/cfgrtr/include/maxtmout.h new file mode 100755 index 0000000..afa0d5f --- /dev/null +++ b/cfgrtr/include/maxtmout.h @@ -0,0 +1,41 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_MAX_TPRI API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_ApiMaxTimout_h__ +#define __HOSV4CFG_ApiMaxTimout_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// HOS_MAX_TIMOUT 用 +class CApiMaxTimout : public CApiDef +{ +public: + CApiMaxTimout(); // コンストラクタ + ~CApiMaxTimout(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); // 自動ID番号割り当て + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + +protected: + int m_iMaxTimout; +}; + + +#define DEFAULT_MAXTIMOUT 16 + +#endif // HOSV4CFG_ApiMaxTimout + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/maxtpri.h b/cfgrtr/include/maxtpri.h new file mode 100755 index 0000000..27a34b9 --- /dev/null +++ b/cfgrtr/include/maxtpri.h @@ -0,0 +1,43 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_MAX_TPRI API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_ApiMaxTpri_h__ +#define __HOSV4CFG_ApiMaxTpri_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// HOS_MAX_TPRI 用 +class CApiMaxTpri : public CApiDef +{ +public: + CApiMaxTpri(); // コンストラクタ + ~CApiMaxTpri(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); // 自動ID番号割り当て + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + +protected: + int m_iMaxPri; +}; + + +#define DEFAULT_MAXTPRI 16 + + +#endif // __HOSV4CFG_ApiMaxTpri_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- + diff --git a/cfgrtr/include/parpack.h b/cfgrtr/include/parpack.h new file mode 100755 index 0000000..ab95034 --- /dev/null +++ b/cfgrtr/include/parpack.h @@ -0,0 +1,37 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// パラメーター格納クラス +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG__ParamPack_h__ +#define __HOSV4CFG__ParamPack_h__ + + +#define PARAMPACK_MAX 16 + + +// パラメーター格納クラス +class CParamPack +{ +public: + CParamPack(); // コンストラクタ + ~CParamPack(); // デストラクタ + + void SetParam(int iIndex, const char *pszParam); // パラメーター設定 + const char* GetParam(int iIndex); // パラメーター取得 + +protected: + char *m_pszParam[PARAMPACK_MAX]; +}; + + +#endif // __HOSV4CFG__ParamPack_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/read.h b/cfgrtr/include/read.h new file mode 100755 index 0000000..579369d --- /dev/null +++ b/cfgrtr/include/read.h @@ -0,0 +1,51 @@ +// --------------------------------------------------------------------------- +// HOS V4 コンフィギュレーター Ver 1.00 +// データ読み込みクラス +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + + +#ifndef __HOSV4CFG_Read_h__ +#define __HOSV4CFG_Read_h__ + + +#define READ_MAX_PATH 1024 // 最大パス名 +#define READ_MAX_STATE 4096 // 1ステートの最大文字数 + + +// データ読み込みクラス +class CRead +{ +public: + CRead(FILE *fp, const char *name); // コンストラクタ + ~CRead(); // デストラクタ + + int ReadState(char *szState); // 1ステート読み込み + int GetPhysicalLineNum(void) // 実際に読み込み中のファイルの行番号取得 + { return m_iPhysicalLineNum; } + int GetLogicalLineNum(void) // cppを通す前のファイルの行番号取得 + { return m_iLogicalLineNum; } + const char *GetLogicalInputFile(void) + { return m_szLogicalInputFile; } + +protected: + int SkipPreProcessorLine(char* szText, int iCount); // プリプロセッサラインのスキップ + int ReadString(int cDelimiter, char* szText, int& iCount); // 文字列読み込み + + FILE *m_fpRead; // 読み込み用ファイルポインタ + int m_iPhysicalLineNum; // 実際に読み込み中のファイルの行番号 + int m_iLogicalLineNum; // cppを通す前のファイルの行番号 + bool m_blLineTop; // 行の先頭 + char m_szLogicalInputFile[READ_MAX_PATH]; // cppを通す前のファイル名 +}; + + +#endif // __HOSV4CFG_Read_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/include/readcfg.h b/cfgrtr/include/readcfg.h new file mode 100755 index 0000000..893947d --- /dev/null +++ b/cfgrtr/include/readcfg.h @@ -0,0 +1,17 @@ + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + + +#include "config/cfgsys.h" +#include "parser/parssys.h" +#include "procatr.h" +#include "ircatr.h" +#include "config/cfgknl.h" +#include "parser/parsknl.h" + diff --git a/cfgrtr/include/timtic.h b/cfgrtr/include/timtic.h new file mode 100755 index 0000000..3b16f4c --- /dev/null +++ b/cfgrtr/include/timtic.h @@ -0,0 +1,41 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_TIM_TIC API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#ifndef __HOSV4CFG_ApiTimTic_h__ +#define __HOSV4CFG_ApiTimTic_h__ + + +#include "apidef.h" +#include "parpack.h" + + +// HOS_TIM_TIC 用 +class CApiTimTic : public CApiDef +{ +public: + CApiTimTic(); // コンストラクタ + ~CApiTimTic(); // デストラクタ + + int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析 + int AutoId(void); // ID 定義ファイル書き出し + void WriteId(FILE* fp); // cfgファイル定義部書き出し + void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し + +protected: + int m_iNume; // タイムティックの周期の分子 + int m_iDeno; // タイムティックの周期の分母 +}; + + +#endif // __HOSV4CFG_ApiTimTic_h__ + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/analyze.cpp b/cfgrtr/source/analyze.cpp new file mode 100755 index 0000000..0d3548e --- /dev/null +++ b/cfgrtr/source/analyze.cpp @@ -0,0 +1,259 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// 構文解析クラス +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "analyze.h" + + + +// ステートメントをAPI名とパラメーターに分割 +int CAnalyze::SplitState(char* pszApiName, char* pszParams, const char *pszState) +{ + int iErr; + + // コマンド名の切り出し + while ( *pszState != '(' ) + { + if ( *pszState == '\0' ) + { + return CFG_ERR_SYNTAX; + } + *pszApiName++ = *pszState++; + } + *pszApiName = '\0'; + pszState++; + + // パラメーター部の切り出し + iErr = SearchChar(pszParams, pszState, ')'); + if ( iErr != CFG_ERR_OK ) + { + return iErr; + } + + // 後続チェック + if ( *pszState != '\0' ) + { + return CFG_ERR_SEMICOLON; + } + + return CFG_ERR_OK; +} + + +// 特定文字のまでの切り出し +int CAnalyze::SearchChar(char* pszBuf, const char* &pszText, char c) +{ + char cDelimiter = 0; + bool blText = false; + bool blEsc = false; + int iErr; + + for ( ; ; ) + { + // 終端チェック + if ( *pszText == '\0' ) + { + iErr = CFG_ERR_SYNTAX; + break; + } + + // 文字チェック + if ( *pszText == c ) + { + pszText++; + iErr = CFG_ERR_OK; + break; + } + + // '\' の次の文字は無条件にエスケープ + if ( blEsc ) + { + *pszBuf++ = *pszText++; + blEsc = false; + continue; + } + blEsc = false; + + // '\' チェック + if ( *pszBuf == '\\' ) + { + *pszBuf++ = *pszText++; + blEsc = true; + continue; + } + + // 文字列開始チェック + if ( !blText && *pszText == '\"' || *pszText == '\'' ) + { + cDelimiter = *pszText; + *pszBuf++ = *pszText++; + blText = true; + continue; + } + + // 文字列内部 + if ( blText ) + { + if ( *pszText == cDelimiter ) + { + *pszBuf++ = *pszText++; + blText = false; + } + else + { + *pszBuf++ = *pszText++; + } + continue; + } + + // '{' チェック + if ( *pszText == '{' ) + { + *pszBuf++ = *pszText++; + iErr = SearchChar(pszBuf, pszText, '}'); + if ( iErr != CFG_ERR_OK ) + { + iErr = CFG_ERR_BRACE; + } + pszBuf += strlen(pszBuf); + *pszBuf++ = '}'; + continue; + } + + // '(' チェック + if ( *pszText == '(' ) + { + *pszBuf++ = *pszText++; + iErr = SearchChar(pszBuf, pszText, ')'); + if ( iErr != CFG_ERR_OK ) + { + iErr = CFG_ERR_PAREN; + } + pszBuf += strlen(pszBuf); + *pszBuf++ = ')'; + continue; + } + + *pszBuf++ = *pszText++; + } + + *pszBuf = '\0'; + + return iErr; +} + + +// パラメーターの切り出し +int CAnalyze::GetParameter(char* pszBuf, const char* &pszText) +{ + int iErr; + + // コンマまで切り出す + iErr = SearchChar(pszBuf, pszText, ','); + if ( iErr == CFG_ERR_SYNTAX ) + { + // 括弧対応OKで終端ならコンマが見つからなくても可 + iErr = CFG_ERR_OK; + } + + return iErr; +} + + +// 文字列定数を展開する +int CAnalyze::DecodeText(char *pszBuf, const char* pszText) +{ + bool blEsc = false; + + if ( *pszText++ != '\"') + { + return CFG_ERR_TEXT; + } + + for ( ; ; ) + { + if ( *pszText == '\0' ) + { + return CFG_ERR_TEXT; + } + + // 前の文字が '\' なら読み飛ばし + if ( blEsc ) + { + *pszBuf++ = *pszText++; + blEsc = false; + continue; + } + + // エスケープ文字チェック + if ( *pszText == '\\' ) + { + pszText++; + blEsc = true; + continue; + } + + // 終端チェック + if ( *pszText == '\"' ) + { + pszText++; + break; + } + + *pszBuf++ = *pszText++; + } + + // 完結していなければエラー + if ( *pszText != '\0' ) + { + return CFG_ERR_TEXT; + } + + *pszBuf = '\0'; + + return CFG_ERR_OK; +} + + +// 前後の空白を削除する +void CAnalyze::SpaceCut(char* pszText) +{ + char *pszTmp; + int i = 0; + + pszTmp = pszText; + + // 先頭の空白を読み飛ばす + while ( *pszTmp == ' ' ) + { + pszTmp++; + } + + // コピー + while ( *pszTmp != '\0' ) + { + pszText[i++] = *pszTmp++; + } + + // 末尾の空白を削除 + while ( i > 0 && pszText[i - 1] == ' ' ) + { + i--; + } + + pszText[i] = '\0'; +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/apidef.cpp b/cfgrtr/source/apidef.cpp new file mode 100755 index 0000000..1bbea33 --- /dev/null +++ b/cfgrtr/source/apidef.cpp @@ -0,0 +1,242 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// API定義クラス +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include "defercd.h" +#include "apidef.h" +#include "analyze.h" + + + +// コンストラクタ +CApiDef::CApiDef() +{ + int i; + + m_iMaxId = 0; + m_iObjs = 0; + m_iResObj = 0; + for ( i = 0; i < API_MAX_OBJS; i++ ) + { + m_pParamPacks[i] = NULL; + m_iId[i] = 0; + } +} + + +// デストラクタ +CApiDef::~CApiDef() +{ + int i; + + for ( i = 0; i < API_MAX_OBJS; i++ ) + { + delete m_pParamPacks[i]; + } +} + + +// パラメーター追加(超手抜き) +int CApiDef::AddParams(const char* pszParams) +{ + char szParamBlock[API_MAX_PARAM]; + char szParam[API_MAX_PARAM]; + int iErr = 0; + int iIndex = 0; + int i, j; + + // パラメータ格納用オブジェクト生成 + m_pParamPacks[m_iObjs] = new CParamPack(); + + for ( i = 0; i < m_iParams; i++ ) + { + if ( m_iParamSyntax[i] == 0 ) + { + // 単独パラメーター切り出し + iErr = CAnalyze::GetParameter(szParam, pszParams); + if ( iErr != CFG_ERR_OK ) + { + break; + } + + // パラメーター追加 + CAnalyze::SpaceCut(szParam); + m_pParamPacks[m_iObjs]->SetParam(iIndex++, szParam); + } + else + { + // 空白読み飛ばし + while ( *pszParams == ' ' ) + { + pszParams++; + } + + // ブロック開始チェック + if ( *pszParams++ != '{' ) + { + iErr = CFG_ERR_SYNTAX; + break; + } + + // ブロック切り出し + iErr = CAnalyze::SearchChar(szParamBlock, pszParams, '}'); + if ( iErr != CFG_ERR_OK ) + { + break; + } + + // ブロック内読み出し + const char* pszParamBlock = szParamBlock; + for ( j = 0; j < m_iParamSyntax[i] + 1; j++ ) + { + // 単独パラメーター切り出し + iErr = CAnalyze::GetParameter(szParam, pszParamBlock); + if ( iErr != CFG_ERR_OK ) + { + break; + } + + // パラメーター追加 + CAnalyze::SpaceCut(szParam); + if ( szParam[0] == '\0') + { + break; + } + m_pParamPacks[m_iObjs]->SetParam(iIndex++, szParam); + } + if ( iErr != CFG_ERR_OK ) + { + iErr = CFG_ERR_SYNTAX; + break; + } + if ( j != m_iParamSyntax[i] ) + { + iErr = CFG_ERR_PARAM; + break; + } + } + } + + if ( iErr == CFG_ERR_OK ) + { + m_iObjs++; + } + + return iErr; +} + + +// 自動ID番号割り当て +int CApiDef::AutoId(void) +{ + bool blUsedId[255]; + int iId; + int i; + + // 変数初期化 + for ( i = 0; i < 255; i++ ) + { + blUsedId[i] = false; + } + + // 固定値指定のIDをサーチ + for ( i = 0; i < m_iObjs; i++ ) + { + iId = atoi(m_pParamPacks[i]->GetParam(0)); + if ( iId > 0 ) + { + if ( m_iId[i] != 0 ) + { + return CFG_ERR_ID_CONFLICT; // ID衝突 + } + m_iId[i] = iId; + blUsedId[iId - 1] = true; + if ( iId > m_iMaxId ) + { + m_iMaxId = iId; + } + } + } + + // ID 自動割当 + iId = 1; + for ( i = 0; i < m_iObjs; i++ ) + { + if ( m_iId[i] == 0 ) + { + // 使用済みIDのスキップ + while ( blUsedId[iId - 1] ) + { + iId++; + } + m_iId[i] = iId++; + } + } + iId--; + + if ( iId > m_iMaxId ) + { + m_iMaxId = iId; + } + + // 最大ID番号を予約オブジェクト数分増加 + if ( m_iMaxId < m_iObjs + m_iResObj ) + { + m_iMaxId = m_iObjs + m_iResObj; + } + + return 0; +} + + +// IDをオブジェクト番号に変換 +int CApiDef::IdToObjNum(int iId) +{ + int i; + + // IDの一致するオブジェクトを探す + for ( i = 0; i < m_iObjs; i++ ) + { + if ( m_iId[i] == iId ) + { + return i; + } + } + + return -1; +} + + + +// ID 定義ファイル書き出し +void CApiDef::WriteId(FILE* fpId) +{ +} + + +// cfgファイル定義部書き出し +void CApiDef::WriteCfgDef(FILE* fpCfg) +{ +} + +// cfgファイル初期化部書き出し +void CApiDef::WriteCfgIni(FILE* fpCfg) +{ +} + +// cfgファイル起動部書き出し +void CApiDef::WriteCfgStart(FILE* fpCfg) +{ +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/apiinc.cpp b/cfgrtr/source/apiinc.cpp new file mode 100755 index 0000000..ce00f96 --- /dev/null +++ b/cfgrtr/source/apiinc.cpp @@ -0,0 +1,94 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// INCLUDE API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "apiinc.h" +#include "analyze.h" + + + +// コンストラクタ +CApiInclude::CApiInclude() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParams = 1; +} + + +// デストラクタ +CApiInclude::~CApiInclude() +{ +} + + + +// APIの解析 +int CApiInclude::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + char szBuf[4096]; + int iErr; + + // API名チェック + if ( strcmp(pszApiName, "INCLUDE") != 0 ) + { + return CFG_ERR_NOPROC; + } + + // パラメーター追加 + iErr = AddParams(pszParams); + if ( iErr != CFG_ERR_OK ) + { + return iErr; + } + + // 文字列の展開 + iErr = CAnalyze::DecodeText(szBuf, m_pParamPacks[m_iObjs - 1]->GetParam(0)); + if ( iErr != CFG_ERR_OK ) + { + return iErr; + } + m_pParamPacks[m_iObjs - 1]->SetParam(0, szBuf); + + return CFG_ERR_OK; +} + + +// 文字列を展開 +int CApiInclude::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// cfgファイル定義部書き出し +void CApiInclude::WriteCfgDef(FILE* fp) +{ + int i; + + if ( m_iObjs == 0) + { + return; + } + + fputs("\n", fp); + + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "#include %s\n", m_pParamPacks[i]->GetParam(0)); + } +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/attini.cpp b/cfgrtr/source/attini.cpp new file mode 100755 index 0000000..7efcd0c --- /dev/null +++ b/cfgrtr/source/attini.cpp @@ -0,0 +1,83 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// ATT_INI API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "attini.h" +#include "analyze.h" + +#define ATTINI_INIATR 0 +#define ATTINI_EXINF 1 +#define ATTINI_INIRTN 2 + + +// コンストラクタ +CApiAttIni::CApiAttIni() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 3; // 単独パラメーター + m_iParams = 1; +} + + +// デストラクタ +CApiAttIni::~CApiAttIni() +{ +} + + + +// APIの解析 +int CApiAttIni::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "ATT_INI") == 0 ) + { + return AddParams(pszParams); + } + + return CFG_ERR_NOPROC; +} + + +// 文字列を展開 +int CApiAttIni::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// cfgファイル定義部書き出し +void CApiAttIni::WriteCfgStart(FILE* fp) +{ + int i; + + if ( m_iObjs == 0) + { + return; + } + + fputs("\n\t/* call initialize routine*/\n", fp); + + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf( + fp, + "\t((FP)(%s))((VP_INT)(%s));\n", + m_pParamPacks[i]->GetParam(ATTINI_INIRTN), + m_pParamPacks[i]->GetParam(ATTINI_EXINF) + ); + } +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/attisr.cpp b/cfgrtr/source/attisr.cpp new file mode 100755 index 0000000..38d8d49 --- /dev/null +++ b/cfgrtr/source/attisr.cpp @@ -0,0 +1,121 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4a コンフィギュレーター +// ATT_ISR API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "attisr.h" +#include "analyze.h" +#include "readcfg.h" + + +#define ATTISR_ISRATR 0 +#define ATTISR_EXINF 1 +#define ATTISR_INTNO 2 +#define ATTISR_ISR 3 + + +// コンストラクタ +CApiAttIsr::CApiAttIsr() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 4; // 4つのパラメーターブロック + m_iParams = 1; +} + +// デストラクタ +CApiAttIsr::~CApiAttIsr() +{ +} + + +// 自動ID番号割り当て +int CApiAttIsr::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// APIの解析 +int CApiAttIsr::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "ATT_ISR") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "KERNEL_MAX_ISRID") == 0 ) + { + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + int iId; + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// cfgファイル定義部書き出し +void CApiAttIsr::WriteCfgDef(FILE* fp) +{ + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* interrupt control objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + // 割り込み管理テーブル生成 + if ( _KERNEL_IRCATR_TMAX_INHNO - _KERNEL_IRCATR_TMIN_INHNO + 1 > 0 ) + { + fprintf( + fp, + "\n" + "_KERNEL_T_INTINF _kernel_int_tbl[%d];\n\n", + _KERNEL_IRCATR_TMAX_INHNO - _KERNEL_IRCATR_TMIN_INHNO + 1); + } + + if ( m_iMaxId > 0 ) + { + fprintf( + fp, + "\n" + "_KERNEL_T_ISRCB *_kernel_isrcb_tbl[%d];\n", + m_iMaxId); + } + + fprintf( + fp, + "const ID _kernel_max_isrid = %d;\n", + m_iMaxId); +} + + +// cfgファイル初期化部書き出し +void CApiAttIsr::WriteCfgIni(FILE* fp) +{ + +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/crealm.cpp b/cfgrtr/source/crealm.cpp new file mode 100755 index 0000000..7858d7c --- /dev/null +++ b/cfgrtr/source/crealm.cpp @@ -0,0 +1,254 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_ALM API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "crealm.h" +#include "analyze.h" + + +#define CREALM_ALMID 0 +#define CREALM_ALMATR 1 +#define CREALM_EXINF 2 +#define CREALM_ALMHDR 3 + + + +// コンストラクタ +CApiCreAlm::CApiCreAlm() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 3; // 3パラメーターのブロック + m_iParams = 2; +} + + +// デストラクタ +CApiCreAlm::~CApiCreAlm() +{ +} + + +// APIの解析 +int CApiCreAlm::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_ALM") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "HOS_MAX_ALMID") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( m_iResObj > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + else if ( strcmp(pszApiName, "HOS_RES_ALMOBJ") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iResObj += iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// ID 定義ファイル書き出し +void CApiCreAlm::WriteId(FILE* fp) +{ + int i; + + // ID 直接指定でないオブジェクトが在るかどうかサーチ + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CREALM_ALMID)) == 0 ) + { + break; + } + } + if ( i == m_iObjs ) + { + return; + } + + fputs("\n\n/* alarm handler ID definetion */\n", fp); + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CREALM_ALMID)) == 0 ) + { + fprintf( + fp, + "#define %s\t\t%d\n", + m_pParamPacks[i]->GetParam(CREALM_ALMID), + m_iId[i]); + } + } + + fprintf( fp,"\n#define TMAX_ALMID\t\t%d\n", m_iMaxId ); +} + + +// cfgファイル定義部書き出し +void CApiCreAlm::WriteCfgDef(FILE* fp) +{ + int i, j; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create alarm handler objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + if ( m_iObjs > 0 ) + { + fprintf( + fp, + "\n/* alarm handler control block for rom area */\n" + "const T_KERNEL_ALMCB_ROM kernel_almcb_rom[%d] =\n" + "\t{\n", + m_iObjs); + + // コントロールブロック(ROM部)出力 + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf( + fp, + "\t\t{(ATR)(%s), (VP_INT)(%s), (FP)(%s)},\n", + m_pParamPacks[i]->GetParam(CREALM_ALMATR), + m_pParamPacks[i]->GetParam(CREALM_EXINF), + m_pParamPacks[i]->GetParam(CREALM_ALMHDR)); + } + fprintf(fp, "\t};\n"); + } + + // コントロールブロック(RAM部)出力 + if ( m_iObjs > 0 ) + { + fprintf( + fp, + "\n/* alarm handler control block for ram area */\n" + "T_KERNEL_ALMCB_RAM kernel_almcb_ram[%d];\n", + m_iObjs); + } + + // コントロールブロックテーブル出力 + if ( m_iMaxId > 0 ) + { + fprintf( + fp, + "\n/* alarm handler control block table */\n" + "T_KERNEL_ALMCB_RAM *kernel_almcb_ram_tbl[%d] =\n" + "\t{\n", + m_iMaxId); + + for ( i = 0; i < m_iMaxId; i++ ) + { + // ID検索 + for ( j = 0; j < m_iObjs; j++ ) + { + if ( m_iId[j] == i + 1 ) + { + break; + } + } + if ( j < m_iObjs ) + { + // オブジェクトが存在した場合 + fprintf(fp, "\t\t&kernel_almcb_ram[%d],\n", j); + } + else + { + // オブジェクトが無い場合 + fputs("\t\tNULL,\n", fp); + } + } + fputs("\t};\n", fp); + } + + // テーブルサイズ情報出力 + fprintf( + fp, + "\n/* alarm handler control block count */\n" + "const INT kernel_almcb_cnt = %d;\n", + m_iMaxId); +} + + +// cfgファイル初期化部書き出し +void CApiCreAlm::WriteCfgIni(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + // 初期化部出力 + fprintf( + fp, + "\t\n\t\n" + "\t/* initialize alarm handler control block */\n" + "\tfor ( i = 0; i < %d; i++ )\n" + "\t{\n" + "\t\tkernel_almcb_ram[i].almcb_rom = &kernel_almcb_rom[i];\n" + "\t}\n", + m_iObjs); +} + + +// cfgファイル起動部書き出し +void CApiCreAlm::WriteCfgStart(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + fputs("\tkernel_ini_alm();\t\t/* initialize alarm handler */\n", fp); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/crecyc.cpp b/cfgrtr/source/crecyc.cpp new file mode 100755 index 0000000..477c241 --- /dev/null +++ b/cfgrtr/source/crecyc.cpp @@ -0,0 +1,257 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_CYC API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "crecyc.h" +#include "analyze.h" + + + +#define CRECYC_CYCID 0 +#define CRECYC_CYCATR 1 +#define CRECYC_EXINF 2 +#define CRECYC_CYCHDR 3 +#define CRECYC_CYCTIM 4 +#define CRECYC_CYCPHS 5 + + + +// コンストラクタ +CApiCreCyc::CApiCreCyc() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 5; // 5パラメーターのブロック + m_iParams = 2; +} + +// デストラクタ +CApiCreCyc::~CApiCreCyc() +{ +} + + +// APIの解析 +int CApiCreCyc::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_CYC") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "HOS_MAX_CYCID") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( m_iResObj > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + else if ( strcmp(pszApiName, "HOS_RES_CYCOBJ") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iResObj += iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// ID 定義ファイル書き出し +void CApiCreCyc::WriteId(FILE* fp) +{ + int i; + + // ID 直接指定でないオブジェクトが在るかどうかサーチ + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CRECYC_CYCID)) == 0 ) + { + break; + } + } + if ( i == m_iObjs ) + { + return; + } + + fputs("\n\n/* cyclic handler ID definetion */\n", fp); + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CRECYC_CYCID)) == 0 ) + { + fprintf( + fp, + "#define %s\t\t%d\n", + m_pParamPacks[i]->GetParam(CRECYC_CYCID), + m_iId[i]); + } + } + + fprintf( fp,"\n#define TMAX_CYCID\t\t%d\n", m_iMaxId ); +} + + +// cfgファイル定義部書き出し +void CApiCreCyc::WriteCfgDef(FILE* fp) +{ + int i, j; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create cyclic handler objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + if ( m_iObjs > 0 ) + { + fprintf( + fp, + "\n/* cyclic handler control block for rom area */\n" + "const T_KERNEL_CYCCB_ROM kernel_cyccb_rom[%d] =\n" + "\t{\n", + m_iObjs); + + // コントロールブロック(ROM部)出力 + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf( + fp, + "\t\t{(ATR)(%s), (VP_INT)(%s), (FP)(%s), (RELTIM)(%s)},\n", + m_pParamPacks[i]->GetParam(CRECYC_CYCATR), + m_pParamPacks[i]->GetParam(CRECYC_EXINF), + m_pParamPacks[i]->GetParam(CRECYC_CYCHDR), + m_pParamPacks[i]->GetParam(CRECYC_CYCTIM)); + } + fprintf(fp, "\t};\n"); + } + + // コントロールブロック(RAM部)出力 + if ( m_iObjs > 0 ) + { + fprintf( + fp, + "\n/* cyclic handler control block for ram area */\n" + "T_KERNEL_CYCCB_RAM kernel_cyccb_ram[%d];\n", + m_iObjs); + } + + // コントロールブロックテーブル出力 + if ( m_iMaxId > 0 ) + { + fprintf( + fp, + "\n/* cyclic handler control block table */\n" + "T_KERNEL_CYCCB_RAM *kernel_cyccb_ram_tbl[%d] =\n" + "\t{\n", + m_iMaxId); + + for ( i = 0; i < m_iMaxId; i++ ) + { + // ID検索 + for ( j = 0; j < m_iObjs; j++ ) + { + if ( m_iId[j] == i + 1 ) + { + break; + } + } + if ( j < m_iObjs ) + { + // オブジェクトが存在した場合 + fprintf(fp, "\t\t&kernel_cyccb_ram[%d],\n", j); + } + else + { + // オブジェクトが無い場合 + fputs("\t\tNULL,\n", fp); + } + } + fputs("\t};\n", fp); + } + + // テーブルサイズ情報出力 + fprintf( + fp, + "\n/* cyclic handler control block count */\n" + "const INT kernel_cyccb_cnt = %d;\n", + m_iMaxId); +} + + +// cfgファイル初期化部書き出し +void CApiCreCyc::WriteCfgIni(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + // 初期化部出力 + fprintf( + fp, + "\t\n\t\n" + "\t/* initialize cyclic handler control block */\n" + "\tfor ( i = 0; i < %d; i++ )\n" + "\t{\n" + "\t\tkernel_cyccb_ram[i].cyccb_rom = &kernel_cyccb_rom[i];\n" + "\t}\n", + m_iObjs); +} + + +// cfgファイル起動部書き出し +void CApiCreCyc::WriteCfgStart(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + fputs("\tkernel_ini_cyc();\t\t/* initialize cyclic handler */\n", fp); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/credtq.cpp b/cfgrtr/source/credtq.cpp new file mode 100755 index 0000000..49b17dd --- /dev/null +++ b/cfgrtr/source/credtq.cpp @@ -0,0 +1,285 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_DTQ API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "credtq.h" +#include "analyze.h" + + + +#define CREDTQ_DTQID 0 +#define CREDTQ_DTQATR 1 +#define CREDTQ_DTQCNT 2 +#define CREDTQ_DTQ 3 + + + +// コンストラクタ +CApiCreDtq::CApiCreDtq() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 3; // 3パラメーターのブロック + m_iParams = 2; +} + +// デストラクタ +CApiCreDtq::~CApiCreDtq() +{ +} + + +// APIの解析 +int CApiCreDtq::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_DTQ") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "HOS_MAX_DTQID") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( m_iResObj > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + else if ( strcmp(pszApiName, "HOS_RES_DTQOBJ") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iResObj += iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// ID 定義ファイル書き出し +void CApiCreDtq::WriteId(FILE* fp) +{ + int i; + + // ID 直接指定でないオブジェクトが在るかどうかサーチ + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CREDTQ_DTQID)) == 0 ) + { + break; + } + } + if ( i == m_iObjs ) + { + return; + } + + fputs("\n\n/* data queue ID definetion */\n", fp); + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CREDTQ_DTQID)) == 0 ) + { + fprintf( + fp, + "#define %s\t\t%d\n", + m_pParamPacks[i]->GetParam(CREDTQ_DTQID), + m_iId[i]); + } + } + + fprintf( fp,"\n#define TMAX_DTQID\t\t%d\n", m_iMaxId ); +} + + +// cfgファイル定義部書き出し +void CApiCreDtq::WriteCfgDef(FILE* fp) +{ + const char* pszParam; + bool blOutput; + int i, j; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create data queue objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + // データキュー領域出力 + blOutput = false; + for ( i = 0; i < m_iObjs; i++ ) + { + pszParam = m_pParamPacks[i]->GetParam(CREDTQ_DTQ); + if ( strcmp(pszParam, "NULL") == 0 ) + { + if ( !blOutput ) + { + fputs("\n/* data que area */\n", fp); + blOutput = true; + } + + fprintf( + fp, + "static VP_INT kernel_dtq%d_dtq[%s];\n", + m_iId[i], + m_pParamPacks[i]->GetParam(CREDTQ_DTQCNT)); + } + } + + if ( m_iObjs > 0 ) + { + fprintf( + fp, + "\n/* data queue control block for rom area */\n" + "const T_KERNEL_DTQCB_ROM kernel_dtqcb_rom[%d] =\n" + "\t{\n", + m_iObjs); + + // コントロールブロック(ROM部)出力 + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf( + fp, + "\t\t{(ATR)(%s), (UINT)(%s), ", + m_pParamPacks[i]->GetParam(CREDTQ_DTQATR), + m_pParamPacks[i]->GetParam(CREDTQ_DTQCNT)); + pszParam = m_pParamPacks[i]->GetParam(CREDTQ_DTQ); + if ( strcmp(pszParam, "NULL") == 0 ) + { + fprintf(fp, "kernel_dtq%d_dtq},\n", m_iId[i]); + } + else + { + fprintf(fp, "(VP_INT *)(%s)},\n", pszParam); + } + } + fprintf(fp, "\t};\n"); + } + + // コントロールブロック(RAM部)出力 + if ( m_iObjs > 0 ) + { + fprintf( + fp, + "\n/* data queue control block for ram area */\n" + "T_KERNEL_DTQCB_RAM kernel_dtqcb_ram[%d];\n", + m_iObjs); + } + + // コントロールブロックテーブル出力 + if ( m_iMaxId > 0 ) + { + fprintf( + fp, + "\n/* data queue control block table */\n" + "T_KERNEL_DTQCB_RAM *kernel_dtqcb_ram_tbl[%d] =\n" + "\t{\n", + m_iMaxId); + + for ( i = 0; i < m_iMaxId; i++ ) + { + // ID検索 + for ( j = 0; j < m_iObjs; j++ ) + { + if ( m_iId[j] == i + 1 ) + { + break; + } + } + if ( j < m_iObjs ) + { + // オブジェクトが存在した場合 + fprintf(fp, "\t\t&kernel_dtqcb_ram[%d],\n", j); + } + else + { + // オブジェクトが無い場合 + fputs("\t\tNULL,\n", fp); + } + } + fputs("\t};\n", fp); + } + + // テーブルサイズ情報出力 + fprintf( + fp, + "\n/* data queue control block count */\n" + "const INT kernel_dtqcb_cnt = %d;\n", + m_iMaxId); +} + + +// cfgファイル初期化部書き出し +void CApiCreDtq::WriteCfgIni(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + // 初期化部出力 + fprintf( + fp, + "\t\n\t\n" + "\t/* initialize data queue control block */\n" + "\tfor ( i = 0; i < %d; i++ )\n" + "\t{\n" + "\t\tkernel_dtqcb_ram[i].dtqcb_rom = &kernel_dtqcb_rom[i];\n" + "\t}\n", + m_iObjs); +} + + +// cfgファイル起動部書き出し +void CApiCreDtq::WriteCfgStart(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + fputs("\tkernel_ini_dtq();\t\t/* initialize data queue */\n", fp); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/creflg.cpp b/cfgrtr/source/creflg.cpp new file mode 100755 index 0000000..5a789b5 --- /dev/null +++ b/cfgrtr/source/creflg.cpp @@ -0,0 +1,263 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_FLG API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "creflg.h" +#include "analyze.h" +#include "readcfg.h" + + +#define CREFLG_FLGID 0 +#define CREFLG_FLGATR 1 +#define CREFLG_IFLGPTN 2 + + + +// コンストラクタ +CApiCreFlg::CApiCreFlg() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 2; // 2パラメーターのブロック + m_iParams = 2; +} + +// デストラクタ +CApiCreFlg::~CApiCreFlg() +{ +} + + +// APIの解析 +int CApiCreFlg::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_FLG") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "KERNEL_MAX_FLGID") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// ID 定義ファイル書き出し +void CApiCreFlg::WriteId(FILE* fp) +{ + int i; + + // %jp{コメントを出力} + fputs("\n\n/* event flag ID definetion */\n", fp); + + // %jp{ID定義を出力} + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CREFLG_FLGID)) == 0 ) + { + fprintf( + fp, + "#define %s\t\t%d\n", + m_pParamPacks[i]->GetParam(CREFLG_FLGID), + m_iId[i]); + } + } + + // %jp{ID最大値定義を出力} + fprintf( fp, + "\n" + "#ifdef TMAX_FLGID\n" + "#undef TMAX_FLGID\n" + "#endif\n" + "\n" + "#define TMAX_FLGID\t\t%d\n\n", m_iMaxId); +} + + +// cfgファイル定義部書き出し +void CApiCreFlg::WriteCfgDef(FILE* fp) +{ + int i; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create eventflag objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + + if ( m_iMaxId > 0 ) + { +#if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_BLKARRAY +#if _KERNEL_FLGCB_ROM + // %jp{ブロック配列&ROM分離} + { + // %jp{RAM部出力} + fprintf(fp, "\n_KERNEL_T_FLGCB _kernel_flgcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteSemcbRam(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{0},\n"); + } + } + fprintf(fp, "\t};\n"); + + // %jp{ROM部出力} + fprintf(fp, "\nconst _KERNEL_T_FLGCB_ROM _kernel_flgcb_rom_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteSemcbRom(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{0},\n"); + } + } + fprintf(fp, "\t};\n\n"); + } +#else + // ブロック配列&統合TCB + { + // %jp{RAM部出力} + fprintf(fp, "\n_KERNEL_T_FLGCB _kernel_flgcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteFlgcbRam(fp, iObjNum); + WriteFlgcbRom(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{0},\n"); + } + } + fprintf(fp, "\t};\n"); + } +#endif +#elif _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY +#if _KERNEL_FLGCB_ROM + // ポインタ配列&ROM分離 + { + } +#else + // ポインタ配列&統合TCB + { + } +#endif +#endif + } + + // テーブルサイズ情報出力 + fprintf( + fp, + "\nconst ID _kernel_max_flgid = %d;\n", + m_iMaxId); +} + + + +void CApiCreFlg::WriteFlgcbRam(FILE *fp, int iObj) +{ +#if _KERNEL_FLGCB_QUE + fprintf(fp, "{0}, "); /* %jp{キュー} */ +#endif + +#if _KERNEL_FLGCB_FLGPTN + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CREFLG_IFLGPTN)); /* %jp{} */ +#endif +} + + +void CApiCreFlg::WriteFlgcbRom(FILE *fp, int iObj) +{ +#if _KERNEL_FLGCB_FLGATR + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CREFLG_FLGATR)); /* %jp{イベントフラグ属性} */ +#endif +} + + + + + +// cfgファイル初期化部書き出し +void CApiCreFlg::WriteCfgIni(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + // 初期化部出力 + fprintf( + fp, + "\t\n\t\n" + "\t/* initialize event flag control block */\n" + "\tfor ( i = 0; i < %d; i++ )\n" + "\t{\n" + "\t\tkernel_flgcb_ram[i].flgcb_rom = &kernel_flgcb_rom[i];\n" + "\t}\n", + m_iObjs); +} + + +// cfgファイル起動部書き出し +void CApiCreFlg::WriteCfgStart(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + fputs("\tkernel_ini_flg();\t\t/* initialize event flag */\n", fp); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/crembf.cpp b/cfgrtr/source/crembf.cpp new file mode 100755 index 0000000..8b84493 --- /dev/null +++ b/cfgrtr/source/crembf.cpp @@ -0,0 +1,291 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_MBF API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "crembf.h" +#include "analyze.h" + + +#define CREMBF_MBFID 0 +#define CREMBF_MBFATR 1 +#define CREMBF_MAXMSZ 2 +#define CREMBF_MBFSZ 3 +#define CREMBF_MBF 4 + + +// コンストラクタ +CApiCreMbf::CApiCreMbf() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 4; // 4パラメーターのブロック + m_iParams = 2; +} + +// デストラクタ +CApiCreMbf::~CApiCreMbf() +{ +} + + + +// APIの解析 +int CApiCreMbf::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_MBF") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "HOS_MAX_MBFID") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( m_iResObj > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + else if ( strcmp(pszApiName, "HOS_RES_MBFOBJ") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iResObj += iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// ID 定義ファイル書き出し +void CApiCreMbf::WriteId(FILE* fp) +{ + int i; + + // ID 直接指定でないオブジェクトが在るかどうかサーチ + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CREMBF_MBFID)) == 0 ) + { + break; + } + } + if ( i == m_iObjs ) + { + return; + } + + fputs("\n\n/* message buffer ID definetion */\n", fp); + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CREMBF_MBFID)) == 0 ) + { + fprintf( + fp, + "#define %s\t\t%d\n", + m_pParamPacks[i]->GetParam(CREMBF_MBFID), + m_iId[i]); + } + } + + fprintf( fp,"\n#define TMAX_MBFID\t\t%d\n", m_iMaxId ); +} + + +// cfgファイル定義部書き出し +void CApiCreMbf::WriteCfgDef(FILE* fp) +{ + const char* pszParam; + bool blOutput; int i, j; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create message buffer objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + // バッファ領域出力 + blOutput = false; + for ( i = 0; i < m_iObjs; i++ ) + { + pszParam = m_pParamPacks[i]->GetParam(CREMBF_MBF); + if ( strcmp(pszParam, "NULL") == 0 ) + { + if ( !blOutput ) + { + fputs("\n/* message buffer area */\n", fp); + blOutput = true; + } + + fprintf( + fp, + "static VP kernel_mbf%d[(%s)];\n", + m_iId[i], + m_pParamPacks[i]->GetParam(CREMBF_MBFSZ)); + } + } + + if ( m_iObjs > 0 ) + { + fprintf( + fp, + "\n/* message buffer control block for rom area */\n" + "const T_KERNEL_MBFCB_ROM kernel_mbfcb_rom[%d] =\n" + "\t{\n", + m_iObjs); + + // コントロールブロック(ROM部)出力 + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf( + fp, + "\t\t{(ATR)(%s), (UINT)(%s), (SIZE)(%s),", + m_pParamPacks[i]->GetParam(CREMBF_MBFATR), + m_pParamPacks[i]->GetParam(CREMBF_MAXMSZ), + m_pParamPacks[i]->GetParam(CREMBF_MBFSZ)); + pszParam = m_pParamPacks[i]->GetParam(CREMBF_MBF); + if ( strcmp(pszParam, "NULL") == 0 ) + { + fprintf( + fp, + "(VP)kernel_mbf%d},\n", + m_iId[i]); + } + else + { + fprintf( + fp, + "(VP)(%s)},\n", + m_pParamPacks[i]->GetParam(CREMBF_MBF)); + } + } + fprintf(fp, "\t};\n"); + } + + // コントロールブロック(RAM部)出力 + if ( m_iObjs > 0 ) + { + fprintf( + fp, + "\n/* message buffer control block for ram area */\n" + "T_KERNEL_MBFCB_RAM kernel_mbfcb_ram[%d];\n", + m_iObjs); + } + + // コントロールブロックテーブル出力 + if ( m_iMaxId > 0 ) + { + fprintf( + fp, + "\n/* message buffer control block table */\n" + "T_KERNEL_MBFCB_RAM *kernel_mbfcb_ram_tbl[%d] =\n" + "\t{\n", + m_iMaxId); + + for ( i = 0; i < m_iMaxId; i++ ) + { + // ID検索 + for ( j = 0; j < m_iObjs; j++ ) + { + if ( m_iId[j] == i + 1 ) + { + break; + } + } + if ( j < m_iObjs ) + { + // オブジェクトが存在した場合 + fprintf(fp, "\t\t&kernel_mbfcb_ram[%d],\n", j); + } + else + { + // オブジェクトが無い場合 + fputs("\t\tNULL,\n", fp); + } + } + fputs("\t};\n", fp); + } + + // 個数情報出力 + fprintf( + fp, + "\n/* mail box control block count */\n" + "const INT kernel_mbfcb_cnt = %d;\n", + m_iMaxId); +} + + +// cfgファイル初期化部書き出し +void CApiCreMbf::WriteCfgIni(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + // 初期化部出力 + fprintf( + fp, + "\t\n\t\n" + "\t/* initialize message buffer control block */\n" + "\tfor ( i = 0; i < %d; i++ )\n" + "\t{\n" + "\t\tkernel_mbfcb_ram[i].mbfcb_rom = &kernel_mbfcb_rom[i];\n" + "\t}\n", + m_iObjs); +} + + +// cfgファイル起動部書き出し +void CApiCreMbf::WriteCfgStart(FILE* fp) +{ + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + fputs("\tkernel_ini_mbf();\t\t/* initialize message buffer */\n", fp); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/crembx.cpp b/cfgrtr/source/crembx.cpp new file mode 100755 index 0000000..04abf8e --- /dev/null +++ b/cfgrtr/source/crembx.cpp @@ -0,0 +1,114 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_MBX API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "crembx.h" +#include "analyze.h" + + +#define CREMBX_MBXID 0 +#define CREMBX_MBXATR 1 +#define CREMBX_MAXPRI 2 +#define CREMBX_MPRIHD 3 + + + +// コンストラクタ +CApiCreMbx::CApiCreMbx() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 3; // 3パラメーターのブロック + m_iParams = 2; +} + +// デストラクタ +CApiCreMbx::~CApiCreMbx() +{ +} + + + +// APIの解析 +int CApiCreMbx::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_MBX") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "KERNEL_MAX_MBXID") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// ID 定義ファイル書き出し +void CApiCreMbx::WriteId(FILE* fp) +{ + +} + + +// cfgファイル定義部書き出し +void CApiCreMbx::WriteCfgDef(FILE* fp) +{ + const char* pszParam; + bool blOutput; + int i, j; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create mailbox objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + fprintf(fp, "\n\n_KERNEL_T_MBXCB _kernel_mbxcb_tbl[64];\n"); + fprintf(fp, "\n\nconst ID _kernel_max_mbxid = 64;\n"); +} + + +// cfgファイル初期化部書き出し +void CApiCreMbx::WriteCfgIni(FILE* fp) +{ + +} + + +// cfgファイル起動部書き出し +void CApiCreMbx::WriteCfgStart(FILE* fp) +{ + +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/crempf.cpp b/cfgrtr/source/crempf.cpp new file mode 100755 index 0000000..08da5b0 --- /dev/null +++ b/cfgrtr/source/crempf.cpp @@ -0,0 +1,114 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// CRE_MPF API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "crempf.h" +#include "analyze.h" + + +#define CREMPF_MPFID 0 +#define CREMPF_MPFATR 1 +#define CREMPF_BLKCNT 2 +#define CREMPF_BLKSZ 3 +#define CREMPF_MPF 4 + + + +// コンストラクタ +CApiCreMpf::CApiCreMpf() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 4; // 4パラメーターのブロック + m_iParams = 2; +} + +// デストラクタ +CApiCreMpf::~CApiCreMpf() +{ +} + + + +// APIの解析 +int CApiCreMpf::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_MPF") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "KERNEL_MAX_MPFID") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// ID 定義ファイル書き出し +void CApiCreMpf::WriteId(FILE* fp) +{ +} + + +// cfgファイル定義部書き出し +void CApiCreMpf::WriteCfgDef(FILE* fp) +{ + const char* pszParam; + bool blOutput; + int i, j; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create fixed size memory-pool objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + fprintf(fp, "\n\n_KERNEL_T_MPFCB _kernel_mpfcb_tbl[64];\n"); + fprintf(fp, "\n\nconst ID _kernel_max_mpfid = 64;\n"); +} + + +// cfgファイル初期化部書き出し +void CApiCreMpf::WriteCfgIni(FILE* fp) +{ + +} + + +// cfgファイル起動部書き出し +void CApiCreMpf::WriteCfgStart(FILE* fp) +{ + +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/cresem.cpp b/cfgrtr/source/cresem.cpp new file mode 100755 index 0000000..d4dc2c7 --- /dev/null +++ b/cfgrtr/source/cresem.cpp @@ -0,0 +1,306 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 Advance configurator +// CRE_SEM API の処理 +// +// Copyright (C) 1998-2006 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "cresem.h" +#include "analyze.h" +#include "readcfg.h" + + +#define CRESEM_SEMID 0 +#define CRESEM_SEMATR 1 +#define CRESEM_SEMCNT 2 +#define CRESEM_MAXSEM 3 + + + +// コンストラクタ +CApiCreSem::CApiCreSem() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 3; // 3パラメーターのブロック + m_iParams = 2; +} + +// デストラクタ +CApiCreSem::~CApiCreSem() +{ +} + + +// APIの解析 +int CApiCreSem::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_SEM") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "KERNEL_MAX_SEMID") == 0 ) + { + int iId; + + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// ID 定義ファイル書き出し +void CApiCreSem::WriteId(FILE* fp) +{ + int i; + + // %jp{コメントを出力} + fputs("\n\n/* Semaphore object ID definetion */\n\n", fp); + + + // %jp{ID定義を出力} + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CRESEM_SEMID)) == 0 ) + { + fprintf( + fp, + "#define %s\t\t%d\n", + m_pParamPacks[i]->GetParam(CRESEM_SEMID), + m_iId[i]); + } + } + + // %jp{ID最大値定義を出力} + fprintf( fp, + "\n" + "#ifdef TMAX_SEMID\n" + "#undef TMAX_SEMID\n" + "#endif\n" + "\n" + "#define TMAX_SEMID\t\t%d\n\n", m_iMaxId ); +} + + +// cfgファイル定義部書き出し +void CApiCreSem::WriteCfgDef(FILE* fp) +{ + int i; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create semaphore objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + if ( m_iMaxId > 0 ) + { +#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY +#if _KERNEL_SEMCB_SPLIT_RO + // %jp{ブロック配列&ROM分離} + { + // %jp{RAM部出力} + fprintf(fp, "\n_KERNEL_T_SEMCB _kernel_semcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteSemcbRam(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{0},\n"); + } + } + fprintf(fp, "\t};\n"); + + // %jp{ROM部出力} + fprintf(fp, "\nconst _KERNEL_T_SEMCB_RO _kernel_semcb_ro_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteSemcbRom(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{0},\n"); + } + } + fprintf(fp, "\t};\n\n"); + } +#else + // %jp{ブロック配列&統合TCB} + { + // %jp{RAM部出力} + fprintf(fp, "\n_KERNEL_T_SEMCB _kernel_semcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteSemcbRam(fp, iObjNum); + WriteSemcbRom(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{{0}, },\n"); + } + } + fprintf(fp, "\t};\n"); + } +#endif +#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY +#if _KERNEL_SEMCB_SPLIT_RO + // %jp{ポインタ配列&ROM分離} + { + fprintf(fp, "\n"); + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "const _KERNEL_T_SEMCB_RO _kernel_semcb_ro_blk_%d = {", m_iId[i]); + WriteSemcbRom(fp, i); + fprintf(fp, "};\n"); + } + fprintf(fp, "\n"); + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "_KERNEL_T_SEMCB _kernel_semcb_blk_%d = {", m_iId[i]); + WriteSemcbRam(fp, i); + fprintf(fp, "};\n"); + } + fprintf(fp, "\n"); + fprintf(fp, "\n_KERNEL_T_SEMCB *_kernel_semcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t&_kernel_semcb_blk_%d,\n", i); + } + else + { + fprintf(fp, "\t\tNULL,\n"); + } + } + fprintf(fp, "\t};\n"); + } +#else + // %jp{ポインタ配列&統合TCB} + { + fprintf(fp, "\n"); + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "_KERNEL_T_SEMCB _kernel_semcb_blk_%d = {", m_iId[i]); + WriteSemcbRam(fp, i); + WriteSemcbRom(fp, i); + fprintf(fp, "};\n"); + } + fprintf(fp, "\n"); + fprintf(fp, "\n_KERNEL_T_SEMCB *_kernel_semcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t&_kernel_semcb_blk_%d,\n", i); + } + else + { + fprintf(fp, "\t\tNULL,\n"); + } + } + fprintf(fp, "\t};\n"); + } +#endif +#endif + } + + // テーブルサイズ情報出力 + fprintf( + fp, + "\nconst ID _kernel_max_semid = %d;\n", + m_iMaxId); +} + + +void CApiCreSem::WriteSemcbRam(FILE *fp, int iObj) +{ +#if _KERNEL_SEMCB_QUE + fprintf(fp, "{0}, "); /* %jp{キュー} */ +#endif + +#if _KERNEL_SEMCB_SEMCNT + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRESEM_SEMCNT)); /* %jp{セマフォの資源数} */ +#endif +} + + +void CApiCreSem::WriteSemcbRom(FILE *fp, int iObj) +{ +#if _KERNEL_SEMCB_SEMATR + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRESEM_SEMATR)); /* %jp{セマフォ属性} */ +#endif + +#if _KERNEL_SEMCB_MAXSEM + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRESEM_MAXSEM)); /* %jp{セマフォの最大資源数} */ +#endif +} + + + +// cfgファイル初期化部書き出し +void CApiCreSem::WriteCfgIni(FILE* fp) +{ +#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY && _KERNEL_SEMCB_SPLIT_RO + if ( m_iObjs <= 0 ) + { + return; + } + + fprintf(fp, "\n\t/* semaphores */\n"); + for ( int i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "\t_kernel_semcb_blk_%d.semcb_ro = &_kernel_semcb_ro_blk_%d;\n", m_iId[i], m_iId[i]); + } +#endif +} + + +// cfgファイル起動部書き出し +void CApiCreSem::WriteCfgStart(FILE* fp) +{ +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2006 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/cretsk.cpp b/cfgrtr/source/cretsk.cpp new file mode 100755 index 0000000..f1e8a7e --- /dev/null +++ b/cfgrtr/source/cretsk.cpp @@ -0,0 +1,440 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 Advance Configulator +// CRE_TSK API +// +// Copyright (C) 1998-2006 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "readcfg.h" +#include "defercd.h" +#include "cretsk.h" +#include "analyze.h" + + +// parameter +#define CRETSK_TSKID 0 +#define CRETSK_TSKATR 1 +#define CRETSK_EXINF 2 +#define CRETSK_TASK 3 +#define CRETSK_ITSKPRI 4 +#define CRETSK_STKSZ 5 +#define CRETSK_STK 6 + + + +// %jp{コンストラクタ}%en{constructor} +CApiCreTsk::CApiCreTsk() +{ + // %jp{パラメーター構文設定} + m_iParamSyntax[0] = 0; // %jp{単独パラメーター} + m_iParamSyntax[1] = 6; // %jp{6パラメーターのブロック} + m_iParams = 2; +} + + +// %jp{デストラクタ}%en{destructor} +CApiCreTsk::~CApiCreTsk() +{ +} + + +// %jp{APIの解析} +int CApiCreTsk::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "CRE_TSK") == 0 ) + { + return AddParams(pszParams); // %jp{APIとしてパラメータ分解を行う} + } + else if ( strcmp(pszApiName, "KERNEL_MAX_TSKID") == 0 ) + { + if ( m_iMaxId > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + int iId; + if ( (iId = atoi(pszParams)) <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxId = iId; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// 自動ID番号割り当て +int CApiCreTsk::AutoId(void) +{ + if ( m_iMaxId == 0 ) + { + m_iMaxId = _KERNEL_TMAX_TSKID; + } + + return CApiDef::AutoId(); +} + + + +// %jp{ID 定義ファイル書き出し} +void CApiCreTsk::WriteId(FILE* fp) +{ + int i; + + // %jp{コメントを出力} + fputs("\n\n/* Task object ID definetion */\n\n", fp); + + // %jp{ID定義を出力} + for ( i = 0; i < m_iObjs; i++ ) + { + if ( atoi(m_pParamPacks[i]->GetParam(CRETSK_TSKID)) == 0 ) + { + fprintf( + fp, + "#define %s\t\t%d\n", + m_pParamPacks[i]->GetParam(CRETSK_TSKID), + m_iId[i]); + } + } + + // %jp{ID最大値定義を出力} + fprintf( fp, + "\n" + "#ifdef TMAX_TSKID\n" + "#undef TMAX_TSKID\n" + "#endif\n" + "\n" + "#define TMAX_TSKID\t\t%d\n\n", m_iMaxId ); +} + + + +// %jp{cfgファイル定義部書き出し} +void CApiCreTsk::WriteCfgDef(FILE* fp) +{ + const char* pszParam; + int i; + + // %jp{コメント出力} + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create task objects */\n" + "/* ------------------------------------------ */\n\n" + , fp); + + + // %jp{スタック領域出力} + for ( i = 0; i < m_iObjs; i++ ) + { + pszParam = m_pParamPacks[i]->GetParam(CRETSK_STK); + if ( strcmp(pszParam, "NULL") == 0 ) + { + fprintf( + fp, + "static VP _kernel_tsk%d_stk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\n", + m_iId[i], + m_pParamPacks[i]->GetParam(CRETSK_STKSZ)); + } + } + + +#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY +#if _KERNEL_TCB_SPLIT_RO + // %jp{ブロック配列&ROM分離} + { + // %jp{RAM部出力} + fprintf(fp, "\n_KERNEL_T_TCB _kernel_tcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteTcbRam(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{{0}, },\n"); + } + } + fprintf(fp, "\t};\n"); + + // %jp{ROM部出力} + fprintf(fp, "\nconst _KERNEL_T_TCB_RO _kernel_tcb_ro_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteTcbRom(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{0},\n"); + } + } + fprintf(fp, "\t};\n\n"); + } +#else + // ブロック配列&統合TCB + { + // %jp{RAM部出力} + fprintf(fp, "\n_KERNEL_T_TCB _kernel_tcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t{"); + WriteTcbRam(fp, iObjNum); + WriteTcbRom(fp, iObjNum); + fprintf(fp, "},\n"); + } + else + { + fprintf(fp, "\t\t{{0}, },\n"); + } + } + fprintf(fp, "\t};\n"); + } +#endif +#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY +#if _KERNEL_TCB_SPLIT_RO + // ポインタ配列&ROM分離 + { + fprintf(fp, "\n"); + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "const _KERNEL_T_TCB_RO _kernel_tcb_ro_blk_%d = {", m_iId[i]); + WriteTcbRom(fp, i); + fprintf(fp, "};\n"); + } + fprintf(fp, "\n"); + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "_KERNEL_T_TCB _kernel_tcb_blk_%d = {", m_iId[i]); + WriteTcbRam(fp, i); + fprintf(fp, "};\n"); + } + fprintf(fp, "\n"); + fprintf(fp, "\n_KERNEL_T_TCB *_kernel_tcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t&_kernel_tcb_blk_%d,\n", i); + } + else + { + fprintf(fp, "\t\tNULL,\n"); + } + } + fprintf(fp, "\t};\n"); + } +#else + // ポインタ配列&統合TCB + { + fprintf(fp, "\n"); + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "_KERNEL_T_TCB _kernel_tcb_blk_%d = {", m_iId[i]); + WriteTcbRam(fp, i); + WriteTcbRom(fp, i); + fprintf(fp, "};\n"); + } + fprintf(fp, "\n"); + fprintf(fp, "\n_KERNEL_T_TCB *_kernel_tcb_tbl[%d] =\n\t{\n", m_iMaxId); + for ( i = 1; i <= m_iMaxId; i++ ) + { + int iObjNum = IdToObjNum(i); + if ( iObjNum >= 0 ) + { + fprintf(fp, "\t\t&_kernel_tcb_blk_%d,\n", i); + } + else + { + fprintf(fp, "\t\tNULL,\n"); + } + } + fprintf(fp, "\t};\n"); + } +#endif +#endif + + // %jp{タスク情報出力} + fprintf( + fp, + "\nconst ID _kernel_max_tskid = %d;\n", + m_iMaxId); +} + + + +void CApiCreTsk::WriteTcbRam(FILE *fp, int iObj) +{ +#if _KERNEL_TCB_CTXCB + fprintf(fp, "{0}, "); /* %jp{タスクのコンテキスト} */ +#endif + +#if _KERNEL_TCB_QUE + fprintf(fp, "NULL, "); /* %jp{属しているキュー} */ +#endif + +#if _KERNEL_TCB_QUEOBJ +#if _KERNEL_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST + fprintf(fp, "0, "); /* %jp{キューに接続する為のオブジェクト} */ +#elif _KERNEL_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST + fprintf(fp, "0, 0, "); /* %jp{キューに接続する為のオブジェクト} */ +#endif +#endif + +#if _KERNEL_TCB_TOQOBJ + fprintf(fp, "0, 0, 0, "); /* %jp{タイムアウトキュー} */ +#endif + +#if _KERNEL_TCB_TSKSTAT + fprintf(fp, "0, "); /* %jp{タスク状態} */ +#endif + +#if _KERNEL_TCB_TSKPRI + fprintf(fp, "0, "); /* %jp{タスクの現在優先度} */ +#endif + +#if _KERNEL_TCB_TSKBPRI + fprintf(fp, "0, "); /* %jp{タスクのベース優先度} */ +#endif + +#if _KERNEL_TCB_TSKWAIT + fprintf(fp, "0, "); /* %jp{待ち要因} */ +#endif + +#if _KERNEL_TCB_WOBJID + fprintf(fp, "0, "); /* %jp{待ち対象のオブジェクトのID番号} */ +#endif + +#if _KERNEL_TCB_ACTCNT + fprintf(fp, "0, "); /* %jp{起動要求キューイング回数} */ +#endif + +#if _KERNEL_TCB_WUPCNT + fprintf(fp, "0, "); /* %jp{起床要求キューイング回数} */ +#endif + +#if _KERNEL_TCB_SUSCNT + fprintf(fp, "0, "); /* %jp{強制待ち要求ネスト回数} */ +#endif + +#if _KERNEL_TCB_ERCD + fprintf(fp, "0, "); /* ercd */ +#endif + +#if _KERNEL_TCB_DATA + fprintf(fp, "0, "); /* data */ +#endif + +#if _KERNEL_TCB_TSKID + fprintf(fp, "0, "); /* tskid */ +#endif +} + + +void CApiCreTsk::WriteTcbRom(FILE *fp, int iObj) +{ +#if _KERNEL_TCB_TSKATR + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_TSKATR)); /**< %jp{タスク属性} */ +#endif + +#if _KERNEL_TCB_EXINF /* exinf */ + fprintf(fp, "(_KERNEL_TSK_T_EXINF)(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_EXINF)); /* %jp{タスクの拡張情報} */ +#endif + +#if _KERNEL_TCB_TASK + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_TASK)); /* %jp{タスクの起動番地} */ +#endif + +#if _KERNEL_TCB_ITSKPRI + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_ITSKPRI)); /* %jp{タスクの起動時優先度} */ +#endif + +#if _KERNEL_TCB_STKSZ + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_STKSZ)); /* %jp{タスクのスタックのサイズ(バイト数)} */ +#endif + +#if _KERNEL_TCB_STK + if ( strcmp(m_pParamPacks[iObj]->GetParam(CRETSK_STK), "NULL") == 0 ) + { + fprintf(fp, "_kernel_tsk%d_stk, ", m_iId[iObj]; + } + else + { + fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_STK)); /* %jp{タスクのスタック領域の先頭番地} */ + } +#endif + +#if _KERNEL_TCB_ISP + if ( strcmp(m_pParamPacks[iObj]->GetParam(CRETSK_STK), "NULL") == 0 ) + { + fprintf(fp, "((VB*)_kernel_tsk%d_stk + sizeof(_kernel_tsk%d_stk)), ", m_iId[iObj], m_iId[iObj]); + } + else + { + fprintf(fp, "(VP)((VB *)(%s) + (SIZE)(%s)), ", m_pParamPacks[iObj]->GetParam(CRETSK_STK), m_pParamPacks[iObj]->GetParam(CRETSK_STKSZ)); + } +#endif +} + + + +// cfgファイル初期化部書き出し +void CApiCreTsk::WriteCfgIni(FILE* fp) +{ +#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY && _KERNEL_TCB_SPLIT_RO + if ( m_iObjs <= 0 ) + { + return; + } + + fprintf(fp, "\n\t/* Tasks */\n"); + for ( int i = 0; i < m_iObjs; i++ ) + { + fprintf(fp, "\t_kernel_tcb_blk_%d.tcb_ro = &_kernel_tcb_ro_blk_%d;\n", m_iId[i], m_iId[i]); + } +#endif +} + + +// cfgファイル起動部書き出し +void CApiCreTsk::WriteCfgStart(FILE* fp) +{ + int i; + + for ( i = 0; i < m_iObjs; i++ ) + { + if ( strstr(m_pParamPacks[i]->GetParam(CRETSK_TSKATR), "TA_ACT") != NULL ) + { + fprintf(fp, + "\tact_tsk(%s);\n", + m_pParamPacks[i]->GetParam(CRETSK_TSKID)); + } + } +} + + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2006 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/defercd.cpp b/cfgrtr/source/defercd.cpp new file mode 100755 index 0000000..89d7430 --- /dev/null +++ b/cfgrtr/source/defercd.cpp @@ -0,0 +1,44 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// エラーコード管理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include "defercd.h" + + +static const char *szErrMsg[] = + { + "unanticipated EOF.", // 予期せぬEOF + "illegal CR.", // 不正な改行 + "status too long.", // 1ステートが長すぎる + "syntax error." , // 構文エラー + "expect \')\' but found.", // ()の不整合 + "expect \'}\' but found.", // {}の不整合 + "expect \';\' but found.", // セミコロンが無い + "illegal text.", // 不正な文字列定数 + "conflict ID.", // ID衝突 + "illegal parameter.", // パラメーター不正 + "multiple definition.", // 唯一であるべきAPI定義が複数 + "conflict definition.", // 定義衝突 + }; + + +// エラー文字列取得 +const char* GetErrMessage(int iErr) +{ + if ( iErr < 1 || iErr > (int)(sizeof(szErrMsg)/sizeof(char *)) ) + { + return "unknown expression error."; + } + + return szErrMsg[iErr - 1]; +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/defexc.cpp b/cfgrtr/source/defexc.cpp new file mode 100755 index 0000000..0d5fb5e --- /dev/null +++ b/cfgrtr/source/defexc.cpp @@ -0,0 +1,156 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// DEF_EXC API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "defexc.h" +#include "analyze.h" + + +#define DEFEXC_EXCNO 0 +#define DEFEXC_EXCATR 1 +#define DEFEXC_EXCHDR 2 + + +// コンストラクタ +CApiDefExc::CApiDefExc() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 2; // 2つのパラメーターブロック + m_iParams = 2; + + m_iMaxExcNo = 0; + m_iMinExcNo = 0; +} + +// デストラクタ +CApiDefExc::~CApiDefExc() +{ +} + + +// 自動ID番号割り当て +int CApiDefExc::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// APIの解析 +int CApiDefExc::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "DEF_EXC") == 0 ) + { + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "HOS_MAX_EXCNO") == 0 ) + { + int iExcNo; + + if ( m_iMaxExcNo > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( (iExcNo = atoi(pszParams)) < 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMaxExcNo = iExcNo; + + return CFG_ERR_OK; + } + else if ( strcmp(pszApiName, "HOS_MIN_EXCNO") == 0 ) + { + int iExcNo; + + if ( m_iMinExcNo > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( (iExcNo = atoi(pszParams)) < 0 ) + { + return CFG_ERR_PARAM; + } + + m_iMinExcNo = iExcNo; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// cfgファイル定義部書き出し +void CApiDefExc::WriteCfgDef(FILE* fp) +{ + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* CPU exception handler control objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + // 割り込み管理テーブル生成 + fputs("\n/* interrupt control */\n", fp); + + if ( m_iMaxExcNo - m_iMinExcNo + 1 > 0 ) + { + fprintf( + fp, + "T_KERNEL_EXCCB kernel_exccb_tbl[%d];\t\t/* CPU exception handler control block table */\n", + m_iMaxExcNo - m_iMinExcNo + 1); + } + + fprintf( + fp, + "const INT kernel_exccb_cnt = %d;\t\t/* CPU exception handler control block count */\n" + "const EXCNO kernel_min_excno = %d;\t\t/* minimum CPU exception handler number */\n", + m_iMaxExcNo - m_iMinExcNo + 1, + m_iMinExcNo); +} + + +// cfgファイル初期化部書き出し +void CApiDefExc::WriteCfgIni(FILE* fp) +{ + int i; + + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + // コメント出力 + fputs("\n\t/* initialize CPU exception handler table */\n", fp); + + // 初期化部出力 + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf( + fp, + "\tkernel_exccb_tbl[%s].exchdr = (FP)(%s);\n", + m_pParamPacks[i]->GetParam(DEFEXC_EXCNO), + m_pParamPacks[i]->GetParam(DEFEXC_EXCHDR)); + } +} + + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/definh.cpp b/cfgrtr/source/definh.cpp new file mode 100755 index 0000000..4157217 --- /dev/null +++ b/cfgrtr/source/definh.cpp @@ -0,0 +1,89 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// DEF_INH API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "definh.h" +#include "analyze.h" +#include "readcfg.h" + + +#define ATTINI_INIATR 0 +#define ATTINI_EXINF 1 +#define ATTINI_INIRTN 2 + + +// コンストラクタ +CApiDefInh::CApiDefInh() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 2; // 2個のパラメーターブロック + m_iParams = 2; +} + + +// デストラクタ +CApiDefInh::~CApiDefInh() +{ +} + + + +// APIの解析 +int CApiDefInh::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "DEF_INH") == 0 ) + { + return AddParams(pszParams); + } + + return CFG_ERR_NOPROC; +} + + +// 文字列を展開 +int CApiDefInh::AutoId(void) +{ + return CFG_ERR_OK; +} + +// cfgファイル定義部書き出し +void CApiDefInh::WriteCfgDef(FILE* fp) +{ + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* define interrupt handler */\n" + "/* ------------------------------------------ */\n" + , fp); + + fprintf(fp, + "\n\n" +#if !_KERNEL_SPT_DEF_INH + "const " +#endif + "_KERNEL_T_INHINF _kernel_inh_tbl[%d];\n\n", + KERNEL_TMAX_INH_INHNO - KERNEL_TMIN_INH_INHNO + 1); + +} + + +// cfgファイル定義部書き出し +void CApiDefInh::WriteCfgStart(FILE* fp) +{ +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/deftex.cpp b/cfgrtr/source/deftex.cpp new file mode 100755 index 0000000..de879b7 --- /dev/null +++ b/cfgrtr/source/deftex.cpp @@ -0,0 +1,126 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// DEF_TEX API の処理 +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "deftex.h" +#include "analyze.h" + + +#define DEFTEX_TSKID 0 +#define DEFTEX_TEXATR 1 +#define DEFTEX_TEXRTN 2 + + + +// コンストラクタ +CApiDefTex::CApiDefTex() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 2; // 2パラメーターのブロック + m_iParams = 2; +} + +// デストラクタ +CApiDefTex::~CApiDefTex() +{ +} + + +// APIの解析 +int CApiDefTex::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "DEF_TEX") == 0 ) + { + return AddParams(pszParams); + } + + return CFG_ERR_NOPROC; +} + + +// 自動ID番号割り当て +int CApiDefTex::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// cfgファイル定義部書き出し +void CApiDefTex::WriteCfgDef(FILE* fp) +{ + int i; + + if ( m_iObjs <= 0 ) + { + return; + } + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* task exception objects */\n" + "/* ------------------------------------------ */\n" + , fp); + + fprintf( + fp, + "\n/* task exception control block */\n" + "const T_KERNEL_TEXCB_RAM kernel_texcb_ram[%d] =\n" + "\t{\n", + m_iObjs); + + // コントロールブロック(ROM部)出力 + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf( + fp, + "\t\t{0, (FP)(%s)},\n", + m_pParamPacks[i]->GetParam(DEFTEX_TEXRTN)); + } + fprintf(fp, "\t};\n"); +} + + +// cfgファイル初期化部書き出し +void CApiDefTex::WriteCfgIni(FILE* fp) +{ + int i; + + // オブジェクト存在チェック + if ( m_iObjs == 0 ) + { + return; + } + + // 初期化部出力 + fputs( + "\t\n\t\n" + "\t/* initialize task exception handler */\n", + fp); + + for ( i = 0; i < m_iObjs; i++ ) + { + fprintf( + fp, + "\tkernel_tcb_ram_tbl[(%s) - TMIN_TSKID]->texcb = &kernel_texcb_rom[%d];\n", + m_pParamPacks[i]->GetParam(DEFTEX_TSKID), + i); + } +} + + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/hos4cfg.cpp b/cfgrtr/source/hos4cfg.cpp new file mode 100755 index 0000000..9876056 --- /dev/null +++ b/cfgrtr/source/hos4cfg.cpp @@ -0,0 +1,413 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 Advance コンフィギュレーター +// メインルーチン +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "readcfg.h" +#include "defercd.h" +#include "read.h" +#include "analyze.h" +#include "apiinc.h" +#include "idlstk.h" +#include "intstk.h" +#include "knlheap.h" +#include "timtic.h" +#include "maxtpri.h" +#include "cretsk.h" +#include "deftex.h" +#include "cresem.h" +#include "creflg.h" +#include "credtq.h" +#include "crembx.h" +#include "crembf.h" +#include "crempf.h" +#include "crecyc.h" +#include "crealm.h" +#include "definh.h" +#include "attisr.h" +#include "attini.h" +#include "defexc.h" + + +#define DEFAULT_INPUTFILE "system.i" +#define DEFAULT_IDFILE "kernel_id.h" +#define DEFAULT_CFGFILE "kernel_cfg.c" + + +int ReadConfigFile(FILE* fpConfig); // コンフィギュレーションファイル読み込み +void WriteIdFile(FILE* fp); // ID 定義ヘッダファイル出力 +void WriteCfgFile(FILE* fp); // C 言語ソース出力 +void PrintUsage(void); + + +CApiInclude g_ApiInclude; +CApiIdleStack g_ApiIdleStack; +CApiMaxTpri g_ApiMaxTpri; +CApiIntStack g_IntStack; +CApiKernelHeap g_ApiKernelHeap; +CApiTimTic g_ApiTimTic; +CApiCreTsk g_ApiCreTsk; +CApiDefTex g_ApiDefTex; +CApiCreSem g_ApiCreSem; +CApiCreFlg g_ApiCreFlg; +CApiCreDtq g_ApiCreDtq; +CApiCreMbx g_ApiCreMbx; +CApiCreMbf g_ApiCreMbf; +CApiCreMpf g_ApiCreMpf; +CApiCreCyc g_ApiCreCyc; +CApiCreAlm g_ApiCreAlm; +CApiDefInh g_ApiDefInh; +CApiAttIsr g_ApiAttIsr; +CApiAttIni g_ApiAttIni; +CApiDefExc g_ApiDefExc; + +static const char *s_szPhysicalInputFile = NULL; +static const char *s_szIdFile = DEFAULT_IDFILE; +static const char *s_szCfgFile = DEFAULT_CFGFILE; + +// API定義リスト +static CApiDef* g_ApiList[] = + { + &g_ApiInclude, + &g_ApiIdleStack, + &g_IntStack, + &g_ApiKernelHeap, +// &g_ApiTimTic, + &g_ApiCreTsk, +// &g_ApiDefTex, + &g_ApiCreSem, + &g_ApiCreFlg, +// &g_ApiCreDtq, + &g_ApiCreMbx, +// &g_ApiCreMbf, + &g_ApiCreMpf, +// &g_ApiCreCyc, +// &g_ApiCreAlm, + &g_ApiDefInh, + &g_ApiAttIsr, + &g_ApiAttIni, +// &g_ApiDefExc, + }; + +#define API_COUNT ((int)(sizeof(g_ApiList) / sizeof(CApiDef*))) // API個数 + + + + +// メイン関数 +int main(int argc, char *argv[]) +{ + FILE* fpInput; + FILE* fpCfg; + FILE* fpId; + int iErr; + int i; + + // コマンドライン解析 + for ( i = 1; i < argc; i++ ) + { + if ( strcmp(argv[i], "-c") == 0 ) + { + i++; + if ( i >= argc ) + { + fprintf(stderr, "option error \"-c\"\n"); + PrintUsage(); + return 1; + } + s_szCfgFile = argv[i]; + } + else if ( strcmp(argv[i], "-i") == 0 ) + { + i++; + if ( i >= argc ) + { + fprintf(stderr, "option error \"-i\"\n"); + PrintUsage(); + return 1; + } + s_szIdFile = argv[i]; + } + else if ( strcmp(argv[i], "-help") == 0 ) + { + PrintUsage(); + return 0; + } + else if ( argv[i][0] == '-' && argv[i][1] != '\0' ) + { + fprintf(stderr, "unknown option \"%s\"\n", argv[i]); + PrintUsage(); + return 1; + } + else + { + if ( s_szPhysicalInputFile != NULL ) + { + fprintf(stderr, "too many input files\n"); + PrintUsage(); + return 1; + } + s_szPhysicalInputFile = argv[i]; + } + } + + // 入力ファイル省略時のデフォルト設定 + if ( s_szPhysicalInputFile == NULL ) + { + s_szPhysicalInputFile = DEFAULT_INPUTFILE; + } + + // 入力ファイルオープン + if ( strcmp(s_szPhysicalInputFile, "-") == 0) { + s_szPhysicalInputFile = "stdin"; + fpInput = stdin; + } + else if ( (fpInput = fopen(s_szPhysicalInputFile, "r")) == NULL ) + { + fprintf(stderr, "could not open file \"%s\"\n", s_szPhysicalInputFile); + return 1; + } + + // コンフィギュレーションファイル読み込み + iErr = ReadConfigFile(fpInput) != 0; + fclose(fpInput); + if ( iErr != 0 ) + { + return 1; + } + + // 自動ID番号割り当て + for ( i = 0; i < API_COUNT; i++ ) + { + g_ApiList[i]->AutoId(); + } + + // ID 定義ファイルオープン + if ( (fpId = fopen(s_szIdFile, "w")) == NULL ) + { + fprintf(stderr, "could not open file \"%s\"\n", s_szIdFile); + return 1; + } + + WriteIdFile(fpId); + + fclose(fpId); + + + // Cfgファイルオープン + if ( (fpCfg = fopen(s_szCfgFile, "w")) == NULL ) + { + fprintf(stderr, "could not open file \"%s\"\n", s_szCfgFile); + return 1; + } + + WriteCfgFile(fpCfg); + + fclose(fpCfg); + + return 0; +} + + +// コンフィギュレーションファイル読み込み +int ReadConfigFile(FILE* fpConfig) +{ + char szState[READ_MAX_STATE]; + char szApiName[READ_MAX_STATE]; + char szParams[READ_MAX_STATE]; + int iErr; + int i; + + CRead read(fpConfig, s_szPhysicalInputFile); // 読み出しオブジェクト生成 + + // 読み込み + while ( (iErr = read.ReadState(szState)) != CFG_ERR_COMPLETE ) + { + // 読み込みエラーチェック + if ( iErr != CFG_ERR_OK ) + { + fprintf(stderr, "%s line(%d) : %s\n", + read.GetLogicalInputFile(), + read.GetLogicalLineNum(), GetErrMessage(iErr)); + return 1; + } + + // 構文解析 + iErr = CAnalyze::SplitState(szApiName, szParams, szState); + if ( iErr != CFG_ERR_OK ) + { + fprintf(stderr, "%s line(%d) : %s\n", + read.GetLogicalInputFile(), + read.GetLogicalLineNum(), GetErrMessage(iErr)); + return 1; + } + CAnalyze::SpaceCut(szApiName); + CAnalyze::SpaceCut(szParams); + + // API検索 + iErr = CFG_ERR_SYNTAX; + for ( i = 0; i < API_COUNT; i++ ) + { + iErr = g_ApiList[i]->AnalyzeApi(szApiName, szParams); + if ( iErr != CFG_ERR_NOPROC ) + { + break; + } + } + if ( iErr != CFG_ERR_OK ) + { + fprintf(stderr, "%s line(%d) : %s\n", + read.GetLogicalInputFile(), + read.GetLogicalLineNum(), GetErrMessage(iErr)); + return 1; + } + } + + return 0; +} + + +// ID定義ヘッダファイル出力 +void WriteIdFile(FILE* fp) +{ + int i; + + /* ヘッダ出力 */ + fputs( + "/* ------------------------------------------------------------------------ */\n" + "/* HOS-V4a kernel configuration */\n" + "/* kernel object ID definition */\n" + "/* */\n" + "/* ------------------------------------------------------------------------ */\n" + "\n\n" + "#ifndef __KERNEL__kernel_id_h__\n" + "#define __KERNEL__kernel_id_h__\n" + "\n" + , fp); + + // ID 定義ファイル出力 + for ( i = 0; i < API_COUNT; i++ ) + { + g_ApiList[i]->WriteId(fp); + } + + // フッタ出力 + fputs( + "\n\n\n" + "#endif\t/* __KERNEL__kernel_id_h__ */\n" + "\n\n" + "/* ------------------------------------------------------------------------ */\n" + "/* End of file */\n" + "/* ------------------------------------------------------------------------ */\n" + , fp); +} + + +// C 言語ソース出力 +void WriteCfgFile(FILE* fp) +{ + int i; + + /* ヘッダ出力 */ + fprintf( + fp, + "/* ------------------------------------------------------------------------ */\n" + "/* HOS-V4a kernel configuration */\n" + "/* kernel object create and initialize */\n" + "/* */\n" + "/* ------------------------------------------------------------------------ */\n" + "\n\n"); + + fprintf(fp, "#include \"kernel.h\"\n"); + fprintf(fp, "#include \"arch/proc/%s/procatr.h\"\n", _KERNEL_PROCATR_INC_PATH); + fprintf(fp, "#include \"arch/proc/%s/proc.h\"\n", _KERNEL_PROCATR_INC_PATH); + fprintf(fp, "#include \"arch/irc/%s/ircatr.h\"\n", _KERNEL_IRCATR_INC_PATH); + fprintf(fp, "#include \"arch/irc/%s/irc.h\"\n", _KERNEL_IRCATR_INC_PATH); + fprintf(fp, "#include \"config/cfgknl.h\"\n"); + fprintf(fp, "#include \"parser/parsknl.h\"\n"); + fprintf(fp, "#include \"core/opttyp.h\"\n"); + fprintf(fp, "#include \"core/objid.h\"\n"); + fprintf(fp, "#include \"core/objhdl.h\"\n"); + fprintf(fp, "#include \"object/tskobj.h\"\n"); + fprintf(fp, "#include \"object/semobj.h\"\n"); + fprintf(fp, "#include \"object/flgobj.h\"\n"); + fprintf(fp, "#include \"object/mbxobj.h\"\n"); + fprintf(fp, "#include \"object/mpfobj.h\"\n"); + fprintf(fp, "#include \"object/inhobj.h\"\n"); + fprintf(fp, "#include \"object/isrobj.h\"\n"); + +// fprintf(fp, "#include \"%s\"\n", s_szIdFile); + fprintf(fp, "#include \"kernel_id.h\"\n", s_szIdFile); + + + // ID 定義ファイル出力 + for ( i = 0; i < API_COUNT; i++ ) + { + g_ApiList[i]->WriteCfgDef(fp); + } + + // 初期化関数コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* initialize functions */\n" + "/* ------------------------------------------ */\n", + fp); + + // 初期化関数出力 + fputs( + "\n/* object initialize */\n" + "void _kernel_cfg_ini(void)\n" + "{\n", + fp); + for ( i = 0; i < API_COUNT; i++ ) + { + g_ApiList[i]->WriteCfgIni(fp); + } + fputs("}\n", fp); + + // 初期化関数出力 + fputs( + "\n/* start up */\n" + "void _kernel_cfg_sta(void)\n" + "{\n", + fp); + for ( i = 0; i < API_COUNT; i++ ) + { + g_ApiList[i]->WriteCfgStart(fp); + } + fputs("}\n", fp); + + // フッタ出力 + fputs( + "\n\n" + "/* ------------------------------------------------------------------------ */\n" + "/* End of file */\n" + "/* ------------------------------------------------------------------------ */\n" + , fp); +} + +// 使い方表示 +void PrintUsage(void) +{ + fprintf(stderr, + "usage: hos4cfg [options] [input-file]\n" + "options are:\n" + " -i FILE specify auto-assginment headerfile (default: " DEFAULT_IDFILE ")\n" + " -c FILE specify kernel configuration file (default: " DEFAULT_CFGFILE ")\n" + " -help show this help\n" + "\n" + "input-file (default: " DEFAULT_INPUTFILE ")\n"); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2006 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/idlstk.cpp b/cfgrtr/source/idlstk.cpp new file mode 100755 index 0000000..9d9978d --- /dev/null +++ b/cfgrtr/source/idlstk.cpp @@ -0,0 +1,110 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_IDL_STK API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "idlstk.h" +#include "analyze.h" + + +#define IDLSTK_STKSZ 0 +#define IDLSTK_STK 1 + + +// コンストラクタ +CApiIdleStack::CApiIdleStack() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParams = 2; +} + + +// デストラクタ +CApiIdleStack::~CApiIdleStack() +{ +} + + +// 自動ID番号割り当て +int CApiIdleStack::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// APIの解析 +int CApiIdleStack::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "KERNEL_IDL_STK") == 0 ) + { + if ( m_iObjs > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + return AddParams(pszParams); + } + + return CFG_ERR_NOPROC; +} + + +// cfgファイル定義部書き出し +void CApiIdleStack::WriteCfgDef(FILE* fp) +{ + const char* pszSize; + const char* pszStack; + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* idle stack */\n" + "/* ------------------------------------------ */\n\n" + , fp); + + // パラメータ読み出し + if ( m_iObjs > 0 ) + { + pszSize = m_pParamPacks[0]->GetParam(IDLSTK_STKSZ); + pszStack = m_pParamPacks[0]->GetParam(IDLSTK_STK); + } + else + { + pszSize = "128"; // 指定が無ければデフォルトサイズ + pszStack = "NULL"; // 指定が無ければNULL(自動生成) + } + + // アイドルループ用スタック出力 + if ( strcmp(pszStack, "NULL") == 0 ) + { + fprintf( + fp, + "VP _kernel_idl_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* idle stack block*/\n" + "const VP _kernel_idl_stk = (VP)(_kernel_idl_stkblk);\t/* idle stack */\n" + "const SIZE _kernel_idl_stksz = (SIZE)sizeof(_kernel_idl_stkblk);\t/* idle stack size */\n", + pszSize); + } + else + { + fprintf( + fp, + "const VP _kernel_idl_stk = (VP)(%s);\t/* idle stack */\n" + "const SIZE _kernel_idl_stksz = (SIZE)(%s);\t/* idle stack */\n", + pszStack,pszSize); + } +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/intstk.cpp b/cfgrtr/source/intstk.cpp new file mode 100755 index 0000000..f1cfbdb --- /dev/null +++ b/cfgrtr/source/intstk.cpp @@ -0,0 +1,158 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_INT_STK API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "intstk.h" +#include "analyze.h" +#include "readcfg.h" + + +#define INTSTK_STKSZ 0 +#define INTSTK_STK 1 + + +// コンストラクタ +CApiIntStack::CApiIntStack() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParams = 2; + + // スタックポインタ + m_szStackPointer[0] = '\0'; +} + + +// デストラクタ +CApiIntStack::~CApiIntStack() +{ +} + + +// 自動ID番号割り当て +int CApiIntStack::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// APIの解析 +int CApiIntStack::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "KERNEL_INT_STK") == 0 ) + { + if ( m_iObjs > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( m_szStackPointer[0] != '\0' ) + { + return CFG_ERR_DEF_CONFLICT; + } + + return AddParams(pszParams); + } + else if ( strcmp(pszApiName, "KERNEL_INT_ISP") == 0 ) + { + if ( m_iObjs > 0 ) + { + return CFG_ERR_DEF_CONFLICT; + } + + if ( m_szStackPointer[0] != '\0' ) + { + return CFG_ERR_MULTIDEF; + } + + strcpy(m_szStackPointer, pszParams); + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// cfgファイル定義部書き出し +void CApiIntStack::WriteCfgDef(FILE* fp) +{ + const char* pszSize; + const char* pszStack; + int i; + + // パラメータ読み出し + if ( m_iObjs <= 0 && m_szStackPointer[0] == '\0' ) + { + return ; + } + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* interrupt stack */\n" + "/* ------------------------------------------ */\n\n" + , fp); + + // 割り込み用スタックポインタ出力 + if ( m_szStackPointer[0] != '\0' ) + { + fprintf( + fp, + "const VP _kernel_int_isp[1] = {(VP)(%s)};\t/* interrupt initial stack pointer */\n", + m_szStackPointer); + } + else + { + pszSize = m_pParamPacks[0]->GetParam(INTSTK_STKSZ); + pszStack = m_pParamPacks[0]->GetParam(INTSTK_STK); + + if ( strcmp(pszStack, "NULL") == 0 ) + { + fprintf( + fp, + "VP _kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* interrupt stack block*/\n", + pszSize, _KERNE_INTSTK_NUM); + pszStack = "_kernel_int_stkblk"; + } + else + { + fprintf( + fp, + "const VP _kernel_int_isp[1] = {(VP)((VB *)(%s) + (%s))};\t/* interrupt initial stack pointer */\n", + pszStack, pszSize); + } + + fprintf( + fp, + "\n/* interrupt initial stack pointer */\n" + "const VP _kernel_int_isp[%d] =\n{\n", + _KERNE_INTSTK_NUM); + + for ( i = 0; i < _KERNE_INTSTK_NUM; i++ ) + { + fprintf( + fp, + "\t(VP)((VB *)(%s) + ((((%s) / %d) & ~(sizeof(VP) - 1)) * %d)),\n", + pszStack, pszSize, _KERNE_INTSTK_NUM, i+1); + } + + fprintf( + fp, + "};\n\n"); + } +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2006 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/knlheap.cpp b/cfgrtr/source/knlheap.cpp new file mode 100755 index 0000000..537fc38 --- /dev/null +++ b/cfgrtr/source/knlheap.cpp @@ -0,0 +1,108 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_KERNEL_HEAP API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "knlheap.h" +#include "analyze.h" + + + +// コンストラクタ +CApiKernelHeap::CApiKernelHeap() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParams = 1; +} + + +// デストラクタ +CApiKernelHeap::~CApiKernelHeap() +{ +} + + +// 自動ID番号割り当て +int CApiKernelHeap::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// APIの解析 +int CApiKernelHeap::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + if ( strcmp(pszApiName, "KERNEL_HEP_MEM") == 0 ) + { + if ( m_iObjs > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + return AddParams(pszParams); + } + + return CFG_ERR_NOPROC; +} + + +// cfgファイル定義部書き出し +void CApiKernelHeap::WriteCfgDef(FILE* fp) +{ + if ( m_iObjs <= 0 ) + { + return; + } + + if ( strcmp(m_pParamPacks[0]->GetParam(0), "0") == 0 ) + { + return; + } + + // コメント出力 + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* kernel heap */\n" + "/* ------------------------------------------ */\n" + , fp); + + // ヒープ領域生成 + fprintf( + fp, + "\n" + "VP _kernel_heap_mem[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* kernel heap */\n", + m_pParamPacks[0]->GetParam(0)); +} + + +// cfgファイル起動部書き出し +void CApiKernelHeap::WriteCfgIni(FILE* fp) +{ + if ( m_iObjs <= 0 ) + { + return; + } + + if ( strcmp(m_pParamPacks[0]->GetParam(0), "0") == 0 ) + { + return; + } + + fputs("\t_KERNEL_SYS_INI_MEM(_kernel_heap_mem, sizeof(_kernel_heap_mem));\t\t/* initialize kernel heap */\n\n", fp); +} + + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/maxtmout.cpp b/cfgrtr/source/maxtmout.cpp new file mode 100755 index 0000000..4ca2904 --- /dev/null +++ b/cfgrtr/source/maxtmout.cpp @@ -0,0 +1,92 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_MAX_TIMOUT API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "maxtmout.h" +#include "analyze.h" + + + +// コンストラクタ +CApiMaxTimout::CApiMaxTimout() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParams = 1; + + m_iMaxTimout = 0; +} + + +// デストラクタ +CApiMaxTimout::~CApiMaxTimout() +{ +} + + + +// APIの解析 +int CApiMaxTimout::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + // API名チェック + if ( strcmp(pszApiName, "HOS_MAX_TIMOUT") != 0 ) + { + return CFG_ERR_NOPROC; + } + + if ( m_iMaxTimout > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( atoi(pszParams) <= 0 ) + { + return CFG_ERR_PARAM; + } + m_iMaxTimout = atoi(pszParams); + + return CFG_ERR_OK; +} + + +// 文字列を展開 +int CApiMaxTimout::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// cfgファイル定義部書き出し +void CApiMaxTimout::WriteCfgDef(FILE* fp) +{ + if ( m_iMaxTimout == 0 ) + { + m_iMaxTimout = DEFAULT_MAXTIMOUT; + } + + fprintf( + fp, + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create time-out queue */\n" + "/* ------------------------------------------ */\n" + "\n" + "T_MKNL_TIMOUT mknl_timout[%d];\n" + "const INT mknl_timout_size = %d;\n", + m_iMaxTimout, + m_iMaxTimout); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/maxtpri.cpp b/cfgrtr/source/maxtpri.cpp new file mode 100755 index 0000000..b622528 --- /dev/null +++ b/cfgrtr/source/maxtpri.cpp @@ -0,0 +1,94 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_MAX_TPRI API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "maxtpri.h" +#include "analyze.h" + + + +// コンストラクタ +CApiMaxTpri::CApiMaxTpri() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParams = 1; + + m_iMaxPri = 0; +} + + +// デストラクタ +CApiMaxTpri::~CApiMaxTpri() +{ +} + + + +// APIの解析 +int CApiMaxTpri::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + // API名チェック + if ( strcmp(pszApiName, "HOS_MAX_TPRI") != 0 ) + { + return CFG_ERR_NOPROC; + } + + // 多重定義チェック + if ( m_iMaxPri > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + if ( atoi(pszParams) <= 0 ) + { + return CFG_ERR_PARAM; + } + m_iMaxPri = atoi(pszParams); + + return CFG_ERR_OK; +} + + +// 文字列を展開 +int CApiMaxTpri::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// cfgファイル定義部書き出し +void CApiMaxTpri::WriteCfgDef(FILE* fp) +{ + if ( m_iMaxPri == 0 ) + { + m_iMaxPri = DEFAULT_MAXTPRI; + + } + + fprintf( + fp, + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* create ready queue */\n" + "/* ------------------------------------------ */\n" + "\n" + "T_MKNL_QUE mknl_rdq_tbl[%d];\n" + "const INT mknl_rdq_cnt = %d;\n", + m_iMaxPri, + m_iMaxPri); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/parpack.cpp b/cfgrtr/source/parpack.cpp new file mode 100755 index 0000000..15072d5 --- /dev/null +++ b/cfgrtr/source/parpack.cpp @@ -0,0 +1,68 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// パラメーター格納クラス +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include "parpack.h" + + +// コンストラクタ +CParamPack::CParamPack() +{ + int i; + + for ( i = 0; i < PARAMPACK_MAX; i++ ) + { + m_pszParam[i] = NULL; + } +} + + +// デストラクタ +CParamPack::~CParamPack() +{ + int i; + + for ( i = 0; i < PARAMPACK_MAX; i++ ) + { + delete[] m_pszParam[i]; + } +} + + +// パラメーター設定 +void CParamPack::SetParam(int iIndex, const char *pszParam) +{ + if ( iIndex < 0 || iIndex >= PARAMPACK_MAX ) + { + return; + } + + delete[] m_pszParam[iIndex]; + + m_pszParam[iIndex] = new char[strlen(pszParam) + 1]; + strcpy(m_pszParam[iIndex], pszParam); +} + + +// パラメーター取得 +const char* CParamPack::GetParam(int iIndex) +{ + if ( iIndex < 0 || iIndex >= PARAMPACK_MAX ) + { + return NULL; + } + + return m_pszParam[iIndex]; +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/read.cpp b/cfgrtr/source/read.cpp new file mode 100755 index 0000000..8087293 --- /dev/null +++ b/cfgrtr/source/read.cpp @@ -0,0 +1,272 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// データ読み込みクラス +// +// Copyright (C) 1998-2002 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include +#include "defercd.h" +#include "read.h" + + +// コンストラクタ +CRead::CRead(FILE *fp, const char *name) +{ + m_fpRead = fp; + m_iPhysicalLineNum = m_iLogicalLineNum = 1; + m_blLineTop = true; + strncpy(m_szLogicalInputFile, name, READ_MAX_PATH - 1); + m_szLogicalInputFile[READ_MAX_PATH - 1] = '\0'; +} + + +// デストラクタ +CRead::~CRead() +{ +} + + +// 1ステート読み込み +int CRead::ReadState(char *szState) +{ + bool blEsc = false; + bool blSpace = true; // true で始めて先頭の空白を読み飛ばす + int iCount = 0; + int iErr; + int c; + + for ( ; ; ) + { + // 1文字読み込み + if ( (c = fgetc(m_fpRead)) == EOF ) + { + if ( blEsc || iCount != 0 ) + { + iErr = CFG_ERR_EOF; // 予期せぬEOF + } + else + { + iErr = CFG_ERR_COMPLETE; // 完了 + } + break; + } + + // サイズチェック + if ( iCount >= READ_MAX_STATE - 1 ) + { + iErr = CFG_ERR_STATE_LEN; + break; + } + + // 行頭が # ならスキップ + if ( m_blLineTop && c == '#' ) + { + iErr = SkipPreProcessorLine(szState, iCount); + if ( iErr != CFG_ERR_OK ) + { + break; + } + continue; + } + + // 改行文字の処理 + if ( c == '\n' ) + { + m_iPhysicalLineNum++; + m_iLogicalLineNum++; + m_blLineTop = true; + } + else + { + m_blLineTop = false; + } + + // 空白文字のスキップ + if ( isspace(c) || c == '\n' ) + { + if ( !blSpace ) + { + szState[iCount++] = ' '; + blSpace = true; + } + continue; + } + blSpace = false; + + // 文字列の処理 + if ( c == '\"' || c == '\'' ) + { + szState[iCount++] = c; + iErr = ReadString(c, szState, iCount); + if ( iErr != CFG_ERR_OK ) + { + break; + } + continue; + } + + // ステート完了文字なら + if ( c == ';' ) + { + iErr = CFG_ERR_OK; + break; + } + + // 文字の読み込み + szState[iCount++] = c; + } + + // 末尾の空白文字削除 + if ( iCount > 0 && szState[iCount - 1] == ' ' ) + { + iCount--; + } + + szState[iCount] = '\0'; + + return iErr; +} + + +// プリプロセッサラインのスキップ +int CRead::SkipPreProcessorLine(char* szText, int iCountOrg) +{ + int c; + int iCount = iCountOrg; + long tmpLineNum; + char *p1, *p2; + + for ( ; ; ) + { + // 1文字読み込み + if ( (c = fgetc(m_fpRead)) == EOF ) + { + return CFG_ERR_OK; + } + + // サイズチェック + if ( iCount >= READ_MAX_STATE - 1 ) + { + return CFG_ERR_STATE_LEN; + } + + // 行末のチェック + if ( c == '\n' ) + { + m_iPhysicalLineNum++; + m_iLogicalLineNum++; + + szText[iCount] = '\0'; + + // #line 123 "filename" + // # 123 "filename" + // の形式のどちらでも受け付ける + if (strncmp(&szText[iCountOrg], "line", 4) == 0) + iCountOrg += 4; + + // #line123 + // #12 + // などを排除 + if (!isspace(szText[iCountOrg])) + return CFG_ERR_OK; + + // 行番号読み込み + tmpLineNum = strtol(&szText[iCountOrg], &p1, 10); + if (p1 == &szText[iCountOrg]) + return CFG_ERR_OK; + + // # 123a + // など行番号の後ろに余分なものがついている場合を排除 + if (!isspace(*p1) && *p1 != '\0') + return CFG_ERR_OK; + + // 読み込んだ行番号を反映 + m_iLogicalLineNum = tmpLineNum; + + // ファイル名を探す + while (isspace(*p1)) + p1++; + if (*p1 != '\"') + return CFG_ERR_OK; + p1++; + p2 = strchr(p1, '\"'); + if (p2 == NULL) + return CFG_ERR_OK; + *p2 = '\0'; + + // ファイル名を反映 + strncpy(m_szLogicalInputFile, p1, READ_MAX_PATH - 1); + m_szLogicalInputFile[READ_MAX_PATH - 1] = '\0'; + + return CFG_ERR_OK; + } + + // 文字の読み込み + szText[iCount++] = c; + } +} + + +// 文字列読み込み +int CRead::ReadString(int cDelimiter, char* szText, int& iCount) +{ + bool blEsc = false; + int c; + + for ( ; ; ) + { + // 1文字読み込み + if ( (c = fgetc(m_fpRead)) == EOF ) + { + return CFG_ERR_EOF; // 予期せぬEOF + } + + // サイズチェック + if ( iCount >= READ_MAX_STATE - 1 ) + { + return CFG_ERR_STATE_LEN; + } + + // 改行チェック + if ( c == '\n' ) + { + return CFG_ERR_CR; // 不正な改行 + } + + // 文字の設定 + szText[iCount++] = c; + + // \ の次は無条件にスキップ + if ( blEsc ) + { + blEsc = false; + continue; + } + + // \ のチェック + if ( c == '\\' ) + { + blEsc = true; + continue; + } + + blEsc = false; + + // デリミタ文字なら完了 + if ( c == cDelimiter ) + { + return CFG_ERR_OK; + } + } +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2002 by Project HOS +// --------------------------------------------------------------------------- diff --git a/cfgrtr/source/timtic.cpp b/cfgrtr/source/timtic.cpp new file mode 100755 index 0000000..b86a031 --- /dev/null +++ b/cfgrtr/source/timtic.cpp @@ -0,0 +1,119 @@ +// --------------------------------------------------------------------------- +// Hyper Operating System V4 コンフィギュレーター +// HOS_TIM_TIC API の処理 +// +// Copyright (C) 1998-2003 by Project HOS +// http://sourceforge.jp/projects/hos/ +// --------------------------------------------------------------------------- + + +#include +#include +#include +#include "defercd.h" +#include "timtic.h" +#include "analyze.h" + + +#define TIMTIC_NUME 0 +#define TIMTIC_DENO 1 + + +// コンストラクタ +CApiTimTic::CApiTimTic() +{ + // パラメーター構文設定 + m_iParamSyntax[0] = 0; // 単独パラメーター + m_iParamSyntax[1] = 0; // 単独パラメーター + m_iParams = 2; + + m_iNume = 1; + m_iDeno = 1; +} + + +// デストラクタ +CApiTimTic::~CApiTimTic() +{ +} + + + +// APIの解析 +int CApiTimTic::AnalyzeApi(const char* pszApiName, const char* pszParams) +{ + int iNume; + int iDeno; + int iErr; + + // API名チェック + if ( strcmp(pszApiName, "HOS_TIM_TIC") == 0 ) + { + if ( m_iObjs > 0 ) + { + return CFG_ERR_MULTIDEF; + } + + iErr = AddParams(pszParams); + if ( iErr != CFG_ERR_OK ) + { + return iErr; + } + + iNume = atoi(m_pParamPacks[m_iObjs - 1]->GetParam(TIMTIC_NUME)); + iDeno = atoi(m_pParamPacks[m_iObjs - 1]->GetParam(TIMTIC_DENO)); + if ( iNume <= 0 || iDeno <= 0 ) + { + return CFG_ERR_PARAM; + } + + m_iNume = iNume; + m_iDeno = iDeno; + + return CFG_ERR_OK; + } + + return CFG_ERR_NOPROC; +} + + +// 文字列を展開 +int CApiTimTic::AutoId(void) +{ + return CFG_ERR_OK; +} + + +// ID 定義ファイル書き出し +void CApiTimTic::WriteId(FILE* fp) +{ + fprintf( + fp, + "\n\n" + "/* time tic */\n" + "#define TIC_NUME\t\t%d\n" + "#define TIC_DENO\t\t%d\n", + m_iNume, + m_iDeno); +} + + +// cfgファイル定義部書き出し +void CApiTimTic::WriteCfgDef(FILE* fp) +{ + fputs( + "\n\n\n" + "/* ------------------------------------------ */\n" + "/* set time tic */\n" + "/* ------------------------------------------ */\n" + "\n" + "const UW kernel_tic_deno = TIC_DENO;\n" + "const UW kernel_tic_div = TIC_NUME / TIC_DENO;\n" + "const UW kernel_tic_mod = TIC_NUME % TIC_DENO;\n", + fp); +} + + +// --------------------------------------------------------------------------- +// Copyright (C) 1998-2003 by Project HOS +// --------------------------------------------------------------------------- diff --git a/document/profile.txt b/document/profile.txt new file mode 100755 index 0000000..57b4c4e --- /dev/null +++ b/document/profile.txt @@ -0,0 +1,18 @@ +<プロファイル候補(config以下の設定サンプル案)> +minimum ここまで小さく出来るのだというのを誇示するためのものw。実用無視のジョークのような設定 +tiny 実用最小レベルのセット +car 自動車プロファイル +compact スタンダードプロファイルからタスク例外処理とか少し抜いたもの +standard スタンダードプロファイルぴったりの設定 +midium 動的生成を使う場合のに現実的なライン +full 実用範囲のフルセット +maximum ここまで大きく出来るのだというのを誇示するためのもの。実用無視のジョークのような設定(64bitのIDとか?) + + +realtime リアルタイム保証のことしか考えてないセッティング + (TA_TPRIしかない、でもmtxはある、でも動的生成は無い、でもレディーキューアルゴはリッチとかの偏ったセッティングw) + +no-realtime 裏を返してTSS向けなな設定もあり? + (TA_FIFOしかない、そもそもタスク優先度がないとか(笑)。タイマハンドラからrot_rdqしてTSSしてつかう? + キュー操作がとことん単純な分、平均パフォーマンスは出るかも)。 + diff --git a/kernel/build/arm/ADuC7019/gcc/gmake.mak b/kernel/build/arm/ADuC7019/gcc/gmake.mak new file mode 100755 index 0000000..abb8905 --- /dev/null +++ b/kernel/build/arm/ADuC7019/gcc/gmake.mak @@ -0,0 +1,123 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# makefile for ADuC7019/20/21/22/24/25/26/27 +# +# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + +# ターゲット名 +TARGET ?= libhosv4a + +# アーキテクチャパス +ARCH_PROC ?= arm/arm_v4t +ARCH_IRC ?= arm/ADuC7019 +ARCH_CC ?= gcc + + +# ディレクトリ定義 +TOP_DIR = ../../../../.. +KNL_DIR = $(TOP_DIR)/kernel +OBJS_DIR = objs_$(TARGET) + +# インクルードディレクトリ定義 +INC_KNL_DIR = $(KNL_DIR)/include +INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC) +INC_IRC_DIR = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# ソースディレクトリ定義 +SRC_KNL_DIR = $(KNL_DIR)/source +SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC) +SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC) +SRC_IRC_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC) +SRC_IRC_ASM_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC) + +# コンフィギュレータ定義 +CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc +CFGRTR = h4acfg-ADuC7026 + + +# 共通設定インクルード +include $(TOP_DIR)/kernel/build/common/gmake.inc + + +# ターゲットライブラリファイル名 +TARGET_LIB = $(TARGET).a + +# アセンブラファイルの追加 +ASRCS += $(SRC_PROC_DIR)/gcc/armctx.S \ + $(SRC_PROC_DIR)/gcc/armirq.S + + +# C言語ファイルの追加 +CSRCS += $(SRC_IRC_DIR)/intc.c + + +# 検索パスの追加 +VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR) + + +# Tools +CC = arm-elf-gcc +ASM = arm-elf-gcc +LIBR = arm-elf-ar +DEPEND = arm-elf-gcc -M +LINT = splint +AWK = gawk +LINT = splint +MKDIR = mkdir +RM = rm + + +# オプションフラグ +AFLAGS += -c -Wall -mcpu=arm7tdmi +CFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) \ + -c -Wall -mcpu=arm7tdmi +LFLAGS += +LINTFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) -weak + + +# オブジェクトファイル +OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS))))) \ + $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS))))) + + +all: $(ASRCS) $(CSRCS) $(TARGET_LIB) $(CFGRTR) + + +$(TARGET_LIB): mkdir_objs $(OBJS) + $(LIBR) -r $(TARGET_LIB) $(OBJS) + +mkdir_objs: + $(MKDIR) -p $(OBJS_DIR) + + +$(CFGRTR): + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) + +clean: + $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean + +lint: + $(LINT) $(LINTFLAGS) $(CSRCS) + +depend: + $(DEPEND) $(CFLAGS) $(CSRCS) | awk '/^[^ ]/{print "$(OBJS_DIR)/"$$0} /^ /{print $$0}' > $(OBJS_DIR)/depend.inc + + +-include $(OBJS_DIR)/depend.inc + + +# 推論規則 +$(OBJS_DIR)/%.o :: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJS_DIR)/%.o :: %.S + $(ASM) $(AFLAGS) $< -o $@ + + +# end of file diff --git a/kernel/build/arm/ADuC7019/rvct/gmake.mak b/kernel/build/arm/ADuC7019/rvct/gmake.mak new file mode 100755 index 0000000..e3cc621 --- /dev/null +++ b/kernel/build/arm/ADuC7019/rvct/gmake.mak @@ -0,0 +1,116 @@ +# ---------------------------------------------------------------------------- +# +# +# +# ---------------------------------------------------------------------------- + + + +# ターゲット名 +TARGET ?= libhosv4a + +# アーキテクチャパス +ARCH_PROC ?= arm_v4t +ARCH_IRC ?= arm/ADuC7026 + + + +# ディレクトリ定義 +TOP_DIR = ../../../../.. +KNL_DIR = $(TOP_DIR)/kernel +OBJS_DIR = objs_$(TARGET) + +# インクルードディレクトリ定義 +INC_KNL_DIR = $(KNL_DIR)/include +INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC) +INC_IRC_DIR = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# ソースディレクトリ定義 +SRC_KNL_DIR = $(KNL_DIR)/source +SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC) +SRC_IRC_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# コンフィギュレータ定義 +CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc +CFGRTR = h4acfg-$(ARCH_PROC) + + +# 共通設定インクルード +include $(TOP_DIR)/kernel/build/common/gmake.inc + + +# ターゲットライブラリファイル名 +TARGET_LIB = $(TARGET).a + +# アセンブラファイルの追加 +ASRCS += $(SRC_PROC_DIR)/rvds/armctx.s \ + $(SRC_PROC_DIR)/rvds/armirq.s + + +# C言語ファイルの追加 +CSRCS += $(SRC_IRC_DIR)/armintc.c + + +# 検索パスの追加 +VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR)/rvct:$(SRC_IRC_DIR) + + +# Tools +CC = armcc --thumb +ASM = armasm +LIBR = armar +DEPEND = armcc -M +LINT = splint +MKDIR = mkdir +RM = rm + + +# オプションフラグ +AFLAGS += --cpu=ARM7TDMI +CFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) --thumb --apcs /interwork --cpu=ARM7TDMI +LFLAGS += +LINTFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) -weak + + +# オブジェクトファイル +OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS))))) \ + $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS))))) + + +all: $(TARGET_LIB) $(CFGRTR) + + +$(TARGET_LIB): mkdir_objs $(OBJS) + $(LIBR) -r $(TARGET_LIB) $(OBJS) + +mkdir_objs: + $(MKDIR) -p $(OBJS_DIR) + + +$(CFGRTR): + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) + cp $(CFGRTR_DIR)/$(CFGRTR) . + +clean: + $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) clean + +lint: + $(LINT) $(LINTFLAGS) $(CSRCS) + +depend: + $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc + + +-include $(OBJS_DIR)/depend.inc + + +# 推論規則 +$(OBJS_DIR)/%.o :: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJS_DIR)/%.o :: %.s + $(ASM) $(AFLAGS) $< -o $@ + + +# end of file diff --git a/kernel/build/common/gmake.inc b/kernel/build/common/gmake.inc new file mode 100755 index 0000000..205a937 --- /dev/null +++ b/kernel/build/common/gmake.inc @@ -0,0 +1,103 @@ + +KERNEL_DIR = $(TOP_DIR)/kernel +SRC_DIR = $(KERNEL_DIR)/source +INC_DIR = $(KERNEL_DIR)/include + +CORE_DIR = $(SRC_DIR)/core +OBJ_DIR = $(SRC_DIR)/object + +DSP_DIR = $(CORE_DIR)/dsp +QUE_DIR = $(CORE_DIR)/que +TOQ_DIR = $(CORE_DIR)/toq +HEP_DIR = $(CORE_DIR)/hep + +SYSOBJ_DIR = $(OBJ_DIR)/sys +TSKOBJ_DIR = $(OBJ_DIR)/tsk +SEMOBJ_DIR = $(OBJ_DIR)/sem +FLGOBJ_DIR = $(OBJ_DIR)/flg +MBXOBJ_DIR = $(OBJ_DIR)/mbx +MPFOBJ_DIR = $(OBJ_DIR)/mpf +INHOBJ_DIR = $(OBJ_DIR)/inh +ISROBJ_DIR = $(OBJ_DIR)/isr +TIMOBJ_DIR = $(OBJ_DIR)/tim + + +VPATH := $(VPATH):$(DSP_DIR):$(QUE_DIR):$(TOQ_DIR):$(HEP_DIR):$(SYSOBJ_DIR):$(TSKOBJ_DIR) +VPATH := $(VPATH):$(SEMOBJ_DIR):$(FLGOBJ_DIR):$(MBXOBJ_DIR):$(MPFOBJ_DIR):$(INHOBJ_DIR):$(ISROBJ_DIR):$(TIMOBJ_DIR) + + +CSRCS += $(DSP_DIR)/ent_tsk.c \ + $(DSP_DIR)/dsp_tsk.c \ + $(DSP_DIR)/idl_lop.c \ + $(QUE_DIR)/add_que.c \ + $(QUE_DIR)/adf_que.c \ + $(QUE_DIR)/adp_que.c \ + $(QUE_DIR)/rmv_que.c \ + $(QUE_DIR)/rmh_que.c \ + $(QUE_DIR)/trm_que.c \ + $(QUE_DIR)/nxt_que.c \ + $(QUE_DIR)/rot_que.c \ + $(TOQ_DIR)/sig_toq.c \ + $(TOQ_DIR)/add_toq.c \ + $(TOQ_DIR)/rmv_toq.c \ + $(HEP_DIR)/cre_hep.c \ + $(HEP_DIR)/alc_hep.c \ + $(HEP_DIR)/fre_hep.c \ + $(SYSOBJ_DIR)/sta_knl.c \ + $(SYSOBJ_DIR)/get_tid.c \ + $(SYSOBJ_DIR)/loc_cpu.c \ + $(SYSOBJ_DIR)/unl_cpu.c \ + $(SYSOBJ_DIR)/sns_loc.c \ + $(SYSOBJ_DIR)/ena_dsp.c \ + $(SYSOBJ_DIR)/dis_dsp.c \ + $(SYSOBJ_DIR)/sns_dsp.c \ + $(SYSOBJ_DIR)/sns_ctx.c \ + $(TSKOBJ_DIR)/acre_tsk.c \ + $(TSKOBJ_DIR)/kcre_tsk.c \ + $(TSKOBJ_DIR)/act_tsk.c \ + $(TSKOBJ_DIR)/ext_tsk.c \ + $(TSKOBJ_DIR)/slp_tsk.c \ + $(TSKOBJ_DIR)/wup_tsk.c \ + $(TSKOBJ_DIR)/can_wup.c \ + $(TSKOBJ_DIR)/rel_wai.c \ + $(TSKOBJ_DIR)/dly_tsk.c \ + $(TSKOBJ_DIR)/ref_tsk.c \ + $(SEMOBJ_DIR)/cre_sem.c \ + $(SEMOBJ_DIR)/acre_sem.c \ + $(SEMOBJ_DIR)/kcre_sem.c \ + $(SEMOBJ_DIR)/sig_sem.c \ + $(SEMOBJ_DIR)/wai_sem.c \ + $(SEMOBJ_DIR)/pol_sem.c \ + $(SEMOBJ_DIR)/twai_sem.c \ + $(SEMOBJ_DIR)/ref_sem.c \ + $(FLGOBJ_DIR)/cre_flg.c \ + $(FLGOBJ_DIR)/acre_flg.c \ + $(FLGOBJ_DIR)/kcre_flg.c \ + $(FLGOBJ_DIR)/set_flg.c \ + $(FLGOBJ_DIR)/clr_flg.c \ + $(FLGOBJ_DIR)/wai_flg.c \ + $(FLGOBJ_DIR)/pol_flg.c \ + $(FLGOBJ_DIR)/twai_flg.c \ + $(FLGOBJ_DIR)/kchk_flg.c \ + $(FLGOBJ_DIR)/ref_flg.c \ + $(MBXOBJ_DIR)/acre_mbx.c \ + $(MBXOBJ_DIR)/kcre_mbx.c \ + $(MBXOBJ_DIR)/snd_mbx.c \ + $(MBXOBJ_DIR)/rcv_mbx.c \ + $(MBXOBJ_DIR)/kadd_msg.c \ + $(MBXOBJ_DIR)/krmv_msg.c \ + $(MPFOBJ_DIR)/acre_mpf.c \ + $(MPFOBJ_DIR)/kcre_mpf.c \ + $(MPFOBJ_DIR)/get_mpf.c \ + $(MPFOBJ_DIR)/pget_mpf.c \ + $(MPFOBJ_DIR)/rel_mpf.c \ + $(INHOBJ_DIR)/def_inh.c \ + $(INHOBJ_DIR)/sta_inh.c \ + $(INHOBJ_DIR)/exe_inh.c \ + $(INHOBJ_DIR)/end_inh.c \ + $(ISROBJ_DIR)/acre_isr.c \ + $(ISROBJ_DIR)/kcre_isr.c \ + $(ISROBJ_DIR)/exe_isr.c \ + $(TIMOBJ_DIR)/isig_tim.c + + diff --git a/kernel/build/h8/h8300ha/ch38/gmake.mak b/kernel/build/h8/h8300ha/ch38/gmake.mak new file mode 100755 index 0000000..f0ceb37 --- /dev/null +++ b/kernel/build/h8/h8300ha/ch38/gmake.mak @@ -0,0 +1,128 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# makefile for H8/300H +# +# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + + +# ターゲット名 +TARGET ?= libhosv4a + +# アーキテクチャパス +ARCH_PROC ?= h8/h8300ha +ARCH_IRC ?= none +ARCH_CC ?= ch83 + + +# ディレクトリ定義 +TOP_DIR = ../../../../.. +KNL_DIR = $(TOP_DIR)/kernel +OBJS_DIR = objs_$(TARGET) + +# インクルードディレクトリ定義 +INC_KNL_DIR = $(KNL_DIR)/include +INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC) +INC_IRC_DIR = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# ソースディレクトリ定義 +SRC_KNL_DIR = $(KNL_DIR)/source +SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC) +SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC) +SRC_IRC_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC) +SRC_IRC_ASM_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC) + +# コンフィギュレータ定義 +CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc +CFGRTR = h4acfg-h8300ha + + +# 共通設定インクルード +include $(TOP_DIR)/kernel/build/common/gmake.inc + + +# ターゲットライブラリファイル名 +TARGET_LIB = $(TARGET).lib + +# アセンブラファイルの追加 +ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.src \ + +# $(SRC_PROC_ASM_DIR)/gcc/intctl.src + + +# C言語ファイルの追加 +# CSRCS += $(SRC_IRC_DIR)/intc.c + + +# 検索パスの追加 +VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR) + + +# Tools +CC = ch38 +ASM = asm38 +LIBR = optlnk +DEPEND = depend +LINT = splint +AWK = gawk +MKDIR = mkdir +RM = rm + + +# オプションフラグ +AFLAGS += -CP=300HA:24 -DEBug +CFLAGS += -CP=300HA:24 -DEBug -I=$(INC_KNL_DIR) -I=$(INC_PROC_DIR) -I=$(INC_IRC_DIR) +LFLAGS += -FOrm=Library +LINTFLAGS += -weak -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) + + + +# オブジェクトファイル +OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(CSRCS))))) \ + $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(ASRCS))))) + + +all: $(TARGET_LIB) mk_cfgrtr + + +$(TARGET_LIB): mkdir_objs $(OBJS) + echo -Input=$(OBJS) | sed "s/ /,/g" > $(OBJ_DIR)/subcmd.txt + echo -OUtput=$(TARGET_LIB) >> $(OBJ_DIR)/subcmd.txt + echo -FOrm=Library >> $(OBJ_DIR)/subcmd.txt + $(RM) -f $(TARGET_LIB) + $(LIBR) -SU=$(OBJ_DIR)/subcmd.txt + +mkdir_objs: + $(MKDIR) -p $(OBJS_DIR) + + +mk_cfgrtr: + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) + +clean: + $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) $(OBJS_DIR)/*.lst + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean + +#lint: +# $(LINT) $(LINTFLAGS) $(CSRCS) + +#depend: +# $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc + + +-include $(OBJS_DIR)/depend.inc + + +# 推論規則 +$(OBJS_DIR)/%.obj :: %.c + $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst) + +$(OBJS_DIR)/%.obj :: %.src + $(ASM) $(AFLAGS) $< -OB=$@ + + +# end of file diff --git a/kernel/build/h8/h8s2600a/ch38/gmake.mak b/kernel/build/h8/h8s2600a/ch38/gmake.mak new file mode 100755 index 0000000..0e5b6c6 --- /dev/null +++ b/kernel/build/h8/h8s2600a/ch38/gmake.mak @@ -0,0 +1,192 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# makefile for H8/300H +# +# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + + +# ターゲット名 +TARGET ?= libhosv4a + +# アーキテクチャパス +ARCH_PROC ?= h8/h8s2600a +ARCH_IRC ?= none +ARCH_CC ?= ch83 + + +# ディレクトリ定義 +TOP_DIR = ../../../../.. +KNL_DIR = $(TOP_DIR)/kernel +OBJS_DIR = objs_$(TARGET) + +# インクルードディレクトリ定義 +INC_KNL_DIR = $(KNL_DIR)/include +INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC) +INC_IRC_DIR = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# ソースディレクトリ定義 +SRC_KNL_DIR = $(KNL_DIR)/source +SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC) +SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC) +SRC_IRC_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC) +SRC_IRC_ASM_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC) + +# コンフィギュレータ定義 +CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc +CFGRTR = h4acfg-h8s2600a + + +# 共通設定インクルード +include $(TOP_DIR)/kernel/build/common/gmake.inc + + +# ターゲットライブラリファイル名 +TARGET_LIB = $(TARGET).lib + +# アセンブラファイルの追加 +ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.src \ + $(SRC_PROC_ASM_DIR)/intctl.src \ + $(SRC_PROC_ASM_DIR)/vect_001.src \ + $(SRC_PROC_ASM_DIR)/vect_002.src \ + $(SRC_PROC_ASM_DIR)/vect_003.src \ + $(SRC_PROC_ASM_DIR)/vect_004.src \ + $(SRC_PROC_ASM_DIR)/vect_005.src \ + $(SRC_PROC_ASM_DIR)/vect_006.src \ + $(SRC_PROC_ASM_DIR)/vect_007.src \ + $(SRC_PROC_ASM_DIR)/vect_008.src \ + $(SRC_PROC_ASM_DIR)/vect_009.src \ + $(SRC_PROC_ASM_DIR)/vect_010.src \ + $(SRC_PROC_ASM_DIR)/vect_011.src \ + $(SRC_PROC_ASM_DIR)/vect_012.src \ + $(SRC_PROC_ASM_DIR)/vect_013.src \ + $(SRC_PROC_ASM_DIR)/vect_014.src \ + $(SRC_PROC_ASM_DIR)/vect_015.src \ + $(SRC_PROC_ASM_DIR)/vect_016.src \ + $(SRC_PROC_ASM_DIR)/vect_017.src \ + $(SRC_PROC_ASM_DIR)/vect_018.src \ + $(SRC_PROC_ASM_DIR)/vect_019.src \ + $(SRC_PROC_ASM_DIR)/vect_020.src \ + $(SRC_PROC_ASM_DIR)/vect_021.src \ + $(SRC_PROC_ASM_DIR)/vect_022.src \ + $(SRC_PROC_ASM_DIR)/vect_023.src \ + $(SRC_PROC_ASM_DIR)/vect_024.src \ + $(SRC_PROC_ASM_DIR)/vect_025.src \ + $(SRC_PROC_ASM_DIR)/vect_026.src \ + $(SRC_PROC_ASM_DIR)/vect_027.src \ + $(SRC_PROC_ASM_DIR)/vect_028.src \ + $(SRC_PROC_ASM_DIR)/vect_029.src \ + $(SRC_PROC_ASM_DIR)/vect_030.src \ + $(SRC_PROC_ASM_DIR)/vect_031.src \ + $(SRC_PROC_ASM_DIR)/vect_032.src \ + $(SRC_PROC_ASM_DIR)/vect_033.src \ + $(SRC_PROC_ASM_DIR)/vect_034.src \ + $(SRC_PROC_ASM_DIR)/vect_035.src \ + $(SRC_PROC_ASM_DIR)/vect_036.src \ + $(SRC_PROC_ASM_DIR)/vect_037.src \ + $(SRC_PROC_ASM_DIR)/vect_038.src \ + $(SRC_PROC_ASM_DIR)/vect_039.src \ + $(SRC_PROC_ASM_DIR)/vect_040.src \ + $(SRC_PROC_ASM_DIR)/vect_041.src \ + $(SRC_PROC_ASM_DIR)/vect_042.src \ + $(SRC_PROC_ASM_DIR)/vect_043.src \ + $(SRC_PROC_ASM_DIR)/vect_044.src \ + $(SRC_PROC_ASM_DIR)/vect_045.src \ + $(SRC_PROC_ASM_DIR)/vect_046.src \ + $(SRC_PROC_ASM_DIR)/vect_047.src \ + $(SRC_PROC_ASM_DIR)/vect_048.src \ + $(SRC_PROC_ASM_DIR)/vect_049.src \ + $(SRC_PROC_ASM_DIR)/vect_050.src \ + $(SRC_PROC_ASM_DIR)/vect_051.src \ + $(SRC_PROC_ASM_DIR)/vect_052.src \ + $(SRC_PROC_ASM_DIR)/vect_053.src \ + $(SRC_PROC_ASM_DIR)/vect_054.src \ + $(SRC_PROC_ASM_DIR)/vect_055.src \ + $(SRC_PROC_ASM_DIR)/vect_056.src \ + $(SRC_PROC_ASM_DIR)/vect_057.src \ + $(SRC_PROC_ASM_DIR)/vect_058.src \ + $(SRC_PROC_ASM_DIR)/vect_059.src \ + $(SRC_PROC_ASM_DIR)/vect_060.src \ + $(SRC_PROC_ASM_DIR)/vect_061.src \ + $(SRC_PROC_ASM_DIR)/vect_062.src \ + $(SRC_PROC_ASM_DIR)/vect_063.src \ + $(SRC_PROC_ASM_DIR)/vect_dmy.src + + + +# C言語ファイルの追加 +# CSRCS += $(SRC_IRC_DIR)/intc.c + + +# 検索パスの追加 +VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR) + + +# Tools +CC = ch38 +ASM = asm38 +LIBR = optlnk +DEPEND = depend +LINT = splint +AWK = gawk +MKDIR = mkdir +RM = rm + + +# オプションフラグ +AFLAGS += -CP=2600A -DEBug +CFLAGS += -CP=2600A -DEBug -I=$(INC_KNL_DIR) -I=$(INC_PROC_DIR) -I=$(INC_IRC_DIR) +LFLAGS += -FOrm=Library +LINTFLAGS += -weak -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) + + + +# オブジェクトファイル +OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(CSRCS))))) \ + $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(ASRCS))))) + + +all: $(TARGET_LIB) mk_cfgrtr + + +$(TARGET_LIB): mkdir_objs $(OBJS) + echo -Input=$(OBJS) | sed "s/ /,/g" > $(OBJ_DIR)/subcmd.txt + echo -OUtput=$(TARGET_LIB) >> $(OBJ_DIR)/subcmd.txt + echo -FOrm=Library >> $(OBJ_DIR)/subcmd.txt + $(RM) -f $(TARGET_LIB) + $(LIBR) -SU=$(OBJ_DIR)/subcmd.txt + +mkdir_objs: + $(MKDIR) -p $(OBJS_DIR) + + +mk_cfgrtr: + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) + +clean: + $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) $(OBJS_DIR)/*.lst + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean + +#lint: +# $(LINT) $(LINTFLAGS) $(CSRCS) + +#depend: +# $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc + + +-include $(OBJS_DIR)/depend.inc + + +# 推論規則 +$(OBJS_DIR)/%.obj :: %.c + $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst) + +$(OBJS_DIR)/%.obj :: %.src + $(ASM) $(AFLAGS) $< -OB=$@ + + +# end of file diff --git a/kernel/build/mn103/mn1030/gcc/gmake.mak b/kernel/build/mn103/mn1030/gcc/gmake.mak new file mode 100755 index 0000000..def8a39 --- /dev/null +++ b/kernel/build/mn103/mn1030/gcc/gmake.mak @@ -0,0 +1,123 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# makefile for MN1030 Series +# +# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + +# ターゲット名 +TARGET ?= libhosv4a + +# アーキテクチャパス +ARCH_PROC ?= mn103/mn1030 +ARCH_IRC ?= none +ARCH_CC ?= gcc + + +# ディレクトリ定義 +TOP_DIR = ../../../../.. +KNL_DIR = $(TOP_DIR)/kernel +OBJS_DIR = objs_$(TARGET) + +# インクルードディレクトリ定義 +INC_KNL_DIR = $(KNL_DIR)/include +INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC) +INC_IRC_DIR = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# ソースディレクトリ定義 +SRC_KNL_DIR = $(KNL_DIR)/source +SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC) +SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC) +SRC_IRC_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC) +SRC_IRC_ASM_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC) + +# コンフィギュレータ定義 +CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc +CFGRTR = h4acfg-mn1030 + + +# 共通設定インクルード +include $(TOP_DIR)/kernel/build/common/gmake.inc + + +# ターゲットライブラリファイル名 +TARGET_LIB = $(TARGET).a + +# アセンブラファイルの追加 +ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.S \ + $(SRC_PROC_ASM_DIR)/intctl.S + + +# C言語ファイルの追加 +# CSRCS += $(SRC_IRC_DIR)/intc.c + + +# 検索パスの追加 +VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR) + + +# Tools +CC = mn10300-elf-gcc +ASM = mn10300-elf-gcc +LIBR = mn10300-elf-ar +DEPEND = mn10300-elf-gcc -M +LINT = splint +AWK = gawk +LINT = splint +MKDIR = mkdir +RM = rm + + +# オプションフラグ +AFLAGS += -c -Wall +CFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) \ + -c -Wall +LFLAGS += +LINTFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) -weak + + +# オブジェクトファイル +OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS))))) \ + $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS))))) + + +all: $(ASRCS) $(CSRCS) $(TARGET_LIB) $(CFGRTR) + + +$(TARGET_LIB): mkdir_objs $(OBJS) + $(LIBR) -r $(TARGET_LIB) $(OBJS) + +mkdir_objs: + $(MKDIR) -p $(OBJS_DIR) + + +$(CFGRTR): + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) + +clean: + $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean + +lint: + $(LINT) $(LINTFLAGS) $(CSRCS) + +depend: + $(DEPEND) $(CFLAGS) $(CSRCS) | awk '/^[^ ]/{print "$(OBJS_DIR)/"$$0} /^ /{print $$0}' > $(OBJS_DIR)/depend.inc + + +-include $(OBJS_DIR)/depend.inc + + +# 推論規則 +$(OBJS_DIR)/%.o :: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJS_DIR)/%.o :: %.S + $(ASM) $(AFLAGS) $< -o $@ + + +# end of file diff --git a/kernel/build/sh/sh2/gcc/gmake.mak b/kernel/build/sh/sh2/gcc/gmake.mak new file mode 100755 index 0000000..93b76fd --- /dev/null +++ b/kernel/build/sh/sh2/gcc/gmake.mak @@ -0,0 +1,122 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# makefile for sh2 +# +# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + + +# ターゲット名 +TARGET ?= libhosv4a + +# アーキテクチャパス +ARCH_PROC ?= sh/sh2 +ARCH_IRC ?= none +ARCH_CC ?= gcc + +# ディレクトリ定義 +TOP_DIR = ../../../../.. +KNL_DIR = $(TOP_DIR)/kernel +OBJS_DIR = objs_$(TARGET) + +# インクルードディレクトリ定義 +INC_KNL_DIR = $(KNL_DIR)/include +INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC) +INC_IRC_DIR = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# ソースディレクトリ定義 +SRC_KNL_DIR = $(KNL_DIR)/source +SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC) +SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC) +SRC_IRC_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC) +SRC_IRC_ASM_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC) + +# コンフィギュレータ定義 +CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc +CFGRTR = h4acfg-sh2 + + +# 共通設定インクルード +include $(TOP_DIR)/kernel/build/common/gmake.inc + + +# ターゲットライブラリファイル名 +TARGET_LIB = $(TARGET).a + +# アセンブラファイルの追加 +ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.S \ + $(SRC_PROC_ASM_DIR)/intctl.S + + +# C言語ファイルの追加 +# CSRCS += $(SRC_IRC_DIR)/intc.c + + +# 検索パスの追加 +VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR) + + +# Tools +CC = sh-elf-gcc +ASM = sh-elf-gcc +LIBR = sh-elf-ar +DEPEND = sh-elf-gcc -M +LINT = splint +AWK = gawk +MKDIR = mkdir +RM = rm + + +# オプションフラグ +AFLAGS += -c -m2 +CFLAGS += -c -m2 -Wall -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) +LFLAGS += +LINTFLAGS += -weak -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) + + + +# オブジェクトファイル +OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS))))) \ + $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS))))) + + +all: $(TARGET_LIB) mk_cfgrtr + + +$(TARGET_LIB): mkdir_objs $(OBJS) + $(LIBR) -r $(TARGET_LIB) $(OBJS) + +mkdir_objs: + $(MKDIR) -p $(OBJS_DIR) + + +mk_cfgrtr: + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) + +clean: + $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean + +lint: + $(LINT) $(LINTFLAGS) $(CSRCS) + +depend: + $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc + + +-include $(OBJS_DIR)/depend.inc + + +# 推論規則 +$(OBJS_DIR)/%.o :: %.c + $(CC) $(CFLAGS) $< -o $@ + +$(OBJS_DIR)/%.o :: %.S + $(ASM) $(AFLAGS) $< -o $@ + + +# end of file diff --git a/kernel/build/sh/sh2/hew/hosv4a.Hbp b/kernel/build/sh/sh2/hew/hosv4a.Hbp new file mode 100755 index 0000000..ff4ea30 --- /dev/null +++ b/kernel/build/sh/sh2/hew/hosv4a.Hbp @@ -0,0 +1,2 @@ +[Setting] +ToolChain=0 diff --git a/kernel/build/sh/sh2/hew/hosv4a.hws b/kernel/build/sh/sh2/hew/hosv4a.hws new file mode 100755 index 0000000..3403035 --- /dev/null +++ b/kernel/build/sh/sh2/hew/hosv4a.hws @@ -0,0 +1,38 @@ +[HIMDBVersion] +2.0 +[DATABASE_VERSION] +"7.0" +[WORKSPACE_DETAILS] +"hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a.hws" "SuperH RISC engine" "Renesas SuperH Standard" +[SHARED_WORKSPACE_CONTROL_STATUS] +"" "" "" +"" "" "" +[PROJECTS] +"hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\hosv4a.hwp" 0 +[INFORMATION] +"ワークスペース情報がありません" +[SCRAP] +[PROJECT_DEPENDENCY] +[WORKSPACE_PROPERTIES] +[VCS] +"" "" "" 0 +[VCS_PROJECT] +[HELP_FILES] +"c:\program files\renesas\hew\tools\renesas\sh\9_0_2\hew\stdlib.hlp" "C/C++ Standard Library Help" 1 +[GENERAL_DATA_PROJECT] +[SYSMENUTOOLS] +"Hitachi Mapview" "1.0" +"Hitachi Call Walker" "1.1" +"Hitachi H Series Librarian Interface" "1.1" +[USERMENUTOOLS] +[CUSTOMPLACEHOLDERS] +[MAKEFILE_BUILD_INFO] +"$(WORKSPDIR)\make\$(WORKSPNAME).mak" "" 0 0 +[VD_CONFIGURATION_OPTIONS] +"ACTIVE_DESKTOP" "0" +[VD_CONFIGURATIONS] +"3" "Default4" "1" +"2" "Default3" "1" +"1" "Default2" "1" +"0" "Default1" "1" +[END] diff --git a/kernel/build/sh/sh2/hew/hosv4a.tws b/kernel/build/sh/sh2/hew/hosv4a.tws new file mode 100755 index 0000000..a5cb801 --- /dev/null +++ b/kernel/build/sh/sh2/hew/hosv4a.tws @@ -0,0 +1,11 @@ +[HIMDBVersion] +2.0 +[DATABASE_VERSION] +"1.0" +[CURRENT_PROJECT] +"hosv4a" +[GENERAL_DATA] +[BREAKPOINTS] +[OPEN_WORKSPACE_FILES] +[WORKSPACE_FILE_STATES] +[END] diff --git a/kernel/build/sh/sh2/hew/hosv4a/Readme.txt b/kernel/build/sh/sh2/hew/hosv4a/Readme.txt new file mode 100755 index 0000000..78311ea --- /dev/null +++ b/kernel/build/sh/sh2/hew/hosv4a/Readme.txt @@ -0,0 +1,8 @@ +-------- PROJECT GENERATOR -------- +PROJECT NAME : hosv4a +PROJECT DIRECTORY : C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a +CPU SERIES : SH-2 +TOOLCHAIN NAME : Renesas SuperH RISC engine Standard Toolchain +TOOLCHAIN VERSION : 9.0.2.0 + +DATE & TIME : 2006/06/11 16:45:34 diff --git a/kernel/build/sh/sh2/hew/hosv4a/hosv4a.hwp b/kernel/build/sh/sh2/hew/hosv4a/hosv4a.hwp new file mode 100755 index 0000000..c81c5e4 --- /dev/null +++ b/kernel/build/sh/sh2/hew/hosv4a/hosv4a.hwp @@ -0,0 +1,298 @@ +[HIMDBVersion] +2.0 +[DATABASE_VERSION] +"2.7" +[PROJECT_DETAILS] +"hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\hosv4a.hwp" "SuperH RISC engine" "Renesas SuperH Standard" "Library" "SH-2" "Other" +[INFORMATION] +"プロジェクト情報がありません" +[TOOL_CHAIN] +"Renesas SuperH RISC engine Standard Toolchain" "9.0.2.0" +[CONFIGURATIONS] +"Release" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\Release" +"Debug" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\Debug" +[BUILD_PHASES] +"Renesas SH C/C++ Library Generator" 1 +"Renesas SH C/C++ Compiler" 1 +"Renesas SH Assembler" 1 +"Renesas OptLinker" 1 +[DEFINITION_PARSERS] +[TOOL_ENVIRONMENT] +[EXTENSIONS] +"CPU information file" "CPU" +"Absolute file" "ABS" +"Stack information file" "SNI" +"Profile file" "PRO" +"C++ list file" "LPP" +"Linkage map file" "MAP" +"C++ header file" "HPP" +"C++ source file" "CPP" +"C header file" "H" +"C source file" "C" +"Hex file" "HEX" +"S-Record file" "MOT" +"Object file" "OBJ" +"Optimize map file" "bls" +"Relocatable file" "REL" +"Assembly source file" "SRC" +"Assembly source file" "ASM" +"Expanded assembly source file" "EXP" +"Preprocessed C source file" "P" +"C list file" "LST" +"Linkage symbol file" "FSY" +"Binary file" "BIN" +"Library file" "LIB" +"Assembly include file" "INC" +"Library information file" "LBP" +"Assembly list file" "LIS" +"Preprocessed C++ source file" "PP" +[FILE_GROUPS] +"CPU information file" "BIN" "NONE" "" +"Absolute file" "BIN" "NONE" "" +"Stack information file" "BIN" "NONE" "" +"Profile file" "BIN" "NONE" "" +"C++ list file" "TEXT" "EDITOR" "" +"Linkage map file" "TEXT" "EDITOR" "" +"C++ header file" "TEXT" "EDITOR" "" +"C++ source file" "TEXT" "EDITOR" "" +"C header file" "TEXT" "EDITOR" "" +"C source file" "TEXT" "EDITOR" "" +"Hex file" "TEXT" "EDITOR" "" +"S-Record file" "TEXT" "EDITOR" "" +"Object file" "BIN" "NONE" "" +"Optimize map file" "BIN" "NONE" "" +"Relocatable file" "BIN" "NONE" "" +"Assembly source file" "TEXT" "EDITOR" "" +"Expanded assembly source file" "TEXT" "EDITOR" "" +"Preprocessed C source file" "TEXT" "EDITOR" "" +"C list file" "TEXT" "EDITOR" "" +"Linkage symbol file" "TEXT" "EDITOR" "" +"Binary file" "BIN" "NONE" "" +"Library file" "BIN" "NONE" "" +"Assembly include file" "TEXT" "EDITOR" "" +"Library information file" "TEXT" "EDITOR" "" +"Assembly list file" "TEXT" "EDITOR" "" +"Preprocessed C++ source file" "TEXT" "EDITOR" "" +[ASSOCIATED_APPLICATIONS] +[TOOLCHAIN_PHASE] +"Renesas SH C/C++ Library Generator" +"Renesas SH C/C++ Compiler" +"Renesas SH Assembler" +"Renesas OptLinker" +[UTILITY_PHASE] +[CUSTOM_PHASES] +[CUSTOM_PHASE_INPUT_GROUP] +[BUILD_ORDER] +"Renesas SH C/C++ Library Generator" 1 +"Renesas SH C/C++ Compiler" 1 +"Renesas SH Assembler" 1 +"Renesas OptLinker" 1 +[BUILD_PHASE_DETAILS] +"Renesas SH C/C++ Library Generator" "" 0 +"Renesas SH C/C++ Compiler" "C source file|C++ source file" 1 +"Renesas SH Assembler" "Assembly source file|Linkage symbol file" 1 +"Renesas OptLinker" "Object file|Library file|Relocatable file" 0 +[BUILD_FILE_ORDER_C++ source file] +"Renesas SH C/C++ Compiler" 1 +[BUILD_FILE_ORDER_C source file] +"Renesas SH C/C++ Compiler" 1 +[BUILD_FILE_ORDER_Assembly source file] +"Renesas SH Assembler" 1 +[BUILD_FILE_ORDER_Linkage symbol file] +"Renesas SH Assembler" 1 +[SCRAP] +"Project Generator Setup File" "" +[MAPPINGS] +"Library file" "Renesas OptLinker" "Renesas SH C/C++ Library Generator" +"Assembly source file" "Renesas SH Assembler" "Renesas SH C/C++ Compiler" +"Object file" "Renesas OptLinker" "Renesas SH C/C++ Compiler" +"Object file" "Renesas OptLinker" "Renesas SH Assembler" +[PROJECT_FILES] +"C:\project\hos-v4a\kernel\include\core\toq.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\basetyp.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\cmpl.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\core.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\dsp.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\hep.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\inh.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\opttyp.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\que.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\rdq.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\include\core\sys.h" "User" "inc_core" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\dsp_tsk.c" "User" "dsp" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\ent_tsk.c" "User" "dsp" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\idl_lop.c" "User" "dsp" 2 +"C:\project\hos-v4a\kernel\source\core\hep\alc_hep.c" "User" "hep" 2 +"C:\project\hos-v4a\kernel\source\core\hep\cre_hep.c" "User" "hep" 2 +"C:\project\hos-v4a\kernel\source\core\hep\fre_hep.c" "User" "hep" 2 +"C:\project\hos-v4a\kernel\source\core\inh\end_inh.c" "User" "inh" 2 +"C:\project\hos-v4a\kernel\source\core\inh\exe_inh.c" "User" "inh" 2 +"C:\project\hos-v4a\kernel\source\core\inh\sta_inh.c" "User" "inh" 2 +"C:\project\hos-v4a\kernel\source\core\que\add_que.c" "User" "que" 2 +"C:\project\hos-v4a\kernel\source\core\que\adf_que.c" "User" "que" 2 +"C:\project\hos-v4a\kernel\source\core\que\adp_que.c" "User" "que" 2 +"C:\project\hos-v4a\kernel\source\core\que\rmv_que.c" "User" "que" 2 +"C:\project\hos-v4a\kernel\source\core\que\rot_que.c" "User" "que" 2 +"C:\project\hos-v4a\kernel\source\core\toq\add_toq.c" "User" "toq" 2 +"C:\project\hos-v4a\kernel\source\core\toq\rmv_toq.c" "User" "toq" 2 +"C:\project\hos-v4a\kernel\source\core\toq\tic_toq.c" "User" "toq" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\acre_tsk.c" "User" "tsk" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\act_tsk.c" "User" "tsk" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\cre_tsk.c" "User" "tsk" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\ext_tsk.c" "User" "tsk" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\kcre_tsk.c" "User" "tsk" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\slp_tsk.c" "User" "tsk" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\wup_tsk.c" "User" "tsk" 2 +"C:\project\hos-v4a\kernel\source\object\isr\exe_isr.c" "User" "isr" 2 +"C:\project\hos-v4a\kernel\source\object\sem\sig_sem.c" "User" "sem" 2 +"C:\project\hos-v4a\kernel\source\object\sem\wai_sem.c" "User" "sem" 2 +"C:\project\hos-v4a\kernel\source\object\sys\sta_knl.c" "User" "sys" 2 +"C:\project\hos-v4a\kernel\include\itron.h" "User" "include" 2 +"C:\project\hos-v4a\kernel\include\kernel.h" "User" "include" 2 +"C:\project\hos-v4a\kernel\include\object\isrobj.h" "User" "inc_obj" 2 +"C:\project\hos-v4a\kernel\include\object\semobj.h" "User" "inc_obj" 2 +"C:\project\hos-v4a\kernel\include\object\tskobj.h" "User" "inc_obj" 2 +"C:\project\hos-v4a\kernel\include\parser\parserr.h" "User" "inc_parser" 2 +"C:\project\hos-v4a\kernel\include\parser\parshok.h" "User" "inc_parser" 2 +"C:\project\hos-v4a\kernel\include\parser\parsknl.h" "User" "inc_parser" 2 +"C:\project\hos-v4a\kernel\include\parser\parssys.h" "User" "inc_parser" 2 +"C:\project\hos-v4a\kernel\include\config\cfgerr.h" "User" "inc_cfg" 2 +"C:\project\hos-v4a\kernel\include\config\cfghok.h" "User" "inc_cfg" 2 +"C:\project\hos-v4a\kernel\include\config\cfgknl.h" "User" "inc_cfg" 2 +"C:\project\hos-v4a\kernel\include\config\cfgsys.h" "User" "inc_cfg" 2 +"C:\project\hos-v4a\kernel\include\arch\proc\sh2\proc.h" "User" "inc_arch" 2 +"C:\project\hos-v4a\kernel\include\arch\proc\sh2\procatr.h" "User" "inc_arch" 2 +"C:\project\hos-v4a\kernel\source\arch\proc\sh2\shc\ctxctl.src" "User" "arch" 2 +[FOLDER] +"inc_obj" "inc_obj" +"inc_arch" "inc_arch" +"isr" "isr" +"sem" "sem" +"include" "include" +"arch" "arch" +"tsk" "tsk" +"sys" "sys" +"inc_parser" "inc_parser" +"que" "que" +"dsp" "dsp" +"hep" "hep" +"inc_core" "inc_core" +"inh" "inh" +"inc_cfg" "inc_cfg" +"toq" "toq" +[GENERAL_DATA_PROJECT] +"USE_CUSTOM_LINKAGE_ORDER" "0" +[ON_DEMAND_COMPONENTS_LOADED] +[SYNC_SESSION_NAMES] +[SESSIONS] +"DefaultSession" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\DefaultSession.hsf" 0 +[GENERAL_DATA_SESSION_DefaultSession] +[OPTIONS_Release_Renesas SH C/C++ Library Generator] +"Single Shot" "072a4c0767d86c10" 1 +[OPTIONS_Release_Renesas SH C/C++ Compiler] +"C:\project\hos-v4a\kernel\source\object\sem\wai_sem.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\cre_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\slp_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\hep\alc_hep.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\inh\exe_inh.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\idl_lop.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\add_que.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\hep\fre_hep.c" "0190b15af8d86c10" 2 +"C++ source file" "0c1fa059f8d86c10" 3 +"C:\project\hos-v4a\kernel\source\core\que\adf_que.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\ext_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\rot_que.c" "0190b15af8d86c10" 2 +"C source file" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\wup_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\toq\rmv_toq.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\inh\end_inh.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\sem\sig_sem.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\isr\exe_isr.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\kcre_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\act_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\acre_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\inh\sta_inh.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\dsp_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\adp_que.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\toq\tic_toq.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\rmv_que.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\hep\cre_hep.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\ent_tsk.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\sys\sta_knl.c" "0190b15af8d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\toq\add_toq.c" "0190b15af8d86c10" 2 +[OPTIONS_Release_Renesas SH Assembler] +"C:\project\hos-v4a\kernel\source\arch\proc\sh2\shc\ctxctl.src" "0b0183abe7d86c10" 4 +"Assembly source file" "072a4c0767d86c10" 4 +"Linkage symbol file" "072a4c0767d86c10" 4 +[OPTIONS_Release_Renesas OptLinker] +"Single Shot" "026f96abe7d86c10" 5 +[OPTIONS_Release] +"" 0 +"[S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [V|VERSION|7] [S|CPU|SH2] [S|ENDIAN|BIG] [S|ROUND|ZERO] [B|DENORMALIZE|0] [B|SPEED|0][B|RUNTIME|1] [B|NEW|1] [B|CTYPE|0] [B|MATH|0] [B|MATHF|0] [B|STDARG|0] [B|STDIO|0] [B|STDLIB|0] [B|STRING|0] [B|IOS|0] [B|COMPLEX|0] [B|CPPSTRING|0] [S|MODE|NOTADD]" 1 +"[V|VERSION|7] [S|INCLUDE|^"$(PROJDIR)\..\..\..\..\..\include^"|^"$(PROJDIR)\..\..\..\..\..\include\arch\proc\sh2^"] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|TBR|0] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [B|LIST|0] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|MISRA_INSPECTION|ALL] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [S|CPU|SH2] [B|CHGINCPATH|1] +" 2 +"[V|VERSION|7] [S|INCLUDE|^"$(PROJDIR)\..\..\..\..\..\include^"] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|TBR|0] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [B|LIST|0] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|MISRA_INSPECTION|ALL] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [S|CPU|SH2] [B|CHGINCPATH|1] +" 3 +"[V|VERSION|6] [B|DEBUG|0] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|LIST|0] [B|CHGINCPATH|1] [B|ERRORPATH|1] [S|CPU|SH2] [S|ENDIAN|BIG] [S|ROUND|ZERO] [B|DENORMALIZE|0]" 4 +"[V|VERSION|6] [B|OPTIMIZE|0] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).abs^"] [S|ROM|(D,R)] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|FORM|LIBRARY|U] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"]" 5 +[OPTIONS_Debug_Renesas SH C/C++ Library Generator] +"Single Shot" "072a4c0767d86c10" 1 +[OPTIONS_Debug_Renesas SH C/C++ Compiler] +"C:\project\hos-v4a\kernel\source\object\sem\wai_sem.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\cre_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\slp_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\hep\alc_hep.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\inh\exe_inh.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\idl_lop.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\add_que.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\hep\fre_hep.c" "019a671bd7d86c10" 2 +"C++ source file" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\adf_que.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\ext_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\rot_que.c" "019a671bd7d86c10" 2 +"C source file" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\wup_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\toq\rmv_toq.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\inh\end_inh.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\sem\sig_sem.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\isr\exe_isr.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\kcre_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\act_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\tsk\acre_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\inh\sta_inh.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\dsp_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\adp_que.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\toq\tic_toq.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\que\rmv_que.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\hep\cre_hep.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\dsp\ent_tsk.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\object\sys\sta_knl.c" "019a671bd7d86c10" 2 +"C:\project\hos-v4a\kernel\source\core\toq\add_toq.c" "019a671bd7d86c10" 2 +[OPTIONS_Debug_Renesas SH Assembler] +"C:\project\hos-v4a\kernel\source\arch\proc\sh2\shc\ctxctl.src" "0b0183abe7d86c10" 3 +"Assembly source file" "072a4c0767d86c10" 3 +"Linkage symbol file" "072a4c0767d86c10" 3 +[OPTIONS_Debug_Renesas OptLinker] +"Single Shot" "026f96abe7d86c10" 4 +[OPTIONS_Debug] +"" 0 +"[S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [V|VERSION|7] [S|CPU|SH2] [S|ENDIAN|BIG] [S|ROUND|ZERO] [B|DENORMALIZE|0] [B|SPEED|0][B|RUNTIME|1] [B|NEW|1] [B|CTYPE|0] [B|MATH|0] [B|MATHF|0] [B|STDARG|0] [B|STDIO|0] [B|STDLIB|0] [B|STRING|0] [B|IOS|0] [B|COMPLEX|0] [B|CPPSTRING|0] [S|MODE|NOTADD]" 1 +"[V|VERSION|7] [S|INCLUDE|^"$(PROJDIR)\..\..\..\..\..\include^"|^"$(PROJDIR)\..\..\..\..\..\include\arch\proc\sh2^"] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [B|TBR|0] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [B|LIST|0] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|MISRA_INSPECTION|ALL] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [S|CPU|SH2] [B|CHGINCPATH|1] +" 2 +"[V|VERSION|6] [B|DEBUG|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|LIST|0] [B|CHGINCPATH|1] [B|ERRORPATH|1] [S|CPU|SH2] [S|ENDIAN|BIG] [S|ROUND|ZERO] [B|DENORMALIZE|0]" 3 +"[V|VERSION|6] [B|OPTIMIZE|0] [B|DEBUG|1] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).abs^"] [S|ROM|(D,R)] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|FORM|LIBRARY|U] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"]" 4 +[SESSION_DATA_CONFIGURATION_SESSION_Release_DefaultSession] +"MEMORY_MAPPING_OPTIONS" "" +[SESSION_DATA_CONFIGURATION_SESSION_Debug_DefaultSession] +"MEMORY_MAPPING_OPTIONS" "" +[EXT_DEBUGGER_INFO] +0 "" "" "" "" +[EXCLUDED_FILES_Debug] +[LINKAGE_ORDER_Debug] +[GENERAL_DATA_CONFIGURATION_Release] +[GENERAL_DATA_CONFIGURATION_SESSION_Debug_DefaultSession] +[GENERAL_DATA_CONFIGURATION_SESSION_Release_DefaultSession] +[EXCLUDED_FILES_Release] +[GENERAL_DATA_CONFIGURATION_Debug] +[LINKAGE_ORDER_Release] +[END] diff --git a/kernel/build/sh/sh2/shc/gmake.mak b/kernel/build/sh/sh2/shc/gmake.mak new file mode 100755 index 0000000..4895a08 --- /dev/null +++ b/kernel/build/sh/sh2/shc/gmake.mak @@ -0,0 +1,392 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# makefile for H8/300H +# +# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + + +# ターゲット名 +TARGET ?= libhosv4a + +# アーキテクチャパス +ARCH_PROC ?= sh/sh2 +ARCH_IRC ?= none +ARCH_CC ?= shc + +# ディレクトリ定義 +TOP_DIR = ../../../../.. +KNL_DIR = $(TOP_DIR)/kernel +OBJS_DIR = objs_$(TARGET) + +# インクルードディレクトリ定義 +INC_KNL_DIR = $(KNL_DIR)/include +INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC) +INC_IRC_DIR = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# ソースディレクトリ定義 +SRC_KNL_DIR = $(KNL_DIR)/source +SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC) +SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC) +SRC_IRC_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC) +SRC_IRC_ASM_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC) + +# コンフィギュレータ定義 +CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc +CFGRTR = h4acfg-sh2 + + +# 共通設定インクルード +include $(TOP_DIR)/kernel/build/common/gmake.inc + + +# ターゲットライブラリファイル名 +TARGET_LIB = $(TARGET).lib + +# アセンブラファイルの追加 +ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.src \ + $(SRC_PROC_ASM_DIR)/exchdr.src \ + $(SRC_PROC_ASM_DIR)/inthdr.src \ + $(SRC_PROC_ASM_DIR)/vect_dmy.src + +ifneq ($(FAST_VECTOR),Yes) +ASRCS += $(SRC_PROC_ASM_DIR)/vect_004.src \ + $(SRC_PROC_ASM_DIR)/vect_005.src \ + $(SRC_PROC_ASM_DIR)/vect_006.src \ + $(SRC_PROC_ASM_DIR)/vect_007.src \ + $(SRC_PROC_ASM_DIR)/vect_008.src \ + $(SRC_PROC_ASM_DIR)/vect_009.src \ + $(SRC_PROC_ASM_DIR)/vect_010.src \ + $(SRC_PROC_ASM_DIR)/vect_011.src \ + $(SRC_PROC_ASM_DIR)/vect_012.src \ + $(SRC_PROC_ASM_DIR)/vect_013.src \ + $(SRC_PROC_ASM_DIR)/vect_014.src \ + $(SRC_PROC_ASM_DIR)/vect_015.src \ + $(SRC_PROC_ASM_DIR)/vect_016.src \ + $(SRC_PROC_ASM_DIR)/vect_017.src \ + $(SRC_PROC_ASM_DIR)/vect_018.src \ + $(SRC_PROC_ASM_DIR)/vect_019.src \ + $(SRC_PROC_ASM_DIR)/vect_020.src \ + $(SRC_PROC_ASM_DIR)/vect_021.src \ + $(SRC_PROC_ASM_DIR)/vect_022.src \ + $(SRC_PROC_ASM_DIR)/vect_023.src \ + $(SRC_PROC_ASM_DIR)/vect_024.src \ + $(SRC_PROC_ASM_DIR)/vect_025.src \ + $(SRC_PROC_ASM_DIR)/vect_026.src \ + $(SRC_PROC_ASM_DIR)/vect_027.src \ + $(SRC_PROC_ASM_DIR)/vect_028.src \ + $(SRC_PROC_ASM_DIR)/vect_029.src \ + $(SRC_PROC_ASM_DIR)/vect_030.src \ + $(SRC_PROC_ASM_DIR)/vect_031.src \ + $(SRC_PROC_ASM_DIR)/vect_032.src \ + $(SRC_PROC_ASM_DIR)/vect_033.src \ + $(SRC_PROC_ASM_DIR)/vect_034.src \ + $(SRC_PROC_ASM_DIR)/vect_035.src \ + $(SRC_PROC_ASM_DIR)/vect_036.src \ + $(SRC_PROC_ASM_DIR)/vect_037.src \ + $(SRC_PROC_ASM_DIR)/vect_038.src \ + $(SRC_PROC_ASM_DIR)/vect_039.src \ + $(SRC_PROC_ASM_DIR)/vect_040.src \ + $(SRC_PROC_ASM_DIR)/vect_041.src \ + $(SRC_PROC_ASM_DIR)/vect_042.src \ + $(SRC_PROC_ASM_DIR)/vect_043.src \ + $(SRC_PROC_ASM_DIR)/vect_044.src \ + $(SRC_PROC_ASM_DIR)/vect_045.src \ + $(SRC_PROC_ASM_DIR)/vect_046.src \ + $(SRC_PROC_ASM_DIR)/vect_047.src \ + $(SRC_PROC_ASM_DIR)/vect_048.src \ + $(SRC_PROC_ASM_DIR)/vect_049.src \ + $(SRC_PROC_ASM_DIR)/vect_050.src \ + $(SRC_PROC_ASM_DIR)/vect_051.src \ + $(SRC_PROC_ASM_DIR)/vect_052.src \ + $(SRC_PROC_ASM_DIR)/vect_053.src \ + $(SRC_PROC_ASM_DIR)/vect_054.src \ + $(SRC_PROC_ASM_DIR)/vect_055.src \ + $(SRC_PROC_ASM_DIR)/vect_056.src \ + $(SRC_PROC_ASM_DIR)/vect_057.src \ + $(SRC_PROC_ASM_DIR)/vect_058.src \ + $(SRC_PROC_ASM_DIR)/vect_059.src \ + $(SRC_PROC_ASM_DIR)/vect_060.src \ + $(SRC_PROC_ASM_DIR)/vect_061.src \ + $(SRC_PROC_ASM_DIR)/vect_062.src \ + $(SRC_PROC_ASM_DIR)/vect_063.src \ + $(SRC_PROC_ASM_DIR)/vect_064.src \ + $(SRC_PROC_ASM_DIR)/vect_065.src \ + $(SRC_PROC_ASM_DIR)/vect_066.src \ + $(SRC_PROC_ASM_DIR)/vect_067.src \ + $(SRC_PROC_ASM_DIR)/vect_068.src \ + $(SRC_PROC_ASM_DIR)/vect_069.src \ + $(SRC_PROC_ASM_DIR)/vect_070.src \ + $(SRC_PROC_ASM_DIR)/vect_071.src \ + $(SRC_PROC_ASM_DIR)/vect_072.src \ + $(SRC_PROC_ASM_DIR)/vect_073.src \ + $(SRC_PROC_ASM_DIR)/vect_074.src \ + $(SRC_PROC_ASM_DIR)/vect_075.src \ + $(SRC_PROC_ASM_DIR)/vect_076.src \ + $(SRC_PROC_ASM_DIR)/vect_077.src \ + $(SRC_PROC_ASM_DIR)/vect_078.src \ + $(SRC_PROC_ASM_DIR)/vect_079.src \ + $(SRC_PROC_ASM_DIR)/vect_080.src \ + $(SRC_PROC_ASM_DIR)/vect_081.src \ + $(SRC_PROC_ASM_DIR)/vect_082.src \ + $(SRC_PROC_ASM_DIR)/vect_083.src \ + $(SRC_PROC_ASM_DIR)/vect_084.src \ + $(SRC_PROC_ASM_DIR)/vect_085.src \ + $(SRC_PROC_ASM_DIR)/vect_086.src \ + $(SRC_PROC_ASM_DIR)/vect_087.src \ + $(SRC_PROC_ASM_DIR)/vect_088.src \ + $(SRC_PROC_ASM_DIR)/vect_089.src \ + $(SRC_PROC_ASM_DIR)/vect_090.src \ + $(SRC_PROC_ASM_DIR)/vect_091.src \ + $(SRC_PROC_ASM_DIR)/vect_092.src \ + $(SRC_PROC_ASM_DIR)/vect_093.src \ + $(SRC_PROC_ASM_DIR)/vect_094.src \ + $(SRC_PROC_ASM_DIR)/vect_095.src \ + $(SRC_PROC_ASM_DIR)/vect_096.src \ + $(SRC_PROC_ASM_DIR)/vect_097.src \ + $(SRC_PROC_ASM_DIR)/vect_098.src \ + $(SRC_PROC_ASM_DIR)/vect_099.src \ + $(SRC_PROC_ASM_DIR)/vect_100.src \ + $(SRC_PROC_ASM_DIR)/vect_101.src \ + $(SRC_PROC_ASM_DIR)/vect_102.src \ + $(SRC_PROC_ASM_DIR)/vect_103.src \ + $(SRC_PROC_ASM_DIR)/vect_104.src \ + $(SRC_PROC_ASM_DIR)/vect_105.src \ + $(SRC_PROC_ASM_DIR)/vect_106.src \ + $(SRC_PROC_ASM_DIR)/vect_107.src \ + $(SRC_PROC_ASM_DIR)/vect_108.src \ + $(SRC_PROC_ASM_DIR)/vect_109.src \ + $(SRC_PROC_ASM_DIR)/vect_110.src \ + $(SRC_PROC_ASM_DIR)/vect_111.src \ + $(SRC_PROC_ASM_DIR)/vect_112.src \ + $(SRC_PROC_ASM_DIR)/vect_113.src \ + $(SRC_PROC_ASM_DIR)/vect_114.src \ + $(SRC_PROC_ASM_DIR)/vect_115.src \ + $(SRC_PROC_ASM_DIR)/vect_116.src \ + $(SRC_PROC_ASM_DIR)/vect_117.src \ + $(SRC_PROC_ASM_DIR)/vect_118.src \ + $(SRC_PROC_ASM_DIR)/vect_119.src \ + $(SRC_PROC_ASM_DIR)/vect_120.src \ + $(SRC_PROC_ASM_DIR)/vect_121.src \ + $(SRC_PROC_ASM_DIR)/vect_122.src \ + $(SRC_PROC_ASM_DIR)/vect_123.src \ + $(SRC_PROC_ASM_DIR)/vect_124.src \ + $(SRC_PROC_ASM_DIR)/vect_125.src \ + $(SRC_PROC_ASM_DIR)/vect_126.src \ + $(SRC_PROC_ASM_DIR)/vect_127.src \ + $(SRC_PROC_ASM_DIR)/vect_128.src \ + $(SRC_PROC_ASM_DIR)/vect_129.src \ + $(SRC_PROC_ASM_DIR)/vect_130.src \ + $(SRC_PROC_ASM_DIR)/vect_131.src \ + $(SRC_PROC_ASM_DIR)/vect_132.src \ + $(SRC_PROC_ASM_DIR)/vect_133.src \ + $(SRC_PROC_ASM_DIR)/vect_134.src \ + $(SRC_PROC_ASM_DIR)/vect_135.src \ + $(SRC_PROC_ASM_DIR)/vect_136.src \ + $(SRC_PROC_ASM_DIR)/vect_137.src \ + $(SRC_PROC_ASM_DIR)/vect_138.src \ + $(SRC_PROC_ASM_DIR)/vect_139.src \ + $(SRC_PROC_ASM_DIR)/vect_140.src \ + $(SRC_PROC_ASM_DIR)/vect_141.src \ + $(SRC_PROC_ASM_DIR)/vect_142.src \ + $(SRC_PROC_ASM_DIR)/vect_143.src \ + $(SRC_PROC_ASM_DIR)/vect_144.src \ + $(SRC_PROC_ASM_DIR)/vect_145.src \ + $(SRC_PROC_ASM_DIR)/vect_146.src \ + $(SRC_PROC_ASM_DIR)/vect_147.src \ + $(SRC_PROC_ASM_DIR)/vect_148.src \ + $(SRC_PROC_ASM_DIR)/vect_149.src \ + $(SRC_PROC_ASM_DIR)/vect_150.src \ + $(SRC_PROC_ASM_DIR)/vect_151.src \ + $(SRC_PROC_ASM_DIR)/vect_152.src \ + $(SRC_PROC_ASM_DIR)/vect_153.src \ + $(SRC_PROC_ASM_DIR)/vect_154.src \ + $(SRC_PROC_ASM_DIR)/vect_155.src \ + $(SRC_PROC_ASM_DIR)/vect_156.src \ + $(SRC_PROC_ASM_DIR)/vect_157.src \ + $(SRC_PROC_ASM_DIR)/vect_158.src \ + $(SRC_PROC_ASM_DIR)/vect_159.src \ + $(SRC_PROC_ASM_DIR)/vect_160.src \ + $(SRC_PROC_ASM_DIR)/vect_161.src \ + $(SRC_PROC_ASM_DIR)/vect_162.src \ + $(SRC_PROC_ASM_DIR)/vect_163.src \ + $(SRC_PROC_ASM_DIR)/vect_164.src \ + $(SRC_PROC_ASM_DIR)/vect_165.src \ + $(SRC_PROC_ASM_DIR)/vect_166.src \ + $(SRC_PROC_ASM_DIR)/vect_167.src \ + $(SRC_PROC_ASM_DIR)/vect_168.src \ + $(SRC_PROC_ASM_DIR)/vect_169.src \ + $(SRC_PROC_ASM_DIR)/vect_170.src \ + $(SRC_PROC_ASM_DIR)/vect_171.src \ + $(SRC_PROC_ASM_DIR)/vect_172.src \ + $(SRC_PROC_ASM_DIR)/vect_173.src \ + $(SRC_PROC_ASM_DIR)/vect_174.src \ + $(SRC_PROC_ASM_DIR)/vect_175.src \ + $(SRC_PROC_ASM_DIR)/vect_176.src \ + $(SRC_PROC_ASM_DIR)/vect_177.src \ + $(SRC_PROC_ASM_DIR)/vect_178.src \ + $(SRC_PROC_ASM_DIR)/vect_179.src \ + $(SRC_PROC_ASM_DIR)/vect_180.src \ + $(SRC_PROC_ASM_DIR)/vect_181.src \ + $(SRC_PROC_ASM_DIR)/vect_182.src \ + $(SRC_PROC_ASM_DIR)/vect_183.src \ + $(SRC_PROC_ASM_DIR)/vect_184.src \ + $(SRC_PROC_ASM_DIR)/vect_185.src \ + $(SRC_PROC_ASM_DIR)/vect_186.src \ + $(SRC_PROC_ASM_DIR)/vect_187.src \ + $(SRC_PROC_ASM_DIR)/vect_188.src \ + $(SRC_PROC_ASM_DIR)/vect_189.src \ + $(SRC_PROC_ASM_DIR)/vect_190.src \ + $(SRC_PROC_ASM_DIR)/vect_191.src \ + $(SRC_PROC_ASM_DIR)/vect_192.src \ + $(SRC_PROC_ASM_DIR)/vect_193.src \ + $(SRC_PROC_ASM_DIR)/vect_194.src \ + $(SRC_PROC_ASM_DIR)/vect_195.src \ + $(SRC_PROC_ASM_DIR)/vect_196.src \ + $(SRC_PROC_ASM_DIR)/vect_197.src \ + $(SRC_PROC_ASM_DIR)/vect_198.src \ + $(SRC_PROC_ASM_DIR)/vect_199.src \ + $(SRC_PROC_ASM_DIR)/vect_200.src \ + $(SRC_PROC_ASM_DIR)/vect_201.src \ + $(SRC_PROC_ASM_DIR)/vect_202.src \ + $(SRC_PROC_ASM_DIR)/vect_203.src \ + $(SRC_PROC_ASM_DIR)/vect_204.src \ + $(SRC_PROC_ASM_DIR)/vect_205.src \ + $(SRC_PROC_ASM_DIR)/vect_206.src \ + $(SRC_PROC_ASM_DIR)/vect_207.src \ + $(SRC_PROC_ASM_DIR)/vect_208.src \ + $(SRC_PROC_ASM_DIR)/vect_209.src \ + $(SRC_PROC_ASM_DIR)/vect_210.src \ + $(SRC_PROC_ASM_DIR)/vect_211.src \ + $(SRC_PROC_ASM_DIR)/vect_212.src \ + $(SRC_PROC_ASM_DIR)/vect_213.src \ + $(SRC_PROC_ASM_DIR)/vect_214.src \ + $(SRC_PROC_ASM_DIR)/vect_215.src \ + $(SRC_PROC_ASM_DIR)/vect_216.src \ + $(SRC_PROC_ASM_DIR)/vect_217.src \ + $(SRC_PROC_ASM_DIR)/vect_218.src \ + $(SRC_PROC_ASM_DIR)/vect_219.src \ + $(SRC_PROC_ASM_DIR)/vect_220.src \ + $(SRC_PROC_ASM_DIR)/vect_221.src \ + $(SRC_PROC_ASM_DIR)/vect_222.src \ + $(SRC_PROC_ASM_DIR)/vect_223.src \ + $(SRC_PROC_ASM_DIR)/vect_224.src \ + $(SRC_PROC_ASM_DIR)/vect_225.src \ + $(SRC_PROC_ASM_DIR)/vect_226.src \ + $(SRC_PROC_ASM_DIR)/vect_227.src \ + $(SRC_PROC_ASM_DIR)/vect_228.src \ + $(SRC_PROC_ASM_DIR)/vect_229.src \ + $(SRC_PROC_ASM_DIR)/vect_230.src \ + $(SRC_PROC_ASM_DIR)/vect_231.src \ + $(SRC_PROC_ASM_DIR)/vect_232.src \ + $(SRC_PROC_ASM_DIR)/vect_233.src \ + $(SRC_PROC_ASM_DIR)/vect_234.src \ + $(SRC_PROC_ASM_DIR)/vect_235.src \ + $(SRC_PROC_ASM_DIR)/vect_236.src \ + $(SRC_PROC_ASM_DIR)/vect_237.src \ + $(SRC_PROC_ASM_DIR)/vect_238.src \ + $(SRC_PROC_ASM_DIR)/vect_239.src \ + $(SRC_PROC_ASM_DIR)/vect_240.src \ + $(SRC_PROC_ASM_DIR)/vect_241.src \ + $(SRC_PROC_ASM_DIR)/vect_242.src \ + $(SRC_PROC_ASM_DIR)/vect_243.src \ + $(SRC_PROC_ASM_DIR)/vect_244.src \ + $(SRC_PROC_ASM_DIR)/vect_245.src \ + $(SRC_PROC_ASM_DIR)/vect_246.src \ + $(SRC_PROC_ASM_DIR)/vect_247.src \ + $(SRC_PROC_ASM_DIR)/vect_248.src \ + $(SRC_PROC_ASM_DIR)/vect_249.src \ + $(SRC_PROC_ASM_DIR)/vect_250.src \ + $(SRC_PROC_ASM_DIR)/vect_251.src \ + $(SRC_PROC_ASM_DIR)/vect_252.src \ + $(SRC_PROC_ASM_DIR)/vect_253.src \ + $(SRC_PROC_ASM_DIR)/vect_254.src \ + $(SRC_PROC_ASM_DIR)/vect_255.src +endif + + +# C言語ファイルの追加 +# CSRCS += $(SRC_IRC_DIR)/intc.c + + +# 検索パスの追加 +VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR) + + +# Tools +CC = shc +ASM = asmsh +LIBR = optlnk +DEPEND = depend +LINT = splint +AWK = gawk +MKDIR = mkdir +ECHO = echo +RM = rm + + +# オプションフラグ +AFLAGS += -CPu=sh2 +CFLAGS += -CPu=sh2 -I=$(INC_KNL_DIR),$(INC_PROC_DIR),$(INC_IRC_DIR) +LFLAGS += -FOrm=Library +LINTFLAGS += -weak -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) + +ifeq ($(DEBUG),Yes) +TARGET := $(TARGET)dbg +AFLAGS += -DEBug +CFLAGS += -OP=0 +else +AFLAGS += +CFLAGS += -OP=1 +endif + + +# オブジェクトファイル +OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(CSRCS))))) \ + $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(ASRCS))))) + + +all: mkdir_objs $(TARGET_LIB) mk_cfgrtr + + +$(TARGET_LIB): $(OBJS) + $(ECHO) -Input=$(OBJS) | sed "s/ /,/g" > $(OBJ_DIR)/subcmd.txt + $(ECHO) -OUtput=$(TARGET_LIB) >> $(OBJ_DIR)/subcmd.txt + $(ECHO) -FOrm=Library >> $(OBJ_DIR)/subcmd.txt + $(RM) -f $(TARGET_LIB) + $(LIBR) -SU=$(OBJ_DIR)/subcmd.txt + +mkdir_objs: + $(MKDIR) -p $(OBJS_DIR) + + +mk_cfgrtr: + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) + +clean: + $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) $(OBJS_DIR)/*.lst + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean + +#lint: +# $(LINT) $(LINTFLAGS) $(CSRCS) + +#depend: +# $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc + + +-include $(OBJS_DIR)/depend.inc + + +# 推論規則 +$(OBJS_DIR)/%.obj :: %.c + $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst) + +$(OBJS_DIR)/%.obj :: %.src + $(ASM) $(AFLAGS) $< -OB=$@ + + +# end of file diff --git a/kernel/build/win/win32/gcc/gmake.mak b/kernel/build/win/win32/gcc/gmake.mak new file mode 100755 index 0000000..3588cd8 --- /dev/null +++ b/kernel/build/win/win32/gcc/gmake.mak @@ -0,0 +1,121 @@ +# ---------------------------------------------------------------------------- +# Hyper Operating System V4 Advance +# makefile for Win32 +# +# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +# +# Copyright (C) 1998-2006 by Project HOS +# http://sourceforge.jp/projects/hos/ +# ---------------------------------------------------------------------------- + + +# ターゲット名 +TARGET ?= libhosv4a + +# アーキテクチャパス +ARCH_PROC ?= win/win32 +ARCH_IRC ?= none +ARCH_CC ?= gcc + + +# ディレクトリ定義 +TOP_DIR = ../../../../.. +KNL_DIR = $(TOP_DIR)/kernel +OBJS_DIR = objs_$(TARGET) + +# インクルードディレクトリ定義 +INC_KNL_DIR = $(KNL_DIR)/include +INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC) +INC_IRC_DIR = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC) + +# ソースディレクトリ定義 +SRC_KNL_DIR = $(KNL_DIR)/source +SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC) +SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC) +SRC_IRC_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC) +SRC_IRC_ASM_DIR = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC) + +# コンフィギュレータ定義 +CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc +CFGRTR = h4acfg-win32 + + +# 共通設定インクルード +include $(TOP_DIR)/kernel/build/common/gmake.inc + + +# ターゲットライブラリファイル名 +TARGET_LIB = $(TARGET).a + +# アセンブラファイルの追加 +ASRCS += + +# C言語ファイルの追加 +CSRCS += $(SRC_PROC_DIR)/ctxctl.c + + +# 検索パスの追加 +VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR) + + +# Tools +CC = gcc +ASM = gcc +LIBR = ar +DEPEND = gcc -M +LINT = splint +AWK = gawk +LINT = splint +MKDIR = mkdir +RM = rm + + +# オプションフラグ +AFLAGS += -c -Wall +CFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) \ + -c -Wall +LFLAGS += +LINTFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) -weak + + +# オブジェクトファイル +OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS))))) \ + $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS))))) + + +all: $(ASRCS) $(CSRCS) $(TARGET_LIB) $(CFGRTR) + + +$(TARGET_LIB): mkdir_objs $(OBJS) + $(LIBR) -r $(TARGET_LIB) $(OBJS) + +mkdir_objs: + $(MKDIR) -p $(OBJS_DIR) + + +$(CFGRTR): + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) + +clean: + $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) + make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean + +lint: + $(LINT) $(LINTFLAGS) $(CSRCS) + +depend: + $(DEPEND) $(CFLAGS) $(CSRCS) | awk '/^[^ ]/{print "$(OBJS_DIR)/"$$0} /^ /{print $$0}' > $(OBJS_DIR)/depend.inc + + +-include $(OBJS_DIR)/depend.inc + + +# 推論規則 +$(OBJS_DIR)/%.o :: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJS_DIR)/%.o :: %.S + $(ASM) $(AFLAGS) $< -o $@ + + +# end of file diff --git a/kernel/build/win/win32/vc60/hosv4a.dsp b/kernel/build/win/win32/vc60/hosv4a.dsp new file mode 100755 index 0000000..4684e0a --- /dev/null +++ b/kernel/build/win/win32/vc60/hosv4a.dsp @@ -0,0 +1,648 @@ +# Microsoft Developer Studio Project File - Name="hosv4a" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** •ÒW‚µ‚È‚¢‚Å‚­‚¾‚³‚¢ ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=hosv4a - Win32 Debug +!MESSAGE ‚±‚ê‚Í—LŒø‚ÈÒ²¸Ì§²Ù‚Å‚Í‚ ‚è‚Ü‚¹‚ñB ‚±‚ÌÌßÛ¼Þª¸Ä‚ðËÞÙÄނ·‚邽‚ß‚É‚Í NMAKE ‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B +!MESSAGE [Ò²¸Ì§²Ù‚Ì´¸½Îß°Ä] ºÏÝÄނðŽg—p‚µ‚ÄŽÀs‚µ‚Ä‚­‚¾‚³‚¢ +!MESSAGE +!MESSAGE NMAKE /f "hosv4a.mak". +!MESSAGE +!MESSAGE NMAKE ‚ÌŽÀsŽž‚ɍ\¬‚ðŽw’è‚Å‚«‚Ü‚· +!MESSAGE ºÏÝÄÞ ×²Ýã‚Åϸۂ̐ݒè‚ð’è‹`‚µ‚Ü‚·B—á: +!MESSAGE +!MESSAGE NMAKE /f "hosv4a.mak" CFG="hosv4a - Win32 Debug" +!MESSAGE +!MESSAGE ‘I‘ð‰Â”\‚ÈËÞÙÄÞ Ó°ÄÞ: +!MESSAGE +!MESSAGE "hosv4a - Win32 Release" ("Win32 (x86) Static Library" —p) +!MESSAGE "hosv4a - Win32 Debug" ("Win32 (x86) Static Library" —p) +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "hosv4a - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\include" /I "..\..\..\..\include\arch\proc\win32" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x411 /d "NDEBUG" +# ADD RSC /l 0x411 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "hosv4a - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /Ze /W3 /Gm /GX /ZI /Od /I "..\..\..\..\include" /I "..\..\..\..\include\arch\proc\win\win32" /I "..\..\..\..\include\arch\irc\none" /I "../../kernel/include" /D "_LIB" /D "WIN32" /D "_DEBUG" /D "_MBCS" /FD /D /GZ /c +# ADD BASE RSC /l 0x411 /d "_DEBUG" +# ADD RSC /l 0x411 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "hosv4a - Win32 Release" +# Name "hosv4a - Win32 Debug" +# Begin Group "include" + +# PROP Default_Filter "" +# Begin Group "object_inc" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\include\object\flgobj.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\object\inhobj.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\object\isrobj.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\object\mbxobj.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\object\mpfobj.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\object\semobj.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\object\tskobj.h +# End Source File +# End Group +# Begin Group "core_inc" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\include\core\basetyp.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\cmpl.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\core.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\dsp.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\hep.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\objhdl.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\objid.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\opttyp.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\que.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\rdq.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\sys.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\tmq.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\core\toq.h +# End Source File +# End Group +# Begin Group "arch_inc" + +# PROP Default_Filter "" +# Begin Group "arch_inc_proc" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\include\arch\proc\win\win32\proc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\arch\proc\win\win32\procatr.h +# End Source File +# End Group +# Begin Group "arch_inc_irc" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\include\arch\irc\none\irc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\arch\irc\none\ircatr.h +# End Source File +# End Group +# End Group +# Begin Group "config" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\include\config\cfgerr.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\config\cfghok.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\config\cfgknl.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\config\cfgsys.h +# End Source File +# End Group +# Begin Group "parser" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\include\parser\parserr.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\parser\parshok.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\parser\parsknl.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\parser\parssys.h +# End Source File +# End Group +# Begin Source File + +SOURCE=..\..\..\..\include\itron.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\include\kernel.h +# End Source File +# End Group +# Begin Group "source" + +# PROP Default_Filter "" +# Begin Group "core" + +# PROP Default_Filter "" +# Begin Group "dsp" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\core\dsp\dsp_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\dsp\ent_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\dsp\idl_lop.c +# End Source File +# End Group +# Begin Group "que" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\core\que\add_que.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\que\adf_que.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\que\adp_que.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\que\nxt_que.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\que\rmh_que.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\que\rmv_que.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\que\rot_que.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\que\trm_que.c +# End Source File +# End Group +# Begin Group "rdq" + +# PROP Default_Filter "" +# End Group +# Begin Group "hep" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\core\hep\alc_hep.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\hep\cre_hep.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\hep\fre_hep.c +# End Source File +# End Group +# Begin Group "toq" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\core\toq\add_toq.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\toq\rmv_toq.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\toq\sig_toq.c +# End Source File +# End Group +# Begin Group "tmq" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\core\tmq\add_tmq.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\tmq\rmv_tmq.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\core\tmq\sig_tmq.c +# End Source File +# End Group +# End Group +# Begin Group "object" + +# PROP Default_Filter "" +# Begin Group "tsk" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\acre_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\act_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\can_wup.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\cre_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\dly_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\ext_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\kcre_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\ref_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\rel_wai.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\slp_tsk.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\tsk\wup_tsk.c +# End Source File +# End Group +# Begin Group "sys" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\dis_dsp.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\ena_dsp.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\get_tid.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\loc_cpu.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\sns_ctx.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\sns_dsp.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\sns_loc.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\sta_knl.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sys\unl_cpu.c +# End Source File +# End Group +# Begin Group "sem" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\acre_sem.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\cre_sem.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\del_sem.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\kcre_sem.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\pol_sem.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\ref_sem.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\sig_sem.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\twai_sem.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\sem\wai_sem.c +# End Source File +# End Group +# Begin Group "isr" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\isr\acre_isr.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\isr\exe_isr.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\isr\kcre_isr.c +# End Source File +# End Group +# Begin Group "flg" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\acre_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\clr_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\cre_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\del_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\kchk_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\kcre_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\pol_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\ref_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\set_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\twai_flg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\flg\wai_flg.c +# End Source File +# End Group +# Begin Group "inh" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\inh\def_inh.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\inh\end_inh.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\inh\exe_inh.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\inh\sta_inh.c +# End Source File +# End Group +# Begin Group "tim" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\tim\isig_tim.c +# End Source File +# End Group +# Begin Group "mbx" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\mbx\acre_mbx.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mbx\kadd_msg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mbx\kcre_mbx.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mbx\krmv_msg.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mbx\rcv_mbx.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mbx\snd_mbx.c +# End Source File +# End Group +# Begin Group "mpf" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\object\mpf\acre_mpf.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mpf\get_mpf.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mpf\kcre_mpf.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mpf\pget_mpf.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\source\object\mpf\rel_mpf.c +# End Source File +# End Group +# End Group +# Begin Group "arch" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\arch\proc\win\win32\ctxctl.c +# End Source File +# End Group +# End Group +# End Target +# End Project diff --git a/kernel/build/win/win32/vc60/hosv4a.dsw b/kernel/build/win/win32/vc60/hosv4a.dsw new file mode 100755 index 0000000..45b7d32 --- /dev/null +++ b/kernel/build/win/win32/vc60/hosv4a.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# Œx: ‚±‚ÌÜ°¸½Íß°½ ̧²Ù ‚ð•ÒW‚Ü‚½‚͍폜‚µ‚È‚¢‚Å‚­‚¾‚³‚¢! + +############################################################################### + +Project: "hosv4a"=".\hosv4a.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/kernel/include/arch/irc/arm/ADuC7019/irc.h b/kernel/include/arch/irc/arm/ADuC7019/irc.h new file mode 100755 index 0000000..aa9ccfd --- /dev/null +++ b/kernel/include/arch/irc/arm/ADuC7019/irc.h @@ -0,0 +1,40 @@ +/** + * Hyper Operating System V4 Advance + * + * @file irc.h + * @brief %jp{ADuC7019/20/21/22/24/25/26/27 用割り込みコントローラ操作}%en{uITRON4.0 kernel header file} + * + * @version $Id: irc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__irc__ADuC7019__irc_h__ +#define _KERNEL__arch__irc__ADuC7019__irc_h__ + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_irc(void); /**< %jp{割込みコントローラの初期化} */ +void _kernel_arm_irq(void); /**< %jp{割り込み処理の実施} */ +void _kernel_arm_fiq(void); /**< %jp{割り込み処理の実施} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_IRC() _kernel_ini_irc() /**< %jp{割込みコントローラの初期化} */ + + + +#endif /* _KERNEL__arch__irc__ADuC7019__irc_h__ */ + + +/* end of file */ + diff --git a/kernel/include/arch/irc/arm/ADuC7019/ircatr.h b/kernel/include/arch/irc/arm/ADuC7019/ircatr.h new file mode 100755 index 0000000..8e131d8 --- /dev/null +++ b/kernel/include/arch/irc/arm/ADuC7019/ircatr.h @@ -0,0 +1,28 @@ +/** + * Hyper Operating System V4 Advance + * + * @file intc.h + * @brief %jp{ADuC7019/20/21/22/24/25/26/27用割り込みコントローラ操作}%en{ADuC7019/20/21/22/24/25/26/27} + * + * @version $Id: ircatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__irc__ADuC7019__ircatr_h__ +#define _KERNEL__arch__irc__ADuC7019__ircatr_h__ + +#define _KERNEL_IRCATR_INC_PATH "arm/ADuC7019" + + +#define _KERNEL_IRCATR_TMIN_INHNO 1 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_IRCATR_TMAX_INHNO 23 /**< %jp{割込みハンドラ番号の最大値} */ + + +#endif /* _KERNEL__arch__irc__ADuC7019__ircatr_h__ */ + + + +/* end of file */ diff --git a/kernel/include/arch/irc/none/irc.h b/kernel/include/arch/irc/none/irc.h new file mode 100755 index 0000000..74191bb --- /dev/null +++ b/kernel/include/arch/irc/none/irc.h @@ -0,0 +1,24 @@ +/** + * Hyper Operating System V4 Advance + * + * @file irc.h + * @brief %jp{割り込みコントローラ固有属性定義}%jp{Interrupt controler attribute} + * + * @version $Id: irc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__irc_none_h__ +#define _KERNEL__arch__irc_none_h__ + + +#define _KERNEL_INI_IRC() do {} while (0) /**< %jp{IRCの初期化ハンドラ} */ + + +#endif /* _KERNEL__arch__irc_none_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/irc/none/ircatr.h b/kernel/include/arch/irc/none/ircatr.h new file mode 100755 index 0000000..b4425a2 --- /dev/null +++ b/kernel/include/arch/irc/none/ircatr.h @@ -0,0 +1,29 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ircatr.h + * @brief %jp{割り込みコントローラ固有属性定義}%jp{Interrupt controler attribute} + * + * @version $Id: ircatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__none__ircatr_h__ +#define _KERNEL__arch__none__ircatr_h__ + + +#define _KERNEL_IRCATR_INC_PATH "none" + +#define _KERNEL_IRCATR_IRC FALSE /**< %jp{IRCの有無} */ + +#define _KERNEL_IRCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_IRCATR_TMAX_INHNO 0 /**< %jp{割込みハンドラ番号の最大値} */ + + +#endif /* _KERNEL__arch__none__ircatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/arm/arm_v4t/proc.h b/kernel/include/arch/proc/arm/arm_v4t/proc.h new file mode 100755 index 0000000..b07fd31 --- /dev/null +++ b/kernel/include/arch/proc/arm/arm_v4t/proc.h @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctl.h + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__arm__arm_v4__proc_h__ +#define _KERNEL__arch__proc__arm__arm_v4__proc_h__ + + + +/** %jp{コンテキスト情報保存ブロック} */ +typedef struct _kernel_t_ctxcb +{ + VP_INT sp; +} _KERNEL_T_CTXCB; + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_arc(void); /**< %jp{アーキテクチャ固有の初期化} */ + +void _kernel_ena_int(void); /**< %jp{割り込み許可} */ +void _kernel_dis_int(void); /**< %jp{割り込み禁止} */ +void _kernel_wai_int(void); /**< %jp{割り込み待ち(アイドル時の処理)} */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成} */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの削除} */ +void _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp); /**< %jp{実行コンテキストのリスタート} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始} */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_PRC() do {} while (0) + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割り込み許可} */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割り込み禁止} */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割り込み待ち(アイドル時の処理)} */ + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp)) +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \ + _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now)) + + +#endif /* _KERNEL__arch__proc__arm__arm_v4__proc_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/arm/arm_v4t/procatr.h b/kernel/include/arch/proc/arm/arm_v4t/procatr.h new file mode 100755 index 0000000..15d765a --- /dev/null +++ b/kernel/include/arch/proc/arm/arm_v4t/procatr.h @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file procatr.h + * @brief %jp{プロセッサアーキテクチャ固有機能} + * + * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ +#define _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "arm/arm_v4t" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 1 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 4 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_SYSSTK_NUM 2 /**< %jp{システムスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_TBIT_INT 32 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタのビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 8 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 8 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN FALSE /**< %jp{アンアラインアクセスは可能か?} */ + + +/* %jp{ARM固有の定数} */ +#define _KERNEL_ARM_INHNO_IRQ 0 /**< %jp{IRQ割込みの割込みハンドラ番号} */ +#define _KERNEL_ARM_INHNO_FIQ 1 /**< %jp{FIQ割込みの割込みハンドラ番号} */ + +#define _KERNEL_ARM_EXCNO_RST 0 /**< %jp{リセットのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_UND 1 /**< %jp{無効命令例外のCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_SWI 2 /**< %jp{ソフトウェア割込みのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_PRE 3 /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_ABT 4 /**< %jp{データアボートのCPU例外ハンドラ番号} */ + + + + + +#endif /* _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/arm/arm_v6/proc.h b/kernel/include/arch/proc/arm/arm_v6/proc.h new file mode 100755 index 0000000..0048c45 --- /dev/null +++ b/kernel/include/arch/proc/arm/arm_v6/proc.h @@ -0,0 +1,68 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctl.h + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__sh__sh2__proc_h__ +#define _KERNEL__arch__proc__sh__sh2__proc_h__ + + +/** %jp{コンテキスト情報保存ブロック} */ +typedef struct _kernel_t_ctxcb +{ + VP_INT sp; +} _KERNEL_T_CTXCB; + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_arc(void); /**< %jp{アーキテクチャ固有の初期化} */ + +void _kernel_ena_int(void); /**< %jp{割り込み許可} */ +void _kernel_dis_int(void); /**< %jp{割り込み禁止} */ +void _kernel_wai_int(void); /**< %jp{割り込み待ち(アイドル時の処理)} */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成} */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの削除} */ +void _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp); /**< %jp{実行コンテキストのリスタート} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始} */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_PRC() do {} while (0) + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割り込み許可} */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割り込み禁止} */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割り込み待ち(アイドル時の処理)} */ + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp)) +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \ + _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now)) + + + +#endif /* _KERNEL__arch__proc__sh__sh2__proc_h__ */ + + + +/* end of file */ diff --git a/kernel/include/arch/proc/arm/arm_v6/procatr.h b/kernel/include/arch/proc/arm/arm_v6/procatr.h new file mode 100755 index 0000000..8a239cb --- /dev/null +++ b/kernel/include/arch/proc/arm/arm_v6/procatr.h @@ -0,0 +1,66 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctl.h + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__arm__arm_v6__procatr_h__ +#define _KERNEL__arch__proc__arm__arm_v6__procatr_h__ + + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "arm/arm_v6" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 1 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 4 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_SYSSTK_NUM 2 /**< %jp{システムスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_TBIT_INT 32 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタのビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 32 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 8 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN FALSE /**< %jp{アンアラインアクセスは可能か?} */ + + +/* %jp{ARM固有の定数} */ +#define _KERNEL_ARM_INHNO_IRQ 0 /**< %jp{IRQ割込みの割込みハンドラ番号} */ +#define _KERNEL_ARM_INHNO_FIQ 1 /**< %jp{FIQ割込みの割込みハンドラ番号} */ + +#define _KERNEL_ARM_EXCNO_RST 0 /**< %jp{リセットのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_UND 1 /**< %jp{無効命令例外のCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_SWI 2 /**< %jp{ソフトウェア割込みのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_PRE 3 /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_ABT 4 /**< %jp{データアボートのCPU例外ハンドラ番号} */ + + + +#endif /* _KERNEL__arch__proc__arm__arm_v6__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/h8/h8300h/proc.h b/kernel/include/arch/proc/h8/h8300h/proc.h new file mode 100755 index 0000000..c492c66 --- /dev/null +++ b/kernel/include/arch/proc/h8/h8300h/proc.h @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctl.h + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__h8__h8300h__proc_h__ +#define _KERNEL__arch__proc__h8__h8300h__proc_h__ + + + +/** %jp{コンテキスト情報保存ブロック} */ +typedef struct _kernel_t_ctxcb +{ + VP_INT sp; +} _KERNEL_T_CTXCB; + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_arc(void); /**< %jp{アーキテクチャ固有の初期化} */ + +void _kernel_ena_int(void); /**< %jp{割り込み許可} */ +void _kernel_dis_int(void); /**< %jp{割り込み禁止} */ +void _kernel_wai_int(void); /**< %jp{割り込み待ち(アイドル時の処理)} */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成} */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの削除} */ +void _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp); /**< %jp{実行コンテキストのリスタート} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始} */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_PRC() do {} while (0) + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割り込み許可} */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割り込み禁止} */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割り込み待ち(アイドル時の処理)} */ + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp)) +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \ + _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now)) + + +#endif /* _KERNEL__arch__proc__h8__h8300h__proc_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/h8/h8300h/procatr.h b/kernel/include/arch/proc/h8/h8300h/procatr.h new file mode 100755 index 0000000..04069fe --- /dev/null +++ b/kernel/include/arch/proc/h8/h8300h/procatr.h @@ -0,0 +1,61 @@ +/** + * Hyper Operating System V4 Advance + * + * @file procatr.h + * @brief %jp{プロセッサアーキテクチャ固有機能} + * + * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__h8__h8300h__procatr_h__ +#define _KERNEL__arch__proc__h8__h8300h__procatr_h__ + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "arm/arm_v4t" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 1 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 4 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_SYSSTK_NUM 2 /**< %jp{システムスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_HAS_MUL TRUE /**< %jp{乗算命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_MUL FALSE /**< %jp{ハードウェア乗算器を有しているか?} */ +#define _KERNEL_PROCATR_HAS_DIV TRUE /**< %jp{除算命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_DIV FALSE /**< %jp{ハードウェア除算器を有しているか?} */ +#define _KERNEL_PROCATR_HAS_BSC FALSE /**< %jp{ビットスキャン命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_SHIFT TRUE /**< %jp{バレルシフタを有しているか?} */ + +#define _KERNEL_PROCATR_TBIT_INT 32 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタのビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 8 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 8 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN FALSE /**< %jp{アンアラインアクセスは可能か?} */ + + + +#endif /* _KERNEL__arch__proc__h8__h8300h__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/h8/h8300ha/proc.h b/kernel/include/arch/proc/h8/h8300ha/proc.h new file mode 100755 index 0000000..c492c66 --- /dev/null +++ b/kernel/include/arch/proc/h8/h8300ha/proc.h @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctl.h + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__h8__h8300h__proc_h__ +#define _KERNEL__arch__proc__h8__h8300h__proc_h__ + + + +/** %jp{コンテキスト情報保存ブロック} */ +typedef struct _kernel_t_ctxcb +{ + VP_INT sp; +} _KERNEL_T_CTXCB; + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_arc(void); /**< %jp{アーキテクチャ固有の初期化} */ + +void _kernel_ena_int(void); /**< %jp{割り込み許可} */ +void _kernel_dis_int(void); /**< %jp{割り込み禁止} */ +void _kernel_wai_int(void); /**< %jp{割り込み待ち(アイドル時の処理)} */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成} */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの削除} */ +void _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp); /**< %jp{実行コンテキストのリスタート} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始} */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_PRC() do {} while (0) + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割り込み許可} */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割り込み禁止} */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割り込み待ち(アイドル時の処理)} */ + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp)) +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \ + _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now)) + + +#endif /* _KERNEL__arch__proc__h8__h8300h__proc_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/h8/h8300ha/procatr.h b/kernel/include/arch/proc/h8/h8300ha/procatr.h new file mode 100755 index 0000000..d4509f3 --- /dev/null +++ b/kernel/include/arch/proc/h8/h8300ha/procatr.h @@ -0,0 +1,65 @@ +/** + * Hyper Operating System V4 Advance + * + * @file procatr.h + * @brief %jp{プロセッサアーキテクチャ固有機能} + * + * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__h8__h8300ha__procatr_h__ +#define _KERNEL__arch__proc__h8__h8300ha__procatr_h__ + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "h8/h8300ha" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 1 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 4 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_SYSSTK_NUM 1 /**< %jp{システムスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_HAS_MUL TRUE /**< %jp{乗算命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_MUL FALSE /**< %jp{ハードウェア乗算器を有しているか?} */ +#define _KERNEL_PROCATR_HAS_DIV TRUE /**< %jp{除算命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_DIV FALSE /**< %jp{ハードウェア除算器を有しているか?} */ +#define _KERNEL_PROCATR_HAS_BSC FALSE /**< %jp{ビットスキャン命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_SHIFT FALSE /**< %jp{任意bit数のシフト命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_SHIFTER FALSE /**< %jp{バレルシフタを有しているか?} */ + +#define _KERNEL_PROCATR_TBIT_INT 16 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタ型のビット数} */ +#define _KERNEL_PROCATR_TBIT_DATAPTR 24 /**< %jp{データ用アドレスに必要な有効ビット数} */ +#define _KERNEL_PROCATR_TBIT_FUNCPTR 24 /**< %jp{関数用アドレスに必要な有効ビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 8 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 8 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_INST_ALIGN 1 /**< %jp{インストラクションのアライメント} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN TRUE /**< %jp{データのアンアラインアクセスは可能か?} */ +#define _KERNEL_PROCATR_ALLOW_INST_UNALIGN TRUE /**< %jp{命令のアンアライン配置は可能か?} */ + + +#endif /* _KERNEL__arch__proc__h8__h8300ha__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/h8/h8300hn/proc.h b/kernel/include/arch/proc/h8/h8300hn/proc.h new file mode 100755 index 0000000..c492c66 --- /dev/null +++ b/kernel/include/arch/proc/h8/h8300hn/proc.h @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctl.h + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__h8__h8300h__proc_h__ +#define _KERNEL__arch__proc__h8__h8300h__proc_h__ + + + +/** %jp{コンテキスト情報保存ブロック} */ +typedef struct _kernel_t_ctxcb +{ + VP_INT sp; +} _KERNEL_T_CTXCB; + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_arc(void); /**< %jp{アーキテクチャ固有の初期化} */ + +void _kernel_ena_int(void); /**< %jp{割り込み許可} */ +void _kernel_dis_int(void); /**< %jp{割り込み禁止} */ +void _kernel_wai_int(void); /**< %jp{割り込み待ち(アイドル時の処理)} */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成} */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの削除} */ +void _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp); /**< %jp{実行コンテキストのリスタート} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始} */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_PRC() do {} while (0) + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割り込み許可} */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割り込み禁止} */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割り込み待ち(アイドル時の処理)} */ + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp)) +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \ + _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now)) + + +#endif /* _KERNEL__arch__proc__h8__h8300h__proc_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/h8/h8300hn/procatr.h b/kernel/include/arch/proc/h8/h8300hn/procatr.h new file mode 100755 index 0000000..d33d0ea --- /dev/null +++ b/kernel/include/arch/proc/h8/h8300hn/procatr.h @@ -0,0 +1,61 @@ +/** + * Hyper Operating System V4 Advance + * + * @file procatr.h + * @brief %jp{プロセッサアーキテクチャ固有機能} + * + * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__h8__h8300h__procatr_h__ +#define _KERNEL__arch__proc__h8__h8300h__procatr_h__ + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "arm/arm_v4t" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 1 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 4 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_SYSSTK_NUM 2 /**< %jp{システムスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_HAS_MUL TRUE /**< %jp{乗算命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_MUL FALSE /**< %jp{ハードウェア乗算器を有しているか?} */ +#define _KERNEL_PROCATR_HAS_DIV TRUE /**< %jp{除算命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_DIV FALSE /**< %jp{ハードウェア除算器を有しているか?} */ +#define _KERNEL_PROCATR_HAS_BSC FALSE /**< %jp{ビットスキャン命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_SHIFT TRUE /**< %jp{バレルシフタを有しているか?} */ + +#define _KERNEL_PROCATR_TBIT_INT 32 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 16 /**< %jp{ポインタのビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 8 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 8 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN FALSE /**< %jp{アンアラインアクセスは可能か?} */ + + + +#endif /* _KERNEL__arch__proc__h8__h8300h__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/h8/h8s2600a/proc.h b/kernel/include/arch/proc/h8/h8s2600a/proc.h new file mode 100755 index 0000000..c492c66 --- /dev/null +++ b/kernel/include/arch/proc/h8/h8s2600a/proc.h @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctl.h + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__h8__h8300h__proc_h__ +#define _KERNEL__arch__proc__h8__h8300h__proc_h__ + + + +/** %jp{コンテキスト情報保存ブロック} */ +typedef struct _kernel_t_ctxcb +{ + VP_INT sp; +} _KERNEL_T_CTXCB; + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_arc(void); /**< %jp{アーキテクチャ固有の初期化} */ + +void _kernel_ena_int(void); /**< %jp{割り込み許可} */ +void _kernel_dis_int(void); /**< %jp{割り込み禁止} */ +void _kernel_wai_int(void); /**< %jp{割り込み待ち(アイドル時の処理)} */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成} */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの削除} */ +void _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp); /**< %jp{実行コンテキストのリスタート} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始} */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_PRC() do {} while (0) + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割り込み許可} */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割り込み禁止} */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割り込み待ち(アイドル時の処理)} */ + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp)) +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \ + _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now)) + + +#endif /* _KERNEL__arch__proc__h8__h8300h__proc_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/h8/h8s2600a/procatr.h b/kernel/include/arch/proc/h8/h8s2600a/procatr.h new file mode 100755 index 0000000..961afba --- /dev/null +++ b/kernel/include/arch/proc/h8/h8s2600a/procatr.h @@ -0,0 +1,65 @@ +/** + * Hyper Operating System V4 Advance + * + * @file procatr.h + * @brief %jp{プロセッサアーキテクチャ固有機能} + * + * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__h8__h8s2600a__procatr_h__ +#define _KERNEL__arch__proc__h8__h8s2600a__procatr_h__ + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "h8/h8300ha24" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 1 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 4 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_SYSSTK_NUM 1 /**< %jp{システムスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_HAS_MUL TRUE /**< %jp{乗算命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_MUL TRUE /**< %jp{ハードウェア乗算器を有しているか?} */ +#define _KERNEL_PROCATR_HAS_DIV TRUE /**< %jp{除算命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_DIV FALSE /**< %jp{ハードウェア除算器を有しているか?} */ +#define _KERNEL_PROCATR_HAS_BSC FALSE /**< %jp{ビットスキャン命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_SHIFT FALSE /**< %jp{任意bit数のシフト命令を有しているか?} */ +#define _KERNEL_PROCATR_HAS_HW_SHIFTER FALSE /**< %jp{バレルシフタを有しているか?} */ + +#define _KERNEL_PROCATR_TBIT_INT 16 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタ型のビット数} */ +#define _KERNEL_PROCATR_TBIT_DATAPTR 24 /**< %jp{データ用アドレスに必要な有効ビット数} */ +#define _KERNEL_PROCATR_TBIT_FUNCPTR 24 /**< %jp{関数用アドレスに必要な有効ビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 8 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 8 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_INST_ALIGN 1 /**< %jp{インストラクションのアライメント} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN TRUE /**< %jp{データのアンアラインアクセスは可能か?} */ +#define _KERNEL_PROCATR_ALLOW_INST_UNALIGN TRUE /**< %jp{命令のアンアライン配置は可能か?} */ + + +#endif /* _KERNEL__arch__proc__h8__h8s2600a__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/mn103/mn1030/proc.h b/kernel/include/arch/proc/mn103/mn1030/proc.h new file mode 100755 index 0000000..b07fd31 --- /dev/null +++ b/kernel/include/arch/proc/mn103/mn1030/proc.h @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctl.h + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__arm__arm_v4__proc_h__ +#define _KERNEL__arch__proc__arm__arm_v4__proc_h__ + + + +/** %jp{コンテキスト情報保存ブロック} */ +typedef struct _kernel_t_ctxcb +{ + VP_INT sp; +} _KERNEL_T_CTXCB; + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_arc(void); /**< %jp{アーキテクチャ固有の初期化} */ + +void _kernel_ena_int(void); /**< %jp{割り込み許可} */ +void _kernel_dis_int(void); /**< %jp{割り込み禁止} */ +void _kernel_wai_int(void); /**< %jp{割り込み待ち(アイドル時の処理)} */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成} */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの削除} */ +void _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp); /**< %jp{実行コンテキストのリスタート} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始} */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_PRC() do {} while (0) + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割り込み許可} */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割り込み禁止} */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割り込み待ち(アイドル時の処理)} */ + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \ + _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp)) +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \ + _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now)) + + +#endif /* _KERNEL__arch__proc__arm__arm_v4__proc_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/mn103/mn1030/procatr.h b/kernel/include/arch/proc/mn103/mn1030/procatr.h new file mode 100755 index 0000000..15d765a --- /dev/null +++ b/kernel/include/arch/proc/mn103/mn1030/procatr.h @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file procatr.h + * @brief %jp{プロセッサアーキテクチャ固有機能} + * + * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ +#define _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "arm/arm_v4t" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 1 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 4 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_SYSSTK_NUM 2 /**< %jp{システムスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_TBIT_INT 32 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタのビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 8 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 8 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN FALSE /**< %jp{アンアラインアクセスは可能か?} */ + + +/* %jp{ARM固有の定数} */ +#define _KERNEL_ARM_INHNO_IRQ 0 /**< %jp{IRQ割込みの割込みハンドラ番号} */ +#define _KERNEL_ARM_INHNO_FIQ 1 /**< %jp{FIQ割込みの割込みハンドラ番号} */ + +#define _KERNEL_ARM_EXCNO_RST 0 /**< %jp{リセットのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_UND 1 /**< %jp{無効命令例外のCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_SWI 2 /**< %jp{ソフトウェア割込みのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_PRE 3 /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */ +#define _KERNEL_ARM_EXCNO_ABT 4 /**< %jp{データアボートのCPU例外ハンドラ番号} */ + + + + + +#endif /* _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/sh/sh2/proc.h b/kernel/include/arch/proc/sh/sh2/proc.h new file mode 100755 index 0000000..b2a60e4 --- /dev/null +++ b/kernel/include/arch/proc/sh/sh2/proc.h @@ -0,0 +1,68 @@ +/** + * Hyper Operating System V4 Advance + * + * @file procatr.h + * @brief %jp{プロセッサアーキテクチャ固有機能(SH2 processor)} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef KERNEL__arch__sh2__proc_h__ +#define KERNEL__arch__sh2__proc_h__ + + +/** %jp{コンテキスト情報保存ブロック}%en{Execution context control block} */ +typedef struct _kernel_t_ctxcb +{ + VP_INT sp; +} _KERNEL_T_CTXCB; + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ena_int(void); /**< %jp{割り込み許可}%en{Enable interrupt} */ +void _kernel_dis_int(void); /**< %jp{割り込み禁止}%en{Disable interrupt} */ +void _kernel_wai_int(void); /**< %jp{割り込み待ち(アイドル時の処理)}%en{Wait for interrupt(sleep)} */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成}%en{Create execution context)} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始}%en{Stert context)} */ +void _kernel_rst_ctx(VP_INT par1, VP_INT par2, VP isp, FP entry); /**< %jp{実行コンテキストのリスタート}%en{Restert context)} */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxcb_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替}%en{Switch context)} */ + + +#ifdef __cplusplus +} +#endif + + + +#define _KERNEL_INI_PRC() /**< %jp{プロセッサの初期化}%en{Initialize processor} */ + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割り込み許可}%en{Enable interrupt} */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割り込み禁止}%en{Disable interrupt} */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割り込み待ち(アイドル時の処理)}%en{Wait for interrupt(sleep)} */ + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, par1, par2) \ + _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (par1), (par2)) /**< %jp{実行コンテキスト生成}%en{Create execution context)} */ +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, par1, par2) \ + _kernel_rst_ctx((par1), (par2), (isp), (entry)) /**< %jp{実行コンテキストリスタート}%en{Restert context)} */ +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxcb_nxt) \ + _kernel_swi_ctx((pk_ctxcb_nxt), (pk_ctxcb_now)) /**< %jp{コンテキストのスイッチ}%en{Switch context)} */ + + + + +#endif /* KERNEL__HOS_V4a__sh2__sh2_h__ */ + + + +/* end of file */ diff --git a/kernel/include/arch/proc/sh/sh2/procatr.h b/kernel/include/arch/proc/sh/sh2/procatr.h new file mode 100755 index 0000000..4378c50 --- /dev/null +++ b/kernel/include/arch/proc/sh/sh2/procatr.h @@ -0,0 +1,54 @@ +/** + * Hyper Operating System V4 Advance + * + * @file procatr.h + * @brief %jp{プロセッサアーキテクチャ固有属性定義(SH2 processor)} + * + * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__arch__proc__sh__sh2__procatr_h__ +#define _KERNEL__arch__proc__sh__sh2__procatr_h__ + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "sh/sh2" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 64 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 255 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 63 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_EXCSTK_NUM 0 /**< %jp{CPU例外処理用スタックは何本必要か?} */ +#define _KERNEL_PROCATR_INTSTK_NUM 1 /**< %jp{割り込みスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_TBIT_INT 32 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタのビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 8 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 4 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN FALSE /**< %jp{アンアラインアクセスは可能か?} */ + + +#endif /* _KERNEL__arch__proc__sh__sh2__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/win/win32/proc.h b/kernel/include/arch/proc/win/win32/proc.h new file mode 100755 index 0000000..a2548a1 --- /dev/null +++ b/kernel/include/arch/proc/win/win32/proc.h @@ -0,0 +1,112 @@ +/** + * Hyper Operating System V4 Advance + * + * @file proc.h + * @brief %jp{プロセッサアーキテクチャ固有機能}%en{Processor archtecture} + * + * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__win32__proc_h__ +#define _KERNEL__win32__proc_h__ + + +/** %jp{Windows ヘッダファイルの読みこみ} */ +#define SIZE WIN_SIZE +#include +#undef SIZE +#include + + +/* %jp{ + Windows 標準の SIZE 構造体が ITRON の標準型と重なるので + 上記のように強制的に WIN_SIZE に名前を変えている + Windows APIで SIZE を利用するときは要注意} +*/ + + + +/** %jp{コンテキスト情報保存ブロック} */ +typedef struct _kernel_t_ctxcb +{ + HANDLE hEvent; /**< %jp{スレッドハンドル} */ + HANDLE hThread; /**< %jp{スレッドハンドル} */ + DWORD dwThreadId; /**< %jp{スレッドID} */ + BOOL blIntSuspend; /**< %jp{割り込みディスパッチされた} */ + FP entry; /**< %jp{エントリーアドレス} */ + VP_INT exinf1; /**< %jp{パラメータ1} */ + VP_INT exinf2; /**< %jp{パラメータ2} */ + jmp_buf jmpenv; /**< %jp{コンテキストリセット用のlongjmpデータ} */ +} _KERNEL_T_CTXCB; + + + +extern HANDLE _kernel_win32_hSemLock; /** %jp{システムの排他制御用セマフォ} */ +extern _KERNEL_T_CTXCB *_kernel_win32_ctxcb_run; /** %jp{実行中のコンテキスト} */ + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_ini_prc(void); /**< アーキテクチャ固有の初期化 */ + +void _kernel_ena_int(void); /**< 割り込み許可 */ +void _kernel_dis_int(void); /**< 割り込み禁止 */ +void _kernel_wai_int(void); /**< 割り込み待ち(アイドル時の処理) */ + +void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, FP entry, VP_INT exinf1, VP_INT exinf2); /**< 実行コンテキストの作成 */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< 実行コンテキストの削除 */ +void _kernel_rst_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< 実行コンテキストのリスタート */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< 実行コンテキストの開始 */ +void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxcb_now, _KERNEL_T_CTXCB *pk_ctxinf_nxt); /**< 実行コンテキストの切替 */ + +void vsig_int(int inhno); /* %jp{割り込み} */ + + +#if KERNEL_SMP + +int _kernel_get_prc(void); +void _kernel_ini_prc(int prcid); +void _kernel_loc_ctx(_KERNEL_T_LOC *loc); +void _kernel_unl_ctx(_KERNEL_T_LOC *loc); +void _kernel_loc_wri(_KERNEL_T_LOC *loc); +void _kernel_unl_wri(_KERNEL_T_LOC *loc); +void _kernel_loc_red(_KERNEL_T_LOC *loc); +void _kernel_unl_red(_KERNEL_T_LOC *loc); + +#endif + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_INI_PRC() _kernel_ini_prc() + +#define _KERNEL_ENA_INT() _kernel_ena_int() + +#define _KERNEL_ENA_INT() _kernel_ena_int() /**< 割り込み許可 */ +#define _KERNEL_DIS_INT() _kernel_dis_int() /**< 割り込み禁止 */ +#define _KERNEL_WAI_INT() _kernel_wai_int() /**< 割り込み待ち(アイドル時の処理) */ + + +#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, par1, par2) \ + _kernel_cre_ctx(pk_ctxcb, entry, par1, par2) +#define _KERNEL_DEL_CTX(pk_ctxcb) _kernel_del_ctx(pk_ctxcb) +#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, par1, par2) \ + _kernel_rst_ctx(pk_ctxcb) +#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb) +#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \ + _kernel_swi_ctx(pk_ctxcb_now, pk_ctxinf_nxt) + + + +#endif /* _KERNEL__win32__proc_h__ */ + + +/* end of file */ diff --git a/kernel/include/arch/proc/win/win32/procatr.h b/kernel/include/arch/proc/win/win32/procatr.h new file mode 100755 index 0000000..494c025 --- /dev/null +++ b/kernel/include/arch/proc/win/win32/procatr.h @@ -0,0 +1,49 @@ +/* ------------------------------------------------------------------------ */ +/* Hyper Operating System V4 μITRON4.0仕様 Real-Time OS */ +/* プロセッサ抽象化コンポーネント (Windows用) */ +/* */ +/* Copyright (C) 1998-2002 by Project HOS */ +/* http://sourceforge.jp/projects/hos/ */ +/* ------------------------------------------------------------------------ */ + + +#ifndef _KERNEL__arch__proc__win__win32__procatr_h__ +#define _KERNEL__arch__proc__win__win32__procatr_h__ + + +/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */ +#define _KERNEL_PROCATR_INC_PATH "win/win32" + + +/* %jp{プロセッサアーキテクチャに依存した属性} */ +#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */ +#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */ +#define _KERNEL_PROCATR_CTX_DEL TRUE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */ +#define _KERNEL_PROCATR_CTX_RST FALSE /**< %jp{自コンテキストのリスタートが可能か?} */ + +#define _KERNEL_PROCATR_TMIN_STKSZ (4*32) /**< %jp{最低限必要なスタックサイズ(byte単位)} */ + +#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */ +#define _KERNEL_PROCATR_SPT_MULTINT FALSE /**< %jp{多重割り込みに対応しているか?} */ + +#define _KERNEL_PROCATR_TMIN_INHNO 1 /**< %jp{割込みハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_INHNO 256 /**< %jp{割込みハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_TMIN_EXCNO 1 /**< %jp{CPU例外ハンドラ番号の最小値} */ +#define _KERNEL_PROCATR_TMAX_EXCNO 1 /**< %jp{CPU例外ハンドラ番号の最大値} */ + +#define _KERNEL_PROCATR_SYSSTK_NUM 1 /**< %jp{システムスタックは何本必要か?} */ + +#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */ +#define _KERNEL_PROCATR_TBIT_INT 32 /**< %jp{プロセッサに最適な整数型のビット数} */ +#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタのビット数} */ +#define _KERNEL_PROCATR_MEM_ALIGN 32 /**< %jp{適切なメモリのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_STK_ALIGN 1 /**< %jp{適切なスタックのアライメント(byte単位)} */ +#define _KERNEL_PROCATR_ALLOW_UNALIGN TRUE /**< %jp{アンアラインアクセスは可能か?} */ + + +#endif /* _KERNEL__arch__proc__win__win32__procatr_h__ */ + + +/* end of file */ diff --git a/kernel/include/config/cfgerr.h b/kernel/include/config/cfgerr.h new file mode 100755 index 0000000..ccf3106 --- /dev/null +++ b/kernel/include/config/cfgerr.h @@ -0,0 +1,393 @@ +/** + * Hyper Operating System V4 Advance + * + * @file cfgerr.h + * @brief %jp{エラー処理のコンフィギュレーション用ヘッダファイル} + * + * @version $Id: cfgerr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__config__cfgerr_h__ +#define _KERNEL__config__cfgerr_h__ + + +/* +%jp{ + 本ファイルにて、カーネル内のエラーチェックサポートのコンフィギュ +レーションを行う。 + エラーチェックを取り外した場合、コードサイズなどの削減が可能となるが、 +そのエラーが発生する状況を発生させた場合は、動作未保証となるので注意して +取り外すこと。 + また、本ファイルはセンブリ言語の前処理にも使う事を想定しているので、 +C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ定義などの +プリプロセッサディレクティブのみを記載する事とする。 +} +*/ + + +/* cre_tsk */ +/* acre_tsk */ +/* del_tsk */ + +/* act_tsk */ +#define _KERNEL_CFG_ACT_TSK_E_ID TRUE + +/* iact_tsk */ +/* can_act */ +/* sta_tsk */ +/* ext_tsk */ +/* exd_tsk */ +/* ter_tsk */ +/* chg_pri */ +/* get_pri */ +/* ref_tsk */ +#define _KERNEL_CFG_REF_TSK_E_ID TRUE +/* ref_tst */ + +/* slp_tsk */ +/* tslp_tsk */ +/* wup_tsk */ +#define _KERNEL_CFG_WUP_TSK_E_ID TRUE +#define _KERNEL_CFG_WUP_TSK_E_NOEXS TRUE + +/* iwup_tsk */ +/* can_wup */ +#define _KERNEL_CFG_CAN_WUP_E_ID TRUE +#define _KERNEL_CFG_CAN_WUP_E_NOEXS TRUE + +/* rel_wai */ +#define _KERNEL_CFG_REL_WAI_E_ID TRUE +#define _KERNEL_CFG_REL_WAI_E_NOEXS TRUE +/* irel_wai */ +/* sus_tsk */ +/* rsm_tsk */ +/* frsm_tsk */ +/* dly_tsk */ + + + +/* def_tex */ +/* ras_tex */ +/* iras_tex */ +/* dis_tex */ +/* ena_tex */ +/* sns_tex */ +/* ref_tex */ + + +/* cre_sem */ +#define _KERNEL_CFG_CRE_SEM_E_ID TRUE +#define _KERNEL_CFG_CRE_SEM_E_RSATR TRUE +#define _KERNEL_CFG_CRE_SEM_E_OBJ TRUE +#define _KERNEL_CFG_CRE_SEM_E_NOMEM TRUE +#define _KERNEL_CFG_CRE_SEM_E_NOSPT FALSE + +/* acre_sem */ +#define _KERNEL_CFG_ACRE_SEM_E_NOID TRUE +#define _KERNEL_CFG_ACRE_SEM_E_RSATR TRUE +#define _KERNEL_CFG_ACRE_SEM_E_NOMEM TRUE +#define _KERNEL_CFG_ACRE_SEM_E_NOSPT FALSE + +/* del_sem */ +#define _KERNEL_CFG_DEL_SEM_E_ID TRUE +#define _KERNEL_CFG_DEL_SEM_E_NOEXS TRUE +#define _KERNEL_CFG_DEL_SEM_E_NOSPT FALSE + +/* sig_sem */ +#define _KERNEL_CFG_SIG_SEM_E_ID TRUE +#define _KERNEL_CFG_SIG_SEM_E_NOEXS TRUE +#define _KERNEL_CFG_SIG_SEM_E_QOVR TRUE +#define _KERNEL_CFG_SIG_SEM_E_NOSPT FALSE + +/* isig_sem */ + +/* wai_sem */ +#define _KERNEL_CFG_WAI_SEM_E_ID TRUE +#define _KERNEL_CFG_WAI_SEM_E_CTX TRUE +#define _KERNEL_CFG_WAI_SEM_E_NOEXS TRUE +#define _KERNEL_CFG_WAI_SEM_E_RLWAI TRUE +#define _KERNEL_CFG_WAI_SEM_E_DLT TRUE +#define _KERNEL_CFG_WAI_SEM_E_NOSPT FALSE + +/* pol_sem */ +#define _KERNEL_CFG_POL_SEM_E_ID TRUE +#define _KERNEL_CFG_POL_SEM_E_NOEXS TRUE +#define _KERNEL_CFG_POL_SEM_E_TMOUT TRUE +#define _KERNEL_CFG_POL_SEM_E_NOSPT FALSE + +/* twai_sem */ +#define _KERNEL_CFG_TWAI_SEM_E_ID TRUE +#define _KERNEL_CFG_TWAI_SEM_E_CTX TRUE +#define _KERNEL_CFG_TWAI_SEM_E_NOEXS TRUE +#define _KERNEL_CFG_TWAI_SEM_E_TMOUT TRUE +#define _KERNEL_CFG_TWAI_SEM_E_RLWAI TRUE +#define _KERNEL_CFG_TWAI_SEM_E_DLT TRUE +#define _KERNEL_CFG_TWAI_SEM_E_NOSPT FALSE + +/* ref_sem */ +#define _KERNEL_CFG_REF_SEM_E_ID TRUE +#define _KERNEL_CFG_REF_SEM_E_NOEXS TRUE +#define _KERNEL_CFG_REF_SEM_E_PAR TRUE +#define _KERNEL_CFG_REF_SEM_E_NOSPT FALSE + + +/* cre_flg */ +#define _KERNEL_CFG_CRE_FLG_E_ID TRUE +#define _KERNEL_CFG_CRE_FLG_E_RSATR TRUE +#define _KERNEL_CFG_CRE_FLG_E_OBJ TRUE +#define _KERNEL_CFG_CRE_FLG_E_NOMEM TRUE +#define _KERNEL_CFG_CRE_FLG_E_NOSPT TRUE + +/* acre_flg */ +#define _KERNEL_CFG_ACRE_FLG_E_NOID TRUE +#define _KERNEL_CFG_ACRE_FLG_E_RSATR TRUE +#define _KERNEL_CFG_ACRE_FLG_E_NOMEM TRUE +#define _KERNEL_CFG_ACRE_FLG_E_NOSPT FALSE + +/* del_flg */ +#define _KERNEL_CFG_DEL_FLG_E_ID TRUE +#define _KERNEL_CFG_DEL_FLG_E_NOEXS TRUE +#define _KERNEL_CFG_DEL_FLG_E_NOSPT FALSE + +/* set_flg */ +#define _KERNEL_CFG_SET_FLG_E_ID TRUE +#define _KERNEL_CFG_SET_FLG_E_NOEXS TRUE +#define _KERNEL_CFG_SET_FLG_E_PAR TRUE +#define _KERNEL_CFG_SET_FLG_E_NOSPT FALSE + +/* iset_flg */ +/* clr_flg */ +#define _KERNEL_CFG_SET_FLG_E_ID TRUE +#define _KERNEL_CFG_SET_FLG_E_NOEXS TRUE +#define _KERNEL_CFG_SET_FLG_E_PAR TRUE +#define _KERNEL_CFG_SET_FLG_E_NOSPT FALSE + +/* wai_flg */ +#define _KERNEL_CFG_WAI_FLG_E_ID TRUE +#define _KERNEL_CFG_WAI_FLG_E_CTX TRUE +#define _KERNEL_CFG_WAI_FLG_E_NOEXS TRUE +#define _KERNEL_CFG_WAI_FLG_E_PAR TRUE +#define _KERNEL_CFG_WAI_FLG_E_ILUSE TRUE +#define _KERNEL_CFG_WAI_FLG_E_RLWAI TRUE +#define _KERNEL_CFG_WAI_FLG_E_DLT TRUE +#define _KERNEL_CFG_WAI_FLG_E_NOSPT FALSE + +/* pol_flg */ +#define _KERNEL_CFG_WAI_FLG_E_ID TRUE +#define _KERNEL_CFG_WAI_FLG_E_NOEXS TRUE +#define _KERNEL_CFG_WAI_FLG_E_PAR TRUE +#define _KERNEL_CFG_WAI_FLG_E_TMOUT TRUE +#define _KERNEL_CFG_WAI_FLG_E_NOSPT FALSE + +/* twai_flg */ +#define _KERNEL_CFG_TWAI_FLG_E_ID TRUE +#define _KERNEL_CFG_TWAI_FLG_E_CTX TRUE +#define _KERNEL_CFG_TWAI_FLG_E_NOEXS TRUE +#define _KERNEL_CFG_TWAI_FLG_E_PAR TRUE +#define _KERNEL_CFG_TWAI_FLG_E_ILUSE TRUE +#define _KERNEL_CFG_TWAI_FLG_E_TMOUT TRUE +#define _KERNEL_CFG_TWAI_FLG_E_RLWAI TRUE +#define _KERNEL_CFG_TWAI_FLG_E_DLT TRUE +#define _KERNEL_CFG_TWAI_FLG_E_NOSPT FALSE + +/* ref_flg */ +#define _KERNEL_CFG_REF_FLG_E_ID TRUE +#define _KERNEL_CFG_REF_FLG_E_NOEXS TRUE +#define _KERNEL_CFG_REF_FLG_E_PAR TRUE +#define _KERNEL_CFG_REF_FLG_E_NOSPT FALSE + + + +/* cre_dtq */ +/* acre_dtq */ +/* del_dtq */ +/* snd_dtq */ +/* ipsnd_dtq */ +/* tsnd_dtq */ +/* fsnd_dtq */ +/* ifsnd_dtq */ +/* rcv_dtq */ +/* prcv_dtq */ +/* trcv_dtq */ +/* ref_dtq */ + + +/* cre_mbx */ +#define _KERNEL_CFG_CRE_MBX_E_ID TRUE +#define _KERNEL_CFG_CRE_MBX_E_RSATR TRUE +#define _KERNEL_CFG_CRE_MBX_E_OBJ TRUE +#define _KERNEL_CFG_CRE_MBX_E_NOMEM TRUE +#define _KERNEL_CFG_CRE_MBX_E_NOSPT FALSE + +/* acre_mbx */ +#define _KERNEL_CFG_ACRE_MBX_E_NOID TRUE +#define _KERNEL_CFG_ACRE_MBX_E_RSATR TRUE +#define _KERNEL_CFG_ACRE_MBX_E_NOMEM TRUE +#define _KERNEL_CFG_ACRE_MBX_E_NOSPT FALSE + +/* del_mbx */ +#define _KERNEL_CFG_DEL_MBX_E_ID TRUE +#define _KERNEL_CFG_DEL_MBX_E_NOEXS TRUE +#define _KERNEL_CFG_DEL_MBX_E_NOSPT FALSE + + +/* snd_mbx */ +/* rcv_mbx */ +/* prcv_mbx */ +/* trcv_mbx */ +/* ref_mbx */ + + +/* cre_mtx */ +/* acre_mtx */ +/* del_mtx */ +/* loc_mtx */ +/* ploc_mtx */ +/* tloc_mtx */ +/* unl_mtx */ +/* ref_mtx */ + + +/* cre_mbf */ +/* acre_mbf */ +/* del_mbf */ +/* snd_mbf */ +/* psnd_mbf */ +/* tsnd_mbf */ +/* rcv_mbf */ +/* prcv_mbf */ +/* trcv_mbf */ +/* ref_mbf */ + + +/* cre_por */ +/* acre_por */ +/* del_por */ +/* cal_por */ +/* tcal_por */ +/* acp_por */ +/* pacp_por */ +/* tacp_por */ +/* fwd_por */ +/* rpl_rdv */ +/* ref_por */ +/* ref_rdv */ + + +/* cre_mpf */ +#define _KERNEL_CFG_CRE_MPF_E_ID TRUE +#define _KERNEL_CFG_CRE_MPF_E_RSATR TRUE +#define _KERNEL_CFG_CRE_MPF_E_OBJ TRUE +#define _KERNEL_CFG_CRE_MPF_E_NOMEM TRUE +#define _KERNEL_CFG_CRE_MPF_E_NOCFG FALSE + +/* acre_mpf */ +#define _KERNEL_CFG_ACRE_MPF_E_NOID TRUE +#define _KERNEL_CFG_ACRE_MPF_E_RSATR TRUE +#define _KERNEL_CFG_ACRE_MPF_E_NOMEM TRUE +#define _KERNEL_CFG_ACRE_MPF_E_NOCFG FALSE + +/* del_mpf */ +#define _KERNEL_CFG_DEL_MPF_E_ID TRUE +#define _KERNEL_CFG_DEL_MPF_E_NOEXS TRUE +#define _KERNEL_CFG_DEL_MPF_E_NOCFG FALSE + +/* get_mpf */ +#define _KERNEL_CFG_GET_MPF_E_ID TRUE +#define _KERNEL_CFG_GET_MPF_E_CTX TRUE +#define _KERNEL_CFG_GET_MPF_E_NOEXS TRUE +#define _KERNEL_CFG_GET_MPF_E_PAR TRUE +#define _KERNEL_CFG_GET_MPF_E_ILUSE TRUE +#define _KERNEL_CFG_GET_MPF_E_RLWAI TRUE +#define _KERNEL_CFG_GET_MPF_E_DLT TRUE +#define _KERNEL_CFG_GET_MPF_E_NOSPT FALSE + +/* pget_mpf */ +/* tget_mpf */ +/* rel_mpf */ +/* ref_mpf */ + + +/* cre_mpl */ +/* acre_mpl */ +/* del_mpl */ +/* get_mpl */ +/* pget_mpl */ +/* tget_mpl */ +/* rel_mpl */ +/* ref_mpl */ + + +/* set_tim */ +/* get_tim */ +/* isig_tim */ + + +/* cre_cyc */ +/* acre_cyc */ +/* del_cyc */ +/* sta_cyc */ +/* stp_cyc */ +/* ref_cyc */ + + +/* cre_alm */ +/* acre_alm */ +/* del_alm */ +/* sta_alm */ +/* stp_alm */ +/* ref_alm */ + + +/* def_ovr */ +/* sta_ovr */ +/* stp_ovr */ +/* ref_ovr */ + + +/* rot_rdq */ +/* irot_rdq */ +/* get_tid */ +/* iget_tid */ +/* loc_cpu */ +/* iloc_cpu */ +/* unl_cpu */ +/* ilnl_cpu */ +/* dis_dsp */ +/* ena_dsp */ +/* sns_ctx */ +/* sns_loc */ +/* sns_dsp */ +/* sns_dpn */ +/* ref_sys */ + + +/* def_inh */ +/* cre_isr */ +/* acre_isr */ +/* del_isr */ +/* ref_isr */ +/* dis_int */ +/* ena_int */ +/* chg_ilv */ +/* get_ilv */ + + +/* def_svc */ +/* cal_svc */ + + +/* def_exc */ +/* ref_cfg */ +/* ref_ver */ + + + +#endif /* _KERNEL__config__cfgerr_h__ */ + + +/* end of file */ diff --git a/kernel/include/config/cfghok.h b/kernel/include/config/cfghok.h new file mode 100755 index 0000000..609b33f --- /dev/null +++ b/kernel/include/config/cfghok.h @@ -0,0 +1,41 @@ +/** + * Hyper Operating System V4 Advance + * + * @file cfghok.h + * @brief %jp{カーネルフックのコンフィギュレーション用ヘッダファイル} + * + * @version $Id: cfghok.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +/* +%jp{ + 本ファイルにて、カーネルフック機構のコンフィギュレーションを行う。 + + また、本ファイルはセンブリ言語の前処理にも使う事を想定しているので、 +C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ定義などの +プリプロセッサディレクティブのみを記載する事とする。 +} +*/ + + + +#ifndef _KERNEL__config__cfghok_h__ +#define _KERNEL__config__cfghok_h__ + + +/* 以下予定 */ +#define _KERNEL_CFG_HOK_SVCCAL FALSE /**< サービスコールの呼び出し */ +#define _KERNEL_CFG_HOK_SVCRET FALSE /**< サービスコールのリターン */ +#define _KERNEL_CFG_HOK_TSKSWI FALSE /**< タスクスイッチのフック */ +#define _KERNEL_CFG_HOK_CTXSWI FALSE /**< コンテキストスイッチのフック */ +#define _KERNEL_CFG_HOK_MTXPRI FALSE /**< ミューテックスの優先度変化のフック */ + + +#endif /* _KERNEL__config__cfghok_h__ */ + + +/* end of file */ diff --git a/kernel/include/config/cfgknl.h b/kernel/include/config/cfgknl.h new file mode 100755 index 0000000..125daa7 --- /dev/null +++ b/kernel/include/config/cfgknl.h @@ -0,0 +1,486 @@ +/** + * Hyper Operating System V4 Advance + * + * @file config.h + * @brief %jp{カーネル仕様のコンフィギュレーション用ヘッダファイル}%en{kernel configuration heder file} + * + * @version $Id: cfgknl.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +/* +%jp{ + 本ファイルにて、カーネル内部のコンフィギュレーションを行う。 + 本ファイルの変更後はカーネルのリビルドが必要である。 + また、本ファイルはセンブリ言語の前処理にも使う事を想定しているので、 +C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ定義などの +プリプロセッサディレクティブのみを記載する事とする。 +} +*/ + + + +#ifndef _KERNEL__config__cfgknl_h__ +#define _KERNEL__config__cfgknl_h__ + + + +/* ---------------------------------------------- */ +/* Optimize */ +/* ---------------------------------------------- */ + +/* %jp{数値の小さいものを優先して最適化する} */ +#define _KERNEL_CFG_OPT_RW_SIZE 1 /**< %jp{リードライトデータサイズ(通常はRAM配置)の優先度} */ +#define _KERNEL_CFG_OPT_RO_SIZE 2 /**< %jp{リードオンリーデータ(通常はROM配置)のサイズの優先度} */ +#define _KERNEL_CFG_OPT_CODE_SIZE 2 /**< %jp{コードサイズ(通常はROM配置)の優先度} */ +#define _KERNEL_CFG_OPT_SPEED 3 /**< %jp{実行速度の優先度} */ + + + +/* ---------------------------------------------- */ +/* ID number */ +/* ---------------------------------------------- */ + +/* %jp{オブジェクト数} */ +#define _KERNEL_CFG_TMAX_TSKID 127 /**< %jp{タスクIDの最大値} */ +#define _KERNEL_CFG_TMAX_SEMID 127 /**< %jp{セマフォIDの最大値} */ +#define _KERNEL_CFG_TMAX_FLGID 127 /**< %jp{イベントフラグIDの最大値} */ +#define _KERNEL_CFG_TMAX_DTQID 127 /**< %jp{データキューIDの最大値} */ +#define _KERNEL_CFG_TMAX_MBXID 127 /**< %jp{メールボックスIDの最大値} */ +#define _KERNEL_CFG_TMAX_MTXID 127 /**< %jp{ミューテックスIDの最大値} */ +#define _KERNEL_CFG_TMAX_MBFID 127 /**< %jp{メッセージバッファIDの最大値} */ +#define _KERNEL_CFG_TMAX_PORID 127 /**< %jp{ランデブーIDの最大値} */ +#define _KERNEL_CFG_TMAX_MPFID 127 /**< %jp{固定長メモリプールIDの最大値} */ +#define _KERNEL_CFG_TMAX_MPLID 127 /**< %jp{可変長メモリプールIDの最大値} */ +#define _KERNEL_CFG_TMAX_CYCID 127 /**< %jp{周期ハンドラIDの最大値} */ +#define _KERNEL_CFG_TMAX_ALMID 127 /**< %jp{アラームハンドラIDの最大値} */ +#define _KERNEL_CFG_TMAX_OVRID 127 /**< %jp{オーバーランハンドラIDの最大値} */ +#define _KERNEL_CFG_TMAX_ISRID 127 /**< %jp{割り込みサービスルーチンIDの最大値} */ + + + +/* ---------------------------------------------- */ +/* Kernel-internal */ +/* ---------------------------------------------- */ + +/* %jp{遅延プロシージャーコール(きっと当分未実装) [未実装]} */ +#define _KERNEL_CFG_DPC FALSE /**< Deferred Procedure Call */ + +/* %jp{対称型マルチプロセッサ対応(きっと永遠に未実装) [未実装]} */ +#define _KERNEL_CFG_SMP FALSE /**< Symmetric Multiple Processor */ + +/* %jp{多重割り込み対応} */ +#define _KERNEL_CFG_MULTIPLE_INT TRUE + +/* %jp{システムタスクにTCBを割り当てる(高速化するがメモリがやや増える?) [未実装]} */ +#define _KERNEL_CFG_SYSTSK_TCB FALSE + +/* %jp{実行時にタスクをレディーキューに繋げたままとする [未実装]} */ +#define _KERNEL_CFG_RUNTSK_ON_RDQ TRUE + +/* %jp{サスペンド時にタスクをレディーキューに繋げたままとする [未実装]} */ +#define _KERNEL_CFG_SUSTSK_ON_RDQ FALSE + + +/* %jp{タスクハンドルをIDで管理(省メモリだが低速)にするかどうか} */ +#define _KERNEL_CFG_TSKHDL_ID TRUE + +/* %jp{ミューテックスハンドルをIDで管理(省メモリだが低速)にするかどうか [未実装]} */ +#define _KERNEL_CFG_MTXHDL_ID TRUE + + + +/* ---------------------------------------------- */ +/* General task-queue */ +/* ---------------------------------------------- */ + +/** %jp{キューのアルゴリズム} */ +#define _KERNEL_CFG_QUE_ALGORITHM _KERNEL_QUE_ALG_ONEWAYLIST + +/* %jp{ + _KERNEL_QUE_ALG_ONEWAYLIST : 単方向キュー(省メモリだが取り外しが遅い) + _KERNEL_QUE_ALG_TWOWAYLIST : 双方向キュー(取り外しが高速) + _KERNEL_QUE_ALG_AUTO : 自動選択(最適化指定から自動で選択する) +}%en{ + _KERNEL_QUE_ALG_ONEWAYLIST : small-memory + _KERNEL_QUE_ALG_TWOWAYLIST : high-speed + _KERNEL_QUE_ALG_AUTO : auto select +}*/ + + + +/* ---------------------------------------------- */ +/* Ready-queue */ +/* ---------------------------------------------- */ + +/** %jp{レディーキューのアルゴリズム} */ +#define _KERNEL_CFG_RDQ_ALGORITHM _KERNEL_RDQ_ALG_SINGLE_QUE + +/* %jp{ + _KERNEL_RDQ_ALG_SINGLE_QUE : シングルキュー(省メモリだが、タスク数が増えると遅い) + _KERNEL_RDQ_ALG_ARRAYED_QUE : 優先度数だけキューを配列化(ある程度高速だが、優先度数でメモリ消費) [未実装] + _KERNEL_RDQ_ALG_BITMAP_ARRAYED_QUE : 配列化キューに探索ビットマップを備える(優先度数が少なければ高速) [未実装] + _KERNEL_RDQ_ALG_HEAP_QUE : ヒープ木(優先度数が多くてもそこそこ裁ける) [未実装] +}%en{ + _KERNEL_RDQ_ALG_SINGLE_QUE : + _KERNEL_RDQ_ALG_ARRAYED_QUE : + _KERNEL_RDQ_ALG_BITMAP_ARRAYED_QUE : + _KERNEL_RDQ_ALG_HEAP_QUE : +}*/ + + + +/* ---------------------------------------------- */ +/* Tasks */ +/* ---------------------------------------------- */ + +/* Attribute */ +#define _KERNEL_CFG_TSK_TA_ACT TRUE /**< %jp{TA_TACTに対応する} */ + + +/** %jp{タスクコントロールブロックの管理アルゴリズム} */ +#define _KERNEL_CFG_TCB_ALGORITHM _KERNEL_TCB_ALG_PTRARRAY + +/* %jp{ + _KERNEL_TCB_ALG_BLKARRAY : TCBブロック自体を配列化して管理(予めブロックを確保) + _KERNEL_TCB_ALG_PTRARRAY : TCBを指すポインタを配列化して管理(ブロック本体は動的にメモリ確保) +}*/ + + +#define _KERNEL_CFG_TCB_SPLIT_RO FALSE /**< %jp{TCBの不変部を分割してROM部配置とするか} */ +#define _KERNEL_CFG_TCB_BITFIELD FALSE /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */ +#define _KERNEL_CFG_TCB_TTW_PACK TRUE /**< %jp{待ち要因を圧縮して保持するか} */ + + + +/* ---------------------------------------------- */ +/* Smaphores */ +/* ---------------------------------------------- */ + +/* Attribute */ +#define _KERNEL_CFG_SEM_TA_TFIFO TRUE /**< %jp{TA_TFIFO属性に対応する} */ +#define _KERNEL_CFG_SEM_TA_TPRI TRUE /**< %jp{TA_TPRI属性に対応する} */ + + +/* Control block */ +#define _KERNEL_CFG_SEMCB_ALGORITHM _KERNEL_SEMCB_ALG_PTRARRAY +#define _KERNEL_CFG_SEMCB_SPLIT_RO TRUE /**< %jp{TCBの不変部を分割してROM部配置とするか} */ +#define _KERNEL_CFG_SEMCB_BITFIELD FALSE /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */ + + + +/* ---------------------------------------------- */ +/* Eventflags */ +/* ---------------------------------------------- */ + +/* Attribute */ +#define _KERNEL_CFG_FLG_TA_TFIFO TRUE /**< %jp{TA_TFIFO属性に対応する} */ +#define _KERNEL_CFG_FLG_TA_TPRI TRUE /**< %jp{TA_TPRI属性に対応する} */ +#define _KERNEL_CFG_FLG_TA_WSGL TRUE /**< %jp{TA_WSGL属性に対応する} */ +#define _KERNEL_CFG_FLG_TA_WMUL TRUE /**< %jp{TA_WMUL属性に対応する} */ +#define _KERNEL_CFG_FLG_TA_CLR TRUE /**< %jp{TA_CLR属性に対応する} */ + + +/* Control block */ +#define _KERNEL_CFG_FLGCB_ALGORITHM _KERNEL_FLGCB_ALG_BLKARRAY +#define _KERNEL_CFG_FLGCB_ROM FALSE /**< %jp{TCBの不変部を分割してROM部配置とするか} */ +#define _KERNEL_CFG_FLGCB_BITFIELD FALSE /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */ + + + +/* ---------------------------------------------- */ +/* Mailboxes */ +/* ---------------------------------------------- */ + +/* Attribute */ +#define _KERNEL_CFG_MBX_TA_TFIFO TRUE /**< %jp{TA_TFIFO属性に対応する} */ +#define _KERNEL_CFG_MBX_TA_TPRI TRUE /**< %jp{TA_TPRI属性に対応する} */ +#define _KERNEL_CFG_MBX_TA_MFIFO TRUE /**< %jp{TA_MFIFO属性に対応する} */ +#define _KERNEL_CFG_MBX_TA_MPRI TRUE /**< %jp{TA_MPRI属性に対応する} */ + + +/* Algorithm */ +#define _KERNEL_CFG_MBX_ALGORITHM _KERNEL_MBX_ALG_ARRAYED_MQUE +/* %jp{ + _KERNEL_MBX_ALG_SINGLE_MQUE : 一本のメッセージキューで構成する(優先度探索するので低速) [未実装] + _KERNEL_MBX_ALG_ARRAYED_MQUE : 優先度の数だけ配列状にキューを持つ(優先度数によってメモリを消費) +}*/ + + +/* Control block */ +#define _KERNEL_CFG_MBXCB_ALGORITHM _KERNEL_MBXCB_ALG_BLKARRAY +#define _KERNEL_CFG_MBXCB_ROM FALSE /**< %jp{TCBの不変部を分割してROM部配置とするか} */ +#define _KERNEL_CFG_MBXCB_BITFIELD FALSE /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */ + + + +/* ---------------------------------------------- */ +/* Fixed-sized Memory Pools */ +/* ---------------------------------------------- */ + +/* Attribute */ +#define _KERNEL_CFG_MPF_TA_TFIFO TRUE /**< %jp{TA_TFIFO属性に対応する} */ +#define _KERNEL_CFG_MPF_TA_TPRI TRUE /**< %jp{TA_TPRI属性に対応する} */ + +/* Value range */ +#define _KERNEL_CFG_MPF_TMAX_BLKCNT (-1) /**< %jp{ブロック数の最大値} */ +#define _KERNEL_CFG_MPF_TMAX_BLKSZ (-1) /**< %jp{ブロックサイズの最大値} */ + +/* Algorithm */ +#define _KERNEL_CFG_MPF_ALGORITHM _KERNEL_MPF_ALG_CHAIN_PTR +/* %jp{ + _KERNEL_MPF_ALG_CHAIN_PTR : 空きブロックをポインタでチェイン(乗算器の無いCPUでも高速) + _KERNEL_MPF_ALG_CHAIN_NUM : 空きブロックをブロック番号でチェイン(メモリが削減できる場合あり) +}*/ + +/* Control block */ +#define _KERNEL_CFG_MPFCB_ALGORITHM _KERNEL_MPFCB_ALG_BLKARRAY +#define _KERNEL_CFG_MPFCB_ROM FALSE /**< %jp{TCBの不変部を分割してROM部配置とするか} */ +#define _KERNEL_CFG_MPFCB_BITFIELD FALSE /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */ + + + + +/* ---------------------------------------------- */ +/* Service call support */ +/* ---------------------------------------------- */ + +/* Task management functions */ +#define _KERNEL_CFG_CRE_TSK TRUE /* cre_tsk */ +#define _KERNEL_CFG_ACRE_TSK TRUE /* acre_tsk */ +#define _KERNEL_CFG_DEL_TSK FALSE /* del_tsk */ +#define _KERNEL_CFG_ACT_TSK TRUE /* act_tsk */ +#define _KERNEL_CFG_IACT_TSK FALSE /* iact_tsk */ +#define _KERNEL_CFG_CAN_ACT FALSE /* can_act */ +#define _KERNEL_CFG_STA_TSK FALSE /* sta_tsk */ +#define _KERNEL_CFG_EXT_TSK FALSE /* ext_tsk */ +#define _KERNEL_CFG_EXD_TSK FALSE /* exd_tsk */ +#define _KERNEL_CFG_TER_TSK FALSE /* ter_tsk */ +#define _KERNEL_CFG_CHG_PRI TRUE /* chg_pri */ +#define _KERNEL_CFG_GET_PRI FALSE /* get_pri */ +#define _KERNEL_CFG_REF_TSK TRUE /* ref_tsk */ +#define _KERNEL_CFG_REF_TST FALSE /* ref_tst */ + +/* Task dependent synchronization functions */ +#define _KERNEL_CFG_SLP_TSK TRUE /* slp_tsk */ +#define _KERNEL_CFG_TSLP_TSK FALSE /* tslp_tsk */ +#define _KERNEL_CFG_WUP_TSK TRUE /* wup_tsk */ +#define _KERNEL_CFG_IWUP_TSK FALSE /* iwup_tsk */ +#define _KERNEL_CFG_CAN_WUP FALSE /* can_wup */ +#define _KERNEL_CFG_REL_WAI TRUE /* rel_wai */ +#define _KERNEL_CFG_IREL_WAI FALSE /* irel_wai */ +#define _KERNEL_CFG_SUS_TSK FALSE /* sus_tsk */ +#define _KERNEL_CFG_RSM_TSK FALSE /* rsm_tsk */ +#define _KERNEL_CFG_FRSM_TSK FALSE /* frsm_tsk */ +#define _KERNEL_CFG_DLY_TSK TRUE /* dly_tsk */ + +/* Task exception handling functions */ +#define _KERNEL_CFG_DEF_TEX FALSE /* def_tex */ +#define _KERNEL_CFG_RAS_TEX FALSE /* ras_tex */ +#define _KERNEL_CFG_IRAS_TEX FALSE /* iras_tex */ +#define _KERNEL_CFG_DIS_TEX FALSE /* dis_tex */ +#define _KERNEL_CFG_ENA_TEX FALSE /* ena_tex */ +#define _KERNEL_CFG_SNS_TEX FALSE /* sns_tex */ +#define _KERNEL_CFG_REF_TEX FALSE /* ref_tex */ + +/* Semaphores */ +#define _KERNEL_CFG_CRE_SEM TRUE /* cre_sem */ +#define _KERNEL_CFG_ACRE_SEM TRUE /* acre_sem */ +#define _KERNEL_CFG_DEL_SEM TRUE /* del_sem */ +#define _KERNEL_CFG_SIG_SEM TRUE /* sig_sem */ +#define _KERNEL_CFG_ISIG_SEM FALSE /* isig_sem */ +#define _KERNEL_CFG_WAI_SEM TRUE /* wai_sem */ +#define _KERNEL_CFG_POL_SEM TRUE /* pol_sem */ +#define _KERNEL_CFG_TWAI_SEM FALSE /* twai_sem */ +#define _KERNEL_CFG_REF_SEM TRUE /* ref_sem */ + +/* Eventflags */ +#define _KERNEL_CFG_CRE_FLG TRUE /* cre_flg */ +#define _KERNEL_CFG_ACRE_FLG TRUE /* acre_flg */ +#define _KERNEL_CFG_DEL_FLG TRUE /* del_flg */ +#define _KERNEL_CFG_SET_FLG TRUE /* set_flg */ +#define _KERNEL_CFG_ISET_FLG FALSE /* iset_flg */ +#define _KERNEL_CFG_CLR_FLG TRUE /* clr_flg */ +#define _KERNEL_CFG_WAI_FLG TRUE /* wai_flg */ +#define _KERNEL_CFG_POL_FLG TRUE /* pol_flg */ +#define _KERNEL_CFG_TWAI_FLG FALSE /* twai_flg */ +#define _KERNEL_CFG_REF_FLG TRUE /* ref_flg */ + +/* Data queues */ +#define _KERNEL_CFG_CRE_DTQ FALSE /* cre_dtq */ +#define _KERNEL_CFG_ACRE_DTQ FALSE /* acre_dtq */ +#define _KERNEL_CFG_DEL_DTQ FALSE /* del_dtq */ +#define _KERNEL_CFG_SND_DTQ FALSE /* snd_dtq */ +#define _KERNEL_CFG_IPSND_DT FALSE /* ipsnd_dtq */ +#define _KERNEL_CFG_TSND_DTQ FALSE /* tsnd_dtq */ +#define _KERNEL_CFG_FSND_DTQ FALSE /* fsnd_dtq */ +#define _KERNEL_CFG_IFSND_DT FALSE /* ifsnd_dtq */ +#define _KERNEL_CFG_RCV_DTQ FALSE /* rcv_dtq */ +#define _KERNEL_CFG_PRCV_DTQ FALSE /* prcv_dtq */ +#define _KERNEL_CFG_TRCV_DTQ FALSE /* trcv_dtq */ +#define _KERNEL_CFG_REF_DTQ FALSE /* ref_dtq */ + +/* Mailboxes */ +#define _KERNEL_CFG_CRE_MBX TRUE /* cre_mbx */ +#define _KERNEL_CFG_ACRE_MBX TRUE /* acre_mbx */ +#define _KERNEL_CFG_DEL_MBX TRUE /* del_mbx */ +#define _KERNEL_CFG_SND_MBX TRUE /* snd_mbx */ +#define _KERNEL_CFG_RCV_MBX TRUE /* rcv_mbx */ +#define _KERNEL_CFG_PRCV_MBX TRUE /* prcv_mbx */ +#define _KERNEL_CFG_TRCV_MBX FALSE /* trcv_mbx */ +#define _KERNEL_CFG_REF_MBX TRUE /* ref_mbx */ + +/* Mutexes */ +#define _KERNEL_CFG_CRE_MTX FALSE /* cre_mtx */ +#define _KERNEL_CFG_ACRE_MTX FALSE /* acre_mtx */ +#define _KERNEL_CFG_DEL_MTX FALSE /* del_mtx */ +#define _KERNEL_CFG_LOC_MTX FALSE /* loc_mtx */ +#define _KERNEL_CFG_PLOC_MTX FALSE /* ploc_mtx */ +#define _KERNEL_CFG_TLOC_MTX FALSE /* tloc_mtx */ +#define _KERNEL_CFG_UNL_MTX FALSE /* unl_mtx */ +#define _KERNEL_CFG_REF_MTX FALSE /* ref_mtx */ + +/* Message buffers */ +#define _KERNEL_CFG_CRE_MBF FALSE /* cre_mbf */ +#define _KERNEL_CFG_ACRE_MBF FALSE /* acre_mbf */ +#define _KERNEL_CFG_DEL_MBF FALSE /* del_mbf */ +#define _KERNEL_CFG_SND_MBF FALSE /* snd_mbf */ +#define _KERNEL_CFG_PSND_MBF FALSE /* psnd_mbf */ +#define _KERNEL_CFG_TSND_MBF FALSE /* tsnd_mbf */ +#define _KERNEL_CFG_RCV_MBF FALSE /* rcv_mbf */ +#define _KERNEL_CFG_PRCV_MBF FALSE /* prcv_mbf */ +#define _KERNEL_CFG_TRCV_MBF FALSE /* trcv_mbf */ +#define _KERNEL_CFG_REF_MBF FALSE /* ref_mbf */ + +/* Rendezvous */ +#define _KERNEL_CFG_CRE_POR FALSE /* cre_por */ +#define _KERNEL_CFG_ACRE_POR FALSE /* acre_por */ +#define _KERNEL_CFG_DEL_POR FALSE /* del_por */ +#define _KERNEL_CFG_CAL_POR FALSE /* cal_por */ +#define _KERNEL_CFG_TCAL_POR FALSE /* tcal_por */ +#define _KERNEL_CFG_ACP_POR FALSE /* acp_por */ +#define _KERNEL_CFG_PACP_POR FALSE /* pacp_por */ +#define _KERNEL_CFG_TACP_POR FALSE /* tacp_por */ +#define _KERNEL_CFG_FWD_POR FALSE /* fwd_por */ +#define _KERNEL_CFG_RPL_RDV FALSE /* rpl_rdv */ +#define _KERNEL_CFG_REF_POR FALSE /* ref_por */ +#define _KERNEL_CFG_REF_RDV FALSE /* ref_rdv */ + +/* Fixed-sized memory pools */ +#define _KERNEL_CFG_CRE_MPF TRUE /* cre_mpf */ +#define _KERNEL_CFG_ACRE_MPF TRUE /* acre_mpf */ +#define _KERNEL_CFG_DEL_MPF TRUE /* del_mpf */ +#define _KERNEL_CFG_GET_MPF TRUE /* get_mpf */ +#define _KERNEL_CFG_PGET_MPF TRUE /* pget_mpf */ +#define _KERNEL_CFG_TGET_MPF FALSE /* tget_mpf */ +#define _KERNEL_CFG_REL_MPF TRUE /* rel_mpf */ +#define _KERNEL_CFG_REF_MPF FALSE /* ref_mpf */ + +/* Variable-sized memory pools */ +#define _KERNEL_CFG_CRE_MPL FALSE /* cre_mpl */ +#define _KERNEL_CFG_ACRE_MPL FALSE /* acre_mpl */ +#define _KERNEL_CFG_DEL_MPL FALSE /* del_mpl */ +#define _KERNEL_CFG_GET_MPL FALSE /* get_mpl */ +#define _KERNEL_CFG_PGET_MPL FALSE /* pget_mpl */ +#define _KERNEL_CFG_TGET_MPL FALSE /* tget_mpl */ +#define _KERNEL_CFG_REL_MPL FALSE /* rel_mpl */ +#define _KERNEL_CFG_REF_MPL FALSE /* ref_mpl */ + +/* System time management */ +#define _KERNEL_CFG_SET_TIM FALSE /* set_tim */ +#define _KERNEL_CFG_GET_TIM FALSE /* get_tim */ +#define _KERNEL_CFG_ISIG_TIM TRUE /* isig_tim */ + +/* Cyclic handlers */ +#define _KERNEL_CFG_CRE_CYC FALSE /* cre_cyc */ +#define _KERNEL_CFG_ACRE_CYC FALSE /* acre_cyc */ +#define _KERNEL_CFG_DEL_CYC FALSE /* del_cyc */ +#define _KERNEL_CFG_STA_CYC FALSE /* sta_cyc */ +#define _KERNEL_CFG_STP_CYC FALSE /* stp_cyc */ +#define _KERNEL_CFG_REF_CYC FALSE /* ref_cyc */ + +/* Alarm handlers */ +#define _KERNEL_CFG_CRE_ALM FALSE /* cre_alm */ +#define _KERNEL_CFG_ACRE_ALM FALSE /* acre_alm */ +#define _KERNEL_CFG_DEL_ALM FALSE /* del_alm */ +#define _KERNEL_CFG_STA_ALM FALSE /* sta_alm */ +#define _KERNEL_CFG_STP_ALM FALSE /* stp_alm */ +#define _KERNEL_CFG_REF_ALM FALSE /* ref_alm */ + +/* Overrun handlers */ +#define _KERNEL_CFG_DEF_OVR FALSE /* def_ovr */ +#define _KERNEL_CFG_STA_OVR FALSE /* sta_ovr */ +#define _KERNEL_CFG_STP_OVR FALSE /* stp_ovr */ +#define _KERNEL_CFG_REF_OVR FALSE /* ref_ovr */ + +/* System management functions */ +#define _KERNEL_CFG_ROT_RDQ FALSE /* rot_rdq */ +#define _KERNEL_CFG_IROT_RDQ FALSE /* irot_rdq */ +#define _KERNEL_CFG_GET_TID FALSE /* get_tid */ +#define _KERNEL_CFG_IGET_TID FALSE /* iget_tid */ +#define _KERNEL_CFG_LOC_CPU FALSE /* loc_cpu */ +#define _KERNEL_CFG_ILOC_CPU FALSE /* iloc_cpu */ +#define _KERNEL_CFG_UNL_CPU FALSE /* unl_cpu */ +#define _KERNEL_CFG_ILNL_CPU FALSE /* ilnl_cpu */ +#define _KERNEL_CFG_DIS_DSP FALSE /* dis_dsp */ +#define _KERNEL_CFG_ENA_DSP FALSE /* ena_dsp */ +#define _KERNEL_CFG_SNS_CTX FALSE /* sns_ctx */ +#define _KERNEL_CFG_SNS_LOC FALSE /* sns_loc */ +#define _KERNEL_CFG_SNS_DSP FALSE /* sns_dsp */ +#define _KERNEL_CFG_SNS_DPN FALSE /* sns_dpn */ +#define _KERNEL_CFG_REF_SYS FALSE /* ref_sys */ + +/* Interrupt management functions */ +#define _KERNEL_CFG_DEF_INH TRUE /* def_inh */ +#define _KERNEL_CFG_CRE_ISR TRUE /* cre_isr */ +#define _KERNEL_CFG_ACRE_ISR TRUE /* acre_isr */ +#define _KERNEL_CFG_DEL_ISR FALSE /* del_isr */ +#define _KERNEL_CFG_REF_ISR FALSE /* ref_isr */ +#define _KERNEL_CFG_DIS_INT FALSE /* dis_int */ +#define _KERNEL_CFG_ENA_INT FALSE /* ena_int */ +#define _KERNEL_CFG_CHG_ILV FALSE /* chg_ilv */ +#define _KERNEL_CFG_GET_ILV FALSE /* get_ilv */ + +/* Service call management functions */ +#define _KERNEL_CFG_DEF_SVC FALSE /* def_svc */ +#define _KERNEL_CFG_CAL_SVC FALSE /* cal_svc */ + +/* System configulation management functions */ +#define _KERNEL_CFG_DEF_EXC FALSE /* def_exc */ +#define _KERNEL_CFG_REF_CFG FALSE /* ref_cfg */ +#define _KERNEL_CFG_REF_VER FALSE /* ref_ver */ + +/* Static API */ +#define _KERNEL_CFG_SCRE_TSK TRUE /* CRE_TSK */ +#define _KERNEL_CFG_SDEF_TEX FALSE /* DEF_TEX */ +#define _KERNEL_CFG_SCRE_SEM TRUE /* CRE_SEM */ +#define _KERNEL_CFG_SCRE_FLG TRUE /* CRE_FLG */ +#define _KERNEL_CFG_SCRE_DTQ FALSE /* CRE_DTQ */ +#define _KERNEL_CFG_SCRE_MBX FALSE /* CRE_MBX */ +#define _KERNEL_CFG_SCRE_MTX FALSE /* CRE_MTX */ +#define _KERNEL_CFG_SCRE_MBX FALSE /* CRE_MBX */ +#define _KERNEL_CFG_SCRE_MTX FALSE /* CRE_MTX */ +#define _KERNEL_CFG_SCRE_MBF FALSE /* CRE_MBF */ +#define _KERNEL_CFG_SCRE_POR FALSE /* CRE_POR */ +#define _KERNEL_CFG_SCRE_MPF FALSE /* CRE_MPF */ +#define _KERNEL_CFG_SCRE_MPL FALSE /* CRE_MPL */ +#define _KERNEL_CFG_SCRE_CYC FALSE /* CRE_CYC */ +#define _KERNEL_CFG_SCRE_ALM FALSE /* CRE_ALM */ +#define _KERNEL_CFG_SDEF_OVR FALSE /* DEF_OVR */ +#define _KERNEL_CFG_SDEF_INH FALSE /* DEF_INH */ +#define _KERNEL_CFG_SCRE_ISR FALSE /* CRE_ISR */ +#define _KERNEL_CFG_SDEF_SVC FALSE /* DEF_SVC */ +#define _KERNEL_CFG_SDEF_EXC FALSE /* DEF_EXC */ +#define _KERNEL_CFG_SATT_INI TRUE /* ATT_INI */ +#define _KERNEL_CFG_SINCLUDE TRUE /* INCLUDE */ + + + +#endif /* _KERNEL__config__cfgknl_h__ */ + + + +/* end of file */ diff --git a/kernel/include/config/cfgsys.h b/kernel/include/config/cfgsys.h new file mode 100755 index 0000000..3a02cb6 --- /dev/null +++ b/kernel/include/config/cfgsys.h @@ -0,0 +1,103 @@ +/** + * Hyper Operating System V4 Advance + * + * @file cfgsys.h + * @brief %jp{ITRONシステムのコンフィギュレーション用ヘッダファイル}%en{ITRON system configuration heder file} + * + * @version $Id: cfgsys.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +/* +%jp{ + 本ファイルにて、ITRONシステムのコンフィギュレーションを行う。 + コンフィギュレーションの結果により、基本型などアプリケーションで +利用する定義も変化する為、本ファイルの変更後はカーネルのみならず、 +itron.h や kernel.h を利用している、アプリケーション側も含めて +システム全体をリビルドする必要がある。 + また、本ファイルはセンブリ言語の前処理にも使う事を想定しているので、 +C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ定義などの +プリプロセッサディレクティブのみを記載する事とする。 +} +*/ + + + +#ifndef _KERNEL__config__cfgsys_h__ +#define _KERNEL__config__cfgsys_h__ + + +/* %jp{メモリのアラインサイズ}%jp{Memory alignment size} */ +#define _KERNEL_CFG_MEM_ALIGN (-1) /**< メモリのアラインサイズ(-1の時デフォルト値)}%en{Memory alignment size (-1:default)} */ + + +/* %jp{ITRON仕様共通データ型}%en{ITRON General Data Type} */ +#define _KERNEL_CFG_TBIT_INT (-1) /**< %jp{INT のビット数 (-1の時デフォルト値)}%en{Number of bits in INT (-1:default)} */ +#define _KERNEL_CFG_TBIT_UINT (-1) /**< %jp{UINT のビット数 (-1の時デフォルト値)}%en{Number of bits in UINT (-1:default)} */ +#define _KERNEL_CFG_TBIT_BOOL (-1) /**< %jp{BOOL のビット数 (-1の時デフォルト値)}%en{Number of bits in BOOL (-1:default)} */ +#define _KERNEL_CFG_TBIT_FN (-1) /**< %jp{FN のビット数 (-1の時デフォルト値)}%en{Number of bits in FN (-1:default)} */ +#define _KERNEL_CFG_TBIT_ER (-1) /**< %jp{ER のビット数 (-1の時デフォルト値)}%en{Number of bits in ER (-1:default)} */ +#define _KERNEL_CFG_TBIT_ID (-1) /**< %jp{ID のビット数 (-1の時デフォルト値)}%en{Number of bits in ID (-1:default)} */ +#define _KERNEL_CFG_TBIT_ATR (-1) /**< %jp{ATR のビット数 (-1の時デフォルト値)}%en{Number of bits in ATR (-1:default)} */ +#define _KERNEL_CFG_TBIT_STAT (-1) /**< %jp{STAT のビット数 (-1の時デフォルト値)}%en{Number of bits in STAT (-1:default)} */ +#define _KERNEL_CFG_TBIT_MODE (-1) /**< %jp{MODE のビット数 (-1の時デフォルト値)}%en{Number of bits in MODE (-1:default)} */ +#define _KERNEL_CFG_TBIT_PRI (-1) /**< %jp{PRI のビット数 (-1の時デフォルト値)}%en{Number of bits in PRI (-1:default)} */ +#define _KERNEL_CFG_TBIT_SIZE (-1) /**< %jp{SIZE のビット数 (-1の時デフォルト値)}%en{Number of bits in SIZE (-1:default)} */ +#define _KERNEL_CFG_TBIT_TMO (-1) /**< %jp{TMO のビット数 (-1の時デフォルト値)}%en{Number of bits in TMO (-1:default)} */ +#define _KERNEL_CFG_TBIT_RELTIM (-1) /**< %jp{RELTIM のビット数 (-1の時デフォルト値)}%en{Number of bits in RELTIM (-1:default)} */ +#define _KERNEL_CFG_SYSTIM_STRUCT FALSE /**< %jp{SYSTIM型を構造体にするかどうか} */ +#define _KERNEL_CFG_TBIT_SYSTIM 32 /**< %jp{SYSTIM型のビット数} */ +#define _KERNEL_CFG_VP_INT_PTR FALSE /**< %jp{VP_INT型をポインタ型にするかどうか} */ +#define _KERNEL_CFG_TBIT_VP_INT (-1) /**< %jp{VP_INT のビット数 (-1の時デフォルト値)}%en{Number of bits in VP_INT (-1:default)} */ +#define _KERNEL_CFG_TBIT_ER_BOOL (-1) /**< %jp{ER_BOOL のビット数 (-1の時デフォルト値)}%en{Number of bits in ER_BOOL (-1:default)} */ +#define _KERNEL_CFG_TBIT_ER_ID (-1) /**< %jp{ER_ID のビット数 (-1の時デフォルト値)}%en{Number of bits in ER_ID (-1:default)} */ +#define _KERNEL_CFG_TBIT_ER_UINT (-1) /**< %jp{ER_UINT のビット数 (-1の時デフォルト値)}%en{Number of bits in ER_UINT (-1:default)} */ + +/* %jp{カーネルのデータ型}%en{Kernel Data Type} */ +#define _KERNEL_CFG_TBIT_TEXPTN (-1) /**< %jp{タスク例外要因のビット数(-1の時デフォルト値)} */ +#define _KERNEL_CFG_TBIT_FLGPTN (-1) /**< %jp{イベントフラグのビット数(-1の時デフォルト値)} */ +#define _KERNEL_CFG_TBIT_RDVPTN (-1) /**< %jp{ランデブ条件のビット数(-1の時デフォルト値)} */ +#define _KERNEL_CFG_TBIT_RDVNO (-1) +#define _KERNEL_CFG_TBIT_OVRTIM (-1) +#define _KERNEL_CFG_TBIT_INHNO (-1) +#define _KERNEL_CFG_TBIT_INTNO (-1) +#define _KERNEL_CFG_TBIT_EXCNO (-1) + + +/* %jp{優先度の範囲}%en{Priority Range} */ +#define _KERNEL_CFG_TMAX_TPRI 255 /**< %jp{タスク優先度の最大値(-1の時デフォルト値)}%en{Maximum task priority} */ +#define _KERNEL_CFG_TMAX_MPRI 255 /**< %jp{メッセージ優先度の最大値(-1の時デフォルト値)}%en{Maximum message priority} */ + +/* %jp{キューイング/ネスト回数の最大値}%en{Maximum Nesting/Queueing Count} */ +#define _KERNEL_CFG_TMAX_ACTCNT 255 /**< %jp{タスク起動要求キューイング数の最大値(-1の時デフォルト値)} */ +#define _KERNEL_CFG_TMAX_WUPCNT 255 /**< %jp{タスク起床要求キューイング数の最大値(-1の時デフォルト値)} */ +#define _KERNEL_CFG_TMAX_SUSCNT 255 /**< %jp{タスク強制待ち要求ネスト数の最大値(-1の時デフォルト値)} */ + +/* %jp{ビットパターンのビット数} %en{Number of Bits in Bitpatterns}*/ +#define _KERNEL_CFG_TEX_TBIT_TEXPTN (-1) /**< %jp{タスク例外要因のビット数(-1の時デフォルト値)} */ +#define _KERNEL_CFG_FLG_TBIT_FLGPTN (-1) /**< %jp{イベントフラグのビット数(-1の時デフォルト値)} */ +#define _KERNEL_CFG_RDV_TBIT_RDVPTN (-1) /**< %jp{ランデブ条件のビット数(-1の時デフォルト値)} */ + +/* %jp{セマフォの最大値}%en{Maximum value of the maximum definable semaphore resource count} */ +#define _KERNEL_CFG_TMAX_MAXSEM (-1) + + +/* %jp{タイムティックの周期}%en{Time Tick Period} */ +#define _KERNEL_CFG_TIC_NUME 1 /**< %jp{タイムティック周期の分子} */ +#define _KERNEL_CFG_TIC_DENO 1 /**< %jp{タイムティック周期の分母} */ + + +/* %jp{T_RTSKに exinf を含めるか} */ +#define _KERNEL_CFG_RTSK_EXINF TRUE +#define _KERNEL_CFG_RTST_EXINF TRUE + + + +#endif /* _KERNEL__config__cfgsys_h__ */ + + + +/* end of file */ diff --git a/kernel/include/core/basetyp.h b/kernel/include/core/basetyp.h new file mode 100755 index 0000000..c60207b --- /dev/null +++ b/kernel/include/core/basetyp.h @@ -0,0 +1,760 @@ +/** + * Hyper Operating System V4 Advance + * + * @file basetyp.h + * @brief %jp{カーネル型定義ヘッダファイル}%en{basic type header file} + * + * @version $Id: basetyp.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__core__basetyp_h__ +#define _KERNEL__core__basetyp_h__ + + +/* %jp{コンパイラ判別} */ +#include "core/cmpl.h" + + + +#include + +#if _KERNEL_CMPL_STDINT_H +#include +#endif + + +/* %jp{厳密な幅の型定義} */ + +#if _KERNEL_CMPL_STDINT_H /* %jp{stdint.h が使える場合} */ + +/* %jp{8bit幅の符号付き整数型} */ +typedef int8_t _KERNEL_T_B; +#define _KERNEL_TMIN_B INT8_MIN +#define _KERNEL_TMAX_B INT8_MAX +#define _KERNEL_TBIT_B 8 + +/* %jp{8bit幅の符号無し整数型} */ +typedef uint8_t _KERNEL_T_UB; +#define _KERNEL_TMIN_UB 0 +#define _KERNEL_TMAX_UB UINT8_MAX +#define _KERNEL_TBIT_UB 8 + +/* %jp{16bit幅の符号付き整数型} */ +typedef int16_t _KERNEL_T_H; +#define _KERNEL_TMIN_H INT16_MIN +#define _KERNEL_TMAX_H INT16_MAX +#define _KERNEL_TBIT_H 16 + +/* %jp{16bit幅の符号無し整数型} */ +typedef uint16_t _KERNEL_T_UH; +#define _KERNEL_TMIN_UH 0 +#define _KERNEL_TMAX_UH UINT16_MAX +#define _KERNEL_TBIT_UH 16 + +/* %jp{32bit幅の符号付き整数型} */ +typedef int32_t _KERNEL_T_W; +#define _KERNEL_TMIN_W INT32_MIN +#define _KERNEL_TMAX_W INT32_MAX +#define _KERNEL_TBIT_W 32 + +/* %jp{32bit幅の符号無し整数型} */ +typedef uint32_t _KERNEL_T_UW; +#define _KERNEL_TMIN_UW 0 +#define _KERNEL_TMAX_UW UINT32_MAX +#define _KERNEL_TBIT_UW 32 + +/* %jp{64bit幅の符号付き整数型} */ +typedef int64_t _KERNEL_T_D; +#define _KERNEL_TMIN_D INT64_MIN +#define _KERNEL_TMAX_D INT64_MAX +#define _KERNEL_TBIT_D 64 + +/* %jp{64bit幅の符号無し整数型} */ +typedef uint64_t _KERNEL_T_UD; +#define _KERNEL_TMIN_UD 0 +#define _KERNEL_TMAX_UD UINT64_MAX +#define _KERNEL_TBIT_UD 64 + +/* %jp{64bit型の有効化} */ +#define _KERNEL_ENABLE64 TRUE + +/* %jp{64bit定数の定義} */ +#define _KERNEL_CONSTNAT_INT64(x) (x ## LL) +#define _KERNEL_CONSTNAT_UINT64(x) (x ## ULL) + +#else /* %jp{stdint.h が使えない場合} */ + +/* %jp{8bit幅の符号付き整数型} */ +typedef signed char _KERNEL_T_B; +#define _KERNEL_TMIN_B SCHAR_MIN +#define _KERNEL_TMAX_B SCHAR_MAX +#define _KERNEL_TBIT_B 8 + +/* %jp{8bit幅の符号無し整数型} */ +typedef unsigned char _KERNEL_T_UB; +#define _KERNEL_TMIN_UB 0 +#define _KERNEL_TMAX_UB UCHAR_MAX +#define _KERNEL_TBIT_UB 8 + +/* %jp{16bit幅の符号付き整数型} */ +typedef signed short _KERNEL_T_H; +#define _KERNEL_TMIN_H SHRT_MIN +#define _KERNEL_TMAX_H SHRT_MAX +#define _KERNEL_TBIT_H 16 + +/* %jp{16bit幅の符号無し整数型} */ +typedef unsigned short _KERNEL_T_UH; +#define _KERNEL_TMIN_UH 0 +#define _KERNEL_TMAX_UH USHRT_MAX +#define _KERNEL_TBIT_UH 16 + +/* %jp{32bit幅の符号付き整数型} */ +typedef signed long _KERNEL_T_W; +#define _KERNEL_TMIN_W LONG_MIN +#define _KERNEL_TMAX_W LONG_MAX +#define _KERNEL_TBIT_W 32 + +/* %jp{32bit幅の符号無し整数型} */ +typedef unsigned long _KERNEL_T_UW; +#define _KERNEL_TMIN_UW 0 +#define _KERNEL_TMAX_UW ULONG_MAX +#define _KERNEL_TBIT_UW 32 + + +#if _KERNEL_CMPL_64BIT /* %jp{コンパイラが64bitをサポートしているなら} */ + +/* %jp{64bit幅の符号付き整数型} */ +typedef _KERNEL_CMPL_INT64 _KERNEL_T_D; +#define _KERNEL_TMIN_D _KERNEL_CMPL_TMIN_INT64 +#define _KERNEL_TMAX_D _KERNEL_CMPL_TMAX_INT64 +#define _KERNEL_TBIT_D 64 + +/* %jp{64bit幅の符号無し整数型} */ +typedef _KERNEL_CMPL_UINT64 _KERNEL_T_UD; +#define _KERNEL_TMIN_UD _KERNEL_CMPL_TMIN_UINT64 +#define _KERNEL_TMAX_UD _KERNEL_CMPL_TMAX_UINT64 +#define _KERNEL_TBIT_UD 64 + +/* %jp{64bit型の有効化} */ +#define _KERNEL_ENABLE64 TRUE + +/* %jp{64bit定数の定義} */ +#define _KERNEL_CONSTNAT_INT64(x) _KERNEL_CMPL_CONSTNAT_INT64(x) +#define _KERNEL_CONSTNAT_UINT64(x) _KERNEL_CMPL_CONSTNAT_UINT64(x) + +#else /* %jp{コンパイラが64bitを未サポートなら */ + +/* %jp{64bit型は無効} */ +#define _KERNEL_ENABLE64 FALSE + +#endif + +#endif /* _KERNEL_CMPL_STDINT_H */ + + + +/* %jp{プロセッサに適した符号付き整数型} */ +typedef int _KERNEL_T_PROC_INT; +#define _KERNEL_TMIN_PROC_INT INT_MIN +#define _KERNEL_TMAX_PROC_INT INT_MAX +#if (_KERNEL_TMIN_PROC_INT >= _KERNEL_TMIN_B) && (_KERNEL_TMAX_PROC_INT <= _KERNEL_TMAX_B) +#define _KERNEL_TBIT_PROC_INT _KERNEL_TBIT_B +#elif (_KERNEL_TMIN_PROC_INT >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_PROC_INT <= _KERNEL_TMAX_H) +#define _KERNEL_TBIT_PROC_INT _KERNEL_TBIT_H +#elif (_KERNEL_TMIN_PROC_INT >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_PROC_INT <= _KERNEL_TMAX_W) +#define _KERNEL_TBIT_PROC_INT _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_PROC_INT _KERNEL_TBIT_UD +#endif + +/* %jp{プロセッサに適した符号無し整数型} */ +typedef unsigned int _KERNEL_T_PROC_UINT; +#define _KERNEL_TMIN_PROC_UINT 0 +#define _KERNEL_TMAX_PROC_UINT UINT_MAX +#if (_KERNEL_TMIN_PROC_UINT >= _KERNEL_TMIN_UB) && (_KERNEL_TMAX_PROC_UINT <= _KERNEL_TMAX_UB) +#define _KERNEL_TBIT_PROC_UINT _KERNEL_TBIT_UB +#elif (_KERNEL_TMIN_PROC_UINT >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_PROC_UINT <= _KERNEL_TMAX_UH) +#define _KERNEL_TBIT_PROC_UINT _KERNEL_TBIT_UH +#elif (_KERNEL_TMIN_PROC_UINT >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_PROC_UINT <= _KERNEL_TMAX_UW) +#define _KERNEL_TBIT_PROC_UINT _KERNEL_TBIT_UW +#else +#define _KERNEL_TBIT_PROC_UINT _KERNEL_TBIT_UD +#endif + + + +#if _KERNEL_CMPL_STDINT_H /* %jp{stdint.h が使える場合} */ + +/* %jp{メモリサイズ重視の型定義} */ + +/* %jp{少なくとも8bitを表せる最小の符号付き整数型} */ +typedef int_least8_t _KERNEL_T_LEAST_B; +#define _KERNEL_TMIN_LEAST_B INT_LEAST8_MIN +#define _KERNEL_TMAX_LEAST_B INT_LEAST8_MAX +#if (_KERNEL_TMIN_LEAST_B >= _KERNEL_TMIN_B) && (_KERNEL_TMAX_LEAST_B <= _KERNEL_TMAX_B) +#define _KERNEL_TBIT_LEAST_B _KERNEL_TBIT_B +#elif (_KERNEL_TMIN_LEAST_B >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_LEAST_B <= _KERNEL_TMAX_H) +#define _KERNEL_TBIT_LEAST_B _KERNEL_TBIT_H +#elif (_KERNEL_TMIN_LEAST_B >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_LEAST_B <= _KERNEL_TMAX_W) +#define _KERNEL_TBIT_LEAST_B _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_LEAST_B _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも8bitを表せる最小の符号無し整数型} */ +typedef uint_least8_t _KERNEL_T_LEAST_UB; +#define _KERNEL_TMIN_LEAST_UB 0 +#define _KERNEL_TMAX_LEAST_UB UINT_LEAST8_MAX +#if (_KERNEL_TMIN_LEAST_UB >= _KERNEL_TMIN_UB) && (_KERNEL_TMAX_LEAST_UB <= _KERNEL_TMAX_UB) +#define _KERNEL_TBIT_LEAST_UB _KERNEL_TBIT_B +#elif (_KERNEL_TMIN_LEAST_UB >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_LEAST_UB <= _KERNEL_TMAX_UH) +#define _KERNEL_TBIT_LEAST_UB _KERNEL_TBIT_H +#elif (_KERNEL_TMIN_LEAST_UB >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_LEAST_UB <= _KERNEL_TMAX_UW) +#define _KERNEL_TBIT_LEAST_UB _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_LEAST_UB _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも16bitを表せる最小の符号付き整数型} */ +typedef int_least16_t _KERNEL_T_LEAST_H; +#define _KERNEL_TMIN_LEAST_H INT_LEAST16_MIN +#define _KERNEL_TMAX_LEAST_H INT_LEAST16_MAX +#if (_KERNEL_TMIN_LEAST_H >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_LEAST_H <= _KERNEL_TMAX_H) +#define _KERNEL_TBIT_LEAST_H _KERNEL_TBIT_H +#elif (_KERNEL_TMIN_LEAST_H >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_LEAST_H <= _KERNEL_TMAX_W) +#define _KERNEL_TBIT_LEAST_H _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_LEAST_H _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも16bitを表せる最小の符号無し整数型} */ +typedef uint_least16_t _KERNEL_T_LEAST_UH; +#define _KERNEL_TMIN_LEAST_UH 0 +#define _KERNEL_TMAX_LEAST_UH UINT_LEAST16_MAX +#if (_KERNEL_TMIN_LEAST_UH >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_LEAST_UH <= _KERNEL_TMAX_UH) +#define _KERNEL_TBIT_LEAST_UH _KERNEL_TBIT_UH +#elif (_KERNEL_TMIN_LEAST_UH >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_LEAST_UH <= _KERNEL_TMAX_UW) +#define _KERNEL_TBIT_LEAST_UH _KERNEL_TBIT_UW +#else +#define _KERNEL_TBIT_LEAST_UH _KERNEL_TBIT_UD +#endif + +/* %jp{少なくとも32bitを表せる最小の符号付き整数型} */ +typedef int_least32_t _KERNEL_T_LEAST_W; +#define _KERNEL_TMIN_LEAST_W INT_LEAST32_MIN +#define _KERNEL_TMAX_LEAST_W INT_LEAST32_MAX +#if (_KERNEL_TMIN_LEAST_W >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_LEAST_W <= _KERNEL_TMAX_W) +#define _KERNEL_TBIT_LEAST_W _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_LEAST_W _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも32bitを表せる最小の符号無し整数型} */ +typedef uint_least32_t _KERNEL_T_LEAST_UW; +#define _KERNEL_TMIN_LEAST_UW 0 +#define _KERNEL_TMAX_LEAST_UW UINT_LEAST32_MAX +#if (_KERNEL_TMIN_LEAST_UW >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_LEAST_UW <= _KERNEL_TMAX_UW) +#define _KERNEL_TBIT_LEAST_UW _KERNEL_TBIT_UW +#else +#define _KERNEL_TBIT_LEAST_UW _KERNEL_TBIT_UD +#endif + +/* %jp{少なくとも64bitを表せる最小の符号付き整数型} */ +typedef int_least64_t _KERNEL_T_LEAST_D; +#define _KERNEL_TMIN_LEAST_D INT_LEAST64_MIN +#define _KERNEL_TMAX_LEAST_D INT_LEAST64_MAX +#define _KERNEL_TBIT_LEAST_D _KERNEL_TBIT_D + +/* %jp{少なくとも64bitを表せる最小の符号無し整数型} */ +typedef uint_least64_t _KERNEL_T_LEAST_UD; +#define _KERNEL_TMIN_LEAST_UD 0 +#define _KERNEL_TMAX_LEAST_UD UINT_LEAST64_MAX +#define _KERNEL_TBIT_LEAST_UD _KERNEL_TBIT_UD + + +/* %jp{速度重視の型定義} */ + +/* %jp{少なくとも8bitを表せる最速の符号付き整数型} */ +typedef int_fast8_t _KERNEL_T_FAST_B; +#define _KERNEL_TMIN_FAST_B INT_FAST8_MIN +#define _KERNEL_TMAX_FAST_B INT_FAST8_MAX +#if (_KERNEL_TMIN_FAST_B >= _KERNEL_TMIN_B) && (_KERNEL_TMAX_FAST_B <= _KERNEL_TMAX_B) +#define _KERNEL_TBIT_FAST_B _KERNEL_TBIT_B +#elif (_KERNEL_TMIN_FAST_B >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_FAST_B <= _KERNEL_TMAX_H) +#define _KERNEL_TBIT_FAST_B _KERNEL_TBIT_H +#elif (_KERNEL_TMIN_FAST_B >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_FAST_B <= _KERNEL_TMAX_W) +#define _KERNEL_TBIT_FAST_B _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_FAST_B _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも8bitを表せる最速の符号無し整数型} */ +typedef uint_fast8_t _KERNEL_T_FAST_UB; +#define _KERNEL_TMIN_FAST_UB 0 +#define _KERNEL_TMAX_FAST_UB UINT_FAST8_MAX +#if (_KERNEL_TMIN_FAST_UB >= _KERNEL_TMIN_UB) && (_KERNEL_TMAX_FAST_UB <= _KERNEL_TMAX_UB) +#define _KERNEL_TBIT_FAST_UB _KERNEL_TBIT_B +#elif (_KERNEL_TMIN_FAST_UB >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_FAST_UB <= _KERNEL_TMAX_UH) +#define _KERNEL_TBIT_FAST_UB _KERNEL_TBIT_H +#elif (_KERNEL_TMIN_FAST_UB >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_FAST_UB <= _KERNEL_TMAX_UW) +#define _KERNEL_TBIT_FAST_UB _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_FAST_UB _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも16bitを表せる最速の符号付き整数型} */ +typedef int_fast16_t _KERNEL_T_FAST_H; +#define _KERNEL_TMIN_FAST_H INT_FAST16_MIN +#define _KERNEL_TMAX_FAST_H INT_FAST16_MAX +#if (_KERNEL_TMIN_FAST_H >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_FAST_H <= _KERNEL_TMAX_H) +#define _KERNEL_TBIT_FAST_H _KERNEL_TBIT_H +#elif (_KERNEL_TMIN_FAST_H >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_FAST_H <= _KERNEL_TMAX_W) +#define _KERNEL_TBIT_FAST_H _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_FAST_H _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも16bitを表せる最速の符号無し整数型} */ +typedef uint_fast16_t _KERNEL_T_FAST_UH; +#define _KERNEL_TMIN_FAST_UH 0 +#define _KERNEL_TMAX_FAST_UH UINT_FAST16_MAX +#if (_KERNEL_TMIN_FAST_UH >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_FAST_UH <= _KERNEL_TMAX_UH) +#define _KERNEL_TBIT_FAST_UH _KERNEL_TBIT_UH +#elif (_KERNEL_TMIN_FAST_UH >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_FAST_UH <= _KERNEL_TMAX_UW) +#define _KERNEL_TBIT_FAST_UH _KERNEL_TBIT_UW +#else +#define _KERNEL_TBIT_FAST_UH _KERNEL_TBIT_UD +#endif + +/* %jp{少なくとも32bitを表せる最速の符号付き整数型} */ +typedef int_fast32_t _KERNEL_T_FAST_W; +#define _KERNEL_TMIN_FAST_W INT_FAST32_MIN +#define _KERNEL_TMAX_FAST_W INT_FAST32_MAX +#if (_KERNEL_TMIN_FAST_W >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_FAST_W <= _KERNEL_TMAX_W) +#define _KERNEL_TBIT_FAST_W _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_FAST_W _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも32bitを表せる最速の符号無し整数型} */ +typedef uint_fast32_t _KERNEL_T_FAST_UW; +#define _KERNEL_TMIN_FAST_UW 0 +#define _KERNEL_TMAX_FAST_UW UINT_FAST32_MAX +#if (_KERNEL_TMIN_FAST_UW >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_FAST_UW <= _KERNEL_TMAX_UW) +#define _KERNEL_TBIT_FAST_UW _KERNEL_TBIT_UW +#else +#define _KERNEL_TBIT_FAST_UW _KERNEL_TBIT_UD +#endif + +/* %jp{少なくとも64bitを表せる最速の符号付き整数型} */ +typedef int_fast64_t _KERNEL_T_FAST_D; +#define _KERNEL_TMIN_FAST_D INT_FAST64_MIN +#define _KERNEL_TMAX_FAST_D INT_FAST64_MAX +#define _KERNEL_TBIT_FAST_D _KERNEL_TBIT_D + +/* %jp{少なくとも64bitを表せる最速の符号無し整数型} */ +typedef uint_fast64_t _KERNEL_T_FAST_UD; +#define _KERNEL_TMIN_FAST_UD 0 +#define _KERNEL_TMAX_FAST_UD UINT_FAST64_MAX +#define _KERNEL_TBIT_FAST_UD _KERNEL_TBIT_UD + + +/* %jp{ポインタが格納可能な整数型定義} */ + +/* %jp{ポインタが格納可能な符号付き整数型} */ +typedef intptr_t _KERNEL_T_INTPTR; +#define _KERNEL_TMIN_INTPTR INTPTR_MIN +#define _KERNEL_TMAX_INTPTR INTPTR_MAX +#if (_KERNEL_TMIN_INTPTR >= _KERNEL_TMIN_B) && (_KERNEL_TMAX_INTPTR <= _KERNEL_TMAX_B) +#define _KERNEL_TBIT_INTPTR _KERNEL_TBIT_B +#elif (_KERNEL_TMIN_INTPTR >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_INTPTR <= _KERNEL_TMAX_H) +#define _KERNEL_TBIT_INTPTR _KERNEL_TBIT_H +#elif (_KERNEL_TMIN_INTPTR >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_INTPTR <= _KERNEL_TMAX_W) +#define _KERNEL_TBIT_INTPTR _KERNEL_TBIT_W +#else +#define _KERNEL_TBIT_INTPTR _KERNEL_TBIT_D +#endif + +/* %jp{ポインタが格納可能な符号無し整数型} */ +typedef uintptr_t _KERNEL_T_UINTPTR; +#define _KERNEL_TMIN_UINTPTR 0 +#define _KERNEL_TMAX_UINTPTR UINTPTR_MAX +#if (_KERNEL_TMIN_UINTPTR >= _KERNEL_TMIN_UB) && (_KERNEL_TMAX_UINTPTR <= _KERNEL_TMAX_UB) +#define _KERNEL_TBIT_UINTPTR _KERNEL_TBIT_UB +#elif (_KERNEL_TMIN_UINTPTR >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_UINTPTR <= _KERNEL_TMAX_UH) +#define _KERNEL_TBIT_UINTPTR _KERNEL_TBIT_UH +#elif (_KERNEL_TMIN_UINTPTR >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_UINTPTR <= _KERNEL_TMAX_UW) +#define _KERNEL_TBIT_UINTPTR _KERNEL_TBIT_UW +#else +#define _KERNEL_TBIT_UINTPTR _KERNEL_TBIT_UD +#endif + + +#else /* %jp{stdint.h が使えない場合} */ + +/* %jp{メモリサイズ重視の型定義} */ + +/* %jp{少なくとも8bitを表せる最小の符号付き整数型} */ +typedef _KERNEL_T_B _KERNEL_T_LEAST_B; +#define _KERNEL_TMIN_LEAST_B _KERNEL_TMIN_B +#define _KERNEL_TMAX_LEAST_B _KERNEL_TMAX_B +#define _KERNEL_TBIT_LEAST_B _KERNEL_TBIT_B + +/* %jp{少なくとも8bitを表せる最小の符号無し整数型} */ +typedef _KERNEL_T_UB _KERNEL_T_LEAST_UB; +#define _KERNEL_TMIN_LEAST_UB _KERNEL_TMIN_UB +#define _KERNEL_TMAX_LEAST_UB _KERNEL_TMAX_UB +#define _KERNEL_TBIT_LEAST_UB _KERNEL_TBIT_UB + +/* %jp{少なくとも16bitを表せる最小の符号付き整数型} */ +typedef _KERNEL_T_H _KERNEL_T_LEAST_H; +#define _KERNEL_TMIN_LEAST_H _KERNEL_TMIN_H +#define _KERNEL_TMAX_LEAST_H _KERNEL_TMAX_H +#define _KERNEL_TBIT_LEAST_H _KERNEL_TBIT_H + +/* %jp{少なくとも16bitを表せる最小の符号無し整数型} */ +typedef _KERNEL_T_UH _KERNEL_T_LEAST_UH; +#define _KERNEL_TMIN_LEAST_UH _KERNEL_TMIN_UH +#define _KERNEL_TMAX_LEAST_UH _KERNEL_TMAX_UH +#define _KERNEL_TBIT_LEAST_UH _KERNEL_TBIT_UH + +/* %jp{少なくとも32bitを表せる最小の符号付き整数型} */ +typedef _KERNEL_T_W _KERNEL_T_LEAST_W; +#define _KERNEL_TMIN_LEAST_W _KERNEL_TMIN_W +#define _KERNEL_TMAX_LEAST_W _KERNEL_TMAX_W +#define _KERNEL_TBIT_LEAST_W _KERNEL_TBIT_W + +/* %jp{少なくとも32bitを表せる最小の符号無し整数型} */ +typedef _KERNEL_T_UW _KERNEL_T_LEAST_UW; +#define _KERNEL_TMIN_LEAST_UW _KERNEL_TMIN_UW +#define _KERNEL_TMAX_LEAST_UW _KERNEL_TMAX_UW +#define _KERNEL_TBIT_LEAST_UW _KERNEL_TBIT_UW + + +#if _KERNEL_ENABLE64 + +/* %jp{少なくとも64bitを表せる最小の符号付き整数型} */ +typedef _KERNEL_T_D _KERNEL_T_LEAST_D; +#define _KERNEL_TMIN_LEAST_D _KERNEL_TMIN_D +#define _KERNEL_TMAX_LEAST_D _KERNEL_TMAX_D +#define _KERNEL_TBIT_LEAST_D _KERNEL_TBIT_D + +/* %jp{少なくとも64bitを表せる最小の符号無し整数型} */ +typedef _KERNEL_T_UD _KERNEL_T_LEAST_UD; +#define _KERNEL_TMIN_LEAST_UD _KERNEL_TMIN_UD +#define _KERNEL_TMAX_LEAST_UD _KERNEL_TMAX_UD +#define _KERNEL_TBIT_LEAST_UD _KERNEL_TBIT_UD + +#endif + + +/* %jp{速度重視の型定義} */ + +/* %jp{少なくとも8bitを表せる最速の符号付き整数型} */ +#if (_KERNEL_TMIN_B >= _KERNEL_TMIN_PROC_INT) && (_KERNEL_TMAX_B <= _KERNEL_TMAX_PROC_INT) +typedef _KERNEL_T_PROC_INT _KERNEL_T_FAST_B; +#define _KERNEL_TMIN_FAST_B _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_FAST_B _KERNEL_TMAX_PROC_INT +#define _KERNEL_TBIT_FAST_B _KERNEL_TBIT_PROC_INT +#else +typedef _KERNEL_T_B _KERNEL_T_FAST_B; +#define _KERNEL_TMIN_FAST_B _KERNEL_TMIN_B +#define _KERNEL_TMAX_FAST_B _KERNEL_TMAX_B +#define _KERNEL_TBIT_FAST_B _KERNEL_TBIT_B +#endif + +/* %jp{少なくとも8bitを表せる最速の符号無し整数型} */ +#if (_KERNEL_TMIN_UB >= _KERNEL_TMIN_PROC_UINT) && (_KERNEL_TMAX_UB <= _KERNEL_TMAX_PROC_UINT) +typedef _KERNEL_T_PROC_UINT _KERNEL_T_FAST_UB; +#define _KERNEL_TMIN_FAST_UB _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_FAST_UB _KERNEL_TMAX_PROC_UINT +#define _KERNEL_TBIT_FAST_UB _KERNEL_TBIT_PROC_UINT +#else +typedef _KERNEL_T_UB _KERNEL_T_FAST_UB; +#define _KERNEL_TMIN_FAST_UB _KERNEL_TMIN_UB +#define _KERNEL_TMAX_FAST_UB _KERNEL_TMAX_UB +#define _KERNEL_TBIT_FAST_UB _KERNEL_TBIT_UB +#endif + +/* %jp{少なくとも16bitを表せる最速の符号付き整数型} */ +#if (_KERNEL_TMIN_H >= _KERNEL_TMIN_PROC_INT) && (_KERNEL_TMAX_H <= _KERNEL_TMAX_PROC_INT) +typedef _KERNEL_T_PROC_INT _KERNEL_T_FAST_H; +#define _KERNEL_TMIN_FAST_H _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_FAST_H _KERNEL_TMAX_PROC_INT +#define _KERNEL_TBIT_FAST_H _KERNEL_TBIT_PROC_INT +#else +typedef _KERNEL_T_H _KERNEL_T_FAST_H; +#define _KERNEL_TMIN_FAST_H _KERNEL_TMIN_H +#define _KERNEL_TMAX_FAST_H _KERNEL_TMAX_H +#define _KERNEL_TBIT_FAST_H _KERNEL_TBIT_H +#endif + +/* %jp{少なくとも16bitを表せる最速の符号無し整数型} */ +#if (_KERNEL_TMIN_UH >= _KERNEL_TMIN_PROC_UINT) && (_KERNEL_TMAX_UH <= _KERNEL_TMAX_PROC_UINT) +typedef _KERNEL_T_PROC_UINT _KERNEL_T_FAST_UH; +#define _KERNEL_TMIN_FAST_UH _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_FAST_UH _KERNEL_TMAX_PROC_UINT +#define _KERNEL_TBIT_FAST_UH _KERNEL_TBIT_PROC_UINT +#else +typedef _KERNEL_T_UH _KERNEL_T_FAST_UH; +#define _KERNEL_TMIN_FAST_UH _KERNEL_TMIN_UH +#define _KERNEL_TMAX_FAST_UH _KERNEL_TMAX_UH +#define _KERNEL_TBIT_FAST_UH _KERNEL_TBIT_UH +#endif + +/* %jp{少なくとも32bitを表せる最速の符号付き整数型} */ +#if (_KERNEL_TMIN_W >= _KERNEL_TMIN_PROC_INT) && (_KERNEL_TMAX_W <= _KERNEL_TMAX_PROC_INT) +typedef _KERNEL_T_PROC_INT _KERNEL_T_FAST_W; +#define _KERNEL_TMIN_FAST_W _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_FAST_W _KERNEL_TMAX_PROC_INT +#define _KERNEL_TBIT_FAST_W _KERNEL_TBIT_PROC_INT +#else +typedef _KERNEL_T_W _KERNEL_T_FAST_W; +#define _KERNEL_TMIN_FAST_W _KERNEL_TMIN_W +#define _KERNEL_TMAX_FAST_W _KERNEL_TMAX_W +#define _KERNEL_TBIT_FAST_W _KERNEL_TBIT_W +#endif + +/* %jp{少なくとも32bitを表せる最速の符号無し整数型} */ +#if (_KERNEL_TMIN_UW >= _KERNEL_TMIN_PROC_UINT) && (_KERNEL_TMAX_UW <= _KERNEL_TMAX_PROC_UINT) +typedef _KERNEL_T_PROC_UINT _KERNEL_T_FAST_UW; +#define _KERNEL_TMIN_FAST_UW _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_FAST_UW _KERNEL_TMAX_PROC_UINT +#define _KERNEL_TBIT_FAST_UW _KERNEL_TBIT_PROC_UINT +#else +typedef _KERNEL_T_UW _KERNEL_T_FAST_UW; +#define _KERNEL_TMIN_FAST_UW _KERNEL_TMIN_UW +#define _KERNEL_TMAX_FAST_UW _KERNEL_TMAX_UW +#define _KERNEL_TBIT_FAST_UW _KERNEL_TBIT_UW +#endif + + +#if _KERNEL_ENABLE64 + +/* %jp{少なくとも64bitを表せる最速の符号付き整数型} */ +#if (_KERNEL_TMIN_D >= _KERNEL_TMIN_PROC_INT) && (_KERNEL_TMAX_D <= _KERNEL_TMAX_PROC_INT) +typedef _KERNEL_T_PROC_INT _KERNEL_T_FAST_D; +#define _KERNEL_TMIN_FAST_D _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_FAST_D _KERNEL_TMAX_PROC_INT +#define _KERNEL_TBIT_FAST_D _KERNEL_TBIT_PROC_INT +#else +typedef _KERNEL_T_D _KERNEL_T_FAST_D; +#define _KERNEL_TMIN_FAST_D _KERNEL_TMIN_D +#define _KERNEL_TMAX_FAST_D _KERNEL_TMAX_D +#define _KERNEL_TBIT_FAST_D _KERNEL_TBIT_D +#endif + +/* %jp{少なくとも64bitを表せる最速の符号無し整数型} */ +#if (_KERNEL_TMIN_UD >= _KERNEL_TBIT_PROC_UINT) && (_KERNEL_TMAX_UD <= _KERNEL_TMAX_PROC_UINT) +typedef _KERNEL_T_PROC_UINT _KERNEL_T_FAST_UD; +#define _KERNEL_TMIN_FAST_UD _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_FAST_UD _KERNEL_TMAX_PROC_UINT +#define _KERNEL_TBIT_FAST_UD _KERNEL_TBIT_PROC_UINT +#else +typedef _KERNEL_T_UD _KERNEL_T_FAST_UD; +#define _KERNEL_TMIN_FAST_UD _KERNEL_TMIN_UD +#define _KERNEL_TMAX_FAST_UD _KERNEL_TMAX_UD +#define _KERNEL_TBIT_FAST_UD _KERNEL_TBIT_UD +#endif + +#endif + + +#if defined(_KERNEL_CMPL_PTR_SIZE) /* %jp{ポインタサイズが定義されていたら} */ +#if _KERNEL_CMPL_PTR_SIZE <= 16 /* %jp{ポインタサイズが16bit以下} */ + +/* %jp{ポインタが格納可能な整数型定義} */ +typedef _KERNEL_T_H _KERNEL_T_INTPTR; +#define _KERNEL_TMIN_INTPTR _KERNEL_TMIN_H +#define _KERNEL_TMAX_INTPTR _KERNEL_TMAX_H +#define _KERNEL_TBIT_INTPTR _KERNEL_TBIT_H + +/* %jp{ポインタが格納可能な符号無し整数型} */ +typedef _KERNEL_T_UH _KERNEL_T_UINTPTR; +#define _KERNEL_TMIN_UINTPTR _KERNEL_TMIN_UH +#define _KERNEL_TMAX_UINTPTR _KERNEL_TMAX_UH +#define _KERNEL_TBIT_UINTPTR _KERNEL_TBIT_UH + +#elif _KERNEL_CMPL_PTR_SIZE <= 32 /* %jp{ポインタサイズが32bit以下} */ + +/* %jp{ポインタが格納可能な整数型定義} */ +typedef _KERNEL_T_W _KERNEL_T_INTPTR; +#define _KERNEL_TMIN_INTPTR _KERNEL_TMIN_W +#define _KERNEL_TMAX_INTPTR _KERNEL_TMAX_W +#define _KERNEL_TBIT_INTPTR _KERNEL_TBIT_W + +/* %jp{ポインタが格納可能な符号無し整数型} */ +typedef _KERNEL_T_UW _KERNEL_T_UINTPTR; +#define _KERNEL_TMIN_UINTPTR _KERNEL_TMIN_UW +#define _KERNEL_TMAX_UINTPTR _KERNEL_TMAX_UW +#define _KERNEL_TBIT_UINTPTR _KERNEL_TBIT_UW + +#else /* %jp{ポインタサイズが32bitを超える} */ + +/* %jp{ポインタが格納可能な整数型定義} */ +typedef _KERNEL_T_D _KERNEL_T_INTPTR; +#define _KERNEL_TMIN_INTPTR _KERNEL_TMIN_D +#define _KERNEL_TMAX_INTPTR _KERNEL_TMAX_D +#define _KERNEL_TBIT_INTPTR _KERNEL_TBIT_D + +/* %jp{ポインタが格納可能な符号無し整数型} */ +typedef _KERNEL_T_UD _KERNEL_T_UINTPTR; +#define _KERNEL_TMIN_UINTPTR _KERNEL_TMIN_UD +#define _KERNEL_TMAX_UINTPTR _KERNEL_TMAX_UD +#define _KERNEL_TBIT_UINTPTR _KERNEL_TBIT_UD + +#endif + +#else /* %jp{ポインタサイズが未定義なら} */ + +/* %jp{ポインタが格納可能な整数型定義} */ +typedef _KERNEL_T_W _KERNEL_T_INTPTR; +#define _KERNEL_TMIN_INTPTR _KERNEL_TMIN_W +#define _KERNEL_TMAX_INTPTR _KERNEL_TMAX_W +#define _KERNEL_TBIT_INTPTR _KERNEL_TBIT_W + +/* %jp{ポインタが格納可能な符号無し整数型} */ +typedef _KERNEL_T_UW _KERNEL_T_UINTPTR; +#define _KERNEL_TMIN_UINTPTR _KERNEL_TMIN_UW +#define _KERNEL_TMAX_UINTPTR _KERNEL_TMAX_UW +#define _KERNEL_TBIT_UINTPTR _KERNEL_TBIT_UW + +#endif + +#endif + + +/* %jp{ポインタ型} */ +typedef void* _KERNEL_T_VP; +#if defined(_KERNEL_CMPL_PTR_SIZE) +#define _KERNEL_TBIT_VP _KERNEL_CMPL_PTR_SIZE +#else +#define _KERNEL_TBIT_VP _KERNEL_TBIT_INTPTR +#endif + + + + +#if _KERNEL_ENABLE64 + +/** %jp{ビット幅算出マクロ} */ +#define _KERNEL_MAXNUM2BIT(x) \ + ( \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000000) ? 0 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000001) ? 1 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000003) ? 2 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000007) ? 3 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000000f) ? 4 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000001f) ? 5 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000003f) ? 6 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000007f) ? 7 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000000ff) ? 8 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000001ff) ? 9 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000003ff) ? 10 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000007ff) ? 11 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000fff) ? 12 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000001fff) ? 13 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000003fff) ? 14 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000007fff) ? 15 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000ffff) ? 16 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000001ffff) ? 17 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000003ffff) ? 18 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000007ffff) ? 19 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000fffff) ? 20 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000001fffff) ? 21 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000003fffff) ? 22 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000007fffff) ? 23 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000ffffff) ? 24 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000001ffffff) ? 25 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000003ffffff) ? 26 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000007ffffff) ? 27 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000000fffffff) ? 28 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000001fffffff) ? 29 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000003fffffff) ? 30 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000007fffffff) ? 31 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000000ffffffff) ? 32 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000001ffffffff) ? 33 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000003ffffffff) ? 34 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000007ffffffff) ? 35 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000000fffffffff) ? 36 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000001fffffffff) ? 37 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000003fffffffff) ? 38 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000007fffffffff) ? 39 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000000ffffffffff) ? 40 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000001ffffffffff) ? 41 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000003ffffffffff) ? 42 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000007ffffffffff) ? 43 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00000fffffffffff) ? 44 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00001fffffffffff) ? 45 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00003fffffffffff) ? 46 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00007fffffffffff) ? 47 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0000ffffffffffff) ? 48 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0001ffffffffffff) ? 49 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0003ffffffffffff) ? 50 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0007ffffffffffff) ? 51 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x000fffffffffffff) ? 52 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x001fffffffffffff) ? 53 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x003fffffffffffff) ? 54 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x007fffffffffffff) ? 55 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x00ffffffffffffff) ? 56 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x01ffffffffffffff) ? 57 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x03ffffffffffffff) ? 58 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x07ffffffffffffff) ? 59 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x0fffffffffffffff) ? 60 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x1fffffffffffffff) ? 61 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x3fffffffffffffff) ? 62 : \ + (x) <= _KERNEL_CONSTNAT_INT64(0x7fffffffffffffff) ? 63 : 64 \ + ) + +#else + + +/** %jp{ビット幅算出マクロ} */ +#define _KERNEL_MAXNUM2BIT(x) \ + ( \ + (x) <= 0x00000000 ? 0 : \ + (x) <= 0x00000001 ? 1 : \ + (x) <= 0x00000003 ? 2 : \ + (x) <= 0x00000007 ? 3 : \ + (x) <= 0x0000000f ? 4 : \ + (x) <= 0x0000001f ? 5 : \ + (x) <= 0x0000003f ? 6 : \ + (x) <= 0x0000007f ? 7 : \ + (x) <= 0x000000ff ? 8 : \ + (x) <= 0x000001ff ? 9 : \ + (x) <= 0x000003ff ? 10 : \ + (x) <= 0x000007ff ? 11 : \ + (x) <= 0x00000fff ? 12 : \ + (x) <= 0x00001fff ? 13 : \ + (x) <= 0x00003fff ? 14 : \ + (x) <= 0x00007fff ? 15 : \ + (x) <= 0x0000ffff ? 16 : \ + (x) <= 0x0001ffff ? 17 : \ + (x) <= 0x0003ffff ? 18 : \ + (x) <= 0x0007ffff ? 19 : \ + (x) <= 0x000fffff ? 20 : \ + (x) <= 0x001fffff ? 21 : \ + (x) <= 0x003fffff ? 22 : \ + (x) <= 0x007fffff ? 23 : \ + (x) <= 0x00ffffff ? 24 : \ + (x) <= 0x01ffffff ? 25 : \ + (x) <= 0x03ffffff ? 26 : \ + (x) <= 0x07ffffff ? 27 : \ + (x) <= 0x0fffffff ? 28 : \ + (x) <= 0x1fffffff ? 29 : \ + (x) <= 0x3fffffff ? 30 : \ + (x) <= 0x7fffffff ? 31 : 32 \ + ) + +#endif + + +#endif /* _KERNEL__core__basetyp_h__ */ + + +/* end of file */ diff --git a/kernel/include/core/cmpl.h b/kernel/include/core/cmpl.h new file mode 100755 index 0000000..5e292cc --- /dev/null +++ b/kernel/include/core/cmpl.h @@ -0,0 +1,80 @@ +/** + * Hyper Operating System V4 Advance + * + * @file cmpl.h + * @brief %jp{コンパイラ判定ヘッダファイル}%en{uITRON4.0 kernel type header file} + * + * @version $Id: cmpl.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__core__cmpl_h__ +#define _KERNEL__core__cmpl_h__ + + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99(ISO/IEC 9899:1999) */ +#define _KERNEL_CMPL_STDINT_H TRUE /**< %jp{stdint.hは利用可能か?} */ + +#elif defined(__GNUC__) && !defined(__STRICT_ANSI__) + +/* gcc */ +#if 0 + +#define _KERNEL_CMPL_STDINT_H TRUE /**< %jp{stdint.hは利用可能か?} */ + +#else + +#define _KERNEL_CMPL_STDINT_H FALSE /**< %jp{stdint.hは利用可能か?} */ +#define _KERNEL_CMPL_64BIT TRUE /**< %jp{64ビット整数は利用可能か?} */ +#define _KERNEL_CMPL_INT64 long long /**< %jp{符号付き64ビット整数の宣言名} */ +#define _KERNEL_CMPL_UINT64 unsigned long long /**< %jp{符号無し64ビット整数の宣言名} */ +#define _KERNEL_CMPL_CONSTNAT_INT64(x) (x ## LL) /**< %jp{符号付き64ビット整数の定数生成} */ +#define _KERNEL_CMPL_CONSTNAT_UINT64(x) (x ## ULL) /**< %jp{符号無し64ビット整数の定数生成} */ +#define _KERNEL_CMPL_TMIN_INT64 (-9223372036854775807LL) /**< %jp{符号付き64ビット整数の最小値} */ +#define _KERNEL_CMPL_TMAX_INT64 (9223372036854775807LL) /**< %jp{符号付き64ビット整数の最大値} */ +#define _KERNEL_CMPL_TMIN_UINT64 (0ULL) /**< %jp{符号無し64ビット整数の最小値} */ +#define _KERNEL_CMPL_TMAX_UINT64 (18446744073709551615ULL) /**< %jp{符号無し64ビット整数の最大値} */ +#define _KERNEL_CMPL_PTR_SIZE 32 /**< %jp{ポインタサイズを定義するか?} */ + +#endif + +#elif defined(_MSC_VER) + +/* Visual-C++ */ +#define _KERNEL_CMPL_STDINT_H FALSE /**< %jp{stdint.hは利用可能か?} */ + +#define _KERNEL_CMPL_64BIT TRUE /**< %jp{64ビット整数は利用可能か?} */ +#define _KERNEL_CMPL_INT64 signed __int64 /**< %jp{符号付き64ビット整数の宣言名} */ +#define _KERNEL_CMPL_UINT64 unsigned __int64 /**< %jp{符号無し64ビット整数の宣言名} */ +#define _KERNEL_CMPL_CONSTNAT_INT64(x) (x) /**< %jp{符号付き64ビット整数の定数生成} */ +#define _KERNEL_CMPL_CONSTNAT_UINT64(x) (x) /**< %jp{符号無し64ビット整数の定数生成} */ +#define _KERNEL_CMPL_TMIN_INT64 (-9223372036854775808) /**< %jp{符号付き64ビット整数の最小値} */ +#define _KERNEL_CMPL_TMAX_INT64 9223372036854775807 /**< %jp{符号付き64ビット整数の最大値} */ +#define _KERNEL_CMPL_TMIN_UINT64 0 /**< %jp{符号無し64ビット整数の最小値} */ +#define _KERNEL_CMPL_TMAX_UINT64 18446744073709551615 /**< %jp{符号無し64ビット整数の最大値} */ +#define _KERNEL_CMPL_PTR_SIZE 32 /**< %jp{ポインタサイズを定義するか?} */ + + +#elif defined(__ARMCC_VERSION) && !defined(__STRICT_ANSI__) + +/* armcc */ +#define _KERNEL_CMPL_STDINT_H TRUE /**< %jp{stdint.hは利用可能か?} */ + +#else + +/* ANSI-C (ISO/IEC 9899:1990) standard compiler */ +#define _KERNEL_CMPL_STDINT_H FALSE /**< %jp{stdint.hは利用可能か?} */ +#define _KERNEL_CMPL_64BIT FALSE /**< %jp{64ビット整数は利用可能か?} */ + +#endif + + +#endif /* _KERNEL__core__cmpl_h__ */ + + +/* end of file */ diff --git a/kernel/include/core/core.h b/kernel/include/core/core.h new file mode 100755 index 0000000..3a0300d --- /dev/null +++ b/kernel/include/core/core.h @@ -0,0 +1,36 @@ +/** + * Hyper Operating System V4 Advance + * + * @file core.h + * @brief %jp{カーネル内部用コアヘッダファイル}%en{kernel core header file} + * + * @version $Id: core.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__core__core_h__ +#define _KERNEL__core__core_h__ + + +#include "kernel.h" +#include "procatr.h" +#include "proc.h" +#include "ircatr.h" +#include "irc.h" +#include "config/cfgknl.h" +#include "parser/parsknl.h" +#include "core/opttyp.h" +#include "core/objid.h" +#include "core/objhdl.h" +#include "object/tskobj.h" +#include "config/cfgerr.h" +#include "parser/parserr.h" + + +#endif /* _KERNEL__core__core_h__ */ + + +/* end of file */ diff --git a/kernel/include/core/dsp.h b/kernel/include/core/dsp.h new file mode 100755 index 0000000..57f14b6 --- /dev/null +++ b/kernel/include/core/dsp.h @@ -0,0 +1,82 @@ +/** + * Hyper Operating System V4 Advance + * + * @file dsp.h + * @brief %jp{タスクディスパッチャのヘッダファイル}%en{task dispatcher heder file} + * + * @version $Id: dsp.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL_core__dsp_h__ +#define _KERNEL_core__dsp_h__ + + + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_dsp_tsk(void); /**< %jp{タスクディスパッチ} */ +void _kernel_ent_tsk(VP_INT exinf1, VP_INT exinf2); /**< %jp{タスクエントリーポイント} */ + +void _kernel_dsp_sta_tsk(_KERNEL_T_TSKHDL tskhdl); /**< %jp{他タスクを開始する} */ +void _kernel_dsp_ext_tsk(_KERNEL_T_TSKHDL tskhdl); /**< %jp{自タスクを終了する} */ +void _kernel_dsp_ter_tsk(_KERNEL_T_TSKHDL tskhdl); /**< %jp{他タスクを終了する} */ +void _kernel_dsp_wai_tsk(_KERNEL_T_TSKHDL tskhdl); /**< %jp{自タスクを待ち状態にする} */ +void _kernel_dsp_wup_tsk(_KERNEL_T_TSKHDL tskhdl); /**< %jp{他タスクを待ち解除する} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_DSP_TSK() _kernel_dsp_tsk() /**< タスクディスパッチ実施 */ + + +/* %jp{実行中もレディーキューに繋ぐモデルの場合} */ + + +#if _KERNEL_SPT_SUS_TSK /* %jp{サスペンドありのモデルの場合} */ + +#define _KERNEL_DSP_STA_TSK(tskhdl) _kernel_dsp_sta_tsk(tskhdl) /**< %jp{他タスクを開始する} */ +#define _KERNEL_DSP_EXT_TSK(tskhdl) _kernel_dsp_ext_tsk(tskhdl) /**< %jp{自タスクを終了する} */ +#define _KERNEL_DSP_TER_TSK(tskhdl) _kernel_dsp_ter_tsk(tskhdl) /**< %jp{他タスクを終了する} */ +#define _KERNEL_DSP_WAI_TSK(tskhdl) _kernel_dsp_wai_tsk(tskhdl) /**< %jp{自タスクを待ち状態にする} */ +#define _KERNEL_DSP_WUP_TSK(tskhdl) _kernel_dsp_wup_tsk(tskhdl) /**< %jp{他タスクを待ち解除する} */ + +#else /* %jp{サスペンド無しのモデルの場合} */ + +#if _KERNEL_RUNTSK_ON_RDQ /* %jp{実行中もレディーキューに繋ぐ場合} */ + +#define _KERNEL_DSP_STA_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_RDY); _KERNEL_ADD_RDQ(tskhdl); } while (0) /**< %jp{他タスクを開始する} */ +#define _KERNEL_DSP_EXT_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_DMT); _KERNEL_RMV_RDQ(tskhdl); } while (0) /**< %jp{自タスクを終了する} */ +#define _KERNEL_DSP_TER_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_DMT); _KERNEL_RMV_RDQ(tskhdl); } while (0) /**< %jp{他タスクを終了する} */ +#define _KERNEL_DSP_WAI_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_WAI); _KERNEL_RMV_RDQ(tskhdl); } while (0) /**< %jp{自タスクを待ち状態にする} */ +#define _KERNEL_DSP_WUP_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_RDY); _KERNEL_ADD_RDQ(tskhdl); } while (0) /**< %jp{他タスクを待ち解除する} */ + +#else /* %jp{実行中はレディーキューから外す場合} */ + +#define _KERNEL_DSP_STA_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_RDY); _KERNEL_ADD_RDQ(tskhdl); } while (0) /**< 他タスクを開始する */ +#define _KERNEL_DSP_EXT_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_DMT); } while (0) /**< 自タスクを終了する */ +#define _KERNEL_DSP_TER_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_DMT); _KERNEL_RMV_RDQ(tskhdl); } while (0) /**< 他タスクを終了する */ +#define _KERNEL_DSP_WAI_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_WAI); } while (0) /**< 自タスクを待ち状態にする */ +#define _KERNEL_DSP_WUP_TSK(tskhdl) do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_RDY); _KERNEL_ADD_RDQ(tskhdl); } while (0) /**< 他タスクを待ち解除する */ + +#endif + +#endif + + + +#endif /* _KERNEL_core__dsp_h__ */ + + + +/* end of file */ diff --git a/kernel/include/core/hep.h b/kernel/include/core/hep.h new file mode 100755 index 0000000..8ab7115 --- /dev/null +++ b/kernel/include/core/hep.h @@ -0,0 +1,70 @@ +/** + * Hyper Operating System V4 Advance + * + * @file hep.h + * @brief %jp{メモリヒープのヘッダファイル}%en{memory heap heder file} + * + * @version $Id: hep.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__core__hep_h_ +#define _KERNEL__core__hep_h_ + + +#include "itron.h" + + +#define _KERNEL_HEP_MEMALIGN 32 /**< %jp{メモリアライメント} */ +#define _KERNEL_HEP_USING 0x1234 /**< %jp{使用中} */ +#define _KERNEL_HEP_FREE 0xabcd /**< %jp{未使用} */ + + + +/** %jp{サイズアライメント} */ +#define _KERNEL_HEP_ALIGNED(size) (((size) + _KERNEL_HEP_MEMALIGN - 1) & ~(_KERNEL_HEP_MEMALIGN - 1)) + + +/** %jp{ヒープメモリブロック} */ +typedef struct _kernel_t_hepblk +{ + struct _kernel_t_hepblk* prev; /**< %jp{前のブロック} */ + SIZE size; /**< %jp{ブロックのサイズ} */ + INT flag; /**< %jp{使用中フラグ} */ +} _KERNEL_T_HEPBLK; + + +/** %jp{ヒープ制御ブロック} */ +typedef struct _kernel_t_hepcb +{ + _KERNEL_T_HEPBLK *base; /**< %jp{カーネル用メモリ先頭ブロックのアドレス} */ + SIZE heapsz; /**< %jp{カーネル用メモリサイズ} */ +} _KERNEL_T_HEPCB; + + +/** %jp{カーネルメモリ管理ブロックサイズ} */ +#define _KERNEL_HEP_BLKSIZE _KERNEL_HEP_ALIGNED(sizeof(_KERNEL_T_HEPBLK)) + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_cre_hep(_KERNEL_T_HEPCB *pk_hepcb, void *p_base, SIZE size); /**< %jp{メモリヒープを生成} */ +#define _kernel_del_hep(pk_hepcb) do {} while(0) /**< %jp{メモリヒープを削除} */ +VP _kernel_alc_hep(_KERNEL_T_HEPCB *pk_hepcb, SIZE size); /**< %jp{メモリの割り当て} */ +void _kernel_fre_hep(_KERNEL_T_HEPCB *pk_hepcb, VP ptr); /**< %jp{メモリの解放} */ +#define _kernel_alg_hep(size) _KERNEL_HEP_ALIGNED(size) /**< %jp{メモリサイズのアライメントを合わせる} */ + +#ifdef __cplusplus +} +#endif + + +#endif /* _KERNEL__core__hep_h_ */ + + +/* end of file */ diff --git a/kernel/include/core/objhdl.h b/kernel/include/core/objhdl.h new file mode 100755 index 0000000..071fee1 --- /dev/null +++ b/kernel/include/core/objhdl.h @@ -0,0 +1,39 @@ +/** + * Hyper Operating System V4 Advance + * + * @file objid.h + * @brief %jp{タスクブジェクトのID用の型定義}%en{define object ID type} + * + * @version $Id: objhdl.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__core__objhdl_h__ +#define _KERNEL__core__objhdl_h__ + + +/* ---------------------------------- */ +/* Task-Handle */ +/* ---------------------------------- */ + +#if _KERNEL_TSKHDL_ID /* %jp{タスクハンドルにIDを使う}%en{_KERNEL_T_TSKHDL is ID} */ + +typedef _KERNEL_T_TSKID _KERNEL_T_TSKHDL; +#define _KERNEL_TSKHDL_NULL 0 +#define _KERNEL_TBIT_TSKHDL _KERNEL_TBIT_TSKID + +#else /* %jp{タスクハンドルにTCBのアドレスを使う}%en{_KERNEL_T_TSKHDL is Pointer} */ + +struct _kernel_t_tcb; +typedef struct _kernel_t_tcb *_KERNEL_T_TSKHDL; +#define _KERNEL_TSKHDL_NULL NULL +#define _KERNEL_TBIT_TSKHDL _KERNEL_TBIT_VP_INT + +#endif + + +#endif /* _KERNEL__core__objhdl_h__ */ diff --git a/kernel/include/core/objid.h b/kernel/include/core/objid.h new file mode 100755 index 0000000..46599bc --- /dev/null +++ b/kernel/include/core/objid.h @@ -0,0 +1,149 @@ +/** + * Hyper Operating System V4 Advance + * + * @file objid.h + * @brief %jp{タスクブジェクトのID用の型定義}%en{define object ID type} + * + * @version $Id: objid.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__core_objid_h__ +#define _KERNEL__core_objid_h__ + + + +/* ---------------------------------- */ +/* Task-ID */ +/* ---------------------------------- */ + +/* %jp{サイズに適した型とする} */ +#if (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_T_TSKID; /**< %jp{タスクIDの型}%en{type of Task-ID} */ +#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UB _KERNEL_T_TSKID; /**< %jp{タスクIDの型}%en{type of Task-ID} */ +#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_T_TSKID; /**< %jp{タスクIDの型}%en{type of Task-ID} */ +#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UH _KERNEL_T_TSKID; /**< %jp{タスクIDの型}%en{type of Task-ID} */ +#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_T_TSKID; /**< %jp{タスクIDの型}%en{type of Task-ID} */ +#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UW _KERNEL_T_TSKID; /**< %jp{タスクIDの型}%en{type of Task-ID} */ +#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_T_TSKID; /**< %jp{タスクIDの型}%en{type of Task-ID} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_T_TSKID; /**< %jp{タスクIDの型}%en{type of Task-ID} */ +#endif + + + +/* ---------------------------------- */ +/* Semaphore-ID */ +/* ---------------------------------- */ + +/* %jp{サイズに適した型とする} */ +#if (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_T_SEMID; /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */ +#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UB _KERNEL_T_SEMID; /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */ +#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_T_SEMID; /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */ +#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UH _KERNEL_T_SEMID; /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */ +#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_T_SEMID; /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */ +#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UW _KERNEL_T_SEMID; /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */ +#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_T_SEMID; /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_T_SEMID; /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */ +#endif + + + +/* ---------------------------------- */ +/* Eventflag-ID */ +/* ---------------------------------- */ + +/* %jp{サイズに適した型とする} */ +#if (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_T_FLGID; /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */ +#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UB _KERNEL_T_FLGID; /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */ +#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_T_FLGID; /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */ +#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UH _KERNEL_T_FLGID; /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */ +#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_T_FLGID; /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */ +#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UW _KERNEL_T_FLGID; /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */ +#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_T_FLGID; /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_T_FLGID; /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */ +#endif + + + +/* ---------------------------------- */ +/* Mailbox-ID */ +/* ---------------------------------- */ + +/* %jp{サイズに適した型とする} */ +#if (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_T_MBXID; /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */ +#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UB _KERNEL_T_MBXID; /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */ +#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_T_MBXID; /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */ +#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UH _KERNEL_T_MBXID; /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */ +#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_T_MBXID; /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */ +#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UW _KERNEL_T_MBXID; /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */ +#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_T_MBXID; /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_T_MBXID; /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */ +#endif + + + +/* ---------------------------------- */ +/* Fixed-Size Memory Pool-ID */ +/* ---------------------------------- */ + +/* %jp{サイズに適した型とする} */ +#if (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_T_MPFID; /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */ +#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UB _KERNEL_T_MPFID; /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */ +#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_T_MPFID; /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */ +#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UH _KERNEL_T_MPFID; /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */ +#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_T_MPFID; /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */ +#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_UW _KERNEL_T_MPFID; /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */ +#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_T_MPFID; /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_T_MPFID; /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */ +#endif + + + +#endif /* _KERNEL__core_objid_h__ */ + + + +/* end of file */ diff --git a/kernel/include/core/opttyp.h b/kernel/include/core/opttyp.h new file mode 100755 index 0000000..763b2ca --- /dev/null +++ b/kernel/include/core/opttyp.h @@ -0,0 +1,250 @@ +/** + * Hyper Operating System V4 Advance + * + * @file opttyp.h + * @brief %jp{カーネル内部用最適化型定義ヘッダファイル}%en{optimized type for kernel internal} + * + * @version $Id: opttyp.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__core__opttyp_h__ +#define _KERNEL__core__opttyp_h__ + + + +/* %jp{カーネルで標準に使う型選択} */ +#if (_KERNEL_OPT_RW_SIZE <= _KERNEL_OPT_SPEED) + +/* %jp{サイズ重視最適化の場合} */ + +/* %jp{最適化オプションに適した少なくとも8bitを表せる最速の符号付き整数型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_T_OPT_B; +#define _KERNEL_TMIN_OPT_B _KERNEL_TMIN_LEAST_B +#define _KERNEL_TMAX_OPT_B _KERNEL_TMAX_LEAST_B +#define _KERNEL_TBIT_OPT_B _KERNEL_TBIT_LEAST_B + +/* %jp{最適化オプションに適した少なくとも8bitを表せる最速の符号無し整数型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_T_OPT_UB; +#define _KERNEL_TMIN_OPT_UB _KERNEL_TMIN_LEAST_UB +#define _KERNEL_TMAX_OPT_UB _KERNEL_TMAX_LEAST_UB +#define _KERNEL_TBIT_OPT_UB _KERNEL_TBIT_LEAST_UB + +/* %jp{最適化オプションに適した少なくとも16bitを表せる最速の符号付き整数型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_T_OPT_H; +#define _KERNEL_TMIN_OPT_H _KERNEL_TMIN_LEAST_H +#define _KERNEL_TMAX_OPT_H _KERNEL_TMAX_LEAST_H +#define _KERNEL_TBIT_OPT_H _KERNEL_TBIT_LEAST_H + +/* %jp{最適化オプションに適した少なくとも16bitを表せる最速の符号無し整数型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_T_OPT_UH; +#define _KERNEL_TMIN_OPT_UH _KERNEL_TMIN_LEAST_UH +#define _KERNEL_TMAX_OPT_UH _KERNEL_TMAX_LEAST_UH +#define _KERNEL_TBIT_OPT_UH _KERNEL_TBIT_LEAST_UH + +/* %jp{最適化オプションに適した少なくとも32bitを表せる最速の符号付き整数型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_T_OPT_W; +#define _KERNEL_TMIN_OPT_W _KERNEL_TMIN_LEAST_W +#define _KERNEL_TMAX_OPT_W _KERNEL_TMAX_LEAST_W +#define _KERNEL_TBIT_OPT_W _KERNEL_TBIT_LEAST_W + +/* %jp{最適化オプションに適した少なくとも32bitを表せる最速の符号無し整数型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_T_OPT_UW; +#define _KERNEL_TMIN_OPT_UW _KERNEL_TMIN_LEAST_UW +#define _KERNEL_TMAX_OPT_UW _KERNEL_TMAX_LEAST_UW +#define _KERNEL_TBIT_OPT_UW _KERNEL_TBIT_LEAST_UW + + +#if _KERNEL_ENABLE64 + +/* %jp{最適化オプションに適した少なくとも64bitを表せる最速の符号付き整数型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_T_OPT_D; +#define _KERNEL_TMIN_OPT_D _KERNEL_TMIN_LEAST_D +#define _KERNEL_TMAX_OPT_D _KERNEL_TMAX_LEAST_D +#define _KERNEL_TBIT_OPT_D _KERNEL_TBIT_LEAST_D + +/* %jp{最適化オプションに適した少なくとも64bitを表せる最速の符号無し整数型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_T_OPT_UD; +#define _KERNEL_TMIN_OPT_UD _KERNEL_TMIN_LEAST_UD +#define _KERNEL_TMAX_OPT_UD _KERNEL_TMAX_LEAST_UD +#define _KERNEL_TBIT_OPT_UD _KERNEL_TBIT_LEAST_UD + +#endif + +#else + +/* %jp{速度重視最適化の場合} */ + +/* %jp{最適化オプションに適した少なくとも8bitを表せる最速の符号付き整数型} */ +typedef _KERNEL_T_FAST_B _KERNEL_T_OPT_B; +#define _KERNEL_TMIN_OPT_B _KERNEL_TMIN_FAST_B +#define _KERNEL_TMAX_OPT_B _KERNEL_TMAX_FAST_B +#define _KERNEL_TBIT_OPT_B _KERNEL_TBIT_FAST_B + +/* %jp{最適化オプションに適した少なくとも8bitを表せる最速の符号無し整数型} */ +typedef _KERNEL_T_FAST_UB _KERNEL_T_OPT_UB; +#define _KERNEL_TMIN_OPT_UB _KERNEL_TMIN_FAST_UB +#define _KERNEL_TMAX_OPT_UB _KERNEL_TMAX_FAST_UB +#define _KERNEL_TBIT_OPT_UB _KERNEL_TBIT_FAST_UB + +/* %jp{最適化オプションに適した少なくとも16bitを表せる最速の符号付き整数型} */ +typedef _KERNEL_T_FAST_H _KERNEL_T_OPT_H; +#define _KERNEL_TMIN_OPT_H _KERNEL_TMIN_FAST_H +#define _KERNEL_TMAX_OPT_H _KERNEL_TMAX_FAST_H +#define _KERNEL_TBIT_OPT_H _KERNEL_TBIT_FAST_H + +/* %jp{最適化オプションに適した少なくとも16bitを表せる最速の符号無し整数型} */ +typedef _KERNEL_T_FAST_UH _KERNEL_T_OPT_UH; +#define _KERNEL_TMIN_OPT_UH _KERNEL_TMIN_FAST_UH +#define _KERNEL_TMAX_OPT_UH _KERNEL_TMAX_FAST_UH +#define _KERNEL_TBIT_OPT_UH _KERNEL_TBIT_FAST_UH + +/* %jp{最適化オプションに適した少なくとも32bitを表せる最速の符号付き整数型} */ +typedef _KERNEL_T_FAST_W _KERNEL_T_OPT_W; +#define _KERNEL_TMIN_OPT_W _KERNEL_TMIN_FAST_W +#define _KERNEL_TMAX_OPT_W _KERNEL_TMAX_FAST_W +#define _KERNEL_TBIT_OPT_W _KERNEL_TBIT_FAST_W + +/* %jp{最適化オプションに適した少なくとも32bitを表せる最速の符号無し整数型} */ +typedef _KERNEL_T_FAST_UW _KERNEL_T_OPT_UW; +#define _KERNEL_TMIN_OPT_UW _KERNEL_TMIN_FAST_UW +#define _KERNEL_TMAX_OPT_UW _KERNEL_TMAX_FAST_UW +#define _KERNEL_TBIT_OPT_UW _KERNEL_TBIT_FAST_UW + + +#if _KERNEL_ENABLE64 + +/* %jp{最適化オプションに適した少なくとも64bitを表せる最速の符号付き整数型} */ +typedef _KERNEL_T_FAST_D _KERNEL_T_OPT_D; +#define _KERNEL_TMIN_OPT_D _KERNEL_TMIN_FAST_D +#define _KERNEL_TMAX_OPT_D _KERNEL_TMAX_FAST_D +#define _KERNEL_TBIT_OPT_D _KERNEL_TBIT_FAST_D + +/* %jp{最適化オプションに適した少なくとも64bitを表せる最速の符号無し整数型} */ +typedef _KERNEL_T_FAST_UD _KERNEL_T_OPT_UD; +#define _KERNEL_TMIN_OPT_UD _KERNEL_TMIN_FAST_UD +#define _KERNEL_TMAX_OPT_UD _KERNEL_TMAX_FAST_UD +#define _KERNEL_TBIT_OPT_UD _KERNEL_TBIT_FAST_UD + +#endif + +#endif + + + +#if defined(_KERNEL_PROCATR_SIGNED_INT) && _KERNEL_PROCATR_SIGNED_INT > 0 +/* %jp{符号付きが得意なプロセッサの場合} */ + +typedef _KERNEL_T_PROC_INT _KERNEL_T_VINT; +#define _KERNEL_TMIN_VINT _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_VINT _KERNEL_TMAX_PROC_INT +#define _KERNEL_TBIT_VINT _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_B _KERNEL_T_VB; +#define _KERNEL_TMIN_VB _KERNEL_TMIN_B +#define _KERNEL_TMAX_VB _KERNEL_TMAX_B +#define _KERNEL_TBIT_VB _KERNEL_TBIT_B + +typedef _KERNEL_T_OPT_B _KERNEL_T_OPT_VB; +#define _KERNEL_TMIN_OPT_VB _KERNEL_TMIN_OPT_B +#define _KERNEL_TMAX_OPT_VB _KERNEL_TMAX_OPT_B +#define _KERNEL_TBIT_OPT_VB _KERNEL_TBIT_OPT_B + +typedef _KERNEL_T_H _KERNEL_T_VH; +#define _KERNEL_TMIN_VH _KERNEL_TMIN_H +#define _KERNEL_TMAX_VH _KERNEL_TMAX_H +#define _KERNEL_TBIT_VH _KERNEL_TBIT_H + +typedef _KERNEL_T_OPT_H _KERNEL_T_OPT_VH; +#define _KERNEL_TMIN_OPT_VH _KERNEL_TMIN_OPT_H +#define _KERNEL_TMAX_OPT_VH _KERNEL_TMAX_OPT_H +#define _KERNEL_TBIT_OPT_VH _KERNEL_TBIT_OPT_H + +typedef _KERNEL_T_W _KERNEL_T_VW; +#define _KERNEL_TMIN_VW _KERNEL_TMIN_W +#define _KERNEL_TMAX_VW _KERNEL_TMAX_W +#define _KERNEL_TBIT_VW _KERNEL_TBIT_W + +typedef _KERNEL_T_OPT_W _KERNEL_T_OPT_VW; +#define _KERNEL_TMIN_OPT_VW _KERNEL_TMIN_OPT_W +#define _KERNEL_TMAX_OPT_VW _KERNEL_TMAX_OPT_W +#define _KERNEL_TBIT_OPT_VW _KERNEL_TBIT_OPT_W + +#if _KERNEL_ENABLE64 + +typedef _KERNEL_T_D _KERNEL_T_VD; +#define _KERNEL_TMIN_VD _KERNEL_TMIN_D +#define _KERNEL_TMAX_VD _KERNEL_TMAX_D +#define _KERNEL_TBIT_VD _KERNEL_TBIT_D + +typedef _KERNEL_T_OPT_D _KERNEL_T_OPT_VD; +#define _KERNEL_TMIN_OPT_VD _KERNEL_TMIN_OPT_D +#define _KERNEL_TMAX_OPT_VD _KERNEL_TMAX_OPT_D +#define _KERNEL_TBIT_OPT_VD _KERNEL_TBIT_OPT_D + +#endif + +#else +/* %jp{符号無しが得意なプロセッサの場合} */ + +typedef _KERNEL_T_PROC_UINT _KERNEL_T_VINT; +#define _KERNEL_TMIN_VINT _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_VINT _KERNEL_TMAX_PROC_UINT +#define _KERNEL_TBIT_VINT _KERNEL_TBIT_PROC_UINT + +typedef _KERNEL_T_UB _KERNEL_T_VB; +#define _KERNEL_TMIN_VB _KERNEL_TMIN_UB +#define _KERNEL_TMAX_VB _KERNEL_TMAX_UB +#define _KERNEL_TBIT_VB _KERNEL_TBIT_UB + +typedef _KERNEL_T_OPT_UB _KERNEL_T_OPT_VB; +#define _KERNEL_TMIN_OPT_VB _KERNEL_TMIN_OPT_UB +#define _KERNEL_TMAX_OPT_VB _KERNEL_TMAX_OPT_UB +#define _KERNEL_TBIT_OPT_VB _KERNEL_TBIT_OPT_UB + +typedef _KERNEL_T_UH _KERNEL_T_VH; +#define _KERNEL_TMIN_VH _KERNEL_TMIN_UH +#define _KERNEL_TMAX_VH _KERNEL_TMAX_UH +#define _KERNEL_TBIT_VH _KERNEL_TBIT_UH + +typedef _KERNEL_T_OPT_UH _KERNEL_T_OPT_VH; +#define _KERNEL_TMIN_OPT_VH _KERNEL_TMIN_OPT_UH +#define _KERNEL_TMAX_OPT_VH _KERNEL_TMAX_OPT_UH +#define _KERNEL_TBIT_OPT_VH _KERNEL_TBIT_OPT_UH + +typedef _KERNEL_T_UW _KERNEL_T_VW; +#define _KERNEL_TMIN_VW _KERNEL_TMIN_UW +#define _KERNEL_TMAX_VW _KERNEL_TMAX_UW +#define _KERNEL_TBIT_VW _KERNEL_TBIT_UW + +typedef _KERNEL_T_OPT_UW _KERNEL_T_OPT_VW; +#define _KERNEL_TMIN_OPT_VW _KERNEL_TMIN_OPT_UW +#define _KERNEL_TMAX_OPT_VW _KERNEL_TMAX_OPT_UW +#define _KERNEL_TBIT_OPT_VW _KERNEL_TBIT_OPT_UW + +#if _KERNEL_ENABLE64 + +typedef _KERNEL_T_UD _KERNEL_T_VD; +#define _KERNEL_TMIN_VD _KERNEL_TMIN_UD +#define _KERNEL_TMAX_VD _KERNEL_TMAX_UD +#define _KERNEL_TBIT_VD _KERNEL_TBIT_UD + +typedef _KERNEL_T_OPT_UD _KERNEL_T_OPT_VD; +#define _KERNEL_TMIN_OPT_VD _KERNEL_TMIN_OPT_UD +#define _KERNEL_TMAX_OPT_VD _KERNEL_TMAX_OPT_UD +#define _KERNEL_TBIT_OPT_VD _KERNEL_TBIT_OPT_UD + +#endif + + +#endif + + +#endif /* _KERNEL__core__opttyp_h__ */ + + +/* end of file */ diff --git a/kernel/include/core/que.h b/kernel/include/core/que.h new file mode 100755 index 0000000..da01a81 --- /dev/null +++ b/kernel/include/core/que.h @@ -0,0 +1,169 @@ +/** + * Hyper Operating System V4 Advance + * + * @file knl_que.h + * @brief %en{queue object heder file}%jp{キューオブジェクトのヘッダファイル} + * + * @version $Id: que.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__core__knl_que_h__ +#define _KERNEL__core__knl_que_h__ + + + + +#if _KERNEL_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST + +/* ------------------------------------------ */ +/* one-way list */ +/* ------------------------------------------ */ + + +/** %en{queue control block}%jp{キュー管理ブロック} */ +typedef struct _kernel_t_que +{ + _KERNEL_TCB_T_TSKHDL tail _KERNEL_TCB_TBITDEF_TSKHDL; /**< %en{task of queue-tail} %jp{キュー末尾のタスク} */ +} _KERNEL_T_QUE; + + +/** %en{object for queue connection} %jp{キュー接続用オブジェクト} */ +#define _KERNEL_QUEOBJ \ + _KERNEL_TCB_T_TSKHDL queobj_next _KERNEL_TCB_TBITDEF_TSKHDL; + + +/* accessor */ +#define _KERNEL_QUE_SET_TAIL(pk_que, x) do { (pk_que)->tail = x; } while (0) +#define _KERNEL_QUE_GET_TAIL(pk_que) ((pk_que)->tail) + +#define _KERNEL_TSK_SET_QUENEXT(tcb, x) do { (tcb)->queobj_next = (x); } while (0) +#define _KERNEL_TSK_GET_QUENEXT(tcb) ((tcb)->queobj_next) + + +/* function declaration */ +#ifdef __cplusplus +extern "C" { +#endif + +#define _kernel_cre_que(pk_que) do { (pk_que)->tail = _KERNEL_TSKHDL_NULL; } while (0) /**< %jp{キューの生成}%en{create queue} */ +#define _kernel_del_que(pk_que) do {} while (0) /**< %jp{キューの削除}%en{delete queue} */ + +void _kernel_add_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl, ATR atr); /**< %jp{タスクをキューに追加} */ +void _kernel_adf_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl); /**< %jp{タスクをFIFO順でキューに追加} */ +void _kernel_adp_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl); /**< %jp{タスクを優先度順でキューに追加}%en{in the order of the task's priority} */ + +void _kernel_rmv_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl); /**< %jp{タスクをキューから取り除く} */ +_KERNEL_T_TSKHDL _kernel_rmh_que(_KERNEL_T_QUE *pk_que); +void _kernel_trm_que(_KERNEL_T_TSKHDL tskhdl); /**< %jp{タスクをキューから取り除く} */ + +_KERNEL_T_TSKHDL _kernel_nxt_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl); /**< %jp{キューの次のタスクの取り出し} */ + +void _kernel_rot_que(_KERNEL_T_QUE *pk_que); /**< %jp{レディーキューの回転} */ +#define _kernel_ref_que(pk_que) \ + ((pk_que)->tail != _KERNEL_TSKHDL_NULL ? (_KERNEL_TSK_GET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB((pk_que)->tail))) : _KERNEL_TSKHDL_NULL) + /**< %jp{キューの先頭タスクの参照(マクロ関数)} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_CRE_QUE(pk_que) _kernel_cre_que(pk_que) +#define _KERNEL_DEL_QUE(pk_que) _kernel_del_que(pk_que) +#define _KERNEL_ADD_QUE(pk_que, tskhdl, atr) _kernel_add_que(pk_que, tskhdl, atr) +#define _KERNEL_ADF_QUE(pk_que, tskhdl) _kernel_adf_que(pk_que, tskhdl) +#define _KERNEL_ADP_QUE(pk_que, tskhdl) _kernel_adp_que(pk_que, tskhdl) +#define _KERNEL_RMV_QUE(pk_que, tskhdl) _kernel_rmv_que(pk_que, tskhdl) +#define _KERNEL_RMH_QUE(pk_que) _kernel_rmh_que(pk_que) +#define _KERNEL_TRM_QUE(tskhdl) _kernel_trm_que(tskhdl) +#define _KERNEL_NXT_QUE(pk_que, tskhdl) _kernel_nxt_que(pk_que, tskhdl) +#define _KERNEL_ROT_QUE(pk_que) _kernel_rot_que(pk_que) +#define _KERNEL_REF_QUE(pk_que) _kernel_ref_que(pk_que) + + + +#elif _KERNEL_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST + +/* ------------------------------------------ */ +/* two-way list */ +/* ------------------------------------------ */ + + +/** %en{queue control block} %jp{キュー管理ブロック} */ +typedef struct _kernel_t_que +{ + _KERNEL_TCB_T_TSKHDL head _KERNEL_TCB_TBITDEF_TSKHDL; /**< %en{task of queue-head} %jp{キュー先頭のタスク} */ +} _KERNEL_T_QUE; + +/** %en{object for queue connection(Two-way list)} %jp{キュー接続用オブジェクト(双方向リスト)} */ +#define _KERNEL_QUEOBJ \ + _KERNEL_TCB_T_TSKHDL queobj_next _KERNEL_TCB_TBITDEF_TSKHDL; \ + _KERNEL_TCB_T_TSKHDL queobj_prev _KERNEL_TCB_TBITDEF_TSKHDL; + + +#define _KERNEL_QUE_SET_HEAD(pk_que, x) do { (pk_que)->head = x; } while (0) +#define _KERNEL_QUE_GET_HEAD(pk_que) ((pk_que)->head) + +#define _KERNEL_TSK_SET_QUENEXT(tcb, x) do { (tcb)->queobj_next = (x); } while (0) +#define _KERNEL_TSK_GET_QUENEXT(tcb) ((tcb)->queobj_next) +#define _KERNEL_TSK_SET_QUEPREV(tcb, x) do { (tcb)->queobj_prev = (x); } while (0) +#define _KERNEL_TSK_GET_QUEPREV(tcb) ((tcb)->queobj_prev) + + +/* function declaration */ +#ifdef __cplusplus +extern "C" { +#endif + +#define _kernel_cre_que(pk_que) do { (pk_que)->head = _KERNEL_TSKHDL_NULL; } while (0) /**< %en{create queue}%jp{キューの生成} */ +#define _kernel_del_que(pk_que) do {} while (0) /**< %en{delete queue}%jp{キューの削除} */ + +void _kernel_add_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl, ATR atr); /**< %jp{タスクをキューに追加} */ +void _kernel_adf_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl); /**< %jp{タスクをFIFO順でキューに追加} */ +void _kernel_adp_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl); /**< %jp{タスクを優先度順でキューに追加} (in the order of the task's priority) */ + +void _kernel_trm_que(_KERNEL_T_TSKHDL tskhdl); /**< %jp{タスクをキューから取り除く} */ +void _kernel_rmv_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl); /**< %jp{タスクをキューから取り除く} */ +_KERNEL_T_TSKHDL _kernel_rmh_que(_KERNEL_T_QUE *pk_que); /**< %jp{キュー先頭タスクの取り出し} */ + +_KERNEL_T_TSKHDL _kernel_nxt_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl); /**< %jp{キューの次のタスクの取り出し} */ + +void _kernel_rot_que(_KERNEL_T_QUE *pk_que); /**< %jp{レディーキューの回転} */ +#define _kernel_ref_que(pk_que) ((pk_que)->head) /**< %jp{キューの先頭タスクの参照(マクロ関数)} */ + +#ifdef __cplusplus +} +#endif + + +#define _KERNEL_CRE_QUE(pk_que) _kernel_cre_que(pk_que) +#define _KERNEL_DEL_QUE(pk_que) _kernel_del_que(pk_que) +#define _KERNEL_ADD_QUE(pk_que, tskhdl, atr) _kernel_add_que(pk_que, tskhdl, atr) +#define _KERNEL_ADF_QUE(pk_que, tskhdl) _kernel_adf_que(pk_que, tskhdl) +#define _KERNEL_ADP_QUE(pk_que, tskhdl) _kernel_adp_que(pk_que, tskhdl) +#define _KERNEL_RMV_QUE(pk_que, tskhdl) _kernel_rmv_que(pk_que, tskhdl) +#define _KERNEL_RMH_QUE(pk_que) _kernel_rmh_que(pk_que) +#define _KERNEL_TRM_QUE(tskhdl) _kernel_trm_que(tskhdl) +#define _KERNEL_NXT_QUE(pk_que, tskhdl) _kernel_nxt_que(pk_que, tskhdl) +#define _KERNEL_ROT_QUE(pk_que) _kernel_rot_que(pk_que) +#define _KERNEL_REF_QUE(pk_que) _kernel_ref_que(pk_que) + + +#else /* error */ + +#error Illegal value : _KERNEL_QUE_ALGORITHM + +#endif + + + +#endif /* _KERNEL__core__knl_que_h__ */ + + + +/* end of file */ diff --git a/kernel/include/core/rdq.h b/kernel/include/core/rdq.h new file mode 100755 index 0000000..6cf5f12 --- /dev/null +++ b/kernel/include/core/rdq.h @@ -0,0 +1,100 @@ +/** + * Hyper Operating System V4 Advance + * + * @file knl_que.h + * @brief %en{queue object heder file}%jp{キューオブジェクトのヘッダファイル} + * + * @version $Id: rdq.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef __HOS_V4a__knl_rdq_h__ +#define __HOS_V4a__knl_rdq_h__ + + +/* ------------------------------------------ */ +/* constant value definition */ +/* ------------------------------------------ */ + +#define _KERNEL_RDQ_ALG_SINGLE_QUE 1 +#define _KERNEL_RDQ_ALG_ARRAYED_QUE 2 +#define _KERNEL_RDQ_ALG_BITMAP_ARRAYED_QUE 3 + + + +#if _KERNEL_CFG_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_SINGLE_QUE + +/* ------------------------------------------ */ +/* single queue */ +/* ------------------------------------------ */ + + +/** %en{ready-queue control block}%jp{レディーキュー管理ブロック} */ +typedef struct _kernel_t_rdq +{ + _KERNEL_T_QUE que; +} _KERNEL_T_RDQ; + + + +#define _KERNEL_CRE_RDQ() _KERNEL_CRE_QUE(&_KERNEL_SYS_GET_RDQ()->que) /**< %en{create ready-queue}%jp{レディーキューの生成} */ +#define _KERNEL_DEL_RDQ() _KERNEL_DEL_QUE(&_KERNEL_SYS_GET_RDQ()->que) /**< %en{delete ready-queue}%jp{レディーキューの削除} */ + +#define _KERNEL_ADD_RDQ(tskhdl) _KERNEL_ADP_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskhdl)) /**< %jp{タスクをレディーキューに追加} */ +#define _KERNEL_RMV_RDQ(tskhdl) _KERNEL_RMV_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskhdl)) /**< %jp{タスクをレディーから取り外し} */ + +#define _KERNEL_RMH_RDQ() _KERNEL_RMH_QUE(&_KERNEL_SYS_GET_RDQ()->que) /**< %jp{キューの先頭タスクの取り外し} */ +#define _KERNEL_REF_RDQ() _KERNEL_REF_QUE(&_KERNEL_SYS_GET_RDQ()->que) /**< %jp{キューの先頭タスクの参照} */ + +#define _KERNEL_ROT_RDQ(tskpri) _KERNEL_RTP_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskpri)) /**< %jp{レディーキューの回転} */ + + + +#elif _KERNEL_CFG_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE + +/* ------------------------------------------ */ +/* arrayed que */ +/* ------------------------------------------ */ + +/** %en{ready-queue control block}%jp{レディーキュー管理ブロック} */ +typedef struct _kernel_t_rdq +{ + T__KERNEL_QUE que[_KERNEL_TMAX_TSKPRI]; +} _KERNEL_T_RDQ; + + +#define _kernel_cre_rdq() _kernel_cre_que(&_KERNEL_SYS_GET_RDQ()->que) /**< %en{create ready-queue}%jp{レディーキューの生成} */ +#define _kernel_del_rdq() _kernel_del_que(&_KERNEL_SYS_GET_RDQ()->que) /**< %en{delete ready-queue}%jp{レディーキューの削除} */ + +#define _kernel_add_rdq(tskhdl) _kernel_adp_que(&_KERNEL_SYS_GET_RDQ()->que[_KERNEL_TSK_GET_TSKPRI(tskhdl) - 1], tskhdl) /**< %jp{タスクをキューに追加} */ +#define _kernel_rmv_rdq(tskhdl) _kernel_rmv_que(&_KERNEL_SYS_GET_RDQ()->que[_KERNEL_TSK_GET_TSKPRI(tskhdl) - 1], tskhdl) /**< */ + +#define _kernel_rmh_rdq() _kernel_rmh_que(&_KERNEL_SYS_GET_RDQ()->que) +#define _kernel_ref_rdq() _kernel_ref_que(&_KERNEL_SYS_GET_RDQ()->que) /**< %jp{キューの先頭タスクの参照(マクロ関数)} */ + +void _kernel_rot_rdq(PRI tskpri); /**< %jp{レディーキューの回転} */ + + +#ifdef __cplusplus +} +#endif + + + +#else /* error */ + +#error Illegal value : _KERNEL_CFG_QUE_ALGORITHM + +#endif + + + +#endif /* __HOS_V4a__knl_que_h__ */ + + + +/* end of file */ diff --git a/kernel/include/core/sys.h b/kernel/include/core/sys.h new file mode 100755 index 0000000..4863469 --- /dev/null +++ b/kernel/include/core/sys.h @@ -0,0 +1,119 @@ +/** + * Hyper Operating System V4 Advance + * + * @file knl_sys.h + * @brief %en{system heder file}%jp{システム制御のヘッダファイル} + * + * @version $Id: sys.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef __HOS_V4a__knl_sys_h__ +#define __HOS_V4a__knl_sys_h__ + + +#include "core/hep.h" + + +/* %jp{システムの状態} */ +#define _KERNEL_TSS_TSK 0x00 /**< %jp{タスク部実行中} */ +#define _KERNEL_TSS_DINT 0x01 /**< %jp{割り込み禁止(loc_cpu 有効)} */ +#define _KERNEL_TSS_DDSP 0x02 /**< %jp{ディスパッチ禁止 (dis_dsp 有効)} */ +#define _KERNEL_TSS_INDP 0x04 /**< %jp{タスク独立部実行中} */ +#define _KERNEL_TSS_DDLY 0x08 /**< %jp{ディスパッチ遅延中} */ + + +/** %jp{プロセッサ制御情報}%en{Processor control block} */ +typedef struct _kernel_t_proccb +{ + STAT stat; /**< %jp{システムのコンテキスト状態}%en{system state} */ + _KERNEL_T_TSKHDL tskhdl_run; /**< %jp{実行中タスク} */ + _KERNEL_T_CTXCB sysctxcb; /**< %jp{システムコンテキスト(アイドル実行等)のコンテキスト} */ + SIZE sysstksz; /**< %jp{システムコンテキストのスタックサイズ} */ + VP sysstk; /**< %jp{システムコンテキストのスタック} */ + SIZE intstksz; /**< %jp{割り込みコンテキストのスタックサイズ} */ + VP intstk; /**< %jp{割り込みコンテキストのスタック} */ +} _KERNEL_T_PROCCB; + + +/** %jp{システム制御情報}%en{system control block} */ +typedef struct _kernel_t_syscb +{ + _KERNEL_T_RDQ rdq; /**< %jp{レディーキュー}%en{ready-queue} */ + _KERNEL_T_TOQ toq; /**< %jp{タイムアウトキュー}%en{timeout-queue} */ + _KERNEL_T_HEPCB memhep; /**< %jp{カーネルメモリヒープ}%en{kernel heap-memory control block} */ + _KERNEL_T_PROCCB proccb[1]; /**< %jp{プロセッサ制御情報}%en{processor control block} */ +} _KERNEL_T_SYSCB; + + +/** %jp{システム制御情報}%en{system control block} */ +extern _KERNEL_T_SYSCB _kernel_syscb; + + + +#define _KERNEL_SYS_INI_SYS() do {} while (0) + +#define _KERNEL_SYS_GET_RDQ() (&_kernel_syscb.rdq) +#define _KERNEL_SYS_GET_TOQ() (&_kernel_syscb.toq) + +#define _KERNEL_SYS_INI_MEM(p_base, size) _kernel_cre_hep(&_kernel_syscb.memhep, (p_base), (size)) +#define _KERNEL_SYS_ALC_MEM(size) _kernel_alc_hep(&_kernel_syscb.memhep, (size)) +#define _KERNEL_SYS_FRE_MEM(ptr) _kernel_fre_hep(&_kernel_syscb.memhep, (ptr)) +#define _KERNEL_SYS_ALG_MEM(size) _kernel_alg_hep(size) + +#define _KERNEL_SYS_GET_STST() (_kernel_syscb.proccb[0].stat) +#define _KERNEL_SYS_SET_STST(x) do { _kernel_syscb.proccb[0].stat = (x); } while (0) +#define _KERNEL_SYS_GET_RUNTSK() (_kernel_syscb.proccb[0].tskhdl_run) +#define _KERNEL_SYS_SET_RUNTSK(x) do { _kernel_syscb.proccb[0].tskhdl_run = (x); } while (0) +#define _KERNEL_SYS_GET_SYSCTXCB() (&_kernel_syscb.proccb[0].sysctxcb) +#define _KERNEL_SYS_GET_SYSSTKSZ() (_kernel_syscb.proccb[0].sysstksz) +#define _KERNEL_SYS_GET_SYSSTK() (_kernel_syscb.proccb[0].sysstk) +#define _KERNEL_SYS_GET_SYSISP() ((VP)((UB *)_KERNEL_SYS_GET_SYSSTK() + _KERNEL_SYS_GET_SYSSTKSZ())) + + +#define _KERNEL_SYS_SET_CTX() do { _kernel_syscb.proccb[0].stat |= _KERNEL_TSS_INDP; } while (0) +#define _KERNEL_SYS_CLR_CTX() do { _kernel_syscb.proccb[0].stat &= ~_KERNEL_TSS_INDP; } while (0) +#define _KERNEL_SYS_SNS_CTX() ((_kernel_syscb.proccb[0].stat & _KERNEL_TSS_INDP) ? TRUE : FALSE) + +#define _KERNEL_SYS_SET_LOC() do { _kernel_syscb.proccb[0].stat |= _KERNEL_TSS_DINT; } while (0) +#define _KERNEL_SYS_CLR_LOC() do { _kernel_syscb.proccb[0].stat &= ~_KERNEL_TSS_DINT; } while (0) +#define _KERNEL_SYS_SNS_LOC() ((_KERNEL_SYS_GET_STST() & _KERNEL_TSS_DINT) ? TRUE : FALSE) + +#define _KERNEL_SYS_SET_DSP() do { _kernel_syscb.proccb[0].stat |= _KERNEL_TSS_DDSP; } while (0) +#define _KERNEL_SYS_CLR_DSP() do { _kernel_syscb.proccb[0].stat &= ~_KERNEL_TSS_DDSP; } while (0) +#define _KERNEL_SYS_SNS_DSP() ((_kernel_syscb.proccb[0].stat & _KERNEL_TSS_DDSP) ? TRUE : FALSE) + +#define _KERNEL_SYS_SET_DLY() do { _kernel_syscb.proccb[0].stat |= _KERNEL_TSS_DDLY; } while (0) +#define _KERNEL_SYS_CLR_DLY() do { _kernel_syscb.proccb[0].stat &= ~_KERNEL_TSS_DDLY; } while (0) +#define _KERNEL_SYS_SNS_DLY() ((_kernel_syscb.proccb[0].stat & _KERNEL_TSS_DDLY) ? TRUE : FALSE) + +#define _KERNEL_SYS_SNS_DPN() ((_kernel_syscb.proccb[0].stat != _KERNEL_TSS_TSK) ? TRUE : FALSE) + + +#define _KERNEL_ENTER_SVC() do { _kernel_dis_int(); } while (0) +#define _KERNEL_LEAVE_SVC() do { if (!(_KERNEL_SYS_GET_STST() & _KERNEL_TSS_DINT)){ _kernel_ena_int(); } } while (0) + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_cfg_ini(void); +void _kernel_cfg_sta(void); +void _kernel_idl_lop(void); /**< %jp{アイドルループ}%en{idle loop} */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __HOS_V4__knl_sys_h__ */ + + + + +/* end of file */ diff --git a/kernel/include/core/tmq.h b/kernel/include/core/tmq.h new file mode 100755 index 0000000..5b96705 --- /dev/null +++ b/kernel/include/core/tmq.h @@ -0,0 +1,63 @@ +/** + * Hyper Operating System V4 Advance + * + * @file toq.h + * @brief %jp{タイムアウトキューのヘッダファイル}%en{time-out queue heder file} + * + * @version $Id: tmq.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__core__tmq_h__ +#define _KERNEL__core__tmq_h__ + + +/** %jp{タイムアウトキューオブジェクト} */ +typedef _KERNEL_T_TSKHDL _KERNEL_T_TOQ; + + +#define _KERNEL_TOQ_GET_HED_TSK() (*_KERNEL_SYS_GET_TOQ()) +#define _KERNEL_TOQ_SET_HED_TSK(x) do { (*_KERNEL_SYS_GET_TOQ()) = x; } while (0) + + +/** %jp{タイマオブジェクト構造体} */ +typedef struct _kernel_t_timobj +{ + struct _kernel_t_timobj *next; /**< %jp{次のオブジェクト} */ + struct _kernel_t_timobj *prev; /**< %jp{前のオブジェクト} */ + RELTIM lefttim; /**< %jp{残時間} */ + FP timhdr; /**< %jp{タイマハンドラ} */ +} _KERNEL_T_TIMOBJ; + + +/** %jp{タイマキュー} */ +typedef struct _kernel_t_tmq +{ + _KERNEL_T_TIMOBJ *head; + _KERNEL_T_TIMOBJ *next; +} _KERNEL_T_TMQ; + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_add_tmq(_KERNEL_T_TMQ *pk_tmq, _KERNEL_T_TIMOBJ *pk_timobj); +void _kernel_rmv_tmq(_KERNEL_T_TMQ *pk_tmq, _KERNEL_T_TIMOBJ *pk_timobj); +void _kernel_tic_tmq(_KERNEL_T_TMQ *pk_tmq, RELTIM tictim); + +#ifdef __cplusplus +} +#endif + + + +#endif /* _KERNEL__core__tmq_h__ */ + + + +/* end of file */ diff --git a/kernel/include/core/toq.h b/kernel/include/core/toq.h new file mode 100755 index 0000000..dea3cd4 --- /dev/null +++ b/kernel/include/core/toq.h @@ -0,0 +1,65 @@ +/** + * Hyper Operating System V4 Advance + * + * @file toq.h + * @brief %jp{タイムアウトキューのヘッダファイル}%en{time-out queue heder file} + * + * @version $Id: toq.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef __HOS_V4a__core__toq_h__ +#define __HOS_V4a__core__toq_h__ + + +/** %jp{タイムアウトキューオブジェクト} */ +typedef _KERNEL_T_TSKHDL _KERNEL_T_TOQ; + + +#define _KERNEL_TOQ_GET_HED_TSK() (*_KERNEL_SYS_GET_TOQ()) +#define _KERNEL_TOQ_SET_HED_TSK(x) do { (*_KERNEL_SYS_GET_TOQ()) = x; } while (0) + + +/** %jp{タイムアウトキュー接続用オブジェクト} */ +#define _KERNEL_TOQOBJ \ + _KERNEL_TCB_T_TSKHDL toqobj_next _KERNEL_TCB_TBITDEF_TSKHDL; \ + _KERNEL_TCB_T_TSKHDL toqobj_prev _KERNEL_TCB_TBITDEF_TSKHDL; \ + _KERNEL_TCB_T_RELTIM toqobj_diftim _KERNEL_TCB_TBITDEF_RELTIM; + + +#define _KERNEL_TSK_SET_TOQNEXT(tcb, x) do { (tcb)->toqobj_next = (x); } while (0) +#define _KERNEL_TSK_GET_TOQNEXT(tcb) ((tcb)->toqobj_next) +#define _KERNEL_TSK_SET_TOQPREV(tcb, x) do { (tcb)->toqobj_prev = (x); } while (0) +#define _KERNEL_TSK_GET_TOQPREV(tcb) ((tcb)->toqobj_prev) +#define _KERNEL_TSK_SET_TOQDIFTIM(tcb, x) do { (tcb)->toqobj_diftim = (x); } while (0) +#define _KERNEL_TSK_GET_TOQDIFTIM(tcbl) ((tcb)->toqobj_diftim) + + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_add_toq(_KERNEL_T_TSKHDL tskhdl, RELTIM tmout); +void _kernel_rmv_toq(_KERNEL_T_TSKHDL tskhdl); +void _kernel_sig_toq(RELTIM tictim); + +#ifdef __cplusplus +} +#endif + +#define _KERNEL_ADD_TOQ _kernel_add_toq +#define _KERNEL_RMV_TOQ _kernel_rmv_toq +#define _KERNEL_SIG_TOQ _kernel_sig_toq + + + +#endif /* __HOS_V4a__core__toq_h__ */ + + + +/* end of file */ diff --git a/kernel/include/itron.h b/kernel/include/itron.h new file mode 100755 index 0000000..18425c0 --- /dev/null +++ b/kernel/include/itron.h @@ -0,0 +1,996 @@ +/** + * Hyper Operating System V4 Advance + * + * @file itron.h + * @brief %en{uITRON4.0 standard header file}%jp{μITRON4.0用の標準ヘッダファイル} + * + * @version $Id: itron.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__itron_h__ +#define _KERNEL__itron_h__ + + + +/* ------------------------------------ */ +/* Constants */ +/* ------------------------------------ */ + +/* %jp{一般}%en{General Constants} */ +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 /**< %jp{無効ポインタ}%en{Invalid pointer} */ +#else +#define NULL ((void *)0) /**< %jp{無効ポインタ}%en{Invalid pointer} */ +#endif +#endif + + +#define TRUE 1 /**< %jp{真}%en{True} */ +#define FALSE 0 /**< %jp{偽}%en{Flase} */ +#define E_OK 0 /**< %jp{正常終了}%en{Normal completion} */ + + +/* %jp{オブジェクト属性}%en{Object Attributes} */ +#define TA_NULL 0 /**< %jp{オブジェクト属性を指定しない}%en{Object attribute unspecified} */ +#define TA_HLNG 0x00 /**< %jp{高級言語用のインターフェースで処理単位を起動}%en{Start a processing unit through a high-level language interface} */ +#define TA_ASM 0x01 /**< %jp{アセンブリ言語用のインターフェースで処理単位を起動}%en{Start a processing unit through an assembly language interface} */ + +#define TA_TFIFO 0x00 /**< %jp{タスクの待ち行列をFIFO順に}%en{Task wait queue is in FIFO order} */ +#define TA_TPRI 0x01 /**< %jp{タスクの待ち行列をタスクの優先度順に}%en{Task wait queue is in task priority order} */ + +#define TA_MFIFO 0x00 /**< %jp{メッセージの待ち行列をFIFO順に%en{Message queue is in FIFO order} */ +#define TA_MPRI 0x02 /**< %jp{メッセージの待ち行列をメッセージの優先度順に%en{Message queue is in message priority order} */ + +#define TA_ACT 0x02 /**< %jp{タスクを起動された状態で生成}%en{Task is activated after the creation} */ +#define TA_RSTR 0x04 /**< %jp{制約タスク}%en{Restricted task} */ + +#define TA_WSGL 0x00 /**< %jp{イベントフラグを複数のタスクが待つことを許さない}%en{Only one task is allowed to be in the waiting state for the eventflag} */ +#define TA_WMUL 0x02 /**< %jp{イベントフラグを複数のタスクが待つことを許す}%en{Multiple tasks are allowed to be in the waiting state for the eventflag} */ +#define TA_CLR 0x04 /* 待ち解除時にイベントフラグをクリア}%en{Eventflag's bit pattern is cleared when a task is released from the waiting state for that eventflag} */ + +#define TA_INHERIT 0x02 /**< %jp{ミューテックスが優先度継承プロトコルをサポート}%en{Mutex uses the priority inheritance protocol} */ +#define TA_CEILING 0x03 /**< %jp{ミューテックスが優先度上限プロトコルをサポート}%en{Mutex uses the priority ceiling protocol} */ + +#define TA_STA 0x02 /**< %jp{周期ハンドラを動作している状態で生成}%en{Cyclic handler is in an operational state after the creation} */ +#define TA_PHS 0x04 /**< %jp{周期ハンドラの位相を保存}%en{Cyclic handler is activated preserving the activation phase} */ + + +/* %jp{タイムアウト指定} */ +#define TMO_POL 0 /**< %jp{ポーリング}%en{Polling} */ +#define TMO_FEVR (-1) /**< %jp{永久待ち}%en{Waiting forever} */ +#define TMO_NBLK (-2) /**< %jp{ノンブロッキング}%en{Non-blocking} */ + + +/* %jp{サービスコールの動作モード}%en{Service Call Operational Mode} */ +#define TWF_ANDW 0x00 /**< %jp{イベントフラグのAND待ち}%en{AND waiting condition for eventflag} */ +#define TWF_ORW 0x01 /**< %jp{イベントフラグのOR待ち}%en{OR waiting condition for eventflag} */ + + +/* %jp{オブジェクトの状態}%en{Object State} */ +#define TTS_RUN 0x01 /**< %jp{実行状態}%en{RUNNING state} */ +#define TTS_RDY 0x02 /**< %jp{実行可能状態}%en{READY state} */ +#define TTS_WAI 0x04 /**< %jp{待ち状態}%en{WAITING state} */ +#define TTS_SUS 0x08 /**< %jp{強制待ち状態}%en{SUSPENDED state} */ +#define TTS_WAS 0x0c /**< %jp{二重待ち状態}%en{WAITING-SUSPENDED state} */ +#define TTS_DMT 0x10 /**< %jp{休止状態}%en{DORMANT state} */ + +#define TTW_SLP 0x0001 /**< %jp{起床待ち状態}%en{} */ +#define TTW_DLY 0x0002 /**< %jp{時間経過待ち状態}%en{} */ +#define TTW_SEM 0x0004 /**< %jp{セマフォ資源の獲得待ち状態}%en{} */ +#define TTW_FLG 0x0008 /**< %jp{イベントフラグ待ち状態}%en{} */ +#define TTW_SDTQ 0x0010 /**< %jp{データキューへの送信待ち状態}%en{} */ +#define TTW_RDTQ 0x0020 /**< %jp{データキューからの受信待ち状態}%en{} */ +#define TTW_MBX 0x0040 /**< %jp{メールボックスからの受信待ち状態}%en{} */ +#define TTW_MTX 0x0080 /**< %jp{ミューテックスのロック待ち状態}%en{} */ +#define TTW_SMBF 0x0100 /**< %jp{メッセージバッファへの送信待ち状態}%en{} */ +#define TTW_RMBF 0x0200 /**< %jp{メッセージバッファからの受信待ち状態}%en{} */ +#define TTW_CAL 0x0400 /**< %jp{ランデブの呼び出し待ち状態}%en{} */ +#define TTW_ACP 0x0800 /**< %jp{ランデブの受付待ち状態}%en{} */ +#define TTW_RDV 0x1000 /**< %jp{ランデブの終了待ち状態}%en{} */ +#define TTW_MPF 0x2000 /**< %jp{固定長メモリブロックの獲得待ち状態}%en{} */ +#define TTW_MPL 0x4000 /**< %jp{可変長メモリブロックの獲得待ち状態}%en{} */ + +#define TTEX_ENA 0x00 /**< %jp{タスクの例外処理許可状態}%en{} */ +#define TTEX_DIS 0x01 /**< %jp{タスク例外処理禁止状態}%en{} */ + +#define TCYC_STP 0x00 /**< %jp{周期ハンドラが動作していない}%en{} */ +#define TCYC_STA 0x01 /**< %jp{周期ハンドラが動作している}%en{} */ + +#define TALM_STP 0x00 /**< %jp{アラームハンドラが動作していない}%en{} */ +#define TALM_STA 0x00 /**< %jp{アラームハンドラが動作している */ + +#define TOVR_STP 0x00 /**< %jp{上限プロセッサ時間が設定されていない}%en{} */ +#define TOVR_STA 0x01 /**< %jp{上限プロセッサ時間が設定されている}%en{} */ + +/* %jp{その他の定数}%en{Other constants} */ +#define TSK_SELF 0 /**< %jp{自タスク指定}%en{} */ +#define TSK_NONE 0 /**< %jp{該当するタスクが無い}%en{} */ + +#define TPRI_SELF 0 /**< %jp{自タスクのベース優先度の指定}%en{} */ +#define TPRI_INI 0 /**< %jp{タスクの起動時優先度の指定}%en{} */ + + +/* %jp{エラーコード}%en{Error code} */ +#define E_SYS (-5) /**< %jp{システムエラー}%en{System error} */ +#define E_NOSPT (-9) /**< %jp{未サポート機能}%en{Unsupported function} */ +#define E_RSFN (-10) /**< %jp{予約機能コード}%en{Reserved function code} */ +#define E_RSATR (-11) /**< %jp{予約属性}%en{Reserved attribute} */ +#define E_PAR (-17) /**< %jp{パラメータエラー}%en{Parameter error} */ +#define E_ID (-18) /**< %jp{不正ID番号}%en{Invalid ID number} */ +#define E_CTX (-25) /**< %jp{コンテキストエラー}%en{Context error} */ +#define E_MACV (-26) /**< %jp{メモリアクセス違反}%en{} */ +#define E_OACV (-27) /**< %jp{オブジェクトアクセス違反}%en{} */ +#define E_ILUSE (-28) /**< %jp{サービスコール不正使用}%en{} */ +#define E_NOMEM (-33) /**< %jp{メモリ不足}%en{} */ +#define E_NOID (-34) /**< %jp{ID番号不足}%en{} */ +#define E_OBJ (-41) /**< %jp{オブジェクト状態エラー}%en{} */ +#define E_NOEXS (-42) /**< %jp{オブジェクト未生成}%en{} */ +#define E_QOVR (-43) /**< %jp{キューイングオーバーフロー}%en{} */ +#define E_RLWAI (-49) /**< %jp{待ち状態の強制解除}%en{} */ +#define E_TMOUT (-50) /**< %jp{ポーリング失敗またはタイムアウト}%en{} */ +#define E_DLT (-51) /**< %jp{待ちオブジェクトの削除}%en{} */ +#define E_CLS (-52) /**< %jp{待ちオブジェクトの状態変化}%en{} */ +#define E_WBLK (-57) /**< %jp{ノンブロッキング受付け}%en{} */ +#define E_BOVR (-58) /**< %jp{バッファオーバーフロー}%en{} */ + + + +#define TMIN_TPRI 1 +#define TMIN_MPRI 1 + + + + +/* ------------------------------------ */ +/* Include configulation file */ +/* ------------------------------------ */ + +#include "core/basetyp.h" +#include "config/cfgsys.h" +#include "parser/parssys.h" + + + + +/* ------------------------------------ */ +/* Data type */ +/* ------------------------------------ */ + +/* %jp{プリミティブ型を定義する} */ +typedef _KERNEL_T_B B; /**< %jp{符号付き 8ビット整数}%en{Signed 8-bit integer} */ +typedef _KERNEL_T_H H; /**< %jp{符号付き16ビット整数}%en{Signed 16-bit integer} */ +typedef _KERNEL_T_W W; /**< %jp{符号付き32ビット整数}%en{Signed 32-bit integer} */ +#if _KERNEL_ENABLE64 +typedef _KERNEL_T_D D; /**< %jp{符号付き64ビット整数}%en{Signed 64-bit integer} */ +#endif + +typedef _KERNEL_T_UB UB; /**< %jp{符号無し 8ビット整数}%en{Unsigned 8-bit integer} */ +typedef _KERNEL_T_UH UH; /**< %jp{符号無し16ビット整数}%en{Unsigned 16-bit integer} */ +typedef _KERNEL_T_UW UW; /**< %jp{符号無し32ビット整数}%en{Unsigned 32-bit integer} */ +#if _KERNEL_ENABLE64 +typedef _KERNEL_T_UD UD; /**< %jp{符号付き64ビット整数}%en{Signed 64-bit integer} */ +#endif + +typedef B VB; /**< %jp{データタイプが定まらない 8ビットの値}%en{ 8-bit value with unknown data type} */ +typedef H VH; /**< %jp{データタイプが定まらない16ビットの値}%en{16-bit value with unknown data type} */ +typedef W VW; /**< %jp{データタイプが定まらない32ビットの値}%en{32-bit value with unknown data type} */ +#if _KERNEL_ENABLE64 +typedef D VD; /**< %jp{データタイプが定まらない64ビットの値}%en{64-bit value with unknown data type} */ +#endif + + + +/* %jp{INT型を定義する} */ +#if _KERNEL_TBIT_INT == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT INT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */ +#define _KERNEL_TMIN_INT _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_INT _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_TBIT_INT == 8 /* 8-bit */ + +typedef _KERNEL_T_B INT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */ +#define _KERNEL_TMIN_INT _KERNEL_TMIN_B +#define _KERNEL_TMAX_INT _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_INT == 16 /* 16-bit */ + +typedef _KERNEL_T_H INT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */ +#define _KERNEL_TMIN_INT _KERNEL_TMIN_H +#define _KERNEL_TMAX_INT _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_INT == 32 /* 32-bit */ + +typedef _KERNEL_T_W INT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */ +#define _KERNEL_TMIN_INT _KERNEL_TMIN_W +#define _KERNEL_TMAX_INT _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_INT == 64 /* 64-bit */ + +typedef _KERNEL_T_D INT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */ +#define _KERNEL_TMIN_INT _KERNEL_TMIN_D +#define _KERNEL_TMAX_INT _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_INT + +#endif + + + +/* %jp{UINT型を定義する} */ +#if _KERNEL_TBIT_UINT == _KERNEL_TBIT_PROC_UINT + +typedef _KERNEL_T_PROC_UINT UINT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor} */ +#define _KERNEL_TMAX_UINT _KERNEL_TMAX_PROC_UINT +#define _KERNEL_TMAX_UINT _KERNEL_TMAX_PROC_UINT + +#elif _KERNEL_TBIT_UINT == 8 /* 8-bit */ + +typedef _KERNEL_T_UB UINT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor} */ +#define _KERNEL_TMAX_UINT _KERNEL_TMAX_UB +#define _KERNEL_TMAX_UINT _KERNEL_TMAX_UB + +#elif _KERNEL_TBIT_UINT == 16 /* 16-bit */ + +typedef _KERNEL_T_UH UINT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor} */ +#define _KERNEL_TMIN_UINT _KERNEL_TMIN_UH +#define _KERNEL_TMAX_UINT _KERNEL_TMAX_UH + +#elif _KERNEL_TBIT_UINT == 32 /* 32-bit */ + +typedef _KERNEL_T_UW UINT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor} */ +#define _KERNEL_TMIN_UINT _KERNEL_TMIN_UW +#define _KERNEL_TMAX_UINT _KERNEL_TMAX_UW + +#elif _KERNEL_TBIT_UINT == 64 /* 64-bit */ + +typedef _KERNEL_T_UD UINT; /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor} */ +#define _KERNEL_TMIN_UINT _KERNEL_TMIN_UD +#define _KERNEL_TMAX_UINT _KERNEL_TMAX_UD + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_UINT + +#endif + + + +/* %jp{ポインタ型} */ +typedef _KERNEL_T_VP VP; /**< %jp{データタイプが定まらないものへのポインタ}%en{Pointer to an unknown data type} */ + + + +/* %jp{関数ポインタ型} */ +typedef void (*FP)(); /**< %jp{プログラムの起動番地(ポインタ)}%en{Processing unit start address(pointer to a function)} */ +#define _KERNEL_TBIT_FP _KERNEL_TBIT_VP + + + +/* %jp{ポインタを格納できる整数型} */ +#if _KERNEL_VP_INT_PTR /* %jp{VP_INTをポインタ型にするなら} */ + +typedef _KERNEL_T_VP VP_INT; /**< %jp{データタイプが定まらないものへのポインタまたはプロセッサに自然なサイズの符号付き整数}%en{Pointer to an unknown data type, or a signed integer for the processor} */ +#define _KERNEL_TBIT_VP_INT _KERNEL_TBIT_VP + +#else /* %jp{VP_INTを整数型にするなら} */ + +#if (_KERNEL_TMIN_INTPTR >= _KERNEL_TMIN_INT) && (_KERNEL_TMAX_INTPTR <= _KERNEL_TMAX_INT) +typedef INT VP_INT; /**< %jp{データタイプが定まらないものへのポインタまたはプロセッサに自然なサイズの符号付き整数}%en{Pointer to an unknown data type, or a signed integer for the processor} */ +#define _KERNEL_TMIN_VP_INT _KERNEL_TMIN_INT +#define _KERNEL_TMAX_VP_INT _KERNEL_TMAX_INT +#define _KERNEL_TBIT_VP_INT _KERNEL_TBIT_INT +#else +typedef _KERNEL_T_INTPTR VP_INT; /**< %jp{データタイプが定まらないものへのポインタまたはプロセッサに自然なサイズの符号付き整数}%en{Pointer to an unknown data type, or a signed integer for the processor} */ +#define _KERNEL_TMIN_VP_INT _KERNEL_TMIN_INTPTR +#define _KERNEL_TMAX_VP_INT _KERNEL_TMAX_INTPTR +#define _KERNEL_TBIT_VP_INT _KERNEL_TBIT_INTPTR +#endif + +#endif + + + +/* %jp{BOOL型を定義する} */ +#if _KERNEL_TBIT_BOOL == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT BOOL; /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */ +#define _KERNEL_TMIN_BOOL _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_BOOL _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_TBIT_BOOL == 8 /* 8-bit */ + +typedef _KERNEL_T_B BOOL; /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */ +#define _KERNEL_TMIN_BOOL _KERNEL_TMIN_B +#define _KERNEL_TMAX_BOOL _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_BOOL == 16 /* 16-bit */ + +typedef _KERNEL_T_H BOOL; /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */ +#define _KERNEL_TMIN_BOOL _KERNEL_TMIN_H +#define _KERNEL_TMAX_BOOL _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_BOOL == 32 /* 32-bit */ + +typedef _KERNEL_T_W BOOL; /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */ +#define _KERNEL_TMIN_BOOL _KERNEL_TMIN_W +#define _KERNEL_TMAX_BOOL _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_BOOL == 64 /* 64-bit */ + +typedef _KERNEL_T_D BOOL; /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */ +#define _KERNEL_TMIN_BOOL _KERNEL_TMIN_D +#define _KERNEL_TMAX_BOOL _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_BOOL + +#endif + + + +/* %jp{機能コードを定義する}%en{Function code} */ +#if _KERNEL_TBIT_FN == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT FN; /**< %jp{機能コード}%en{Function code(signed integer)} */ +#define _KERNEL_TMIN_FN _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_FN _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_TBIT_FN == 8 /* 8-bit */ + +typedef _KERNEL_T_B FN; /**< %jp{機能コード}%en{Function code(signed integer)} */ +#define _KERNEL_TMIN_FN _KERNEL_TMIN_B +#define _KERNEL_TMAX_FN _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_FN == 16 /* 16-bit */ + +typedef _KERNEL_T_H FN; /**< %jp{機能コード}%en{Function code(signed integer)} */ +#define _KERNEL_TMIN_FN _KERNEL_TMIN_H +#define _KERNEL_TMAX_FN _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_FN == 32 /* 32-bit */ + +typedef _KERNEL_T_W FN; /**< %jp{機能コード}%en{Function code(signed integer)} */ +#define _KERNEL_TMIN_FN _KERNEL_TMIN_W +#define _KERNEL_TMAX_FN _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_FN == 64 /* 64-bit */ + +typedef _KERNEL_T_D FN; /**< %jp{機能コード}%en{Function code(signed integer)} */ +#define _KERNEL_TMIN_FN _KERNEL_TMIN_D +#define _KERNEL_TMAX_FN _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_CFG_TBIT_FN + +#endif + + + +/* %jp{エラーコード}%en{Error code(signed integer)} */ +#if _KERNEL_TBIT_ER == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT ER; /**< %jp{エラーコード}%en{Error code(signed integer)} */ +#define _KERNEL_TMIN_ER _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_ER _KERNEL_TMAX_PROC_INT + + +#elif _KERNEL_TBIT_ER == 8 /* 8-bit */ + +typedef _KERNEL_T_B ER; /**< %jp{エラーコード}%en{Error code(signed integer)} */ +#define _KERNEL_TMIN_ER _KERNEL_TMIN_B +#define _KERNEL_TMAX_ER _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_ER == 16 /* 16-bit */ + +typedef _KERNEL_T_H ER; /**< %jp{エラーコード}%en{Error code(signed integer)} */ +#define _KERNEL_TMIN_ER _KERNEL_TMIN_H +#define _KERNEL_TMAX_ER _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_ER == 32 /* 32-bit */ + +typedef _KERNEL_T_W ER; /**< %jp{エラーコード}%en{Error code(signed integer)} */ +#define _KERNEL_TMIN_ER _KERNEL_TMIN_W +#define _KERNEL_TMAX_ER _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_ER == 64 /* 64-bit */ + +typedef _KERNEL_T_D ER; /**< %jp{エラーコード}%en{Error code(signed integer)} */ +#define _KERNEL_TMIN_ER _KERNEL_TMIN_D +#define _KERNEL_TMAX_ER _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_ER + +#endif + + + +/* %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */ +#if _KERNEL_TBIT_ID == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT ID; /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */ +#define _KERNEL_TMIN_ID _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_ID _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_TBIT_ID == 8 /* 8-bit */ + +typedef _KERNEL_T_B ID; /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */ +#define _KERNEL_TMIN_ID _KERNEL_TMIN_B +#define _KERNEL_TMAX_ID _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_ID == 16 /* 16-bit */ + +typedef _KERNEL_T_H ID; /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */ +#define _KERNEL_TMIN_ID _KERNEL_TMIN_H +#define _KERNEL_TMAX_ID _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_ID == 32 /* 32-bit */ + +typedef _KERNEL_T_W ID; /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */ +#define _KERNEL_TMIN_ID _KERNEL_TMIN_W +#define _KERNEL_TMAX_ID _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_ID == 64 /* 8-bit */ + +typedef _KERNEL_T_D ID; /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */ +#define _KERNEL_TMIN_ID _KERNEL_TMIN_D +#define _KERNEL_TMAX_ID _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_ID + +#endif + + + +/* %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */ +#if _KERNEL_TBIT_ATR == _KERNEL_TBIT_PROC_UINT + +typedef _KERNEL_T_PROC_UINT ATR; /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */ +#define _KERNEL_TMIN_ATR _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_ATR _KERNEL_TMAX_PROC_UINT + +#elif _KERNEL_TBIT_ATR == 8 /* 8-bit */ + +typedef _KERNEL_T_UB ATR; /**< %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */ +#define _KERNEL_TMIN_ATR _KERNEL_TMIN_UB +#define _KERNEL_TMAX_ATR _KERNEL_TMAX_UB + +#elif _KERNEL_TBIT_ATR == 16 /* 16-bit */ + +typedef _KERNEL_T_UH ATR; /**< %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */ +#define _KERNEL_TMIN_ATR _KERNEL_TMIN_UH +#define _KERNEL_TMAX_ATR _KERNEL_TMAX_UH + +#elif _KERNEL_TBIT_ATR == 32 /* 32-bit */ + +typedef _KERNEL_T_UW ATR; /**< %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */ +#define _KERNEL_TMIN_ATR _KERNEL_TMIN_UW +#define _KERNEL_TMAX_ATR _KERNEL_TMAX_UW + +#elif _KERNEL_TBIT_ATR == 64 /* 64-bit */ + +typedef _KERNEL_T_UD ATR; /**< %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */ +#define _KERNEL_TMIN_ATR _KERNEL_TMIN_UD +#define _KERNEL_TMAX_ATR _KERNEL_TMAX_UD + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_ATR + +#endif + + + +/* %jp{オブジェクト状態}%en{Object state(unsigned integer)} */ +#if _KERNEL_TBIT_STAT == _KERNEL_TBIT_PROC_UINT + +typedef _KERNEL_T_PROC_UINT STAT; /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */ +#define _KERNEL_TMIN_STAT _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_STAT _KERNEL_TMAX_PROC_UINT + +#elif _KERNEL_TBIT_STAT == 8 /* 8-bit */ + +typedef _KERNEL_T_UB STAT; /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */ +#define _KERNEL_TMIN_STAT _KERNEL_TMIN_UB +#define _KERNEL_TMAX_STAT _KERNEL_TMAX_UB + +#elif _KERNEL_TBIT_STAT == 16 /* 16-bit */ + +typedef _KERNEL_T_UH STAT; /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */ +#define _KERNEL_TMIN_STAT _KERNEL_TMIN_UH +#define _KERNEL_TMAX_STAT _KERNEL_TMAX_UH + +#elif _KERNEL_TBIT_STAT == 32 /* 32-bit */ + +typedef _KERNEL_T_UW STAT; /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */ +#define _KERNEL_TMIN_STAT _KERNEL_TMIN_UW +#define _KERNEL_TMAX_STAT _KERNEL_TMAX_UW + +#elif _KERNEL_TBIT_STAT == 64 /* 8-bit */ + +typedef _KERNEL_T_UD STAT; /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */ +#define _KERNEL_TMIN_STAT _KERNEL_TMIN_UD +#define _KERNEL_TMAX_STAT _KERNEL_TMAX_UD + +#else /* error */ + +#error Illegal value : _KERNEL_CFG_TBIT_STAT + +#endif + + + +/* %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */ +#if _KERNEL_TBIT_MODE == _KERNEL_TBIT_PROC_UINT + +typedef _KERNEL_T_PROC_UINT MODE; /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */ +#define _KERNEL_TMIN_MODE _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_MODE _KERNEL_TMAX_PROC_UINT + +#elif _KERNEL_TBIT_MODE == 8 /* 8-bit */ + +typedef _KERNEL_T_UB MODE; /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */ +#define _KERNEL_TMIN_MODE _KERNEL_TMIN_UB +#define _KERNEL_TMAX_MODE _KERNEL_TMAX_UB + +#elif _KERNEL_TBIT_MODE == 16 /* 16-bit */ + +typedef _KERNEL_T_UH MODE; /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */ +#define _KERNEL_TMIN_MODE _KERNEL_TMIN_UH +#define _KERNEL_TMAX_MODE _KERNEL_TMAX_UH + +#elif _KERNEL_TBIT_MODE == 32 /* 32-bit */ + +typedef _KERNEL_T_UW MODE; /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */ +#define _KERNEL_TMIN_MODE _KERNEL_TMIN_UW +#define _KERNEL_TMAX_MODE _KERNEL_TMAX_UW + +#elif _KERNEL_TBIT_MODE == 64 /* 8-bit */ + +typedef _KERNEL_T_UD MODE; /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */ +#define _KERNEL_TMIN_MODE _KERNEL_TMIN_UD +#define _KERNEL_TMAX_MODE _KERNEL_TMAX_UD + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_MODE + +#endif + + + +/* %jp{優先度}%en{Priority(signed integer)} */ +#if _KERNEL_TBIT_PRI == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT PRI; /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */ +#define _KERNEL_TMIN_PRI _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_PRI _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_CFG_TBIT_PRI == 8 /* 8-bit */ + +typedef _KERNEL_T_B PRI; /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */ +#define _KERNEL_TMIN_PRI _KERNEL_TMIN_B +#define _KERNEL_TMAX_PRI _KERNEL_TMAX_B + +#elif _KERNEL_CFG_TBIT_PRI == 16 /* 16-bit */ + +typedef _KERNEL_T_H PRI; /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */ +#define _KERNEL_TMIN_PRI _KERNEL_TMIN_H +#define _KERNEL_TMAX_PRI _KERNEL_TMAX_H + +#elif _KERNEL_CFG_TBIT_PRI == 32 /* 32-bit */ + +typedef _KERNEL_T_W PRI; /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */ +#define _KERNEL_TMIN_PRI _KERNEL_TMIN_W +#define _KERNEL_TMAX_PRI _KERNEL_TMAX_W + +#elif _KERNEL_CFG_TBIT_PRI == 64 /* 8-bit */ + +typedef _KERNEL_T_D PRI; /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */ +#define _KERNEL_TMIN_PRI _KERNEL_TMIN_D +#define _KERNEL_TMAX_PRI _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_PRI + +#endif + + + +/* %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */ +#if _KERNEL_TBIT_SIZE == _KERNEL_TBIT_PROC_UINT + +typedef _KERNEL_T_PROC_UINT SIZE; /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */ +#define _KERNEL_TMIN_SIZE _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_SIZE _KERNEL_TMAX_PROC_UINT + +#elif _KERNEL_TBIT_SIZE == 8 /* 8-bit */ + +typedef _KERNEL_T_UB SIZE; /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */ +#define _KERNEL_TMIN_SIZE _KERNEL_TMIN_UB +#define _KERNEL_TMAX_SIZE _KERNEL_TMAX_UB + +#elif _KERNEL_TBIT_SIZE == 16 /* 16-bit */ + +typedef _KERNEL_T_UH SIZE; /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */ +#define _KERNEL_TMIN_SIZE _KERNEL_TMIN_UH +#define _KERNEL_TMAX_SIZE _KERNEL_TMAX_UH + +#elif _KERNEL_TBIT_SIZE == 32 /* 32-bit */ + +typedef _KERNEL_T_UW SIZE; /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */ +#define _KERNEL_TMIN_SIZE _KERNEL_TMIN_UW +#define _KERNEL_TMAX_SIZE _KERNEL_TMAX_UW + +#elif _KERNEL_TBIT_SIZE == 64 /* 8-bit */ + +typedef _KERNEL_T_UD SIZE; /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */ +#define _KERNEL_TMIN_SIZE _KERNEL_TMIN_UD +#define _KERNEL_TMAX_SIZE _KERNEL_TMAX_UD + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_SIZE + +#endif + + + +/* %jp{タイムアウト}%en{Timeout} */ +#if _KERNEL_TBIT_TMO == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT TMO; /**< %jp{タイムアウト}%en{Timeout} */ +#define _KERNEL_TMIN_TMO _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_TMO _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_TBIT_TMO == 8 /* 8-bit */ + +typedef _KERNEL_T_B TMO; /**< %jp{タイムアウト}%en{Timeout} */ +#define _KERNEL_TMIN_TMO _KERNEL_TMIN_B +#define _KERNEL_TMAX_TMO _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_TMO == 16 /* 16-bit */ + +typedef _KERNEL_T_H TMO; /**< %jp{タイムアウト}%en{Timeout} */ +#define _KERNEL_TMIN_TMO _KERNEL_TMIN_H +#define _KERNEL_TMAX_TMO _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_TMO == 32 /* 32-bit */ + +typedef _KERNEL_T_W TMO; /**< %jp{タイムアウト}%en{Timeout} */ +#define _KERNEL_TMIN_TMO _KERNEL_TMIN_W +#define _KERNEL_TMAX_TMO _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_TMO == 64 /* 8-bit */ + +typedef _KERNEL_T_D TMO; /**< %jp{タイムアウト}%en{Timeout} */ +#define _KERNEL_TMIN_TMO _KERNEL_TMIN_D +#define _KERNEL_TMAX_TMO _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_TMO + +#endif + + + +/* %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */ +#if _KERNEL_TBIT_RELTIM == _KERNEL_TBIT_PROC_UINT + +typedef _KERNEL_T_PROC_UINT RELTIM; /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */ +#define _KERNEL_TMIN_RELTIM _KERNEL_TMIN_PROC_UINT +#define _KERNEL_TMAX_RELTIM _KERNEL_TMAX_PROC_UINT + +#elif _KERNEL_TBIT_RELTIM == 8 /* 8-bit */ + +typedef _KERNEL_T_UB RELTIM; /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */ +#define _KERNEL_TMIN_RELTIM _KERNEL_TMIN_UB +#define _KERNEL_TMAX_RELTIM _KERNEL_TMAX_UB + +#elif _KERNEL_TBIT_RELTIM == 16 /* 16-bit */ + +typedef _KERNEL_T_UH RELTIM; /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */ +#define _KERNEL_TMIN_RELTIM _KERNEL_TMIN_UH +#define _KERNEL_TMAX_RELTIM _KERNEL_TMAX_UH + +#elif _KERNEL_TBIT_RELTIM == 32 /* 32-bit */ + +typedef _KERNEL_T_UW RELTIM; /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */ +#define _KERNEL_TMIN_RELTIM _KERNEL_TMIN_UW +#define _KERNEL_TMAX_RELTIM _KERNEL_TMAX_UW + +#elif _KERNEL_TBIT_RELTIM == 64 /* 8-bit */ + +typedef _KERNEL_T_UD RELTIM; /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */ +#define _KERNEL_TMIN_RELTIM _KERNEL_TMIN_UD +#define _KERNEL_TMAX_RELTIM _KERNEL_TMAX_UD + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_RELTIM + +#endif + + + +/* %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ +#if _KERNEL_SYSTIM_STRUCT + +#if _KERNEL_TBIT_SYSTIM == 16 /* 16-bit */ + +/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ +typedef struct t_systim +{ + UH ltime; /**< %jp{下位 16bit}%en{lower 16bit} */ +} SYSTIM; + +#define _KERNEL_SYSTIM_ADD(t, n) do { (t)->ltime += n; } while(0) + +#elif _KERNEL_TBIT_SYSTIM == 32 /* 32-bit */ + +/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ +typedef struct t_systim +{ + UW ltime; /**< %jp{下位 32bit}%en{lower 32bit} */ +} SYSTIM; + +#define _KERNEL_SYSTIM_ADD(t, n) do { (t)->ltime += n; } while(0) + +#elif _KERNEL_CFG_TBIT_SYSTIM == 48 /* 48-bit */ + +/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ +typedef struct t_systim +{ + UW ltime; /**< %jp{下位 32bit}%en{lower 32bit} */ + UH utime; /**< %jp{上位 16bit}%en{upper 16bit} */ +} SYSTIM; + + +#define _KERNEL_SYSTIM_ADD(t, n) do { if ( (t)->ltime + (n) < (t)->ltime ) { (t)->utime++; } (t)->ltime += (n); } while(0) + +#elif _KERNEL_TBIT_SYSTIM == 64 /* 64-bit */ + +/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ +typedef struct t_systim +{ + UW ltime; /**< %en{lower}%jp{下位 32bit} */ + UW utime; /**< %en{upper}%jp{上位 32bit} */ +} SYSTIM; + +#define _KERNEL_SYSTIM_ADD(t, n) do { if ( (t)->ltime + (n) < (t)->ltime ) { (t)->utime++; } (t)->ltime += (n); } while(0) + +#elif _KERNEL_TBIT_SYSTIM == 96 /* 96-bit */ + +/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ +typedef struct t_systim +{ + UD ltime; /**< %en{lower}%jp{下位 64bit} */ + UW utime; /**< %en{upper}%jp{上位 32bit} */ +} SYSTIM; + +#define _KERNEL_SYSTIM_ADD(t, n) do { if ( (t)->ltime + (n) < (t)->ltime ) { (t)->utime++; } (t)->ltime += (n); } while(0) + +#elif _KERNEL_TBIT_SYSTIM == 128 /* 128-bit */ + +/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ +typedef struct t_systim +{ + UD ltime; /**< %en{lower}%jp{下位 64bit} */ + UD utime; /**< %en{upper}%jp{上位 32bit} */ +} SYSTIM; + +#define _KERNEL_SYSTIM_ADD(t, n) do { if ( (t)->ltime + (n) < (t)->ltime ) { (t)->utime++; } (t)->ltime += (n); } while(0) + +#else + +#error Illegal value : _KERNEL_TBIT_SYSTIM + +#endif + +#else + +#if _KERNEL_CFG_TBIT_SYSTIM == _KERNEL_TBIT_PROC_UINT /* default */ + +typedef _KERNEL_T_PROC_UINT SYSTIM; /**< %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ + +#elif _KERNEL_TBIT_SYSTIM == 16 /* 16-bit */ + +typedef _KERNEL_T_UH SYSTIM; /**< %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ + +#elif _KERNEL_TBIT_SYSTIM == 32 /* 32-bit */ + +typedef _KERNEL_T_UW SYSTIM; /**< %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ + +#elif _KERNEL_TBIT_SYSTIM == 64 /* 64-bit */ + +typedef _KERNEL_T_UD SYSTIM; /**< %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */ + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_SYSTIM + +#endif + +#define _KERNEL_SYSTIM_ADD(t, n) do { *(t) += n; } while(0) + +#endif + + + +/* %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */ +#if _KERNEL_TBIT_ER_BOOL == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT ER_BOOL; /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */ +#define _KERNEL_TMIN_ER_BOOL _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_ER_BOOL _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_TBIT_ER_BOOL == 8 /* 8-bit */ + +typedef _KERNEL_T_B ER_BOOL; /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */ +#define _KERNEL_TMIN_ER_BOOL _KERNEL_TMIN_B +#define _KERNEL_TMAX_ER_BOOL _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_ER_BOOL == 16 /* 16-bit */ + +typedef _KERNEL_T_H ER_BOOL; /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */ +#define _KERNEL_TMIN_ER_BOOL _KERNEL_TMIN_H +#define _KERNEL_TMAX_ER_BOOL _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_ER_BOOL == 32 /* 32-bit */ + +typedef _KERNEL_T_W ER_BOOL; /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */ +#define _KERNEL_TMIN_ER_BOOL _KERNEL_TMIN_W +#define _KERNEL_TMAX_ER_BOOL _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_ER_BOOL == 64 /* 8-bit */ + +typedef _KERNEL_T_D ER_BOOL; /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */ +#define _KERNEL_TMIN_ER_BOOL _KERNEL_TMIN_D +#define _KERNEL_TMAX_ER_BOOL _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_ER_BOOL + +#endif + + + +/* %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */ +#if _KERNEL_TBIT_ER_ID == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT ER_ID; /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */ +#define _KERNEL_TMIN_ER_ID _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_ER_ID _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_TBIT_ER_ID == 8 /* 8-bit */ + +typedef _KERNEL_T_B ER_ID; /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */ +#define _KERNEL_TMIN_ER_ID _KERNEL_TMIN_B +#define _KERNEL_TMAX_ER_ID _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_ER_ID == 16 /* 16-bit */ + +typedef _KERNEL_T_H ER_ID; /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */ +#define _KERNEL_TMIN_ER_ID _KERNEL_TMIN_H +#define _KERNEL_TMAX_ER_ID _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_ER_ID == 32 /* 32-bit */ + +typedef _KERNEL_T_W ER_ID; /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */ +#define _KERNEL_TMIN_ER_ID _KERNEL_TMIN_W +#define _KERNEL_TMAX_ER_ID _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_ER_ID == 64 /* 8-bit */ + +typedef _KERNEL_T_D ER_ID; /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */ +#define _KERNEL_TMIN_ER_ID _KERNEL_TMIN_D +#define _KERNEL_TMAX_ER_ID _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_ER_ID + +#endif + + + +/* %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */ +#if _KERNEL_TBIT_ER_UINT == _KERNEL_TBIT_PROC_INT + +typedef _KERNEL_T_PROC_INT ER_UINT; /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */ +#define _KERNEL_TMIN_ER_UINT _KERNEL_TMIN_PROC_INT +#define _KERNEL_TMAX_ER_UINT _KERNEL_TMAX_PROC_INT + +#elif _KERNEL_TBIT_ER_UINT == 8 /* 8-bit */ + +typedef _KERNEL_T_B ER_UINT; /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */ +#define _KERNEL_TMIN_ER_UINT _KERNEL_TMIN_B +#define _KERNEL_TMAX_ER_UINT _KERNEL_TMAX_B + +#elif _KERNEL_TBIT_ER_UINT == 16 /* 16-bit */ + +typedef _KERNEL_T_H ER_UINT; /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */ +#define _KERNEL_TMIN_ER_UINT _KERNEL_TMIN_H +#define _KERNEL_TMAX_ER_UINT _KERNEL_TMAX_H + +#elif _KERNEL_TBIT_ER_UINT == 32 /* 32-bit */ + +typedef _KERNEL_T_W ER_UINT; /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */ +#define _KERNEL_TMIN_ER_UINT _KERNEL_TMIN_W +#define _KERNEL_TMAX_ER_UINT _KERNEL_TMAX_W + +#elif _KERNEL_TBIT_ER_UINT == 64 /* 8-bit */ + +typedef _KERNEL_T_D ER_UINT; /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */ +#define _KERNEL_TMIN_ER_UINT _KERNEL_TMIN_D +#define _KERNEL_TMAX_ER_UINT _KERNEL_TMAX_D + +#else /* error */ + +#error Illegal value : _KERNEL_TBIT_ER_UINT + +#endif + + + +/* 以下まだ力尽きて未対応 */ + +typedef UH TEXPTN; /**< %jp{タスク例外要因のパターン(符号無し整数)}%en{Bit pattern for the task exception code(unsigned integer)} */ +typedef UH FLGPTN; /**< %jp{フラグパターン(符号無し整数)}%en{Bit pattern of eventflag(unsigned integer)} */ + +/** %jp{フラグパターン(符号無し整数)}%en{Message header for a mailbox} */ +typedef struct t_msg +{ + struct t_msg *pk_next; +} T_MSG; + +typedef struct t_msg_pri +{ + T_MSG msgque; + PRI msgpri; +} T_MSG_PRI; + + +typedef UINT RDVPTN; +typedef INT RDVNO; +typedef INT OVRTIM; + +typedef INT INHNO; /**< %jp{割り込みハンドラ番号}%en{} */ +typedef INT INTNO; /**< %jp{割り込み番号}%en{} */ + +typedef INT EXCNO; /**< %jp{CPU例外ハンドラ番号}%en{} */ + + + +/* ------------------------------------ */ +/* macro definition */ +/* ------------------------------------ */ + +/* %jp{エラーコード取り出し} */ +#define MERCD(ercd) ((ER)((B)(ercd))) /**< %jp{エラーコードからメインエラーコードを取り出す} */ +#define SERCD(ercd) ((ercd) >> 8) /**< %jp{エラーコードからサブエラーコードを取り出す} */ + + + +#endif /* _KERNEL__itron_h__ */ + + +/* end of file */ + diff --git a/kernel/include/kernel.h b/kernel/include/kernel.h new file mode 100755 index 0000000..cd7803f --- /dev/null +++ b/kernel/include/kernel.h @@ -0,0 +1,349 @@ +/** + * Hyper Operating System V4 Advance + * + * @file kernel.h + * @brief %jp{カーネルヘッダファイル}%en{uITRON4.0 kernel header file} + * + * @version $Id: kernel.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__kernel_h__ +#define _KERNEL__kernel_h__ + + +#include "itron.h" + + +/** %jp{バージョン情報} */ +#define TKERNEL_MAKER 0x0008 /**< %jp{メーカーコード(個人)} */ +#define TKERNEL_PRID 0x0000 /**< %jp{カーネルの識別番号(未定)} */ +#define TKERNEL_SPVER 0x5402 /**< %jp{ITRON仕様のバージョン(μITRON Ver 4.02)} */ +#define TKERNEL_PRVER 0x0000 /**< %jp{カーネルのバージョン番号(HOS-V4a Ver 0.00)} */ + + +#define TMAX_ACTCNT _KERNEL_TMAX_ACTCNT /**< %jp{タスクの起動要求キューイング数の最大値} */ +#define TMAX_WUPCNT _KERNEL_TMAX_WUPCNT /**< %jp{タスクの起床要求キューイング数の最大値} */ +#define TMAX_SUSCNT _KERNEL_TMAX_SUSCNT /**< %jp{タスクの強制待ちネスト数の最大値} */ + +#define TMAX_MAXSEM _KERNEL_TMAX_MAXSEM /**< %jp{セマフォ資源数の最大値} */ + + +#define _KERNEL_TSZ_ALIGNED(size) (((size) + _KERNEL_MEM_ALIGN - 1) & ~(_KERNEL_MEM_ALIGN - 1)) + +/** %jp{データキューの領域のサイズ} */ +#define TSZ_DTQ(dtqcnt) ((SIZE)(dtqcnt) * (SIZE)sizeof(VP_INT)) + +/** %jp{メッセージキューヘッダ領域のサイズ} */ +#define TSZ_MPRIHD(maxmpri) ((SIZE)(maxmpri) * (SIZE)sizeof(T_MSG_PRI *)) + +/** %jp{メモリプール領域のサイズ} */ +#define TSZ_MPF(blkcnt, blksz) ((SIZE)(blkcnt) * (SIZE)_KERNEL_TSZ_ALIGNED(blksz)) + +#define TSZ_MBF(msgcnt, msgsz) ((SIZE)(msgcnt) * (SIZE)((msgsz) + sizeof(UINT))) + +#define TSZ_MPL(blkcnt, blksz) ((SIZE)(blkcnt) * ((SIZE)_KERNEL_TSZ_ALIGNED(blksz) + (SZIE))) + + + +/** %jp{バージョン情報} */ +typedef struct t_rver +{ + UH maker; /**< %jp{カーネルのメーカーコード} */ + UH prid; /**< %jp{カーネルの識別番号} */ + UH spver; /**< %jp{ITRON仕様のバージョン情報} */ + UH prver; /**< %jp{カーネルのバージョン番号} */ + UH prno[4]; /**< %jp{カーネル製品の管理情報} */ +} T_RVER; + + +/** %jp{タスク生成情報} */ +typedef struct t_ctsk +{ + ATR tskatr; /**< %jp{タスク属性} */ + VP_INT exinf; /**< %jp{タスクの拡張情報} */ + FP task; /**< %jp{タスクの起動番地} */ + PRI itskpri; /**< %jp{タスクの起動時優先度} */ + SIZE stksz; /**< %jp{スタック領域のサイズ(バイト数)} */ + VP stk; /**< %jp{スタック領域の先頭番地} */ +} T_CTSK; + +/** %jp{タスク状態} */ +typedef struct t_rtsk +{ + STAT tskstat; /**< %jp{タスク状態} */ + PRI tskpri; /**< %jp{タスクの現在優先度} */ + PRI tskbpri; /**< %jp{タスクのベース優先度} */ + STAT tskwait; /**< %jp{待ち要因} */ + ID wobjid; /**< %jp{待ち対象のオブジェクトのID番号} */ + TMO lefttmo; /**< %jp{タイムアウトするまでの時間} */ + UINT actcnt; /**< %jp{起動要求キューイング回数} */ + UINT wupcnt; /**< %jp{起床要求キューイング回数} */ + UINT suscnt; /**< %jp{強制待ち要求ネスト回数} */ + + /* %jp{以下、独自実装} */ +#if _KERNEL_CFG_RTSK_EXINF + VP_INT exinf; /* タスクの拡張情報 */ +#endif +} T_RTSK; + +/* タスク状態(簡易版) */ +typedef struct t_rtst +{ + STAT tskstat; /* タスク状態 */ + STAT tskwait; /* 待ち要因 */ + + /* %jp{以下、独自実装} */ +#if _KERNEL_CFG_RTST_EXINF + VP_INT exinf; /* タスクの拡張情報 */ +#endif +} T_RTST; + + +/** %jp{セマフォ生成情報}%en{Semaphore creation information packet} */ +typedef struct t_csem +{ + ATR sematr; /**< %jp{セマフォ属性}%en{Semaphoer attribute} */ + UINT isemcnt; /**< %jp{セマフォ資源数の初期値}%en{Initial semaphoer resource count} */ + UINT maxsem; /**< %jp{セマフォの最大資源数}%en{Maximum semaphoer resource count} */ +} T_CSEM; + +/** %jp{セマフォ状態情報}%en{Semaphore state packet} */ +typedef struct t_rsem +{ + ID wtskid; /**< %jp{セマフォの待ち行列の先頭のタスクのID番号}%en{ID number of the task at the head of the semaphore's wait queue} */ + UINT semcnt; /**< %jp{セマフォの現在の資源数}%en{Current semaphore resource count} */ +} T_RSEM; + + +/** %jp{イベントフラグ生成情報}%en{Eventflag creation information packet} */ +typedef struct t_cflg +{ + ATR flgatr; /**< %jp{イベントフラグ属性}%en{Eventflag attribute} */ + FLGPTN iflgptn; /**< %jp{イベントフラグのビットパターンの初期値}%en{Initial value of eventflag bit pattern} */ +} T_CFLG; + +/** %jp{イベントフラグ状態}%en{Eventflag state packet} */ +typedef struct t_rflg +{ + ID wtskid; /**< %jp{イベントフラグの待ち行列の先頭のタスクのID番号}%en{ID number of the task at the head of the eventflag's wait queue} */ + FLGPTN flgptn; /**< %jp{イベントフラグの現在のビットパターン}%en{Eventflag's vurrent bit pattern} */ +} T_RFLG; + + +/* データキュー生成情報 */ +typedef struct t_cdtq +{ + ATR dtqatr; /* データキュー属性 */ + UINT dtqcnt; /* データキュー領域の容量(データの個数) */ + VP dtq; /* データキュー領域の先頭番地 */ +} T_CDTQ; + +/* データキュー状態 */ +typedef struct t_rdtq +{ + ID stskid; /* データキューの送信待ち行列の先頭のタスクのID番号 */ + ID rtskid; /* データキューの受信待ち行列の先頭のタスクのID番号 */ + UINT sdtqcnt; /* データキューに入っているデータの数 */ +} T_RDTQ; + + +/** %jp{メールボックス生成情報} */ +typedef struct t_cmbx +{ + ATR mbxatr; /**< %jp{メールボックス属性} */ + PRI maxmpri; /**< %jp{送信されるメッセージの優先度の最大値} */ + VP mprihd; /**< %jp{優先度別のメッセージキューヘッダ領域の先頭番地} */ +} T_CMBX; + +/** %jp{メールボックス状態} */ +typedef struct t_rmbx +{ + ID wtskid; /**< %jp{メールボックスの待ち行列の先頭のタスクのID番号} */ + T_MSG *pk_msg; /**< %jp{メッセージキューの先頭のメッセージパケットの先頭番地} */ +} T_RMBX; + + + +/* ミューテックス生成情報 */ +typedef struct t_cmtx +{ + ATR mtxatr; /* ミューテックス属性 */ + PRI ceilpri; /* ミューテックスの上限優先度 */ +} T_CMTX; + + +/* メッセージバッファ状態情報 */ +typedef struct t_rmbf +{ + ID stskid; /* メッセージバッファの送信待ち行列の先頭のタスクのID番号 */ + ID rtskid; /* メッセージバッファの受信待ち行列の先頭のタスクのID番号 */ + UINT smsgcnt; /* メッセージバッファに入っているメッセージの数 */ + SIZE fmbfsz; /* メッセージバッファ領域の空き領域のサイズ(バイト数、最低限の管理領域を除く) */ +} T_RMBF; + + +/** %jp{固定長メモリプール生成情報} */ +typedef struct t_cmpf +{ + ATR mpfatr; /**< %jp{固定長メモリプール属性} */ + UINT blkcnt; /**< %jp{獲得できるメモリブロック数(個数)} */ + UINT blksz; /**< %jp{メモリブロックのサイズ(バイト数)} */ + VP mpf; /**< %jp{固定長メモリプール領域の先頭番地} */ +} T_CMPF; + + +/** %jp{固定長メモリプール状態} */ +typedef struct t_rmpf +{ + ID wtskid; /**< %jp{固定長メモリプールの待ち行列の先頭のタスクのID番号} */ + UINT fblkcnt; /**< %jp{固定長メモリプールの空きメモリブロック数(個数)} */ +} T_RMPF; + + + +/* 割り込みハンドラの定義用 */ +typedef struct t_dinh +{ + ATR inhatr; /* 割り込みハンドラ属性 */ + FP inthdr; /* 割り込みハンドラの起動番地 */ +} T_DINH; + + +/* 割込みサービスルーチン生成情報 */ +typedef struct t_cisr +{ + ATR isratr; /* 割込みサービスルーチン属性 */ + VP_INT exinf; /* 割込みサービスルーチンの拡張情報 */ + INTNO intno; /* 割込みサービスルーチンを付加する割り込み番号 */ + FP isr; /* 割込みサービスルーチンの起動番地 */ +} T_CISR; + + + +#ifdef __cplusplus +extern "C" { +#endif + +/* OSの起動 */ +ER vsta_knl(void); /* カーネルの開始(独自サービスコール) */ + +/* タスク管理機能 */ +ER cre_tsk(ID tskid, const T_CTSK *pk_ctsk); /* タスクの生成 */ +ER_ID acre_tsk(const T_CTSK *pk_ctsk); /* タスクの生成(ID番号自動割付け) */ +ER del_tsk(ID tskid); /* タスクの削除 */ +ER act_tsk(ID tskid); /* タスクの起動 */ +ER_UINT can_act(ID tskid); /* タスク起動要求のキャンセル */ +ER sta_tsk(ID tskid, VP_INT stacd); /* タスクの起動(起動コード指定) */ +void ext_tsk(void); /* 自タスクの終了 */ +void exd_tsk(void); /* 自タスクの終了と削除 */ +ER ter_tsk(ID tskid); /* タスクの強制終了 */ +ER chg_pri(ID tskid, PRI tskpri); /* タスク優先度の変更 */ +ER get_pri(ID tskid, PRI *p_tskpri); /* タスク優先度の参照 */ +ER ref_tsk(ID tskid, T_RTSK *p_rtsk); /* タスクの状態参照 */ +ER ref_tst(ID tskid, T_RTST *p_rtst); /* タスクの状態参照(簡易版) */ + +/* タスク付属同期機能 */ +ER slp_tsk(void); /* タスクの起床待ち */ +ER tslp_tsk(TMO tmout); /* タスクの起床待ち(タイムアウトあり) */ +ER wup_tsk(ID tskid); /* タスクの起床 */ +#define iwup_tsk wup_tsk +ER_UINT can_wup(ID tskid); /* タスク起床要求のキャンセル */ +ER rel_wai(ID tskid); /* 待ち状態の強制解除 */ +#define irel_wai rel_wai +ER sus_tsk(ID tskid); /* 強制待ち状態への移行 */ +ER rsm_tsk(ID tskid); /* 強制待ち状態からの再開 */ +ER frsm_tsk(ID tskid); /* 強制待ち状態からの強制再開 */ +ER dly_tsk(RELTIM dlytim); /* 自タスクの遅延 */ + +/* タスク例外処理機能 */ +ER ras_tex(ID tskid, TEXPTN rasptn); /* タスク例外処理の要求 */ +ER dis_tex(void); /* タスク例外処理の禁止 */ +ER ena_tex(void); /* タスク例外処理の禁止 */ +BOOL sns_tex(void); /* タスク例外処理禁止状態の参照 */ + +/* %jp{セマフォ}%en{Semphores} */ +ER cre_sem(ID semid, const T_CSEM *pk_csem); /**< %jp{セマフォの生成}%en{Create Semaphore} */ +ER_ID acre_sem(const T_CSEM *pk_csem); /**< %jp{セマフォの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} */ +ER del_sem(ID semid); /**< %jp{セマフォの削除}%en{Delete Semaphore} */ +ER sig_sem(ID semid); /**< %jp{セマフォ資源の返却}%en{Release Semaphore Resource} */ +#define isig_sem sig_sem /**< %jp{セマフォ資源の返却(非タスクコンテキスト用)}%en{Release Semaphore Resource} */ +ER wai_sem(ID semid); /**< %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource} */ +ER pol_sem(ID semid); /**< %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)} */ +ER twai_sem(ID semid, TMO tmout); /**< %jp{セマフォ資源の獲得(タイムアウトあり)}%en{Acquire Semaphore Resource(with Timeout)} */ +ER ref_sem(ID semid, T_RSEM *pk_rsem); /**< %jp{セマフォの状態参照}%en{Reference Semaphore State} */ + +/* %jp{イベントフラグ}%en{Eventflags} */ +ER cre_flg(ID flgid, const T_CFLG *pk_cflg); /**< %jp{イベントフラグの生成}%en{Create Eventflag} */ +ER_ID acre_flg(const T_CFLG *pk_cflg); /**< %jp{イベントフラグの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)} */ +ER del_flg(ID flgid); /**< %jp{イベントフラグの削除}%en{Delete Eventflag} */ +ER set_flg(ID flgid, FLGPTN setptn); /**< %jp{イベントフラグのセット}%en{Set Eventflag} */ +#define iset_flg set_flg /**< %jp{イベントフラグのセット(非タスクコンテキスト用)}%en{Set Eventflag} */ +ER clr_flg(ID flgid, FLGPTN clrptn); /**< %jp{イベントフラグのクリア}%en{Clear Eventflag} */ +ER wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn); + /**< %jp{イベントフラグ待ち}%en{Wait for Eventflag} */ +ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn); + /**< %jp{イベントフラグ待ち(ポーリング)}%en{Wait for Eventflag(Polling)} */ +ER twai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout); + /**< %jp{イベントフラグ待ち(タイムアウトあり)}%en{Wait for Eventflag(with Timeout)} */ +ER ref_flg(ID flgid, T_RFLG *pk_rflg); /**< %jp{イベントフラグの状態参照}%en{Reference Eventflag State} */ + +/* %jp{メールボックス}%en{Mailboxes} */ +ER cre_mbx(ID semid, const T_CMBX *pk_cmbx); /**< %jp{メールボックスの生成} */ +ER_ID acre_mbx(const T_CMBX *pk_cmbx); /**< %jp{メールボックスの生成(ID番号自動割付け)} */ +ER del_mbx(ID semid); /**< %jp{メールボックスの削除} */ +ER snd_mbx(ID mbxid, T_MSG *pk_msg); /**< %jp{メールボックスへの送信} */ +ER rcv_mbx(ID mbxid, T_MSG **ppk_msg); /**< %jp{メールボックスからの受信} */ +ER prcv_mbx(ID mbxid, T_MSG **ppk_msg); /**< %jp{メールボックスからの受信(ポーリング)} */ +ER trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout); /**< %jp{メールボックスからの受信(タイムアウトあり)} */ +ER ref_mbx(ID mbxid, T_RMBX *pk_rmbx); /**< %jp{メールボックスの状態参照} */ + +/* %jp{固定長メモリプール} */ +ER cre_mpf(ID mpfid, const T_CMPF *pk_cmpf); /**< %jp{固定長メモリプールの生成} */ +ER_ID acre_mpf(const T_CMPF *pk_cmpf); /**< %jp{固定長メモリプールの生成(ID番号自動割付け)} */ +ER del_mpf(ID mpfid); /**< %jp{固定長メモリプールの削除} */ +ER get_mpf(ID mpfid, VP *p_blk); /**< %jp{固定長メモリブロックの獲得} */ +ER pget_mpf(ID mpfid, VP *p_blk); /**< %jp{固定長メモリブロックの獲得(ポーリング)} */ +ER tget_mpf(ID mpfid, VP *p_blk, TMO tmout); /**< %jp{固定長メモリブロックの獲得(タイムアウトあり)} */ +ER rel_mpf(ID mpfid, VP blk); /**< %jp{固定長メモリブロックの返却} */ +ER ref_mpf(ID mpfid, T_RMPF *pk_rmpf); /**< %jp{固定長メモリブロックの状態参照} */ + + +/* システム時間管理機能 */ +ER isig_tim(void); /**< %jp{タイムティックの供給}%en{Supply Time Tick} */ + +/* システム状態管理機能 */ +ER rot_rdq(PRI tskpri); /* タスク優先順位の回転 */ +ER get_tid(ID *p_tskid); /* 実行状態タスクIDの参照 */ +ER loc_cpu(void); /* CPUロック状態への移行 */ +ER unl_cpu(void); /* CPUロック状態の解除 */ +ER dis_dsp(void); /* ディスパッチの禁止 */ +ER ena_dsp(void); /* ディスパッチの許可 */ +BOOL sns_ctx(void); /* コンテキストの参照 */ +BOOL sns_loc(void); /* CPUロック状態の参照 */ +BOOL sns_dsp(void); /* ディスパッチ禁止状態の参照 */ +BOOL sns_dpn(void); /* ディスパッチ保留状態の参照 */ + + +ER def_inh(INHNO inhno, const T_DINH *pk_dinh); + +ER dis_int(INTNO intno); /* 割り込みの禁止 */ +ER ena_int(INTNO intno); /* 割り込みの許可 */ + +/* システム構成管理機能 */ +ER ref_ver(T_RVER *pk_rver); /* バージョン番号の参照 */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _KERNEL__kernel_h__ */ + + + +/* end of file */ diff --git a/kernel/include/object/flgobj.h b/kernel/include/object/flgobj.h new file mode 100755 index 0000000..f17b162 --- /dev/null +++ b/kernel/include/object/flgobj.h @@ -0,0 +1,269 @@ +/** + * Hyper Operating System V4 Advance + * + * @file flgobj.h + * @brief %jp{イベントフラグオジェクトのヘッダファイル}%en{Eventflag object heder file} + * + * @version $Id: flgobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__object__flgobj_h__ +#define _KERNEL__object__flgobj_h__ + + + +/* ------------------------------------------ */ +/* type definition */ +/* ------------------------------------------ */ + +/* %jp{フラグパターン用の型} */ +#if _KERNEL_FLGCB_BITFIELD /* %jp{FLGCBにビットフィールドを利用する場合 */ + +#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef signed int _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#define _KERNEL_FLGCB_TBITDEF_FLGPTN : _KERNEL_FLGCB_TBIT_FLGPTN + 1 /**< %jp{フラグパターンのビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef unsigned int _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#define _KERNEL_FLGCB_TBITDEF_FLGPTN : _KERNEL_FLGCB_TBIT_FLGPTN /**< %jp{フラグパターンのビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{FLGCBにビットフィールドを利用しない場合 */ + +#if _KERNEL_FLG_TBIT_FLGPTN <= 7 && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef _KERNEL_T_OPT_B _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#elif _KERNEL_FLG_TBIT_FLGPTN <= 8 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef _KERNEL_T_OPT_UB _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#elif _KERNEL_FLG_TBIT_FLGPTN <= 15 && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef _KERNEL_T_OPT_H _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#elif _KERNEL_FLG_TBIT_FLGPTN <= 16 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef _KERNEL_T_OPT_UH _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#elif _KERNEL_FLG_TBIT_FLGPTN <= 31 && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef _KERNEL_T_OPT_W _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#elif _KERNEL_FLG_TBIT_FLGPTN <= 32 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef _KERNEL_T_OPT_UW _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#elif _KERNEL_FLG_TBIT_FLGPTN <= 63 && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef _KERNEL_T_OPT_D _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_FLG_T_FLGPTN; /**< %jp{フラグパターンを演算操作するときの型} */ +typedef _KERNEL_T_OPT_UD _KERNEL_FLGCB_T_FLGPTN; /**< %jp{フラグパターンをFLGCBに格納するときの型} */ +#endif + +#define _KERNEL_FLGCB_TBITDEF_FLGPTN /**< %jp{フラグパターンのビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{イベントフラグ属性用の型(4bit必要)} */ +#if _KERNEL_FLGCB_BITFIELD /* %jp{FLGCBにビットフィールドを利用する場合 */ + +#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_FLG_T_FLGATR; /**< %jp{イベントフラグ属性を演算操作するときの型} */ +typedef signed int _KERNEL_FLGCB_T_FLGATR; /**< %jp{イベントフラグ属性をFLGCBに格納するときの型} */ +#define _KERNEL_FLGCB_TBITDEF_FLGATR : 4 + 1 /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_FLG_T_FLGATR; /**< %jp{イベントフラグ属性を演算操作するときの型} */ +typedef unsigned int _KERNEL_FLGCB_T_FLGATR; /**< %jp{イベントフラグ属性をFLGCBに格納するときの型} */ +#define _KERNEL_FLGCB_TBITDEF_FLGATR : 4 /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{FLGCBにビットフィールドを利用しない場合 */ + +#if _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_FLG_T_FLGATR; /**< %jp{イベントフラグ属性を演算操作するときの型} */ +typedef _KERNEL_T_OPT_B _KERNEL_FLGCB_T_FLGATR; /**< %jp{イベントフラグ属性をFLGCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UB _KERNEL_FLG_T_FLGATR; /**< %jp{イベントフラグ属性を演算操作するときの型} */ +typedef _KERNEL_T_OPT_UB _KERNEL_FLGCB_T_FLGATR; /**< %jp{イベントフラグ属性をFLGCBに格納するときの型} */ +#endif + +#define _KERNEL_FLGCB_TBITDEF_FLGATR /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */ + +#endif + + + +/* ------------------------------------------ */ +/* Eventflag control block */ +/* ------------------------------------------ */ + +#if _KERNEL_FLGCB_ROM + +/** %jp{イベントフラグコントロールブロック(ROM部)} */ +typedef struct _kernel_t_flgcb_rom +{ +#if _KERNEL_FLGCB_FLGATR + _KERNEL_FLGCB_T_FLGATR flgatr _KERNEL_FLGCB_TBITDEF_FLGPTN; /**< %jp{イベントフラグ属性} */ +#endif +} _KERNEL_FLGCB_T_ROM; + + +/** %jp{イベントフラグコントロールブロック(RAM部)} */ +typedef struct _kernel_t_flgcb +{ +#if _KERNEL_FLGCB_QUE + _KERNEL_T_QUE que; /**< %jp{タスクの待ち行列} */ +#endif + +#if _KERNEL_FLGCB_FLGPTN + _KERNEL_FLGCB_T_FLGPTN flgptn _KERNEL_FLGCB_TBITDEF_FLGPTN; /**< %jp{イベントフラグのビットパターン} */ +#endif +} _KERNEL_T_FLGCB; + + +#else + + +/** %jp{イベントフラグコントロールブロック} */ +typedef struct _kernel_t_flgcb +{ +#if _KERNEL_FLGCB_QUE + _KERNEL_T_QUE que; /**< %jp{タスクの待ち行列} */ +#endif + +#if _KERNEL_FLGCB_FLGPTN + _KERNEL_FLGCB_T_FLGPTN flgptn _KERNEL_FLGCB_TBITDEF_FLGPTN; /**< %jp{イベントフラグのビットパターン} */ +#endif + +#if _KERNEL_FLGCB_FLGATR + _KERNEL_FLGCB_T_FLGATR flgatr _KERNEL_FLGCB_TBITDEF_FLGPTN; /**< %jp{イベントフラグ属性} */ +#endif +} _KERNEL_T_FLGCB; + +#endif + + +/** %jp{待ちフラグ情報構造体} */ +typedef struct _kernel_t_flginf +{ + MODE wfmode; /**< %jp{待ちモード} */ + FLGPTN waiptn; /**< %jp{待ちビットパターン(解除時パターンと兼用)} */ +} _KERNEL_T_FLGINF; + + +/* Eventflag handle */ +typedef _KERNEL_T_FLGCB* _KERNEL_T_FLGHDL; + + + +#if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_BLKARRAY /* block array */ + +extern const ID _kernel_max_flgid; /** %jp{イベントフラグコントロールブロック個数} */ +extern _KERNEL_T_FLGCB _kernel_flgcb_tbl[]; /** %jp{イベントフラグコントロールブロックテーブル} */ + +#define _KERNEL_FLG_ID2FLGCB(flgid) (&_kernel_flgcb_tbl[(flgid) - _KERNEL_TMIN_FLG_ID]) +#define _KERNEL_FLG_ID2FLGHDL(flgid) _KERNEL_FLG_ID2FLGCB(flgid) + + +/* %jp{オブジェクトの存在チェック} */ +#define _KERNEL_FLG_CHECK_EXS(flgid) (_KERNEL_FLG_ID2FLGCB(flgid)->flgatr & _KERNEL_FLG_TA_CRE) +#define _KERNEL_FLG_TA_CRE 0x08 + + +#elif _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY /* pointer array */ + +extern const ID _kernel_max_flgid; /** %jp{イベントフラグコントロールブロック個数} */ +extern _KERNEL_T_FLGCB *_kernel_flgcb_tbl[]; /** %jp{イベントフラグコントロールブロックテーブル} */ + +#define _KERNEL_FLG_ID2FLGCB(flgid) (_kernel_flgcb_tbl[(flgid) - _KERNEL_TMIN_FLG_ID]) +#define _KERNEL_FLG_ID2FLGHDL(flgid) _KERNEL_FLG_ID2FLGCB(flgid) + /** %jp{イベントフラグIDからFLGCB アドレスを取得} */ + +/* %jp{オブジェクトの存在チェック} */ +#define _KERNEL_FLG_CHECK_EXS(flgid) (_KERNEL_FLG_ID2FLGCB(flgid) != NULL) +#define _KERNEL_FLG_TA_CRE 0 + +#endif + + +/* %jp{ID範囲定義} */ +#define _KERNEL_TMIN_FLG_ID 1 +#define _KERNEL_TMAX_FLG_ID (_kernel_max_flgid) + + +/* %jp{ID範囲チェック} */ +#define _KERNEL_FLG_CHECK_FLGID(flgid) ((flgid) >= _KERNEL_TMIN_FLG_ID && (flgid) <= _KERNEL_TMAX_FLG_ID) + + + + +/* ------------------------------------------ */ +/* Accessor for FLGCB */ +/* ------------------------------------------ */ + +/* que */ +#define _KERNEL_FLG_GET_QUE(flghdl) (&(flghdl)->que) + +/* flgptn */ +#if _KERNEL_FLGCB_FLGPTN +#define _KERNEL_FLG_SET_FLGPTN(flghdl, x) do { (flghdl)->flgptn = (_KERNEL_FLGCB_T_FLGPTN)(x); } while (0) +#define _KERNEL_FLG_GET_FLGPTN(flghdl) ((_KERNEL_FLG_T_FLGPTN)(flghdl)->flgptn) +#else +#define _KERNEL_FLG_SET_FLGPTN(flghdl, x) do { } while (0) +#define _KERNEL_FLG_GET_FLGPTN(flghdl) (0) +#endif + +/* flgatr */ +#if _KERNEL_FLGCB_FLGATR +#define _KERNEL_FLG_SET_FLGATR(flghdl, x) do { (flghdl)->flgatr = (_KERNEL_FLGCB_T_FLGATR)(x); } while (0) +#define _KERNEL_FLG_GET_FLGATR(flghdl) ((_KERNEL_FLG_T_FLGATR)(flghdl)->flgatr) +#else +#define _KERNEL_FLG_SET_FLGATR(flghdl, x) do { } while (0) +#if _KERNEL_SPT_FLG_TA_TFIFO +#define _KERNEL_FLG_GET_FLGATR(flghdl) (TA_TFIFO) +#else +#define _KERNEL_FLG_GET_FLGATR(flghdl) (TA_TPRI) +#endif +#endif + + +/* %jp{キュー接続} */ +#if _KERNEL_SPT_FLG_TA_TFIFO && _KERNEL_SPT_FLG_TA_TPRI /* %jp{TA_TFIFO と TA_TPRI の混在 } */ +#define _KERNEL_FLG_ADD_QUE(flghdl, tskhdl) _kernel_add_que(_KERNEL_FLG_GET_QUE(flghdl), tskhdl, _KERNEL_FLG_GET_FLGATR(flghdl)) +#elif _KERNEL_SPT_FLG_TA_TFIFO && !_KERNEL_SPT_FLG_TA_TPRI /* %jp{TA_TFIFO のみ利用 } */ +#define _KERNEL_FLG_ADD_QUE(flghdl, tskhdl) _kernel_adf_que(_KERNEL_FLG_GET_QUE(flghdl), tskhdl) +#elif !_KERNEL_SPT_FLG_TA_TFIFO && _KERNEL_SPT_FLG_TA_TPRI /* %jp{TA_TPRI のみ利用 } */ +#define _KERNEL_FLG_ADD_QUE(flghdl, tskhdl) _kernel_adp_que(_KERNEL_FLG_GET_QUE(flghdl), tskhdl) +#else +#error error:_KERNEL_SPT_FLG_TA_TPRI and _KERNEL_SPT_FLG_TA_TFIFO +#endif + +/* %jp{タイムアウトキュー解除} */ +#if _KERNEL_SPT_TWAI_FLG /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */ +#define _KERNEL_FLG_RMV_TOQ(tskhdl) _KERNEL_RMV_TOQ(tskhdl) +#else +#define _KERNEL_FLG_RMV_TOQ(tskhdl) do { } while (0) +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + +ER _kernel_cre_flg(ID flgid, const T_CFLG *pk_cflg); +BOOL _kernel_chk_flg(_KERNEL_T_FLGHDL flghdl, _KERNEL_T_FLGINF *pk_flginf); + +#ifdef __cplusplus +} +#endif + + + +#endif /* _KERNEL__object__flgobj_h__ */ + + + +/* end of file */ diff --git a/kernel/include/object/inhobj.h b/kernel/include/object/inhobj.h new file mode 100755 index 0000000..8ba7a12 --- /dev/null +++ b/kernel/include/object/inhobj.h @@ -0,0 +1,58 @@ +/** + * Hyper Operating System V4 Advance + * + * @file inh.h + * @brief %jp{割り込み制御のヘッダファイル}%en{interrupt control heder file} + * + * @version $Id: inhobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__object__inhobj_h__ +#define _KERNEL__object__inhobj_h__ + + + +/* %jp{割込みハンドラ情報} */ +typedef struct _kernel_t_inhinf +{ + FP inthdr; +} _KERNEL_T_INHINF; + + +/** %jp{割込みハンドラ情報テーブル} */ +#if _KERNEL_SPT_DEF_INH +extern _KERNEL_T_INHINF _kernel_inh_tbl[KERNEL_TMAX_INH_INHNO - KERNEL_TMIN_INH_INHNO + 1]; +#else +extern const _KERNEL_T_INHINF _kernel_inh_tbl[KERNEL_TMAX_INH_INHNO - KERNEL_TMIN_INH_INHNO + 1]; +#endif + +#define _KERNEL_INT_GET_INHINF(inhno) (&_kernel_inh_tbl[inhno - KERNEL_TMIN_INH_INHNO]) + +#define _KERNEL_INH_GET_INTHDR(inhno) (_KERNEL_INT_GET_INHINF(inhno)->inthdr); +#define _KERNEL_INH_SET_INTHDR(inhno, x) do { _KERNEL_INT_GET_INHINF(inhno)->inthdr = (x); } while(0) + + +#ifdef __cplusplus +extern "C" { +#endif + +void _kernel_sta_inh(void); +void _kernel_exe_inh(INHNO inhno); +void _kernel_end_inh(void); + +#ifdef __cplusplus +} +#endif + + + +#endif /* _KERNEL__core__inh_h__ */ + + + +/* end of file */ diff --git a/kernel/include/object/isrobj.h b/kernel/include/object/isrobj.h new file mode 100755 index 0000000..0355042 --- /dev/null +++ b/kernel/include/object/isrobj.h @@ -0,0 +1,102 @@ +/** + * Hyper Operating System V4 Advance + * + * @file int.h + * @brief %jp{割り込み制御のヘッダファイル}%en{interrupt control heder file} + * + * @version $Id: isrobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__object__isrobj_h__ +#define _KERNEL__object__isrobj_h__ + + +typedef struct _kernel_t_isrcb* _KERNEL_T_ISRHDL; + + +/* %jp{割込み情報} */ +typedef struct _kernel_t_intinf +{ + _KERNEL_T_ISRHDL head; +} _KERNEL_T_INTINF; + + +/** %jp{割込み情報テーブル} */ +#if _KERNEL_SPT_CRE_ISR || _KERNEL_SPT_ACRE_ISR +extern _KERNEL_T_INTINF _kernel_int_tbl[_KERNEL_IRCATR_TMAX_INHNO - _KERNEL_IRCATR_TMIN_INHNO + 1]; +#else +extern const _KERNEL_T_INTINF _kernel_int_tbl[_KERNEL_IRCATR_TMAX_INHNO - _KERNEL_IRCATR_TMIN_INHNO + 1]; +#endif + +#define _KERNEL_INT_GET_INTINF(intno) (&_kernel_int_tbl[intno - _KERNEL_IRCATR_TMIN_INHNO]) + +#define _KERNEL_INT_GET_HEAD(intno) (_KERNEL_INT_GET_INTINF(intno)->head) +#define _KERNEL_INT_SET_HEAD(intno, x) do { _KERNEL_INT_GET_INTINF(intno)->head = (x); } while (0) + + + +/* %jp{割込みサービスルーチン制御ブロック} */ +typedef struct _kernel_t_isrcb +{ + VP_INT exinf; /**< %jp{割込みサービスルーチンの拡張情報} */ + FP isr; /**< %jp{割込みサービスルーチンの起動番地} */ + _KERNEL_T_ISRHDL next; +} _KERNEL_T_ISRCB; + + +/* 割り込みサービスルーチン */ +extern _KERNEL_T_ISRCB *_kernel_isrcb_tbl[]; /* 割込みサービスルーチンコントロールブロックテーブル */ +extern const ID _kernel_max_isrid; /* 割込みサービスルーチンコントロールブロックの個数 */ + + +#define _KERNEL_TMIN_ISR_ISRID 1 +#define _KERNEL_TMAX_ISR_ISRID (_kernel_max_isrid) + + +#define _KERNEL_ISR_ID2ISRCB(isrid) (_kernel_isrcb_tbl[(isrid) - _KERNEL_TMIN_ISR_ISRID]) +#define _KERNEL_ISR_ID2ISRHDL(isrid) (_kernel_isrcb_tbl[(isrid) - _KERNEL_TMIN_ISR_ISRID]) + +#define _KERNEL_ISR_ISRPTR2ISRCB(isrhdl) (isrhdl) +#define _KERNEL_ISR_CHECK_EXS(isrid) (_kernel_isrcb_tbl[(isrid) - _KERNEL_TMIN_ISR_ISRID] != NULL) + + +#define _KERNEL_ISR_GET_EXINF(isrhdl) (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->exinf) +#define _KERNEL_ISR_SET_EXINF(isrhdl, x) do { (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->exinf) = (x); } while (0) + +#define _KERNEL_ISR_GET_ISR(isrhdl) (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->isr) +#define _KERNEL_ISR_SET_ISR(isrhdl, x) do { (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->isr) = (x); } while (0) + +#define _KERNEL_ISR_GET_NEXT(isrhdl) (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->next) +#define _KERNEL_ISR_SET_NEXT(isrhdl, x) do { (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->next) = (x); } while (0) + + + + +/* ------------------------------------------ */ +/* 関数宣言 */ +/* ------------------------------------------ */ + + +#ifdef __cplusplus +extern "C" { +#endif + +ER _kernel_cre_isr(ID isrid, const T_CISR *pk_cisr); +void _kernel_exe_isr(INTNO intno); + +#ifdef __cplusplus +} +#endif + + + +#endif /* _KERNEL__object__isrobj_h__ */ + + + +/* end of file */ diff --git a/kernel/include/object/mbxobj.h b/kernel/include/object/mbxobj.h new file mode 100755 index 0000000..1715465 --- /dev/null +++ b/kernel/include/object/mbxobj.h @@ -0,0 +1,240 @@ +/** + * Hyper Operating System V4 Advance + * + * @file mbxobj.h + * @brief %jp{メールボックスオジェクトのヘッダファイル}%en{Mailbox object heder file} + * + * @version $Id: mbxobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__object__mbxobj_h__ +#define _KERNEL__object__mbxobj_h__ + + + +/* ------------------------------------------ */ +/* type definition */ +/* ------------------------------------------ */ + +/* %jp{メールボックス属性用の型(4bit必要)} */ +#if _KERNEL_MBXCB_BITFIELD /* %jp{MBXCBにビットフィールドを利用する場合 */ + +#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_MBX_T_MBXATR; /**< %jp{メールボックス属性を演算操作するときの型} */ +typedef signed int _KERNEL_MBXCB_T_MBXATR; /**< %jp{メールボックス属性をMBXCBに格納するときの型} */ +#define _KERNEL_TBITDEF_MBXCB_MBXATR : 3 + 1 /**< %jp{メールボックス属性のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_MBX_T_MBXATR; /**< %jp{メールボックス属性を演算操作するときの型} */ +typedef unsigned int _KERNEL_MBXCB_T_MBXATR; /**< %jp{メールボックス属性をMBXCBに格納するときの型} */ +#define _KERNEL_TBITDEF_MBXCB_MBXATR : 3 /**< %jp{メールボックス属性のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{MBXCBにビットフィールドを利用しない場合 */ + +#if _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_MBX_T_MBXATR; /**< %jp{メールボックス属性を演算操作するときの型} */ +typedef _KERNEL_T_OPT_B _KERNEL_MBXCB_T_MBXATR; /**< %jp{メールボックス属性をMBXCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UB _KERNEL_MBX_T_MBXATR; /**< %jp{メールボックス属性を演算操作するときの型} */ +typedef _KERNEL_T_OPT_UB _KERNEL_MBXCB_T_MBXATR; /**< %jp{メールボックス属性をMBXCBに格納するときの型} */ +#endif + +#define _KERNEL_MBXCB_TBITDEF_MBXATR /**< %jp{メールボックス属性のビットフィールド宣言時の幅} */ + +#endif + + +typedef PRI _KERNEL_MBX_T_MPRI; +typedef PRI _KERNEL_MBXCB_T_MPRI; +#define _KERNEL_MBXCB_TBITDEF_MPRI + + + +/* ------------------------------------------ */ +/* Eventflag control block */ +/* ------------------------------------------ */ + +#if _KERNEL_MBXCB_ROM + +/** %jp{メールボックスコントロールブロック(ROM部)} */ +typedef struct _kernel_t_mbxcb_rom +{ +#if _KERNEL_MBXCB_MBXATR + _KERNEL_MBXCB_T_MBXATR mbxatr _KERNEL_TBITDEF_MBXCB_MBXPTN; /**< %jp{メールボックス属性} */ +#endif + +#if _KERNEL_MBXCB_MAXMPRI + _KERNEL_MBXCB_T_MAXMPRI maxmpri _KERNEL_TBITDEF_MBXCB_MAXMPRI; /**< %jp{送信されるメッセージの優先度の最大値} */ +#endif + +} _KERNEL_MBXCB_T_ROM; + + +/** %jp{メールボックスコントロールブロック(RAM部)} */ +typedef struct _kernel_t_mbxcb +{ +#if _KERNEL_MBXCB_MSGQUE + VP msgque; /**< %jp{メッセージキュー} */ +#endif + +#if _KERNEL_MBXCB_QUE + _KERNEL_T_QUE que; /**< %jp{タスクの待ち行列} */ +#endif +} _KERNEL_T_MBXCB; + + +#else + + +/** %jp{メールボックスコントロールブロック} */ +typedef struct _kernel_t_mbxcb +{ +#if _KERNEL_MBXCB_MSGQUE + VP msgque; /**< %jp{メッセージキュー} */ +#endif + +#if _KERNEL_MBXCB_QUE + _KERNEL_T_QUE que; /**< %jp{タスクの待ち行列} */ +#endif + +#if _KERNEL_MBXCB_MBXATR + _KERNEL_MBXCB_T_MBXATR mbxatr _KERNEL_MBXCB_TBITDEF_MBXATR; /**< %jp{メールボックス属性} */ +#endif + +#if _KERNEL_MBXCB_MAXMPRI + _KERNEL_MBXCB_T_MPRI maxmpri _KERNEL_MBXCB_TBITDEF_MPRI; /**< %jp{送信されるメッセージの優先度の最大値} */ +#endif +} _KERNEL_T_MBXCB; + +#endif + + + +/* Eventflag handle */ +typedef _KERNEL_T_MBXCB* _KERNEL_T_MBXHDL; + + + +#if _KERNEL_MBXCB_ALGORITHM == _KERNEL_MBXCB_ALG_BLKARRAY /* block array */ + +extern const ID _kernel_max_mbxid; /** %jp{メールボックスコントロールブロック個数} */ +extern _KERNEL_T_MBXCB _kernel_mbxcb_tbl[]; /** %jp{メールボックスコントロールブロックテーブル} */ + +#define _KERNEL_MBX_ID2MBXCB(mbxid) (&_kernel_mbxcb_tbl[(mbxid) - _KERNEL_TMIN_MBX_ID]) +#define _KERNEL_MBX_ID2MBXHDL(mbxid) _KERNEL_MBX_ID2MBXCB(mbxid) + + +/* %jp{オブジェクトの存在チェック} */ +#define _KERNEL_MBX_CHECK_EXS(mbxid) (_KERNEL_MBX_ID2MBXCB(mbxid)->mbxatr & _KERNEL_MBX_TA_CRE) +#define _KERNEL_MBX_TA_CRE 0x08 + + +#elif _KERNEL_MBXCB_ALGORITHM == _KERNEL_MBXCB_ALG_PTRARRAY /* pointer array */ + +extern const ID _kernel_max_mbxid; /** %jp{メールボックスコントロールブロック個数} */ +extern _KERNEL_T_MBXCB *_kernel_mbxcb_tbl[]; /** %jp{メールボックスコントロールブロックテーブル} */ + +#define _KERNEL_MBX_ID2MBXCB(mbxid) (_kernel_mbxcb_tbl[(mbxid) - _KERNEL_TMIN_MBX_ID]) +#define _KERNEL_MBX_ID2MBXHDL(mbxid) _KERNEL_MBX_ID2MBXCB(mbxid) + /** %jp{セマフォIDからMBXCB アドレスを取得} */ + +/* %jp{オブジェクトの存在チェック} */ +#define _KERNEL_MBX_CHECK_EXS(mbxid) (_KERNEL_MBX_ID2MBXCB(mbxid) != NULL) +#define _KERNEL_MBX_TA_CRE 0 + +#endif + + +/* %jp{ID範囲定義} */ +#define _KERNEL_TMIN_MBX_ID 1 +#define _KERNEL_TMAX_MBX_ID (_kernel_max_mbxid) + + +/* %jp{ID範囲チェック} */ +#define _KERNEL_MBX_CHECK_MBXID(mbxid) ((mbxid) >= _KERNEL_TMIN_MBX_ID && (mbxid) <= _KERNEL_TMAX_MBX_ID) + + + + +/* ------------------------------------------ */ +/* Accessor for MBXCB */ +/* ------------------------------------------ */ + +/* que */ +#define _KERNEL_MBX_GET_QUE(mbxhdl) (&(mbxhdl)->que) + +/* mbxptn */ +#if _KERNEL_MBXCB_MSGQUE +#define _KERNEL_MBX_SET_MSGQUE(mbxhdl, x) do { (mbxhdl)->msgque = (VP)(x); } while (0) +#define _KERNEL_MBX_GET_MSGQUE(mbxhdl) ((VP)&(mbxhdl)->msgque) +#else +#define _KERNEL_MBX_SET_MSGQUE(mbxhdl, x) do { } while (0) +#define _KERNEL_MBX_GET_MSGQUE(mbxhdl) (0) +#endif + +/* mbxatr */ +#if _KERNEL_MBXCB_MBXATR +#define _KERNEL_MBX_SET_MBXATR(mbxhdl, x) do { (mbxhdl)->mbxatr = (_KERNEL_MBXCB_T_MBXATR)(x); } while (0) +#define _KERNEL_MBX_GET_MBXATR(mbxhdl) ((_KERNEL_MBX_T_MBXATR)(mbxhdl)->mbxatr) +#else +#define _KERNEL_MBX_SET_MBXATR(mbxhdl, x) do { } while (0) +#if _KERNEL_SPT_MBX_TA_TFIFO +#define _KERNEL_MBX_GET_MBXATR(mbxhdl) (TA_TFIFO) +#else +#define _KERNEL_MBX_GET_MBXATR(mbxhdl) (TA_TPRI) +#endif +#endif + +#if _KERNEL_MBXCB_MAXMPRI +#define _KERNEL_MBX_SET_MAXMPRI(mbxhdl, x) do { (mbxhdl)->maxmpri = (_KERNEL_MBXCB_T_MPRI)(x); } while (0) +#define _KERNEL_MBX_GET_MAXMPRI(mbxhdl) ((_KERNEL_MBX_T_MPRI)(mbxhdl)->maxmpri) +#else +#define _KERNEL_MBX_SET_MAXMPRI(mbxhdl, x) do { } while (0) +#define _KERNEL_MBX_GET_MAXMPRI(mbxhdl) (1) +#endif + + + +/* %jp{キュー接続} */ +#if _KERNEL_SPT_MBX_TA_TFIFO && _KERNEL_SPT_MBX_TA_TPRI /* %jp{TA_TFIFO と TA_TPRI の混在 } */ +#define _KERNEL_MBX_ADD_QUE(mbxhdl, tskhdl) _kernel_add_que(_KERNEL_MBX_GET_QUE(mbxhdl), tskhdl, _KERNEL_MBX_GET_MBXATR(mbxhdl)) +#elif _KERNEL_SPT_MBX_TA_TFIFO && !_KERNEL_SPT_MBX_TA_TPRI /* %jp{TA_TFIFO のみ利用 } */ +#define _KERNEL_MBX_ADD_QUE(mbxhdl, tskhdl) _kernel_adf_que(_KERNEL_MBX_GET_QUE(mbxhdl), tskhdl) +#elif !_KERNEL_SPT_MBX_TA_TFIFO && _KERNEL_SPT_MBX_TA_TPRI /* %jp{TA_TPRI のみ利用 } */ +#define _KERNEL_MBX_ADD_QUE(mbxhdl, tskhdl) _kernel_adp_que(_KERNEL_MBX_GET_QUE(mbxhdl), tskhdl) +#else +#error error:_KERNEL_SPT_MBX_TA_TPRI and _KERNEL_SPT_MBX_TA_TFIFO +#endif + +/* %jp{タイムアウトキュー解除} */ +#if _KERNEL_SPT_TRCV_MBX /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */ +#define _KERNEL_MBX_RMV_TOQ(tskhdl) _KERNEL_RMV_TOQ(tskhdl) +#else +#define _KERNEL_MBX_RMV_TOQ(tskhdl) do { } while (0) +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + +ER _kernel_cre_mbx(ID mbxid, const T_CMBX *pk_cmbx); +void _kernel_add_msg(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg); +T_MSG *_kernel_rmv_msg(_KERNEL_T_MBXHDL mbxhdl); + +#ifdef __cplusplus +} +#endif + + + +#endif /* _KERNEL__object__mbxobj_h__ */ + + + +/* end of file */ diff --git a/kernel/include/object/mpfobj.h b/kernel/include/object/mpfobj.h new file mode 100755 index 0000000..d7337e3 --- /dev/null +++ b/kernel/include/object/mpfobj.h @@ -0,0 +1,415 @@ +/** + * Hyper Operating System V4 Advance + * + * @file mpfobj.h + * @brief %en{Semaphore object heder file}%jp{固定長メモリプールオジェクトのヘッダファイル} + * + * @version $Id: mpfobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__object__mpfobj_h__ +#define _KERNEL__object__mpfobj_h__ + + + +/* ------------------------------------------ */ +/* type definition */ +/* ------------------------------------------ */ + +/* %jp{固定長メモリプールブロック数の型} */ +#if _KERNEL_MPFCB_BITFIELD /* %jp{MPFCBにビットフィールドを利用する場合 */ + +#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef signed int _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#define _KERNEL_MPFCB_TBITDEF_BLKCNT : _KERNEL_MPF_TBIT_BLKCNT + 1 /**< %jp{固定長メモリプールブロック数のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef unsigned int _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#define _KERNEL_MPFCB_TBITDEF_BLKCNT : _KERNEL_MPF_TBIT_BLKCNT /**< %jp{固定長メモリプールブロック数のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{MPFCBにビットフィールドを利用しない場合 */ + +#if (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_B) && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef _KERNEL_T_OPT_B _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef _KERNEL_T_OPT_UB _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_H) && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef _KERNEL_T_OPT_H _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef _KERNEL_T_OPT_UH _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_W) && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef _KERNEL_T_OPT_W _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef _KERNEL_T_OPT_UW _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_D) && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef _KERNEL_T_OPT_D _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_MPF_T_BLKCNT; /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */ +typedef _KERNEL_T_OPT_UD _KERNEL_MPFCB_T_BLKCNT; /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */ +#endif + +#define _KERNEL_MPFCB_TBITDEF_BLKCNT /**< %jp{固定長メモリプールブロック数のビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{固定長メモリプールブロックサイズの型} */ +#if _KERNEL_MPFCB_BITFIELD /* %jp{MPFCBにビットフィールドを利用する場合 */ + +#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef signed int _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#define _KERNEL_MPFCB_TBITDEF_BLKSZ : _KERNEL_MPF_TBIT_BLKSZ + 1 /**< %jp{固定長メモリプールブロックサイズのビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef unsigned int _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#define _KERNEL_MPFCB_TBITDEF_BLKSZ : _KERNEL_MPF_TBIT_BLKSZ /**< %jp{固定長メモリプールブロックサイズのビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{MPFCBにビットフィールドを利用しない場合 */ + +#if (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_B) && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef _KERNEL_T_OPT_B _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_UB) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef _KERNEL_T_OPT_UB _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_H) && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef _KERNEL_T_OPT_H _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_UH) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef _KERNEL_T_OPT_UH _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_W) && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef _KERNEL_T_OPT_W _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_UW) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef _KERNEL_T_OPT_UW _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_D) && _KERNEL_PROCATR_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef _KERNEL_T_OPT_D _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_MPF_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */ +typedef _KERNEL_T_OPT_UD _KERNEL_MPFCB_T_BLKSZ; /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */ +#endif + +#define _KERNEL_MPFCB_TBITDEF_BLKSZ /**< %jp{固定長メモリプールブロックサイズのビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{固定長メモリプール属性用の型} */ +#if _KERNEL_MPFCB_BITFIELD /* %jp{MPFCBにビットフィールドを利用する場合 */ + +/* %jp{TA_TFIFO と TA_TPRI の判定に 1bit 必要} */ +typedef unsigned int _KERNEL_MPF_T_MPFATR; +typedef unsigned int _KERNEL_MPFCB_T_MPFATR; +#define _KERNEL_MPFCB_TBITDEF_MPFATR : 1 + +#else /* %jp{MPFCBにビットフィールドを利用しない場合 */ + +typedef _KERNEL_T_FAST_UB _KERNEL_MPF_T_MPFATR; +typedef _KERNEL_T_OPT_UB _KERNEL_MPFCB_T_MPFATR; +#define _KERNEL_MPFCB_TBITDEF_MPFATR + +#endif + +typedef VP _KERNEL_MPF_T_MPF; +typedef VP _KERNEL_MPFCB_T_MPF; +#define _KERNEL_MPFCB_TBITDEF_MPF + + +/* %jp{メモリブロックのハンドル} */ +#if _KERNEL_MPF_ALGORITHM == _KERNEL_MPF_ALG_CHAIN_PTR /* %jp{ポインタ管理} */ + +typedef VP _KERNEL_MPF_T_BLKHDL; +typedef VP _KERNEL_MPFCB_T_BLKHDL; +#define _KERNEL_MPFCB_TBITDEF_BLKHDL +#define _KERNEL_MPF_BLKHDL_NULL NULL +#define _KERNEL_MPF_BLKHDL2PTR(mpfhdl, blkhdl) (blkhdl) +#define _KERNEL_MPF_PTR2BLKHDL(mpfhdl, blkptr) (blkptr) + +#elif _KERNEL_MPF_ALGORITHM == _KERNEL_MPF_ALG_CHAIN_NUM /* %jp{ブロック番号管理} */ + +typedef _KERNEL_MPF_T_BLKCNT _KERNEL_MPF_T_BLKHDL; +typedef _KERNEL_MPFCB_T_BLKCNT _KERNEL_MPFCB_T_BLKHDL; +#define _KERNEL_MPFCB_TBITDEF_BLKHDL _KERNEL_MPFCB_TBITDEF_BLKCNT +#define _KERNEL_MPF_BLKHDL_NULL 0 +#define _KERNEL_MPF_BLKHDL2PTR(mpfhdl, blkhdl) ((VP)((VB *)_KERNEL_MPF_GET_MPF(mpfhdl) + ((SIZE)((blkhdl) - 1) * (SIZE)_KERNEL_MPF_GET_BLKSZ(mpfhdl)))) +#define _KERNEL_MPF_PTR2BLKHDL(mpfhdl, blkptr) (((VB *)(blkptr) - (VB *)_KERNEL_MPF_GET_MPF(mpfhdl)) / _KERNEL_MPF_GET_BLKSZ(mpfhdl) + 1) + +#endif + + +/* ------------------------------------------ */ +/* Control block */ +/* ------------------------------------------ */ + +#if _KERNEL_MPFCB_ROM + + +/** %jp{固定長メモリプールコントロールブロック(ROM部)} */ +typedef struct _kernel_t_mpfcb_rom +{ +#if _KERNEL_MPFCB_MPFATR + _KERNEL_MPFCB_T_MPFATR mpfatr _KERNEL_MPFCB_TBITDEF_MPFATR; /**< %jp{固定長メモリプール属性} */ +#endif + +#if _KERNEL_MPFCB_BLKCNT + _KERNEL_MPFCB_T_BLKCNT blkcnt _KERNEL_MPFCB_TBITDEF_BLKCNT; /**< %jp{獲得できるメモリブロック数(個数)} */ +#endif + +#if _KERNEL_MPFCB_BLKSZ + _KERNEL_MPFCB_T_BLKCNT blksz _KERNEL_MPFCB_TBITDEF_BLKSZ; /**< %jp{メモリブロックのサイズ(バイト数)} */ +#endif + +#if _KERNEL_MPFCB_MPF + _KERNEL_MPFCB_T_MPF mpf _KERNEL_MPFCB_TBITDEF_MPF; /**< %jp{固定長メモリプール領域の先頭番地} */ +#endif +} _KERNEL_MPFCB_T_ROM; + +/** %jp{固定長メモリプールコントロールブロック(RAM部)} */ +typedef struct _kernel_t_mpfcb +{ +#if _KERNEL_MPFCB_QUE + _KERNEL_T_QUE que; /**< %jp{固定長メモリプール待ちタスクキュー} */ +#endif + +#if _KERNEL_MPFCB_FREBLK + _KERNEL_MPFCB_T_BLKHDL freblk _KERNEL_MPFCB_TBITDEF_BLKHDL; /**< %jp{最初のメモリプールの空きメモリブロック位置} */ +#endif + +#if _KERNEL_MPFCB_FBLKCNT + _KERNEL_MPFCB_T_BLKCNT fblkcnt _KERNEL_MPFCB_TBITDEF_BLKCNT; /**< %jp{固定長メモリプールの空きメモリブロック数(個数)} */ +#endif + +#if _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_PTRARRAY + _KERNEL_MPFCB_T_ROM *mpfcb_rom; /**< %jp{固定長メモリプールコントロールブロックROM部へのポインタ} */ +#endif +} _KERNEL_T_MPFCB; + + +#else + + +/** %jp{固定長メモリプールコントロールブロック} */ +typedef struct _kernel_t_mpfcb +{ +#if _KERNEL_MPFCB_QUE + _KERNEL_T_QUE que; /**< %jp{固定長メモリプール待ちタスクキュー} */ +#endif + +#if _KERNEL_MPFCB_FREBLK + _KERNEL_MPFCB_T_BLKHDL freblk _KERNEL_MPFCB_TBITDEF_BLKHDL; /**< %jp{最初のメモリプールの空きメモリブロック位置} */ +#endif + +#if _KERNEL_MPFCB_FBLKCNT + _KERNEL_MPFCB_T_BLKCNT fblkcnt _KERNEL_MPFCB_TBITDEF_BLKCNT; /**< %jp{固定長メモリプールの空きメモリブロック数(個数)} */ +#endif + +#if _KERNEL_MPFCB_MPFATR + _KERNEL_MPFCB_T_MPFATR mpfatr _KERNEL_MPFCB_TBITDEF_MPFATR; /**< %jp{固定長メモリプール属性} */ +#endif + +#if _KERNEL_MPFCB_BLKCNT + _KERNEL_MPFCB_T_BLKCNT blkcnt _KERNEL_MPFCB_TBITDEF_BLKCNT; /**< %jp{獲得できるメモリブロック数(個数)} */ +#endif + +#if _KERNEL_MPFCB_BLKSZ + _KERNEL_MPFCB_T_BLKSZ blksz _KERNEL_MPFCB_TBITDEF_BLKSZ; /**< %jp{メモリブロックのサイズ(バイト数)} */ +#endif + +#if _KERNEL_MPFCB_MPF + _KERNEL_MPFCB_T_MPF mpf _KERNEL_MPFCB_TBITDEF_MPF; /**< %jp{固定長メモリプール領域の先頭番地} */ +#endif +} _KERNEL_T_MPFCB; + +#endif + + + +/* Fixed memory pool handle */ +typedef _KERNEL_T_MPFCB* _KERNEL_T_MPFHDL; + + + +#if _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_BLKARRAY /* block array */ + +extern _KERNEL_T_MPFCB _kernel_mpfcb_tbl[]; /** %jp{固定長メモリプールコントロールブロックテーブル} */ +extern const ID _kernel_max_mpfid; /** %jp{固定長メモリプールコントロールブロック個数} */ + +#define _KERNEL_MPF_ID2MPFCB(mpfid) (&_kernel_mpfcb_tbl[(mpfid) - _KERNEL_MPF_TMIN_ID]) /** %jp{固定長メモリプールIDからMPFCB アドレスを取得} */ +#define _KERNEL_MPF_ID2MPFHDL(mpfid) (&_kernel_mpfcb_tbl[(mpfid) - _KERNEL_MPF_TMIN_ID]) + +#define _KERNEL_MPF_MPFHDL2MPFCB(mpfhdl) (mpfhdl) +#define _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl) (mpfhdl) + + + +/* %jp{オブジェクトの存在チェック} */ +#define _KERNEL_MPF_CHECK_EXS(mpfid) (_KERNEL_MPF_ID2MPFHDL(mpfid)->mpf != NULL) + + + +#elif _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_PTRARRAY /* pointer array */ + +extern _KERNEL_T_MPFCB *_kernel_mpfcb_tbl[]; /**< %jp{固定長メモリプールコントロールブロックテーブル} */ +extern const ID _kernel_max_mpfid; /**< %jp{固定長メモリプールコントロールブロック個数} */ + +#define _KERNEL_MPF_ID2MPFCB(mpfid) (_kernel_mpfcb_tbl[(mpfid) - _KERNEL_MPF_TMIN_ID]) + /**< %jp{固定長メモリプールIDからMPFCB アドレスを取得} */ +#define _KERNEL_MPF_ID2MPFHDL(mpfid) (_kernel_mpfcb_tbl[(mpfid) - _KERNEL_MPF_TMIN_ID]) + /**< %jp{固定長メモリプールIDからMPFハンドルを取得} */ + +/* %jp{オブジェクトの存在チェック} */ +#define _KERNEL_MPF_CHECK_EXS(mpfid) (_KERNEL_MPF_ID2MPFHDL(mpfid) != NULL) + +#endif + + + +/* %jp{ID範囲定義} */ +#define _KERNEL_MPF_TMIN_ID 1 +#define _KERNEL_MPF_TMAX_ID (_kernel_max_mpfid) + +/* %jp{ID範囲チェック} */ +#define _KERNEL_MPF_CHECK_MPFID(mpfid) ((mpfid) >= _KERNEL_MPF_TMIN_ID && (mpfid) <= _KERNEL_MPF_TMAX_ID) + + + + +/* ------------------------------------------ */ +/* Accessor for MPFCB */ +/* ------------------------------------------ */ + +/* que */ +#define _KERNEL_MPF_GET_QUE(mpfhdl) (&(mpfhdl)->que) + + +/* freblk */ +#if _KERNEL_MPFCB_FREBLK +#define _KERNEL_MPF_SET_FREBLK(mpfhdl, x) do { _KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)->freblk = (_KERNEL_MPFCB_T_BLKHDL)(x); } while (0) +#define _KERNEL_MPF_GET_FREBLK(mpfhdl) ((_KERNEL_MPF_T_BLKHDL)_KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)->freblk) +#else +#define _KERNEL_MPF_SET_FREBLK(mpfhdl, x) do { } while (0) +#define _KERNEL_MPF_GET_FREBLK(mpfhdl) (0) +#endif + +/* fblkcnt */ +#if _KERNEL_MPFCB_FBLKCNT +#define _KERNEL_MPF_SET_FBLKCNT(mpfhdl, x) do { _KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)->fblkcnt = (_KERNEL_MPFCB_T_BLKCNT)(x); } while (0) +#define _KERNEL_MPF_GET_FBLKCNT(mpfhdl) ((_KERNEL_MPF_T_BLKCNT)_KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)->fblkcnt) +#else +#define _KERNEL_MPF_SET_FBLKCNT(mpfhdl, x) do { } while (0) +#define _KERNEL_MPF_GET_FBLKCNT(mpfhdl) (0) +#endif + + +/* mpfatr */ +#if _KERNEL_MPFCB_MPFATR +#define _KERNEL_MPF_SET_MPFATR(mpfhdl, x) do { _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->mpfatr = (_KERNEL_MPFCB_T_MPFATR)(x); } while (0) +#define _KERNEL_MPF_GET_MPFATR(mpfhdl) ((_KERNEL_MPF_T_MPFATR)_KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->mpfatr) +#else +#define _KERNEL_MPF_SET_MPFATR(mpfhdl, x) do { } while (0) +#if _KERNEL_SPT_MPF_TA_TFIFO +#define _KERNEL_MPF_GET_MPFATR(mpfhdl) (TA_TFIFO) +#else +#define _KERNEL_MPF_GET_MPFATR(mpfhdl) (TA_TPRI) +#endif +#endif + +/* blkcnt */ +#if _KERNEL_MPFCB_BLKCNT +#define _KERNEL_MPF_SET_BLKCNT(mpfhdl, x) do { _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->blkcnt = (_KERNEL_MPFCB_T_BLKCNT)(x); } while (0) +#define _KERNEL_MPF_GET_BLKCNT(mpfhdl) ((_KERNEL_MPF_T_BLKCNT)_KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->blkcnt) +#else +#define _KERNEL_MPF_SET_BLKCNT(mpfhdl, x) do { } while (0) +#define _KERNEL_MPF_GET_BLKCNT(mpfhdl) (0) +#endif + +/* blksz */ +#if _KERNEL_MPFCB_BLKSZ +#define _KERNEL_MPF_SET_BLKSZ(mpfhdl, x) do { _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->blksz = (_KERNEL_MPFCB_T_BLKCNT)(x); } while (0) +#define _KERNEL_MPF_GET_BLKSZ(mpfhdl) ((_KERNEL_MPF_T_BLKCNT)_KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->blksz) +#else +#define _KERNEL_MPF_SET_BLKSZ(mpfhdl, x) do { } while (0) +#define _KERNEL_MPF_GET_BLKSZ(mpfhdl) (_KERNEL_TMAX_BLKCNT) +#endif + +/* mpf */ +#if _KERNEL_MPFCB_MPF +#define _KERNEL_MPF_SET_MPF(mpfhdl, x) do { _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->mpf = (_KERNEL_MPFCB_T_MPF)(x); } while (0) +#define _KERNEL_MPF_GET_MPF(mpfhdl) ((_KERNEL_MPF_T_MPF)_KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->mpf) +#else +#define _KERNEL_MPF_SET_MPF(mpfhdl, x) do { } while (0) +#define _KERNEL_MPF_GET_MPF(mpfhdl) (_KERNEL_TMAX_BLKCNT) +#endif + + + + +/* %jp{キュー接続} */ +#if _KERNEL_SPT_MPF_TA_TFIFO && _KERNEL_SPT_MPF_TA_TPRI /* %jp{TA_TFIFO と TA_TPRI の混在 } */ +#define _KERNEL_MPF_ADD_QUE(semhdl, tskhdl) _KERNEL_ADD_QUE(_KERNEL_MPF_GET_QUE(semhdl), tskhdl, _KERNEL_MPF_GET_MPFATR(semhdl)) +#elif _KERNEL_SPT_MPF_TA_TFIFO && !_KERNEL_SPT_SE_TA_TPRI /* %jp{TA_TFIFO のみ利用 } */ +#define _KERNEL_MPF_ADD_QUE(semhdl, tskhdl) _KERNEL_ADF_QUE(_KERNEL_MPF_GET_QUE(semhdl), tskhdl) +#elif !_KERNEL_SPT_MPF_TA_TFIFO && _KERNEL_SPT_MPF_TA_TPRI /* %jp{TA_TPRI のみ利用 } */ +#define _KERNEL_MPF_ADD_QUE(semhdl, tskhdl) _KERNEL_ADP_QUE(_KERNEL_MPF_GET_QUE(semhdl), tskhdl) +#else +#error error:_KERNEL_SPT_MPF_TA_TPRI and _KERNEL_SPT_MPF_TA_TFIFO +#endif + +/* %jp{キュー取り外し} */ +#define _KERNEL_MPF_RMV_QUE(semhdl, tskhdl) _KERNEL_RMV_QUE(semhdl, tskhdl) + +/* %jp{キュー先頭取り出し} */ +#define _KERNEL_MPF_RMH_QUE(semhdl) _KERNEL_RMH_QUE(semhdl) + + +/* %jp{タイムアウトキュー接続} */ +#if _KERNEL_SPT_TGET_MPF /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */ +#define _KERNEL_MPF_ADD_TOQ(tskhdl, tmout) _KERNEL_ADD_TOQ(tskhdl, tmout) +#else +#define _KERNEL_MPF_ADD_TOQ(tskhdl) do { } while (0) +#endif + +/* %jp{タイムアウトキュー取り外し} */ +#if _KERNEL_SPT_TGET_MPF /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */ +#define _KERNEL_MPF_RMV_TOQ(tskhdl) _KERNEL_RMV_TOQ(tskhdl) +#else +#define _KERNEL_MPF_RMV_TOQ(tskhdl) do { } while (0) +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + +ER _kernel_cre_mpf(ID mpfid, const T_CMPF *pk_cmpf); /**< %jp{固定長メモリプール生成} */ + +#ifdef __cplusplus +} +#endif + + + + +#endif /* _KERNEL__object__mpfobj_h__ */ + + +/* end of file */ diff --git a/kernel/include/object/semobj.h b/kernel/include/object/semobj.h new file mode 100755 index 0000000..b010da1 --- /dev/null +++ b/kernel/include/object/semobj.h @@ -0,0 +1,311 @@ +/** + * Hyper Operating System V4 Advance + * + * @file knl_sem.h + * @brief %en{Semaphore object heder file}%jp{セマフォオジェクトのヘッダファイル} + * + * @version $Id: semobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__object__semobj_h__ +#define _KERNEL__object__semobj_h__ + + + +/* ------------------------------------------ */ +/* Primitive type definition */ +/* ------------------------------------------ */ + +/* %jp{セマフォカウンタ値用の型} */ +#if _KERNEL_SEMCB_BITFIELD /* %jp{SEMCBにビットフィールドを利用する場合 */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef signed int _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#define _KERNEL_SEMCB_TBITDEF_SEMCNT : (_KERNEL_SEM_TBIT_SEMCNT+1) /**< %jp{セマフォカウンタのビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef unsigned int _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#define _KERNEL_SEMCB_TBITDEF_SEMCNT : _KERNEL_SEM_TBIT_SEMCNT /**< %jp{セマフォカウンタのビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{SEMCBにビットフィールドを利用しない場合 */ + +#if (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_SEM_T_SEMCNT; /**< %jp{セマフォカウンタを演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_SEMCB_T_SEMCNT; /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */ +#endif +#define _KERNEL_SEMCB_TBITDEF_SEMCNT /**< %jp{セマフォカウンタのビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{セマフォ属性用の型} */ +#if _KERNEL_SEMCB_BITFIELD /* %jp{SEMCBにビットフィールドを利用する場合 */ + +/* %jp{TA_TFIFO と TA_TPRI の判定に 1bit 必要} */ +typedef unsigned int _KERNEL_SEM_T_SEMATR; +typedef unsigned int _KERNEL_SEMCB_T_SEMATR; +#define _KERNEL_SEMCB_TBITDEF_SEMATR : 1 + +#else /* %jp{SEMCBにビットフィールドを利用しない場合 */ + +typedef _KERNEL_T_FAST_UB _KERNEL_SEM_T_SEMATR; +typedef _KERNEL_T_OPT_UB _KERNEL_SEMCB_T_SEMATR; +#define _KERNEL_SEMCB_TBITDEF_SEMATR + +#endif + + + +/* ------------------------------------------ */ +/* Control block */ +/* ------------------------------------------ */ + +#if _KERNEL_SEMCB_SPLIT_RO + +/** %jp{セマフォコントロールブロック(リードオンリー部)}%en{Semaphore Control Block(read-only)} */ +typedef struct _kernel_t_semcb_ro +{ +#if _KERNEL_SEMCB_SEMATR + _KERNEL_SEMCB_T_SEMATR sematr _KERNEL_SEMCB_TBITDEF_SEMATR; /**< %jp{セマフォ属性} */ +#endif + +#if _KERNEL_SEMCB_MAXSEM + _KERNEL_SEMCB_T_SEMCNT maxsem _KERNEL_SEMCB_TBITDEF_SEMCNT; /**< %jp{セマフォの最大資源数} */ +#endif +} _KERNEL_T_SEMCB_RO; + +/** %jp{セマフォコントロールブロック}%en{Semaphore Control Block} */ +typedef struct _kernel_t_semcb +{ + _KERNEL_T_QUE que; /**< %jp{セマフォ待ちタスクキュー} */ + +#if _KERNEL_SEMCB_SEMCNT + _KERNEL_SEMCB_T_SEMCNT semcnt _KERNEL_SEMCB_TBITDEF_SEMCNT; /**< %jp{セマフォの資源数} */ +#endif + + +#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY + const _KERNEL_T_SEMCB_RO *semcb_ro; /**< %jp{セマフォコントロールブロックROM部へのポインタ} */ +#endif +} _KERNEL_T_SEMCB; + + +#else + + +/** %jp{セマフォコントロールブロック}%en{Semaphore Control Block} */ +typedef struct _kernel_t_semcb +{ +#if _KERNEL_SEMCB_QUE + _KERNEL_T_QUE que; /**< %jp{セマフォ待ちタスクキュー} */ +#endif + +#if _KERNEL_SEMCB_SEMCNT + _KERNEL_SEMCB_T_SEMCNT semcnt _KERNEL_SEMCB_TBITDEF_SEMCNT; /**< %jp{セマフォの資源数} */ +#endif + +#if _KERNEL_SEMCB_SEMATR + _KERNEL_SEMCB_T_SEMATR sematr _KERNEL_SEMCB_TBITDEF_SEMATR; /**< %jp{セマフォ属性} */ +#endif + +#if _KERNEL_SEMCB_MAXSEM + _KERNEL_SEMCB_T_SEMCNT maxsem _KERNEL_SEMCB_TBITDEF_SEMCNT; /**< %jp{セマフォの最大資源数} */ +#endif +} _KERNEL_T_SEMCB; + +typedef _KERNEL_T_SEMCB _KERNEL_T_SEMCB_RO; + +#endif + + + +/* ------------------------------------------ */ +/* ID range */ +/* ------------------------------------------ */ + +extern const ID _kernel_max_semid; /**< %jp{セマフォIDの最大値} */ + +#define _KERNEL_SEM_TMIN_ID 1 /**< %jp{セマフォIDの最小値} */ +#define _KERNEL_SEM_TMAX_ID (_kernel_max_semid) /**< %jp{セマフォIDの最大値} */ + +#define _KERNEL_SEM_CHECK_SEMID(semid) ((semid) >= _KERNEL_SEM_TMIN_ID && (semid) <= _KERNEL_SEM_TMAX_ID) + /**< %jp{ID範囲チェック} */ + + +/* ------------------------------------------ */ +/* Control block tables */ +/* ------------------------------------------ */ + +#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY +#if _KERNEL_SEMCB_SPLIT_RO + +/* %jp{ブロック配列管理でRO分離の場合}%en{block array} */ +extern _KERNEL_T_SEMCB _kernel_semcb_tbl[]; /**< %jp{セマフォコントロールブロックテーブル} */ +extern const _KERNEL_T_SEMCB_RO _kernel_semcb_ro_tbl[]; /**< %jp{セマフォコントロールブロック(リードオンリー部)テーブル} */ +#define _KERNEL_SEM_ID2SEMCB(semid) (&_kernel_semcb_tbl[(semid) - _KERNEL_SEM_TMIN_ID]) /**< %jp{コントロールブロックの取得} */ +#define _KERNEL_SEM_CHECK_EXS(semid) (_kernel_semcb_ro_tbl[(semid) - _KERNEL_SEM_TMIN_ID].maxsem > 0) + /**< %jp{オブジェクトの存在チェック} */ + +#else + +/* %jp{ブロック配列管理の場合}%en{block array} */ +extern _KERNEL_T_SEMCB _kernel_semcb_tbl[]; /**< %jp{セマフォコントロールブロックテーブル} */ +#define _KERNEL_SEM_ID2SEMCB(semid) (&_kernel_semcb_tbl[(semid) - _KERNEL_SEM_TMIN_ID]) /**< %jp{コントロールブロックの取得} */ +#define _KERNEL_SEM_CHECK_EXS(semid) (_kernel_semcb_tbl[(semid) - _KERNEL_SEM_TMIN_ID].maxsem > 0) + /**< %jp{オブジェクトの存在チェック} */ + +#endif + +#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY + +/* %jp{ポインタ配列管理の場合}%en{pointer array} */ +extern _KERNEL_T_SEMCB *_kernel_semcb_tbl[]; /**< %jp{セマフォコントロールブロックテーブル} */ +#define _KERNEL_SEM_ID2SEMCB(semid) (_kernel_semcb_tbl[(semid) - _KERNEL_TMIN_SEMID]) /**< %jp{セマフォIDからSEMCB アドレスを取得} */ +#define _KERNEL_SEM_CHECK_EXS(semid) (_KERNEL_SEM_ID2SEMCB(semid) != NULL) /**< %jp{オブジェクトの存在チェック} */ + +#endif + + + +/* ------------------------------------------ */ +/* Accessor for SEMCB */ +/* ------------------------------------------ */ + +/* semcb_ro */ +#if !_KERNEL_SEMCB_SPLIT_RO +#define _KERNEL_SEM_GET_SEMCB_RO(semid, semcb) (semcb) +#else +#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY /* %jp{SEMCBを単純配列で管理}%en{array of block} */ +#define _KERNEL_SEM_GET_SEMCB_RO(semid, semcb) (&_kernel_semcb_ro_tbl[(semid)]) +#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY /* %jp{SEMCBをポインタ配列で管理}%en{array of pointer} */ +#define _KERNEL_SEM_GET_SEMCB_RO(semid, semcb) ((semcb)->semcb_ro) +#endif +#endif + + +/* que */ +#define _KERNEL_SEM_GET_QUE(semcb) (&(semcb)->que) + + +/* semcnt */ +#if _KERNEL_SEMCB_SEMCNT +#define _KERNEL_SEM_SET_SEMCNT(semcb, x) do { (semcb)->semcnt = (_KERNEL_SEMCB_T_SEMCNT)(x); } while (0) +#define _KERNEL_SEM_GET_SEMCNT(semcb) ((_KERNEL_SEM_T_SEMCNT)(semcb)->semcnt) +#else +#define _KERNEL_SEM_SET_SEMCNT(semcb, x) do { } while (0) +#define _KERNEL_SEM_GET_SEMCNT(semcb) (0) +#endif + + +/* sematr */ +#if _KERNEL_SEMCB_SEMATR +#define _KERNEL_SEM_SET_SEMATR(semcb, x) do { (semcb)->sematr = (_KERNEL_SEMCB_T_SEMATR)(x); } while (0) +#define _KERNEL_SEM_GET_SEMATR(semcb) ((_KERNEL_SEM_T_SEMATR)(semcb)->sematr) +#else +#define _KERNEL_SEM_SET_SEMATR(semcb, x) do { } while (0) +#if _KERNEL_SPT_SEM_TA_TFIFO +#define _KERNEL_SEM_GET_SEMATR(semcb) (TA_TFIFO) +#else +#define _KERNEL_SEM_GET_SEMATR(semcb) (TA_TPRI) +#endif +#endif + + +/* maxsem */ +#if _KERNEL_SEMCB_MAXSEM +#define _KERNEL_SEM_SET_MAXSEM(semcb_ro, x) do { (semcb_ro)->maxsem = (_KERNEL_SEMCB_T_SEMCNT)(x); } while (0) +#define _KERNEL_SEM_GET_MAXSEM(semcb_ro) ((_KERNEL_SEM_T_SEMCNT)(semcb_ro)->maxsem) +#else +#define _KERNEL_SEM_SET_MAXSEM(semcb_ro, x) do { } while (0) +#define _KERNEL_SEM_GET_MAXSEM(semcb_ro) (_KERNEL_TMAX_SEMCNT) +#endif + + + +/* ------------------------------------------ */ +/* Macro functions */ +/* ------------------------------------------ */ + +/* %jp{キュー接続} */ +#if _KERNEL_SPT_SEM_TA_TFIFO && _KERNEL_SPT_SEM_TA_TPRI /* %jp{TA_TFIFO と TA_TPRI の混在 } */ +#define _KERNEL_SEM_ADD_QUE(semcb, semcb_ro, tskhdl) _KERNEL_ADD_QUE(_KERNEL_SEM_GET_QUE(semcb), tskhdl, _KERNEL_SEM_GET_SEMATR(semcb_ro)) +#elif _KERNEL_SPT_SEM_TA_TFIFO && !_KERNEL_SPT_SE_TA_TPRI /* %jp{TA_TFIFO のみ利用 } */ +#define _KERNEL_SEM_ADD_QUE(semcb, semcb_ro, tskhdl) _KERNEL_ADF_QUE(_KERNEL_SEM_GET_QUE(semcb), tskhdl) +#elif !_KERNEL_SPT_SEM_TA_TFIFO && _KERNEL_SPT_SEM_TA_TPRI /* %jp{TA_TPRI のみ利用 } */ +#define _KERNEL_SEM_ADD_QUE(semcb, semcb_ro, tskhdl) _KERNEL_ADP_QUE(_KERNEL_SEM_GET_QUE(semcb), tskhdl) +#else +#error error:_KERNEL_SPT_SEM_TA_TPRI and _KERNEL_SPT_SEM_TA_TFIFO +#endif + +/* %jp{キュー取り外し} */ +#define _KERNEL_SEM_RMV_QUE(semcb, tskhdl) _KERNEL_RMV_QUE(semcb, tskhdl) + +/* %jp{キュー先頭取り出し} */ +#define _KERNEL_SEM_RMH_QUE(semcb) _KERNEL_RMH_QUE(semcb) + + +/* %jp{タイムアウトキュー接続} */ +#if _KERNEL_SPT_TWAI_SEM /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */ +#define _KERNEL_SEM_ADD_TOQ(tskhdl, tmout) _KERNEL_ADD_TOQ(tskhdl, tmout) +#else +#define _KERNEL_SEM_ADD_TOQ(tskhdl) do { } while (0) +#endif + +/* %jp{タイムアウトキュー取り外し} */ +#if _KERNEL_SPT_TWAI_SEM /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */ +#define _KERNEL_SEM_RMV_TOQ(tskhdl) _KERNEL_RMV_TOQ(tskhdl) +#else +#define _KERNEL_SEM_RMV_TOQ(tskhdl) do { } while (0) +#endif + + + +/* ------------------------------------------ */ +/* Functions */ +/* ------------------------------------------ */ + +#ifdef __cplusplus +extern "C" { +#endif + +ER _kernel_cre_sem(ID semid, const T_CSEM *pk_csem); /**< %jp{セマフォ生成}%en{Create Semaphore} */ +ER _kernel_wai_sem(ID semid, TMO tmout); /**< %jp{セマフォ資源の獲得(統合版)}%en{Acquire Semaphore Resource} */ + +#ifdef __cplusplus +} +#endif + + + + +#endif /* _KERNEL__object__semobj_h__ */ + + +/* end of file */ diff --git a/kernel/include/object/tskobj.h b/kernel/include/object/tskobj.h new file mode 100755 index 0000000..fbb8b5d --- /dev/null +++ b/kernel/include/object/tskobj.h @@ -0,0 +1,959 @@ +/** + * Hyper Operating System V4 Advance + * + * @file knl_que.h + * @brief %jp{タスクブジェクトのヘッダファイル}%en{task object heder file} + * + * @version $Id: tskobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__object__tskobj_h__ +#define _KERNEL__object__tskobj_h__ + + + +/* ------------------------------------------ */ +/* Primitive type definition */ +/* ------------------------------------------ */ + +/* %jp{タスクハンドルの型}%en{Task-handle} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合 */ +typedef int _KERNEL_TCB_T_TSKHDL; /**< %jp{タスクハンドルをTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_TSKHDL : _KERNEL_TBIT_TSKHDL /**< %jp{タスクハンドルのビットフィールド宣言時の幅} */ +#else +typedef _KERNEL_T_TSKHDL _KERNEL_TCB_T_TSKHDL; /**< %jp{タスクハンドルをTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_TSKHDL /**< %jp{タスクハンドルのビットフィールド宣言時の幅} */ +#endif + + +/* %jp{タスク状態の型}%en{Task-state} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合 */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_TSK_T_TSKSTAT; /**< %jp{タスク状態を演算操作するときの型} */ +typedef signed int _KERNEL_TCB_T_TSKSTAT; /**< %jp{タスク状態をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_TSKSTAT : (_KERNEL_TSK_TBIT_TSKSTAT+1) /**< %jp{タスク状態のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_TSK_T_TSKSTAT; /**< %jp{タスク状態を演算操作するときの型} */ +typedef unsigned int _KERNEL_TCB_T_TSKSTAT; /**< %jp{タスク状態をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_TSKSTAT : _KERNEL_TSK_TBIT_TSKSTAT /**< %jp{タスク状態のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{TCBにビットフィールドを利用しない場合 */ + +#if _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_TSKSTAT; /**< %jp{タスク状態を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_TSKSTAT; /**< %jp{タスク状態をTCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UB _KERNEL_TSK_T_TSKSTAT; /**< %jp{タスク状態を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_TCB_T_TSKSTAT; /**< %jp{タスク状態をTCBに格納するときの型} */ +#endif +#define _KERNEL_TCB_TBITDEF_TSKSTAT /**< %jp{タスク状態のビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{タスク優先度の型}%en{Task priopity} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合} */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef signed int _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_TPRI : (_KERNEL_TSK_TBIT_TPRI+1) /**< %jp{タスク優先度のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef unsigned int _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_TPRI : _KERNEL_TSK_TBIT_TPRI /**< %jp{タスク優先度のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +#if (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_TSK_T_TPRI; /**< %jp{タスク優先度を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_TCB_T_TPRI; /**< %jp{タスク優先度をTCBに格納するときの型} */ +#endif +#define _KERNEL_TCB_TBITDEF_TPRI /**< %jp{タスク優先度のビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{タスク待ち要因}%en{Task wait} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合} */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef signed int _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_TSKWAIT : (_KERNEL_TSK_TBIT_TSKWAIT+1) /**< %jp{タスク待ち要因のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef unsigned int _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_TSKWAIT : _KERNEL_TSK_TBIT_TSKWAIT /**< %jp{タスク待ち要因のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +#if (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_TSK_T_TSKWAIT; /**< %jp{タスク待ち要因を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_TCB_T_TSKWAIT; /**< %jp{タスク待ち要因をTCBに格納するときの型} */ +#endif +#define _KERNEL_TCB_TBITDEF_TSKWAIT /**< %jp{タスク待ち要因のビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{待ち対象のオブジェクトのID番号}%jp{Waitbject-ID} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合} */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef signed int _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_WOBJID : (_KERNEL_TSK_TBIT_WOBJID+1) /**< %jp{待ち対象のオブジェクトのID番号のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef unsigned int _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_WOBJID : _KERNEL_TSK_TBIT_WOBJID /**< %jp{待ち対象のオブジェクトのID番号のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +#if (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_TSK_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_TCB_T_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */ +#endif +#define _KERNEL_TCB_TBITDEF_WOBJID /**< %jp{待ち対象のオブジェクトのID番号のビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{起動要求キューイング数}%en{Activate queuing count} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合} */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef signed int _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_ACTCNT : (_KERNEL_TSK_TBIT_ACTCNT+1) /**< %jp{起動要求キューイング数のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef unsigned int _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_ACTCNT : _KERNEL_TSK_TBIT_ACTCNT /**< %jp{起動要求キューイング数のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +#if (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_TSK_T_ACTCNT; /**< %jp{起動要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_TCB_T_ACTCNT; /**< %jp{起動要求キューイング数をTCBに格納するときの型} */ +#endif +#define _KERNEL_TCB_TBITDEF_ACTCNT /**< %jp{起動要求キューイング数のビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{起床要求キューイング数}%en{Wakeup queuing count} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合} */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef signed int _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_WUPCNT : (_KERNEL_TSK_TBIT_WUPCNT+1) /**< %jp{起床要求キューイング数のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef unsigned int _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_WUPCNT : _KERNEL_TSK_TBIT_WUPCNT /**< %jp{起床要求キューイング数のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +#if (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_TSK_T_WUPCNT; /**< %jp{起床要求キューイング数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_TCB_T_WUPCNT; /**< %jp{起床要求キューイング数をTCBに格納するときの型} */ +#endif +#define _KERNEL_TCB_TBITDEF_WUPCNT /**< %jp{起床要求キューイング数のビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{強制待ち要求ネスト数}%en{Suspend nest count} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合} */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef signed int _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_SUSCNT : (_KERNEL_TSK_TBIT_SUSCNT+1) /**< %jp{強制待ち要求ネスト数のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef unsigned int _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_SUSCNT : _KERNEL_TSK_TBIT_SUSCNT /**< %jp{強制待ち要求ネスト数のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +#if (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_TSK_T_SUSCNT; /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_TCB_T_SUSCNT; /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */ +#endif +#define _KERNEL_TCB_TBITDEF_SUSCNT /**< %jp{強制待ち要求ネスト数のビットフィールド宣言時の幅} */ + +#endif + + +/* %jp{タスクデータ}%en{Task data} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合} */ + +typedef VP_INT _KERNEL_TSK_T_DATA; +typedef int _KERNEL_TCB_T_DATA; +#define _KERNEL_TCB_TBITDEF_DATA : _KERNEL_TSK_TBIT_DATA + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +typedef VP_INT _KERNEL_TSK_T_DATA; +typedef VP_INT _KERNEL_TCB_T_DATA; +#define _KERNEL_TCB_TBITDEF_DATA + +#endif + + +/* %jp{エラーコード}%en{Error code} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合 */ + +typedef signed int _KERNEL_TSK_T_ERCD; +typedef signed int _KERNEL_TCB_T_ERCD; +#define _KERNEL_TCB_TBITDEF_ERCD : _KERNEL_TSK_TBIT_ERCD + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_ERCD; +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_ERCD; +#define _KERNEL_TCB_TBITDEF_ERCD + +#endif + + +/* %jp{タスク属性}%en{Task attribute} */ +typedef ATR _KERNEL_TSK_T_TSKATR; +typedef ATR _KERNEL_TCB_T_TSKATR; +#define _KERNEL_TCB_TBITDEF_TSKATR + + +/* %jp{タスク拡張情報}%jp{Extended information} */ +typedef VP_INT _KERNEL_TSK_T_EXINF; +typedef VP_INT _KERNEL_TCB_T_EXINF; +#define _KERNEL_TCB_TBITDEF_EXINF + + +/* %jp{タスクの開始番地}%en{Start address} */ +typedef FP _KERNEL_TSK_T_TASK; +typedef FP _KERNEL_TCB_T_TASK; +#define _KERNEL_TCB_TBITDEF_TASK + + +/* %jp{スタックサイズ}%en{Stack size} */ +typedef SIZE _KERNEL_TSK_T_STKSZ; +typedef SIZE _KERNEL_TCB_T_STKSZ; +#define _KERNEL_TCB_TBITDEF_STKSZ + + +/* %jp{スタック領域の先頭番地}%en{Stack base address} */ +typedef VP _KERNEL_TSK_T_STK; +typedef VP _KERNEL_TCB_T_STK; +#define _KERNEL_TCB_TBITDEF_STK + + +/* Initial stack pointer */ +typedef VP _KERNEL_TSK_T_ISP; +typedef VP _KERNEL_TCB_T_ISP; +#define _KERNEL_TCB_TBITDEF_ISP + + + +/* %jp{相対時間}%en{Relative-Time} */ +#if _KERNEL_TCB_BITFIELD /* %jp{TCBにビットフィールドを利用する場合} */ + +#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */ +typedef signed int _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef signed int _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_RELTIM : (_KERNEL_TSK_TBIT_RELTIM+1) /**< %jp{相対時間のビットフィールド宣言時の幅} */ +#else +typedef unsigned int _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef unsigned int _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#define _KERNEL_TCB_TBITDEF_RELTIM : _KERNEL_TSK_TBIT_RELTIM /**< %jp{相対時間のビットフィールド宣言時の幅} */ +#endif + +#else /* %jp{TCBにビットフィールドを利用しない場合} */ + +#if (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_B _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_B _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UB _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UB _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_H _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_H _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UH _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UH _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_W _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_W _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE) +typedef _KERNEL_T_FAST_UW _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UW _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT +typedef _KERNEL_T_FAST_D _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_D _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#else +typedef _KERNEL_T_FAST_UD _KERNEL_TSK_T_RELTIM; /**< %jp{相対時間を演算操作するときの型} */ +typedef _KERNEL_T_LEAST_UD _KERNEL_TCB_T_RELTIM; /**< %jp{相対時間をTCBに格納するときの型} */ +#endif +#define _KERNEL_TCB_TBITDEF_RELTIM /**< %jp{相対時間のビットフィールド宣言時の幅} */ + +#endif + + + +/* -------------------------------------------------------------------- */ +/* TCB definetion */ +/* -------------------------------------------------------------------- */ + +#include "core/dsp.h" +#include "core/que.h" +#include "core/rdq.h" +#include "core/toq.h" +#include "core/sys.h" + + + +/* -------------------------------------------------------------------- */ +/* TCB definetion */ +/* -------------------------------------------------------------------- */ + +#if _KERNEL_TCB_SPLIT_RO + +/** %jp{タスクコントロールブロック(ROM部)}%en{Task control block for ROM} */ +typedef struct _kernel_t_tcb_ro /* タスクコントロールブロック(ROM部) */ +{ +#if _KERNEL_TCB_TSKATR + _KERNEL_TCB_T_TSKATR tskatr _KERNEL_TCB_TBITDEF_TSKATR; /**< %jp{タスク属性}%en{Task attribute} */ +#endif + +#if _KERNEL_TCB_EXINF + _KERNEL_TCB_T_EXINF exinf _KERNEL_TCB_TBITDEF_EXINF; /**< %jp{タスクの拡張情報}%en{Task extend information} */ +#endif + +#if _KERNEL_TCB_TASK + _KERNEL_TCB_T_TASK task _KERNEL_TCB_TBITDEF_TASK; /**< %jp{タスクの起動番地}%en{Task start address} */ +#endif + +#if _KERNEL_TCB_TSKPRI + _KERNEL_TCB_T_TPRI itskpri _KERNEL_TCB_TBITDEF_TPRI; /**< %jp{タスクの起動時優先度}%en{Task initial priority} */ +#endif + +#if _KERNEL_TCB_STKSZ + _KERNEL_TCB_T_STKSZ stksz _KERNEL_TCB_TBITDEF_STKSZ; /**< %jp{タスクのスタックのサイズ(バイト数)}%en{Task stack size(in bytes)} */ +#endif + +#if _KERNEL_TCB_STK + _KERNEL_TCB_T_STK stk _KERNEL_TCB_TBITDEF_STK; /**< %jp{タスクのスタック領域の先頭番地}%en{Base address of task stack space} */ +#endif + +#if _KERNEL_TCB_ISP + _KERNEL_TCB_T_ISP isp _KERNEL_TCB_TBITDEF_ISP; /**< %jp{スタックポインタの初期値}%en{Task initial stack pointer} */ +#endif +} _KERNEL_T_TCB_RO; + + +/** %jp{タスクコントロールブロック(RAM部)}%en{Task control block for RAM} */ +typedef struct _kernel_t_tcb +{ +#if _KERNEL_TCB_CTXCB + _KERNEL_T_CTXCB ctxcb; /**< %jp{タスクのコンテキスト}%en{Execution context control block} */ +#endif + +#if _KERNEL_TCB_QUE + _KERNEL_T_QUE *pk_que; /**< %jp{属しているキュー}%en{Pointer of the queue for which the task connected} */ +#endif + +#if _KERNEL_TCB_QUEOBJ + _KERNEL_QUEOBJ /**< %jp{キューに接続する為のオブジェクト}%en{Object for queue connection} */ +#endif + +#if _KERNEL_TCB_TOQOBJ + _KERNEL_TOQOBJ /* %jp{タイムアウトキューに接続する為のオブジェクト}%en{Timeout queue object} */ +#endif + +#if _KERNEL_TCB_TSKSTAT + _KERNEL_TCB_T_TSKSTAT tskstat _KERNEL_TCB_TBITDEF_TSKSTAT; /**< %jp{タスク状態}%en{Task state} */ +#endif + +#if _KERNEL_TCB_TSKPRI + _KERNEL_TCB_T_TPRI tskpri _KERNEL_TCB_TBITDEF_TPRI; /**< %jp{タスクの現在優先度}%en{Task current priority} */ +#endif + +#if _KERNEL_TCB_TSKBPRI + _KERNEL_TCB_T_TPRI tskbpri _KERNEL_TCB_TBITDEF_TPRI; /**< %jp{タスクのベース優先度}%en{Task base priority} */ +#endif + +#if _KERNEL_TCB_TSKWAIT + _KERNEL_TCB_T_TSKWAIT tskwait _KERNEL_TCB_TBITDEF_TSKWAIT; /**< %jp{待ち要因}%en{Reason for waiting} */ +#endif + +#if _KERNEL_TCB_WOBJID + _KERNEL_TCB_T_WOBJID wobjid _KERNEL_TCB_TBITDEF_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号}%en{Object ID number for which the task waiting} */ +#endif + +#if _KERNEL_TCB_ACTCNT + _KERNEL_TCB_T_ACTCNT actcnt _KERNEL_TCB_TBITDEF_ACTCNT; /**< %jp{起動要求キューイング回数}%en{Activation request count} */ +#endif + +#if _KERNEL_TCB_WUPCNT + _KERNEL_TCB_T_WUPCNT wupcnt _KERNEL_TCB_TBITDEF_WUPCNT; /**< %jp{起床要求キューイング回数}%en{Wakeup request count} */ +#endif + +#if _KERNEL_TCB_SUSCNT + _KERNEL_TCB_T_SUSCNT suscnt _KERNEL_TCB_TBITDEF_SUSCNT; /**< %jp{強制待ち要求ネスト回数}%en{Suspension count} */ +#endif + + +#if _KERNEL_TCB_ERCD + _KERNEL_TCB_T_ERCD ercd _KERNEL_TCB_TBITDEF_ERCD; /**< %jp{待ち解除時のエラーコード}%en{error code} */ +#endif + +#if _KERNEL_TCB_DATA + _KERNEL_TCB_T_DATA data _KERNEL_TCB_TBITDEF_DATA; /**< %jp{タスク同期時の受け渡しデータ}%en{task data} */ +#endif + +#if _KERNEL_TCB_TSKID + _KERNEL_TCB_T_TSKID tskid _KERNEL_TCB_TBITDEF_TSKID; /**< %jp{タスクID番号の逆引き用}%en{Task object ID} */ +#endif + + +/* %jp{ポインタ管理時にROM部/RAM部を分離する場合はポインタを張る} */ +#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY + const _KERNEL_T_TCB_RO *tcb_ro; +#endif +} _KERNEL_T_TCB; + + +#else + + +/** %jp{タスクコントロールブロック}%en{Task Control Block} */ +typedef struct _kernel_t_tcb +{ +#if _KERNEL_TCB_CTXCB + _KERNEL_T_CTXCB ctxcb; /**< %jp{タスクのコンテキスト}%en{Execution context control block} */ +#endif + +#if _KERNEL_TCB_QUE + _KERNEL_T_QUE *pk_que; /**< %jp{属しているキュー}%en{Pointer of the queue for which the task connected} */ +#endif + +#if _KERNEL_TCB_QUEOBJ + _KERNEL_QUEOBJ /**< %jp{キューに接続する為のオブジェクト}%en{Object for queue connection} */ +#endif + +#if _KERNEL_TCB_TOQOBJ + _KERNEL_TOQOBJ /* %jp{タイムアウトキューに接続する為のオブジェクト}%en{Timeout queue object} */ +#endif + +#if _KERNEL_TCB_TSKSTAT + _KERNEL_TCB_T_TSKSTAT tskstat _KERNEL_TCB_TBITDEF_TSKSTAT; /**< %jp{タスク状態}%en{Task state} */ +#endif + +#if _KERNEL_TCB_TSKPRI + _KERNEL_TCB_T_TPRI tskpri _KERNEL_TCB_TBITDEF_TPRI; /**< %jp{タスクの現在優先度}%en{Task current priority} */ +#endif + +#if _KERNEL_TCB_TSKBPRI + _KERNEL_TCB_T_TPRI tskbpri _KERNEL_TCB_TBITDEF_TPRI; /**< %jp{タスクのベース優先度}%en{Task base priority} */ +#endif + +#if _KERNEL_TCB_TSKWAIT + _KERNEL_TCB_T_TSKWAIT tskwait _KERNEL_TCB_TBITDEF_TSKWAIT; /**< %jp{待ち要因}%en{Reason for waiting} */ +#endif + +#if _KERNEL_TCB_WOBJID + _KERNEL_TCB_T_WOBJID wobjid _KERNEL_TCB_TBITDEF_WOBJID; /**< %jp{待ち対象のオブジェクトのID番号}%en{Object ID number for which the task waiting} */ +#endif + +#if _KERNEL_TCB_ACTCNT + _KERNEL_TCB_T_ACTCNT actcnt _KERNEL_TCB_TBITDEF_ACTCNT; /**< %jp{起動要求キューイング回数}%en{Activation request count} */ +#endif + +#if _KERNEL_TCB_WUPCNT + _KERNEL_TCB_T_WUPCNT wupcnt _KERNEL_TCB_TBITDEF_WUPCNT; /**< %jp{起床要求キューイング回数}%en{Wakeup request count} */ +#endif + +#if _KERNEL_TCB_SUSCNT + _KERNEL_TCB_T_SUSCNT suscnt _KERNEL_TCB_TBITDEF_SUSCNT; /**< %jp{強制待ち要求ネスト回数}%en{Suspension count} */ +#endif + + +#if _KERNEL_TCB_ERCD + _KERNEL_TCB_T_ERCD ercd _KERNEL_TCB_TBITDEF_ERCD; /**< %jp{待ち解除時のエラーコード}%en{error code} */ +#endif + +#if _KERNEL_TCB_DATA + _KERNEL_TCB_T_DATA data _KERNEL_TCB_TBITDEF_DATA; /**< %jp{タスク同期時の受け渡しデータ}%en{task data} */ +#endif + +#if _KERNEL_TCB_TSKID + _KERNEL_TCB_T_TSKID tskid _KERNEL_TCB_TBITDEF_TSKID; /**< %jp{タスクID番号の逆引き用}%en{Task object ID} */ +#endif + + +#if _KERNEL_TCB_TSKATR + _KERNEL_TCB_T_TSKATR tskatr _KERNEL_TCB_TBITDEF_TSKATR; /**< %jp{タスク属性}%en{Task attribute} */ +#endif + +#if _KERNEL_TCB_EXINF + _KERNEL_TCB_T_EXINF exinf _KERNEL_TCB_TBITDEF_EXINF; /**< %jp{タスクの拡張情報}%en{Task extend information} */ +#endif + +#if _KERNEL_TCB_TASK + _KERNEL_TCB_T_TASK task _KERNEL_TCB_TBITDEF_TASK; /**< %jp{タスクの起動番地}%en{Task start address} */ +#endif + +#if _KERNEL_TCB_ITSKPRI + _KERNEL_TCB_T_TPRI itskpri _KERNEL_TCB_TBITDEF_TPRI; /**< %jp{タスクの起動時優先度}%en{Task initial priority} */ +#endif + +#if _KERNEL_TCB_STKSZ + _KERNEL_TCB_T_STKSZ stksz _KERNEL_TCB_TBITDEF_STKSZ; /**< %jp{タスクのスタックのサイズ(バイト数)}%en{Task stack size(in bytes)} */ +#endif + +#if _KERNEL_TCB_STK + _KERNEL_TCB_T_STK stk _KERNEL_TCB_TBITDEF_STK; /**< %jp{タスクのスタック領域の先頭番地}%en{Base address of task stack space} */ +#endif + +#if _KERNEL_TCB_ISP + _KERNEL_TCB_T_ISP isp _KERNEL_TCB_TBITDEF_ISP; /**< %jp{スタックポインタの初期値}%en{Task initial stack pointer} */ +#endif +} _KERNEL_T_TCB; + +typedef _KERNEL_T_TCB _KERNEL_T_TCB_RO; + +#endif + + + +/* ------------------------------------------ */ +/* ID range */ +/* ------------------------------------------ */ + +extern const ID _kernel_max_tskid; /**< %jp{タスクIDの最大値} */ + +#define _KERNEL_TSK_TMIN_ID 1 /**< %jp{タスクIDの最小値} */ +#define _KERNEL_TSK_TMAX_ID (_kernel_max_tskid) /**< %jp{タスクIDの最大値} */ + +#define _KERNEL_TSK_CHECK_TSKID(tskid) ((tskid) >= _KERNEL_TSK_TMIN_ID && (tskid) <= _KERNEL_TSK_TMAX_ID) + /**< %jp{ID範囲チェック} */ + + +/* ------------------------------------------ */ +/* Control block tables */ +/* ------------------------------------------ */ + +#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY +#if _KERNEL_TCB_SPLIT_RO + +/* %jp{ブロック配列管理でRO分離の場合}%en{block array} */ +extern _KERNEL_T_TCB _kernel_tcb_tbl[]; /**< %jp{タスクコントロールブロックテーブル} */ +extern const _KERNEL_T_TCB_RO _kernel_tcb_ro_tbl[]; /**< %jp{タスクコントロールブロック(リードオンリー部)テーブル} */ +#define _KERNEL_TSK_ID2TCB(tskid) (&_kernel_tcb_tbl[(tskid) - _KERNEL_TSK_TMIN_ID]) /**< %jp{コントロールブロックの取得} */ +#define _KERNEL_TSK_CHECK_EXS(tskid) (_kernel_tcb_ro_tbl[(tskid) - _KERNEL_TSK_TMIN_ID].task != NULL) + /**< %jp{オブジェクトの存在チェック} */ + +#else + +/* %jp{ブロック配列管理の場合}%en{block array} */ +extern _KERNEL_T_TCB _kernel_tcb_tbl[]; /**< %jp{タスクコントロールブロックテーブル} */ +#define _KERNEL_TSK_ID2TCB(tskid) (&_kernel_tcb_tbl[(tskid) - _KERNEL_TSK_TMIN_ID]) /**< %jp{コントロールブロックの取得} */ +#define _KERNEL_TSK_CHECK_EXS(tskid) (_kernel_tcb_tbl[(tskid) - _KERNEL_TSK_TMIN_ID].task != NULL) + /**< %jp{オブジェクトの存在チェック} */ + +#endif + +#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY + +/* %jp{ポインタ配列管理の場合}%en{pointer array} */ +extern _KERNEL_T_TCB *_kernel_tcb_tbl[]; /**< %jp{タスクコントロールブロックテーブル} */ +#define _KERNEL_TSK_ID2TCB(tskid) (_kernel_tcb_tbl[(tskid) - _KERNEL_TMIN_TSKID]) /**< %jp{タスクIDからTCB アドレスを取得} */ +#define _KERNEL_TSK_CHECK_EXS(tskid) (_KERNEL_TSK_ID2TCB(tskid) != NULL) /**< %jp{オブジェクトの存在チェック} */ + +#endif + + + + +/* ------------------------------------------ */ +/* Convert Handle */ +/* ------------------------------------------ */ + +#if _KERNEL_TSKHDL_ID /* %en{TSKHDL is ID}%jp{タスクポインタにIDを使う} */ + +#define _KERNEL_TSK_ID2TSKHDL(tskid) (tskid) +#define _KERNEL_TSK_TSKHDL2ID(tskhdl) (tskhdl) +#define _KERNEL_TSK_TCB2TSKHDL(tcb) _KERNEL_TSK_TCB2ID(tcb) +#define _KERNEL_TSK_TSKHDL2TCB(tskhdl) _KERNEL_TSK_ID2TCB(tskhdl) +#define _KERNEL_TSK_GET_TSKHDL(tskid, tcb) (tskid) + +#else /* %en{TSKHDL is Address of TCB}%jp{タスクポインタにTCBのアドレスを使う} */ + +#define _KERNEL_TSK_ID2TSKHDL(tskid) _KERNEL_TSK_ID2TCB(tskid) +#define _KERNEL_TSK_TSKHDL2ID(tskhdl) _KERNEL_TSK_TCB2ID(tskhdl) +#define _KERNEL_TSK_TCB2TSKHDL(tskhdl) (tskhdl) +#define _KERNEL_TSK_TSKHDL2TCB(tskhdl) (tskhdl) +#define _KERNEL_TSK_GET_TSKHDL(tskid, tcb) (tcb) + +#endif + + + +/* ------------------------------------------ */ +/* Accessor for TCB */ +/* ------------------------------------------ */ + +/* tcb_ro */ +#if !_KERNEL_TCB_SPLIT_RO +#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb) (tcb) +#else +#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY /* %jp{TCBを単純配列で管理}%en{array of block} */ +#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb) (&_kernel_tcb_ro_tbl[(tskid)]) +#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY /* %jp{TCBをポインタ配列で管理}%en{array of pointer} */ +#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb) ((tcb)->tcb_ro) +#endif +#endif + + +/* ctxcb */ +#define _KERNEL_TSK_GET_CTXCB(tcb) (&(tcb)->ctxcb) + +/* que */ +#if _KERNEL_TCB_QUE +#define _KERNEL_TSK_SET_QUE(tcb, x) do { (tcb)->pk_que = (_KERNEL_T_QUE *)(x); } while(0) +#define _KERNEL_TSK_GET_QUE(tcb) ((_KERNEL_T_QUE *)(tcb)->pk_que) +#else /* %jp{TCBに所属キューの情報を持たせない場合は別情報からの探索で求める} */ +#define _KERNEL_TSK_SET_QUE(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_QUE(tcb) _kernel_get_que(tcb) +#endif + +/* tskstat */ +#if _KERNEL_TCB_TSKSTAT +#define _KERNEL_TSK_SET_TSKSTAT(tcb, x) do { (tcb)->tskstat = (_KERNEL_TCB_T_TSKSTAT)(x); } while(0) +#define _KERNEL_TSK_GET_TSKSTAT(tcb) ((_KERNEL_TSK_T_TSKSTAT)(tcb)->tskstat) +#else +#define _KERNEL_TSK_SET_TSKSTAT(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_TSKSTAT(tcb) 0 +#endif + +/* tskpri */ +#if _KERNEL_TCB_TSKPRI /* %jp{通常のTCBへのアクセサ} */ +#define _KERNEL_TSK_SET_TSKPRI(tcb, x) do { (tcb)->tskpri = (x); } while(0) +#define _KERNEL_TSK_GET_TSKPRI(tcb) ((tcb)->tskpri) +#else +#if _KERNEL_TCB_ITSKPRI /* %jp{優先度固定(ROM配置)時のアクセサ} */ +#define _KERNEL_TSK_SET_TSKPRI(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_TSKPRI(tcb) ((tcb)->itskpri) +#else /* %jp{優先度未使用時(全てFIFO順)は1に固定する} */ +#define _KERNEL_TSK_SET_TSKPRI(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_TSKPRI(tcb) (1) +#endif +#endif + +/* tskbpri */ +#if _KERNEL_TCB_TSKBPRI +#define _KERNEL_TSK_SET_TSKBPRI(tcb, x) do { (tcb)->tskbpri = (x); } while(0) +#define _KERNEL_TSK_GET_TSKBPRI(tcb) ((tcb)->tskbpri) +#else +#define _KERNEL_TSK_SET_TSKBPRI(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_TSKBPRI(tcb) _KERNEL_TSK_GET_TSKPRI(tcb) +#endif + +/* tskwait */ +#if _KERNEL_TCB_TSKWAIT +#define _KERNEL_TSK_SET_TSKWAIT(tcb, x) do { (tcb)->tskwait = (x); } while(0) +#define _KERNEL_TSK_GET_TSKWAIT(tcb) ((tcb)->tskwait) +#else +#define _KERNEL_TSK_SET_TSKWAIT(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_TSKWAIT(tcb) (0) +#endif + +/* wobjid */ +#if _KERNEL_TCB_WOBJID +#define _KERNEL_TSK_SET_WOBJID(tcb, x) do { (tcb)->wobjid = (x); } while(0) +#define _KERNEL_TSK_GET_WOBJID(tcb) ((tcb)->wobjid) +#else +#define _KERNEL_TSK_SET_WOBJID(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_WOBJID(tcb) (0) +#endif + +/* actcnt */ +#if _KERNEL_TCB_ACTCNT +#define _KERNEL_TSK_SET_ACTCNT(tcb, x) do { (tcb)->actcnt = (x); } while(0) +#define _KERNEL_TSK_GET_ACTCNT(tcb) ((tcb)->actcnt) +#else +#define _KERNEL_TSK_SET_ACTCNT(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_ACTCNT(tcb) (0) +#endif + +/* wupcnt */ +#if _KERNEL_TCB_WUPCNT +#define _KERNEL_TSK_SET_WUPCNT(tcb, x) do { (tcb)->wupcnt = (x); } while(0) +#define _KERNEL_TSK_GET_WUPCNT(tcb) ((tcb)->wupcnt) +#else +#define _KERNEL_TSK_SET_WUPCNT(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_WUPCNT(tcb) (0) +#endif + +/* suscnt */ +#if _KERNEL_TCB_SUSCNT +#define _KERNEL_TSK_SET_SUSCNT(tcb, x) do { (tcb)->suscnt = (x); } while(0) +#define _KERNEL_TSK_GET_SUSCNT(tcb) ((tcb)->suscnt) +#else +#define _KERNEL_TSK_SET_SUSCNT(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_SUSCNT(tcb) (0) +#endif + +/* ercd */ +#if _KERNEL_TCB_ERCD +#define _KERNEL_TSK_SET_ERCD(tcb, x) do { (tcb)->ercd = (x); } while(0) +#define _KERNEL_TSK_GET_ERCD(tcb) ((tcb)->ercd) +#else +#define _KERNEL_TSK_SET_ERCD(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_ERCD(tcb) (E_OK) +#endif + +/* data */ +#if _KERNEL_TCB_DATA +#define _KERNEL_TSK_SET_DATA(tcb, x) do { (tcb)->data = (x); } while(0) +#define _KERNEL_TSK_GET_DATA(tcb) ((tcb)->data) +#else +#define _KERNEL_TSK_SET_DATA(tcb, x) do { } while(0) +#define _KERNEL_TSK_GET_DATA(tcb) (0) +#endif + + +/* tskid */ +#if _KERNEL_TCB_TSKID +#define _KERNEL_TSK_SET_TSKID(tcb_ro, x) do { (tcb_ro)->tskid = (x); } while(0) +#define _KERNEL_TSK_GET_TSKID(tcb_ro) ((tcb_ro)->tskid) +#else +#define _KERNEL_TSK_SET_TSKID(tcb_ro, x) do { } while(0) +#define _KERNEL_TSK_GET_TSKID(tcb_ro) (0) +#endif + +/* tskatr */ +#if _KERNEL_TCB_TSKATR +#define _KERNEL_TSK_SET_TSKATR(tcb_ro, x) do { (tcb_ro)->tskatr = (x); } while(0) +#define _KERNEL_TSK_GET_TSKATR(tcb_ro) ((tcb_ro)->tskatr) +#else /* %jp{tskatr未使用時はTA_HLNGに固定する} */ +#define _KERNEL_TSK_SET_TSKATR(tcb_ro, x) do { } while(0) +#define _KERNEL_TSK_GET_TSKATR(tcb_ro) (TA_HLNG) +#endif + +/* exinf */ +#if _KERNEL_TCB_EXINF +#define _KERNEL_TSK_SET_EXINF(tcb_ro, x) do { (tcb_ro)->exinf = (x); } while(0) +#define _KERNEL_TSK_GET_EXINF(tcb_ro) ((tcb_ro)->exinf) +#else +#define _KERNEL_TSK_SET_EXINF(tcb_ro, x) do { } while(0) +#define _KERNEL_TSK_GET_EXINF(tcb_ro) (0) +#endif + +/* task */ +#if _KERNEL_TCB_TASK +#define _KERNEL_TSK_SET_TASK(tcb_ro, x) do { (tcb_ro)->task = (x); } while(0) +#define _KERNEL_TSK_GET_TASK(tcb_ro) ((tcb_ro)->task) +#else +#define _KERNEL_TSK_SET_TASK(tcb_ro, x) do { } while(0) +#define _KERNEL_TSK_GET_TASK(tcb_ro) (0) +#endif + +/* tskipri */ +#if _KERNEL_TCB_ITSKPRI +#define _KERNEL_TSK_SET_ITSKPRI(tcb_ro, x) do { (tcb_ro)->itskpri = (x); } while(0) +#define _KERNEL_TSK_GET_ITSKPRI(tcb_ro) ((tcb_ro)->itskpri) +#else /* %jp{tskatr未使用時はTA_HLNGに固定する} */ +#define _KERNEL_TSK_SET_ITSKPRI(tcb_ro, x) do { } while(0) +#define _KERNEL_TSK_GET_ITSKPRI(tcb_ro) (1) +#endif + +/* stksz */ +#if _KERNEL_TCB_STKSZ +#define _KERNEL_TSK_SET_STKSZ(tcb_ro, x) do { (tcb_ro)->stksz = (x); } while(0) +#define _KERNEL_TSK_GET_STKSZ(tcb_ro) ((tcb_ro)->stksz) +#else +#define _KERNEL_TSK_SET_STKSZ(tcb_ro, x) do { } while(0) +#define _KERNEL_TSK_GET_STKSZ(tcb_ro) (0) +#endif + +/* stk */ +#if _KERNEL_TCB_STK +#define _KERNEL_TSK_SET_STK(tcb_ro, x) do { (tcb_ro)->stk = (x); } while(0) +#define _KERNEL_TSK_GET_STK(tcb_ro) ((tcb_ro)->stk) +#else +#define _KERNEL_TSK_SET_STK(tcb_ro, x) do { } while(0) +#define _KERNEL_TSK_GET_STK(tcb_ro) (0) +#endif + +/* isp */ +#if _KERNEL_TCB_ISP +#define _KERNEL_TSK_SET_ISP(tcb_ro, x) do { (tcb_ro)->isp = (x); } while(0) +#define _KERNEL_TSK_GET_ISP(tcb_ro) ((tcb_ro)->isp) +#else +#define _KERNEL_TSK_SET_ISP(tcb_ro, x) do { } while(0) +#define _KERNEL_TSK_GET_ISP(tcb_ro) ((VP)((UB *)_KERNEL_TSK_GET_STK(tcb_ro) + _KERNEL_TSK_GET_STKSZ(tcb_ro))) +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + +ER _kernel_cre_tsk(ID tskid, const T_CTSK *pk_ctsk); + +#ifdef __cplusplus +} +#endif + + + +#endif /* _KERNEL__object__tskobj_h__ */ + + + +/* end of file */ diff --git a/kernel/include/parser/parserr.h b/kernel/include/parser/parserr.h new file mode 100755 index 0000000..4a56896 --- /dev/null +++ b/kernel/include/parser/parserr.h @@ -0,0 +1,412 @@ +/** + * Hyper Operating System V4 Advance + * + * @file parserr.h + * @brief %jp{エラー処理コンフィギュレーションの解析}%en{error configulation parser} + * + * @version $Id: parserr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__parser__parserr_h__ +#define _KERNEL__parser__parserr_h__ + + + +/* cre_tsk */ +/* acre_tsk */ +/* del_tsk */ + +/* act_tsk */ +#define _KERNEL_SPT_ACT_TSK_E_ID _KERNEL_CFG_ACT_TSK_E_ID + +/* iact_tsk */ +/* can_act */ +/* sta_tsk */ +/* ext_tsk */ +/* exd_tsk */ +/* ter_tsk */ +/* chg_pri */ +/* get_pri */ +/* ref_tsk */ +#define _KERNEL_SPT_REF_TSK_E_ID _KERNEL_CFG_REF_TSK_E_ID + +/* ref_tst */ + +/* slp_tsk */ +/* tslp_tsk */ +/* wup_tsk */ +#define _KERNEL_SPT_WUP_TSK_E_ID _KERNEL_CFG_WUP_TSK_E_ID +#define _KERNEL_SPT_WUP_TSK_E_NOEXS _KERNEL_CFG_WUP_TSK_E_NOEXS + +/* iwup_tsk */ +/* can_wup */ +#define _KERNEL_SPT_CAN_WUP_E_ID _KERNEL_CFG_CAN_WUP_E_ID +#define _KERNEL_SPT_CAN_WUP_E_NOEXS _KERNEL_CFG_CAN_WUP_E_NOEXS + +/* rel_wai */ +#define _KERNEL_SPT_REL_WAI_E_ID _KERNEL_CFG_REL_WAI_E_ID +#define _KERNEL_SPT_REL_WAI_E_NOEXS _KERNEL_CFG_REL_WAI_E_NOEXS +/* irel_wai */ +/* sus_tsk */ +/* rsm_tsk */ +/* frsm_tsk */ +/* dly_tsk */ + + + +/* def_tex */ +/* ras_tex */ +/* iras_tex */ +/* dis_tex */ +/* ena_tex */ +/* sns_tex */ +/* ref_tex */ + + +/* cre_sem */ +#define _KERNEL_SPT_CRE_SEM_E_ID _KERNEL_CFG_CRE_SEM_E_ID +#define _KERNEL_SPT_CRE_SEM_E_RSATR _KERNEL_CFG_CRE_SEM_E_RSATR +#define _KERNEL_SPT_CRE_SEM_E_OBJ _KERNEL_CFG_CRE_SEM_E_OBJ +#define _KERNEL_SPT_CRE_SEM_E_NOMEM _KERNEL_CFG_CRE_SEM_E_NOMEM +#define _KERNEL_SPT_CRE_SEM_E_NOSPT _KERNEL_CFG_CRE_SEM_E_NOSPT + +/* acre_sem */ +#define _KERNEL_SPT_ACRE_SEM_E_NOID _KERNEL_CFG_ACRE_SEM_E_NOID +#define _KERNEL_SPT_ACRE_SEM_E_RSATR _KERNEL_CFG_ACRE_SEM_E_RSATR +#define _KERNEL_SPT_ACRE_SEM_E_NOMEM _KERNEL_CFG_ACRE_SEM_E_NOMEM +#define _KERNEL_SPT_ACRE_SEM_E_NOSPT _KERNEL_CFG_ACRE_SEM_E_NOSPT + +/* del_sem */ +#define _KERNEL_SPT_DEL_SEM_E_ID _KERNEL_CFG_DEL_SEM_E_ID +#define _KERNEL_SPT_DEL_SEM_E_NOEXS _KERNEL_CFG_DEL_SEM_E_NOEXS +#define _KERNEL_SPT_DEL_SEM_E_NOSPT _KERNEL_CFG_DEL_SEM_E_NOSPT + +/* sig_sem */ +#define _KERNEL_SPT_SIG_SEM_E_ID _KERNEL_CFG_SIG_SEM_E_ID +#define _KERNEL_SPT_SIG_SEM_E_NOEXS _KERNEL_CFG_SIG_SEM_E_NOEXS +#define _KERNEL_SPT_SIG_SEM_E_QOVR _KERNEL_CFG_SIG_SEM_E_QOVR +#define _KERNEL_SPT_SIG_SEM_E_NOSPT _KERNEL_CFG_SIG_SEM_E_NOSPT +/* isig_sem */ + +/* wai_sem */ +#define _KERNEL_SPT_WAI_SEM_E_ID _KERNEL_CFG_WAI_SEM_E_ID +#define _KERNEL_SPT_WAI_SEM_E_CTX _KERNEL_CFG_WAI_SEM_E_CTX +#define _KERNEL_SPT_WAI_SEM_E_NOEXS _KERNEL_CFG_WAI_SEM_E_NOEXS +#define _KERNEL_SPT_WAI_SEM_E_RLWAI _KERNEL_CFG_WAI_SEM_E_RLWAI +#define _KERNEL_SPT_WAI_SEM_E_DLT _KERNEL_CFG_WAI_SEM_E_DLT +#define _KERNEL_SPT_WAI_SEM_E_NOSPT _KERNEL_CFG_WAI_SEM_E_NOSPT + +/* pol_sem */ +#define _KERNEL_SPT_POL_SEM_E_ID _KERNEL_CFG_POL_SEM_E_ID +#define _KERNEL_SPT_POL_SEM_E_NOEXS _KERNEL_CFG_POL_SEM_E_NOEXS +#define _KERNEL_SPT_POL_SEM_E_TMOUT _KERNEL_CFG_POL_SEM_E_TMOUT +#define _KERNEL_SPT_POL_SEM_E_NOSPT _KERNEL_CFG_POL_SEM_E_NOSPT + +/* twai_sem */ +#define _KERNEL_SPT_TWAI_SEM_E_ID _KERNEL_CFG_TWAI_SEM_E_ID +#define _KERNEL_SPT_TWAI_SEM_E_CTX _KERNEL_CFG_TWAI_SEM_E_CTX +#define _KERNEL_SPT_TWAI_SEM_E_NOEXS _KERNEL_CFG_TWAI_SEM_E_NOEXS +#define _KERNEL_SPT_TWAI_SEM_E_TMOUT _KERNEL_CFG_TWAI_SEM_E_TMOUT +#define _KERNEL_SPT_TWAI_SEM_E_RLWAI _KERNEL_CFG_TWAI_SEM_E_RLWAI +#define _KERNEL_SPT_TWAI_SEM_E_DLT _KERNEL_CFG_TWAI_SEM_E_DLT +#define _KERNEL_SPT_TWAI_SEM_E_NOSPT _KERNEL_CFG_TWAI_SEM_E_NOSPT + +/* _kernel_wai_sem */ +#if _KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED /* %jp{wai_sem, pol_sem, twai_semのコード統合を行うなら} */ +#define _KERNEL_SPT_KWAI_SEM_E_ID (_KERNEL_CFG_TWAI_SEM_E_ID || _KERNEL_CFG_WAI_SEM_E_ID || _KERNEL_CFG_POL_SEM_E_ID) +#define _KERNEL_SPT_KWAI_SEM_E_CTX (_KERNEL_CFG_TWAI_SEM_E_CTX || _KERNEL_CFG_WAI_SEM_E_CTX) +#define _KERNEL_SPT_KWAI_SEM_E_NOEXS (_KERNEL_CFG_TWAI_SEM_E_NOEXS || _KERNEL_CFG_WAI_SEM_E_NOEXS || _KERNEL_CFG_POL_SEM_E_NOEXS) +#define _KERNEL_SPT_KWAI_SEM_E_TMOUT (_KERNEL_CFG_TWAI_SEM_E_TMOUT || _KERNEL_CFG_POL_SEM_E_TMOUT) +#define _KERNEL_SPT_KWAI_SEM_E_RLWAI (_KERNEL_CFG_TWAI_SEM_E_RLWAI || _KERNEL_CFG_WAI_SEM_E_RLWAI) +#define _KERNEL_SPT_KWAI_SEM_E_DLT (_KERNEL_CFG_TWAI_SEM_E_DLT || _KERNEL_CFG_WAI_SEM_E_DLT) +#define _KERNEL_SPT_KWAI_SEM_E_NOSPT _KERNEL_CFG_TWAI_SEM_E_NOSPT +#else +#define _KERNEL_SPT_KWAI_SEM_E_ID _KERNEL_CFG_TWAI_SEM_E_ID +#define _KERNEL_SPT_KWAI_SEM_E_CTX _KERNEL_CFG_TWAI_SEM_E_CTX +#define _KERNEL_SPT_KWAI_SEM_E_NOEXS _KERNEL_CFG_TWAI_SEM_E_NOEXS +#define _KERNEL_SPT_KWAI_SEM_E_TMOUT _KERNEL_CFG_TWAI_SEM_E_TMOUT +#define _KERNEL_SPT_KWAI_SEM_E_RLWAI _KERNEL_CFG_TWAI_SEM_E_RLWAI +#define _KERNEL_SPT_KWAI_SEM_E_DLT _KERNEL_CFG_TWAI_SEM_E_DLT +#define _KERNEL_SPT_KWAI_SEM_E_NOSPT _KERNEL_CFG_TWAI_SEM_E_NOSPT +#endif + +/* ref_sem */ +#define _KERNEL_SPT_REF_SEM_E_ID _KERNEL_CFG_REF_SEM_E_ID +#define _KERNEL_SPT_REF_SEM_E_NOEXS _KERNEL_CFG_REF_SEM_E_NOEXS +#define _KERNEL_SPT_REF_SEM_E_PAR _KERNEL_CFG_REF_SEM_E_PAR +#define _KERNEL_SPT_REF_SEM_E_NOSPT _KERNEL_CFG_REF_SEM_E_NOSPT + + +/* cre_flg */ +#define _KERNEL_SPT_CRE_FLG_E_ID _KERNEL_CFG_CRE_FLG_E_ID +#define _KERNEL_SPT_CRE_FLG_E_RSATR _KERNEL_CFG_CRE_FLG_E_RSATR +#define _KERNEL_SPT_CRE_FLG_E_OBJ _KERNEL_CFG_CRE_FLG_E_OBJ +#define _KERNEL_SPT_CRE_FLG_E_NOMEM _KERNEL_CFG_CRE_FLG_E_NOMEM +#define _KERNEL_SPT_CRE_FLG_E_NOSPT _KERNEL_CFG_CRE_FLG_E_NOSPT + +/* acre_flg */ +#define _KERNEL_SPT_ACRE_FLG_E_NOID _KERNEL_CFG_ACRE_FLG_E_NOID +#define _KERNEL_SPT_ACRE_FLG_E_RSATR _KERNEL_CFG_ACRE_FLG_E_RSATR +#define _KERNEL_SPT_ACRE_FLG_E_NOMEM _KERNEL_CFG_ACRE_FLG_E_NOMEM +#define _KERNEL_SPT_ACRE_FLG_E_NOSPT _KERNEL_CFG_ACRE_FLG_E_NOSPT + +/* del_flg */ +#define _KERNEL_SPT_DEL_FLG_E_ID _KERNEL_CFG_DEL_FLG_E_ID +#define _KERNEL_SPT_DEL_FLG_E_NOEXS _KERNEL_CFG_DEL_FLG_E_NOEXS +#define _KERNEL_SPT_DEL_FLG_E_NOSPT _KERNEL_CFG_DEL_FLG_E_NOSPT + +/* set_flg */ +#define _KERNEL_SPT_SET_FLG_E_ID _KERNEL_CFG_SET_FLG_E_ID +#define _KERNEL_SPT_SET_FLG_E_NOEXS _KERNEL_CFG_SET_FLG_E_NOEXS +#define _KERNEL_SPT_SET_FLG_E_PAR _KERNEL_CFG_SET_FLG_E_PAR +#define _KERNEL_SPT_SET_FLG_E_NOSPT _KERNEL_CFG_SET_FLG_E_NOSPT + +/* iset_flg */ +/* clr_flg */ +#define _KERNEL_SPT_SET_FLG_E_ID _KERNEL_CFG_SET_FLG_E_ID +#define _KERNEL_SPT_SET_FLG_E_NOEXS _KERNEL_CFG_SET_FLG_E_NOEXS +#define _KERNEL_SPT_SET_FLG_E_PAR _KERNEL_CFG_SET_FLG_E_PAR +#define _KERNEL_SPT_SET_FLG_E_NOSPT _KERNEL_CFG_SET_FLG_E_NOSPT + +/* wai_flg */ +#define _KERNEL_SPT_WAI_FLG_E_ID _KERNEL_CFG_WAI_FLG_E_ID +#define _KERNEL_SPT_WAI_FLG_E_CTX _KERNEL_CFG_WAI_FLG_E_CTX +#define _KERNEL_SPT_WAI_FLG_E_NOEXS _KERNEL_CFG_WAI_FLG_E_NOEXS +#define _KERNEL_SPT_WAI_FLG_E_PAR _KERNEL_CFG_WAI_FLG_E_PAR +#define _KERNEL_SPT_WAI_FLG_E_ILUSE _KERNEL_CFG_WAI_FLG_E_ILUSE +#define _KERNEL_SPT_WAI_FLG_E_RLWAI _KERNEL_CFG_WAI_FLG_E_RLWAI +#define _KERNEL_SPT_WAI_FLG_E_DLT _KERNEL_CFG_WAI_FLG_E_DLT +#define _KERNEL_SPT_WAI_FLG_E_NOSPT _KERNEL_CFG_WAI_FLG_E_NOSPT + +/* pol_flg */ +#define _KERNEL_SPT_WAI_FLG_E_ID _KERNEL_CFG_WAI_FLG_E_ID +#define _KERNEL_SPT_WAI_FLG_E_NOEXS _KERNEL_CFG_WAI_FLG_E_NOEXS +#define _KERNEL_SPT_WAI_FLG_E_PAR _KERNEL_CFG_WAI_FLG_E_PAR +#define _KERNEL_SPT_WAI_FLG_E_TMOUT _KERNEL_CFG_WAI_FLG_E_TMOUT +#define _KERNEL_SPT_WAI_FLG_E_NOSPT _KERNEL_CFG_WAI_FLG_E_NOSPT + +/* twai_flg */ +#if _KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED /* %jp{twai_flgへの集約を行う場合} */ +#define _KERNEL_SPT_TWAI_FLG_E_ID (_KERNEL_CFG_TWAI_FLG_E_ID || _KERNEL_CFG_WAI_FLG_E_ID || _KERNEL_CFG_POL_FLG_E_ID) +#define _KERNEL_SPT_TWAI_FLG_E_CTX (_KERNEL_CFG_TWAI_FLG_E_CTX || _KERNEL_CFG_WAI_FLG_E_CTX) +#define _KERNEL_SPT_TWAI_FLG_E_NOEXS (_KERNEL_CFG_TWAI_FLG_E_NOEXS || _KERNEL_CFG_WAI_FLG_E_NOEXS || _KERNEL_CFG_POL_FLG_E_NOEXS) +#define _KERNEL_SPT_TWAI_FLG_E_PAR (_KERNEL_CFG_TWAI_FLG_E_PAR || _KERNEL_CFG_WAI_FLG_E_PAR || _KERNEL_CFG_POL_FLG_E_PAR) +#define _KERNEL_SPT_TWAI_FLG_E_ILUSE (_KERNEL_CFG_TWAI_FLG_E_ILUSE || _KERNEL_CFG_WAI_FLG_E_ILUSE) +#define _KERNEL_SPT_TWAI_FLG_E_TMOUT (_KERNEL_CFG_TWAI_FLG_E_TMOUT || _KERNEL_CFG_POL_FLG_E_TMOUT) +#define _KERNEL_SPT_TWAI_FLG_E_RLWAI (_KERNEL_CFG_TWAI_FLG_E_RLWAI || _KERNEL_CFG_WAI_FLG_E_RLWAI) +#define _KERNEL_SPT_TWAI_FLG_E_DLT (_KERNEL_CFG_TWAI_FLG_E_DLT || _KERNEL_CFG_WAI_FLG_E_DLT) +#define _KERNEL_SPT_TWAI_FLG_E_NOSPT _KERNEL_CFG_TWAI_FLG_E_NOSPT +#else +#define _KERNEL_SPT_TWAI_FLG_E_ID _KERNEL_CFG_TWAI_FLG_E_ID +#define _KERNEL_SPT_TWAI_FLG_E_CTX _KERNEL_CFG_TWAI_FLG_E_CTX +#define _KERNEL_SPT_TWAI_FLG_E_NOEXS _KERNEL_CFG_TWAI_FLG_E_NOEXS +#define _KERNEL_SPT_TWAI_FLG_E_PAR _KERNEL_CFG_TWAI_FLG_E_PAR +#define _KERNEL_SPT_TWAI_FLG_E_ILUSE _KERNEL_CFG_TWAI_FLG_E_ILUSE +#define _KERNEL_SPT_TWAI_FLG_E_TMOUT _KERNEL_CFG_TWAI_FLG_E_TMOUT +#define _KERNEL_SPT_TWAI_FLG_E_RLWAI _KERNEL_CFG_TWAI_FLG_E_RLWAI +#define _KERNEL_SPT_TWAI_FLG_E_DLT _KERNEL_CFG_TWAI_FLG_E_DLT +#define _KERNEL_SPT_TWAI_FLG_E_NOSPT _KERNEL_CFG_TWAI_FLG_E_NOSPT +#endif + +/* ref_flg */ +#define _KERNEL_SPT_REF_FLG_E_ID _KERNEL_CFG_REF_FLG_E_ID +#define _KERNEL_SPT_REF_FLG_E_NOEXS _KERNEL_CFG_REF_FLG_E_NOEXS +#define _KERNEL_SPT_REF_FLG_E_PAR _KERNEL_CFG_REF_FLG_E_PAR +#define _KERNEL_SPT_REF_FLG_E_NOSPT _KERNEL_CFG_REF_FLG_E_NOSPT + + +/* cre_dtq */ +/* acre_dtq */ +/* del_dtq */ +/* snd_dtq */ +/* ipsnd_dtq */ +/* tsnd_dtq */ +/* fsnd_dtq */ +/* ifsnd_dtq */ +/* rcv_dtq */ +/* prcv_dtq */ +/* trcv_dtq */ +/* ref_dtq */ + + +/* cre_mbx */ +#define _KERNEL_SPT_CRE_MBX_E_ID _KERNEL_CFG_CRE_MBX_E_ID +#define _KERNEL_SPT_CRE_MBX_E_RSATR _KERNEL_CFG_CRE_MBX_E_RSATR +#define _KERNEL_SPT_CRE_MBX_E_OBJ _KERNEL_CFG_CRE_MBX_E_OBJ +#define _KERNEL_SPT_CRE_MBX_E_NOMEM _KERNEL_CFG_CRE_MBX_E_NOMEM +#define _KERNEL_SPT_CRE_MBX_E_NOSPT _KERNEL_CFG_CRE_MBX_E_NOSPT + +/* acre_mbx */ +#define _KERNEL_SPT_ACRE_MBX_E_NOID _KERNEL_CFG_ACRE_MBX_E_NOID +#define _KERNEL_SPT_ACRE_MBX_E_RSATR _KERNEL_CFG_ACRE_MBX_E_RSATR +#define _KERNEL_SPT_ACRE_MBX_E_NOMEM _KERNEL_CFG_ACRE_MBX_E_NOMEM +#define _KERNEL_SPT_ACRE_MBX_E_NOSPT _KERNEL_CFG_ACRE_MBX_E_NOSPT + +/* del_mbx */ +#define _KERNEL_SPT_DEL_MBX_E_ID _KERNEL_CFG_DEL_MBX_E_ID +#define _KERNEL_SPT_DEL_MBX_E_NOEXS _KERNEL_CFG_DEL_MBX_E_NOEXS +#define _KERNEL_SPT_DEL_MBX_E_NOSPT _KERNEL_CFG_DEL_MBX_E_NOSPT + +/* snd_mbx */ +/* rcv_mbx */ +/* prcv_mbx */ +/* trcv_mbx */ +/* ref_mbx */ + + +/* cre_mtx */ +/* acre_mtx */ +/* del_mtx */ +/* loc_mtx */ +/* ploc_mtx */ +/* tloc_mtx */ +/* unl_mtx */ +/* ref_mtx */ + + +/* cre_mbf */ +/* acre_mbf */ +/* del_mbf */ +/* snd_mbf */ +/* psnd_mbf */ +/* tsnd_mbf */ +/* rcv_mbf */ +/* prcv_mbf */ +/* trcv_mbf */ +/* ref_mbf */ + + +/* cre_por */ +/* acre_por */ +/* del_por */ +/* cal_por */ +/* tcal_por */ +/* acp_por */ +/* pacp_por */ +/* tacp_por */ +/* fwd_por */ +/* rpl_rdv */ +/* ref_por */ +/* ref_rdv */ + + +/* cre_mpf */ +#define _KERNEL_SPT_CRE_MPF_E_ID _KERNEL_CFG_CRE_MPF_E_ID +#define _KERNEL_SPT_CRE_MPF_E_RSATR _KERNEL_CFG_CRE_MPF_E_RSATR +#define _KERNEL_SPT_CRE_MPF_E_OBJ _KERNEL_CFG_CRE_MPF_E_OBJ +#define _KERNEL_SPT_CRE_MPF_E_NOMEM _KERNEL_CFG_CRE_MPF_E_NOMEM +#define _KERNEL_SPT_CRE_MPF_E_NOSPT _KERNEL_CFG_CRE_MPF_E_NOSPT + +/* acre_mpf */ +#define _KERNEL_SPT_ACRE_MPF_E_NOID _KERNEL_CFG_ACRE_MPF_E_NOID +#define _KERNEL_SPT_ACRE_MPF_E_RSATR _KERNEL_CFG_ACRE_MPF_E_RSATR +#define _KERNEL_SPT_ACRE_MPF_E_NOMEM _KERNEL_CFG_ACRE_MPF_E_NOMEM +#define _KERNEL_SPT_ACRE_MPF_E_NOSPT _KERNEL_CFG_ACRE_MPF_E_NOSPT + +/* del_mpf */ +#define _KERNEL_SPT_DEL_MPF_E_ID _KERNEL_CFG_DEL_MPF_E_ID +#define _KERNEL_SPT_DEL_MPF_E_NOEXS _KERNEL_CFG_DEL_MPF_E_NOEXS +#define _KERNEL_SPT_DEL_MPF_E_NOSPT _KERNEL_CFG_DEL_MPF_E_NOSPT + + +/* get_mpf */ +#define _KERNEL_SPT_GET_MPF_E_ID _KERNEL_CFG_GET_MPF_E_ID +#define _KERNEL_SPT_GET_MPF_E_CTX _KERNEL_CFG_GET_MPF_E_CTX +#define _KERNEL_SPT_GET_MPF_E_NOEXS _KERNEL_CFG_GET_MPF_E_NOEXS +#define _KERNEL_SPT_GET_MPF_E_PAR _KERNEL_CFG_GET_MPF_E_PAR +#define _KERNEL_SPT_GET_MPF_E_ILUSE _KERNEL_CFG_GET_MPF_E_ILUSE +#define _KERNEL_SPT_GET_MPF_E_RLWAI _KERNEL_CFG_GET_MPF_E_RLWAI +#define _KERNEL_SPT_GET_MPF_E_DLT _KERNEL_CFG_GET_MPF_E_DLT +#define _KERNEL_SPT_GET_MPF_E_NOSPT _KERNEL_CFG_GET_MPF_E_NOSPT + +/* pget_mpf */ +/* tget_mpf */ +/* rel_mpf */ +/* ref_mpf */ + + +/* cre_mpl */ +/* acre_mpl */ +/* del_mpl */ +/* get_mpl */ +/* pget_mpl */ +/* tget_mpl */ +/* rel_mpl */ +/* ref_mpl */ + + +/* set_tim */ +/* get_tim */ +/* isig_tim */ + + +/* cre_cyc */ +/* acre_cyc */ +/* del_cyc */ +/* sta_cyc */ +/* stp_cyc */ +/* ref_cyc */ + + +/* cre_alm */ +/* acre_alm */ +/* del_alm */ +/* sta_alm */ +/* stp_alm */ +/* ref_alm */ + + +/* def_ovr */ +/* sta_ovr */ +/* stp_ovr */ +/* ref_ovr */ + + +/* rot_rdq */ +/* irot_rdq */ +/* get_tid */ +/* iget_tid */ +/* loc_cpu */ +/* iloc_cpu */ +/* unl_cpu */ +/* ilnl_cpu */ +/* dis_dsp */ +/* ena_dsp */ +/* sns_ctx */ +/* sns_loc */ +/* sns_dsp */ +/* sns_dpn */ +/* ref_sys */ + + +/* def_inh */ +/* cre_isr */ +/* acre_isr */ +/* del_isr */ +/* ref_isr */ +/* dis_int */ +/* ena_int */ +/* chg_ilv */ +/* get_ilv */ + + +/* def_svc */ +/* cal_svc */ + + +/* def_exc */ +/* ref_cfg */ +/* ref_ver */ + + + + +#endif /* _KERNEL__parser__parserr_h__ */ + + +/* end of file */ diff --git a/kernel/include/parser/parshok.h b/kernel/include/parser/parshok.h new file mode 100755 index 0000000..3c50c23 --- /dev/null +++ b/kernel/include/parser/parshok.h @@ -0,0 +1,24 @@ +/** + * Hyper Operating System V4 Advance + * + * @file parshok.h + * @brief %jp{カーネルフックのコンフィギュレーション解析} + * + * @version $Id: parshok.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__parser__parshok_h__ +#define _KERNEL__parser__parshok_h__ + + + +#endif /* _KERNEL__parser__parshok_h__ */ + + + +/* end of file */ diff --git a/kernel/include/parser/parsknl.h b/kernel/include/parser/parsknl.h new file mode 100755 index 0000000..6043c24 --- /dev/null +++ b/kernel/include/parser/parsknl.h @@ -0,0 +1,943 @@ +/** + * Hyper Operating System V4 Advance + * + * @file parsknl.h + * @brief %jp{カーネルコンフィギュレーションの解析}%en{kernel configuration parser} + * + * @version $Id: parsknl.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef _KERNEL__parser__parsknl_h__ +#define _KERNEL__parser__parsknl_h__ + + +/* ---------------------------------------------- */ +/* Processor Attribute */ +/* ---------------------------------------------- */ + +/* 割り込み用スタックの本数 */ +#ifndef _KERNEL_PROCATR_INTSTK_NUM +#define _KERNE_INTSTK_NUM 1 +#else +#define _KERNE_INTSTK_NUM _KERNEL_PROCATR_INTSTK_NUM +#endif + + +/* ---------------------------------------------- */ +/* Optimize */ +/* ---------------------------------------------- */ + +/* %jp{数値の小さいものを優先して最適化する} */ +#define _KERNEL_OPT_RW_SIZE _KERNEL_CFG_OPT_RW_SIZE /**< %jp{リードライトデータサイズ(通常はRAM配置)の優先度} */ +#define _KERNEL_OPT_RO_SIZE _KERNEL_CFG_OPT_RO_SIZE /**< %jp{リードオンリーデータ(通常はROM配置)のサイズの優先度} */ +#define _KERNEL_OPT_CODE_SIZE _KERNEL_CFG_OPT_CODE_SIZE /**< %jp{コードサイズ(通常はROM配置)の優先度} */ +#define _KERNEL_OPT_SPEED _KERNEL_CFG_OPT_SPEED /**< %jp{実行速度の優先度} */ + + +/* %jp{コードサイズ/速度を重視しない限り、コントロールブロックはサイズ優先} */ +#if (_KERNEL_OPT_RW_SIZE <= _KERNEL_OPT_CODE_SIZE) && (_KERNEL_OPT_RW_SIZE <= _KERNEL_OPT_SPEED) +#define _KERNEL_OPT_CB_SIZE TRUE +#else +#define _KERNEL_OPT_CB_SIZE FALSE +#endif + +/* %jp{符号付きが得意なプロセッサなら符号付きを優先して最適化する} */ +#if defined(_KERNEL_PROCATR_SIGNED_INT) && _KERNEL_PROCATR_SIGNED_INT > 0 +#define _KERNEL_OPT_SIGNED_INT TRUE +#else +#define _KERNEL_OPT_SIGNED_INT FALSE +#endif + + + +#if _KERNEL_CFG_TMAX_ACTCNT < 0 +#define _KERNEL_TMAX_ACTCNT _KERNEL_TMAX_UINT +#else +#define _KERNEL_TMAX_ACTCNT _KERNEL_CFG_TMAX_ACTCNT +#endif + +#if _KERNEL_CFG_TMAX_WUPCNT < 0 +#define _KERNEL_TMAX_WUPCNT _KERNEL_TMAX_UINT +#else +#define _KERNEL_TMAX_WUPCNT _KERNEL_CFG_TMAX_WUPCNT +#endif + +#if _KERNEL_CFG_TMAX_SUSCNT < 0 +#define _KERNEL_TMAX_SUSCNT _KERNEL_TMAX_UINT +#else +#define _KERNEL_TMAX_SUSCNT _KERNEL_CFG_TMAX_SUSCNT +#endif + + + + +/* ---------------------------------------------- */ +/* Kernel */ +/* ---------------------------------------------- */ + +/* %jp{遅延プロシージャーコール(きっと当分未実装)} */ +#define _KERNEL_SPT_DPC _KERNEL_CFG_DPC /**< Deferred Procedure Call */ + +/* %jp{対称型マルチプロセッサ対応(きっと永遠に未実装)} */ +#define _KERNEL_SPT_SMP _KERNEL_CFG_SMP /**< Symmetric Multiple Processor */ + +/* %jp{多重割り込み} */ +#define _KERNEL_SPT_MULTIPLE_INT _KERNEL_CFG_MULTIPLE_INT + + + +/* %jp{システムタスク(アイドル)にTCBを割り当てる} */ +#define _KERNEL_SYSTSK_TCB _KERNEL_CFG_SYSTSK_TCB + +/* %jp{実行時にタスクをレディーキューに繋げたままとする} */ +#define _KERNEL_RUNTSK_ON_RDQ _KERNEL_CFG_RUNTSK_ON_RDQ + +/* %jp{サスペンド時にタスクをレディーキューに繋げたままとする} */ +#define _KERNEL_SUSTSK_ON_RDQ _KERNEL_CFG_SUSTSK_ON_RDQ + + + + +/* -------------------------------------------------------------------- */ +/* service call support */ +/* -------------------------------------------------------------------- */ + +/* Task management functions */ +#define _KERNEL_SPT_CRE_TSK _KERNEL_CFG_CRE_TSK /* cre_tsk */ +#define _KERNEL_SPT_ACRE_TSK _KERNEL_CFG_ACRE_TSK /* acre_tsk */ +#define _KERNEL_SPT_DEL_TSK _KERNEL_CFG_DEL_TSK /* del_tsk */ +#define _KERNEL_SPT_ACT_TSK _KERNEL_CFG_ACT_TSK /* act_tsk */ +#define _KERNEL_SPT_IACT_TSK _KERNEL_CFG_IACT_TSK /* iact_tsk */ +#define _KERNEL_SPT_CAN_ACT _KERNEL_CFG_CAN_ACT /* can_act */ +#define _KERNEL_SPT_STA_TSK _KERNEL_CFG_STA_TSK /* sta_tsk */ +#define _KERNEL_SPT_EXT_TSK _KERNEL_CFG_EXT_TSK /* ext_tsk */ +#define _KERNEL_SPT_EXD_TSK _KERNEL_CFG_EXD_TSK /* exd_tsk */ +#define _KERNEL_SPT_TER_TSK _KERNEL_CFG_TER_TSK /* ter_tsk */ +#define _KERNEL_SPT_CHG_PRI _KERNEL_CFG_CHG_PRI /* chg_pri */ +#define _KERNEL_SPT_GET_PRI _KERNEL_CFG_GET_PRI /* get_pri */ +#define _KERNEL_SPT_REF_TSK _KERNEL_CFG_REF_TSK /* ref_tsk */ +#define _KERNEL_SPT_REF_TST _KERNEL_CFG_REF_TST /* ref_tst */ + +/* Task dependent synchronization functions */ +#define _KERNEL_SPT_SLP_TSK _KERNEL_CFG_SLP_TSK /* slp_tsk */ +#define _KERNEL_SPT_TSLP_TSK _KERNEL_CFG_TSLP_TSK /* tslp_tsk */ +#define _KERNEL_SPT_WUP_TSK _KERNEL_CFG_WUP_TSK /* wup_tsk */ +#define _KERNEL_SPT_IWUP_TSK _KERNEL_CFG_IWUP_TSK /* iwup_tsk */ +#define _KERNEL_SPT_CAN_WUP _KERNEL_CFG_CAN_WUP /* can_wup */ +#define _KERNEL_SPT_REL_WAI _KERNEL_CFG_REL_WAI /* rel_wai */ +#define _KERNEL_SPT_IREL_WAI _KERNEL_CFG_IREL_WAI /* irel_wai */ +#define _KERNEL_SPT_SUS_TSK _KERNEL_CFG_SUS_TSK /* sus_tsk */ +#define _KERNEL_SPT_RSM_TSK _KERNEL_CFG_RSM_TSK /* rsm_tsk */ +#define _KERNEL_SPT_FRSM_TSK _KERNEL_CFG_FRSM_TSK /* frsm_tsk */ +#define _KERNEL_SPT_DLY_TSK _KERNEL_CFG_DLY_TSK /* dly_tsk */ + + +/* Task exception handling functions */ +#define _KERNEL_SPT_DEF_TEX _KERNEL_CFG_DEF_TEX /* def_tex */ +#define _KERNEL_SPT_RAS_TEX _KERNEL_CFG_RAS_TEX /* ras_tex */ +#define _KERNEL_SPT_IRAS_TEX _KERNEL_CFG_IRAS_TEX /* iras_tex */ +#define _KERNEL_SPT_DIS_TEX _KERNEL_CFG_DIS_TEX /* dis_tex */ +#define _KERNEL_SPT_ENA_TEX _KERNEL_CFG_ENA_TEX /* ena_tex */ +#define _KERNEL_SPT_SNS_TEX _KERNEL_CFG_SNS_TEX /* sns_tex */ +#define _KERNEL_SPT_REF_TEX _KERNEL_CFG_REF_TEX /* ref_tex */ + + +/* Semaphores */ +#define _KERNEL_SPT_CRE_SEM _KERNEL_CFG_CRE_SEM /* cre_sem */ +#define _KERNEL_SPT_ACRE_SEM _KERNEL_CFG_ACRE_SEM /* acre_sem */ +#define _KERNEL_SPT_DEL_SEM _KERNEL_CFG_DEL_SEM /* del_sem */ +#define _KERNEL_SPT_SIG_SEM _KERNEL_CFG_SIG_SEM /* sig_sem */ +#define _KERNEL_SPT_ISIG_SEM _KERNEL_CFG_ISIG_SEM /* isig_sem */ +#define _KERNEL_SPT_WAI_SEM _KERNEL_CFG_WAI_SEM /* wai_sem */ +#define _KERNEL_SPT_POL_SEM _KERNEL_CFG_POL_SEM /* pol_sem */ +#define _KERNEL_SPT_TWAI_SEM _KERNEL_CFG_TWAI_SEM /* twai_sem */ +#define _KERNEL_SPT_REF_SEM _KERNEL_CFG_REF_SEM /* ref_sem */ + +#if _KERNEL_SPT_TWAI_SEM || (_KERNEL_SPT_WAI_SEM && _KERNEL_SPT_POL_SEM) +#define _KERNEL_SPT_KWAI_SEM TRUE +#else +#define _KERNEL_SPT_KWAI_SEM FALSE +#endif + + +/* Eventflags */ +#define _KERNEL_SPT_CRE_FLG _KERNEL_CFG_CRE_FLG /* cre_flg */ +#define _KERNEL_SPT_ACRE_FLG _KERNEL_CFG_ACRE_FLG /* acre_flg */ +#define _KERNEL_SPT_DEL_FLG _KERNEL_CFG_DEL_FLG /* del_flg */ +#define _KERNEL_SPT_SET_FLG _KERNEL_CFG_SET_FLG /* set_flg */ +#define _KERNEL_SPT_ISET_FLG _KERNEL_CFG_ISET_FLG /* iset_flg */ +#define _KERNEL_SPT_CLR_FLG _KERNEL_CFG_CLR_FLG /* clr_flg */ +#define _KERNEL_SPT_WAI_FLG _KERNEL_CFG_WAI_FLG /* wai_flg */ +#define _KERNEL_SPT_POL_FLG _KERNEL_CFG_POL_FLG /* pol_flg */ +#define _KERNEL_SPT_TWAI_FLG _KERNEL_CFG_TWAI_FLG /* twai_flg */ +#define _KERNEL_SPT_REF_FLG _KERNEL_CFG_REF_FLG /* ref_flg */ + +/* Data queues */ +#define _KERNEL_SPT_CRE_DTQ _KERNEL_CFG_CRE_DTQ /* cre_dtq */ +#define _KERNEL_SPT_ACRE_DTQ _KERNEL_CFG_ACRE_DTQ /* acre_dtq */ +#define _KERNEL_SPT_DEL_DTQ _KERNEL_CFG_DEL_DTQ /* del_dtq */ +#define _KERNEL_SPT_SND_DTQ _KERNEL_CFG_SND_DTQ /* snd_dtq */ +#define _KERNEL_SPT_IPSND_DT _KERNEL_CFG_IPSND_DT /* ipsnd_dtq */ +#define _KERNEL_SPT_TSND_DTQ _KERNEL_CFG_TSND_DTQ /* tsnd_dtq */ +#define _KERNEL_SPT_FSND_DTQ _KERNEL_CFG_FSND_DTQ /* fsnd_dtq */ +#define _KERNEL_SPT_IFSND_DT _KERNEL_CFG_IFSND_DT /* ifsnd_dtq */ +#define _KERNEL_SPT_RCV_DTQ _KERNEL_CFG_RCV_DTQ /* rcv_dtq */ +#define _KERNEL_SPT_PRCV_DTQ _KERNEL_CFG_PRCV_DTQ /* prcv_dtq */ +#define _KERNEL_SPT_TRCV_DTQ _KERNEL_CFG_TRCV_DTQ /* trcv_dtq */ +#define _KERNEL_SPT_REF_DTQ _KERNEL_CFG_REF_DTQ /* ref_dtq */ + +/* Mailboxes */ +#define _KERNEL_SPT_CRE_MBX _KERNEL_CFG_CRE_MBX /* cre_mbx */ +#define _KERNEL_SPT_ACRE_MBX _KERNEL_CFG_ACRE_MBX /* acre_mbx */ +#define _KERNEL_SPT_DEL_MBX _KERNEL_CFG_DEL_MBX /* del_mbx */ +#define _KERNEL_SPT_SND_MBX _KERNEL_CFG_SND_MBX /* snd_mbx */ +#define _KERNEL_SPT_RCV_MBX _KERNEL_CFG_RCV_MBX /* rcv_mbx */ +#define _KERNEL_SPT_PRCV_MBX _KERNEL_CFG_PRCV_MBX /* prcv_mbx */ +#define _KERNEL_SPT_TRCV_MBX _KERNEL_CFG_TRCV_MBX /* trcv_mbx */ +#define _KERNEL_SPT_REF_MBX _KERNEL_CFG_REF_MBX /* ref_mbx */ + +/* Mutexes */ +#define _KERNEL_SPT_CRE_MTX _KERNEL_CFG_CRE_MTX /* cre_mtx */ +#define _KERNEL_SPT_ACRE_MTX _KERNEL_CFG_ACRE_MTX /* acre_mtx */ +#define _KERNEL_SPT_DEL_MTX _KERNEL_CFG_DEL_MTX /* del_mtx */ +#define _KERNEL_SPT_LOC_MTX _KERNEL_CFG_LOC_MTX /* loc_mtx */ +#define _KERNEL_SPT_PLOC_MTX _KERNEL_CFG_PLOC_MTX /* ploc_mtx */ +#define _KERNEL_SPT_TLOC_MTX _KERNEL_CFG_TLOC_MTX /* tloc_mtx */ +#define _KERNEL_SPT_UNL_MTX _KERNEL_CFG_UNL_MTX /* unl_mtx */ +#define _KERNEL_SPT_REF_MTX _KERNEL_CFG_REF_MTX /* ref_mtx */ + +/* Message buffers */ +#define _KERNEL_SPT_CRE_MBF _KERNEL_CFG_CRE_MBF /* cre_mbf */ +#define _KERNEL_SPT_ACRE_MBF _KERNEL_CFG_ACRE_MBF /* acre_mbf */ +#define _KERNEL_SPT_DEL_MBF _KERNEL_CFG_DEL_MBF /* del_mbf */ +#define _KERNEL_SPT_SND_MBF _KERNEL_CFG_SND_MBF /* snd_mbf */ +#define _KERNEL_SPT_PSND_MBF _KERNEL_CFG_PSND_MBF /* psnd_mbf */ +#define _KERNEL_SPT_TSND_MBF _KERNEL_CFG_TSND_MBF /* tsnd_mbf */ +#define _KERNEL_SPT_RCV_MBF _KERNEL_CFG_RCV_MBF /* rcv_mbf */ +#define _KERNEL_SPT_PRCV_MBF _KERNEL_CFG_PRCV_MBF /* prcv_mbf */ +#define _KERNEL_SPT_TRCV_MBF _KERNEL_CFG_TRCV_MBF /* trcv_mbf */ +#define _KERNEL_SPT_REF_MBF _KERNEL_CFG_REF_MBF /* ref_mbf */ + +/* Rendezvous */ +#define _KERNEL_SPT_CRE_POR _KERNEL_CFG_CRE_POR /* cre_por */ +#define _KERNEL_SPT_ACRE_POR _KERNEL_CFG_ACRE_POR /* acre_por */ +#define _KERNEL_SPT_DEL_POR _KERNEL_CFG_DEL_POR /* del_por */ +#define _KERNEL_SPT_CAL_POR _KERNEL_CFG_CAL_POR /* cal_por */ +#define _KERNEL_SPT_TCAL_POR _KERNEL_CFG_TCAL_POR /* tcal_por */ +#define _KERNEL_SPT_ACP_POR _KERNEL_CFG_ACP_POR /* acp_por */ +#define _KERNEL_SPT_PACP_POR _KERNEL_CFG_PACP_POR /* pacp_por */ +#define _KERNEL_SPT_TACP_POR _KERNEL_CFG_TACP_POR /* tacp_por */ +#define _KERNEL_SPT_FWD_POR _KERNEL_CFG_FWD_POR /* fwd_por */ +#define _KERNEL_SPT_RPL_RDV _KERNEL_CFG_RPL_RDV /* rpl_rdv */ +#define _KERNEL_SPT_REF_POR _KERNEL_CFG_REF_POR /* ref_por */ +#define _KERNEL_SPT_REF_RDV _KERNEL_CFG_REF_RDV /* ref_rdv */ + +/* Fixed-sized memory pools */ +#define _KERNEL_SPT_CRE_MPF _KERNEL_CFG_CRE_MPF /* cre_mpf */ +#define _KERNEL_SPT_ACRE_MPF _KERNEL_CFG_ACRE_MPF /* acre_mpf */ +#define _KERNEL_SPT_DEL_MPF _KERNEL_CFG_DEL_MPF /* del_mpf */ +#define _KERNEL_SPT_GET_MPF _KERNEL_CFG_GET_MPF /* get_mpf */ +#define _KERNEL_SPT_PGET_MPF _KERNEL_CFG_PGET_MPF /* pget_mpf */ +#define _KERNEL_SPT_TGET_MPF _KERNEL_CFG_TGET_MPF /* tget_mpf */ +#define _KERNEL_SPT_REL_MPF _KERNEL_CFG_REL_MPF /* rel_mpf */ +#define _KERNEL_SPT_REF_MPF _KERNEL_CFG_REF_MPF /* ref_mpf */ + +/* Variable-sized memory pools */ +#define _KERNEL_SPT_CRE_MPL _KERNEL_CFG_CRE_MPL /* cre_mpl */ +#define _KERNEL_SPT_ACRE_MPL _KERNEL_CFG_ACRE_MPL /* acre_mpl */ +#define _KERNEL_SPT_DEL_MPL _KERNEL_CFG_DEL_MPL /* del_mpl */ +#define _KERNEL_SPT_GET_MPL _KERNEL_CFG_GET_MPL /* get_mpl */ +#define _KERNEL_SPT_PGET_MPL _KERNEL_CFG_PGET_MPL /* pget_mpl */ +#define _KERNEL_SPT_TGET_MPL _KERNEL_CFG_TGET_MPL /* tget_mpl */ +#define _KERNEL_SPT_REL_MPL _KERNEL_CFG_REL_MPL /* rel_mpl */ +#define _KERNEL_SPT_REF_MPL _KERNEL_CFG_REF_MPL /* ref_mpl */ + +/* System time management */ +#define _KERNEL_SPT_SET_TIM _KERNEL_CFG_SET_TIM /* set_tim */ +#define _KERNEL_SPT_GET_TIM _KERNEL_CFG_GET_TIM /* get_tim */ +#define _KERNEL_SPT_ISIG_TIM _KERNEL_CFG_ISIG_TIM /* isig_tim */ + +/* Cyclic handlers */ +#define _KERNEL_SPT_CRE_CYC _KERNEL_CFG_CRE_CYC /* cre_cyc */ +#define _KERNEL_SPT_ACRE_CYC _KERNEL_CFG_ACRE_CYC /* acre_cyc */ +#define _KERNEL_SPT_DEL_CYC _KERNEL_CFG_DEL_CYC /* del_cyc */ +#define _KERNEL_SPT_STA_CYC _KERNEL_CFG_STA_CYC /* sta_cyc */ +#define _KERNEL_SPT_STP_CYC _KERNEL_CFG_STP_CYC /* stp_cyc */ +#define _KERNEL_SPT_REF_CYC _KERNEL_CFG_REF_CYC /* ref_cyc */ + +/* Alarm handlers */ +#define _KERNEL_SPT_CRE_ALM _KERNEL_CFG_CRE_ALM /* cre_alm */ +#define _KERNEL_SPT_ACRE_ALM _KERNEL_CFG_ACRE_ALM /* acre_alm */ +#define _KERNEL_SPT_DEL_ALM _KERNEL_CFG_DEL_ALM /* del_alm */ +#define _KERNEL_SPT_STA_ALM _KERNEL_CFG_STA_ALM /* sta_alm */ +#define _KERNEL_SPT_STP_ALM _KERNEL_CFG_STP_ALM /* stp_alm */ +#define _KERNEL_SPT_REF_ALM _KERNEL_CFG_REF_ALM /* ref_alm */ + +/* Overrun handlers */ +#define _KERNEL_SPT_DEF_OVR _KERNEL_CFG_DEF_OVR /* def_ovr */ +#define _KERNEL_SPT_STA_OVR _KERNEL_CFG_STA_OVR /* sta_ovr */ +#define _KERNEL_SPT_STP_OVR _KERNEL_CFG_STP_OVR /* stp_ovr */ +#define _KERNEL_SPT_REF_OVR _KERNEL_CFG_REF_OVR /* ref_ovr */ + +/* System management functions */ +#define _KERNEL_SPT_ROT_RDQ _KERNEL_CFG_ROT_RDQ /* rot_rdq */ +#define _KERNEL_SPT_IROT_RDQ _KERNEL_CFG_IROT_RDQ /* irot_rdq */ +#define _KERNEL_SPT_GET_TID _KERNEL_CFG_GET_TID /* get_tid */ +#define _KERNEL_SPT_IGET_TID _KERNEL_CFG_IGET_TID /* iget_tid */ +#define _KERNEL_SPT_LOC_CPU _KERNEL_CFG_LOC_CPU /* loc_cpu */ +#define _KERNEL_SPT_ILOC_CPU _KERNEL_CFG_ILOC_CPU /* iloc_cpu */ +#define _KERNEL_SPT_UNL_CPU _KERNEL_CFG_UNL_CPU /* unl_cpu */ +#define _KERNEL_SPT_ILNL_CPU _KERNEL_CFG_ILNL_CPU /* ilnl_cpu */ +#define _KERNEL_SPT_DIS_DSP _KERNEL_CFG_DIS_DSP /* dis_dsp */ +#define _KERNEL_SPT_ENA_DSP _KERNEL_CFG_ENA_DSP /* ena_dsp */ +#define _KERNEL_SPT_SNS_CTX _KERNEL_CFG_SNS_CTX /* sns_ctx */ +#define _KERNEL_SPT_SNS_LOC _KERNEL_CFG_SNS_LOC /* sns_loc */ +#define _KERNEL_SPT_SNS_DSP _KERNEL_CFG_SNS_DSP /* sns_dsp */ +#define _KERNEL_SPT_SNS_DPN _KERNEL_CFG_SNS_DPN /* sns_dpn */ +#define _KERNEL_SPT_REF_SYS _KERNEL_CFG_REF_SYS /* ref_sys */ + +/* Interrupt management functions */ +#define _KERNEL_SPT_DEF_INH _KERNEL_CFG_DEF_INH /* def_inh */ +#define _KERNEL_SPT_CRE_ISR _KERNEL_CFG_CRE_ISR /* cre_isr */ +#define _KERNEL_SPT_ACRE_ISR _KERNEL_CFG_ACRE_ISR /* acre_isr */ +#define _KERNEL_SPT_DEL_ISR _KERNEL_CFG_DEL_ISR /* del_isr */ +#define _KERNEL_SPT_REF_ISR _KERNEL_CFG_REF_ISR /* ref_isr */ +#define _KERNEL_SPT_DIS_INT _KERNEL_CFG_DIS_INT /* dis_int */ +#define _KERNEL_SPT_ENA_INT _KERNEL_CFG_ENA_INT /* ena_int */ +#define _KERNEL_SPT_CHG_ILV _KERNEL_CFG_CHG_ILV /* chg_ilv */ +#define _KERNEL_SPT_GET_ILV _KERNEL_CFG_GET_ILV /* get_ilv */ + +/* Service call management functions */ +#define _KERNEL_SPT_DEF_SVC _KERNEL_CFG_DEF_SVC /* def_svc */ +#define _KERNEL_SPT_CAL_SVC _KERNEL_CFG_CAL_SVC /* cal_svc */ + +/* System configulation management functions */ +#define _KERNEL_SPT_DEF_EXC _KERNEL_CFG_DEF_EXC /* def_exc */ +#define _KERNEL_SPT_REF_CFG _KERNEL_CFG_REF_CFG /* ref_cfg */ +#define _KERNEL_SPT_REF_VER _KERNEL_CFG_REF_VER /* ref_ver */ + +/* Static API */ +#define _KERNEL_SPT_SCRE_TSK _KERNEL_CFG_SCRE_TSK /* CRE_TSK */ +#define _KERNEL_SPT_SDEF_TEX _KERNEL_CFG_SDEF_TEX /* DEF_TEX */ +#define _KERNEL_SPT_SCRE_SEM _KERNEL_CFG_SCRE_SEM /* CRE_SEM */ +#define _KERNEL_SPT_SCRE_FLG _KERNEL_CFG_SCRE_FLG /* CRE_FLG */ +#define _KERNEL_SPT_SCRE_DTQ _KERNEL_CFG_SCRE_DTQ /* CRE_DTQ */ +#define _KERNEL_SPT_SCRE_MBX _KERNEL_CFG_SCRE_MBX /* CRE_MBX */ +#define _KERNEL_SPT_SCRE_MTX _KERNEL_CFG_SCRE_MTX /* CRE_MTX */ +#define _KERNEL_SPT_SCRE_MBX _KERNEL_CFG_SCRE_MBX /* CRE_MBX */ +#define _KERNEL_SPT_SCRE_MTX _KERNEL_CFG_SCRE_MTX /* CRE_MTX */ +#define _KERNEL_SPT_SCRE_MBF _KERNEL_CFG_SCRE_MBF /* CRE_MBF */ +#define _KERNEL_SPT_SCRE_POR _KERNEL_CFG_SCRE_POR /* CRE_POR */ +#define _KERNEL_SPT_SCRE_MPF _KERNEL_CFG_SCRE_MPF /* CRE_MPF */ +#define _KERNEL_SPT_SCRE_MPL _KERNEL_CFG_SCRE_MPL /* CRE_MPL */ +#define _KERNEL_SPT_SCRE_CYC _KERNEL_CFG_SCRE_CYC /* CRE_CYC */ +#define _KERNEL_SPT_SCRE_ALM _KERNEL_CFG_SCRE_ALM /* CRE_ALM */ +#define _KERNEL_SPT_SDEF_OVR _KERNEL_CFG_SDEF_OVR /* DEF_OVR */ +#define _KERNEL_SPT_SDEF_INH _KERNEL_CFG_SDEF_INH /* DEF_INH */ +#define _KERNEL_SPT_SCRE_ISR _KERNEL_CFG_SCRE_ISR /* CRE_ISR */ +#define _KERNEL_SPT_SDEF_SVC _KERNEL_CFG_SDEF_SVC /* DEF_SVC */ +#define _KERNEL_SPT_SDEF_EXC _KERNEL_CFG_SDEF_EXC /* DEF_EXC */ +#define _KERNEL_SPT_SATT_INI _KERNEL_CFG_SATT_INI /* ATT_INI */ +#define _KERNEL_SPT_SINCLUDE _KERNEL_CFG_SINCLUDE /* INCLUDE */ + + +/* %jp{オブジェクト動的生成サポートの判定} */ +#if ((_KERNEL_CFG_CRE_TSK) \ + || (_KERNEL_CFG_ACRE_TSK) \ + || (_KERNEL_CFG_SCRE_TSK)) \ + && (_KERNEL_CFG_TMAX_TSKID) > 0 +#define _KERNEL_SPT_TSK TRUE +#else +#define _KERNEL_SPT_TSK FALSE +#endif + +#define _KERNEL_SPT_TEX FALSE +#define _KERNEL_SPT_SEM TRUE +#define _KERNEL_SPT_FLG TRUE +#define _KERNEL_SPT_DTQ FALSE +#define _KERNEL_SPT_MBX FALSE +#define _KERNEL_SPT_MTX FALSE +#define _KERNEL_SPT_MBF FALSE +#define _KERNEL_SPT_MPF FALSE +#define _KERNEL_SPT_MPL FALSE +#define _KERNEL_SPT_CYC FALSE +#define _KERNEL_SPT_ALM FALSE +#define _KERNEL_SPT_OVR FALSE +#define _KERNEL_SPT_ISR TRUE + + +/* %jp{オブジェクト動的生成サポートの判定} */ +#if (_KERNEL_SPT_CRE_TSK) \ + || (_KERNEL_SPT_ACRE_TSK) \ + || (_KERNEL_SPT_DEF_TEX) \ + || (_KERNEL_SPT_CRE_SEM) \ + || (_KERNEL_SPT_ACRE_SEM) \ + || (_KERNEL_SPT_CRE_FLG) \ + || (_KERNEL_SPT_ACRE_FLG) \ + || (_KERNEL_SPT_CRE_DTQ) \ + || (_KERNEL_SPT_ACRE_DTQ) \ + || (_KERNEL_SPT_CRE_MBX) \ + || (_KERNEL_SPT_ACRE_MBX) \ + || (_KERNEL_SPT_CRE_MTX) \ + || (_KERNEL_SPT_ACRE_MTX) \ + || (_KERNEL_SPT_CRE_MBF) \ + || (_KERNEL_SPT_ACRE_MBF) \ + || (_KERNEL_SPT_CRE_MPF) \ + || (_KERNEL_SPT_ACRE_MPF) \ + || (_KERNEL_SPT_CRE_MPL) \ + || (_KERNEL_SPT_ACRE_MPL) \ + || (_KERNEL_SPT_CRE_CYC) \ + || (_KERNEL_SPT_ACRE_CYC) \ + || (_KERNEL_SPT_CRE_ALM) \ + || (_KERNEL_SPT_ACRE_ALM) \ + || (_KERNEL_SPT_DEF_OVR) \ + || (_KERNEL_SPT_CRE_ISR) \ + || (_KERNEL_SPT_ACRE_ISR) +#define _KERNEL_SPT_CREOBJ TRUE +#else +#define _KERNEL_SPT_CREOBJ FALSE +#endif + + +/* %jp{オブジェクト動的削除サポートの判定} */ +#if (_KERNEL_SPT_DEL_TSK) \ + || (_KERNEL_SPT_DEL_SEM) \ + || (_KERNEL_SPT_DEL_FLG) \ + || (_KERNEL_SPT_DEL_DTQ) \ + || (_KERNEL_SPT_DEL_MBX) \ + || (_KERNEL_SPT_DEL_MTX) \ + || (_KERNEL_SPT_DEL_MBF) \ + || (_KERNEL_SPT_DEL_MPF) \ + || (_KERNEL_SPT_DEL_MPL) \ + || (_KERNEL_SPT_DEL_CYC) \ + || (_KERNEL_SPT_DEL_ALM) \ + || (_KERNEL_SPT_DEL_ISR) +#define _KERNEL_SPT_DELOBJ TRUE +#else +#define _KERNEL_SPT_DELOBJ FALSE +#endif + + +/* %jp{タイムアウトサポートの判定} */ +#if (_KERNEL_SPT_TSLP_TSK) \ + || (_KERNEL_SPT_DLY_TSK) \ + || (_KERNEL_SPT_TWAI_SEM) \ + || (_KERNEL_SPT_TWAI_FLG) \ + || (_KERNEL_SPT_TSND_DTQ) \ + || (_KERNEL_SPT_TRCV_DTQ) \ + || (_KERNEL_SPT_TRCV_MBX) \ + || (_KERNEL_SPT_TLOC_MTX) \ + || (_KERNEL_SPT_TSND_MBF) \ + || (_KERNEL_SPT_TRCV_MBF) \ + || (_KERNEL_SPT_TCAL_POR) \ + || (_KERNEL_SPT_TACP_POR) \ + || (_KERNEL_SPT_TGET_MPF) \ + || (_KERNEL_SPT_TGET_MPL) +#define _KERNEL_SPT_TOQ TRUE +#else +#define _KERNEL_SPT_TOQ FALSE +#endif + + + +#define _KERNEL_SPT_TSK_TA_ACT _KERNEL_CFG_TSK_TA_ACT + +#define _KERNEL_SPT_SEM_TA_TFIFO _KERNEL_CFG_SEM_TA_TFIFO +#define _KERNEL_SPT_SEM_TA_TPRI _KERNEL_CFG_SEM_TA_TPRI + + +/* -------------------------------------------------------------------- */ +/* Task-queue */ +/* -------------------------------------------------------------------- */ + +#define _KERNEL_QUE_ALG_ONEWAYLIST 1 +#define _KERNEL_QUE_ALG_TWOWAYLIST 2 + +#define _KERNEL_QUE_ALGORITHM _KERNEL_CFG_QUE_ALGORITHM + + + +/* -------------------------------------------------------------------- */ +/* TCB */ +/* -------------------------------------------------------------------- */ + +/* ---------------------------------- */ +/* Task-ID */ +/* ---------------------------------- */ + +/* %jp{タスクIDの最小値} */ +#define _KERNEL_TMIN_TSKID 1 + +/* %jp{タスクIDの最大値} */ +#if _KERNEL_CFG_TMAX_TSKID < 0 +#define _KERNEL_TMAX_TSKID _KERNEL_TMAX_ID +#else +#define _KERNEL_TMAX_TSKID _KERNEL_CFG_TMAX_TSKID +#endif + +/**< %jp{タスクIDを示すのに最低限必要なbit数} */ +#define _KERNEL_TBIT_TSKID _KERNEL_MAXNUM2BIT(_KERNEL_TMAX_TSKID) + + +/* ---------------------------------- */ +/* Semaphore-ID */ +/* ---------------------------------- */ + +/* %jp{セマフォIDの最小値} */ +#define _KERNEL_TMIN_SEMID 1 + +/* %jp{セマフォIDの最大値} */ +#if _KERNEL_CFG_TMAX_SEMID < 0 +#define _KERNEL_TMAX_SEMID _KERNEL_TMAX_ID +#else +#define _KERNEL_TMAX_SEMID _KERNEL_CFG_TMAX_SEMID +#endif + + +#define _KERNEL_TMAX_FLGID _KERNEL_CFG_TMAX_FLGID +#define _KERNEL_TMAX_DTQID _KERNEL_CFG_TMAX_DTQID +#define _KERNEL_TMAX_MBXID _KERNEL_CFG_TMAX_MBXID +#define _KERNEL_TMAX_MTXID _KERNEL_CFG_TMAX_MTXID +#define _KERNEL_TMAX_MBFID _KERNEL_CFG_TMAX_MBFID +#define _KERNEL_TMAX_PORID _KERNEL_CFG_TMAX_PORID +#define _KERNEL_TMAX_MPFID _KERNEL_CFG_TMAX_MPFID +#define _KERNEL_TMAX_MPLID _KERNEL_CFG_TMAX_MPLID +#define _KERNEL_TMAX_CYCID _KERNEL_CFG_TMAX_CYCID +#define _KERNEL_TMAX_ALMID _KERNEL_CFG_TMAX_ALMID +#define _KERNEL_TMAX_OVRID _KERNEL_CFG_TMAX_OVRID +#define _KERNEL_TMAX_ISRID _KERNEL_CFG_TMAX_ISRID + + + + +/* ---------------------------------- */ +/* Task-Handle */ +/* ---------------------------------- */ + +#define _KERNEL_TSKHDL_ID _KERNEL_CFG_TSKHDL_ID /* %en{_KERNEL_T_TSKHDL is ID}%jp{タスクポインタにIDを使う} */ + + + + +/* ------------------------------------------------------------------ */ +/* TCB */ +/* ------------------------------------------------------------------ */ + +#define _KERNEL_TCB_ALG_BLKARRAY 1 +#define _KERNEL_TCB_ALG_PTRARRAY 2 + +#define _KERNEL_TCB_BITFIELD _KERNEL_CFG_TCB_BITFIELD +#define _KERNEL_TCB_ALGORITHM _KERNEL_CFG_TCB_ALGORITHM + +#if (_KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY) && (_KERNEL_SPT_CRE_TSK || _KERNEL_SPT_ACRE_TSK) +#define _KERNEL_TCB_SPLIT_RO FALSE +#else +#define _KERNEL_TCB_SPLIT_RO _KERNEL_CFG_TCB_SPLIT_RO +#endif + + + + +/* ---------------------------------- */ +/* Task-state */ +/* ---------------------------------- */ + +/* Task State */ +#define _KERNEL_TTS_RUN TTS_RUN /**< %jp{実行状態} */ +#define _KERNEL_TTS_RDY TTS_RDY /**< %jp{実行可能状態} */ +#define _KERNEL_TTS_WAI TTS_WAI /**< %jp{待ち状態} */ +#define _KERNEL_TTS_SUS TTS_SUS /**< %jp{強制待ち状態} */ +#define _KERNEL_TTS_WAS TTS_WAS /**< %jp{二重待ち状態} */ +#define _KERNEL_TTS_DMT 0 /**< %jp{休止状態} */ + +#define _KERNEL_TSK_TBIT_TSKSTAT 4 /**< %jp{タスク状態を示すのに最低限必要なビット幅(5ビット)} */ + +#define _KERNEL_ENC_TTS(x) ((x) & 0xf) +#define _KERNEL_DEC_TTS(x) ((x) == 0 ? TTS_DMT : (x)) + + +/* ---------------------------------- */ +/* Task priopity */ +/* ---------------------------------- */ + +/* %jp{優先度の範囲}%en{Priority Range} */ +#if _KERNEL_CFG_TMAX_TPRI < 0 +#define _KERNEL_TSK_TMAX_TPRI _KERNEL_TMAX_PRI +#else +#define _KERNEL_TSK_TMAX_TPRI _KERNEL_CFG_TMAX_TPRI +#endif + +#define _KERNEL_TSK_TBIT_TPRI _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_TPRI) + + + +/* ---------------------------------- */ +/* Task wait */ +/* ---------------------------------- */ + +/* Task Wait */ +#if _KERNEL_OPT_CB_SIZE || _KERNEL_CFG_TTW_PACK /**< %jp{待ち状態をパッキングして保存なら} */ + +#define _KERNEL_TTW_SLP 0 /**< %jp{起床待ち状態} */ +#define _KERNEL_TTW_DLY 1 /**< %jp{時間経過待ち状態} */ +#define _KERNEL_TTW_SEM 2 /**< %jp{セマフォ資源の獲得待ち状態} */ +#define _KERNEL_TTW_FLG 3 /**< %jp{イベントフラグ待ち状態} */ +#define _KERNEL_TTW_SDTQ 4 /**< %jp{データキューへの送信待ち状態} */ +#define _KERNEL_TTW_RDTQ 5 /**< %jp{データキューからの受信待ち状態} */ +#define _KERNEL_TTW_MBX 6 /**< %jp{メールボックスからの受信待ち状態} */ +#define _KERNEL_TTW_MTX 7 /**< %jp{ミューテックスのロック待ち状態} */ +#define _KERNEL_TTW_SMBF 8 /**< %jp{メッセージバッファへの送信待ち状態} */ +#define _KERNEL_TTW_RMBF 9 /**< %jp{メッセージバッファからの受信待ち状態} */ +#define _KERNEL_TTW_CAL 10 /**< %jp{ランデブの呼び出し待ち状態} */ +#define _KERNEL_TTW_ACP 11 /**< %jp{ランデブの受付待ち状態} */ +#define _KERNEL_TTW_RDV 12 /**< %jp{ランデブの終了待ち状態} */ +#define _KERNEL_TTW_MPF 13 /**< %jp{固定長メモリブロックの獲得待ち状態} */ +#define _KERNEL_TTW_MPL 14 /**< %jp{可変長メモリブロックの獲得待ち状態} */ + +#define _KERNEL_DEC_TTW(x) (1 << (x)) + +#define _KERNEL_TSK_TBIT_TSKWAIT 4 /**< %jp{ビット幅4ビット} */ + +#else /**< %jp{待ち状態をパックしないなら} */ + +#define _KERNEL_TTW_SLP TTW_SLP /* 起床待ち状態 */ +#define _KERNEL_TTW_DLY TTW_DLY /* 時間経過待ち状態 */ +#define _KERNEL_TTW_SEM TTW_SEM /* セマフォ資源の獲得待ち状態 */ +#define _KERNEL_TTW_FLG TTW_FLG /* イベントフラグ待ち状態 */ +#define _KERNEL_TTW_SDTQ TTW_SDTQ /* データキューへの送信待ち状態 */ +#define _KERNEL_TTW_RDTQ TTW_RDTQ /* データキューからの受信待ち状態 */ +#define _KERNEL_TTW_MBX TTW_MBX /* メールボックスからの受信待ち状態 */ +#define _KERNEL_TTW_MTX TTW_MTX /* ミューテックスのロック待ち状態 */ +#define _KERNEL_TTW_SMBF TTW_SMBF /* メッセージバッファへの送信待ち状態 */ +#define _KERNEL_TTW_RMBF TTW_RMBF /* メッセージバッファからの受信待ち状態 */ +#define _KERNEL_TTW_CAL TTW_CAL /* ランデブの呼び出し待ち状態 */ +#define _KERNEL_TTW_ACP TTW_ACP /* ランデブの受付待ち状態 */ +#define _KERNEL_TTW_RDV TTW_RDV /* ランデブの終了待ち状態 */ +#define _KERNEL_TTW_MPF TTW_MPF /* 固定長メモリブロックの獲得待ち状態 */ +#define _KERNEL_TTW_MPL TTW_MPL /* 可変長メモリブロックの獲得待ち状態 */ + +#define _KERNEL_DEC_TTW(x) (x) + +#define _KERNEL_TSK_TBIT_TSKWAIT 15 /**< %jp{ビット幅15ビット} */ + +#endif + + +/* ---------------------------------- */ +/* Waitbject-ID */ +/* ---------------------------------- */ + +/* %jp{IDの最小値} */ +#define _KERNEL_TMIN_TSK_WOBJID 1 + +/* %jp{IDの最大値} */ +#define _KERNEL_TSK_TMAX_WOBJID 1 +#if _KERNEL_TMAX_SEMID > _KERNEL_TSK_TMAX_WOBJID +#undef _KERNEL_TSK_TMAX_WOBJID +#define _KERNEL_TSK_TMAX_WOBJID _KERNEL_TMAX_SEMID +#endif + +#if _KERNEL_TMAX_FLGID > _KERNEL_TSK_TMAX_WOBJID +#undef _KERNEL_TSK_TMAX_WOBJID +#define _KERNEL_TSK_TMAX_WOBJID _KERNEL_TMAX_FLGID +#endif + +#if _KERNEL_TMAX_DTQID > _KERNEL_TSK_TMAX_WOBJID +#undef _KERNEL_TSK_TMAX_WOBJID +#define _KERNEL_TSK_TMAX_WOBJID _KERNEL_TMAX_DTQID +#endif + +#if _KERNEL_TMAX_MBXID > _KERNEL_TSK_TMAX_WOBJID +#undef _KERNEL_TSK_TMAX_WOBJID +#define _KERNEL_TSK_TMAX_WOBJID _KERNEL_TMAX_MBXID +#endif + +#if _KERNEL_TMAX_MTXID > _KERNEL_TSK_TMAX_WOBJID +#undef _KERNEL_TSK_TMAX_WOBJID +#define _KERNEL_TSK_TMAX_WOBJID _KERNEL_TMAX_MTXID +#endif + +#if _KERNEL_TMAX_MBFID > _KERNEL_TSK_TMAX_WOBJID +#undef _KERNEL_TSK_TMAX_WOBJID +#define _KERNEL_TSK_TMAX_WOBJID _KERNEL_TMAX_MBFID +#endif + +/**< %jp{IDを示すのに最低限必要なbit数} */ +#define _KERNEL_TSK_TBIT_WOBJID _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_WOBJID) + + +/* ---------------------------------- */ +/* activate queuing count */ +/* ---------------------------------- */ + +/* %jp{タスク起動要求キューイング数の最大値} */ +#define _KERNEL_TSK_TMAX_ACTCNT _KERNEL_TMAX_ACTCNT +#define _KERNEL_TSK_TBIT_ACTCNT _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_ACTCNT) + + +/* ---------------------------------- */ +/* wakeup queuing count */ +/* ---------------------------------- */ + +/* %jp{タスク起床要求キューイング数の最大値} */ +#define _KERNEL_TSK_TMAX_WUPCNT _KERNEL_TMAX_WUPCNT +#define _KERNEL_TSK_TBIT_WUPCNT _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_WUPCNT) + + +/* ---------------------------------- */ +/* suspend nest count */ +/* ---------------------------------- */ + +/* %jp{タスク強制待ち要求ネスト数の最大値} */ +#define _KERNEL_TSK_TMAX_SUSCNT _KERNEL_TMAX_SUSCNT +#define _KERNEL_TSK_TBIT_SUSCNT _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_SUSCNT) + + +/* ---------------------------------- */ +/* task data */ +/* ---------------------------------- */ + +#define _KERNEL_TSK_TBIT_DATA _KERNEL_TBIT_VP_INT + + +/* ---------------------------------- */ +/* error code */ +/* ---------------------------------- */ + +#define _KERNEL_TSK_TBIT_ERCD 7 + + +/* ---------------------------------- */ +/* Task-ID */ +/* ---------------------------------- */ + +#define _KERNEL_TSK_TMAX_TSKID _KERNEL_TMAX_TSKID + + + + +/* ---------------------------------- */ +/* TCB member */ +/* ---------------------------------- */ + +/* %jp{必須} */ +#define _KERNEL_TCB_CTXCB TRUE +#define _KERNEL_TCB_QUE TRUE +#define _KERNEL_TCB_QUEOBJ TRUE +#define _KERNEL_TCB_TSKSTAT TRUE + +/* %jp{タイムアウトキュー}*/ +#define _KERNEL_TCB_TOQOBJ _KERNEL_SPT_TOQ + + +#if _KERNEL_TMAX_TPRI <= 1 +/* %jp{優先度単一(全てFIFO順)なら優先度管理不要}*/ +#define _KERNEL_TCB_TSKPRI FALSE +#define _KERNEL_TCB_TSKBPRI FALSE +#define _KERNEL_TCB_ITSKPRI FALSE +#else +/* %jp{動的に優先度を変更するならtskpriの管理が必要}*/ +#define _KERNEL_TCB_TSKPRI (_KERNEL_SPT_CHG_PRI || _KERNEL_SPT_MTX) +/* %jp{ミューテックスをサポートするならtskbpriの管理が必要}*/ +#define _KERNEL_TCB_TSKBPRI _KERNEL_SPT_MTX +/* %jp{itskpriは必須}*/ +#define _KERNEL_TCB_ITSKPRI TRUE +#endif + +/* %jp{ref_tskによる逆引きの必要があるなら含める(ter_tskでも要るかも)} */ +#define _KERNEL_TCB_TSKWAIT _KERNEL_SPT_REF_TSK +#define _KERNEL_TCB_WOBJID _KERNEL_SPT_REF_TSK + + +/* %jp{キューイング/ネストが必要なら含める} */ +#define _KERNEL_TCB_ACTCNT (_KERNEL_TMAX_ACTCNT > 0) +#define _KERNEL_TCB_WUPCNT (_KERNEL_TMAX_WUPCNT > 0) +#define _KERNEL_TCB_SUSCNT (_KERNEL_TMAX_SUSCNT > 0) + +/* %jp{E_OK以外の待ち解除要因があれば必要} */ +#define _KERNEL_TCB_ERCD (_KERNEL_SPT_REL_WAI || _KERNEL_SPT_TER_TSK || _KERNEL_SPT_TMOUT || _KERNEL_SPT_DELOBJ) + +/* %jp{データ渡しの必要なオブジェクトを使うなら必要} */ +#define _KERNEL_TCB_DATA (_KERNEL_SPT_FLG || _KERNEL_SPT_DTQ || _KERNEL_SPT_MBX || _KERNEL_SPT_MPF || _KERNEL_SPT_MPL) + +/* %jp{IDの高速逆引き時に必要} */ +#define _KERNEL_TCB_TSKID FALSE /**< %jp{TCBにtskidを含めるか} */ + +/* %jp{含める理由があまりない?} */ +#define _KERNEL_TCB_TSKATR FALSE /**< %jp{TCBにtskatrを含めるか} */ + +/* %jp{タスクの拡張情報を使わないなら不要} */ +#define _KERNEL_TCB_EXINF TRUE /**< %jp{TCBにexinfを含めるか} */ + +#if !(_KERNEL_SPT_ACT_TSK) && !(_KERNEL_SPT_IACT_TSK) && !(_KERNEL_SPT_STA_TSK) +/* %jp{タスク生成時のTA_ACTで一回だけ起動するなら、生成情報の保持は不要} */ +#define _KERNEL_TCB_TASK FALSE /**< %jp{TCBにtaskを含めるか} */ +#define _KERNEL_TCB_STKSZ FALSE /**< %jp{TCBにtskszを含めるか} */ +#define _KERNEL_TCB_STK FALSE /**< %jp{TCBにtskを含めるか} */ +#define _KERNEL_TCB_ISP FALSE /**< %jp{TCBにispを含めるか} */ +#else +/* %jp{アーキテクチャ依存で必要な情報を含める} */ +#define _KERNEL_TCB_TASK TRUE /**< %jp{TCBにtaskを含めるか} */ +#define _KERNEL_TCB_STKSZ _KERNEL_PROCATR_CTX_STKSZ /**< %jp{TCBにtskszを含めるか} */ +#define _KERNEL_TCB_STK _KERNEL_PROCATR_CTX_STK /**< %jp{TCBにtskを含めるか} */ +#define _KERNEL_TCB_ISP _KERNEL_PROCATR_CTX_ISP /**< %jp{TCBにispを含めるか} */ +#endif + + + +/* ------------------------------------------------------------------ */ +/* Semaphore */ +/* ------------------------------------------------------------------ */ + +#define _KERNEL_SEMCB_ALG_BLKARRAY 1 +#define _KERNEL_SEMCB_ALG_PTRARRAY 2 + + +#define _KERNEL_SEMCB_ALGORITHM _KERNEL_CFG_SEMCB_ALGORITHM +#define _KERNEL_SEMCB_BITFIELD _KERNEL_CFG_SEMCB_BITFIELD + +/* */ +#if (_KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY) && (_KERNEL_SPT_CRE_SEM || _KERNEL_SPT_ACRE_SEM) +#define _KERNEL_SEMCB_SPLIT_RO FALSE +#else +#define _KERNEL_SEMCB_SPLIT_RO _KERNEL_CFG_SEMCB_SPLIT_RO +#endif + +#define _KERNEL_SEM_TMAX_SEMCNT _KERNEL_TMAX_MAXSEM +#define _KERNEL_SEM_TBIT_SEMCNT _KERNEL_MAXNUM2BIT(_KERNEL_SEM_TMAX_SEMCNT) + + +#define _KERNEL_SEMCB_QUE TRUE +#define _KERNEL_SEMCB_SEMCNT TRUE +#define _KERNEL_SEMCB_SEMATR TRUE +#define _KERNEL_SEMCB_MAXSEM TRUE + +#define _KERNEL_SPT_SEM_TA_TFIFO _KERNEL_CFG_SEM_TA_TFIFO +#define _KERNEL_SPT_SEM_TA_TPRI _KERNEL_CFG_SEM_TA_TPRI + + + +/* ------------------------------------------------------------------ */ +/* Eventflags */ +/* ------------------------------------------------------------------ */ + +#define _KERNEL_FLGCB_ALG_BLKARRAY 1 +#define _KERNEL_FLGCB_ALG_PTRARRAY 2 + +/* control block */ +#define _KERNEL_FLGCB_ALGORITHM _KERNEL_CFG_FLGCB_ALGORITHM +#define _KERNEL_FLGCB_BITFIELD _KERNEL_CFG_FLGCB_BITFIELD +#define _KERNEL_FLGCB_ROM _KERNEL_CFG_FLGCB_ROM + +/* Attribute */ +#define _KERNEL_SPT_FLG_TA_TFIFO _KERNEL_CFG_FLG_TA_TFIFO /**< %jp{TA_TFIFO属性に対応する} */ +#define _KERNEL_SPT_FLG_TA_TPRI _KERNEL_CFG_FLG_TA_TPRI /**< %jp{TA_TPRI属性に対応する} */ +#define _KERNEL_SPT_FLG_TA_WSGL _KERNEL_CFG_FLG_TA_WSGL /**< %jp{TA_WSGL属性に対応する} */ +#define _KERNEL_SPT_FLG_TA_WMUL _KERNEL_CFG_FLG_TA_WMUL /**< %jp{TA_WMUL属性に対応する} */ +#define _KERNEL_SPT_FLG_TA_CLR _KERNEL_CFG_FLG_TA_CLR /**< %jp{TA_CLR属性に対応する} */ + + + +#define _KERNEL_FLGCB_QUE TRUE +#define _KERNEL_FLGCB_FLGPTN TRUE +#define _KERNEL_FLGCB_FLGATR TRUE + + + +/* ---------------------------------------------- */ +/* Mailbox objects */ +/* ---------------------------------------------- */ + +#define _KERNEL_MBXCB_ALG_BLKARRAY 1 +#define _KERNEL_MBXCB_ALG_PTRARRAY 2 + +/* Attribute */ +#define _KERNEL_SPT_MBX_TA_TFIFO _KERNEL_CFG_MBX_TA_TFIFO /**< %jp{TA_TFIFO属性に対応する} */ +#define _KERNEL_SPT_MBX_TA_TPRI _KERNEL_CFG_MBX_TA_TPRI /**< %jp{TA_TPRI属性に対応する} */ +#define _KERNEL_SPT_MBX_TA_MFIFO _KERNEL_CFG_MBX_TA_MFIFO /**< %jp{TA_MFIFO属性に対応する} */ +#define _KERNEL_SPT_MBX_TA_MPRI _KERNEL_CFG_MBX_TA_MPRI /**< %jp{TA_MPRI属性に対応する} */ + +/* Control block */ +#define _KERNEL_MBXCB_ALGORITHM _KERNEL_MBXCB_ALG_BLKARRAY + +#define _KERNEL_MBXCB_ROM FALSE /**< %jp{TCBの不変部を分割してROM部配置とするか} */ +#define _KERNEL_MBXCB_BITFIELD FALSE /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */ + + +#define _KERNEL_MBXCB_QUE TRUE +#define _KERNEL_MBXCB_MSGQUE TRUE +#define _KERNEL_MBXCB_MBXATR TRUE +#define _KERNEL_MBXCB_MAXMPRI TRUE + + + +/* ---------------------------------------------- */ +/* Fixed-sized memory pools */ +/* ---------------------------------------------- */ + + +#define _KERNEL_MPF_ALG_CHAIN_PTR 1 +#define _KERNEL_MPF_ALG_CHAIN_NUM 2 + +#define _KERNEL_MPFCB_ALG_BLKARRAY 1 +#define _KERNEL_MPFCB_ALG_PTRARRAY 2 + + +/* Attribute */ +#define _KERNEL_SPT_MPF_TA_TFIFO _KERNEL_CFG_MPF_TA_TFIFO /**< %jp{TA_TFIFO属性に対応する} */ +#define _KERNEL_SPT_MPF_TA_TPRI _KERNEL_CFG_MPF_TA_TPRI /**< %jp{TA_TPRI属性に対応する} */ + +#define _KERNEL_MPF_ALGORITHM _KERNEL_CFG_MPF_ALGORITHM + + +/* Control block */ +#define _KERNEL_MPFCB_ALGORITHM _KERNEL_MPFCB_ALG_BLKARRAY + +#define _KERNEL_MPFCB_ROM FALSE /**< %jp{TCBの不変部を分割してROM部配置とするか} */ +#define _KERNEL_MPFCB_BITFIELD FALSE /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */ + +#if _KERNEL_CFG_MPF_TMAX_BLKCNT <= 0 +#define _KERNEL_MPF_TMAX_BLKCNT _KERNEL_TMAX_UINT +#else +#define _KERNEL_MPF_TMAX_BLKCNT _KERNEL_CFG_MPF_TMAX_BLKCNT +#endif + +#if _KERNEL_CFG_MPF_TMAX_BLKSZ <= 0 +#define _KERNEL_MPF_TMAX_BLKSZ _KERNEL_TMAX_UINT +#else +#define _KERNEL_MPF_TMAX_BLKSZ _KERNEL_CFG_MPF_TMAX_BLKSZ +#endif + + +#define _KERNEL_MPFCB_QUE TRUE +#define _KERNEL_MPFCB_FREBLK TRUE +#define _KERNEL_MPFCB_FBLKCNT FALSE +#define _KERNEL_MPFCB_MPFATR TRUE +#define _KERNEL_MPFCB_BLKCNT TRUE +#define _KERNEL_MPFCB_BLKSZ TRUE +#define _KERNEL_MPFCB_MPF TRUE + + + +/* ------------------------------------------------------------------ */ +/* inh */ +/* ------------------------------------------------------------------ */ + +#define KERNEL_TMIN_INH_INHNO _KERNEL_PROCATR_TMIN_INHNO +#define KERNEL_TMAX_INH_INHNO _KERNEL_PROCATR_TMAX_INHNO + +#define KERNEL_TMIN_ISR_INTNO _KERNEL_IRCATR_TMIN_INHNO +#define KERNEL_TMAX_ISR_INTNO _KERNEL_IRCATR_TMAX_INHNO + + + +#endif /* _KERNEL__parser__parsknl_h__ */ + + + +/* end of file */ diff --git a/kernel/include/parser/parssys.h b/kernel/include/parser/parssys.h new file mode 100755 index 0000000..d0d38ba --- /dev/null +++ b/kernel/include/parser/parssys.h @@ -0,0 +1,306 @@ +/** + * Hyper Operating System V4 Advance + * + * @file pitrncfg.h + * @brief %jp{itrncfgのパーサー}%en{perser for itrncfg.h} + * + * @version $Id: parssys.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__prser_pitrncfg_h__ +#define _KERNEL__prser_pitrncfg_h__ + + +#if _KERNEL_CFG_MEM_ALIGN <= 0 +#define _KERNEL_MEM_ALIGN (sizeof(void *)) +#else +#define _KERNEL_MEM_ALIGN _KERNEL_CFG_MEM_ALIGN +#endif + + +/* %jp{INT型のbit数を定義する} */ +#if _KERNEL_CFG_TBIT_INT <= 0 /* default */ +#define _KERNEL_TBIT_INT _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_INT _KERNEL_CFG_TBIT_INT +#endif + +/* %jp{UINT型のbit数を定義する} */ +#if _KERNEL_CFG_TBIT_UINT <= 0 /* default */ +#define _KERNEL_TBIT_UINT _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_UINT _KERNEL_CFG_TBIT_UINT +#endif + + +/* %jp{VP_INTをポインタ型とするか} */ +#define _KERNEL_VP_INT_PTR _KERNEL_CFG_VP_INT_PTR + + +/* %jp{BOOL型のbit数を定義する} */ +#if _KERNEL_CFG_TBIT_BOOL <= 0 /* default */ +#define _KERNEL_TBIT_BOOL _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_BOOL _KERNEL_CFG_TBIT_BOOL +#endif + + +/* %jp{FN型のbit数を定義する}%en{Function code} */ +#if _KERNEL_CFG_TBIT_FN <= 0 /* default */ +#define _KERNEL_TBIT_FN _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_FN _KERNEL_CFG_TBIT_FN +#endif + + +/* %jp{ER型のbit数を定義する}%en{Error code(signed integer)} */ +#if _KERNEL_CFG_TBIT_ER <= 0 /* default */ +#define _KERNEL_TBIT_ER _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_ER _KERNEL_CFG_TBIT_ER +#endif + + +/* %jp{ID型のbit数を定義する}%en{Object ID number(signed integer)} */ +#if _KERNEL_CFG_TBIT_ID <= 0 /* default */ +#define _KERNEL_TBIT_ID _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_ID _KERNEL_CFG_TBIT_ID +#endif + + +/* %jp{ATR型のbit数を定義する}%en{Object attribute(unsigned integer)} */ +#if _KERNEL_CFG_TBIT_ATR <= 0 /* default */ +#define _KERNEL_TBIT_ATR _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_ATR _KERNEL_CFG_TBIT_ATR +#endif + + +/* %jp{STAT型のbit数を定義する}%en{Object state(unsigned integer)} */ +#if _KERNEL_CFG_TBIT_STAT <= 0 /* default */ +#define _KERNEL_TBIT_STAT _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_STAT _KERNEL_CFG_TBIT_STAT +#endif + + +/* %jp{MODE型のbit数を定義する}%en{Service call operational mode(unsigned integer)} */ +#if _KERNEL_CFG_TBIT_MODE <= 0 /* default */ +#define _KERNEL_TBIT_MODE _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_MODE _KERNEL_CFG_TBIT_MODE +#endif + + +/* %jp{PRI型のbit数を定義する}%en{Priority(signed integer)} */ +#if _KERNEL_CFG_TBIT_PRI <= 0 /* default */ +#define _KERNEL_TBIT_PRI _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_PRI _KERNEL_CFG_TBIT_PRI +#endif + + +/* %jp{SIZE型のbit数を定義する}%en{Memory area size(unsigned integer)} */ +#if _KERNEL_CFG_TBIT_SIZE <= 0 /* default */ +#define _KERNEL_TBIT_SIZE _KERNEL_TBIT_UINTPTR +#else +#define _KERNEL_TBIT_SIZE _KERNEL_CFG_TBIT_SIZE +#endif + + +/* %jp{TMO型のbit数を定義する}%en{Timeout} */ +#if _KERNEL_CFG_TBIT_TMO <= 0 /* default */ +#define _KERNEL_TBIT_TMO _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_TMO _KERNEL_CFG_TBIT_TMO +#endif + + +/* %jp{RELTIM型のbit数を定義する}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */ +#if _KERNEL_CFG_TBIT_RELTIM <= 0 /* default */ +#define _KERNEL_TBIT_RELTIM _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_RELTIM _KERNEL_CFG_TBIT_RELTIM +#endif + + +/* %jp{SYSTIM型のbit数を定義する}%en{System time(unsigned integer, unit of time is implementation-defined)} */ +#define _KERNEL_SYSTIM_STRUCT _KERNEL_CFG_SYSTIM_STRUCT +#if _KERNEL_CFG_TBIT_SYSTIM < 0 /* default */ +#if _KERNEL_SYSTIM_STRUCT /* %jp{構造体化するなら} */ +#define _KERNEL_TBIT_SYSTIM 48 +#else +#define _KERNEL_TBIT_SYSTIM 32 +#endif +#else +#define _KERNEL_TBIT_SYSTIM _KERNEL_CFG_TBIT_SYSTIM +#endif + + +/* %jp{ER_BOOL型のbit数を定義する}%en{Error code or a boolean value} */ +#if _KERNEL_CFG_TBIT_ER_BOOL <= 0 +#if _KERNEL_TBIT_ER >= _KERNEL_TBIT_BOOL +#define _KERNEL_TBIT_ER_BOOL _KERNEL_TBIT_ER +#else +#define _KERNEL_TBIT_ER_BOOL _KERNEL_TBIT_BOOL +#endif +#else +#define _KERNEL_TBIT_ER_BOOL _KERNEL_CFG_TBIT_ER_BOOL +#endif + + +/* %jp{ER_IDのbit数を定義する}%en{Error code or an object ID number} */ +#if _KERNEL_CFG_TBIT_ER_ID <= 0 +#if _KERNEL_TBIT_ER >= _KERNEL_TBIT_ID +#define _KERNEL_TBIT_ER_ID _KERNEL_TBIT_ER +#else +#define _KERNEL_TBIT_ER_ID _KERNEL_TBIT_ID +#endif +#else +#define _KERNEL_TBIT_ER_ID _KERNEL_CFG_TBIT_ER_ID +#endif + + +/* %jp{ER_IDのbit数を定義する}%en{Error code or an object ID number} */ +#if _KERNEL_CFG_TBIT_ER_ID <= 0 +#if _KERNEL_TBIT_ER >= _KERNEL_TBIT_ID +#define _KERNEL_TBIT_ER_ID _KERNEL_TBIT_ER +#else +#define _KERNEL_TBIT_ER_ID _KERNEL_TBIT_ID +#endif +#else +#define _KERNEL_TBIT_ER_ID _KERNEL_CFG_TBIT_ER_ID +#endif + + +/**< %jp{ER_UINTのbit数を定義する}%en{Error code or an unsigned integer} */ +#if _KERNEL_CFG_TBIT_ER_UINT <= 0 +#if _KERNEL_TBIT_ER >= _KERNEL_TBIT_UINT +#define _KERNEL_TBIT_ER_UINT _KERNEL_TBIT_ER +#else +#define _KERNEL_TBIT_ER_UINT _KERNEL_TBIT_UINT +#endif +#else +#define _KERNEL_TBIT_ER_UINT _KERNEL_CFG_TBIT_ER_UINT +#endif + + + +/**< %jp{タスク例外要因のパターン(符号無し整数)}%en{Bit pattern for the task exception code(unsigned integer)} */ +#if _KERNEL_CFG_TBIT_TEXPTN <= 0 +#define _KERNEL_TBIT_TEXPTN _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_TEXPTN _KERNEL_CFG_TBIT_TEXPTN +#endif + + +#if _KERNEL_CFG_TBIT_FLGPTN <= 0 +#define _KERNEL_TBIT_FLGPTN _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_FLGPTN _KERNEL_CFG_TBIT_FLGPTN +#endif + + +#if _KERNEL_CFG_TBIT_RDVPTN <= 0 +#define _KERNEL_TBIT_RDVPTN _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_RDVPTN _KERNEL_CFG_TBIT_RDVPTN +#endif + + +#if _KERNEL_CFG_TBIT_RDVNO <= 0 + +#define _KERNEL_TBIT_RDVNO _KERNEL_TBIT_PROC_UINT +#else +#define _KERNEL_TBIT_RDVNO _KERNEL_CFG_TBIT_RDVNO +#endif + + +#if _KERNEL_CFG_TBIT_OVRTIM <= 0 +#define _KERNEL_TBIT_OVRTIM _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_OVRTIM _KERNEL_CFG_TBIT_OVRTIM +#endif + + +#if _KERNEL_CFG_TBIT_INHNO <= 0 +#define _KERNEL_TBIT_INHNO _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_INHNO _KERNEL_CFG_TBIT_INHNO +#endif + + +#if _KERNEL_CFG_TBIT_INTNO <= 0 +#define _KERNEL_TBIT_INTNO _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_INTNO _KERNEL_CFG_TBIT_INTNO +#endif + + +#if _KERNEL_CFG_TBIT_EXCNO <= 0 +#define _KERNEL_TBIT_EXCNO _KERNEL_TBIT_PROC_INT +#else +#define _KERNEL_TBIT_EXCNO _KERNEL_CFG_TBIT_EXCNO +#endif + + +/* */ +/* %jp{優先度の範囲}%en{Priority Range} */ +#if _KERNEL_CFG_TMAX_TPRI <= 0 +#define _KERNEL_TMAX_TPRI _KERNEL_TMAX_PROC_INT /**< %jp{タスク優先度の最大値}%en{Maximum task priority} */ +#else +#define _KERNEL_TMAX_TPRI _KERNEL_CFG_TMAX_TPRI /**< %jp{タスク優先度の最大値}%en{Maximum task priority} */ +#endif + +#if _KERNEL_CFG_TMAX_MPRI <= 0 +#define _KERNEL_TMAX_MPRI _KERNEL_TMAX_PROC_INT /**< %jp{メッセージ優先度の最大値}%en{Maximum message priority} */ +#else +#define _KERNEL_TMAX_MPRI _KERNEL_CFG_TMAX_MPRI /**< %jp{メッセージ優先度の最大値}%en{Maximum message priority} */ +#endif + + +/* %jp{キューイング/ネスト回数の最大値}%en{Maximum Nesting/Queueing Count} */ +#define _KERNEL_TMAX_ACTCNT _KERNEL_CFG_TMAX_ACTCNT /**< %jp{タスク起動要求キューイング数の最大値(-1の時デフォルト値)} */ +#define _KERNEL_TMAX_WUPCNT _KERNEL_CFG_TMAX_WUPCNT /**< %jp{タスク起床要求キューイング数の最大値(-1の時デフォルト値)} */ +#define _KERNEL_TMAX_SUSCNT _KERNEL_CFG_TMAX_SUSCNT /**< %jp{タスク強制待ち要求ネスト数の最大値(-1の時デフォルト値)} */ + + +/* */ + +#if _KERNEL_CFG_TEX_TBIT_TEXPTN < 0 /**< %jp{タスク例外要因のビット数} */ +#define _KERNEL_TEX_TBIT_TEXPTN _KERNEL_TBIT_TEXPTN +#else +#define _KERNEL_TEX_TBIT_TEXPTN _KERNEL_CFG_TEX_TBIT_TEXPTN +#endif + +#if _KERNEL_CFG_FLG_TBIT_FLGPTN < 0 /**< %jp{イベントフラグのビット数} */ +#define _KERNEL_FLG_TBIT_FLGPTN _KERNEL_TBIT_FLGPTN +#else +#define _KERNEL_FLG_TBIT_FLGPTN _KERNEL_CFG_FLG_TBIT_FLGPTN +#endif + +#if _KERNEL_CFG_RDV_TBIT_RDVPTN < 0 +#define _KERNEL_RDV_TBIT_RDVPTN _KERNEL_TBIT_RDVPTN /**< %jp{ランデブ条件のビット数} */ +#else +#define _KERNEL_RDV_TBIT_RDVPTN _KERNEL_CFG_RDV_TBIT_RDVPTN +#endif + + +/* %jp{セマフォの最大値}%en{Maximum value of the maximum definable semaphore resource count} */ +#if _KERNEL_CFG_TMAX_MAXSEM <= 0 +#define _KERNEL_TMAX_MAXSEM _KERNEL_TMAX_PROC_UINT +#else +#define _KERNEL_TMAX_MAXSEM _KERNEL_CFG_TMAX_MAXSEM +#endif + + + +#endif /* _KERNEL__prser_pitrncfg_h__ */ + + +/* end of file */ diff --git a/kernel/source/arch/irc/arm/ADuC7019/intc.c b/kernel/source/arch/irc/arm/ADuC7019/intc.c new file mode 100755 index 0000000..bbd784e --- /dev/null +++ b/kernel/source/arch/irc/arm/ADuC7019/intc.c @@ -0,0 +1,109 @@ +/** + * Hyper Operating System V4 Advance + * + * @file intc.h + * @brief %jp{ADuC7019/20/21/22/24/25/26/27用割り込みコントローラ操作}%en{ADuC7019/20/21/22/24/25/26/27} + * + * @version $Id: intc.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" +#include "object/inhobj.h" +#include "object/isrobj.h" + + +#define IRQSTA (*(volatile UW *)0xffff0000) +#define IRQSIG (*(volatile UW *)0xffff0004) +#define IRQEN (*(volatile UW *)0xffff0008) +#define IRQCLR (*(volatile UW *)0xffff000c) + +#define FIQSTA (*(volatile UW *)0xffff0100) +#define FIQSIG (*(volatile UW *)0xffff0104) +#define FIQEN (*(volatile UW *)0xffff0108) +#define FIQCLR (*(volatile UW *)0xffff010c) + + + +void _kernel_arm_irq(void); +void _kernel_arm_fiq(void); + + +/** %jp{割込みコントローラの初期化} */ +void _kernel_ini_irc(void) +{ + IRQCLR = 0x00ffffff; + FIQCLR = 0x00ffffff; + + _kernel_inh_tbl[_KERNEL_ARM_INHNO_IRQ].inthdr = (FP)_kernel_arm_irq; + _kernel_inh_tbl[_KERNEL_ARM_INHNO_FIQ].inthdr = (FP)_kernel_arm_fiq; +} + + +/** %jp{IRQ割り込み処理開始} */ +void _kernel_arm_irq(void) +{ + INTNO intno; + UW irqsta; + + irqsta = IRQSTA; + + /* 割り込み番号取得 */ + for ( intno = 0; intno <= 23; intno++ ) + { + if ( irqsta & 1 ) + { + /* 割込みサービスルーチン呼び出し */ + _kernel_exe_isr(intno); + } + + irqsta >>= 1; + } +} + + +/* FIQ割り込み処理開始 */ +void _kernel_arm_fiq(void) +{ + INTNO intno; + UW fiqsta; + + fiqsta = FIQSTA; + + /* 割り込み番号取得 */ + for ( intno = 0; intno <= 23; intno++ ) + { + if ( fiqsta & 1 ) + { + /* 割込みサービスルーチン呼び出し */ + _kernel_exe_isr(intno); + } + + fiqsta >>= 1; + } +} + + +/* 割り込みの許可 */ +ER ena_int(INTNO intno) +{ + IRQEN |= (1 << intno); + + return E_OK; +} + + +/* 割り込みの禁止 */ +ER dis_int(INTNO intno) +{ + IRQCLR = (1 << intno); + + return E_OK; +} + + + +/* end of file */ diff --git a/kernel/source/arch/proc/arm/arm_v4t/gcc/armctx.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/armctx.S new file mode 100755 index 0000000..2d71e4b --- /dev/null +++ b/kernel/source/arch/proc/arm/arm_v4t/gcc/armctx.S @@ -0,0 +1,174 @@ +/**************************************************************************** + Hyper Operating System V4 Advance + + @file armctx.s + @brief %en{コンテキスト制御(ARM v4t アーキテクチャ)}%jp{ARM v4t} + + @version $Id: armctx.S,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + + Copyright (C) 1998-2006 by Project HOS + http://sourceforge.jp/projects/hos/ +****************************************************************************/ + + + +/* ---- プロセッサモード定義 ---- */ +#define Mode_USR 0x10 /* USR モード */ +#define Mode_FIQ 0x11 /* FIQ モード */ +#define Mode_IRQ 0x12 /* IRQ モード */ +#define Mode_SVC 0x13 /* SVC モード */ +#define Mode_ABT 0x17 /* ABT モード */ +#define Mode_UND 0x1b /* UND モード */ +#define Mode_SYS 0x1f /* SYS モード */ +#define Mode_MASK 0x1f /* モードビットマスク */ + + +/* ---- フラグ定義 ---- */ +#define T_Bit 0x20 /* T ビット */ +#define F_Bit 0x40 /* F ビット */ +#define I_Bit 0x80 /* I ビット */ + + + + .global _kernel_ena_int /* 割り込み許可 */ + .global _kernel_dis_int /* 割り込み禁止 */ + .global _kernel_wai_int /* CPUのアイドル処理 */ + .global _kernel_cre_ctx /* 実行コンテキストの作成 */ + .global _kernel_sta_ctx /* 実行コンテキストの開始 */ + .global _kernel_rst_ctx /* 実行コンテキストのリスタート */ + .global _kernel_swi_ctx /* 実行コンテキストの切替 */ + + + .text + .align 2 + +/************************************************ + 割り込み許可 + void _kernel_ena_int(void) + ************************************************/ + .type _kernel_ena_int, %function +_kernel_ena_int: + mrs r0, cpsr /* cpsr取得 */ + bic r0, r0, #(F_Bit | I_Bit) /* FビットとIビットをクリア */ + msr cpsr_c, r0 /* cpsr設定 */ + bx lr /* リターン */ + .size _kernel_ena_int, .-_kernel_ena_int + + +/************************************************ + 割り込み禁止 + void _kernel_dis_int(void) + ************************************************/ + .type _kernel_dis_int, %function +_kernel_dis_int: + mrs r0, cpsr /* cpsr取得 */ + orr r0, r0, #(F_Bit | I_Bit) /* FビットとIビットを設定 */ + msr cpsr_c, r0 /* cpsr設定 */ + bx lr /* リターン */ + .size _kernel_dis_int, .-_kernel_dis_int + + +/************************************************ + 割り込み待ち(CPUのアイドル処理) + void _kernel_wai_int(void); +*************************************************/ + .type _kernel_wai_int, %function +_kernel_wai_int: + mov r0, #0 +/* mcr p15, 0, r0, c7, c0, 4 */ /* WaitForInterrupt */ + b _kernel_wai_int + .size _kernel_wai_int, .-_kernel_wai_int + + + .code 16 + +/************************************************ + 実行コンテキストの作成 + void _kernel_cre_ctx( + _KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト (r0) + VP isp, スタックポインタ (r1) + FP entry, 実行アドレス (r2) + VP_INT par1, 実行時パラメータ (r3) + VP_INT par2) 実行時パラメータ (sp[0]) +*************************************************/ + .thumb_func + .type _kernel_cre_ctx, %function +_kernel_cre_ctx: + sub r1, #36 /* スタックを確保 */ + str r2, [r1, #0] /* r4 部分にentryを設定 */ + str r3, [r1, #4] /* r5 部分にpar1を設定 */ + ldr r2, [sp, #0] /* par2を取り出し */ + str r2, [r1, #8] /* r6 部分にpar2を設定 */ + adr r2, ctx_entry /* エントリーアドレス設定 */ + add r2, #1 /* Thumbモードアドレスとして設定 */ + str r2, [r1, #32] /* lr 部分にエントリーアドレスを設定 */ + str r1, [r0] /* ctxcb に新 sp を保存 */ + bx lr /* リターン */ + .size _kernel_cre_ctx, .-_kernel_cre_ctx + + +/************************************************ + 実行コンテキストエントリーアドレス +*************************************************/ + .thumb_func + .type ctx_entry, %function +ctx_entry: + mov r0, r5 /* par1を設定 */ + mov r1, r6 /* par2を設定 */ + bx r4 /* entry を実行 */ + .size ctx_entry, .-ctx_entry + + + +/************************************************ + 実行コンテキストのリスタート + void _kernel_rst_ctx( + VP_INT par1, 実行時パラメータ (r0) + VP_INT par2, 実行時パラメータ (r1) + FP entry, 実行アドレス (r2) + VP isp) スタックポインタ (r3) +*************************************************/ + .thumb_func + .type _kernel_rst_ctx, %function +_kernel_rst_ctx: + mov sp, r3 /* スタックを初期値にリセット */ + bx r2 /* エントリーアドレスから再開始 */ + .size _kernel_rst_ctx, .-_kernel_rst_ctx + + + + .align 2 + .code 32 + + +/************************************************ + 実行コンテキストの切替 + void _kernel_swi_ctx( + _KERNEL_T_CTXCB *pk_ctxinf_nxt, 現在のコンテキストの保存先 (r0) + _KERNEL_T_CTXCB *pk_ctxinf_now) 切り替えるコンテキスト (r1) +*************************************************/ + .type _kernel_swi_ctx, %function +_kernel_swi_ctx: + stmfd sp!, {r4-r11, lr} /* レジスタ保存 */ + str sp, [r1] /* スタックポインタ保存 */ + /* ---- そのまま _kernel_sta_ctx に続ける ---- */ + + +/************************************************ + 実行コンテキストの開始 + void _kernel_sta_ctx( + _KERNEL_T_CTXCB *pk_ctxcb) 実行を開始するコンテキスト (r0) +*************************************************/ + .type _kernel_sta_ctx, %function +_kernel_sta_ctx: + ldr sp, [r0] /* スタックポインタ復帰 */ + ldmfd sp!, {r4-r11, pc} /* レジスタ復帰 */ + + .size _kernel_swi_ctx, .-_kernel_swi_ctx + .size _kernel_sta_ctx, .-_kernel_sta_ctx + + + .END + + +/* end of file */ diff --git a/kernel/source/arch/proc/arm/arm_v4t/gcc/armirq.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/armirq.S new file mode 100755 index 0000000..c772bab --- /dev/null +++ b/kernel/source/arch/proc/arm/arm_v4t/gcc/armirq.S @@ -0,0 +1,125 @@ + + + +/* ---- プロセッサモード定義 ---- */ +#define Mode_USR 0x10 /* USR モード */ +#define Mode_FIQ 0x11 /* FIQ モード */ +#define Mode_IRQ 0x12 /* IRQ モード */ +#define Mode_SVC 0x13 /* SVC モード */ +#define Mode_ABT 0x17 /* ABT モード */ +#define Mode_UND 0x1b /* UND モード */ +#define Mode_SYS 0x1f /* SYS モード */ +#define Mode_MASK 0x1f /* モードビットマスク */ + + +/* ---- フラグ定義 ---- */ +#define T_Bit 0x20 /* T ビット */ +#define F_Bit 0x40 /* F ビット */ +#define I_Bit 0x80 /* I ビット */ + + +/* ---- 割り込みハンドラ番号 ---- */ +#define INHNO_IRQ 0 +#define INHNO_FIQ 1 + + + .global _kernel_int_isp + .global _kernel_sta_inh + .global _kernel_end_inh + .global _kernel_exe_inh + .global _kernel_int_armirq + + + .text + .align 2 + + +/************************************************ + IRQ ハンドラ + ************************************************/ +_kernel_int_armirq: + /* ---- レジスタ退避 ---- */ + msr cpsr_c, #(Mode_SYS | F_Bit | I_Bit) /* SYSモードに移行 */ + stmfd sp!, {r0-r3, r12, lr} /* SYSモードの汎用レジスタ退避 */ + msr cpsr_c, #(Mode_IRQ | F_Bit | I_Bit) /* IRQモードに移行 */ + mov r0, lr /* lr_irq 取り出し */ + mrs r1, spsr /* spsr_irq 取り出し */ + msr cpsr_c, #(Mode_SYS | F_Bit | I_Bit) /* SYSモードに移行 */ + stmfd sp!, {r0, r1} /* lr_irq, spsr_irq退避 */ + + /* ---- 多重割込み判定 ---- */ + ldr r0, =_kernel_int_nst_cnt /* 割り込みネストカウンタのアドレス取得 */ + ldrb r1, [r0] /* 割り込みネストカウンタ値取得 */ + subs r1, r1, #1 /* カウンタ減算(0判定が楽なのでマイナス方向にカウント) */ + strb r1, [r0] /* 割り込みネストカウンタ値設定 */ + bcs multiple_int /* 多重割り込みなら分岐 */ + + /* ---- 割り込み用スタックに入れ替え ---- */ + ldr r2, =_kernel_int_isp /* 割り込み用スタックの初期値アドレスを取得 */ + mov r1, sp /* タスクのSPを保存 */ + ldr sp, [r2] /* 割り込み用スタックに切り替え */ + stmfd sp!, {r0, r1} /* タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) */ + + /* ---- 割り込み処理 ---- */ + bl _kernel_sta_inh /* 割り込み開始 */ + + /* ---- 割り込みハンドラ実行 ---- */ + mov r0, #INHNO_IRQ + bl _kernel_exe_inh + + /* ---- 割り込み処理の終了設定 ---- */ + ldmfd sp!, {r0, r1} /* 汎用レジスタ復帰 */ + mov sp, r1 /* スタックを戻す */ + + mov r1, #0 /* 割り込みネストカウンタを0に戻す */ + strb r1, [r0] /* 割り込みネストカウンタ値設定 */ + + /* ---- 遅延ディスパッチ処理 ---- */ + bl _kernel_end_inh /* 割り込み終了処理 */ + +return_int: + /* ---- 復帰処理 + ldmfd sp!, {r0, r1} /* lr_irq, spsr_irq 復帰 */ + msr cpsr_c, #(Mode_IRQ | F_Bit | I_Bit) /* IRQモードに移行 */ + mov lr, r0 /* lr_irq 復帰 */ + msr spsr_csxf, r1 /* spsr_irq 復帰 */ + msr cpsr_c, #(Mode_SYS | F_Bit | I_Bit) /* SYSモードに移行 */ + ldmfd sp!, {r0-r3, r12, lr} /* SYSモードの汎用レジスタ復帰 */ + msr cpsr_c, #(Mode_IRQ | F_Bit | I_Bit) /* IRQモードに移行 */ + subs pc, lr, #4 /* 割込み復帰 */ + + + /* ---- 多重割り込み処理 ---- */ +multiple_int: + /* ---- スタックを8バイトアライメントに移動 ---- */ + mov r1, sp /* 割り込み発生時のSYSモードのSPに8の倍数の保証されないので */ + bic sp, sp, #0x7 + stmfd sp!, {r0, r1} /* タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) */ + + /* ---- 割り込みハンドラ実行 ---- */ + mov r0, #INHNO_IRQ + bl _kernel_exe_inh + + /* ---- スタックアライメント復帰 ---- */ + ldmfd sp!, {r0, r1} /* 汎用レジスタ復帰 */ + mov sp, r1 + + /* ---- 割り込みカウンタ復帰 ---- */ + ldrb r1, [r0] + add r1, r1, #1 + strb r1, [r0] + + b return_int /* 復帰処理 */ + + + + .bss + +_kernel_int_nst_cnt: + .space 1 + + + .END + + +/* end of file */ diff --git a/kernel/source/arch/proc/arm/arm_v4t/rvct/armctx.s b/kernel/source/arch/proc/arm/arm_v4t/rvct/armctx.s new file mode 100755 index 0000000..5bd05bb --- /dev/null +++ b/kernel/source/arch/proc/arm/arm_v4t/rvct/armctx.s @@ -0,0 +1,158 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; @file armctx.s +; @brief %en{コンテキスト制御(ARM v4t アーキテクチャ)}%jp{ARM v4t} +; +; @version $Id: armctx.s,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + +; ---- プロセッサモード定義 ---- +Mode_USR EQU 0x10 ; USR モード +Mode_FIQ EQU 0x11 ; FIQ モード +Mode_IRQ EQU 0x12 ; IRQ モード +Mode_SVC EQU 0x13 ; SVC モード +Mode_ABT EQU 0x17 ; ABT モード +Mode_UND EQU 0x1b ; UND モード +Mode_SYS EQU 0x1f ; SYS モード +Mode_MASK EQU 0x1f ; モードビットマスク + + +; ---- フラグ定義 ---- +T_Bit EQU 0x20 ; T ビット +F_Bit EQU 0x40 ; F ビット +I_Bit EQU 0x80 ; I ビット + + + + EXPORT _kernel_ena_int ; 割り込み許可 + EXPORT _kernel_dis_int ; 割り込み禁止 + EXPORT _kernel_wai_int ; CPUのアイドル処理 + EXPORT _kernel_cre_ctx ; 実行コンテキストの作成 + EXPORT _kernel_sta_ctx ; 実行コンテキストの開始 + EXPORT _kernel_rst_ctx ; 実行コンテキストのリスタート + EXPORT _kernel_swi_ctx ; 実行コンテキストの切替 + + + PRESERVE8 + AREA code, CODE, READONLY + + ALIGN + CODE32 +; ----------------------------------------------- +; 割り込み許可 +; void _kernel_ena_int(void) +; ----------------------------------------------- +_kernel_ena_int + mrs r0, cpsr ; cpsr取得 + bic r0, r0, #F_Bit:OR:I_Bit ; FビットとIビットをクリア + msr cpsr_c, r0 ; cpsr設定 + bx lr ; リターン + + +; ----------------------------------------------- +; 割り込み禁止 +; void hospac_dis_int(void) +; ----------------------------------------------- +_kernel_dis_int + mrs r0, cpsr ; cpsr取得 + orr r0, r0, #F_Bit:OR:I_Bit ; FビットとIビットを設定 + msr cpsr_c, r0 ; cpsr設定 + bx lr ; リターン + + +; ----------------------------------------------- +; 割り込み待ち(CPUのアイドル処理) +; void _kernel_wai_int(void); +; ----------------------------------------------- +_kernel_wai_int + b _kernel_wai_int + + + + + + CODE16 + +; ----------------------------------------------- +; 実行コンテキストの作成 +; void _kernel_cre_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb, /* r0 :作成するコンテキスト */ +; VP isp, /* r1 :スタックポインタ */ +; FP entry, /* r2 :実行アドレス */ +; VP_INT par1, /* r3 :実行時パラメータ */ +; VP_INT par2) /* sp[0]:実行時パラメータ */ +; ----------------------------------------------- +_kernel_cre_ctx + sub r1, #36 ; スタックを確保 + str r2, [r1, #0] ; r4 部分にentryを設定 + str r3, [r1, #4] ; r5 部分にpar1を設定 + ldr r2, [sp, #0] ; par2を取り出し + str r2, [r1, #8] ; r6 部分にpar2を設定 + adr r2, ctx_entry ; エントリーアドレス設定 + add r2, #1 ; Thumbモードアドレスとして設定 + str r2, [r1, #32] ; lr 部分にエントリーアドレスを設定 + str r1, [r0] ; ctxcb に新 sp を保存 + bx lr ; リターン + + +; ----------------------------------------------- +; 実行コンテキストエントリーアドレス +; ----------------------------------------------- +ctx_entry + mov r0, r5 ; par1を設定 + mov r1, r6 ; par2を設定 + bx r4 ; entry を実行 + + +; ----------------------------------------------- +; 実行コンテキストのリスタート +; void _kernel_rst_ctx( +; VP_INT par1, /* r0 :実行時パラメータ */ +; VP_INT par2, /* r1 :実行時パラメータ */ +; FP entry, /* r2 :実行アドレス */ +; VP isp) /* r3 :スタックポインタ */ +; ----------------------------------------------- +_kernel_rst_ctx + mov sp, r3 ; スタックを初期値にリセット + bx r2 ; エントリーアドレスから再開始 + + + + ALIGN + CODE32 + +; ----------------------------------------------- +; 実行コンテキストの切替 +; void _kernel_swi_ctx( +; _KERNEL_T_CTXCB *pk_ctxinf_nxt, /* r0 : 現在のコンテキストの保存先 */ +; _KERNEL_T_CTXCB *pk_ctxinf_now) /* r1 : 切り替えるコンテキスト */ +; ----------------------------------------------- +_kernel_swi_ctx + stmfd sp!, {r4-r11, lr} ; レジスタ保存 + str sp, [r1] ; スタックポインタ保存 + ; ---- そのまま _kernel_sta_ctx に続ける + + +; ----------------------------------------------- +; 実行コンテキストの開始 +; void _kernel_sta_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb) /* r0: 実行を開始するコンテキスト */ +; ----------------------------------------------- +_kernel_sta_ctx + ldr sp, [r0] ; スタックポインタ復帰 + ldmfd sp!, {r4-r11, pc} ; レジスタ復帰 + + + END + + + +; --------------------------------------------------------------------------- +; End of file +; --------------------------------------------------------------------------- diff --git a/kernel/source/arch/proc/arm/arm_v4t/rvct/armirq.s b/kernel/source/arch/proc/arm/arm_v4t/rvct/armirq.s new file mode 100755 index 0000000..b06098c --- /dev/null +++ b/kernel/source/arch/proc/arm/arm_v4t/rvct/armirq.s @@ -0,0 +1,123 @@ + +; ---- プロセッサモード定義 ---- +Mode_USR EQU 0x10 ; USR モード +Mode_FIQ EQU 0x11 ; FIQ モード +Mode_IRQ EQU 0x12 ; IRQ モード +Mode_SVC EQU 0x13 ; SVC モード +Mode_ABT EQU 0x17 ; ABT モード +Mode_UND EQU 0x1b ; UND モード +Mode_SYS EQU 0x1f ; SYS モード +Mode_MASK EQU 0x1f ; モードビットマスク + +; ---- フラグ定義 ---- +T_Bit EQU 0x20 ; T ビット +F_Bit EQU 0x40 ; F ビット +I_Bit EQU 0x80 ; I ビット + + +; ---- 割り込みハンドラ番号 ---- +INHNO_IRQ EQU 0 +INHNO_FIQ EQU 1 + + + IMPORT _kernel_int_isp + IMPORT _kernel_sta_inh + IMPORT _kernel_end_inh + IMPORT _kernel_exe_inh + EXPORT _kernel_int_armirq ; IRQハンドラ + + + PRESERVE8 + AREA inthdr_code, CODE, READONLY + CODE32 + +; ---------------------------------------------- +; IRQ ハンドラ +; ---------------------------------------------- +_kernel_int_armirq + ; ---- レジスタ退避 + msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit ; SYSモードに移行 + stmfd sp!, {r0-r3, r12, lr} ; SYSモードの汎用レジスタ退避 + msr cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit ; IRQモードに移行 + mov r0, lr ; lr_irq 取り出し + mrs r1, spsr ; spsr_irq 取り出し + msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit ; SYSモードに移行 + stmfd sp!, {r0, r1} ; lr_irq, spsr_irq退避 + + ; ---- 多重割込み判定 + ldr r0, =_kernel_int_nst_cnt ; 割り込みネストカウンタのアドレス取得 + ldrb r1, [r0] ; 割り込みネストカウンタ値取得 + subs r1, r1, #1 ; カウンタ減算(0判定が楽なのでマイナス方向にカウント) + strb r1, [r0] ; 割り込みネストカウンタ値設定 + bcs multiple_int ; 多重割り込みなら分岐 + + ; ---- 割り込み用スタックに入れ替え + ldr r2, =_kernel_int_isp ; 割り込み用スタックの初期値アドレスを取得 + mov r1, sp ; タスクのSPを保存 + ldr sp, [r2] ; 割り込み用スタックに切り替え + stmfd sp!, {r0, r1} ; タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) + + ; ---- 割り込み処理 + bl _kernel_sta_inh ; 割り込み開始 + + ; ---- 割り込みハンドラ実行 + mov r0, #INHNO_IRQ + bl _kernel_exe_inh + + ; ---- 割り込み処理の終了設定 + ldmfd sp!, {r0, r1} ; 汎用レジスタ復帰 + mov sp, r1 ; スタックを戻す + + mov r1, #0 ; 割り込みネストカウンタを0に戻す + strb r1, [r0] ; 割り込みネストカウンタ値設定 + + ; ---- 遅延ディスパッチ処理 + bl _kernel_end_inh ; 割り込み終了処理 + +return_int + ; ---- 復帰処理 + ldmfd sp!, {r0, r1} ; lr_irq, spsr_irq 復帰 + msr cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit ; IRQモードに移行 + mov lr, r0 ; lr_irq 復帰 + msr spsr_csxf, r1 ; spsr_irq 復帰 + msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit ; SYSモードに移行 + ldmfd sp!, {r0-r3, r12, lr} ; SYSモードの汎用レジスタ復帰 + msr cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit ; IRQモードに移行 + subs pc, lr, #4 ; 割込み復帰 + + + ; ---- 多重割り込み処理 +multiple_int + ; ---- スタックを8バイトアライメントに移動 + mov r1, sp ; 割り込み発生時のSYSモードのSPに8の倍数の保証されないので + bic sp, sp, #0x7 + stmfd sp!, {r0, r1} ; タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) + + ; ---- 割り込みハンドラ実行 + mov r0, #INHNO_IRQ + bl _kernel_exe_inh + + ; ---- スタックアライメント復帰 + ldmfd sp!, {r0, r1} ; 汎用レジスタ復帰 + mov sp, r1 + + ; ---- 割り込みカウンタ復帰 + ldrb r1, [r0] + add r1, r1, #1 + strb r1, [r0] + + b return_int ; 復帰処理 + + + + AREA data, DATA, ALIGN=0 +_kernel_int_nst_cnt + DCB 0x00 + + + END + + +; --------------------------------------------------------------------------- +; End of file +; --------------------------------------------------------------------------- diff --git a/kernel/source/arch/proc/arm/arm_v5/rvct/armctx.s b/kernel/source/arch/proc/arm/arm_v5/rvct/armctx.s new file mode 100755 index 0000000..148802f --- /dev/null +++ b/kernel/source/arch/proc/arm/arm_v5/rvct/armctx.s @@ -0,0 +1,162 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; @file armctx.s +; @brief %en{コンテキスト制御(ARM v5 アーキテクチャ)}%jp{ARM v5} +; +; @version $Id: armctx.s,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + +; ---- プロセッサモード定義 ---- +Mode_USR EQU 0x10 ; USR モード +Mode_FIQ EQU 0x11 ; FIQ モード +Mode_IRQ EQU 0x12 ; IRQ モード +Mode_SVC EQU 0x13 ; SVC モード +Mode_ABT EQU 0x17 ; ABT モード +Mode_UND EQU 0x1b ; UND モード +Mode_SYS EQU 0x1f ; SYS モード +Mode_MASK EQU 0x1f ; モードビットマスク + + +; ---- フラグ定義 ---- +T_Bit EQU 0x20 ; T ビット +F_Bit EQU 0x40 ; F ビット +I_Bit EQU 0x80 ; I ビット + + + + EXPORT _kernel_ena_int ; 割り込み許可 + EXPORT _kernel_dis_int ; 割り込み禁止 + EXPORT _kernel_wai_int ; CPUのアイドル処理 + EXPORT _kernel_cre_ctx ; 実行コンテキストの作成 + EXPORT _kernel_sta_ctx ; 実行コンテキストの開始 + EXPORT _kernel_rst_ctx ; 実行コンテキストのリスタート + EXPORT _kernel_swi_ctx ; 実行コンテキストの切替 + + + PRESERVE8 + AREA code, CODE, READONLY + + ALIGN + CODE32 +; ----------------------------------------------- +; 割り込み許可 +; void _kernel_ena_int(void) +; ----------------------------------------------- +_kernel_ena_int + mrs r0, cpsr ; cpsr取得 + bic r0, r0, #F_Bit:OR:I_Bit ; FビットとIビットをクリア + msr cpsr_c, r0 ; cpsr設定 + bx lr ; リターン + + +; ----------------------------------------------- +; 割り込み禁止 +; void hospac_dis_int(void) +; ----------------------------------------------- +_kernel_dis_int + mrs r0, cpsr ; cpsr取得 + orr r0, r0, #F_Bit:OR:I_Bit ; FビットとIビットを設定 + msr cpsr_c, r0 ; cpsr設定 + bx lr ; リターン + + +; ----------------------------------------------- +; 割り込み待ち(CPUのアイドル処理) +; void _kernel_wai_int(void); +; ----------------------------------------------- +_kernel_wai_int + mov r0, #0 + mcr p15, 0, r0, c7, c0, 4 ; WaitForInterrupt + b _kernel_wai_int + + + + CODE16 + +; ----------------------------------------------- +; 実行コンテキストの作成 +; void _kernel_cre_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb, /* r0 :作成するコンテキスト */ +; VP isp, /* r1 :スタックポインタ */ +; FP entry, /* r2 :実行アドレス */ +; VP_INT par1, /* r3 :実行時パラメータ */ +; VP_INT par2) /* sp[0]:実行時パラメータ */ +; ----------------------------------------------- +_kernel_cre_ctx + sub r1, #36 ; スタックを確保 + str r2, [r1, #0] ; r4 部分にentryを設定 + str r3, [r1, #4] ; r5 部分にpar1を設定 + ldr r2, [sp, #0] ; par2を取り出し + str r2, [r1, #8] ; r6 部分にpar2を設定 + adr r1, ctx_entry ; エントリーアドレス設定 + add r1, #1 ; Thumbモードアドレスとして設定 + str r1, [r1, #32] ; lr 部分にエントリーアドレスを設定 + str r1, [r0] ; ctxcb に新 sp を保存 + bx lr ; リターン + +; ----------------------------------------------- +; 実行コンテキストエントリーアドレス +; ----------------------------------------------- +ctx_entry + mov r0, r5 ; par1を設定 + mov r1, r6 ; par2を設定 + bx r4 ; entry を実行 + + + + +; ----------------------------------------------- +; 実行コンテキストのリスタート +; void _kernel_rst_ctx( +; VP_INT par1, /* r0 :実行時パラメータ */ +; VP_INT par2, /* r1 :実行時パラメータ */ +; FP entry, /* r2 :実行アドレス */ +; VP isp) /* r3 :スタックポインタ */ +; ----------------------------------------------- +_kernel_rst_ctx + mov sp, r3 ; スタックを初期値にリセット + bx r2 ; エントリーアドレスから再開始 + + + + ALIGN + CODE32 + + ALIGN + CODE32 + +; ----------------------------------------------- +; 実行コンテキストの切替 +; void _kernel_swi_ctx( +; _KERNEL_T_CTXCB *pk_ctxinf_nxt, /* r0 : 現在のコンテキストの保存先 */ +; _KERNEL_T_CTXCB *pk_ctxinf_now) /* r1 : 切り替えるコンテキスト */ +; ----------------------------------------------- +_kernel_swi_ctx + stmfd sp!, {r4-r11, lr} ; レジスタ保存 + str sp, [r1] ; スタックポインタ保存 + ; ---- そのまま _kernel_sta_ctx に続ける + + +; ----------------------------------------------- +; 実行コンテキストの開始 +; void _kernel_sta_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb) /* r0: 実行を開始するコンテキスト */ +; ----------------------------------------------- +_kernel_sta_ctx + ldr sp, [r0] ; スタックポインタ復帰 + ldmfd sp!, {r4-r11, pc} ; レジスタ復帰 + + + END + + + +; --------------------------------------------------------------------------- +; End of file +; --------------------------------------------------------------------------- diff --git a/kernel/source/arch/proc/arm/arm_v5/rvct/armirq.s b/kernel/source/arch/proc/arm/arm_v5/rvct/armirq.s new file mode 100755 index 0000000..fda51b2 --- /dev/null +++ b/kernel/source/arch/proc/arm/arm_v5/rvct/armirq.s @@ -0,0 +1,123 @@ + +; ---- プロセッサモード定義 ---- +Mode_USR EQU 0x10 ; USR モード +Mode_FIQ EQU 0x11 ; FIQ モード +Mode_IRQ EQU 0x12 ; IRQ モード +Mode_SVC EQU 0x13 ; SVC モード +Mode_ABT EQU 0x17 ; ABT モード +Mode_UND EQU 0x1b ; UND モード +Mode_SYS EQU 0x1f ; SYS モード +Mode_MASK EQU 0x1f ; モードビットマスク + +; ---- フラグ定義 ---- +T_Bit EQU 0x20 ; T ビット +F_Bit EQU 0x40 ; F ビット +I_Bit EQU 0x80 ; I ビット + + +; ---- 割り込みハンドラ番号 ---- +INHNO_IRQ EQU 0 +INHNO_FIQ EQU 1 + + + IMPORT _kernel_int_isp + IMPORT _kernel_sta_int + IMPORT _kernel_end_int + IMPORT _kernel_exe_inh + EXPORT _kernel_int_armirq ; IRQハンドラ + + + PRESERVE8 + AREA inthdr_code, CODE, READONLY + CODE32 + +; ---------------------------------------------- +; IRQ ハンドラ +; ---------------------------------------------- +_kernel_int_armirq + ; ---- レジスタ退避 + msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit ; SYSモードに移行 + stmfd sp!, {r0-r3, r12, lr} ; SYSモードの汎用レジスタ退避 + msr cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit ; IRQモードに移行 + mov r0, lr ; lr_irq 取り出し + mrs r1, spsr ; spsr_irq 取り出し + msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit ; SYSモードに移行 + stmfd sp!, {r0, r1} ; lr_irq, spsr_irq退避 + + ; ---- 多重割込み判定 + ldr r0, =_kernel_int_nst_cnt ; 割り込みネストカウンタのアドレス取得 + ldrb r1, [r0] ; 割り込みネストカウンタ値取得 + subs r1, r1, #1 ; カウンタ減算(0判定が楽なのでマイナス方向にカウント) + strb r1, [r0] ; 割り込みネストカウンタ値設定 + bcs multiple_int ; 多重割り込みなら分岐 + + ; ---- 割り込み用スタックに入れ替え + ldr r2, _kernel_int_isp ; 割り込み用スタックの初期値アドレスを取得 + mov r1, sp ; タスクのSPを保存 + ldr sp, [r2] ; 割り込み用スタックに切り替え + stmfd sp!, {r0, r1} ; タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) + + ; ---- 割り込み処理 + bl _kernel_sta_int ; 割り込み開始 + + ; ---- 割り込みハンドラ実行 + mov r0, #INHNO_IRQ + bl _kernel_exe_inh + + ; ---- 割り込み処理の終了設定 + ldmfd sp!, {r0, r1} ; 汎用レジスタ復帰 + mov sp, r1 ; スタックを戻す + + mov r1, #0 ; 割り込みネストカウンタを0に戻す + strb r1, [r0] ; 割り込みネストカウンタ値設定 + + ; ---- 遅延ディスパッチ処理 + bl _kernel_end_int ; 割り込み終了処理 + +return_int + ; ---- 復帰処理 + ldmfd sp!, {r0, r1} ; lr_irq, spsr_irq 復帰 + msr cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit ; IRQモードに移行 + mov lr, r0 ; lr_irq 復帰 + msr spsr_csxf, r1 ; spsr_irq 復帰 + msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit ; SYSモードに移行 + ldmfd sp!, {r0-r3, r12, lr} ; SYSモードの汎用レジスタ復帰 + msr cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit ; IRQモードに移行 + subs pc, lr, #4 ; 割込み復帰 + + + ; ---- 多重割り込み処理 +multiple_int + ; ---- スタックを8バイトアライメントに移動 + mov r1, sp ; 割り込み発生時のSYSモードのSPに8の倍数の保証されないので + bic sp, sp, #0x7 + stmfd sp!, {r0, r1} ; タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) + + ; ---- 割り込みハンドラ実行 + mov r0, #INHNO_IRQ + bl _kernel_exe_inh + + ; ---- スタックアライメント復帰 + ldmfd sp!, {r0, r1} ; 汎用レジスタ復帰 + mov sp, r1 + + ; ---- 割り込みカウンタ復帰 + ldrb r1, [r0] + add r1, r1, #1 + strb r1, [r0] + + b return_int ; 復帰処理 + + + + AREA data, DATA, ALIGN=0 +_kernel_int_nst_cnt + DCB 0x00 + + + END + + +; --------------------------------------------------------------------------- +; End of file +; --------------------------------------------------------------------------- diff --git a/kernel/source/arch/proc/arm/arm_v6/rvct/armctx.s b/kernel/source/arch/proc/arm/arm_v6/rvct/armctx.s new file mode 100755 index 0000000..064a913 --- /dev/null +++ b/kernel/source/arch/proc/arm/arm_v6/rvct/armctx.s @@ -0,0 +1,138 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; @file dsp_tsk.c +; @brief %en{コンテキスト制御(ARM v6 アーキテクチャ)}%jp{ARM v6} +; +; @version $Id: armctx.s,v 1.1 2006-08-16 16:27:03 ryuz Exp $ +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + + EXPORT _kernel_ena_int ; 割り込み許可 + EXPORT _kernel_dis_int ; 割り込み禁止 + EXPORT _kernel_wai_int ; CPUのアイドル処理 + EXPORT _kernel_cre_ctx ; 実行コンテキストの作成 + EXPORT _kernel_sta_ctx ; 実行コンテキストの開始 + EXPORT _kernel_rst_ctx ; 実行コンテキストのリスタート + EXPORT _kernel_swi_ctx ; 実行コンテキストの切替 + + + + PRESERVE8 + AREA code, CODE, READONLY + + ALIGN + CODE32 + +; ----------------------------------------------- +; 割り込み許可 +; void _kernel_ena_int(void) +; ----------------------------------------------- +_kernel_ena_int + cpsie i ; 割り込み許可 + bx lr ; リターン + + +; ----------------------------------------------- +; 割り込み禁止 +; void _kernel_dis_int(void) +; ----------------------------------------------- +_kernel_dis_int + cpsid fi ; 割り込み禁止 + bx lr ; リターン + + +; ----------------------------------------------- +; 割り込み待ち(CPUのアイドル処理) +; void _kernel_wai_int(void); +; ----------------------------------------------- +_kernel_wai_int + mov r0, #0 +; mcr p15, 0, r0, c7, c0, 4 ; WaitForInterrupt + b _kernel_wai_int + + + + CODE16 + +; ----------------------------------------------- +; 実行コンテキストの作成 +; void _kernel_cre_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb, /* r0 :作成するコンテキスト */ +; VP isp, /* r1 :スタックポインタ */ +; FP entry, /* r2 :実行アドレス */ +; VP_INT par1, /* r3 :実行時パラメータ */ +; VP_INT par2) /* sp[0]:実行時パラメータ */ +; ----------------------------------------------- +_kernel_cre_ctx + sub r1, #36 ; スタックを確保 + str r2, [r1, #0] ; r4 部分にentryを設定 + str r3, [r1, #4] ; r5 部分にpar1を設定 + ldr r2, [sp, #0] ; par2を取り出し + str r2, [r1, #8] ; r6 部分にpar2を設定 + adr r2, ctx_entry ; エントリーアドレス設定 + add r2, #1 ; Thumbモードアドレスとして設定 + str r2, [r1, #32] ; lr 部分にエントリーアドレスを設定 + str r1, [r0] ; ctxcb に新 sp を保存 + bx lr ; リターン + + +; ----------------------------------------------- +; 実行コンテキストエントリーアドレス +; ----------------------------------------------- +ctx_entry + mov r0, r5 ; par1を設定 + mov r1, r6 ; par2を設定 + bx r4 ; entry を実行 + + +; ----------------------------------------------- +; 実行コンテキストのリスタート +; void _kernel_rst_ctx( +; VP_INT par1, /* r0 :実行時パラメータ */ +; VP_INT par2, /* r1 :実行時パラメータ */ +; FP entry, /* r2 :実行アドレス */ +; VP isp) /* r3 :スタックポインタ */ +; ----------------------------------------------- +_kernel_rst_ctx + mov sp, r3 ; スタックを初期値にリセット + bx r2 ; エントリーアドレスから再開始 + + + + ALIGN + CODE32 + +; ----------------------------------------------- +; 実行コンテキストの切替 +; void _kernel_swi_ctx( +; _KERNEL_T_CTXCB *pk_ctxinf_nxt, /* r0 : 現在のコンテキストの保存先 */ +; _KERNEL_T_CTXCB *pk_ctxinf_now) /* r1 : 切り替えるコンテキスト */ +; ----------------------------------------------- +_kernel_swi_ctx + stmfd sp!, {r4-r11, lr} ; レジスタ保存 + str sp, [r1] ; スタックポインタ保存 + ; ---- そのまま _kernel_sta_ctx に続ける + + +; ----------------------------------------------- +; 実行コンテキストの開始 +; void _kernel_sta_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb) /* r0: 実行を開始するコンテキスト */ +; ----------------------------------------------- +_kernel_sta_ctx + ldr sp, [r0] ; スタックポインタ復帰 + ldmfd sp!, {r4-r11, pc} ; レジスタ復帰 + + + END + + + +; --------------------------------------------------------------------------- +; End of file +; --------------------------------------------------------------------------- diff --git a/kernel/source/arch/proc/arm/arm_v6/rvct/armirq.s b/kernel/source/arch/proc/arm/arm_v6/rvct/armirq.s new file mode 100755 index 0000000..daba401 --- /dev/null +++ b/kernel/source/arch/proc/arm/arm_v6/rvct/armirq.s @@ -0,0 +1,119 @@ +; --------------------------------------------------------------------------- +; $Name: $ +; $Revision: 1.1 $ +; --------------------------------------------------------------------------- + + + + +; ---- プロセッサモード定義 ---- +Mode_USR EQU 0x10 ; USR モード +Mode_FIQ EQU 0x11 ; FIQ モード +Mode_IRQ EQU 0x12 ; IRQ モード +Mode_SVC EQU 0x13 ; SVC モード +Mode_ABT EQU 0x17 ; ABT モード +Mode_UND EQU 0x1b ; UND モード +Mode_SYS EQU 0x1f ; SYS モード + + +; ---- 割り込みハンドラ番号 ---- +INHNO_IRQ EQU 0 +INHNO_FIQ EQU 1 + + + PRESERVE8 + AREA code, CODE, READONLY + + IMPORT _kernel_int_isp + IMPORT _kernel_sta_inh + IMPORT _kernel_exe_inh + IMPORT _kernel_end_inh + + EXPORT _kernel_int_armirq ; IRQハンドラ + + + ALIGN + CODE32 + +; ---------------------------------------------- +; IRQ ハンドラ +; ---------------------------------------------- +_kernel_int_armirq + ; ---- レジスタ退避 + sub lr, lr, #4 ; リターンアドレス算出 + srsfd #Mode_SYS! ; lr_irq, spsr_irqをSYSモードスタックに退避 + cps #Mode_SYS ; SYSモードに移行 + stmfd sp!, {r0-r3, r12, lr} ; 汎用レジスタ退避 + + ; ---- 多重割込み判定 + ldr r0, =_kernel_int_nst_cnt ; 割り込みネストカウンタのアドレス取得 + ldrb r1, [r0] + subs r1, r1, #1 + strb r1, [r0] + bcs multiple_int ; 多重割り込みなら分岐 + + ; ---- 割り込み用スタックに入れ替え + ldr r2, =_kernel_int_isp ; 割り込み用スタックの初期値アドレスを取得 + mov r1, sp ; タスクのSPを保存 + ldr sp, [r2] ; 割り込み用スタックに切り替え + stmfd sp!, {r0, r1} ; タスクのSPを割り込み用スタックに保存 + + ; ---- 割り込み処理 + bl _kernel_sta_inh ; 割り込み開始 + + ; ---- 割り込みハンドラ実行 + mov r0, #INHNO_IRQ + bl _kernel_exe_inh + + ; ---- 割り込み処理の終了設定 + ldmfd sp!, {r0, r1} ; 汎用レジスタ復帰 + mov sp, r1 ; スタックを戻す + mov r1, #0 + strb r1, [r0] + + ; ---- 遅延ディスパッチ処理 + bl _kernel_end_inh ; 割り込み終了 + + + ; ---- 復帰処理 +return_int + ; ---- 復帰処理 + ldmfd sp!, {r0-r3, r12, lr} ; 汎用レジスタ復帰 + rfefd sp! ; リターン + + + ; ---- 多重割り込み処理 +multiple_int + ; ---- スタックを8バイトアライメントに移動 + mov r1, sp + bic sp, sp, #0x7 + stmfd sp!, {r0, r1} + + ; ---- 割り込みハンドラ実行 + mov r0, #INHNO_IRQ + bl _kernel_exe_inh + + ; ---- スタックアライメント復帰 + ldmfd sp!, {r0, r1} ; 汎用レジスタ復帰 + mov sp, r1 + + ; ---- 割り込みカウンタ復帰 + ldrb r1, [r0] + add r1, r1, #1 + strb r1, [r0] + + b return_int ; 復帰処理 + + + + AREA data, DATA, ALIGN=0 +_kernel_int_nst_cnt + DCB 0x00 + + + END + + +; --------------------------------------------------------------------------- +; End of file +; --------------------------------------------------------------------------- diff --git a/kernel/source/arch/proc/h8/h8300/ctxctl.src b/kernel/source/arch/proc/h8/h8300/ctxctl.src new file mode 100755 index 0000000..d0dd325 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300/ctxctl.src @@ -0,0 +1,107 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance μITRON4.0仕様 Real-Time OS +; コンテキスト制御 +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + + .EXPORT __kernel_dis_int ; 割り込み禁止 + .EXPORT __kernel_ena_int ; 割り込み許可 + .EXPORT __kernel_cre_ctx ; 実行コンテキストの作成 + .EXPORT __kernel_swi_ctx ; 実行コンテキストの切替 + .IMPORT __kernel_h83_imsk ; 割り込みマスク + + + .SECTION P, CODE, ALIGN=2 + + +; ----------------------------------------------- +; 割り込み禁止 +; void _kernel_dis_int(void) +; ----------------------------------------------- + .STACK __kernel_dis_int=4 +__kernel_dis_int: + orc #h'c0, ccr ; 割り込みの禁止 + rts + + +; ----------------------------------------------- +; 割り込み許可 +; void _kernel_ena_int(void) +; ----------------------------------------------- + .STACK __kernel_ena_int=4 +__kernel_ena_int: + mov.b @__kernel_h83_imsk, r0l + ldc.b r0l, ccr ; 割り込みの許可 + rts + + +; ----------------------------------------------- +; 実行コンテキストエントリーアドレス +; ----------------------------------------------- +ctx_entry: + mov.l er3, er0 ; 実行時パラメータを第一引数に設定 + mov.l er4, er1 ; 実行時パラメータを第一引数に設定 + jmp @er2 ; 実行アドレスにジャンプ + + +; ----------------------------------------------- +; 実行コンテキストの作成 +; _kernel_cre_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト [er0] +; VP isp, 初期スタックポインタ [er1] +; FP entry, 実行アドレス [er2] +; VP_INT par1, 実行時パラメータ1 [@(4, er7)] +; VP_INT par2) 実行時パラメータ2 [@(8, er7)] +; ----------------------------------------------- + .STACK __kernel_cre_ctx=12 +__kernel_cre_ctx: + sub.l #24, er1 ; エントリーポイント+er2〜er6 までの退避分 + mov.l er2, @(0, er1) ; 実行アドレスの格納(er2部分) + mov.l @(4, er7), er2 + mov.l er2, @(4, er1) ; 実行時パラメータ1の格納(er3部分) + mov.l @(8, er7), er2 + mov.l er2, @(8, er1) ; 実行時パラメータ1の格納(er4部分) + mov.l #ctx_entry, er2 + mov.l er2, @(20, er1) ; 実行エントリーポイントの設定 + mov.l er1, @(0, er0) ; スタックポインタの格納 + rts + + +; ----------------------------------------------- +; 実行コンテキストの切替 +; void _kernel_swi_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb_nxt, 切り替え先のコンテキスト [er0] +; _KERNEL_T_CTXCB *pk_ctxcb_now) 現在のコンテキスト [er1] +; ----------------------------------------------- + .STACK __kernel_swi_ctx=24 +__kernel_swi_ctx: + push.l er2 + push.l er3 + push.l er4 + push.l er5 + push.l er6 + mov.l er7,@(0, er1) ; スタックポインタ保存 + ; ---- このまま _kernel_sta_ctx に続ける + +; ----------------------------------------------- +; 実行コンテキストの開始 +; void _kernel_sta_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb) 開始するコンテキスト [er0] +; ----------------------------------------------- + .STACK __kernel_sta_ctx=4 +__kernel_sta_ctx: + mov.l @(0, er0), er7 ; スタックポインタ復帰 + pop.l er6 + pop.l er5 + pop.l er4 + pop.l er3 + pop.l er2 + rts + + + + .END diff --git a/kernel/source/arch/proc/h8/h8300ha/ctxctl.src b/kernel/source/arch/proc/h8/h8300ha/ctxctl.src new file mode 100755 index 0000000..c593a64 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/ctxctl.src @@ -0,0 +1,144 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance μITRON4.0仕様 Real-Time OS +; コンテキスト制御 +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + + .EXPORT __kernel_dis_int ; 割り込み禁止 + .EXPORT __kernel_ena_int ; 割り込み許可 + .EXPORT __kernel_wai_int ; 割り込み待ち + .EXPORT __kernel_cre_ctx ; 実行コンテキストの作成 + .EXPORT __kernel_swi_ctx ; 実行コンテキストの切替 + .EXPORT __kernel_sta_ctx ; 実行コンテキストの開始 + .EXPORT __kernel_rst_ctx ; 実行コンテキストのリスタート + .EXPORT __kernel_h83_imsk ; 割り込みマスク + + + .SECTION P, CODE, ALIGN=2 + + +; ----------------------------------------------- +; 割り込み禁止 +; void _kernel_dis_int(void) +; ----------------------------------------------- + .STACK __kernel_dis_int=4 +__kernel_dis_int: + orc #h'c0, ccr ; 割り込みの禁止 + rts + + +; ----------------------------------------------- +; 割り込み許可 +; void _kernel_ena_int(void) +; ----------------------------------------------- + .STACK __kernel_ena_int=4 +__kernel_ena_int: + mov.b @__kernel_h83_imsk, r0l + ldc.b r0l, ccr ; 割り込みの許可 + rts + +;------------------------------------------------ +; 割り込み待ち +; void _kernel_wai_int(void) +;------------------------------------------------ + .STACK __kernel_wai_int=4 +__kernel_wai_int: + ; sleep + jmp @__kernel_wai_int + + + +; ----------------------------------------------- +; 実行コンテキストエントリーアドレス +; ----------------------------------------------- +ctx_entry: + mov.l er3, er0 ; 実行時パラメータを第一引数に設定 + mov.l er4, er1 ; 実行時パラメータを第一引数に設定 + jmp @er2 ; 実行アドレスにジャンプ + + +; ----------------------------------------------- +; 実行コンテキストの作成 +; _kernel_cre_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト [er0] +; VP isp, 初期スタックポインタ [er1] +; FP entry, 実行アドレス [@(4, er7)] +; VP_INT par1, 実行時パラメータ1 [@(8, er7)] +; VP_INT par2) 実行時パラメータ2 [@(12, er7)] +; ----------------------------------------------- + .STACK __kernel_cre_ctx=12 +__kernel_cre_ctx: + sub.l #24, er1 ; エントリーポイント+er2〜er6 までの退避分 + mov.l er1, @(0, er0) ; スタックポインタの格納 + mov.l #ctx_entry, er0 + mov.l er0, @(20, er1) ; 実行エントリーポイントの設定 + mov.l @(4, er7), er0 + mov.l er0, @(16, er1) ; 実行アドレスの格納(er2部分) + mov.l @(8, er7), er0 + mov.l er0, @(12, er1) ; 実行時パラメータ1の格納(er3部分) + mov.l @(12, er7), er0 + mov.l er0, @(8, er1) ; 実行時パラメータ1の格納(er4部分) + rts + + +; ----------------------------------------------- +; 実行コンテキストの切替 +; void _kernel_swi_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb_nxt, 切り替え先のコンテキスト [er0] +; _KERNEL_T_CTXCB *pk_ctxcb_now) 現在のコンテキスト [er1] +; ----------------------------------------------- + .STACK __kernel_swi_ctx=24 +__kernel_swi_ctx: + push.l er2 + push.l er3 + push.l er4 + push.l er5 + push.l er6 + mov.l er7,@(0, er1) ; スタックポインタ保存 + ; ---- このまま _kernel_sta_ctx に続ける + +; ----------------------------------------------- +; 実行コンテキストの開始 +; void _kernel_sta_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb) 開始するコンテキスト [er0] +; ----------------------------------------------- + .STACK __kernel_sta_ctx=4 +__kernel_sta_ctx: + mov.l @(0, er0), er7 ; スタックポインタ復帰 + pop.l er6 + pop.l er5 + pop.l er4 + pop.l er3 + pop.l er2 + rts + + +;------------------------------------------------ +; 実行コンテキストのリスタート +; void _kernel_rst_ctx( +; VP_INT par1, 実行時パラメータ1 [er0] +; VP_INT par2, 実行時パラメータ2 [er1] +; VP isp, 初期スタックポインタ [@(4, er7)] +; FP entry) 実行アドレス [@(8, er7)] +;------------------------------------------------ + .STACK __kernel_rst_ctx=8 +__kernel_rst_ctx: + mov.l @(4, er7), er3 ; 初期スタックポインタ + mov.l @(8, er7), er4 ; 実行アドレス取り出し + mov.l er3, er7 ; スタックポインタリセット + jmp @r4 ; 実行アドレスに分岐 + + + + + .SECTION B, DATA, ALIGN=2 + +__kernel_h83_imsk: + .RES.B 1 + + + .END diff --git a/kernel/source/arch/proc/h8/h8300ha/intctl.src b/kernel/source/arch/proc/h8/h8300ha/intctl.src new file mode 100755 index 0000000..9fd649f --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/intctl.src @@ -0,0 +1,133 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 μITRON4.0仕様 Real-Time OS +; プロセッサ抽象化コンポーネント (日立 H8/300H 用) +; 割り込みハンドラ +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + + .EXPORT __kernel_int_hdr + .IMPORT __kernel_sta_inh ; 割り込み処理開始 + .IMPORT __kernel_end_inh ; 割り込み処理終了 + .IMPORT __kernel_exe_inh ; 割り込み処理実行 + .IMPORT __kernel_int_isp ; 割り込み用スタックアドレス + .IMPORT __kernel_h83_imsk ; 現在の割り込みマスク値 + + + + .SECTION P, CODE, ALIGN=2 + + +; ----------------------------------------------- +; 割り込み処理 +; +; 割り込み発生時は er0 を push した後、er0 に +; 割り込み番号をセットして、ここにジャンプする +; ----------------------------------------------- + +__kernel_int_hdr: + ; ---- レジスタ保存 + push.l er1 + + ; ---- 割り込みをマスク + stc.b ccr, r1l ; ccr保存 + orc #h'c0, ccr ; 割込み全マスク + and.b #h'c0, r1l + + ; -------- 多重割り込みの判別 + mov.b @__kernel_int_cnt, r1h + bne multiple_int + + ; ======== 最初の割り込み ======== + ; ---- 割込みマスク値(_kernel_h83_imsk)を設定 + mov.b @__kernel_h83_imsk, r0h ; 古い割込みマスク値を保存 + mov.b r1l, @__kernel_h83_imsk ; 新しいマスク値を設定 + + ; ---- 割り込みネストカウンタ設定 + mov.b #1, r1h + mov.b r1h, @__kernel_int_cnt + + ; ---- スタックポインタの入れ替え + mov.l er7, er1 + mov.l @__kernel_int_isp, er7 + push.l er1 ; 直前のスタックポインタを保存 + + ; ---- 古い割込みマスク値(r0h)と割込み番号(r0l)の保存 + push.w r0 + + ; ---- 割り込み処理の開始 + jsr @__kernel_sta_inh + + ; -------- 割り込みハンドラの処理 + mov.b @(1, er7), r0l ; スタックから割込み番号を取り出す + extu.w r0 + extu.l er0 + jsr @__kernel_exe_inh + + ; ---- 古い割込みマスク値(r0h)と割込み番号(r0l)の復帰 + pop.w r0 + + ; -------- スタックポインタ復帰 + mov.l @er7, er7 + + ; -------- 割り込みネストカウンタクリア + xor.b r1l, r1l + mov.b r1l, @__kernel_int_cnt + + ; -------- 割り込みマスク値の復帰 + mov.b @(10, er7), r1l + and.b #h'c0, r1l + mov.b r1l, @__kernel_h83_imsk ; 割込み前の値に戻す + cmp.b r1l, r0h + bne return_int ; 割込み前処理中の多重割り込みなら後処理をカット + + ; -------- コンテキストスイッチ実施 + jsr @__kernel_end_inh + + ; -------- コンテキストスイッチの後処理 + mov.b @__kernel_h83_imsk, r0l ; マスク値取り出し + mov.b @(10, er7), r1l + and.b #h'3f, r1l + or.b r0l, r1l + mov.b r1l, @(10, er7) ; スタック上のCCRを更新 + +return_int: + ; -------- 復帰 + pop.l er1 + pop.l er0 + rte + + + ; ======== 多重割り込み ======== +multiple_int: + ; -------- 割り込みネストカウンタ加算 + add.b #1, r1h + mov.b r1h, @__kernel_int_cnt + + ; ---- 割込みマスク値(_kernel_h83_imsk)を設定 + mov.b r1l, @__kernel_h83_imsk ; 新しいマスク値を設定 + + ; -------- 割り込みハンドラ呼び出し + jsr @__kernel_exe_inh + + ; -------- 割り込みネストカウンタ減算 + mov.b @__kernel_int_cnt, r1h + dec.b r1h + mov.b r1h, @__kernel_int_cnt + + ; -------- 復帰 + bra return_int + + + .SECTION B, DATA, ALIGN=2 + +__kernel_int_cnt: + .RES.B 1 + + + .END + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/mk_vec/mk_vec.c b/kernel/source/arch/proc/h8/h8300ha/mk_vec/mk_vec.c new file mode 100755 index 0000000..37da2ee --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/mk_vec/mk_vec.c @@ -0,0 +1,125 @@ +#include +#include + + +int main() +{ + FILE *fp; + char fname[64]; + int i; + + for ( i = 1; i <= 11; i++ ) + { + sprintf(fname ,"../vect_%03d.src", i); + if ( (fp = fopen(fname, "w")) == NULL ) + { + return 1; + } + + fprintf(fp, + "; --------------------------------------------------------------------------- \n" + "; Hyper Operating System V4 Advance\n" + "; \n" + "; Copyright (C) 1998-2006 by Project HOS\n" + "; http://sourceforge.jp/projects/hos/\n" + "; --------------------------------------------------------------------------- \n" + "\n" + "\n" + " .EXPORT __kernel_vector_%03d\n" + " .IMPORT __kernel_exc_hdr\n" + "\n" + "\n" + " .SECTION P, CODE, ALIGN=2\n" + "\n" + "__kernel_vector_%03d:\n" + " push.l er0\n" + " mov.b #%d, r0l\n" + " bra __kernel_exc_hdr\n" + "\n" + "\n" + " .END\n" + "\n" + "\n" + "; end of file\n", + i, i, i); + + fclose(fp); + } + + + for ( i = 12; i <= 63; i++ ) + { + sprintf(fname ,"../vect_%03d.src", i); + if ( (fp = fopen(fname, "w")) == NULL ) + { + return 1; + } + + fprintf(fp, + "; --------------------------------------------------------------------------- \n" + "; Hyper Operating System V4 Advance\n" + "; \n" + "; Copyright (C) 1998-2006 by Project HOS\n" + "; http://sourceforge.jp/projects/hos/\n" + "; --------------------------------------------------------------------------- \n" + "\n" + "\n" + " .EXPORT __kernel_vector_%03d\n" + " .IMPORT __kernel_int_hdr\n" + "\n" + "\n" + " .SECTION P, CODE, ALIGN=2\n" + "\n" + "__kernel_vector_%03d:\n" + " push.l er0\n" + " mov.b #%d, r0l\n" + " bra __kernel_int_hdr\n" + "\n" + "\n" + " .END\n" + "\n" + "\n" + "; end of file\n", + i, i, i); + + fclose(fp); + } + + { + sprintf(fname ,"../vect_dmy.src", i); + if ( (fp = fopen(fname, "w")) == NULL ) + { + return 1; + } + + fprintf(fp, + "; --------------------------------------------------------------------------- \n" + "; Hyper Operating System V4 Advance\n" + "; \n" + "; Copyright (C) 1998-2006 by Project HOS\n" + "; http://sourceforge.jp/projects/hos/\n" + "; --------------------------------------------------------------------------- \n" + "\n" + "\n" + " .EXPORT __kernel_vector_dmy\n" + " .IMPORT __kernel_int_hdr\n" + "\n" + "\n" + " .SECTION P, CODE, ALIGN=2\n" + "\n" + "__kernel_vector_dmy:\n" + " rte\n" + "\n" + "\n" + " .END\n" + "\n" + "\n" + "; end of file\n", + i, i); + + fclose(fp); + } + + return 0; +} + diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_001.src b/kernel/source/arch/proc/h8/h8300ha/vect_001.src new file mode 100755 index 0000000..6610a07 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_001.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_001 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_001: + push.l er0 + mov.b #1, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_002.src b/kernel/source/arch/proc/h8/h8300ha/vect_002.src new file mode 100755 index 0000000..f78cfcb --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_002.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_002 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_002: + push.l er0 + mov.b #2, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_003.src b/kernel/source/arch/proc/h8/h8300ha/vect_003.src new file mode 100755 index 0000000..4379e0e --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_003.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_003 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_003: + push.l er0 + mov.b #3, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_004.src b/kernel/source/arch/proc/h8/h8300ha/vect_004.src new file mode 100755 index 0000000..26b68e9 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_004.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_004 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_004: + push.l er0 + mov.b #4, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_005.src b/kernel/source/arch/proc/h8/h8300ha/vect_005.src new file mode 100755 index 0000000..2706d5d --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_005.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_005 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_005: + push.l er0 + mov.b #5, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_006.src b/kernel/source/arch/proc/h8/h8300ha/vect_006.src new file mode 100755 index 0000000..a586f3e --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_006.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_006 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_006: + push.l er0 + mov.b #6, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_007.src b/kernel/source/arch/proc/h8/h8300ha/vect_007.src new file mode 100755 index 0000000..8d60b5d --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_007.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_007 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_007: + push.l er0 + mov.b #7, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_008.src b/kernel/source/arch/proc/h8/h8300ha/vect_008.src new file mode 100755 index 0000000..509cbec --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_008.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_008 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_008: + push.l er0 + mov.b #8, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_009.src b/kernel/source/arch/proc/h8/h8300ha/vect_009.src new file mode 100755 index 0000000..7f6b88a --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_009.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_009 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_009: + push.l er0 + mov.b #9, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_010.src b/kernel/source/arch/proc/h8/h8300ha/vect_010.src new file mode 100755 index 0000000..557f52f --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_010.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_010 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_010: + push.l er0 + mov.b #10, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_011.src b/kernel/source/arch/proc/h8/h8300ha/vect_011.src new file mode 100755 index 0000000..407ad35 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_011.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_011 + .IMPORT __kernel_exc_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_011: + push.l er0 + mov.b #11, r0l + bra __kernel_exc_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_012.src b/kernel/source/arch/proc/h8/h8300ha/vect_012.src new file mode 100755 index 0000000..06cd771 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_012.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_012 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_012: + push.l er0 + mov.b #12, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_013.src b/kernel/source/arch/proc/h8/h8300ha/vect_013.src new file mode 100755 index 0000000..ea14d4f --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_013.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_013 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_013: + push.l er0 + mov.b #13, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_014.src b/kernel/source/arch/proc/h8/h8300ha/vect_014.src new file mode 100755 index 0000000..76be3a9 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_014.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_014 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_014: + push.l er0 + mov.b #14, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_015.src b/kernel/source/arch/proc/h8/h8300ha/vect_015.src new file mode 100755 index 0000000..a11f1ac --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_015.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_015 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_015: + push.l er0 + mov.b #15, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_016.src b/kernel/source/arch/proc/h8/h8300ha/vect_016.src new file mode 100755 index 0000000..e31f5f0 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_016.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_016 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_016: + push.l er0 + mov.b #16, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_017.src b/kernel/source/arch/proc/h8/h8300ha/vect_017.src new file mode 100755 index 0000000..3327681 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_017.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_017 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_017: + push.l er0 + mov.b #17, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_018.src b/kernel/source/arch/proc/h8/h8300ha/vect_018.src new file mode 100755 index 0000000..aee10b5 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_018.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_018 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_018: + push.l er0 + mov.b #18, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_019.src b/kernel/source/arch/proc/h8/h8300ha/vect_019.src new file mode 100755 index 0000000..87321e6 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_019.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_019 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_019: + push.l er0 + mov.b #19, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_020.src b/kernel/source/arch/proc/h8/h8300ha/vect_020.src new file mode 100755 index 0000000..0ee345f --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_020.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_020 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_020: + push.l er0 + mov.b #20, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_021.src b/kernel/source/arch/proc/h8/h8300ha/vect_021.src new file mode 100755 index 0000000..267dd08 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_021.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_021 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_021: + push.l er0 + mov.b #21, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_022.src b/kernel/source/arch/proc/h8/h8300ha/vect_022.src new file mode 100755 index 0000000..8ca4365 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_022.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_022 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_022: + push.l er0 + mov.b #22, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_023.src b/kernel/source/arch/proc/h8/h8300ha/vect_023.src new file mode 100755 index 0000000..beb4ec1 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_023.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_023 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_023: + push.l er0 + mov.b #23, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_024.src b/kernel/source/arch/proc/h8/h8300ha/vect_024.src new file mode 100755 index 0000000..3701b96 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_024.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_024 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_024: + push.l er0 + mov.b #24, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_025.src b/kernel/source/arch/proc/h8/h8300ha/vect_025.src new file mode 100755 index 0000000..bab3ca1 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_025.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_025 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_025: + push.l er0 + mov.b #25, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_026.src b/kernel/source/arch/proc/h8/h8300ha/vect_026.src new file mode 100755 index 0000000..e82b452 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_026.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_026 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_026: + push.l er0 + mov.b #26, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_027.src b/kernel/source/arch/proc/h8/h8300ha/vect_027.src new file mode 100755 index 0000000..95c4a9b --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_027.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_027 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_027: + push.l er0 + mov.b #27, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_028.src b/kernel/source/arch/proc/h8/h8300ha/vect_028.src new file mode 100755 index 0000000..4c5d4bf --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_028.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_028 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_028: + push.l er0 + mov.b #28, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_029.src b/kernel/source/arch/proc/h8/h8300ha/vect_029.src new file mode 100755 index 0000000..b83a2c5 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_029.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_029 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_029: + push.l er0 + mov.b #29, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_030.src b/kernel/source/arch/proc/h8/h8300ha/vect_030.src new file mode 100755 index 0000000..18a37d9 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_030.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_030 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_030: + push.l er0 + mov.b #30, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_031.src b/kernel/source/arch/proc/h8/h8300ha/vect_031.src new file mode 100755 index 0000000..7a9c4d8 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_031.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_031 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_031: + push.l er0 + mov.b #31, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_032.src b/kernel/source/arch/proc/h8/h8300ha/vect_032.src new file mode 100755 index 0000000..fa4090d --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_032.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_032 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_032: + push.l er0 + mov.b #32, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_033.src b/kernel/source/arch/proc/h8/h8300ha/vect_033.src new file mode 100755 index 0000000..f1149b1 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_033.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_033 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_033: + push.l er0 + mov.b #33, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_034.src b/kernel/source/arch/proc/h8/h8300ha/vect_034.src new file mode 100755 index 0000000..723b9b9 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_034.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_034 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_034: + push.l er0 + mov.b #34, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_035.src b/kernel/source/arch/proc/h8/h8300ha/vect_035.src new file mode 100755 index 0000000..813536d --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_035.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_035 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_035: + push.l er0 + mov.b #35, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_036.src b/kernel/source/arch/proc/h8/h8300ha/vect_036.src new file mode 100755 index 0000000..4beaaf7 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_036.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_036 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_036: + push.l er0 + mov.b #36, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_037.src b/kernel/source/arch/proc/h8/h8300ha/vect_037.src new file mode 100755 index 0000000..d69a970 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_037.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_037 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_037: + push.l er0 + mov.b #37, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_038.src b/kernel/source/arch/proc/h8/h8300ha/vect_038.src new file mode 100755 index 0000000..1ffb615 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_038.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_038 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_038: + push.l er0 + mov.b #38, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_039.src b/kernel/source/arch/proc/h8/h8300ha/vect_039.src new file mode 100755 index 0000000..eb73016 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_039.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_039 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_039: + push.l er0 + mov.b #39, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_040.src b/kernel/source/arch/proc/h8/h8300ha/vect_040.src new file mode 100755 index 0000000..7618be1 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_040.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_040 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_040: + push.l er0 + mov.b #40, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_041.src b/kernel/source/arch/proc/h8/h8300ha/vect_041.src new file mode 100755 index 0000000..2695e9e --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_041.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_041 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_041: + push.l er0 + mov.b #41, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_042.src b/kernel/source/arch/proc/h8/h8300ha/vect_042.src new file mode 100755 index 0000000..b82efdf --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_042.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_042 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_042: + push.l er0 + mov.b #42, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_043.src b/kernel/source/arch/proc/h8/h8300ha/vect_043.src new file mode 100755 index 0000000..285e87d --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_043.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_043 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_043: + push.l er0 + mov.b #43, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_044.src b/kernel/source/arch/proc/h8/h8300ha/vect_044.src new file mode 100755 index 0000000..bf73fd5 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_044.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_044 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_044: + push.l er0 + mov.b #44, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_045.src b/kernel/source/arch/proc/h8/h8300ha/vect_045.src new file mode 100755 index 0000000..70dd35e --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_045.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_045 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_045: + push.l er0 + mov.b #45, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_046.src b/kernel/source/arch/proc/h8/h8300ha/vect_046.src new file mode 100755 index 0000000..8fe452e --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_046.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_046 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_046: + push.l er0 + mov.b #46, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_047.src b/kernel/source/arch/proc/h8/h8300ha/vect_047.src new file mode 100755 index 0000000..9a94dbd --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_047.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_047 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_047: + push.l er0 + mov.b #47, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_048.src b/kernel/source/arch/proc/h8/h8300ha/vect_048.src new file mode 100755 index 0000000..baecd3b --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_048.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_048 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_048: + push.l er0 + mov.b #48, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_049.src b/kernel/source/arch/proc/h8/h8300ha/vect_049.src new file mode 100755 index 0000000..44d0613 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_049.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_049 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_049: + push.l er0 + mov.b #49, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_050.src b/kernel/source/arch/proc/h8/h8300ha/vect_050.src new file mode 100755 index 0000000..31d55ee --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_050.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_050 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_050: + push.l er0 + mov.b #50, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_051.src b/kernel/source/arch/proc/h8/h8300ha/vect_051.src new file mode 100755 index 0000000..5fdd7e7 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_051.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_051 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_051: + push.l er0 + mov.b #51, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_052.src b/kernel/source/arch/proc/h8/h8300ha/vect_052.src new file mode 100755 index 0000000..edace57 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_052.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_052 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_052: + push.l er0 + mov.b #52, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_053.src b/kernel/source/arch/proc/h8/h8300ha/vect_053.src new file mode 100755 index 0000000..493a12d --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_053.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_053 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_053: + push.l er0 + mov.b #53, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_054.src b/kernel/source/arch/proc/h8/h8300ha/vect_054.src new file mode 100755 index 0000000..d2b5d0a --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_054.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_054 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_054: + push.l er0 + mov.b #54, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_055.src b/kernel/source/arch/proc/h8/h8300ha/vect_055.src new file mode 100755 index 0000000..87d196c --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_055.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_055 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_055: + push.l er0 + mov.b #55, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_056.src b/kernel/source/arch/proc/h8/h8300ha/vect_056.src new file mode 100755 index 0000000..44540b9 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_056.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_056 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_056: + push.l er0 + mov.b #56, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_057.src b/kernel/source/arch/proc/h8/h8300ha/vect_057.src new file mode 100755 index 0000000..1c03cbd --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_057.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_057 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_057: + push.l er0 + mov.b #57, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_058.src b/kernel/source/arch/proc/h8/h8300ha/vect_058.src new file mode 100755 index 0000000..ad1038f --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_058.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_058 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_058: + push.l er0 + mov.b #58, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_059.src b/kernel/source/arch/proc/h8/h8300ha/vect_059.src new file mode 100755 index 0000000..792702c --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_059.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_059 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_059: + push.l er0 + mov.b #59, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_060.src b/kernel/source/arch/proc/h8/h8300ha/vect_060.src new file mode 100755 index 0000000..994d7c8 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_060.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_060 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_060: + push.l er0 + mov.b #60, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_061.src b/kernel/source/arch/proc/h8/h8300ha/vect_061.src new file mode 100755 index 0000000..7341e91 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_061.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_061 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_061: + push.l er0 + mov.b #61, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_062.src b/kernel/source/arch/proc/h8/h8300ha/vect_062.src new file mode 100755 index 0000000..6029571 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_062.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_062 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_062: + push.l er0 + mov.b #62, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_063.src b/kernel/source/arch/proc/h8/h8300ha/vect_063.src new file mode 100755 index 0000000..c920bfc --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_063.src @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_063 + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_063: + push.l er0 + mov.b #63, r0l + bra __kernel_int_hdr + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_dmy.src b/kernel/source/arch/proc/h8/h8300ha/vect_dmy.src new file mode 100755 index 0000000..0666ce6 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8300ha/vect_dmy.src @@ -0,0 +1,22 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_dmy + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=2 + +__kernel_vector_dmy: + rte + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/h8/h8s2600a/ctxctl.src b/kernel/source/arch/proc/h8/h8s2600a/ctxctl.src new file mode 100755 index 0000000..df6f667 --- /dev/null +++ b/kernel/source/arch/proc/h8/h8s2600a/ctxctl.src @@ -0,0 +1,138 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance μITRON4.0仕様 Real-Time OS +; コンテキスト制御 +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + + .EXPORT __kernel_dis_int ; 割り込み禁止 + .EXPORT __kernel_ena_int ; 割り込み許可 + .EXPORT __kernel_wai_int ; 割り込み待ち + .EXPORT __kernel_cre_ctx ; 実行コンテキストの作成 + .EXPORT __kernel_swi_ctx ; 実行コンテキストの切替 + .EXPORT __kernel_sta_ctx ; 実行コンテキストの開始 + .EXPORT __kernel_rst_ctx ; 実行コンテキストのリスタート + .EXPORT __kernel_h83_imsk ; 割り込みマスク + + + .SECTION P, CODE, ALIGN=2 + + +; ----------------------------------------------- +; 割り込み禁止 +; void _kernel_dis_int(void) +; ----------------------------------------------- + .STACK __kernel_dis_int=4 +__kernel_dis_int: + orc #h'c0, ccr ; 割り込みの禁止 + rts + + +; ----------------------------------------------- +; 割り込み許可 +; void _kernel_ena_int(void) +; ----------------------------------------------- + .STACK __kernel_ena_int=4 +__kernel_ena_int: + mov.b @__kernel_h83_imsk, r0l + ldc.b r0l, ccr ; 割り込みの許可 + rts + +;------------------------------------------------ +; 割り込み待ち +; void _kernel_wai_int(void) +;------------------------------------------------ + .STACK __kernel_wai_int=4 +__kernel_wai_int: + ; sleep + jmp @__kernel_wai_int + + + +; ----------------------------------------------- +; 実行コンテキストエントリーアドレス +; ----------------------------------------------- +ctx_entry: + mov.l er3, er0 ; 実行時パラメータを第一引数に設定 + mov.l er4, er1 ; 実行時パラメータを第一引数に設定 + jmp @er2 ; 実行アドレスにジャンプ + + +; ----------------------------------------------- +; 実行コンテキストの作成 +; _kernel_cre_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト [er0] +; VP isp, 初期スタックポインタ [er1] +; FP entry, 実行アドレス [@(4, er7)] +; VP_INT par1, 実行時パラメータ1 [@(8, er7)] +; VP_INT par2) 実行時パラメータ2 [@(12, er7)] +; ----------------------------------------------- + .STACK __kernel_cre_ctx=12 +__kernel_cre_ctx: + sub.l #24, er1 ; エントリーポイント+er2〜er6 までの退避分 + mov.l er1, @(0, er0) ; スタックポインタの格納 + mov.l #ctx_entry, er0 + mov.l er0, @(20, er1) ; 実行エントリーポイントの設定 + mov.l @(4, er7), er0 + mov.l er0, @(16, er1) ; 実行アドレスの格納(er2部分) + mov.l @(8, er7), er0 + mov.l er0, @(12, er1) ; 実行時パラメータ1の格納(er3部分) + mov.l @(12, er7), er0 + mov.l er0, @(8, er1) ; 実行時パラメータ1の格納(er4部分) + rts + + +; ----------------------------------------------- +; 実行コンテキストの切替 +; void _kernel_swi_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb_nxt, 切り替え先のコンテキスト [er0] +; _KERNEL_T_CTXCB *pk_ctxcb_now) 現在のコンテキスト [er1] +; ----------------------------------------------- + .STACK __kernel_swi_ctx=24 +__kernel_swi_ctx: + stm.l (er2-er3), @-er7 + stm.l (er4-er6), @-er7 + mov.l er7,@(0, er1) ; スタックポインタ保存 + ; ---- このまま _kernel_sta_ctx に続ける + +; ----------------------------------------------- +; 実行コンテキストの開始 +; void _kernel_sta_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb) 開始するコンテキスト [er0] +; ----------------------------------------------- + .STACK __kernel_sta_ctx=4 +__kernel_sta_ctx: + mov.l @(0, er0), er7 ; スタックポインタ復帰 + ldm.l @er7+, (er4-er6) + ldm.l @er7+, (er2-er3) + rts + + +;------------------------------------------------ +; 実行コンテキストのリスタート +; void _kernel_rst_ctx( +; VP_INT par1, 実行時パラメータ1 [er0] +; VP_INT par2, 実行時パラメータ2 [er1] +; VP isp, 初期スタックポインタ [@(4, er7)] +; FP entry) 実行アドレス [@(8, er7)] +;------------------------------------------------ + .STACK __kernel_rst_ctx=8 +__kernel_rst_ctx: + mov.l @(4, er7), er3 ; 初期スタックポインタ + mov.l @(8, er7), er4 ; 実行アドレス取り出し + mov.l er3, er7 ; スタックポインタリセット + jmp @r4 ; 実行アドレスに分岐 + + + + + .SECTION B, DATA, ALIGN=2 + +__kernel_h83_imsk: + .RES.B 1 + + + .END diff --git a/kernel/source/arch/proc/h8/h8s2600a/intctl.src b/kernel/source/arch/proc/h8/h8s2600a/intctl.src new file mode 100755 index 0000000..9fd649f --- /dev/null +++ b/kernel/source/arch/proc/h8/h8s2600a/intctl.src @@ -0,0 +1,133 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 μITRON4.0仕様 Real-Time OS +; プロセッサ抽象化コンポーネント (日立 H8/300H 用) +; 割り込みハンドラ +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + + .EXPORT __kernel_int_hdr + .IMPORT __kernel_sta_inh ; 割り込み処理開始 + .IMPORT __kernel_end_inh ; 割り込み処理終了 + .IMPORT __kernel_exe_inh ; 割り込み処理実行 + .IMPORT __kernel_int_isp ; 割り込み用スタックアドレス + .IMPORT __kernel_h83_imsk ; 現在の割り込みマスク値 + + + + .SECTION P, CODE, ALIGN=2 + + +; ----------------------------------------------- +; 割り込み処理 +; +; 割り込み発生時は er0 を push した後、er0 に +; 割り込み番号をセットして、ここにジャンプする +; ----------------------------------------------- + +__kernel_int_hdr: + ; ---- レジスタ保存 + push.l er1 + + ; ---- 割り込みをマスク + stc.b ccr, r1l ; ccr保存 + orc #h'c0, ccr ; 割込み全マスク + and.b #h'c0, r1l + + ; -------- 多重割り込みの判別 + mov.b @__kernel_int_cnt, r1h + bne multiple_int + + ; ======== 最初の割り込み ======== + ; ---- 割込みマスク値(_kernel_h83_imsk)を設定 + mov.b @__kernel_h83_imsk, r0h ; 古い割込みマスク値を保存 + mov.b r1l, @__kernel_h83_imsk ; 新しいマスク値を設定 + + ; ---- 割り込みネストカウンタ設定 + mov.b #1, r1h + mov.b r1h, @__kernel_int_cnt + + ; ---- スタックポインタの入れ替え + mov.l er7, er1 + mov.l @__kernel_int_isp, er7 + push.l er1 ; 直前のスタックポインタを保存 + + ; ---- 古い割込みマスク値(r0h)と割込み番号(r0l)の保存 + push.w r0 + + ; ---- 割り込み処理の開始 + jsr @__kernel_sta_inh + + ; -------- 割り込みハンドラの処理 + mov.b @(1, er7), r0l ; スタックから割込み番号を取り出す + extu.w r0 + extu.l er0 + jsr @__kernel_exe_inh + + ; ---- 古い割込みマスク値(r0h)と割込み番号(r0l)の復帰 + pop.w r0 + + ; -------- スタックポインタ復帰 + mov.l @er7, er7 + + ; -------- 割り込みネストカウンタクリア + xor.b r1l, r1l + mov.b r1l, @__kernel_int_cnt + + ; -------- 割り込みマスク値の復帰 + mov.b @(10, er7), r1l + and.b #h'c0, r1l + mov.b r1l, @__kernel_h83_imsk ; 割込み前の値に戻す + cmp.b r1l, r0h + bne return_int ; 割込み前処理中の多重割り込みなら後処理をカット + + ; -------- コンテキストスイッチ実施 + jsr @__kernel_end_inh + + ; -------- コンテキストスイッチの後処理 + mov.b @__kernel_h83_imsk, r0l ; マスク値取り出し + mov.b @(10, er7), r1l + and.b #h'3f, r1l + or.b r0l, r1l + mov.b r1l, @(10, er7) ; スタック上のCCRを更新 + +return_int: + ; -------- 復帰 + pop.l er1 + pop.l er0 + rte + + + ; ======== 多重割り込み ======== +multiple_int: + ; -------- 割り込みネストカウンタ加算 + add.b #1, r1h + mov.b r1h, @__kernel_int_cnt + + ; ---- 割込みマスク値(_kernel_h83_imsk)を設定 + mov.b r1l, @__kernel_h83_imsk ; 新しいマスク値を設定 + + ; -------- 割り込みハンドラ呼び出し + jsr @__kernel_exe_inh + + ; -------- 割り込みネストカウンタ減算 + mov.b @__kernel_int_cnt, r1h + dec.b r1h + mov.b r1h, @__kernel_int_cnt + + ; -------- 復帰 + bra return_int + + + .SECTION B, DATA, ALIGN=2 + +__kernel_int_cnt: + .RES.B 1 + + + .END + +; end of file diff --git a/kernel/source/arch/proc/mn103/mn1030/gcc/ctxctl.S b/kernel/source/arch/proc/mn103/mn1030/gcc/ctxctl.S new file mode 100755 index 0000000..f3c4896 --- /dev/null +++ b/kernel/source/arch/proc/mn103/mn1030/gcc/ctxctl.S @@ -0,0 +1,151 @@ +/**************************************************************************** + Hyper Operating System V4 Advance + + @file armctx.s + @brief %en{コンテキスト制御}%jp{} + + @version $Id: ctxctl.S,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + + Copyright (C) 1998-2006 by Project HOS + http://sourceforge.jp/projects/hos/ +****************************************************************************/ + + + + .global __kernel_ena_int /* 割り込み許可 */ + .global __kernel_dis_int /* 割り込み禁止 */ + .global __kernel_wai_int /* CPUのアイドル処理 */ + .global __kernel_cre_ctx /* 実行コンテキストの作成 */ + .global __kernel_sta_ctx /* 実行コンテキストの開始 */ + .global __kernel_rst_ctx /* 実行コンテキストのリスタート */ + .global __kernel_swi_ctx /* 実行コンテキストの切替 */ + + + .text + .align 2 + +/************************************************ + 割り込み許可 + void _kernel_ena_int(void) + ************************************************/ + .type __kernel_ena_int, %function +__kernel_ena_int: + or 0x0800, psw /* IEビットセット */ + rets /* リターン */ + .size __kernel_ena_int, .-__kernel_ena_int + + +/************************************************ + 割り込み禁止 + void _kernel_dis_int(void) + ************************************************/ + .type __kernel_dis_int, %function +__kernel_dis_int: + and 0xf7ff, psw /* IEビットクリア */ + rets /* リターン */ + .size __kernel_dis_int, .-__kernel_dis_int + + +/************************************************ + 割り込み待ち(CPUのアイドル処理) + void __kernel_wai_int(void); +*************************************************/ + .type _kernel_wai_int, %function +__kernel_wai_int: + jmp __kernel_wai_int + .size _kernel_wai_int, .-_kernel_wai_int + + + +/************************************************ + 実行コンテキストの作成 + void __kernel_cre_ctx( + VP_INT par1, 実行時パラメータ1 [d0] + VP_INT par2, 実行時パラメータ2 [d1] + _KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト [(12, sp)] + VP isp, スタックポインタ [(16, sp)] + FP entry) 実行アドレス [(20, sp)] +*************************************************/ + .type __kernel_cre_ctx, %function +__kernel_cre_ctx: + mov (12, sp), a0 /* コンテキストアドレス取り出し */ + mov (16, sp), a1 /* 初期スタックポインタ取り出し */ + add -20, a1 /* スタック領域を確保 */ + mov a1, (a0) /* スタックポインタ保存 */ + mov d0, (12, a1) /* 実行時パラメータ1設定 */ + mov d1, (8, a1) /* 実行時パラメータ2設定 */ + mov (20, sp), a0 /* 実行アドレス取り出し */ + mov a0, (0, a1) /* 実行アドレス設定 */ + mov ctx_entry, a0 + mov a0, (16, a1) /* エントリーアドレス設定 */ + rets + .size __kernel_cre_ctx, .-__kernel_cre_ctx + + +/************************************************ + 実行コンテキストエントリーアドレス +*************************************************/ + .type ctx_entry, %function +ctx_entry: + mov d2, d0 /* par1を設定 */ + mov d3, d1 /* par2を設定 */ + jmp (a2) /* entry を実行 */ + .size ctx_entry, .-ctx_entry + + + +/************************************************ + 実行コンテキストのリスタート + void _kernel_rst_ctx( + VP_INT par1, 実行時パラメータ [r0] + VP_INT par2, 実行時パラメータ [r1] + FP entry, 実行アドレス [(12, sp)] + VP isp) 初期スタックポインタ [(16, sp)] +*************************************************/ + .type __kernel_rst_ctx, %function +__kernel_rst_ctx: + mov (12, sp), a0 /* 初期スタックポインタ取り出し */ + mov (16, sp), a1 /* 実行アドレス取り出し */ + mov a1, sp /* スタックを初期値にリセット */ + jmp (a0) /* 実行アドレスから再開始 */ + .size __kernel_rst_ctx, .-_kernel_rst_ctx + + + + + +/************************************************ + 実行コンテキストの切替 + void _kernel_swi_ctx( + _KERNEL_T_CTXCB *pk_ctxinf_nxt, 実行を開始するコンテキスト [d0] + _KERNEL_T_CTXCB *pk_ctxinf_now) 現在のコンテキストの保存先 [d1] +*************************************************/ + .type __kernel_swi_ctx, %function +__kernel_swi_ctx: + movm [d2,d3,a2,a3], (sp) + mov d1, a0 + mov sp, a1 + mov d1, (a0) /* スタックポインタ保存 */ + /* ---- そのまま _kernel_sta_ctx に続ける ---- */ + + +/************************************************ + 実行コンテキストの開始 + void _kernel_sta_ctx( + _KERNEL_T_CTXCB *pk_ctxcb) 実行を開始するコンテキスト [d0] +*************************************************/ + .type __kernel_sta_ctx, %function +__kernel_sta_ctx: + mov d0, a0 + mov (a0), a0 + mov a0, sp + ret [d2,d3,a2,a3], 16 + + .size __kernel_swi_ctx, .-__kernel_swi_ctx + .size __kernel_sta_ctx, .-__kernel_sta_ctx + + + .END + + +/* end of file */ diff --git a/kernel/source/arch/proc/mn103/mn1030/gcc/intctl.S b/kernel/source/arch/proc/mn103/mn1030/gcc/intctl.S new file mode 100755 index 0000000..dd49b35 --- /dev/null +++ b/kernel/source/arch/proc/mn103/mn1030/gcc/intctl.S @@ -0,0 +1,82 @@ + + + + .global _kernel_int_isp + .global _kernel_sta_inh + .global _kernel_end_inh + .global _kernel_exe_inh + .global _kernel_int + + + .text + .align 2 + + +/************************************************ + IRQ ハンドラ + ************************************************/ +_kernel_int_irq: + /* ---- レジスタ退避 ---- */ + movm [other], (sp) /* レジスタ退避 */ + + /* ---- 多重割込み判定 ---- */ + mov __kernel_int_cnt, a0 + movbu (a0), d0 + extb d0 + add -1, d0 + movbu d0, (a0) + bcs multiple_int + + /* ---- 割り込み用スタックに入れ替え ---- */ + mov sp, a0 /* タスクのSPを保存 */ + mov (_kernel_int_isp), a1 + mov a1, sp + add -8, sp + mov a0, (4, sp) + + /* ---- 割り込み処理 ---- */ + call __kernel_sta_inh,[],0 /* 割り込み開始 */ + + /* ---- 割り込みハンドラ実行 ---- */ + clr d0 + call __kernel_exe_inh,[],0 + + /* ---- 割り込み処理の終了設定 ---- */ + mov (4, sp), a0 + mov a0, sp + + clr d0 + mov d0, (__kernel_int_cnt) + + /* ---- 遅延ディスパッチ処理 ---- */ + call _kernel_end_inh,[],0 /* 割り込み終了処理 */ + +return_int: + /* ---- 復帰処理 ---- */ + movm (sp), [other] /* レジスタ退避 */ + rti + + /* ---- 多重割り込み処理 ---- */ +multiple_int: + /* ---- 割り込みハンドラ実行 ---- */ + add -4, sp + clr d0 + call _kernel_exe_inh,[],0 + + /* ---- 割り込みカウンタ復帰 ---- */ + mov __kernel_int_cnt, a0 + movbu (a0), d0 + add 1, d0 + movbu d0, (a0) + + jmp return_int /* 復帰処理 */ + + + + .comm __kernel_int_cnt,1,1 + + + .END + + +/* end of file */ diff --git a/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S b/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S new file mode 100755 index 0000000..f2d6801 --- /dev/null +++ b/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S @@ -0,0 +1,130 @@ +/* ------------------------------------------------------------------------ */ +/* Hyper Operating System V4 μITRON4.0仕様 Real-Time OS */ +/* プロセッサ抽象化コンポーネント (日立 SH2用) */ +/* */ +/* Copyright (C) 1998-2002 by Project HOS */ +/* http://sourceforge.jp/projects/hos/ */ +/* ------------------------------------------------------------------------ */ + + + + .global __kernel_dis_int /* 割り込み禁止 */ + .global __kernel_ena_int /* 割り込み許可 */ + .global __hospac_cre_ctx /* 実行コンテキストの作成 */ + .global __hospac_swi_ctx /* 実行コンテキストの切替 */ + .global __kernel_sta_ctx /* 実行コンテキストの開始 */ + .global __kernel_sh_imsk /* 割り込みマスクの値 */ + + + .text + + +/************************************************ + 割り込み禁止 + void _kernel_dis_int(void) +************************************************/ + .align 2 +__kernel_dis_int: + stc sr, r0 + or #0xf0, r0 /* 全割り込みマスク */ + rts + ldc r0, sr + + + +/************************************************ + 割り込み許可 + void _kernel_ena_int(void) +************************************************/ + .text + .align 2 +_kernel_ena_int: + mov #0xf0, r1 /* 0x00f0 を反転させて 0xff0f を作成 */ + not r1, r1 + stc sr, r0 + and r1, r0 /* 割り込みマスク値以外を取得 */ + mov.l imsk_addr, r1 + mov.l @r1, r1 + or r1, r0 /* 割り込みマスクの値を設定 */ + rts + ldc r0, sr + + .align 2 +imsk_addr: + .long __kernel_sh_imsk /* 割り込みマスク */ + + + +/************************************************ + 実行コンテキストの作成 + _kernel_cre_ctx( + _KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト [r4] + VP isp, 初期スタックポインタ [r5] + FP entry, 実行アドレス [r6] + VP_INT par1, 実行時パラメータ1 [r7] + VP_INT par2) 実行時パラメータ2 [@(4, r15)] +************************************************/ + .align 2 +__kernel_cre_ctx: + mov.l @(4, r15), r0 /* 実行時パラメータ2を取り出し */ + add #-16, r5 /* r8-r11用領域分空ける */ + mov.l r6, @-r5 /* 実行アドレスを r12 の領域に設定 */ + mov.l r7, @-r5 /* 実行時パラメータ1を r13 の領域に設定 */ + mov.l r0, @-r5 /* 実行時パラメータ2を r14 の領域に設定 */ + mov.l ctx_entry, r0 + mov.l r0, @-r5 /* 実行エントリポイントをリターンアドレスに設定 */ + rts + mov.l r5, @(0, r4) /* スタックポインタを保存(遅延スロット) */ + + +/************************************************ + 実行コンテキストエントリーアドレス +************************************************/ +ctx_entry: + mov r13, r4 /* 実行時パラメータ1を設定 */ + jmp @r12 /* 実行開始アドレスに分岐 */ + mov r14, r5 /* 実行時パラメータ2を設定(遅延スロット) */ + + + +/************************************************ + 実行コンテキストの切替 + void _kernel_swi_ctx( + _KERNEL_T_CTXCB *pk_ctxcb_nxt, 切り替え先のコンテキスト [r4] + _KERNEL_T_CTXCB *pk_ctxcb_now) 現在のコンテキスト [r5] +************************************************/ + .align 2 +__kernel_swi_ctx: + mov.l r8, @-r15 /* 8-r14,prを退避 */ + mov.l r9, @-r15 + mov.l r10, @-r15 + mov.l r11, @-r15 + mov.l r12, @-r15 + mov.l r13, @-r15 + mov.l r14, @-r15 + sts.l pr, @-r15 + mov.l r15, @(0, r5) /* スタックポインタ保存 */ + /* ---- このまま _kernel_sta_ctx に続ける ---- */ + +/************************************************ + 実行コンテキストの開始 + void _kernel_sta_ctx( + _KERNEL_T_CTXCB *pk_ctxcb) 開始するコンテキスト [r4] +************************************************/ +__kernel_sta_ctx: + mov.l @(0, r4), r15 /* スタックポインタ復帰 */ + lds.l @r15+, pr /* r8-r14,prを復帰 */ + mov.l @r15+, r14 + mov.l @r15+, r13 + mov.l @r15+, r12 + mov.l @r15+, r11 + mov.l @r15+, r10 + mov.l @r15+, r9 + rts + mov.l @r15+, r8 + + + .end + + +/* end of file */ diff --git a/kernel/source/arch/proc/sh/sh2/gcc/intctl.S b/kernel/source/arch/proc/sh/sh2/gcc/intctl.S new file mode 100755 index 0000000..1b7670f --- /dev/null +++ b/kernel/source/arch/proc/sh/sh2/gcc/intctl.S @@ -0,0 +1,1123 @@ +/* ------------------------------------------------------------------------ */ +/* Hyper Operating System V4 μITRON4.0仕様 Real-Time OS */ +/* プロセッサ抽象化コンポーネント (日立 SH2用) */ +/* 割り込みハンドラ */ +/* */ +/* Copyright (C) 1998-2006 by Project HOS */ +/* http://sourceforge.jp/projects/hos/ */ +/* ------------------------------------------------------------------------ */ + + + + .global _kernel_vecter004 + .global _kernel_vecter005 + .global _kernel_vecter006 + .global _kernel_vecter007 + .global _kernel_vecter008 + .global _kernel_vecter009 + .global _kernel_vecter010 + .global _kernel_vecter011 + .global _kernel_vecter012 + .global _kernel_vecter013 + .global _kernel_vecter014 + .global _kernel_vecter015 + .global _kernel_vecter016 + .global _kernel_vecter017 + .global _kernel_vecter018 + .global _kernel_vecter019 + .global _kernel_vecter020 + .global _kernel_vecter021 + .global _kernel_vecter022 + .global _kernel_vecter023 + .global _kernel_vecter024 + .global _kernel_vecter025 + .global _kernel_vecter026 + .global _kernel_vecter027 + .global _kernel_vecter028 + .global _kernel_vecter029 + .global _kernel_vecter030 + .global _kernel_vecter031 + .global _kernel_vecter032 + .global _kernel_vecter033 + .global _kernel_vecter034 + .global _kernel_vecter035 + .global _kernel_vecter036 + .global _kernel_vecter037 + .global _kernel_vecter038 + .global _kernel_vecter039 + .global _kernel_vecter040 + .global _kernel_vecter041 + .global _kernel_vecter042 + .global _kernel_vecter043 + .global _kernel_vecter044 + .global _kernel_vecter045 + .global _kernel_vecter046 + .global _kernel_vecter047 + .global _kernel_vecter048 + .global _kernel_vecter049 + .global _kernel_vecter050 + .global _kernel_vecter051 + .global _kernel_vecter052 + .global _kernel_vecter053 + .global _kernel_vecter054 + .global _kernel_vecter055 + .global _kernel_vecter056 + .global _kernel_vecter057 + .global _kernel_vecter058 + .global _kernel_vecter059 + .global _kernel_vecter060 + .global _kernel_vecter061 + .global _kernel_vecter062 + .global _kernel_vecter063 + .global _kernel_vecter064 + .global _kernel_vecter065 + .global _kernel_vecter066 + .global _kernel_vecter067 + .global _kernel_vecter068 + .global _kernel_vecter069 + .global _kernel_vecter070 + .global _kernel_vecter071 + .global _kernel_vecter072 + .global _kernel_vecter073 + .global _kernel_vecter074 + .global _kernel_vecter075 + .global _kernel_vecter076 + .global _kernel_vecter077 + .global _kernel_vecter078 + .global _kernel_vecter079 + .global _kernel_vecter080 + .global _kernel_vecter081 + .global _kernel_vecter082 + .global _kernel_vecter083 + .global _kernel_vecter084 + .global _kernel_vecter085 + .global _kernel_vecter086 + .global _kernel_vecter087 + .global _kernel_vecter088 + .global _kernel_vecter089 + .global _kernel_vecter090 + .global _kernel_vecter091 + .global _kernel_vecter092 + .global _kernel_vecter093 + .global _kernel_vecter094 + .global _kernel_vecter095 + .global _kernel_vecter096 + .global _kernel_vecter097 + .global _kernel_vecter098 + .global _kernel_vecter099 + .global _kernel_vecter100 + .global _kernel_vecter101 + .global _kernel_vecter102 + .global _kernel_vecter103 + .global _kernel_vecter104 + .global _kernel_vecter105 + .global _kernel_vecter106 + .global _kernel_vecter107 + .global _kernel_vecter108 + .global _kernel_vecter109 + .global _kernel_vecter110 + .global _kernel_vecter111 + .global _kernel_vecter112 + .global _kernel_vecter113 + .global _kernel_vecter114 + .global _kernel_vecter115 + .global _kernel_vecter116 + .global _kernel_vecter117 + .global _kernel_vecter118 + .global _kernel_vecter119 + .global _kernel_vecter120 + .global _kernel_vecter121 + .global _kernel_vecter122 + .global _kernel_vecter123 + .global _kernel_vecter124 + .global _kernel_vecter125 + .global _kernel_vecter126 + .global _kernel_vecter127 + .global _kernel_vecter128 + .global _kernel_vecter129 + .global _kernel_vecter130 + .global _kernel_vecter131 + .global _kernel_vecter132 + .global _kernel_vecter133 + .global _kernel_vecter134 + .global _kernel_vecter135 + .global _kernel_vecter136 + .global _kernel_vecter137 + .global _kernel_vecter138 + .global _kernel_vecter139 + .global _kernel_vecter140 + .global _kernel_vecter141 + .global _kernel_vecter142 + .global _kernel_vecter143 + .global _kernel_vecter144 + .global _kernel_vecter145 + .global _kernel_vecter146 + .global _kernel_vecter147 + .global _kernel_vecter148 + .global _kernel_vecter149 + .global _kernel_vecter150 + .global _kernel_vecter151 + .global _kernel_vecter152 + .global _kernel_vecter153 + .global _kernel_vecter154 + .global _kernel_vecter155 + .global _kernel_vecter156 + + + .text + + +/************************************************ + 割り込みハンドラ +************************************************/ +_kernel_vecter004: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #4, r4 + +_kernel_vecter005: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #5, r4 + +_kernel_vecter006: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #6, r4 + +_kernel_vecter007: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #7, r4 + +_kernel_vecter008: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #8, r4 + +_kernel_vecter009: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #9, r4 + +_kernel_vecter010: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #10, r4 + +_kernel_vecter011: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #11, r4 + +_kernel_vecter012: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #12, r4 + +_kernel_vecter013: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #13, r4 + +_kernel_vecter014: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #14, r4 + +_kernel_vecter015: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #15, r4 + +_kernel_vecter016: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #16, r4 + +_kernel_vecter017: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #17, r4 + +_kernel_vecter018: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #18, r4 + +_kernel_vecter019: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #19, r4 + +_kernel_vecter020: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #20, r4 + +_kernel_vecter021: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #21, r4 + +_kernel_vecter022: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #22, r4 + +_kernel_vecter023: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #23, r4 + +_kernel_vecter024: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #24, r4 + +_kernel_vecter025: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #25, r4 + +_kernel_vecter026: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #26, r4 + +_kernel_vecter027: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #27, r4 + +_kernel_vecter028: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #28, r4 + +_kernel_vecter029: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #29, r4 + +_kernel_vecter030: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #30, r4 + +_kernel_vecter031: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #31, r4 + +_kernel_vecter032: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #32, r4 + +_kernel_vecter033: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #33, r4 + +_kernel_vecter034: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #34, r4 + +_kernel_vecter035: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #35, r4 + +_kernel_vecter036: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #36, r4 + +_kernel_vecter037: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #37, r4 + +_kernel_vecter038: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #38, r4 + +_kernel_vecter039: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #39, r4 + +_kernel_vecter040: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #40, r4 + +_kernel_vecter041: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #41, r4 + +_kernel_vecter042: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #42, r4 + +_kernel_vecter043: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #43, r4 + +_kernel_vecter044: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #44, r4 + +_kernel_vecter045: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #45, r4 + +_kernel_vecter046: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #46, r4 + +_kernel_vecter047: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #47, r4 + +_kernel_vecter048: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #48, r4 + +_kernel_vecter049: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #49, r4 + +_kernel_vecter050: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #50, r4 + +_kernel_vecter051: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #51, r4 + +_kernel_vecter052: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #52, r4 + +_kernel_vecter053: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #53, r4 + +_kernel_vecter054: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #54, r4 + +_kernel_vecter055: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #55, r4 + +_kernel_vecter056: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #56, r4 + +_kernel_vecter057: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #57, r4 + +_kernel_vecter058: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #58, r4 + +_kernel_vecter059: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #59, r4 + +_kernel_vecter060: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #60, r4 + +_kernel_vecter061: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #61, r4 + +_kernel_vecter062: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #62, r4 + +_kernel_vecter063: + mov.l r4, @-r15 + bra _kernel_exc_hdr + mov #63, r4 + + + +_kernel_vecter064: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #64, r4 + +_kernel_vecter065: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #65, r4 + +_kernel_vecter066: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #66, r4 + +_kernel_vecter067: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #67, r4 + +_kernel_vecter068: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #68, r4 + +_kernel_vecter069: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #69, r4 + +_kernel_vecter070: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #70, r4 + +_kernel_vecter071: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #71, r4 + +_kernel_vecter072: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #72, r4 + +_kernel_vecter073: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #73, r4 + +_kernel_vecter074: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #74, r4 + +_kernel_vecter075: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #75, r4 + +_kernel_vecter076: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #76, r4 + +_kernel_vecter077: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #77, r4 + +_kernel_vecter078: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #78, r4 + +_kernel_vecter079: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #79, r4 + +_kernel_vecter080: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #80, r4 + +_kernel_vecter081: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #81, r4 + +_kernel_vecter082: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #82, r4 + +_kernel_vecter083: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #83, r4 + +_kernel_vecter084: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #84, r4 + +_kernel_vecter085: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #85, r4 + +_kernel_vecter086: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #86, r4 + +_kernel_vecter087: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #87, r4 + +_kernel_vecter088: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #88, r4 + +_kernel_vecter089: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #89, r4 + +_kernel_vecter090: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #90, r4 + +_kernel_vecter091: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #91, r4 + +_kernel_vecter092: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #92, r4 + +_kernel_vecter093: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #93, r4 + +_kernel_vecter094: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #94, r4 + +_kernel_vecter095: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #95, r4 + +_kernel_vecter096: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #96, r4 + +_kernel_vecter097: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #97, r4 + +_kernel_vecter098: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #98, r4 + +_kernel_vecter099: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #99, r4 + +_kernel_vecter100: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #100, r4 + +_kernel_vecter101: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #101, r4 + +_kernel_vecter102: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #102, r4 + +_kernel_vecter103: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #103, r4 + +_kernel_vecter104: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #104, r4 + +_kernel_vecter105: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #105, r4 + +_kernel_vecter106: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #106, r4 + +_kernel_vecter107: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #107, r4 + +_kernel_vecter108: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #108, r4 + +_kernel_vecter109: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #109, r4 + +_kernel_vecter110: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #110, r4 + +_kernel_vecter111: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #111, r4 + +_kernel_vecter112: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #112, r4 + +_kernel_vecter113: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #113, r4 + +_kernel_vecter114: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #114, r4 + +_kernel_vecter115: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #115, r4 + +_kernel_vecter116: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #116, r4 + +_kernel_vecter117: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #117, r4 + +_kernel_vecter118: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #118, r4 + +_kernel_vecter119: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #119, r4 + +_kernel_vecter120: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #120, r4 + +_kernel_vecter121: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #121, r4 + +_kernel_vecter122: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #122, r4 + +_kernel_vecter123: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #123, r4 + +_kernel_vecter124: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #124, r4 + +_kernel_vecter125: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #125, r4 + +_kernel_vecter126: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #126, r4 + +_kernel_vecter127: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #127, r4 + +_kernel_vecter128: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #128, r4 + +_kernel_vecter129: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #129, r4 + +_kernel_vecter130: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #130, r4 + +_kernel_vecter131: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #131, r4 + +_kernel_vecter132: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #132, r4 + +_kernel_vecter133: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #133, r4 + +_kernel_vecter134: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #134, r4 + +_kernel_vecter135: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #135, r4 + +_kernel_vecter136: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #136, r4 + +_kernel_vecter137: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #137, r4 + +_kernel_vecter138: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #138, r4 + +_kernel_vecter139: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #139, r4 + +_kernel_vecter140: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #140, r4 + +_kernel_vecter141: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #141, r4 + +_kernel_vecter142: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #142, r4 + +_kernel_vecter143: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #143, r4 + +_kernel_vecter144: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #144, r4 + +_kernel_vecter145: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #145, r4 + +_kernel_vecter146: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #146, r4 + +_kernel_vecter147: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #147, r4 + +_kernel_vecter148: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #148, r4 + +_kernel_vecter149: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #149, r4 + +_kernel_vecter150: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #150, r4 + +_kernel_vecter151: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #151, r4 + +_kernel_vecter152: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #152, r4 + +_kernel_vecter153: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #153, r4 + +_kernel_vecter154: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #154, r4 + +_kernel_vecter155: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #155, r4 + +_kernel_vecter156: + mov.l r4, @-r15 + bra _kernel_int_hdr + mov #156, r4 + + +/************************************************ + CPU例外ハンドラ + r4をスタックに積んだ後、r4に割り込み番号を + 格納してここに分岐するものとする +************************************************/ +_kernel_exc_hdr: + rte + nop + + +/************************************************ + 割り込みハンドラ + + r4をスタックに積んだ後、r4に割り込み番号を + 格納してここに分岐するものとする +************************************************/ + .align 2 +_kernel_int_hdr: + /* レジスタ退避(r0-r1) */ + mov.l r0, @-r15 + mov.l r1, @-r15 + + /* 割り込みマスク設定 */ + stc sr, r0 + mov r0, r1 + or #0xf0, r0 /* 割り込み全マスク設定 */ + ldc r0, sr + + /* 割り込みマスクの保存 */ + mov r1, r0 + and #0xf0, r0 + mov.l imsk_addr, r1 + mov.l r0, @r1 + + /* 割り込み番号の符号拡張をクリア */ + extu.b r4, r4 + + /* レジスタ保存(r2-r7,mach,macl,pr) */ + mov.l r2, @-r15 + mov.l r3, @-r15 + mov.l r5, @-r15 + mov.l r6, @-r15 + mov.l r7, @-r15 + sts.l mach, @-r15 + sts.l macl, @-r15 + sts.l pr, @-r15 + + /* 多重割り込み判定 */ + mov.l int_cnt_addr, r1 + mov.l @r1, r0 + cmp/eq #0, r0 + bf/s int_multi + add #1, r0 + + /* 単独割り込み時 */ + mov.l r0, @r1 /* 割り込みネスト値を設定 */ + + /* スタック入れ替え */ + mov.l save_sp_addr, r0 + mov.l r15, @r0 /* 現在のスタックを退避 */ + mov.l int_sp_addr, r0 + mov.l @r0, r15 /* 割り込み用スタックを設定 */ + + mov.l r4, @-r15 /* 割り込み番号を退避 */ + + /* 割り込み開始処理呼び出し */ + mov.l sta_int_addr, r1 + jsr @r1 + nop + + /* 割り込み実行処理呼び出し */ + mov.l exe_int_addr, r1 + jsr @r1 + mov.l @r15+, r4 /* 割り込み番号を引数とする */ + + /* スタックの復帰 */ + mov.l save_sp_addr, r0 + mov.l @r0, r15 + + /* 割り込みカウンタのクリア */ + mov.l int_cnt_addr, r1 + xor r0, r0 + mov.l r0, @r1 + + /* ベースマスク値に戻す */ + mov.l imsk_base_addr, r0 + mov.l @r0, r1 + mov.l imsk_addr, r0 + mov.l r1, @r0 + + /* 割り込み終了処理呼び出し */ + mov.l end_int_addr, r1 + jsr @r1 + nop + + /* レジスタ復帰 */ + lds.l @r15+, pr + lds.l @r15+, macl + lds.l @r15+, mach + mov.l @r15+, r7 + mov.l @r15+, r6 + mov.l @r15+, r5 + mov.l @r15+, r3 + mov.l @r15+, r2 + mov.l @r15+, r1 + + /* 復帰時割り込みマスクの設定 */ + mov.l imsk_addr, r4 + mov.l @r4, r4 /* マスク値取得 */ + mov.l @(8, r15), r0 + or r4, r0 + mov.l r0, @(8, r15) /* 復帰時SRのマスク設定 */ + + mov.l @r15+, r0 + mov.l @r15+, r4 + rte + nop + + /* 多重割り込み処理 */ +int_multi: + mov.l r0, @r1 /* 割り込みネスト値を設定 */ + + /* 割り込み実行処理呼び出し */ + mov.l exe_int_addr, r1 + jsr @r1 /* 割り込み番号を引数とする */ + nop + + /* 割り込みカウンタの減算 */ + mov.l int_cnt_addr, r1 + mov.l @r1, r0 + add #-1, r0 + mov.l r0, @r1 + + /* レジスタ復帰 */ + lds.l @r15+, pr + lds.l @r15+, macl + lds.l @r15+, mach + mov.l @r15+, r7 + mov.l @r15+, r6 + mov.l @r15+, r5 + mov.l @r15+, r3 + mov.l @r15+, r2 + mov.l @r15+, r1 + mov.l @r15+, r0 + mov.l @r15+, r4 + rte + nop + + + .align 2 + +imsk_addr: + .long _kernel_sh_imsk /* 割り込みマスク */ + +imsk_base_addr: + .long _hospac_sh_imsk_base /* 割り込みマスクベース値 */ + +int_cnt_addr: + .long _kernel_int_cnt /* 割り込みネスト回数 */ + +save_sp_addr: + .long _kernel_int_ssp /* 割り込み用スタックポインタ退避 */ + +int_sp_addr: + .long _kernel_int_sp /* 割り込み用スタックポインタ */ + +sta_int_addr: + .long _kernel_sta_int /* 割り込み開始処理 */ + +end_int_addr: + .long _kernel_end_int /* 割り込み終了処理 */ + +exe_int_addr: + .long _kernel_exe_int /* 割り込み実行処理 */ + + + + .end + + +/* ------------------------------------------------------------------------ */ +/* Copyright (C) 1998-2002 by Project HOS */ +/* ------------------------------------------------------------------------ */ diff --git a/kernel/source/arch/proc/sh/sh2/shc/ctxctl.src b/kernel/source/arch/proc/sh/sh2/shc/ctxctl.src new file mode 100755 index 0000000..c2cc6c5 --- /dev/null +++ b/kernel/source/arch/proc/sh/sh2/shc/ctxctl.src @@ -0,0 +1,167 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + + .CPU SH2 + + + .EXPORT __kernel_dis_int ; 割り込み禁止 + .EXPORT __kernel_ena_int ; 割り込み許可 + .EXPORT __kernel_wai_int ; 割り込み待ち + .EXPORT __kernel_cre_ctx ; 実行コンテキストの作成 + .EXPORT __kernel_swi_ctx ; 実行コンテキストの切替 + .EXPORT __kernel_sta_ctx ; 実行コンテキストの開始 + .EXPORT __kernel_rst_ctx ; 実行コンテキストのリスタート + .EXPORT __kernel_sh_imsk ; 割り込みマスクの値 + + + .SECTION P, CODE, ALIGN=4 + +;------------------------------------------------ +; 割り込み禁止 +; void _kernel_dis_int(void) +;------------------------------------------------ + .STACK __kernel_dis_int=0 +__kernel_dis_int: + stc sr, r0 + or #h'f0, r0 ; 全割り込みマスク + rts + ldc r0, sr + + +;------------------------------------------------ +; 割り込み許可 +; void _kernel_ena_int(void) +;------------------------------------------------ + .STACK __kernel_ena_int=0 +__kernel_ena_int: + mov #h'f0, r1 ; 0x00f0 を反転させて 0xff0f を作成 + not r1, r1 + stc sr, r0 + and r1, r0 ; 割り込みマスク値以外を取得 + mov.l L_imsk, r2 + mov.l @r2, r1 + or r1, r0 ; 割り込みマスクの値を設定 + rts + ldc r0, sr + + .ALIGN 4 +L_imsk .DATA.L __kernel_sh_imsk ; 割り込みマスク + + +;------------------------------------------------ +; 割り込み待ち +; void _kernel_wai_int(void) +;------------------------------------------------ + .STACK __kernel_wai_int=0 +__kernel_wai_int: + ; sleep + bra __kernel_wai_int + nop + + + +;------------------------------------------------ +; 実行コンテキストの作成 +; _kernel_cre_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト [r4] +; VP isp, 初期スタックポインタ [r5] +; FP entry, 実行アドレス [r6] +; VP_INT par1, 実行時パラメータ1 [r7] +; VP_INT par2) 実行時パラメータ2 [@(0, r15)] +;------------------------------------------------ + .STACK __kernel_cre_ctx=0 +__kernel_cre_ctx: + add #-40, r5 ; スタックに領域を確保 + mov.l r6, @(36, r5) ; 実行アドレスを r8 の領域に設定 + mov.l r7, @(32, r5) ; 実行時パラメータ1を r9 の領域に設定 + mov.l @(0, r15), r0 + mov.l r0, @(28, r5) ; 実行時パラメータ2を r10 の領域に設定 + mov.l #ctx_entry, r0 + mov.l r0, @(0, r5) ; 実行エントリポイントを pr の領域に設定 + rts + mov.l r5, @(0, r4) ; スタックポインタを保存(遅延スロット) + + +;------------------------------------------------ +; 実行コンテキストエントリーアドレス +;------------------------------------------------ +ctx_entry: + mov r9, r4 ; 実行時パラメータ1を設定 + jmp @r8 ; 実行開始アドレスに分岐 + mov r10, r5 ; 実行時パラメータ2を設定(遅延スロット) + + + +;------------------------------------------------ +; 実行コンテキストの切替 +; void _kernel_swi_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb_nxt, 切り替え先のコンテキスト [r4] +; _KERNEL_T_CTXCB *pk_ctxcb_now) 現在のコンテキスト [r5] +;------------------------------------------------ + .STACK __kernel_swi_ctx=40 +__kernel_swi_ctx: + mov.l r8, @-r15 ; レジスタを退避 + mov.l r9, @-r15 + mov.l r10, @-r15 + mov.l r11, @-r15 + mov.l r12, @-r15 + mov.l r13, @-r15 + mov.l r14, @-r15 + sts.l macl, @-r15 + sts.l mach, @-r15 + sts.l pr, @-r15 + mov.l r15, @(0, r5) ; スタックポインタ保存 + ; ---- このまま _kernel_sta_ctx に続ける + +;------------------------------------------------ +; 実行コンテキストの開始 +; void _kernel_sta_ctx( +; _KERNEL_T_CTXCB *pk_ctxcb) 開始するコンテキスト [r4] +;------------------------------------------------ + .STACK __kernel_sta_ctx=0 +__kernel_sta_ctx: + mov.l @(0, r4), r15 ; スタックポインタ復帰 + lds.l @r15+, pr ; r8-r14,prを復帰 + lds.l @r15+, mach + lds.l @r15+, macl + mov.l @r15+, r14 + mov.l @r15+, r13 + mov.l @r15+, r12 + mov.l @r15+, r11 + mov.l @r15+, r10 + mov.l @r15+, r9 + rts + mov.l @r15+, r8 + + +;------------------------------------------------ +; 実行コンテキストのリスタート +; void _kernel_rst_ctx( +; VP_INT par1, 実行時パラメータ1 [r4] +; VP_INT par2, 実行時パラメータ2 [r5] +; VP isp, 初期スタックポインタ [r6] +; FP entry) 実行アドレス [r7] +;------------------------------------------------ + .STACK __kernel_rst_ctx=0 +__kernel_rst_ctx: + jmp @r7 ; 実行アドレスに分岐 + mov r6, r15 ; スタックポインタリセット(遅延スロット) + + + + .SECTION B, DATA, ALIGN=4 +__kernel_sh_imsk: + .RES.L 1 + + + .END + + + +; end of file diff --git a/kernel/source/arch/proc/sh/sh2/shc/dmyhdr.src b/kernel/source/arch/proc/sh/sh2/shc/dmyhdr.src new file mode 100755 index 0000000..a024da7 --- /dev/null +++ b/kernel/source/arch/proc/sh/sh2/shc/dmyhdr.src @@ -0,0 +1,23 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_vector_dmy + .IMPORT __kernel_int_hdr + + + .SECTION P, CODE, ALIGN=4 + +__kernel_vector_dmy: + rte + nop + + + .END + + +; end of file diff --git a/kernel/source/arch/proc/sh/sh2/shc/exchdr.src b/kernel/source/arch/proc/sh/sh2/shc/exchdr.src new file mode 100755 index 0000000..80b3b3b --- /dev/null +++ b/kernel/source/arch/proc/sh/sh2/shc/exchdr.src @@ -0,0 +1,408 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_exc_hdr + .IMPORT __kernel_int_cnt + .IMPORT __kernel_sh_imsk + .IMPORT __kernel_int_isp + + + + .SECTION P, CODE, ALIGN=4 + + +;------------------------------------------------ +; 高速割り込みベクタ利用時、bra で分岐可能な +; 位置にベクタ入り口を設置。ただし未使用の +; ベクタまでリンクされてしまう。 +;------------------------------------------------ + + .AIFDEF _KERNEL_FAST_EXCVEC + + .EXPORT __kernel_vector_004 + .EXPORT __kernel_vector_005 + .EXPORT __kernel_vector_006 + .EXPORT __kernel_vector_007 + .EXPORT __kernel_vector_008 + .EXPORT __kernel_vector_009 + .EXPORT __kernel_vector_010 + .EXPORT __kernel_vector_011 + .EXPORT __kernel_vector_012 + .EXPORT __kernel_vector_013 + .EXPORT __kernel_vector_014 + .EXPORT __kernel_vector_015 + .EXPORT __kernel_vector_016 + .EXPORT __kernel_vector_017 + .EXPORT __kernel_vector_018 + .EXPORT __kernel_vector_019 + .EXPORT __kernel_vector_020 + .EXPORT __kernel_vector_021 + .EXPORT __kernel_vector_022 + .EXPORT __kernel_vector_023 + .EXPORT __kernel_vector_024 + .EXPORT __kernel_vector_025 + .EXPORT __kernel_vector_026 + .EXPORT __kernel_vector_027 + .EXPORT __kernel_vector_028 + .EXPORT __kernel_vector_029 + .EXPORT __kernel_vector_030 + .EXPORT __kernel_vector_031 + .EXPORT __kernel_vector_032 + .EXPORT __kernel_vector_033 + .EXPORT __kernel_vector_034 + .EXPORT __kernel_vector_035 + .EXPORT __kernel_vector_036 + .EXPORT __kernel_vector_037 + .EXPORT __kernel_vector_038 + .EXPORT __kernel_vector_039 + .EXPORT __kernel_vector_040 + .EXPORT __kernel_vector_041 + .EXPORT __kernel_vector_042 + .EXPORT __kernel_vector_043 + .EXPORT __kernel_vector_044 + .EXPORT __kernel_vector_045 + .EXPORT __kernel_vector_046 + .EXPORT __kernel_vector_047 + .EXPORT __kernel_vector_048 + .EXPORT __kernel_vector_049 + .EXPORT __kernel_vector_050 + .EXPORT __kernel_vector_051 + .EXPORT __kernel_vector_052 + .EXPORT __kernel_vector_053 + .EXPORT __kernel_vector_054 + .EXPORT __kernel_vector_055 + .EXPORT __kernel_vector_056 + .EXPORT __kernel_vector_057 + .EXPORT __kernel_vector_058 + .EXPORT __kernel_vector_059 + .EXPORT __kernel_vector_060 + .EXPORT __kernel_vector_061 + .EXPORT __kernel_vector_062 + .EXPORT __kernel_vector_063 + +__kernel_vector_004: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #4, r4 + +__kernel_vector_005: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #5, r4 + +__kernel_vector_006: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #6, r4 + +__kernel_vector_007: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #7, r4 + +__kernel_vector_008: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #8, r4 + +__kernel_vector_009: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #9, r4 + +__kernel_vector_010: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #10, r4 + +__kernel_vector_011: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #11, r4 + +__kernel_vector_012: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #12, r4 + +__kernel_vector_013: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #13, r4 + +__kernel_vector_014: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #14, r4 + +__kernel_vector_015: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #15, r4 + +__kernel_vector_016: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #16, r4 + +__kernel_vector_017: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #17, r4 + +__kernel_vector_018: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #18, r4 + +__kernel_vector_019: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #19, r4 + +__kernel_vector_020: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #20, r4 + +__kernel_vector_021: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #21, r4 + +__kernel_vector_022: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #22, r4 + +__kernel_vector_023: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #23, r4 + +__kernel_vector_024: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #24, r4 + +__kernel_vector_025: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #25, r4 + +__kernel_vector_026: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #26, r4 + +__kernel_vector_027: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #27, r4 + +__kernel_vector_028: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #28, r4 + +__kernel_vector_029: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #29, r4 + +__kernel_vector_030: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #30, r4 + +__kernel_vector_031: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #31, r4 + +__kernel_vector_032: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #32, r4 + +__kernel_vector_033: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #33, r4 + +__kernel_vector_034: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #34, r4 + +__kernel_vector_035: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #35, r4 + +__kernel_vector_036: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #36, r4 + +__kernel_vector_037: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #37, r4 + +__kernel_vector_038: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #38, r4 + +__kernel_vector_039: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #39, r4 + +__kernel_vector_040: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #40, r4 + +__kernel_vector_041: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #41, r4 + +__kernel_vector_042: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #42, r4 + +__kernel_vector_043: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #43, r4 + +__kernel_vector_044: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #44, r4 + +__kernel_vector_045: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #45, r4 + +__kernel_vector_046: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #46, r4 + +__kernel_vector_047: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #47, r4 + +__kernel_vector_048: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #48, r4 + +__kernel_vector_049: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #49, r4 + +__kernel_vector_050: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #50, r4 + +__kernel_vector_051: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #51, r4 + +__kernel_vector_052: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #52, r4 + +__kernel_vector_053: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #53, r4 + +__kernel_vector_054: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #54, r4 + +__kernel_vector_055: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #55, r4 + +__kernel_vector_056: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #56, r4 + +__kernel_vector_057: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #57, r4 + +__kernel_vector_058: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #58, r4 + +__kernel_vector_059: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #59, r4 + +__kernel_vector_060: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #60, r4 + +__kernel_vector_061: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #61, r4 + +__kernel_vector_062: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #62, r4 + +__kernel_vector_063: + mov.l r4, @-r15 + bra __kernel_exc_hdr + mov #63, r4 + + .AENDI + + +;------------------------------------------------ +; CPU例外ハンドラ +; +; r4をスタックに積んだ後、r4に割り込み番号を +; 格納してここに分岐するものとする +;------------------------------------------------ +__kernel_exc_hdr: + ; まだ未実装 + + mov.l @r15+, r4 + rte + nop + + + .END + +; end of file + diff --git a/kernel/source/arch/proc/sh/sh2/shc/inthdr.src b/kernel/source/arch/proc/sh/sh2/shc/inthdr.src new file mode 100755 index 0000000..992ecf0 --- /dev/null +++ b/kernel/source/arch/proc/sh/sh2/shc/inthdr.src @@ -0,0 +1,1346 @@ +; --------------------------------------------------------------------------- +; Hyper Operating System V4 Advance +; +; Copyright (C) 1998-2006 by Project HOS +; http://sourceforge.jp/projects/hos/ +; --------------------------------------------------------------------------- + + + .EXPORT __kernel_int_hdr + .EXPORT __kernel_int_cnt + .IMPORT __kernel_sh_imsk + .IMPORT __kernel_int_isp + .IMPORT __kernel_sta_inh + .IMPORT __kernel_exe_inh + .IMPORT __kernel_end_inh + + + .SECTION P, CODE, ALIGN=4 + + + + .AIFDEF _KERNEL_FAST_INTVEC + +;------------------------------------------------ +; 高速割り込みベクタ利用時、bra で分岐可能な +; 位置にベクタ入り口を設置。ただし未使用の +; ベクタまでリンクされてしまう。 +;------------------------------------------------ + + .EXPORT __kernel_vector_064 + .EXPORT __kernel_vector_065 + .EXPORT __kernel_vector_066 + .EXPORT __kernel_vector_067 + .EXPORT __kernel_vector_068 + .EXPORT __kernel_vector_069 + .EXPORT __kernel_vector_070 + .EXPORT __kernel_vector_071 + .EXPORT __kernel_vector_072 + .EXPORT __kernel_vector_073 + .EXPORT __kernel_vector_074 + .EXPORT __kernel_vector_075 + .EXPORT __kernel_vector_076 + .EXPORT __kernel_vector_077 + .EXPORT __kernel_vector_078 + .EXPORT __kernel_vector_079 + .EXPORT __kernel_vector_080 + .EXPORT __kernel_vector_081 + .EXPORT __kernel_vector_082 + .EXPORT __kernel_vector_083 + .EXPORT __kernel_vector_084 + .EXPORT __kernel_vector_085 + .EXPORT __kernel_vector_086 + .EXPORT __kernel_vector_087 + .EXPORT __kernel_vector_088 + .EXPORT __kernel_vector_089 + .EXPORT __kernel_vector_090 + .EXPORT __kernel_vector_091 + .EXPORT __kernel_vector_092 + .EXPORT __kernel_vector_093 + .EXPORT __kernel_vector_094 + .EXPORT __kernel_vector_095 + .EXPORT __kernel_vector_096 + .EXPORT __kernel_vector_097 + .EXPORT __kernel_vector_098 + .EXPORT __kernel_vector_099 + .EXPORT __kernel_vector_100 + .EXPORT __kernel_vector_101 + .EXPORT __kernel_vector_102 + .EXPORT __kernel_vector_103 + .EXPORT __kernel_vector_104 + .EXPORT __kernel_vector_105 + .EXPORT __kernel_vector_106 + .EXPORT __kernel_vector_107 + .EXPORT __kernel_vector_108 + .EXPORT __kernel_vector_109 + .EXPORT __kernel_vector_110 + .EXPORT __kernel_vector_111 + .EXPORT __kernel_vector_112 + .EXPORT __kernel_vector_113 + .EXPORT __kernel_vector_114 + .EXPORT __kernel_vector_115 + .EXPORT __kernel_vector_116 + .EXPORT __kernel_vector_117 + .EXPORT __kernel_vector_118 + .EXPORT __kernel_vector_119 + .EXPORT __kernel_vector_120 + .EXPORT __kernel_vector_121 + .EXPORT __kernel_vector_122 + .EXPORT __kernel_vector_123 + .EXPORT __kernel_vector_124 + .EXPORT __kernel_vector_125 + .EXPORT __kernel_vector_126 + .EXPORT __kernel_vector_127 + .EXPORT __kernel_vector_128 + .EXPORT __kernel_vector_129 + .EXPORT __kernel_vector_130 + .EXPORT __kernel_vector_131 + .EXPORT __kernel_vector_132 + .EXPORT __kernel_vector_133 + .EXPORT __kernel_vector_134 + .EXPORT __kernel_vector_135 + .EXPORT __kernel_vector_136 + .EXPORT __kernel_vector_137 + .EXPORT __kernel_vector_138 + .EXPORT __kernel_vector_139 + .EXPORT __kernel_vector_140 + .EXPORT __kernel_vector_141 + .EXPORT __kernel_vector_142 + .EXPORT __kernel_vector_143 + .EXPORT __kernel_vector_144 + .EXPORT __kernel_vector_145 + .EXPORT __kernel_vector_146 + .EXPORT __kernel_vector_147 + .EXPORT __kernel_vector_148 + .EXPORT __kernel_vector_149 + .EXPORT __kernel_vector_150 + .EXPORT __kernel_vector_151 + .EXPORT __kernel_vector_152 + .EXPORT __kernel_vector_153 + .EXPORT __kernel_vector_154 + .EXPORT __kernel_vector_155 + .EXPORT __kernel_vector_156 + .EXPORT __kernel_vector_157 + .EXPORT __kernel_vector_158 + .EXPORT __kernel_vector_159 + .EXPORT __kernel_vector_160 + .EXPORT __kernel_vector_161 + .EXPORT __kernel_vector_162 + .EXPORT __kernel_vector_163 + .EXPORT __kernel_vector_164 + .EXPORT __kernel_vector_165 + .EXPORT __kernel_vector_166 + .EXPORT __kernel_vector_167 + .EXPORT __kernel_vector_168 + .EXPORT __kernel_vector_169 + .EXPORT __kernel_vector_170 + .EXPORT __kernel_vector_171 + .EXPORT __kernel_vector_172 + .EXPORT __kernel_vector_173 + .EXPORT __kernel_vector_174 + .EXPORT __kernel_vector_175 + .EXPORT __kernel_vector_176 + .EXPORT __kernel_vector_177 + .EXPORT __kernel_vector_178 + .EXPORT __kernel_vector_179 + .EXPORT __kernel_vector_180 + .EXPORT __kernel_vector_181 + .EXPORT __kernel_vector_182 + .EXPORT __kernel_vector_183 + .EXPORT __kernel_vector_184 + .EXPORT __kernel_vector_185 + .EXPORT __kernel_vector_186 + .EXPORT __kernel_vector_187 + .EXPORT __kernel_vector_188 + .EXPORT __kernel_vector_189 + .EXPORT __kernel_vector_190 + .EXPORT __kernel_vector_191 + .EXPORT __kernel_vector_192 + .EXPORT __kernel_vector_193 + .EXPORT __kernel_vector_194 + .EXPORT __kernel_vector_195 + .EXPORT __kernel_vector_196 + .EXPORT __kernel_vector_197 + .EXPORT __kernel_vector_198 + .EXPORT __kernel_vector_199 + .EXPORT __kernel_vector_200 + .EXPORT __kernel_vector_201 + .EXPORT __kernel_vector_202 + .EXPORT __kernel_vector_203 + .EXPORT __kernel_vector_204 + .EXPORT __kernel_vector_205 + .EXPORT __kernel_vector_206 + .EXPORT __kernel_vector_207 + .EXPORT __kernel_vector_208 + .EXPORT __kernel_vector_209 + .EXPORT __kernel_vector_210 + .EXPORT __kernel_vector_211 + .EXPORT __kernel_vector_212 + .EXPORT __kernel_vector_213 + .EXPORT __kernel_vector_214 + .EXPORT __kernel_vector_215 + .EXPORT __kernel_vector_216 + .EXPORT __kernel_vector_217 + .EXPORT __kernel_vector_218 + .EXPORT __kernel_vector_219 + .EXPORT __kernel_vector_220 + .EXPORT __kernel_vector_221 + .EXPORT __kernel_vector_222 + .EXPORT __kernel_vector_223 + .EXPORT __kernel_vector_224 + .EXPORT __kernel_vector_225 + .EXPORT __kernel_vector_226 + .EXPORT __kernel_vector_227 + .EXPORT __kernel_vector_228 + .EXPORT __kernel_vector_229 + .EXPORT __kernel_vector_230 + .EXPORT __kernel_vector_231 + .EXPORT __kernel_vector_232 + .EXPORT __kernel_vector_233 + .EXPORT __kernel_vector_234 + .EXPORT __kernel_vector_235 + .EXPORT __kernel_vector_236 + .EXPORT __kernel_vector_237 + .EXPORT __kernel_vector_238 + .EXPORT __kernel_vector_239 + .EXPORT __kernel_vector_240 + .EXPORT __kernel_vector_241 + .EXPORT __kernel_vector_242 + .EXPORT __kernel_vector_243 + .EXPORT __kernel_vector_244 + .EXPORT __kernel_vector_245 + .EXPORT __kernel_vector_246 + .EXPORT __kernel_vector_247 + .EXPORT __kernel_vector_248 + .EXPORT __kernel_vector_249 + .EXPORT __kernel_vector_250 + .EXPORT __kernel_vector_251 + .EXPORT __kernel_vector_252 + .EXPORT __kernel_vector_253 + .EXPORT __kernel_vector_254 + .EXPORT __kernel_vector_255 + + +__kernel_vector_064: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #64, r4 + +__kernel_vector_065: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #65, r4 + +__kernel_vector_066: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #66, r4 + +__kernel_vector_067: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #67, r4 + +__kernel_vector_068: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #68, r4 + +__kernel_vector_069: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #69, r4 + +__kernel_vector_070: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #70, r4 + +__kernel_vector_071: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #71, r4 + +__kernel_vector_072: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #72, r4 + +__kernel_vector_073: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #73, r4 + +__kernel_vector_074: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #74, r4 + +__kernel_vector_075: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #75, r4 + +__kernel_vector_076: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #76, r4 + +__kernel_vector_077: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #77, r4 + +__kernel_vector_078: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #78, r4 + +__kernel_vector_079: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #79, r4 + +__kernel_vector_080: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #80, r4 + +__kernel_vector_081: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #81, r4 + +__kernel_vector_082: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #82, r4 + +__kernel_vector_083: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #83, r4 + +__kernel_vector_084: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #84, r4 + +__kernel_vector_085: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #85, r4 + +__kernel_vector_086: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #86, r4 + +__kernel_vector_087: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #87, r4 + +__kernel_vector_088: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #88, r4 + +__kernel_vector_089: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #89, r4 + +__kernel_vector_090: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #90, r4 + +__kernel_vector_091: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #91, r4 + +__kernel_vector_092: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #92, r4 + +__kernel_vector_093: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #93, r4 + +__kernel_vector_094: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #94, r4 + +__kernel_vector_095: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #95, r4 + +__kernel_vector_096: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #96, r4 + +__kernel_vector_097: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #97, r4 + +__kernel_vector_098: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #98, r4 + +__kernel_vector_099: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #99, r4 + +__kernel_vector_100: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #100, r4 + +__kernel_vector_101: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #101, r4 + +__kernel_vector_102: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #102, r4 + +__kernel_vector_103: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #103, r4 + +__kernel_vector_104: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #104, r4 + +__kernel_vector_105: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #105, r4 + +__kernel_vector_106: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #106, r4 + +__kernel_vector_107: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #107, r4 + +__kernel_vector_108: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #108, r4 + +__kernel_vector_109: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #109, r4 + +__kernel_vector_110: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #110, r4 + +__kernel_vector_111: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #111, r4 + +__kernel_vector_112: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #112, r4 + +__kernel_vector_113: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #113, r4 + +__kernel_vector_114: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #114, r4 + +__kernel_vector_115: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #115, r4 + +__kernel_vector_116: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #116, r4 + +__kernel_vector_117: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #117, r4 + +__kernel_vector_118: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #118, r4 + +__kernel_vector_119: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #119, r4 + +__kernel_vector_120: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #120, r4 + +__kernel_vector_121: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #121, r4 + +__kernel_vector_122: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #122, r4 + +__kernel_vector_123: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #123, r4 + +__kernel_vector_124: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #124, r4 + +__kernel_vector_125: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #125, r4 + +__kernel_vector_126: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #126, r4 + +__kernel_vector_127: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #127, r4 + +__kernel_vector_128: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #128, r4 + +__kernel_vector_129: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #129, r4 + +__kernel_vector_130: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #130, r4 + +__kernel_vector_131: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #131, r4 + +__kernel_vector_132: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #132, r4 + +__kernel_vector_133: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #133, r4 + +__kernel_vector_134: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #134, r4 + +__kernel_vector_135: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #135, r4 + +__kernel_vector_136: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #136, r4 + +__kernel_vector_137: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #137, r4 + +__kernel_vector_138: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #138, r4 + +__kernel_vector_139: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #139, r4 + +__kernel_vector_140: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #140, r4 + +__kernel_vector_141: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #141, r4 + +__kernel_vector_142: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #142, r4 + +__kernel_vector_143: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #143, r4 + +__kernel_vector_144: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #144, r4 + +__kernel_vector_145: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #145, r4 + +__kernel_vector_146: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #146, r4 + +__kernel_vector_147: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #147, r4 + +__kernel_vector_148: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #148, r4 + +__kernel_vector_149: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #149, r4 + +__kernel_vector_150: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #150, r4 + +__kernel_vector_151: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #151, r4 + +__kernel_vector_152: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #152, r4 + +__kernel_vector_153: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #153, r4 + +__kernel_vector_154: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #154, r4 + +__kernel_vector_155: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #155, r4 + +__kernel_vector_156: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #156, r4 + +__kernel_vector_157: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #157, r4 + +__kernel_vector_158: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #158, r4 + +__kernel_vector_159: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #159, r4 + +__kernel_vector_160: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #160, r4 + +__kernel_vector_161: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #161, r4 + +__kernel_vector_162: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #162, r4 + +__kernel_vector_163: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #163, r4 + +__kernel_vector_164: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #164, r4 + +__kernel_vector_165: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #165, r4 + +__kernel_vector_166: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #166, r4 + +__kernel_vector_167: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #167, r4 + +__kernel_vector_168: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #168, r4 + +__kernel_vector_169: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #169, r4 + +__kernel_vector_170: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #170, r4 + +__kernel_vector_171: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #171, r4 + +__kernel_vector_172: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #172, r4 + +__kernel_vector_173: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #173, r4 + +__kernel_vector_174: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #174, r4 + +__kernel_vector_175: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #175, r4 + +__kernel_vector_176: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #176, r4 + +__kernel_vector_177: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #177, r4 + +__kernel_vector_178: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #178, r4 + +__kernel_vector_179: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #179, r4 + +__kernel_vector_180: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #180, r4 + +__kernel_vector_181: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #181, r4 + +__kernel_vector_182: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #182, r4 + +__kernel_vector_183: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #183, r4 + +__kernel_vector_184: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #184, r4 + +__kernel_vector_185: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #185, r4 + +__kernel_vector_186: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #186, r4 + +__kernel_vector_187: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #187, r4 + +__kernel_vector_188: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #188, r4 + +__kernel_vector_189: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #189, r4 + +__kernel_vector_190: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #190, r4 + +__kernel_vector_191: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #191, r4 + +__kernel_vector_192: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #192, r4 + +__kernel_vector_193: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #193, r4 + +__kernel_vector_194: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #194, r4 + +__kernel_vector_195: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #195, r4 + +__kernel_vector_196: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #196, r4 + +__kernel_vector_197: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #197, r4 + +__kernel_vector_198: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #198, r4 + +__kernel_vector_199: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #199, r4 + +__kernel_vector_200: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #200, r4 + +__kernel_vector_201: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #201, r4 + +__kernel_vector_202: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #202, r4 + +__kernel_vector_203: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #203, r4 + +__kernel_vector_204: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #204, r4 + +__kernel_vector_205: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #205, r4 + +__kernel_vector_206: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #206, r4 + +__kernel_vector_207: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #207, r4 + +__kernel_vector_208: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #208, r4 + +__kernel_vector_209: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #209, r4 + +__kernel_vector_210: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #210, r4 + +__kernel_vector_211: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #211, r4 + +__kernel_vector_212: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #212, r4 + +__kernel_vector_213: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #213, r4 + +__kernel_vector_214: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #214, r4 + +__kernel_vector_215: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #215, r4 + +__kernel_vector_216: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #216, r4 + +__kernel_vector_217: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #217, r4 + +__kernel_vector_218: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #218, r4 + +__kernel_vector_219: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #219, r4 + +__kernel_vector_220: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #220, r4 + +__kernel_vector_221: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #221, r4 + +__kernel_vector_222: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #222, r4 + +__kernel_vector_223: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #223, r4 + +__kernel_vector_224: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #224, r4 + +__kernel_vector_225: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #225, r4 + +__kernel_vector_226: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #226, r4 + +__kernel_vector_227: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #227, r4 + +__kernel_vector_228: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #228, r4 + +__kernel_vector_229: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #229, r4 + +__kernel_vector_230: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #230, r4 + +__kernel_vector_231: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #231, r4 + +__kernel_vector_232: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #232, r4 + +__kernel_vector_233: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #233, r4 + +__kernel_vector_234: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #234, r4 + +__kernel_vector_235: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #235, r4 + +__kernel_vector_236: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #236, r4 + +__kernel_vector_237: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #237, r4 + +__kernel_vector_238: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #238, r4 + +__kernel_vector_239: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #239, r4 + +__kernel_vector_240: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #240, r4 + +__kernel_vector_241: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #241, r4 + +__kernel_vector_242: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #242, r4 + +__kernel_vector_243: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #243, r4 + +__kernel_vector_244: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #244, r4 + +__kernel_vector_245: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #245, r4 + +__kernel_vector_246: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #246, r4 + +__kernel_vector_247: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #247, r4 + +__kernel_vector_248: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #248, r4 + +__kernel_vector_249: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #249, r4 + +__kernel_vector_250: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #250, r4 + +__kernel_vector_251: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #251, r4 + +__kernel_vector_252: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #252, r4 + +__kernel_vector_253: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #253, r4 + +__kernel_vector_254: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #254, r4 + +__kernel_vector_255: + mov.l r4, @-r15 + bra __kernel_int_hdr + mov #255, r4 + + .AENDI + + + +;------------------------------------------------ +; 割込みハンドラ +; +; r4をスタックに積んだ後、r4に割り込み番号を +; 格納してここに分岐するものとする +;------------------------------------------------ +__kernel_int_hdr: + mov.l r0, @-r15 ; r0 退避 + stc sr, r0 + mov.l r1, @-r15 ; r1 退避 + mov r0, r1 ; sr 保存 + or #h'f0, r0 + ldc r0, sr ; 全割り込みマスク + + ; ---- レジスタ保存(r2-r7,pr) + mov.l r2, @-r15 + mov.l r3, @-r15 + mov.l r5, @-r15 + mov.l r6, @-r15 + mov.l r7, @-r15 + sts.l pr, @-r15 + + ; ---- 割り込みマスク値の設定 + mov.l r1, r0 + and #h'f0, r0 ; 割り込みマスクレベル取り出し + mov.l addr_sh_imsk, r1 + mov.l @r1, r2 ; 古いマスク値取り出し + mov.l r0, @r1 ; 新しいマスク値設定 + + ; ---- 多重割り込み判定 + mov.l addr_int_cnt, r1 + extu.b r4, r4 ; 割込み番号の符号拡張をクリア + mov.l @r1, r0 + cmp/eq #0, r0 + add #1, r0 + bf/s multiple_int + mov.l r0, @r1 ; 割り込みネスト値を設定(遅延スロット) + + ; ---- スタック入れ替え + mov.l r15, r0 ; 現在のスタックを退避 + mov.l addr_int_isp, r1 + mov.l @r1, r15 ; 割込み用スタックを設定 + mov.l r0, @-r15 ; 割込み前のスタックポインタを保存 + + ; ---- 古いマスク値を保存 + mov.l r2, @-r15 ; 古いマスク値を保存 + + ; ---- 割り込み開始処理呼び出し + mov.l addr_sta_inh, r1 + jsr @r1 + mov.l r4, @-r15 ; 割込み番号を退避(遅延スロット) + + ; ---- 割り込み実行処理呼び出し + mov.l addr_exe_inh, r1 + jsr @r1 + mov.l @r15+, r4 ; 割込み番号を引数とする + + ; ---- 古いマスク値を取り出し + mov.l @r15+, r2 ; 古いマスク値を取り出し + + ; ---- スタックの復帰 + mov.l @r15, r15 + + ; ---- 割り込みカウンタのクリア + mov.l addr_int_cnt, r1 + xor r0, r0 + mov.l r0, @r1 + + mov.l @(40, r15), r0 ; 割込み前の sr を取り出し + and #h'f0, r0 + cmp/eq r0, r2 + bf return_int + + ; ---- 割り込み終了処理呼び出し + mov.l addr_sh_imsk, r1 + mov.l addr_end_inh, r2 + jsr @r2 + mov.l r0, @r1 ; 割込み前の状態に割込みマスク値を設定(遅延スロット) + + ; ---- 復帰時割り込みマスクの設定 + mov.l @(40, r15), r0 ; 割込み前の sr を取り出し + or #h'f0, r0 ; 割込みマスク部分クリアの前処理(一旦ビットを立てる) + mov.l addr_sh_imsk, r1 + xor #h'f0, r0 ; 割込みマスク部分クリア(立てといて反転させる) + mov.l @r1, r1 ; マスク値取得 + or r1, r0 ; マスク値を設定 + mov.l r0, @(40, r15) ; 復帰時SRの設定 + + ; ---- レジスタ復帰 +return_int: + lds.l @r15+, pr + mov.l @r15+, r7 + mov.l @r15+, r6 + mov.l @r15+, r5 + mov.l @r15+, r3 + mov.l @r15+, r2 + mov.l @r15+, r1 + mov.l @r15+, r0 + mov.l @r15+, r4 + rte + nop + + ; ---- 多重割り込み処理 +multiple_int: + mov.l r0, @r1 ; 割り込みネスト値を設定 + + ; ---- 割り込み実行処理呼び出し + mov.l addr_exe_inh, r1 + jsr @r1 ; 割り込み番号を引数とする + nop + + ; ---- 割り込みカウンタの減算 + mov.l addr_int_cnt, r1 + mov.l @r1, r0 + add #-1, r0 + mov.l r0, @r1 + + ; ---- レジスタ復帰 + lds.l @r15+, pr + mov.l @r15+, r7 + mov.l @r15+, r6 + mov.l @r15+, r5 + mov.l @r15+, r3 + mov.l @r15+, r2 + mov.l @r15+, r1 + mov.l @r15+, r0 + mov.l @r15+, r4 + rte + nop + + .ALIGN 4 +addr_int_cnt: + .DATA.L __kernel_int_cnt ; 割り込みネスト回数 + +addr_sh_imsk: + .DATA.L __kernel_sh_imsk ; 割り込みマスク値 + +addr_int_isp: + .DATA.L __kernel_int_isp ; 割り込み用スタックポインタ + +addr_sta_inh: + .DATA.L __kernel_sta_inh ; 割り込み開始処理 + +addr_exe_inh: + .DATA.L __kernel_exe_inh ; 割り込み実行処理 + +addr_end_inh: + .DATA.L __kernel_end_inh ; 割り込み終了処理 + + + + .SECTION B,DATA,ALIGN=4 +__kernel_int_cnt: + .RES.L 1 + + + .END + +; end of file diff --git a/kernel/source/arch/proc/sh/sh2/shc/mk_vec/mk_vec.c b/kernel/source/arch/proc/sh/sh2/shc/mk_vec/mk_vec.c new file mode 100755 index 0000000..aa9dafb --- /dev/null +++ b/kernel/source/arch/proc/sh/sh2/shc/mk_vec/mk_vec.c @@ -0,0 +1,138 @@ +#include +#include + + +int main() +{ + FILE *fp; + char fname[64]; + int i; + + for ( i = 4; i <= 63; i++ ) + { + sprintf(fname ,"../vect_%03d.src", i); + if ( (fp = fopen(fname, "w")) == NULL ) + { + return 1; + } + + fprintf(fp, + "; --------------------------------------------------------------------------- \n" + "; Hyper Operating System V4 Advance\n" + "; \n" + "; Copyright (C) 1998-2006 by Project HOS\n" + "; http://sourceforge.jp/projects/hos/\n" + "; --------------------------------------------------------------------------- \n" + "\n" + "\n" + " .EXPORT __kernel_vector_%03d\n" + " .IMPORT __kernel_exc_hdr\n" + "\n" + "\n" + " .SECTION P, CODE, ALIGN=4\n" + "\n" + "__kernel_vector_%03d:\n" + " mov.l r4, @-r15\n" + " mov.l addr_exc_hdr, r4\n" + " jmp @r4\n" + " mov #%d, r4\n" + "\n" + "\n" + " .ALIGN 4\n" + "addr_exc_hdr:\n" + " .DATA.L __kernel_exc_hdr\n" + "\n" + "\n" + " .END\n" + "\n" + "\n" + "; end of file\n", + i, i, i); + + fclose(fp); + } + + + for ( i = 64; i <= 255; i++ ) + { + sprintf(fname ,"../vect_%03d.src", i); + if ( (fp = fopen(fname, "w")) == NULL ) + { + return 1; + } + + fprintf(fp, + "; --------------------------------------------------------------------------- \n" + "; Hyper Operating System V4 Advance\n" + "; \n" + "; Copyright (C) 1998-2006 by Project HOS\n" + "; http://sourceforge.jp/projects/hos/\n" + "; --------------------------------------------------------------------------- \n" + "\n" + "\n" + " .EXPORT __kernel_vector_%03d\n" + " .IMPORT __kernel_int_hdr\n" + "\n" + "\n" + " .SECTION P, CODE, ALIGN=4\n" + "\n" + "__kernel_vector_%03d:\n" + " mov.l r4, @-r15\n" + " mov.l addr_int_hdr, r4\n" + " jmp @r4\n" + " mov #%d, r4\n" + "\n" + "\n" + " .ALIGN 4\n" + "addr_int_hdr:\n" + " .DATA.L __kernel_int_hdr\n" + "\n" + "\n" + " .END\n" + "\n" + "\n" + "; end of file\n", + i, i, i); + + fclose(fp); + } + + { + sprintf(fname ,"../vect_dmy.src", i); + if ( (fp = fopen(fname, "w")) == NULL ) + { + return 1; + } + + fprintf(fp, + "; --------------------------------------------------------------------------- \n" + "; Hyper Operating System V4 Advance\n" + "; \n" + "; Copyright (C) 1998-2006 by Project HOS\n" + "; http://sourceforge.jp/projects/hos/\n" + "; --------------------------------------------------------------------------- \n" + "\n" + "\n" + " .EXPORT __kernel_vector_dmy\n" + " .IMPORT __kernel_int_hdr\n" + "\n" + "\n" + " .SECTION P, CODE, ALIGN=4\n" + "\n" + "__kernel_vector_dmy:\n" + " rte\n" + " nop\n" + "\n" + "\n" + " .END\n" + "\n" + "\n" + "; end of file\n", + i, i, i); + + fclose(fp); + } + + return 0; +} + diff --git a/kernel/source/arch/proc/win/win32/ctxctl.c b/kernel/source/arch/proc/win/win32/ctxctl.c new file mode 100755 index 0000000..8f5bf17 --- /dev/null +++ b/kernel/source/arch/proc/win/win32/ctxctl.c @@ -0,0 +1,301 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ctxctlc + * @brief %jp{コンテキスト制御}%en{context control} + * + * @version $Id: ctxctl.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/inhobj.h" + + + +static DWORD WINAPI _kernel_ctx_ent(LPVOID param); /* %jp{スレッドの開始関数} */ +static void _kernel_run_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /* %jp{スレッドの実行開始} */ +static void _kernel_wai_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /* %jp{スレッドの停止待ち} */ + + +static _KERNEL_T_CTXCB *_kernel_win32_runctxcb = NULL; /**< %jp{実行中のコンテキスト} */ +static _KERNEL_T_CTXCB *_kernel_win32_oldctxcb = NULL; /**< %jp{直前の実行コンテキスト} */ +static HANDLE _kernel_win32_hSemIntCtx = NULL; /**< %jp{割り込みの排他制御セマフォ} */ +static HANDLE _kernel_win32_hSemDisInt = NULL; /**< %jp{システムの排他制御用セマフォ} */ +static volatile BOOL _kernel_win32_blIntCtx = FALSE; /**< %jp{割り込み処理中フラグ} */ +static volatile BOOL _kernel_win32_blDisInt = TRUE; /**< %jp{割り込み禁止フラグ} */ +static volatile BOOL _kernel_win32_blDlyDsp = FALSE; /**< %jp{遅延ディスパッチフラグ} */ +static DWORD _kernel_win32_hPrimaryThreadId = 0; /**< %jp{プライマリスレッドID} */ + + + +/** %jp{システムの初期化} */ +void _kernel_ini_prc(void) +{ + /* %jp{プライマリスレッドIDの保存} */ + _kernel_win32_hPrimaryThreadId = GetCurrentThreadId(); + + /* %jp{割り込み禁止に見立てるセマフォの作成} */ + _kernel_win32_hSemDisInt = CreateSemaphore(NULL, 0, 1, NULL); + + /* %jp{割り込みの排他制御セマフォの生成} */ + _kernel_win32_hSemIntCtx = CreateSemaphore(NULL, 1, 1, NULL); +} + + +/** %jp{割り込み許可} */ +void _kernel_ena_int(void) +{ + if ( _kernel_win32_blIntCtx ) + { + return; + } + + if ( _kernel_win32_blDisInt ) + { + _kernel_win32_blDisInt = FALSE; + ReleaseSemaphore(_kernel_win32_hSemDisInt, 1, NULL); + } +} + + +/** %jp{割り込み禁止} */ +void _kernel_dis_int(void) +{ + if ( _kernel_win32_blIntCtx ) + { + return; + } + + if ( !_kernel_win32_blDisInt ) + { + WaitForSingleObject(_kernel_win32_hSemDisInt, INFINITE); + _kernel_win32_blDisInt = TRUE; + } +} + + +/** %jp{実行コンテキストの作成} */ +void _kernel_cre_ctx( + _KERNEL_T_CTXCB *pk_ctxcb, /* コンテキストを作成するアドレス */ + FP entry, /* コンテキストの実行開始番地 */ + VP_INT exinf1, /* コンテキストの実行時パラメータ1 */ + VP_INT exinf2) /* コンテキストの実行時パラメータ2 */ +{ + pk_ctxcb->blIntSuspend = FALSE; + + /* %jp{起動情報を格納} */ + pk_ctxcb->entry = entry; + pk_ctxcb->exinf1 = exinf1; + pk_ctxcb->exinf2 = exinf2; + + /* %jp{コンテキストスレッド生成* */ + pk_ctxcb->hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); +#if 1 + pk_ctxcb->hThread = CreateThread(NULL, 0, _kernel_ctx_ent, (LPVOID)pk_ctxcb, + 0, &pk_ctxcb->dwThreadId); +#else + pk_ctxcb->hThread = _beginthread(_kernel_ctx_ent, 0, (void *)pk_ctxcb); +#endif + + /* %jp{pk_ctxcb->hThreadの格納完了後に開始} */ + SetEvent(pk_ctxcb->hEvent); + + _kernel_wai_ctx(pk_ctxcb); +} + + +/** %jp{スレッドの開始関数} */ +DWORD WINAPI _kernel_ctx_ent(LPVOID param) +{ + _KERNEL_T_CTXCB *pk_ctxcb; + + /* %jp{コンテキスト情報取得} */ + pk_ctxcb = (_KERNEL_T_CTXCB *)param; + + /* %jp{開始待ち} */ + WaitForSingleObject(pk_ctxcb->hEvent, INFINITE); + + /* %jp{リスタート用setjmp} */ + setjmp(pk_ctxcb->jmpenv); + + /* %jp{自分自身をサスペンドさせる} */ + SuspendThread(pk_ctxcb->hThread); + + /* %jp{直前のコンテキストスレッドが確実にサスペンドするのを待つ} */ + _kernel_wai_ctx(_kernel_win32_oldctxcb); + _kernel_win32_oldctxcb = NULL; + + pk_ctxcb->entry(pk_ctxcb->exinf1, pk_ctxcb->exinf2); + + return 0; +} + + +/** %jp{実行コンテキストの削除} */ +void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb) +{ + /* スレッド削除 */ + CloseHandle(pk_ctxcb->hEvent); + TerminateThread(pk_ctxcb->hThread, 0); +} + + +/** %jp{実行コンテキストのリスタート} */ +void _kernel_rst_ctx(_KERNEL_T_CTXCB *pk_ctxcb) +{ + longjmp(pk_ctxcb->jmpenv, 0); +} + + +/** %jp{実行コンテキストの切替} */ +void _kernel_swi_ctx( + _KERNEL_T_CTXCB *ctxcb_now, /* 現在のコンテキストの保存先 */ + _KERNEL_T_CTXCB *ctxcb_nxt) /* 新たに実行するコンテキスト */ +{ + /* %jp{切り替え無しならそのまま} */ + if ( ctxcb_now == ctxcb_nxt ) + { + return; + } + + /* %jp{割り込みの終わりで発生した場合} */ + if ( _kernel_win32_blIntCtx ) + { + /* %jp{割り込み状態を解除} */ + _kernel_win32_blIntCtx = FALSE; + + /* 切り替え先のスレッドを起こす */ + _kernel_run_ctx(ctxcb_nxt); + + /* 遅延ディスパッチあり */ + _kernel_win32_blDlyDsp = TRUE; + + return; + } + else + { + /* %jp{切り替え先のスレッドを起こす} */ + _kernel_run_ctx(ctxcb_nxt); + + /* %jp{自分自身をサスペンドさせる} */ + SuspendThread(ctxcb_now->hThread); + + /* %jp{直前のタスクが確実にサスペンドするのを待つ} */ + _kernel_wai_ctx(_kernel_win32_oldctxcb); + _kernel_win32_oldctxcb = NULL; + } +} + + +/** %jp{スレッドの停止待ち} */ +void _kernel_wai_ctx(_KERNEL_T_CTXCB *pk_ctxcb) +{ + if ( pk_ctxcb == NULL ) + { + return; + } + + while ( SuspendThread(pk_ctxcb->hThread) != 1 ) + { + ResumeThread(pk_ctxcb->hThread); + Sleep(1); + } + ResumeThread(pk_ctxcb->hThread); +} + + + +/** %jp{アイドル時の処理} */ +void _kernel_wai_int(void) +{ + Sleep(10); +} + + +/** %jp{コンテキストの開始} */ +void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb) +{ + /* %jp{スレッドの実行開始} */ + _kernel_run_ctx(pk_ctxcb); + + if ( GetCurrentThreadId() == _kernel_win32_hPrimaryThreadId ) + { + /* %jp{ダイアログを表示} */ + MessageBox(NULL, "Press OK, Exit a process", "Hyper Operationg System V4 Advance for Win32", MB_OK); + + /* %jp{終了} */ + ExitProcess(0); + } +} + + +/** %jp{スレッドの実行開始} */ +void _kernel_run_ctx(_KERNEL_T_CTXCB *pk_ctxcb) +{ + /* %jp{実行中コンテキストの登録} */ + _kernel_win32_oldctxcb = _kernel_win32_runctxcb; + _kernel_win32_runctxcb = pk_ctxcb; + + /* %jp{割り込みから中断されていた場合} */ + if ( pk_ctxcb->blIntSuspend ) + { + pk_ctxcb->blIntSuspend = FALSE; + + _kernel_win32_blDisInt = FALSE; + ReleaseSemaphore(_kernel_win32_hSemDisInt, 1, NULL); + } + + /* %jp{スレッドを起こす} */ + ResumeThread(pk_ctxcb->hThread); +} + + + +/* %jp{割り込み用処理} */ +void vsig_int(int inhno) +{ + WaitForSingleObject(_kernel_win32_hSemIntCtx, INFINITE); + + /* %jp{割り込み用セマフォを取る} */ + WaitForSingleObject(_kernel_win32_hSemDisInt, INFINITE); + _kernel_win32_blDisInt = TRUE; + + /* %jp{現在実行中のスレッドを止める} */ + SuspendThread(_kernel_win32_runctxcb->hThread); + _kernel_win32_runctxcb->blIntSuspend = TRUE; + + /* %jp{割り込み状態に設定} */ + _kernel_win32_blIntCtx = TRUE; + _kernel_win32_blDlyDsp = FALSE; + + /* %jp{割り込み処理} */ + _kernel_sta_inh(); + _kernel_exe_inh(inhno); + _kernel_end_inh(); + + /* %jp{遅延ディスパッチが発生しなければ復帰処理} */ + if ( !_kernel_win32_blDlyDsp ) + { + /* %jp{割り込み状態を解除} */ + _kernel_win32_blIntCtx = FALSE; + + /* %jp{割り込み用セマフォを返す} */ + _kernel_win32_blDisInt = FALSE; + ReleaseSemaphore(_kernel_win32_hSemDisInt, 1, NULL); + + /* %jp{現在実行中のスレッドを再開} */ + _kernel_win32_runctxcb->blIntSuspend = FALSE; + ResumeThread(_kernel_win32_runctxcb->hThread); + } + + ReleaseSemaphore(_kernel_win32_hSemIntCtx, 1, NULL); +} + + + +/* end of file */ diff --git a/kernel/source/core/dsp/dsp_tsk.c b/kernel/source/core/dsp/dsp_tsk.c new file mode 100755 index 0000000..6fd8f69 --- /dev/null +++ b/kernel/source/core/dsp/dsp_tsk.c @@ -0,0 +1,78 @@ +/** + * Hyper Operating System V4 Advance + * + * @file dsp_tsk.c + * @brief %en{Task dispatch}%jp{タスクディスパッチ} + * + * @version $Id: dsp_tsk.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" + + + +/** %jp{タスクディスパッチ}%en{Task dispatch} + * @return void + */ +void _kernel_dsp_tsk(void) +{ + _KERNEL_T_TSKHDL tskhdl_run; + _KERNEL_T_TSKHDL tskhdl_top; + _KERNEL_T_CTXCB *ctxcb_run; + _KERNEL_T_CTXCB *ctxcb_top; + + /* %jp{タスクディスパッチ不可なら保留して抜ける} */ + if ( _KERNEL_SYS_SNS_DPN() ) + { + _KERNEL_SYS_SET_DLY(); + return; + } + + /* %jp{タスクハンドルを取得} */ + tskhdl_run = _KERNEL_SYS_GET_RUNTSK(); /* %jp{実行中タスクを取得} */ + tskhdl_top = _KERNEL_REF_RDQ(); /* %jp{レディーキュー先頭タスクを取得} */ + + + /* %jp{コンテキスト取得} */ +#if _KERNEL_SYSTSK_TCB + + ctxcb_run = _KERNEL_TSK_GET_CTXCB(_KERNEL_TSK_TSKHDL2TCB(tskhdl_run)); /* %jp{実行中タスクのコンテキストを取得} */ + ctxcb_top = _KERNEL_SYS_GET_SYSCTXCB(); /* %jp{レディーキュー先頭タスクのコンテキストを取得} */ + +#else + + /* %jp{実行中タスクのコンテキストを取得} */ + if ( tskhdl_run != _KERNEL_TSKHDL_NULL ) + { + ctxcb_run = _KERNEL_TSK_GET_CTXCB(_KERNEL_TSK_TSKHDL2TCB(tskhdl_run)); + } + else + { + ctxcb_run = _KERNEL_SYS_GET_SYSCTXCB(); + } + + /* %jp{レディーキュー先頭タスクのコンテキストを取得} */ + if ( tskhdl_top != _KERNEL_TSKHDL_NULL ) + { + ctxcb_top = _KERNEL_TSK_GET_CTXCB(_KERNEL_TSK_TSKHDL2TCB(tskhdl_top)); + } + else + { + ctxcb_top = _KERNEL_SYS_GET_SYSCTXCB(); + } + +#endif + + /* %jp{実行タスクの登録} */ + _KERNEL_SYS_SET_RUNTSK(tskhdl_top); + + /* %jp{ディスパッチ実行} */ + _KERNEL_SWI_CTX(ctxcb_run, ctxcb_top); +} + + +/* end of file */ diff --git a/kernel/source/core/dsp/ent_tsk.c b/kernel/source/core/dsp/ent_tsk.c new file mode 100755 index 0000000..f2397da --- /dev/null +++ b/kernel/source/core/dsp/ent_tsk.c @@ -0,0 +1,36 @@ +/** + * Hyper Operating System V4 Advance + * + * @file dsp_tsk.c + * @brief %en{Task dispatch}%jp{タスクディスパッチ} + * + * @version $Id: ent_tsk.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{タスク起動時のエントリーポイント}%en{Task entry point} + * @return void + */ +void _kernel_ent_tsk(VP_INT exinf1, VP_INT exinf2) +{ + FP task; + + task = (FP)exinf2; + + _KERNEL_LEAVE_SVC(); + + task(exinf1); + + ext_tsk(); +} + + +/* end of file */ diff --git a/kernel/source/core/dsp/idl_lop.c b/kernel/source/core/dsp/idl_lop.c new file mode 100755 index 0000000..143c01e --- /dev/null +++ b/kernel/source/core/dsp/idl_lop.c @@ -0,0 +1,31 @@ +/** + * Hyper Operating System V4 Advance + * + * @file idl_lop.c + * @brief %jp{アイドルループ}%en{idel loop} + * + * @version $Id: idl_lop.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{アイドルループ}%en{idel loop} + * @return void + */ +void _kernel_idl_lop(void) /**< %jp{アイドルループ}%en{idle loop} */ +{ + for ( ; ; ) + { + _kernel_wai_int(); + } +} + + +/* end of file */ diff --git a/kernel/source/core/hep/alc_hep.c b/kernel/source/core/hep/alc_hep.c new file mode 100755 index 0000000..1ab2607 --- /dev/null +++ b/kernel/source/core/hep/alc_hep.c @@ -0,0 +1,67 @@ +/** + * Hyper Operating System V4 Advance + * + * @file alc_hep.c + * @brief %jp{メモリヒープのからメモリ割当て}%en{allocate memory} + * + * @version $Id: alc_hep.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/hep.h" + + +/** %jp{メモリの割り当て} */ +VP _kernel_alc_hep( + _KERNEL_T_HEPCB *pk_hepcb, + SIZE size) +{ + _KERNEL_T_HEPBLK *mblk; + _KERNEL_T_HEPBLK *mblk_next; + _KERNEL_T_HEPBLK *mblk_next2; + + /* %jp{ヒープの存在チェック} */ + if ( pk_hepcb->base == NULL ) + { + return NULL; + } + + /* %jp{サイズのアライメントを調整} */ + size = _KERNEL_HEP_ALIGNED(size); + + /* %jp{空き領域を検索} */ + mblk = pk_hepcb->base; + while ( mblk->size != 0 ) + { + if ( mblk->flag == _KERNEL_HEP_FREE && mblk->size >= size ) + { + /* 十分な容量があったら */ + if ( mblk->size - size > _KERNEL_HEP_BLKSIZE + _KERNEL_HEP_MEMALIGN ) + { + /* ブロックを分割する */ + mblk_next = (_KERNEL_T_HEPBLK *)((UB *)mblk + _KERNEL_HEP_BLKSIZE + size); + mblk_next2 = (_KERNEL_T_HEPBLK *)((UB *)mblk + _KERNEL_HEP_BLKSIZE + mblk->size); + mblk_next->prev = mblk; + mblk_next->size = mblk->size - size - _KERNEL_HEP_BLKSIZE; + mblk_next->flag = _KERNEL_HEP_FREE; + mblk_next2->prev = mblk_next; + mblk->size = size; + } + mblk->flag = _KERNEL_HEP_USING; + + return (VP)((UB *)mblk + _KERNEL_HEP_BLKSIZE); + } + + /* 次のブロックへ進む */ + mblk = (_KERNEL_T_HEPBLK *)((UB *)mblk + mblk->size + _KERNEL_HEP_BLKSIZE); + } + + return NULL; /* 空きが無い */ +} + + +/* end of file */ diff --git a/kernel/source/core/hep/cre_hep.c b/kernel/source/core/hep/cre_hep.c new file mode 100755 index 0000000..64043dd --- /dev/null +++ b/kernel/source/core/hep/cre_hep.c @@ -0,0 +1,56 @@ +/** + * Hyper Operating System V4 Advance + * + * @file hep.h + * @brief %jp{メモリヒープ生成}%en{create memory heap} + * + * @version $Id: cre_hep.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/hep.h" + + + +/** %jp{メモリヒープを生成} */ +void _kernel_cre_hep( + _KERNEL_T_HEPCB *pk_hepcb, + void *p_base, + SIZE size) +{ + _KERNEL_T_HEPBLK *blk_last; + + /* %jp{サイズのアライメントを調整} */ + size &= ~(_KERNEL_HEP_MEMALIGN - 1); + + /* %jp{サイズチェック} */ + if ( size <= sizeof(_KERNEL_T_HEPBLK) ) + { + pk_hepcb->base = NULL; + return; + } + + /* %jp{設定保存} */ + pk_hepcb->base = (_KERNEL_T_HEPBLK *)p_base; + pk_hepcb->heapsz = size; + + /* %jp{終端位置に番人を設定} */ + blk_last = (_KERNEL_T_HEPBLK *)((UB *)p_base + size - _KERNEL_HEP_BLKSIZE); + + /* %jp{全体を空き領域に設定} */ + pk_hepcb->base->prev = NULL; + pk_hepcb->base->size = size - (_KERNEL_HEP_BLKSIZE * 2); + pk_hepcb->base->flag = _KERNEL_HEP_FREE; + + /* %jp{終端の番人を利用中に設定} */ + blk_last->prev = NULL; + blk_last->size = 0; + blk_last->flag = _KERNEL_HEP_USING; +} + + + +/* end of file */ diff --git a/kernel/source/core/hep/fre_hep.c b/kernel/source/core/hep/fre_hep.c new file mode 100755 index 0000000..1ad3cb3 --- /dev/null +++ b/kernel/source/core/hep/fre_hep.c @@ -0,0 +1,72 @@ +/** + * Hyper Operating System V4 Advance + * + * @file alc_hep.c + * @brief %jp{メモリヒープへメモリ返却}%en{memory free} + * + * @version $Id: fre_hep.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/hep.h" + + + +/** %jp{メモリの解放} */ +void _kernel_fre_hep( + _KERNEL_T_HEPCB *pk_hepcb, + VP ptr) +{ + _KERNEL_T_HEPBLK *mblk; + _KERNEL_T_HEPBLK *mblktmp; + _KERNEL_T_HEPBLK *mblknext; + + /* %jp{ポインタ範囲チェック */ + if ( ptr < (VP)pk_hepcb->base || ptr >= (VP)((UB*)pk_hepcb->base + pk_hepcb->heapsz) ) + { + return; + } + + /* %jp{メモリブロック位置を取得 */ + mblk = (_KERNEL_T_HEPBLK *)((UB *)ptr - _KERNEL_HEP_BLKSIZE); + + /* %jp{パラメーターチェック */ + if ( mblk->flag != _KERNEL_HEP_USING ) /* %jp{使用中で無ければ */ + { + return; + } + + /* %jp{フラグを未使用に設定} */ + mblk->flag = _KERNEL_HEP_FREE; + + /* %jp{次のブロックをチェック} */ + mblktmp = (_KERNEL_T_HEPBLK *)((UB *)ptr + mblk->size); + if ( mblktmp->flag == _KERNEL_HEP_FREE ) + { + /* %jp{次のブロックが未使用なら結合する} */ + mblknext = (_KERNEL_T_HEPBLK *)((UB *)mblktmp + mblktmp->size + _KERNEL_HEP_BLKSIZE); + mblknext->prev = mblk; + mblk->size += mblktmp->size + _KERNEL_HEP_BLKSIZE; + } + + /* %jp{前のブロックをチェック} */ + if ( mblk->prev != NULL ) + { + mblktmp = mblk->prev; + if ( mblktmp->flag == _KERNEL_HEP_FREE ) + { + /* %jp{前のブロックが未使用なら結合する} */ + mblknext = (_KERNEL_T_HEPBLK *)((UB *)mblk + mblk->size + _KERNEL_HEP_BLKSIZE); + mblknext->prev = mblktmp; + mblktmp->size += mblk->size + _KERNEL_HEP_BLKSIZE; + } + } +} + + + +/* end of file */ diff --git a/kernel/source/core/que/add_que.c b/kernel/source/core/que/add_que.c new file mode 100755 index 0000000..247fe20 --- /dev/null +++ b/kernel/source/core/que/add_que.c @@ -0,0 +1,41 @@ +/** + * Hyper Operating System V4 Advance + * + * @file add_que.c + * @brief %en{Add the task to the queue-tail}%jp{タスクをキュー末尾に追加} + * + * @version $Id: add_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" + + + +/** %jp{タスクをキュー末尾に追加}%en{Add the task to the queue-tail} + * @param que %jp{追加するキュー}%en{pointer of queue} + * @param ptr %jp{追加するタスク}%en{pointer of task} + * @param atr %jp{追加時の属性}%en{attribute} + * @return void + */ +void _kernel_add_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl, + ATR atr) +{ + if ( atr & TA_TPRI ) + { + _kernel_adp_que(pk_que, tskhdl); /* %jp{タスク優先度順に追加}%en{in the order of task's priority} */ + } + else + { + _kernel_adf_que(pk_que, tskhdl); /* %jp{FIFO順に追加}%en{in the order of FIFO} */ + } +} + + + +/* end of file */ diff --git a/kernel/source/core/que/adf_que.c b/kernel/source/core/que/adf_que.c new file mode 100755 index 0000000..32b77cf --- /dev/null +++ b/kernel/source/core/que/adf_que.c @@ -0,0 +1,110 @@ +/** + * Hyper Operating System V4 Advance + * + * @file adf_que.h + * @brief %en{Add the task to queue in order of FIFO}%jp{FIFO順でキューにタスクを追加} + * + * @version $Id: adf_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST /* %en{One-way list} %jp{単方向リスト} */ + + +/** %en{Add the task to queue in order of FIFO}%jp{FIFO順でキューにタスクを追加} + * @param que %en{pointer of queue}%jp{追加するキュー} + * @param ptr %en{pointer of task}%jp{追加するタスク} + * @return void + */ +void _kernel_adf_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl) +{ + _KERNEL_T_TSKHDL tskhdl_tail; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB *tcb_tail; + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + /* %jp{タスクに所属キューを設定} */ + _KERNEL_TSK_SET_QUE(tcb, pk_que); + + /* %jp{キュー末尾のタスクを取得} */ + tskhdl_tail = _KERNEL_QUE_GET_TAIL(pk_que); + + if ( tskhdl_tail == _KERNEL_TSKHDL_NULL ) /* queue is empty */ + { + _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl); + } + else /* queue is not empty */ + { + tcb_tail = _KERNEL_TSK_TSKHDL2TCB(tskhdl_tail); + _KERNEL_TSK_SET_QUENEXT(tcb, _KERNEL_TSK_GET_QUENEXT(tcb_tail)); + _KERNEL_TSK_SET_QUENEXT(tcb_tail, tskhdl); + } + _KERNEL_QUE_SET_TAIL(pk_que, tskhdl); +} + + +#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST /* %en{Two-way list} %jp{双方向リスト} */ + + +/** %en{Add the task to queue in order of FIFO}%jp{FIFO順でキューにタスクを追加} + * @param que %en{pointer of queue}%jp{追加するキュー} + * @param ptr %en{pointer of task}%jp{追加するタスク} + * @return void + */ +void _kernel_adf_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl) +{ + _KERNEL_T_TSKHDL tskhdl_head; + _KERNEL_T_TSKHDL tskhdl_tail; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB *tcb_head; + _KERNEL_T_TCB *tcb_tail; + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + /* %jp{タスクに所属キューを設定} */ + _KERNEL_TSK_SET_QUE(tcb, pk_que); + + /* %jp{キュー先頭のタスクを取得} */ + tskhdl_head = _KERNEL_QUE_GET_HEAD(pk_que); + + if ( tskhdl_head == _KERNEL_TSKHDL_NULL ) /* queue is empty */ + { + /* %jp{キューにタスクが無ければ先頭に設定} */ + _KERNEL_QUE_SET_HEAD(pk_que, tskhdl); + _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl); + _KERNEL_TSK_SET_QUEPREV(tcb, tskhdl); + } + else /* queue is not empty */ + { + /* %jp{キュー末尾に追加} */ + tcb_head = _KERNEL_TSK_TSKHDL2TCB(tskhdl_head); + tskhdl_tail = _KERNEL_TSK_GET_QUEPREV(tcb_head); + tcb_tail = _KERNEL_TSK_TSKHDL2TCB(tskhdl_tail); + _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl_head); + _KERNEL_TSK_SET_QUEPREV(tcb, tskhdl_tail); + _KERNEL_TSK_SET_QUENEXT(tcb_tail, tskhdl); + _KERNEL_TSK_SET_QUEPREV(tcb_head, tskhdl); + } +} + + +#endif + + + +/* end of file */ diff --git a/kernel/source/core/que/adp_que.c b/kernel/source/core/que/adp_que.c new file mode 100755 index 0000000..0c97d97 --- /dev/null +++ b/kernel/source/core/que/adp_que.c @@ -0,0 +1,178 @@ +/** + * Hyper Operating System V4 Advance + * + * @file adp_que.c + * @brief %en{Add the task to the queue in the order of the task's priority}%jp{タスクを優先度順でキューに追加} + * + * @version $Id: adp_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST /* %en{One-way list} %jp{単方向リスト} */ + + +/** %en{Add the task to the queue in the order of the task's priority}%jp{タスクを優先度順でキューに追加} + * @param que %en{pointer of queue}%jp{追加するキュー} + * @param ptr %en{pointer of task}%jp{追加するタスク} + * @return void + */ +void _kernel_adp_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl) +{ + _KERNEL_T_TSKHDL tskhdl_tail; + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TSKHDL tskhdl_prev; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB *tcb_next; + _KERNEL_T_TCB *tcb_prev; + PRI tskpri; + PRI tskpri_next; + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + /* %jp{タスクに所属キューを設定} */ + _KERNEL_TSK_SET_QUE(tcb, pk_que); + + /* %jp{キュー末尾のタスクを取得} */ + tskhdl_tail = _KERNEL_QUE_GET_TAIL(pk_que); + + if ( tskhdl_tail == _KERNEL_TSKHDL_NULL ) /* %en{the queue is empty}%jp{キューにタスクが無ければ先頭に設定} */ + { + _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl); + _KERNEL_QUE_SET_TAIL(pk_que, tskhdl); + } + else /* %en{que is not empty}%jp{キューが空でないなら挿入位置を探索} */ + { + /* %jp{タスク優先度を取得} */ + tskpri = _KERNEL_TSK_GET_TSKPRI(tcb); + + /* %jp{先頭から探索} */ + tskhdl_prev = tskhdl_tail; + tcb_prev = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev); + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_prev); + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + + for ( ; ; ) + { + /* %jp{優先度取り出し} */ + tskpri_next = _KERNEL_TSK_GET_TSKPRI(tcb_next); + + if ( tskpri_next > tskpri ) + { + break; + } + + /* %jp{次を探す} */ + tskhdl_prev = tskhdl_next; + tcb_prev = tcb_next; + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_next); + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + + /* %jp{末尾なら抜ける} */ + if ( tskhdl_prev == tskhdl_tail ) + { + _KERNEL_QUE_SET_TAIL(pk_que, tskhdl); + break; + } + } + + /* %jp{挿入} */ + _KERNEL_TSK_SET_QUENEXT(tcb_prev, tskhdl); + _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl_next); + } +} + + +#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST /* %en{Two-way list} %jp{双方向リスト} */ + + +/** %en{Add the task to the queue in the order of the task's priority}%jp{タスクを優先度順でキューに追加} + * @param que %en{pointer of queue}%jp{追加するキュー} + * @param ptr %en{pointer of task}%jp{追加するタスク} + * @return void + */ +void _kernel_adp_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl) +{ + _KERNEL_T_TSKHDL tskhdl_head; + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TSKHDL tskhdl_prev; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB *tcb_next; + _KERNEL_T_TCB *tcb_prev; + PRI tskpri; + PRI tskpri_next; + + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + /* %jp{タスクに所属キューを設定} */ + _KERNEL_TSK_SET_QUE(tcb, pk_que); + + /* %jp{キュー末尾のタスクを取得} */ + tskhdl_head = _KERNEL_QUE_GET_HEAD(pk_que); + + if ( tskhdl_head == _KERNEL_TSKHDL_NULL ) /* %en{the queue is empty}%jp{キューにタスクが無ければ先頭に設定} */ + { + _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl); + _KERNEL_TSK_SET_QUEPREV(tcb, tskhdl); + _KERNEL_QUE_SET_HEAD(pk_que, tskhdl); + } + else /* %en{que is not empty}%jp{キューが空でないなら挿入位置を探索} */ + { + /* %jp{タスク優先度を取得} */ + tskpri = _KERNEL_TSK_GET_TSKPRI(tcb); + + /* %jp{先頭から探索} */ + tskhdl_next = tskhdl_head; + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + + do + { + /* %jp{優先度取り出し} */ + tskpri_next = _KERNEL_TSK_GET_TSKPRI(tcb_next); + + if ( tskpri_next > tskpri ) + { + if ( tskhdl_next == tskhdl_head ) /* %jp{挿入位置が先頭だった場合} */ + { + tskhdl_prev = _KERNEL_TSK_GET_QUEPREV(tcb_next); + tcb_prev = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev); + _KERNEL_QUE_SET_HEAD(pk_que, tskhdl); + } + break; + } + + /* %jp{次を探す} */ + tskhdl_prev = tskhdl_next; + tcb_prev = tcb_next; + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_next); + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + } while ( tskhdl_next != tskhdl_head ); + + /* %jp{挿入} */ + _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl_next); + _KERNEL_TSK_SET_QUEPREV(tcb, tskhdl_prev); + _KERNEL_TSK_SET_QUENEXT(tcb_prev, tskhdl); + _KERNEL_TSK_SET_QUEPREV(tcb_next, tskhdl); + } +} + + +#endif + + + +/* end of file */ diff --git a/kernel/source/core/que/nxt_que.c b/kernel/source/core/que/nxt_que.c new file mode 100755 index 0000000..cb93307 --- /dev/null +++ b/kernel/source/core/que/nxt_que.c @@ -0,0 +1,77 @@ +/** + * Hyper Operating System V4 Advance + * + * @file rmh_que.h + * @brief %jp{キュー先頭タスクの取り出し}%en{} + * + * @version $Id: nxt_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST /* %en{One-way list} %jp{単方向リスト} */ + + +/** %jp{キューの次のタスクの取り出し}%en{} + * @param pk_que %jp{取り出すキュー}%en{queue} + * @return %jp{次のタスクを返す。末尾の場合は _KERNEL_TSKHDL_NULL を返す} + */ +_KERNEL_T_TSKHDL _kernel_nxt_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl) +{ + /** %jp{末尾ならNULLを返す} */ + if ( tskhdl == _KERNEL_QUE_GET_TAIL(pk_que) ) + { + return _KERNEL_TSKHDL_NULL; + } + + /** %jp{次のタスクを返す} */ + return _KERNEL_TSK_GET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl)); +} + + +#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST /* %en{Two-way list} %jp{双方向リスト} */ + + + +/** %jp{キューの次のタスクの取り出し}%en{} + * @param pk_que %jp{取り出すキュー}%en{queue} + * @return %jp{次のタスクを返す。末尾の場合は _KERNEL_TSKHDL_NULL を返す} + */ +_KERNEL_T_TSKHDL _kernel_nxt_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl) +{ + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TCB *tcb; + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + /** %jp{次のタスクを取得} */ + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb); + + /** %jp{末尾ならNULLを返す} */ + if ( tskhdl_next == _KERNEL_QUE_GET_HEAD(pk_que) ) + { + return _KERNEL_TSKHDL_NULL; + } + + /** %jp{次のタスクを返す} */ + return tskhdl_next; +} + + +#endif + + + +/* end of file */ diff --git a/kernel/source/core/que/rmh_que.c b/kernel/source/core/que/rmh_que.c new file mode 100755 index 0000000..3ae71bf --- /dev/null +++ b/kernel/source/core/que/rmh_que.c @@ -0,0 +1,105 @@ +/** + * Hyper Operating System V4 Advance + * + * @file rmh_que.h + * @brief %jp{キュー先頭タスクの取り出し}%en{} + * + * @version $Id: rmh_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST /* %en{One-way list} %jp{単方向リスト} */ + + +/** %jp{キュー先頭タスクの取り出し}%en{} + * @param pk_que %jp{取り出すキュー}%en{queue} + * @return void + */ +_KERNEL_T_TSKHDL _kernel_rmh_que( + _KERNEL_T_QUE *pk_que) +{ + _KERNEL_T_TSKHDL tskhdl_head; + _KERNEL_T_TSKHDL tskhdl_tail; + _KERNEL_T_TCB *tcb_head; + _KERNEL_T_TCB *tcb_tail; + + tskhdl_tail = _KERNEL_QUE_GET_TAIL(pk_que); + if ( tskhdl_tail == _KERNEL_TSKHDL_NULL ) + { + return _KERNEL_TSKHDL_NULL; + } + + tcb_tail = _KERNEL_TSK_TSKHDL2TCB(tskhdl_tail); + tskhdl_head = _KERNEL_TSK_GET_QUENEXT(tcb_tail); + tcb_head = _KERNEL_TSK_TSKHDL2TCB(tskhdl_head); + + if ( tskhdl_head == tskhdl_tail ) + { + _KERNEL_QUE_SET_TAIL(pk_que, _KERNEL_TSKHDL_NULL); + } + else + { + _KERNEL_TSK_SET_QUENEXT(tcb_tail, _KERNEL_TSK_GET_QUENEXT(tcb_head)); + } + + _KERNEL_TSK_SET_QUE(tcb_head, NULL); + + return tskhdl_head; +} + + +#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST /* %en{Two-way list} %jp{双方向リスト} */ + + + +/** %jp{キュー先頭タスクの取り出し}%en{} + * @param pk_que %jp{取り出すキュー}%en{queue} + * @return void + */ +_KERNEL_T_TSKHDL _kernel_rmh_que( + _KERNEL_T_QUE *pk_que) +{ + _KERNEL_T_TSKHDL tskhdl_head; + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TSKHDL tskhdl_prev; + _KERNEL_T_TCB *tcb_head; + + tskhdl_head = _KERNEL_QUE_GET_HEAD(pk_que); + if ( tskhdl_head == _KERNEL_TSKHDL_NULL ) + { + return _KERNEL_TSKHDL_NULL; + } + + tcb_head = _KERNEL_TSK_TSKHDL2TCB(tskhdl_head); + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_head); + if ( tskhdl_head == tskhdl_next ) + { + _KERNEL_QUE_SET_HEAD(pk_que, _KERNEL_TSKHDL_NULL); + } + else + { + tskhdl_prev = _KERNEL_TSK_GET_QUEPREV(tcb_head); + _KERNEL_TSK_SET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl_prev), tskhdl_next); + _KERNEL_TSK_SET_QUEPREV(_KERNEL_TSK_TSKHDL2TCB(tskhdl_next), tskhdl_prev); + _KERNEL_QUE_SET_HEAD(pk_que, tskhdl_next); + } + + _KERNEL_TSK_SET_QUE(tcb_head, NULL); + + return tskhdl_head; +} + + +#endif + + + +/* end of file */ diff --git a/kernel/source/core/que/rmv_que.c b/kernel/source/core/que/rmv_que.c new file mode 100755 index 0000000..d6e4cbc --- /dev/null +++ b/kernel/source/core/que/rmv_que.c @@ -0,0 +1,115 @@ +/** + * Hyper Operating System V4 Advance + * + * @file knl_que.h + * @brief %en{queue object heder file}%jp{キューオブジェクトのヘッダファイル} + * + * @version $Id: rmv_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST /* %en{One-way list} %jp{単方向リスト} */ + + +/** %en{Remove the task from the queuqe} %jp{タスクをから取り外す} + * @param ptr %en{pointer of task}%jp{取り外すタスク} + * @return void + */ +void _kernel_rmv_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl) +{ + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TSKHDL tskhdl_prev; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB *tcb_next; + _KERNEL_T_TCB *tcb_prev; + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb); + if ( tskhdl_next == tskhdl ) /* last one */ + { + _KERNEL_QUE_SET_TAIL(pk_que, _KERNEL_TSKHDL_NULL); + } + else + { + tskhdl_prev = _KERNEL_QUE_GET_TAIL(pk_que); + tcb_prev = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev); + for ( ; ; ) + { + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_prev); + if ( tskhdl_next == tskhdl ) + { + break; + } + tskhdl_prev = tskhdl_next; + tcb_prev = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev); + } + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_next); + + _KERNEL_TSK_SET_QUENEXT(tcb_prev, tskhdl_next); + if ( tskhdl == _KERNEL_QUE_GET_TAIL(pk_que) ) + { + _KERNEL_QUE_SET_TAIL(pk_que, tskhdl_prev); + } + } + + _KERNEL_TSK_SET_QUE(tcb, NULL); +} + + +#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST /* %en{Two-way list} %jp{双方向リスト} */ + + +/** %en{Remove the task from the queuqe} %jp{タスクをから取り外す} + * @param ptr %en{pointer of task}%jp{取り外すタスク} + * @return void + */ +void _kernel_rmv_que( + _KERNEL_T_QUE *pk_que, + _KERNEL_T_TSKHDL tskhdl) +{ + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TSKHDL tskhdl_prev; + _KERNEL_T_TCB *tcb; + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb); + if ( tskhdl_next == tskhdl ) /* last one */ + { + _KERNEL_QUE_SET_HEAD(pk_que, _KERNEL_TSKHDL_NULL); + } + else + { + tskhdl_prev = _KERNEL_TSK_GET_QUEPREV(tcb); + + _KERNEL_TSK_SET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl_prev), tskhdl_next); + _KERNEL_TSK_SET_QUEPREV(_KERNEL_TSK_TSKHDL2TCB(tskhdl_next), tskhdl_prev); + if ( tskhdl == _KERNEL_QUE_GET_HEAD(pk_que) ) + { + _KERNEL_QUE_SET_HEAD(pk_que, tskhdl_next); + } + } + + _KERNEL_TSK_SET_QUE(tcb, NULL); +} + + +#endif + + + +/* end of file */ diff --git a/kernel/source/core/que/rot_que.c b/kernel/source/core/que/rot_que.c new file mode 100755 index 0000000..7f25a09 --- /dev/null +++ b/kernel/source/core/que/rot_que.c @@ -0,0 +1,68 @@ +/** + * Hyper Operating System V4 Advance + * + * @file rot_que.c + * @brief %en{Rotate queue}%jp{キューの回転} + * + * @version $Id: rot_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + + +#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST /* %en{One-way list}%jp{単方向リスト} */ + + +/** %en{Rotate Queue}%jp{キューの回転} + * @param que %en{pointer of queue}%jp{回転させるキュー} + * @return void + */ +void _kernel_rot_que( + _KERNEL_T_QUE *pk_que) +{ + _KERNEL_T_TSKHDL tskhdl_tail; + + tskhdl_tail = _KERNEL_QUE_GET_TAIL(pk_que); + + if ( tskhdl_tail != _KERNEL_TSKHDL_NULL ) + { + tskhdl_tail = _KERNEL_TSK_GET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl_tail)); + _KERNEL_QUE_SET_TAIL(pk_que, tskhdl_tail); + } +} + + +#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST /* %en{Two-way list}%jp{双方向リスト} */ + + +/** %en{Rotate Queue}%jp{キューの回転} + * @param que %en{pointer of queue}%jp{回転させるキュー} + * @return void + */ +void _kernel_rot_que( + _KERNEL_T_QUE *pk_que) +{ + _KERNEL_T_TSKHDL tskhdl_head; + + tskhdl_head = _KERNEL_QUE_GET_HEAD(pk_que); + + if ( tskhdl_head != _KERNEL_TSKHDL_NULL ) + { + tskhdl_head = _KERNEL_TSK_GET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl_head)); + _KERNEL_QUE_SET_HEAD(pk_que, tskhdl_head); + } +} + + +#endif + + + +/* end of file */ diff --git a/kernel/source/core/que/trm_que.c b/kernel/source/core/que/trm_que.c new file mode 100755 index 0000000..460e670 --- /dev/null +++ b/kernel/source/core/que/trm_que.c @@ -0,0 +1,31 @@ +/** + * Hyper Operating System V4 Advance + * + * @file knl_que.h + * @brief %en{queue object heder file}%jp{キューオブジェクトのヘッダファイル} + * + * @version $Id: trm_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + +void _kernel_trm_que( + _KERNEL_T_TSKHDL tskhdl) +{ + _KERNEL_T_QUE *pk_que; + + pk_que = _KERNEL_TSK_GET_QUE(_KERNEL_TSK_TSKHDL2TCB(tskhdl)); + if ( pk_que != NULL ) + { + _kernel_rmv_que(pk_que, tskhdl); + } +} + + +/* end of file */ diff --git a/kernel/source/core/tmq/add_tmq.c b/kernel/source/core/tmq/add_tmq.c new file mode 100755 index 0000000..305f3da --- /dev/null +++ b/kernel/source/core/tmq/add_tmq.c @@ -0,0 +1,51 @@ +/** + * Hyper Operating System V4 Advance + * + * @file add_tmq.c + * @brief %jp{タイマキューにオブジェクトを追加} + * + * @version $Id: add_tmq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "core/tmq.h" + + + +/* タイマオブジェクトをリストに追加 */ +void _kernel_add_tmq( + _KERNEL_T_TMQ *pk_tmq, + _KERNEL_T_TIMOBJ *pk_timobj) +{ + /* 既に登録されていたら何もしない */ + if ( pk_timobj->next != NULL ) + { + return; + } + + /* リストに登録 */ + if ( pk_tmq->head == NULL ) + { + /* リストが空の場合の追加 */ + pk_timobj->next = pk_timobj; + pk_timobj->prev = pk_timobj; + pk_tmq->head = pk_timobj; + } + else + { + /* リストの末尾に追加 */ + pk_timobj->next = pk_tmq->head; + pk_timobj->prev = pk_tmq->head->prev; + pk_timobj->next->prev = pk_timobj; + pk_timobj->prev->next = pk_timobj; + } +} + + + +/* end of file */ diff --git a/kernel/source/core/tmq/rmv_tmq.c b/kernel/source/core/tmq/rmv_tmq.c new file mode 100755 index 0000000..7fc7e86 --- /dev/null +++ b/kernel/source/core/tmq/rmv_tmq.c @@ -0,0 +1,62 @@ +/** + * Hyper Operating System V4 Advance + * + * @file add_tmq.c + * @brief %jp{タイマキューにオブジェクトを追加} + * + * @version $Id: rmv_tmq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "core/tmq.h" + + + +/* タイマオブジェクトをリストから削除 */ +void _kernel_rmv_tmq( + _KERNEL_T_TMQ *pk_tmq, + _KERNEL_T_TIMOBJ *pk_timobj) +{ + /* 未登録なら何もしない */ + if ( pk_timobj->next == NULL ) + { + return; + } + + /* 検索中のタイマならポインタをずらす(再入対策) */ + if ( pk_timobj == pk_tmq->next ) + { + pk_tmq->next = pk_timobj->next; /* 次のオブジェクトに移動 */ + } + + /* リストから削除 */ + if ( pk_timobj == pk_timobj->next ) + { + /* リストが空になる場合 */ + pk_tmq->head = NULL; + pk_tmq->next = NULL; + } + else + { + /* 先頭なら先頭位置をずらす */ + if ( pk_timobj == pk_tmq->head ) + { + pk_tmq->head = pk_timobj->next; + } + + /* リストから削除 */ + pk_timobj->next->prev = pk_timobj->prev; + pk_timobj->prev->next = pk_timobj->next; + } + + /* 未登録に設定 */ + pk_timobj->next = NULL; +} + + +/* end of file */ diff --git a/kernel/source/core/tmq/sig_tmq.c b/kernel/source/core/tmq/sig_tmq.c new file mode 100755 index 0000000..f2367b0 --- /dev/null +++ b/kernel/source/core/tmq/sig_tmq.c @@ -0,0 +1,62 @@ +/** + * Hyper Operating System V4 Advance + * + * @file add_tmq.c + * @brief %jp{タイマキューにオブジェクトを追加} + * + * @version $Id: sig_tmq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "core/tmq.h" + + + +/* タイマオブジェクトをリストから削除 */ +void _kernel_sig_tmq( + _KERNEL_T_TMQ *pk_tmq, + RELTIM tictim) +{ + _KERNEL_T_TIMOBJ *timobj; + + /* タイマオブジェクトのハンドラ呼び出し */ + if ( pk_tmq->head != NULL ) + { + /* 検索ポインタ設定 */ + pk_tmq->next = pk_tmq->head; + + do /* リスト末尾まで繰り返し */ + { + /* 次のポインタを事前に設定 */ + timobj = pk_tmq->next; + pk_tmq->next = timobj->next; + + while ( timobj->lefttim <= tictim ) + { + /* タイマハンドラ呼び出し */ + timobj->timhdr(timobj); + + /* ハンドラ内で削除された場合 */ + if ( timobj->next == NULL ) + { + goto loop_continue; + } + } + timobj->lefttim -= tictim; + +loop_continue: + ; + } while ( pk_tmq->next != pk_tmq->head ); + + /* 検索ポインタのクリア */ + pk_tmq->next = NULL; + } +} + + +/* end of file */ diff --git a/kernel/source/core/toq/add_toq.c b/kernel/source/core/toq/add_toq.c new file mode 100755 index 0000000..8e5f6ba --- /dev/null +++ b/kernel/source/core/toq/add_toq.c @@ -0,0 +1,104 @@ +/** + * Hyper Operating System V4 Advance + * + * @file add_toq.c + * @brief %jp{タスクをタイムアウトキューに追加} + * + * @version $Id: add_toq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + +#if _KERNEL_SPT_TOQ + +/** %jp{タイムアウト待ち行列にタスクを追加} */ +void _kernel_add_toq( + _KERNEL_T_TSKHDL tskhdl, + RELTIM tmout) +{ + _KERNEL_T_TSKHDL tskhdl_head; + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TSKHDL tskhdl_prev; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB *tcb_next; + _KERNEL_T_TCB *tcb_prev; + RELTIM tmout_next; + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + /* %jp{先頭タスク取得} */ + tskhdl_head = _KERNEL_TOQ_GET_HED_TSK(); + + if ( tskhdl_head == _KERNEL_TSKHDL_NULL ) + { + /* %jp{最初の1つをキューに登録} */ + _KERNEL_TSK_SET_TOQNEXT(tcb, tskhdl); + _KERNEL_TSK_SET_TOQPREV(tcb, tskhdl); + _KERNEL_TOQ_SET_HED_TSK(tskhdl); + + /* %jp{タイムアウト時刻を設定} */ + _KERNEL_TSK_SET_TOQDIFTIM(tcb, tmout); + + return; + } + + /* %jp{挿入場所を検索} */ + tskhdl_next = tskhdl_head; + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + do + { + tmout_next = _KERNEL_TSK_GET_TOQDIFTIM(tcb_next); + + /* %jp{時間比較} */ + if ( tmout < tmout_next ) + { + /* %jp{先頭なら */ + if ( tskhdl_next == tskhdl_head ) + { + _KERNEL_TOQ_SET_HED_TSK(tskhdl); /* %jp{先頭ポインタ更新} */ + tskhdl_prev = _KERNEL_TSK_GET_TOQPREV(tcb_next); + tcb_prev = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev); + } + + /* %jp{時間の差分を設定} */ + _KERNEL_TSK_SET_TOQDIFTIM(tcb_next, tmout_next - tmout); + _KERNEL_TSK_SET_TOQDIFTIM(tcb, tmout); + + /* %jp{リストに挿入} */ + _KERNEL_TSK_SET_TOQNEXT(tcb, tskhdl_next); + _KERNEL_TSK_SET_TOQPREV(tcb, tskhdl_prev); + _KERNEL_TSK_SET_TOQNEXT(tcb_prev, tskhdl); + _KERNEL_TSK_SET_TOQPREV(tcb_next, tskhdl); + + return; + } + + tmout -= tmout_next; /* %jp{差分を減算} */ + + tskhdl_prev = tskhdl_next; + tcb_prev = tcb_next; + tskhdl_next = _KERNEL_TSK_GET_TOQNEXT(tcb_next); /* %jp{次のタスクへ進む} */ + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + } while ( tskhdl_next != tskhdl_head ); /* %jp{リストを一周するまでループ} */ + + /* 残った差分を設定 */ + _KERNEL_TSK_SET_TOQDIFTIM(tcb, tmout); + + /* %jp{末尾に追加} */ + _KERNEL_TSK_SET_TOQNEXT(tcb, tskhdl_next); + _KERNEL_TSK_SET_TOQPREV(tcb, tskhdl_prev); + _KERNEL_TSK_SET_TOQNEXT(tcb_prev, tskhdl); + _KERNEL_TSK_SET_TOQPREV(tcb_next, tskhdl); +} + +#endif /* _KERNEL_SPT_TMOUT */ + + +/* end of file */ diff --git a/kernel/source/core/toq/rmv_toq.c b/kernel/source/core/toq/rmv_toq.c new file mode 100755 index 0000000..03b169e --- /dev/null +++ b/kernel/source/core/toq/rmv_toq.c @@ -0,0 +1,78 @@ +/** + * Hyper Operating System V4 Advance + * + * @file rmv_toq.c + * @brief %jp{タスクをタイムアウトキューから削除} + * + * @version $Id: rmv_toq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + +#if _KERNEL_SPT_TOQ + +/* タイムアウト待ち行列からタスクを取り除く */ +void _kernel_rmv_toq( + _KERNEL_T_TSKHDL tskhdl) /* 待ち行列から削除するタスク */ +{ + _KERNEL_T_TSKHDL tskhdl_prev; + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB *tcb_prev; + _KERNEL_T_TCB *tcb_next; + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + tskhdl_prev = _KERNEL_TSK_GET_TOQPREV(tcb); + + /* タイムアウトキューに未接続なら無視 */ + if ( tskhdl_prev == _KERNEL_TSKHDL_NULL ) + { + return; + } + + /* キューの最後の1つタスクなら */ + if ( tskhdl_prev == tskhdl ) + { + _KERNEL_TOQ_SET_HED_TSK(_KERNEL_TSKHDL_NULL); /* タイムアウトキューを空にする */ + } + else + { + tskhdl_next = _KERNEL_TSK_GET_TOQNEXT(tcb); + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + tskhdl_prev = _KERNEL_TSK_GET_TOQPREV(tcb); + tcb_prev = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev); + + /* 末尾でなければ */ + if ( tskhdl_next != _KERNEL_TOQ_GET_HED_TSK() ) + { + /* 時間差分を清算 */ + _KERNEL_TSK_SET_TOQDIFTIM(tcb_next, _KERNEL_TSK_GET_TOQDIFTIM(tcb_next) + _KERNEL_TSK_GET_TOQDIFTIM(tcb)); + } + + /* 先頭なら */ + if ( tskhdl == _KERNEL_TOQ_GET_HED_TSK() ) + { + _KERNEL_TOQ_SET_HED_TSK(tskhdl_next); /* 先頭位置更新 */ + } + + /* キューから外す */ + _KERNEL_TSK_SET_TOQNEXT(tcb_prev, tskhdl_next); + _KERNEL_TSK_SET_TOQPREV(tcb_next, tskhdl_prev); + } + + /* 未接続に設定 */ + _KERNEL_TSK_SET_TOQPREV(tcb, _KERNEL_TSKHDL_NULL); +} + +#endif /* _KERNEL_SPT_TMOUT */ + + +/* end of file */ diff --git a/kernel/source/core/toq/sig_toq.c b/kernel/source/core/toq/sig_toq.c new file mode 100755 index 0000000..d2a0cec --- /dev/null +++ b/kernel/source/core/toq/sig_toq.c @@ -0,0 +1,97 @@ +/** + * Hyper Operating System V4 Advance + * + * @file _tic_toq.c + * @brief %jp{タスクをタイムアウトキューに追加} + * + * @version $Id: sig_toq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + +#if _KERNEL_SPT_TOQ + +/* タイムアウトにタイムティック供給 */ +void _kernel_sig_toq( + RELTIM tictim) /* 追加するタイムティック */ +{ + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TSKHDL tskhdl_prev; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB *tcb_next; + _KERNEL_T_TCB *tcb_prev; + _KERNEL_TSK_T_RELTIM diftim; + + /* %jp{先頭タスク取得} */ + tskhdl = _KERNEL_TOQ_GET_HED_TSK(); + + /* %jp{タイムアウトキューが空ならリターン} */ + if ( tskhdl == _KERNEL_TSKHDL_NULL ) + { + return; + } + + /* %jp{タイムアウトキューの処理} */ + for ( ; ; ) + { + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + diftim = _KERNEL_TSK_GET_TOQDIFTIM(tcb); + + /* %jp{タイムアウトに達しないなら} */ + if ( diftim > tictim ) + { + _KERNEL_TSK_SET_TOQDIFTIM(tcb, diftim - tictim); /* %jp{タイムアウト時間を減算} */ + break; + } + + tictim -= diftim; /* %jp{タイムティックを減算} */ + + _KERNEL_TSK_SET_ERCD(tcb, E_TMOUT); + _KERNEL_DSP_WUP_TSK(tskhdl); + + _KERNEL_DSP_TSK(); /* %jp{遅延ディスパッチ予約を行う} */ + + /* %jp{キューから外す} */ + tskhdl_next = _KERNEL_TSK_GET_TOQNEXT(tcb); + tcb_next = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next); + tskhdl_prev = _KERNEL_TSK_GET_TOQPREV(tcb); + tcb_prev = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev); + if ( tskhdl_next == tskhdl ) /* %jp{最後の1つなら} */ + { + /* %jp{キューを空にする} */ + _KERNEL_TSK_SET_TOQPREV(tcb, _KERNEL_TSKHDL_NULL); + tskhdl = _KERNEL_TSKHDL_NULL; + break; + } + + /* %jp{キューから取り外す} */ + _KERNEL_TSK_SET_TOQNEXT(tcb_prev, tskhdl_next); + _KERNEL_TSK_SET_TOQPREV(tcb_next, tskhdl_prev); + _KERNEL_TSK_SET_TOQPREV(tcb, _KERNEL_TSKHDL_NULL); + + tskhdl = tskhdl_next; + tcb = tcb_next; + + /* %jp{ここで一度、多重割り込みの機会を与える} */ +#if 0 + _kernel_unl_sys(); + _kernel_loc_sys(); +#endif + } + + /* %jp{メモリに書き戻す} */ + _KERNEL_TOQ_SET_HED_TSK(tskhdl); +} + +#endif /* _KERNEL_SPT_TMOUT */ + + +/* end of file */ diff --git a/kernel/source/object/flg/acre_flg.c b/kernel/source/object/flg/acre_flg.c new file mode 100755 index 0000000..db16d4d --- /dev/null +++ b/kernel/source/object/flg/acre_flg.c @@ -0,0 +1,100 @@ +/** + * Hyper Operating System V4 Advance + * + * @file acre_flg.c + * @brief %jp{イベントフラグの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)} + * + * @version $Id: acre_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_ACRE_FLG + + +/** %jp{イベントフラグの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)} + * @param pk_cflg %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information} + * @retval %jp{正の値}%en{positiv-value} %jp{生成したイベントフラグのID番号}%en{ID number of the created eventflag} + * @retval E_NOID %jp{ID番号不足(割付可能なイベントフラグIDが無い)}%en{No ID number available(there id no eventflag ID assignable)} + * @retval E_RSATR %jp{予約属性(flgatrが不正あるいは使用できない)}%en{Reserved attribute(flgatr is invalid or unusable)} + */ +ER_ID acre_flg(const T_CFLG *pk_cflg) +{ + ID flgid; + ER_ID erid; + + /* %jp{属性チェック}%en{check attribute} */ +#if _KERNEL_SPT_ACRE_FLG_E_RSATR + if ( ((pk_cflg->flgatr & TA_TPRI) == 0 && !_KERNEL_SPT_FLG_TA_TFIFO) + || ((pk_cflg->flgatr & TA_TPRI) != 0 && !_KERNEL_SPT_FLG_TA_TPRI) + || ((pk_cflg->flgatr & TA_WMUL) == 0 && !_KERNEL_SPT_FLG_TA_WSGL) + || ((pk_cflg->flgatr & TA_WMUL) != 0 && !_KERNEL_SPT_FLG_TA_WMUL) + || ((pk_cflg->flgatr & TA_CLR) != 0 && !_KERNEL_SPT_FLG_TA_CLR) ) + { + return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{空きID探索} */ + for ( flgid = _KERNEL_TMAX_FLG_ID; flgid >= _KERNEL_TMIN_FLG_ID; flgid-- ) + { + if ( !_KERNEL_FLG_CHECK_EXS(flgid) ) + { + break; + } + } + + /* %jp{空きID探索チェック} */ +#if _KERNEL_SPT_ACRE_SEM_E_NOID + if ( flgid <= _KERNEL_TMIN_FLG_ID ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOID; /* %jp{ID番号不足}%en{No ID number available} */ + } +#endif + + /* %jp{イベントフラグ生成} */ + erid = (ER_ID)_kernel_cre_flg(flgid, pk_cflg); + if ( erid == E_OK ) + { + erid = (ER_ID)flgid; + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return erid; +} + + +#else /* _KERNEL_SPT_ACRE_FLG */ + + +#if _KERNEL_SPT_ACRE_FLG_E_NOSPT + +/** %jp{イベントフラグの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)} + * @param pk_cflg %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER_ID acre_flg(const T_CFLG *pk_cflg) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_ACRE_FLG */ + + + +/* end of file */ diff --git a/kernel/source/object/flg/clr_flg.c b/kernel/source/object/flg/clr_flg.c new file mode 100755 index 0000000..a117636 --- /dev/null +++ b/kernel/source/object/flg/clr_flg.c @@ -0,0 +1,87 @@ +/** + * Hyper Operating System V4 Advance + * + * @file clr_flg.c + * @brief %jp{イベントフラグのクリア}%en{Clear Eventflag} + * + * @version $Id: clr_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_CLR_FLG + + +/** %jp{イベントフラグのクリア}%en{Clear Eventflag} + * @param flgid %jp{クリア対象のイベントフラグのID番号}%en{ID number of the eventflag to be cleared} + * @param clrptn %jp{クリアするビットパターン(ビットごとの反転値)}%en{Bit pattern to clear(bit-wise negated)} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)} + * @retval E_PAR %jp{パラメータエラー(setptnが不正)}%en{Parameter error(setptn is invalid)} + */ +ER clr_flg(ID flgid, FLGPTN clrptn) +{ + _KERNEL_T_FLGHDL flghdl; + + /* %jp{ID のチェック} */ +#ifdef _KERNEL_SPT_CLR_FLG_E_ID + if ( !_KERNEL_FLG_CHECK_FLGID(flgid) ) + { + return E_ID; /* %jp{ID不正} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコール開始} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_CLR_FLG_E_NOEXS + if ( !_KERNEL_FLG_CHECK_EXS(flgid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + + flghdl = _KERNEL_FLG_ID2FLGHDL(flgid); + + /* フラグクリア */ + _KERNEL_FLG_SET_FLGPTN(flghdl, _KERNEL_FLG_GET_FLGPTN(flghdl) & clrptn); + + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return E_OK; /* 成功 */ +} + + +#else /* _KERNEL_SPT_CLR_FLG */ + + +#if _KERNEL_SPT_CLR_FLG_E_NOSPT + +/** %jp{イベントフラグのクリア}%en{Clear Eventflag} + * @param flgid %jp{クリア対象のイベントフラグのID番号}%en{ID number of the eventflag to be cleared} + * @param clrptn %jp{クリアするビットパターン(ビットごとの反転値)}%en{Bit pattern to clear(bit-wise negated)} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER clr_flg(ID flgid, FLGPTN clrptn) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_CLR_FLG */ + + +/* end of file */ diff --git a/kernel/source/object/flg/cre_flg.c b/kernel/source/object/flg/cre_flg.c new file mode 100755 index 0000000..b117e1e --- /dev/null +++ b/kernel/source/object/flg/cre_flg.c @@ -0,0 +1,97 @@ +/** + * Hyper Operating System V4 Advance + * + * @file cre_flg.c + * @brief %jp{イベントフラグの生成}%en{Create Eventflag} + * + * @version $Id: cre_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_CRE_FLG + + +/** %jp{イベントフラグの生成}%en{Create Eventflag} + * @param flgid %jp{生成対象のイベントフラグのID番号}%en{ID number of the eventflag to be created} + * @param pk_cflg %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_RSATR %jp{予約属性(flgatrが不正あるいは使用できない)}%en{Reserved attribute(flgatr is invalid or unusable)} + * @retval E_OBJ %jp{オブジェクト状態エラー(対象イベントフラグが登録済み)}%en{Object state error(specified eventflag is already registerd)} + */ +ER cre_flg(ID flgid, const T_CFLG *pk_cflg) +{ + ER ercd; + + /* %jp{IDチェック}%en{check ID} */ +#if _KERNEL_SPT_CRE_FLG_E_ID + if ( !_KERNEL_FLG_CHECK_FLGID(flgid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + /* %jp{属性チェック}%en{check attribute} */ +#if _KERNEL_SPT_ACRE_FLG_E_RSATR + if ( ((pk_cflg->flgatr & TA_TPRI) == 0 && !_KERNEL_SPT_FLG_TA_TFIFO) + || ((pk_cflg->flgatr & TA_TPRI) != 0 && !_KERNEL_SPT_FLG_TA_TPRI) + || ((pk_cflg->flgatr & TA_WMUL) == 0 && !_KERNEL_SPT_FLG_TA_WSGL) + || ((pk_cflg->flgatr & TA_WMUL) != 0 && !_KERNEL_SPT_FLG_TA_WMUL) + || ((pk_cflg->flgatr & TA_CLR) != 0 && !_KERNEL_SPT_FLG_TA_CLR) ) + { + return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{存在チェック}%en{check object} */ +#if _KERNEL_SPT_CRE_FLG_E_OBJ + if ( _KERNEL_FLG_CHECK_EXS(flgid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_OBJ; /* %jp{オブジェクト状態エラー}%en{Object state error} */ + } +#endif + + /* %jp{イベントフラグ生成} */ + ercd = _kernel_cre_flg(flgid, pk_cflg); + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return ercd; +} + + +#else /* _KERNEL_SPT_CRE_FLG */ + + +#if _KERNEL_SPT_CRE_FLG_E_NOSPT + +/** %jp{イベントフラグの生成}%en{Create Eventflag} + * @param flgid %jp{生成対象のイベントフラグのID番号}%en{ID number of the eventflag to be created} + * @param pk_cflg %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER cre_flg(const T_CFLG *pk_cflg) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_CRE_FLG */ + + + +/* end of file */ diff --git a/kernel/source/object/flg/del_flg.c b/kernel/source/object/flg/del_flg.c new file mode 100755 index 0000000..92f6b54 --- /dev/null +++ b/kernel/source/object/flg/del_flg.c @@ -0,0 +1,105 @@ +/** + * Hyper Operating System V4 Advance + * + * @file del_flg.c + * @brief %jp{イベントフラグの削除}%en{Delete Eventflag} + * + * @version $Id: del_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_DEL_FLG + + +/** %jp{イベントフラグの削除}%en{Delete Eventflag} + * @param flgid %jp{削除対象のイベントフラグのID番号}%en{ID number of the eventflag to be deleted} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)} + */ +ER del_flg(ID flgid) +{ + _KERNEL_T_FLGHDL flghdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + _KERNEL_T_QUE *pk_que;; + + /* %jp{IDチェック}%en{check ID} */ +#if _KERNEL_SPT_DEL_FLG_E_ID + if ( !_KERNEL_FLG_CHECK_FLGID(flgid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{存在チェック}%en{check object} */ +#if _KERNEL_SPT_DEL_FLG_E_NOEXS + if ( _KERNEL_FLG_CHECK_EXS(flgid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_OBJ; /* %jp{オブジェクト状態エラー}%en{Object state error} */ + } +#endif + + /* %jp{イベントフラグハンドル取得} */ + flghdl = _KERNEL_FLG_ID2FLGHDL(flgid); + + /* %jp{待ち行列取得} */ + pk_que = _KERNEL_FLG_GET_QUE(flghdl); + + /* %jp{待ち行列のタスクを全て起床} */ + while ( (tskhdl = _KERNEL_RMH_QUE(pk_que)) != _KERNEL_TSKHDL_NULL ) + { + /* %jp{待ちタスクがあれば待ち解除} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + _KERNEL_TSK_SET_ERCD(tcb, E_DLT); /* %jp{エラーコード設定} */ + _KERNEL_FLG_RMV_TOQ(tskhdl); /* %jp{タイムアウトキューから外す} */ + _KERNEL_DSP_WUP_TSK(tskhdl); /* %jp{タスクの待ち解除} */ + } + + /* %jp{オブジェクト削除} */ +#if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY + _KERNEL_SYS_FRE_MEM(_KERNEL_TSK_ID2FLGCB(flgid)); /* %jp{メモリ開放} */ + _KERNEL_TSK_ID2FLGCB(flgid) = NULL; +#elif _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_BLKARRAY + _KERNEL_FLG_SET_FLGATR(flghdl, 0); /* %jp{削除をマーク} */ +#endif + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return E_OK; +} + + +#else /* _KERNEL_SPT_DEL_FLG */ + + +#if _KERNEL_SPT_DEL_FLG_E_NOSPT + +/** %jp{イベントフラグの削除}%en{Delete Eventflag} + * @param flgid %jp{削除対象のイベントフラグのID番号}%en{ID number of the eventflag to be deleted} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER del_flg(ID flgid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_DEL_FLG */ + + + +/* end of file */ diff --git a/kernel/source/object/flg/kchk_flg.c b/kernel/source/object/flg/kchk_flg.c new file mode 100755 index 0000000..a47fba4 --- /dev/null +++ b/kernel/source/object/flg/kchk_flg.c @@ -0,0 +1,38 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sig_sem.c + * @brief %jp{セマフォ資源の返却} + * + * @version $Id: kchk_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +/* %jp{フラグが起床条件を満たしているかチェック} */ +BOOL _kernel_chk_flg( + _KERNEL_T_FLGHDL flghdl, /* %jp{コントロールブロック} */ + _KERNEL_T_FLGINF *pk_flginf) /* %jp{待ちフラグ情報パケットの先頭番地} */ +{ + if ( pk_flginf->wfmode == TWF_ANDW ) + { + /* %jp{AND待ち判定} */ + return ((_KERNEL_FLG_GET_FLGPTN(flghdl) & pk_flginf->waiptn) == pk_flginf->waiptn); + } + else + { + /* %jp{OR待ち判定} */ + return ((_KERNEL_FLG_GET_FLGPTN(flghdl) & pk_flginf->waiptn) != 0); + } +} + + +/* end of file */ diff --git a/kernel/source/object/flg/kcre_flg.c b/kernel/source/object/flg/kcre_flg.c new file mode 100755 index 0000000..1705aea --- /dev/null +++ b/kernel/source/object/flg/kcre_flg.c @@ -0,0 +1,95 @@ +/** + * Hyper Operating System V4 Advance + * + * @file kcre_flg.c + * @brief %jp{イベントフラグの生成}%en{Create Eventflag} + * + * @version $Id: kcre_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +/* %jp{メモリ不足エラーチェックサポートの判定} */ +#if (_KERNEL_SPT_CRE_FLG && _KERNEL_SPT_CRE_FLG_E_NOMEM) || (_KERNEL_SPT_AFLG_SEM && _KERNEL_SPT_ACRE_FLG_E_NOMEM) +#define _KERNEL_SPT_KCRE_FLG_E_NOMEM TRUE +#else +#define _KERNEL_SPT_KCRE_FLG_E_NOMEM FALSE +#endif + + + +/** %jp{イベントフラグの生成}%en{Create Eventflag} + * @param flgid %jp{生成対象のイベントフラグのID番号}%en{ID number of the eventflag to be created} + * @param pk_cflg %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_NOMEM %jp{メモリ不足}%en{Insufficient memory} + */ +ER _kernel_cre_flg(ID flgid, const T_CFLG *pk_cflg) +{ + _KERNEL_T_FLGHDL flghdl; + + /* %jp{メモリ確保}%en{get memory} */ +#if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY +#if _KERNEL_FLGCB_ROM + { + /* %jp{TCB領域がポインタ管理で、ROM/RAM分離の場合} */ + VP mem; + SIZE memsz; + + /* %jp{メモリサイズ決定} */ + memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_FLGCB)) + + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_FLGCB_ROM)); + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(memsz); + +#if _KERNEL_SPT_KCRE_FLG_E_NOMEM + if ( mem == NULL ) + { + return E_NOMEM; + } +#endif + + /* %jp{メモリ割り当て} */ + _KERNEL_TSK_ID2FLGCB(flgid) = (_KERNEL_T_FLGCB *)mem; + _KERNEL_TSK_ID2FLGCB(flgid)->flgcbrom = (_KERNEL_T_FLGCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_FLGCB))); + } +#else + { + VP mem; + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(sizeof(_KERNEL_T_FLGCB)); + +#if _KERNEL_SPT_KCRE_FLG_E_NOMEM + if ( mem == NULL ) + { + return E_NOMEM; + } +#endif + + /* %jp{メモリ割り当て} */ + _KERNEL_SEM_ID2FLGCB(flgid) = (_KERNEL_T_FLGCB *)mem; + } +#endif +#endif + + /* %jp{オブジェクト生成} */ + flghdl = _KERNEL_FLG_ID2FLGHDL(flgid); + _KERNEL_FLG_SET_FLGATR(flghdl, pk_cflg->flgatr | _KERNEL_FLG_TA_CRE); + _KERNEL_CRE_QUE(_KERNEL_FLG_GET_QUE(flghdl)); + _KERNEL_FLG_SET_FLGPTN(flghdl, pk_cflg->iflgptn); + + return E_OK; +} + + +/* end of file */ diff --git a/kernel/source/object/flg/pol_flg.c b/kernel/source/object/flg/pol_flg.c new file mode 100755 index 0000000..00b3989 --- /dev/null +++ b/kernel/source/object/flg/pol_flg.c @@ -0,0 +1,139 @@ +/** + * Hyper Operating System V4 Advance + * + * @file pol_flg.c + * @brief %jp{イベントフラグ待ち(ポーリング)}%en{Wait for Eventflag(Polling)} + * + * @version $Id: pol_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_POL_FLG + + +#if _KERNEL_SPT_TWAI_FLG && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{twai_flgありで、コードサイズ優先なら} */ + +/** %jp{イベントフラグ待ち(ポーリング)}%en{Wait for Eventflag(Polling)} + * @param flgid %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{待ちビットパターン}%en{Wait bit pattern} + * @param wfmode %jp{待ちモード}%en{Wait mode} + * @param p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)} + * @retval E_PAR %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)} + * @retval E_TMOUT %jp{ポーリング失敗}%en{Polling failure} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)} + */ +ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn) +{ + /* %jp{twai_flg で代用し、コードサイズを削減する} */ + return twai_flg(flgid, waiptn, wfmode, p_flgptn, TMO_POL); +} + +#else + +/** %jp{イベントフラグ待ち}%en{Wait for Eventflag} + * @param flgid %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{待ちビットパターン}%en{Wait bit pattern} + * @param wfmode %jp{待ちモード}%en{Wait mode} + * @param p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)} + * @retval E_PAR %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)} + * @retval E_TMOUT %jp{ポーリング失敗}%en{Polling failure} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)} + */ +ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn) +{ + _KERNEL_T_FLGINF flginf; + _KERNEL_T_FLGHDL flghdl; + ER ercd; + + /* %jp{ID のチェック} */ +#ifdef _KERNEL_SPT_POL_FLG_E_ID + if ( !_KERNEL_FLG_CHECK_FLGID(flgid) ) + { + return E_ID; /* %jp{ID不正} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコール開始} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_POL_FLG_E_NOEXS + if ( !_KERNEL_FLG_CHECK_EXS(flgid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + + /* %jp{イベントフラグハンドル取得} */ + flghdl = _KERNEL_FLG_ID2FLGHDL(flgid); + + /* %jp{待ち条件設定} */ + flginf.waiptn = waiptn; + flginf.wfmode = wfmode; + + /* %jp{フラグチェック} */ + if ( _kernel_chk_flg(flghdl, &flginf) ) + { + /* %jp{既に条件を満たしているなら} */ + *p_flgptn = _KERNEL_FLG_GET_FLGPTN(flghdl); /* %jp{解除時のフラグパターンを格納} */ + +#if _KERNEL_SPT_FLG_TA_CLR + if ( _KERNEL_FLG_GET_FLGATR(flghdl) & TA_CLR ) + { + _KERNEL_FLG_SET_FLGPTN(flghdl, 0); /* %jp{クリア属性があればクリア} */ + } +#endif + + ercd = E_OK; + } + else + { + ercd = E_TMOUT; + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return ercd; /* 成功 */ +} + +#endif + + +#else /* _KERNEL_SPT_POL_FLG */ + + +#if _KERNEL_SPT_POL_FLG_E_NOSPT + +/** %jp{イベントフラグ待ち}%en{Wait for Eventflag} + * @param flgid %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{待ちビットパターン}%en{Wait bit pattern} + * @param wfmode %jp{待ちモード}%en{Wait mode} + * @param p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn) +{ + return E_NOSPT; +} + +#endif + +#endif /* _KERNEL_SPT_POL_FLG */ + + +/* end of file */ diff --git a/kernel/source/object/flg/ref_flg.c b/kernel/source/object/flg/ref_flg.c new file mode 100755 index 0000000..37b6d16 --- /dev/null +++ b/kernel/source/object/flg/ref_flg.c @@ -0,0 +1,95 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ref_flg.c + * @brief %jp{イベントフラグの状態参照}%en{Reference Semaphore State} + * + * @version $Id: ref_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_REF_FLG + + +/** %jp{イベントフラグの状態参照}%en{Reference Semaphore State} + * @param flgid %jp{資源獲得対象のイベントフラグID番号}%en{ID number of the flgaphore from which resource is acquired} + * @param pk_rflg %jp{イベントフラグ状態を返すパケットへのポインタ}%en{Pointer to the packet returning the flgaphore state} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified flgaphore is not registerd)} + * @retval E_PAR %jp{パラメータエラー(pk_rflgが不正)}%en{Parameter error(pk_rflg is invalid)} + */ +ER ref_flg(ID flgid, T_RFLG *pk_rflg) +{ + _KERNEL_T_FLGHDL flghdl; + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_REF_FLG_E_ID + if ( !_KERNEL_FLG_CHECK_FLGID(flgid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + +#if _KERNEL_SPT_REF_FLG_E_PAR + if ( pk_rflg == NULL ) + { + return E_PAR; /* %jp{パラメータエラー}%en{Parameter error} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_REF_FLG_E_NOEXS + if ( !_KERNEL_FLG_CHECK_EXS(flgid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{イベントフラグハンドル取得} */ + flghdl = _KERNEL_FLG_ID2FLGHDL(flgid); + + /* %jp{情報取得} */ + pk_rflg->wtskid = _KERNEL_TSK_GET_TSKID(_KERNEL_REF_QUE(_KERNEL_FLG_GET_QUE(flghdl))); + pk_rflg->flgptn = _KERNEL_FLG_GET_FLGPTN(flghdl); + + _KERNEL_LEAVE_SVC(); /* %jp{オブジェクト未生成}%en{Non-existant object} */ + + return E_OK; +} + + +#else /* _KERNEL_SPT_REF_FLG */ + + +#if _KERNEL_SPT_REF_FLG_E_NOSPT + +/** %jp{イベントフラグ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)} + * @param flgid %jp{資源獲得対象のイベントフラグID番号}%en{ID number of the flgaphore from which resource is acquired} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER ref_flg(ID flgid, T_RFLG *pk_rflg) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_REF_FLG */ + + + +/* end of file */ diff --git a/kernel/source/object/flg/set_flg.c b/kernel/source/object/flg/set_flg.c new file mode 100755 index 0000000..cd3f315 --- /dev/null +++ b/kernel/source/object/flg/set_flg.c @@ -0,0 +1,135 @@ +/** + * Hyper Operating System V4 Advance + * + * @file set_flg.c + * @brief %jp{イベントフラグのセット}%en{Set Eventflag} + * + * @version $Id: set_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_SET_FLG + + +/** %jp{イベントフラグのセット}%en{Set Eventflag} + * @param flgid %jp{セット対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{セットするビットパターン}%en{Bit pattern to set} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)} + * @retval E_PAR %jp{パラメータエラー(setptnが不正)}%en{Parameter error(setptn is invalid)} + */ +ER set_flg(ID flgid, FLGPTN setptn) +{ + _KERNEL_T_QUE *pk_que; + _KERNEL_T_FLGINF *pk_flginf; + _KERNEL_T_FLGHDL flghdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TSKHDL tskhdl_next; + _KERNEL_T_TCB *tcb; + BOOL wupflg = FALSE; + + /* %jp{ID のチェック} */ +#ifdef _KERNEL_SPT_SET_FLG_E_ID + if ( !_KERNEL_FLG_CHECK_FLGID(flgid) ) + { + return E_ID; /* %jp{ID不正} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコール開始} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_SET_FLG_E_NOEXS + if ( !_KERNEL_FLG_CHECK_EXS(flgid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + + /* %jp{ハンドル取得} */ + flghdl = _KERNEL_FLG_ID2FLGHDL(flgid); + pk_que = _KERNEL_FLG_GET_QUE(flghdl); + + /* %jp{フラグセット} */ + _KERNEL_FLG_SET_FLGPTN(flghdl, _KERNEL_FLG_GET_FLGPTN(flghdl) | setptn); + + /* %jp{待ちタスクがあれば起床チェック} */ + tskhdl = _KERNEL_REF_QUE(pk_que); + while ( tskhdl != _KERNEL_TSKHDL_NULL ) + { + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + + tskhdl_next = _KERNEL_NXT_QUE(pk_que, tskhdl); /* %jp{次の待ちタスクを取得} */ + + /* %jp{フラグチェック} */ + pk_flginf = (_KERNEL_T_FLGINF *)_KERNEL_TSK_GET_DATA(tcb); + if ( _kernel_chk_flg(flghdl, pk_flginf) ) + { + /* %jp{起床条件を満たしているなら} */ + pk_flginf->waiptn = _KERNEL_FLG_GET_FLGPTN(flghdl); /* %jp{現在のフラグパターンを格納} */ + + /* %jp{待ち解除} */ + _KERNEL_TSK_SET_ERCD(tcb, E_OK); /* %jp{エラーコード設定} */ + _KERNEL_RMV_QUE(pk_que, tskhdl); /* %jp{待ち行列から取り外す} */ + _KERNEL_FLG_RMV_TOQ(tskhdl); + _KERNEL_DSP_WUP_TSK(tskhdl); /* %jp{タスクの待ち解除} */ + + /* %jp{待ち解除発生をマーク} */ + wupflg = TRUE; + +#if _KERNEL_SPT_FLG_TA_CLR + if ( _KERNEL_FLG_GET_FLGATR(flghdl) & TA_CLR ) + { + _KERNEL_FLG_SET_FLGPTN(flghdl, 0); /* %jp{クリア属性があればクリア} */ + break; + } +#endif + } + tskhdl = tskhdl_next; /* 次のタスクに進める */ + } + + /* タスクディスパッチの実行 */ + if ( wupflg ) + { + _KERNEL_DSP_TSK(); + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return E_OK; /* 成功 */ +} + + +#else /* _KERNEL_SPT_SET_FLG */ + + +#if _KERNEL_SPT_SET_FLG_E_NOSPT + +/** %jp{イベントフラグのセット}%en{Set Eventflag} + * @param flgid %jp{セット対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{セットするビットパターン}%en{Bit pattern to set} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER set_flg(ID flgid, FLGPTN setptn) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_SET_FLG */ + + +/* end of file */ diff --git a/kernel/source/object/flg/twai_flg.c b/kernel/source/object/flg/twai_flg.c new file mode 100755 index 0000000..56d5ab6 --- /dev/null +++ b/kernel/source/object/flg/twai_flg.c @@ -0,0 +1,166 @@ +/** + * Hyper Operating System V4 Advance + * + * @file twai_flg.c + * @brief %jp{イベントフラグ待ち(タイムアウトあり)}%en{Wait for Eventflag(with Timeout)} + * + * @version $Id: twai_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_TWAI_FLG + + +/** %jp{イベントフラグ待ち(タイムアウトあり)}%en{Wait for Eventflag(with Timeout)} + * @param flgid %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{待ちビットパターン}%en{Wait bit pattern} + * @param wfmode %jp{待ちモード}%en{Wait mode} + * @param p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_CTX %jp{コンテキストエラー}%en{Context error} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)} + * @retval E_PAR %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)} + * @retval E_ILUSE %jp{サービスコール不正使用(TA_WSGL属性が指定されたイベントフラグで待ちタスクあり}%en{Illegal service call use(there is already a task waiting for an eventflag with tahe TA_WSGL attribute)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)} + */ +ER twai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout) +{ + _KERNEL_T_FLGINF flginf; + _KERNEL_T_FLGHDL flghdl; + _KERNEL_T_TSKHDL tskhdl; + ER ercd; + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_WAI_FLG_E_CTX + if ( _KERNEL_SYS_SNS_DPN() && tmout != TMO_POL ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + /* %jp{ID のチェック} */ +#ifdef _KERNEL_SPT_TWAI_FLG_E_ID + if ( !_KERNEL_FLG_CHECK_FLGID(flgid) ) + { + return E_ID; /* %jp{ID不正} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコール開始} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_TWAI_FLG_E_NOEXS + if ( !_KERNEL_FLG_CHECK_EXS(flgid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + + /* %jp{イベントフラグハンドル取得} */ + flghdl = _KERNEL_FLG_ID2FLGHDL(flgid); + +#if _KERNEL_SPT_TWAI_FLG_E_ILUSE + if ( !(_KERNEL_FLG_GET_FLGATR(flghdl) & TA_WMUL) && _kernel_ref_que(pk_que) != _KERNEL_TSKHDL_NULL && tmout != TMO_POL ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_ILUSE; + } +#endif + + /* %jp{待ち条件設定} */ + flginf.waiptn = waiptn; + flginf.wfmode = wfmode; + + /* %jp{フラグチェック} */ + if ( _kernel_chk_flg(flghdl, &flginf) ) + { + /* %jp{既に条件を満たしているなら} */ + *p_flgptn = _KERNEL_FLG_GET_FLGPTN(flghdl); /* %jp{解除時のフラグパターンを格納} */ + +#if _KERNEL_SPT_FLG_TA_CLR + if ( _KERNEL_FLG_GET_FLGATR(flghdl) & TA_CLR ) + { + _KERNEL_FLG_SET_FLGPTN(flghdl, 0); /* %jp{クリア属性があればクリア} */ + } +#endif + + ercd = E_OK; + } + else + { + if ( tmout != TMO_POL ) + { + /* %jp{タスクを待ち状態にする} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_TSK_SET_TSKSTAT(tskhdl, _KERNEL_TTS_WAI); + _KERNEL_TSK_SET_TSKWAIT(tskhdl, _KERNEL_TTW_SEM); + _KERNEL_TSK_SET_WOBJID(tskhdl, flgid); + _KERNEL_TSK_SET_DATA(tskhdl, (VP_INT)&flginf); + _KERNEL_FLG_ADD_QUE(flghdl, tskhdl); /* %jp{待ち行列に追加} */ + + if ( tmout != TMO_FEVR ) + { + _KERNEL_ADD_TOQ(tskhdl, tmout); /* %jp{タイムアウトキューに追加} */ + } + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tskhdl); + + /* %jp{条件を満たして解除されたのなら} */ + if ( ercd == E_OK ) + { + *p_flgptn = flginf.waiptn; /* %jp{解除時のフラグパターンを格納} */ + } + } + else + { + ercd = E_TMOUT; /* %jp{タイムアウト}%en{Timeout} */ + } + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return ercd; /* 成功 */ +} + + +#else /* _KERNEL_SPT_TWAI_FLG */ + + +#if _KERNEL_SPT_TWAI_FLG_E_NOSPT + +/** %jp{イベントフラグ待ち}%en{Wait for Eventflag} + * @param flgid %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{待ちビットパターン}%en{Wait bit pattern} + * @param wfmode %jp{待ちモード}%en{Wait mode} + * @param p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER twai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout) +{ + return E_NOSPT; +} + +#endif + +#endif /* _KERNEL_SPT_TWAI_FLG */ + + +/* end of file */ diff --git a/kernel/source/object/flg/wai_flg.c b/kernel/source/object/flg/wai_flg.c new file mode 100755 index 0000000..d747c25 --- /dev/null +++ b/kernel/source/object/flg/wai_flg.c @@ -0,0 +1,181 @@ +/** + * Hyper Operating System V4 Advance + * + * @file wai_flg.c + * @brief %jp{イベントフラグ待ち}%en{Wait for Eventflag} + * + * @version $Id: wai_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/flgobj.h" + + + +#if _KERNEL_SPT_WAI_FLG + + +#if _KERNEL_SPT_TWAI_FLG && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{twai_flgありで、サイズ優先なら} */ + +/** %jp{イベントフラグ待ち}%en{Wait for Eventflag} + * @param flgid %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{待ちビットパターン}%en{Wait bit pattern} + * @param wfmode %jp{待ちモード}%en{Wait mode} + * @param p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)} + * @retval E_PAR %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)} + * @retval E_ILUSE %jp{サービスコール不正使用(TA_WSGL属性が指定されたイベントフラグで待ちタスクあり}%en{Illegal service call use(there is already a task waiting for an eventflag with tahe TA_WSGL attribute)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)} + */ +ER wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn) +{ + return twai_flg(flgid, waiptn, wfmode, p_flgptn, TMO_FEVR); +} + +#else + +/** %jp{イベントフラグ待ち}%en{Wait for Eventflag} + * @param flgid %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{待ちビットパターン}%en{Wait bit pattern} + * @param wfmode %jp{待ちモード}%en{Wait mode} + * @param p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)} + * @retval E_CTX %jp{コンテキストエラー}%en{Context error} + * @retval E_NOEXS %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)} + * @retval E_PAR %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)} + * @retval E_ILUSE %jp{サービスコール不正使用(TA_WSGL属性が指定されたイベントフラグで待ちタスクあり}%en{Illegal service call use(there is already a task waiting for an eventflag with tahe TA_WSGL attribute)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)} + */ +ER wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn) +{ + _KERNEL_T_FLGINF flginf; + _KERNEL_T_FLGHDL flghdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + ER ercd; + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_WAI_FLG_E_CTX + if ( _KERNEL_SYS_SNS_DPN() ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + /* %jp{ID のチェック} */ +#ifdef _KERNEL_SPT_WAI_FLG_E_ID + if ( !_KERNEL_FLG_CHECK_FLGID(flgid) ) + { + return E_ID; /* %jp{ID不正} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコール開始} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_WAI_FLG_E_NOEXS + if ( !_KERNEL_FLG_CHECK_EXS(flgid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + + /* %jp{イベントフラグハンドル取得} */ + flghdl = _KERNEL_FLG_ID2FLGHDL(flgid); + +#if _KERNEL_SPT_WAI_FLG_E_ILUSE + if ( !(_KERNEL_FLG_GET_FLGATR(flghdl) & TA_WMUL) && _KERNEL_REF_QUE(_KERNEL_FLG_GET_QUE(flghdl)) != _KERNEL_TSKHDL_NULL ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_ILUSE; + } +#endif + + /* %jp{待ち条件設定} */ + flginf.waiptn = waiptn; + flginf.wfmode = wfmode; + + /* %jp{フラグチェック} */ + if ( _kernel_chk_flg(flghdl, &flginf) ) + { + /* %jp{既に条件を満たしているなら} */ + *p_flgptn = _KERNEL_FLG_GET_FLGPTN(flghdl); /* %jp{解除時のフラグパターンを格納} */ + +#if _KERNEL_SPT_FLG_TA_CLR + if ( _KERNEL_FLG_GET_FLGATR(flghdl) & TA_CLR ) + { + _KERNEL_FLG_SET_FLGPTN(flghdl, 0); /* %jp{クリア属性があればクリア} */ + } +#endif + + ercd = E_OK; + } + else + { + /* %jp{タスクを待ち状態にする} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_WAI); + _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_SEM); + _KERNEL_TSK_SET_WOBJID(tcb, flgid); + _KERNEL_TSK_SET_DATA(tcb, (VP_INT)&flginf); + + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_FLG_ADD_QUE(flghdl, tskhdl); /* %jp{待ち行列に追加} */ + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tcb); + + /* %jp{条件を満たして解除されたのなら} */ + if ( ercd == E_OK ) + { + *p_flgptn = flginf.waiptn; /* %jp{解除時のフラグパターンを格納} */ + } + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return ercd; /* 成功 */ +} + +#endif + + +#else /* _KERNEL_SPT_WAI_FLG */ + + +#if _KERNEL_SPT_WAI_FLG_E_NOSPT + +/** %jp{イベントフラグ待ち}%en{Wait for Eventflag} + * @param flgid %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set} + * @param flgptn %jp{待ちビットパターン}%en{Wait bit pattern} + * @param wfmode %jp{待ちモード}%en{Wait mode} + * @param p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn) +{ + return E_NOSPT; +} + +#endif + +#endif /* _KERNEL_SPT_WAI_FLG */ + + +/* end of file */ diff --git a/kernel/source/object/inh/def_inh.c b/kernel/source/object/inh/def_inh.c new file mode 100755 index 0000000..ca6a258 --- /dev/null +++ b/kernel/source/object/inh/def_inh.c @@ -0,0 +1,27 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sta_inte.c + * @brief %jp{割り込み処理開始} + * + * @version $Id: def_inh.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/inhobj.h" + + +ER def_inh(INHNO inhno, const T_DINH *pk_dinh) +{ + _KERNEL_INH_SET_INTHDR(inhno, pk_dinh->inthdr); + + return E_OK; +} + + +/* end of file */ diff --git a/kernel/source/object/inh/end_inh.c b/kernel/source/object/inh/end_inh.c new file mode 100755 index 0000000..465d1d1 --- /dev/null +++ b/kernel/source/object/inh/end_inh.c @@ -0,0 +1,36 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sta_inte.c + * @brief %jp{割り込み処理開始} + * + * @version $Id: end_inh.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/inhobj.h" + + + +/** %jp{割り込み処理開始} + * @return void + */ +void _kernel_end_inh(void) +{ + _KERNEL_SYS_CLR_CTX(); + + /* %jp{遅延しているディスパッチがあれば実施} */ + if ( _KERNEL_SYS_SNS_DLY() ) + { + _KERNEL_SYS_CLR_DLY(); + _KERNEL_DSP_TSK(); + } +} + + +/* end of file */ diff --git a/kernel/source/object/inh/exe_inh.c b/kernel/source/object/inh/exe_inh.c new file mode 100755 index 0000000..f05e01e --- /dev/null +++ b/kernel/source/object/inh/exe_inh.c @@ -0,0 +1,35 @@ +/** + * Hyper Operating System V4 Advance + * + * @file exe_inh.c + * @brief %jp{割り込みハンドラの処理} + * + * @version $Id: exe_inh.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/inhobj.h" + + + +/* %jp{割り込みハンドラの処理} */ +void _kernel_exe_inh(INHNO inhno) +{ + const _KERNEL_T_INHINF *pk_inhinf; + + pk_inhinf = _KERNEL_INT_GET_INHINF(inhno); + + if ( pk_inhinf->inthdr != NULL ) + { + pk_inhinf->inthdr(inhno); + } +} + + + +/* end of file */ diff --git a/kernel/source/object/inh/sta_inh.c b/kernel/source/object/inh/sta_inh.c new file mode 100755 index 0000000..d0f5533 --- /dev/null +++ b/kernel/source/object/inh/sta_inh.c @@ -0,0 +1,30 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sta_inte.c + * @brief %jp{割り込み処理開始} + * + * @version $Id: sta_inh.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/inhobj.h" + + + +/** %jp{割り込み処理開始} + * @return void + */ +void _kernel_sta_inh(void) +{ + _KERNEL_SYS_SET_CTX(); +} + + + +/* end of file */ diff --git a/kernel/source/object/isr/acre_isr.c b/kernel/source/object/isr/acre_isr.c new file mode 100755 index 0000000..4058ed3 --- /dev/null +++ b/kernel/source/object/isr/acre_isr.c @@ -0,0 +1,59 @@ +/** + * Hyper Operating System V4 Advance + * + * @file acre_sem.c + * @brief %en{Activate Task}%jp{タスクの起動} + * + * @version $Id: acre_isr.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/isrobj.h" + + + +/** %jp{セマフォの生成}%en{Create Semaphore} + * @param pk_ctsk %jp{セマフォ生成情報}%en{} + * @return Error code or task ID + */ +ER_ID acre_isr(const T_CISR *pk_cisr) +{ + ID isrid; + ER_ID erid; + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{空きID探索} */ + for ( isrid = _KERNEL_TMAX_ISR_ISRID; isrid >= _KERNEL_TMIN_ISR_ISRID; isrid-- ) + { + if ( !_KERNEL_ISR_CHECK_EXS(isrid) ) + { + break; + } + } + if ( isrid <= _KERNEL_TMIN_ISR_ISRID ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOID; /* %jp{ID番号不足} */ + } + + /* %jp{セマフォ生成} */ + erid = (ER_ID)_kernel_cre_isr(isrid, pk_cisr); + if ( erid == E_OK ) + { + erid = (ER_ID)isrid; + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return erid; +} + + + +/* end of file */ diff --git a/kernel/source/object/isr/exe_isr.c b/kernel/source/object/isr/exe_isr.c new file mode 100755 index 0000000..d367d50 --- /dev/null +++ b/kernel/source/object/isr/exe_isr.c @@ -0,0 +1,39 @@ +/** + * Hyper Operating System V4 Advance + * + * @file exe_int.c + * @brief %jp{割込みの処理} + * + * @version $Id: exe_isr.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" +#include "object/isrobj.h" + + +#if _KERNEL_SPT_ISR + +/* %jp{割り込みの処理} */ +void _kernel_exe_isr(INTNO intno) +{ + _KERNEL_T_ISRHDL isrhdl; + + isrhdl = _KERNEL_INT_GET_HEAD(intno); + while ( isrhdl != NULL ) + { + _KERNEL_ISR_GET_ISR(isrhdl)(_KERNEL_ISR_GET_EXINF(isrhdl)); + + isrhdl = _KERNEL_ISR_GET_NEXT(isrhdl); + } + + _kernel_dis_int(); +} + +#endif + + +/* end of file */ diff --git a/kernel/source/object/isr/kcre_isr.c b/kernel/source/object/isr/kcre_isr.c new file mode 100755 index 0000000..9b9a62f --- /dev/null +++ b/kernel/source/object/isr/kcre_isr.c @@ -0,0 +1,56 @@ +/** + * Hyper Operating System V4 Advance + * + * @file acre_sem.c + * @brief %en{Activate Task}%jp{タスクの起動} + * + * @version $Id: kcre_isr.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/isrobj.h" + + + +/** %jp{セマフォの生成}%en{Create Semaphore} + * @param pk_ctsk %jp{セマフォ生成情報}%en{} + * @return Error code or task ID + */ +ER _kernel_cre_isr(ID isrid, const T_CISR *pk_cisr) +{ + _KERNEL_T_ISRHDL isrhdl; + + { + VP mem; + + mem = _KERNEL_SYS_ALC_MEM(sizeof(_KERNEL_T_ISRCB)); + if ( mem == NULL ) + { + return E_NOMEM; + } + + _KERNEL_ISR_ID2ISRCB(isrid) = (_KERNEL_T_ISRCB *)mem; + } + + isrhdl = _KERNEL_ISR_ID2ISRHDL(isrid); + + /* %jp{メンバの設定} */ + _KERNEL_ISR_SET_EXINF(isrhdl, pk_cisr->exinf); + _KERNEL_ISR_SET_ISR(isrhdl, pk_cisr->isr); + + /* %jp{割り込みリストの先頭に繋ぐ} */ + _KERNEL_ISR_SET_NEXT(isrhdl, _KERNEL_INT_GET_HEAD(pk_cisr->intno)); + _KERNEL_INT_SET_HEAD(pk_cisr->intno, isrhdl); + + + return E_OK; +} + + + +/* end of file */ diff --git a/kernel/source/object/mbx/acre_mbx.c b/kernel/source/object/mbx/acre_mbx.c new file mode 100755 index 0000000..f3077a1 --- /dev/null +++ b/kernel/source/object/mbx/acre_mbx.c @@ -0,0 +1,99 @@ +/** + * Hyper Operating System V4 Advance + * + * @file acre_mbx.c + * @brief %jp{メールボックスの生成(ID番号自動割付)}%en{Create Mailbox(ID Number Automatic Assignment)} + * + * @version $Id: acre_mbx.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mbxobj.h" + + + +#if _KERNEL_SPT_ACRE_MBX + + +/** %jp{メールボックスの生成(ID番号自動割付)}%en{Create Mailbox(ID Number Automatic Assignment)} + * @param pk_cmbx %jp{メールボックス生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mailbox creation information} + * @retval %jp{正の値}%en{positiv-value} %jp{生成したメールボックスのID番号}%en{ID number of the created mailbox} + * @retval E_NOID %jp{ID番号不足(割付可能なメールボックスIDが無い)}%en{No ID number available(there id no mailbox ID assignable)} + * @retval E_RSATR %jp{予約属性(mbxatrが不正あるいは使用できない)}%en{Reserved attribute(mbxatr is invalid or unusable)} + */ +ER_ID acre_mbx(const T_CMBX *pk_cmbx) +{ + ID mbxid; + ER_ID erid; + + /* %jp{属性チェック}%en{check attribute} */ +#if _KERNEL_SPT_ACRE_MBX_E_RSATR + if ( ((pk_cmbx->mbxatr & TA_TPRI) == 0 && !_KERNEL_SPT_MBX_TA_TFIFO) + || ((pk_cmbx->mbxatr & TA_TPRI) != 0 && !_KERNEL_SPT_MBX_TA_TPRI) + || ((pk_cmbx->mbxatr & TA_MPRI) == 0 && !_KERNEL_SPT_MBX_TA_MFIFO) + || ((pk_cmbx->mbxatr & TA_MPRI) != 0 && !_KERNEL_SPT_MBX_TA_MPRI) ) + { + return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{空きID探索} */ + for ( mbxid = _KERNEL_TMAX_MBX_ID; mbxid >= _KERNEL_TMIN_MBX_ID; mbxid-- ) + { + if ( !_KERNEL_MBX_CHECK_EXS(mbxid) ) + { + break; + } + } + + /* %jp{空きID探索チェック} */ +#if _KERNEL_SPT_ACRE_SEM_E_NOID + if ( mbxid <= _KERNEL_TMIN_MBX_ID ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOID; /* %jp{ID番号不足}%en{No ID number available} */ + } +#endif + + /* %jp{メールボックス生成} */ + erid = (ER_ID)_kernel_cre_mbx(mbxid, pk_cmbx); + if ( erid == E_OK ) + { + erid = (ER_ID)mbxid; + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return erid; +} + + +#else /* _KERNEL_SPT_ACRE_MBX */ + + +#if _KERNEL_SPT_ACRE_MBX_E_NOSPT + +/** %jp{メールボックスの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)} + * @param pk_cmbx %jp{メールボックス生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER_ID acre_mbx(const T_CMBX *pk_cmbx) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_ACRE_MBX */ + + + +/* end of file */ diff --git a/kernel/source/object/mbx/kadd_msg.c b/kernel/source/object/mbx/kadd_msg.c new file mode 100755 index 0000000..fa54c04 --- /dev/null +++ b/kernel/source/object/mbx/kadd_msg.c @@ -0,0 +1,91 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sig_mbx.c + * @brief %jp{メールボックス資源の返却}%en{Release Semaphore Resource} + * + * @version $Id: kadd_msg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mbxobj.h" + + +static void _kernel_add_mque(T_MSG **ppk_msgque, T_MSG *pk_msg); /**< %jp{メッセージキューへのメッセージ追加} */ +static void _kernel_adp_mque(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg); /**< %jp{優先度キューに追加} */ +static void _kernel_adf_mque(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg); /**< %jp{FIFOキューに追加} */ + + + +void _kernel_add_msg(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg) +{ + /* %jp{メールボックに追加} */ + if ( _KERNEL_MBX_GET_MBXATR(mbxhdl) & TA_MPRI ) + { + _kernel_adp_mque(mbxhdl, pk_msg); + } + else + { + _kernel_adf_mque(mbxhdl, pk_msg); + } +} + + +/** %jp{FIFOキューに追加} */ +void _kernel_adf_mque(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg) +{ + T_MSG **ppk_msgque; + + /* %jp{メッセージキューを取得} */ + ppk_msgque = (T_MSG **)_KERNEL_MBX_GET_MSGQUE(mbxhdl); + _kernel_add_mque(ppk_msgque, pk_msg); +} + + + +/** %jp{優先度キューに追加} */ +void _kernel_adp_mque(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg) +{ + _KERNEL_MBX_T_MPRI mpri; +/* T_MSG *(*pppk_msgque)[]; */ + T_MSG ***pppk_msgque; + + /* %jp{メッセージキューの配列として取得} */ +/* pppk_msgque = (T_MSG *(*)[])_KERNEL_MBX_GET_MSGQUE(mbxhdl); */ + pppk_msgque = (T_MSG ***)_KERNEL_MBX_GET_MSGQUE(mbxhdl); + + /* %jp{メッセージ優先度取得} */ + mpri = ((T_MSG_PRI *)pk_msg)->msgpri; + + /* %jp{メッセージ追加} */ + _kernel_add_mque(&(*pppk_msgque)[mpri - TMIN_MPRI], pk_msg); +} + + + +/** %jp{メッセージキューへのメッセージ追加} */ +void _kernel_add_mque(T_MSG **ppk_msgque, T_MSG *pk_msg) +{ + T_MSG *msg_tail; + + msg_tail = *ppk_msgque; + if ( msg_tail == NULL ) + { + pk_msg->pk_next = pk_msg; + } + else + { + pk_msg->pk_next = msg_tail->pk_next; + msg_tail->pk_next = pk_msg; + } + + *ppk_msgque = pk_msg; +} + + +/* end of file */ diff --git a/kernel/source/object/mbx/kcre_mbx.c b/kernel/source/object/mbx/kcre_mbx.c new file mode 100755 index 0000000..90376ae --- /dev/null +++ b/kernel/source/object/mbx/kcre_mbx.c @@ -0,0 +1,101 @@ +/** + * Hyper Operating System V4 Advance + * + * @file kcre_mbx.c + * @brief %jp{メールボックスの生成}%en{Create Eventflag} + * + * @version $Id: kcre_mbx.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mbxobj.h" + + + +/* %jp{メモリ不足エラーチェックサポートの判定} */ +#if (_KERNEL_SPT_CRE_MBX && _KERNEL_SPT_CRE_MBX_E_NOMEM) || (_KERNEL_SPT_AMBX_SEM && _KERNEL_SPT_ACRE_MBX_E_NOMEM) +#define _KERNEL_SPT_KCRE_MBX_E_NOMEM TRUE +#else +#define _KERNEL_SPT_KCRE_MBX_E_NOMEM FALSE +#endif + + + +/** %jp{メールボックスの生成}%en{Create Eventflag} + * @param mbxid %jp{生成対象のメールボックスのID番号}%en{ID number of the eventflag to be created} + * @param pk_cmbx %jp{メールボックス生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_NOMEM %jp{メモリ不足}%en{Insufficient memory} + */ +ER _kernel_cre_mbx(ID mbxid, const T_CMBX *pk_cmbx) +{ + _KERNEL_T_MBXHDL mbxhdl; + + /* %jp{メモリ確保}%en{get memory} */ +#if _KERNEL_MBXCB_ALGORITHM == _KERNEL_MBXCB_ALG_PTRARRAY +#if _KERNEL_MBXCB_ROM + { + /* %jp{TCB領域がポインタ管理で、ROM/RAM分離の場合} */ + VP mem; + SIZE memsz; + + /* %jp{メモリサイズ決定} */ + memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MBXCB)) + + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MBXCB_ROM)); + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(memsz); + +#if _KERNEL_SPT_KCRE_MBX_E_NOMEM + if ( mem == NULL ) + { + return E_NOMEM; + } +#endif + + /* %jp{メモリ割り当て} */ + _KERNEL_TSK_ID2MBXCB(mbxid) = (_KERNEL_T_MBXCB *)mem; + _KERNEL_TSK_ID2MBXCB(mbxid)->mbxcbrom = (_KERNEL_T_MBXCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MBXCB))); + } +#else + { + VP mem; + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(sizeof(_KERNEL_T_MBXCB)); + +#if _KERNEL_SPT_KCRE_MBX_E_NOMEM + if ( mem == NULL ) + { + return E_NOMEM; + } +#endif + + /* %jp{メモリ割り当て} */ + _KERNEL_SEM_ID2MBXCB(mbxid) = (_KERNEL_T_MBXCB *)mem; + } +#endif +#endif + + /* %jp{オブジェクト生成} */ + mbxhdl = _KERNEL_MBX_ID2MBXHDL(mbxid); + _KERNEL_MBX_SET_MBXATR(mbxhdl, pk_cmbx->mbxatr | _KERNEL_MBX_TA_CRE); + _KERNEL_CRE_QUE(_KERNEL_MBX_GET_QUE(mbxhdl)); + if ( pk_cmbx->mbxatr & TA_MPRI) + { + } + else + { + _KERNEL_MBX_SET_MSGQUE(mbxhdl, NULL); + } + + return E_OK; +} + + +/* end of file */ diff --git a/kernel/source/object/mbx/krmv_msg.c b/kernel/source/object/mbx/krmv_msg.c new file mode 100755 index 0000000..0a85dd4 --- /dev/null +++ b/kernel/source/object/mbx/krmv_msg.c @@ -0,0 +1,98 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sig_mbx.c + * @brief %jp{メールボックス資源の返却}%en{Release Semaphore Resource} + * + * @version $Id: krmv_msg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mbxobj.h" + + +static T_MSG *_kernel_rmp_mque(_KERNEL_T_MBXHDL mbxhdl); +static T_MSG *_kernel_rmf_mque(_KERNEL_T_MBXHDL mbxhdl); +static T_MSG *_kernel_rmv_mque(T_MSG **ppk_msgque); + + + +T_MSG *_kernel_rmv_msg(_KERNEL_T_MBXHDL mbxhdl) +{ + /* %jp{メールボックから取り出し} */ + if ( _KERNEL_MBX_GET_MBXATR(mbxhdl) & TA_MPRI ) + { + return _kernel_rmp_mque(mbxhdl); + } + else + { + return _kernel_rmf_mque(mbxhdl); + } +} + + +T_MSG *_kernel_rmf_mque(_KERNEL_T_MBXHDL mbxhdl) +{ + T_MSG **ppk_msgque; + + /* %jp{メッセージキューを取得} */ + ppk_msgque = (T_MSG **)_KERNEL_MBX_GET_MSGQUE(mbxhdl); + + if ( *ppk_msgque != NULL ) + { + return _kernel_rmv_mque(ppk_msgque); + } + + return NULL; +} + + +T_MSG *_kernel_rmp_mque(_KERNEL_T_MBXHDL mbxhdl) +{ +#if 0 + _KERNEL_MBX_T_MPRI mpri; + T_MSG *(*pppk_msgque)[]; + + /* %jp{メッセージキューの配列として取得} */ + pppk_msgque = (T_MSG *(*)[])_KERNEL_MBX_GET_MSGQUE(mbxhdl); + + for ( mpri = TMIN_MPRI; mpri < _KERNEL_MBX_GET_MAXMPRI(mbxhdl); mpri++ ) + { + if ( (*pppk_msgque)[mpri] != NULL ) + { + return _kernel_rmv_mque(&(*pppk_msgque)[mpri]); + } + } +#endif + + return NULL; +} + + +/** %jp{メッセージキューからメッセージ取り出し} */ +T_MSG *_kernel_rmv_mque(T_MSG **ppk_msgque) +{ + T_MSG *msg_tail; + T_MSG *msg_head; + + msg_tail = *ppk_msgque; + msg_head = msg_tail->pk_next; + + if ( msg_head == msg_tail ) + { + *ppk_msgque = NULL; + } + else + { + msg_tail->pk_next = msg_head->pk_next; + } + + return msg_head; +} + +/* end of file */ diff --git a/kernel/source/object/mbx/rcv_mbx.c b/kernel/source/object/mbx/rcv_mbx.c new file mode 100755 index 0000000..7417619 --- /dev/null +++ b/kernel/source/object/mbx/rcv_mbx.c @@ -0,0 +1,106 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sig_mbx.c + * @brief %jp{メールボックス資源の返却}%en{Release Semaphore Resource} + * + * @version $Id: rcv_mbx.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mbxobj.h" + + + +#if _KERNEL_SPT_RCV_MBX + + +/**< %jp{メールボックスへの送信} */ +ER rcv_mbx(ID mbxid, T_MSG **ppk_msg) +{ + _KERNEL_T_MBXHDL mbxhdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + T_MSG *pk_msg; + ER ercd; + + /* %jp{ID のチェック} */ +#ifdef _KERNEL_SPT_SIG_MBX_E_ID + if ( !_KERNEL_MBX_CHECK_MBXID(mbxid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_SIG_MBX_E_NOEXS + if ( !_KERNEL_MBX_CHECK_EXS(mbxid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + + /* %jp{メールボックスハンドル取得} */ + mbxhdl = _KERNEL_MBX_ID2MBXHDL(mbxid); + + /* %jp{メッセージキューから取り出し} */ + pk_msg = _kernel_rmv_msg(mbxhdl); + + if ( pk_msg != NULL ) + { + *ppk_msg = pk_msg; + ercd = E_OK; + } + else + { + /* %jp{タスクを待ち状態にする} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + + _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_SEM); + _KERNEL_TSK_SET_WOBJID(tcb, mbxid); + _KERNEL_TSK_SET_DATA(tcb, (VP_INT)ppk_msg); + + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_MBX_ADD_QUE(mbxhdl, tskhdl); /* %jp{待ち行列に追加} */ + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tcb); + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return E_OK; /* %jp{正常終了}%en{Normal completion} */ +} + + +#else /* _KERNEL_SPT_RCV_MBX */ + + +#if _KERNEL_SPT_RCV_MBX_E_NOSPT + + +ER snd_mbx(ID mbxid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_RCV_MBX */ + + + +/* end of file */ diff --git a/kernel/source/object/mbx/snd_mbx.c b/kernel/source/object/mbx/snd_mbx.c new file mode 100755 index 0000000..63abdc5 --- /dev/null +++ b/kernel/source/object/mbx/snd_mbx.c @@ -0,0 +1,99 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sig_mbx.c + * @brief %jp{メールボックス資源の返却}%en{Release Semaphore Resource} + * + * @version $Id: snd_mbx.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mbxobj.h" + + + +#if _KERNEL_SPT_SND_MBX + + +/**< %jp{メールボックスへの送信} */ +ER snd_mbx(ID mbxid, T_MSG *pk_msg) +{ + _KERNEL_T_MBXHDL mbxhdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + + /* %jp{ID のチェック} */ +#ifdef _KERNEL_SPT_SND_MBX_E_ID + if ( !_KERNEL_MBX_CHECK_MBXID(mbxid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_SND_MBX_E_NOEXS + if ( !_KERNEL_MBX_CHECK_EXS(mbxid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + + /* %jp{メールボックスハンドル取得} */ + mbxhdl = _KERNEL_MBX_ID2MBXHDL(mbxid); + + /* %jp{待ち行列先頭からタスク取り出し} */ + tskhdl = _kernel_rmh_que(_KERNEL_MBX_GET_QUE(mbxhdl)); + if ( tskhdl != _KERNEL_TSKHDL_NULL ) + { + T_MSG **ppk_msg; + + /* %jp{待ちタスクがあれば待ち解除} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + ppk_msg = (T_MSG **)_KERNEL_TSK_GET_DATA(tcb); + *ppk_msg = pk_msg; + _KERNEL_TSK_SET_ERCD(tcb, E_OK); /* %jp{エラーコード設定} */ + _KERNEL_DSP_WUP_TSK(tskhdl); /* %jp{タスクの待ち解除} */ + _KERNEL_MBX_RMV_TOQ(tskhdl); /* %jp{タイムアウトの解除} */ + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + } + else + { + /* %jp{メールボックに追加} */ + _kernel_add_msg(mbxhdl, pk_msg); + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return E_OK; /* %jp{正常終了}%en{Normal completion} */ +} + + +#else /* _KERNEL_SPT_SND_MBX */ + + +#if _KERNEL_SPT_SND_MBX_E_NOSPT + + +ER snd_mbx(ID mbxid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_SND_MBX */ + + + +/* end of file */ diff --git a/kernel/source/object/mpf/acre_mpf.c b/kernel/source/object/mpf/acre_mpf.c new file mode 100755 index 0000000..c1e3eb8 --- /dev/null +++ b/kernel/source/object/mpf/acre_mpf.c @@ -0,0 +1,102 @@ +/** + * Hyper Operating System V4 Advance + * + * @file acre_mpf.c + * @brief %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} + * + * @version $Id: acre_mpf.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mpfobj.h" + + + +#if _KERNEL_SPT_ACRE_MPF + +/** %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} + * @param pk_cmpf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mpfaphore creation information} + * @retval %jp{正の値}%en{positiv-value} %jp{生成した固定長メモリプールのID番号}%en{ID number of the created mpfaphore} + * @retval E_NOID %jp{ID番号不足(割付可能な固定長メモリプールIDが無い)}%en{No ID number available(there id no mpfaphore ID assignable)} + * @retval E_RSATR %jp{予約属性(mpfatrが不正あるいは使用できない)}%en{Reserved attribute(mpfatr is invalid or unusable)} + */ +ER_ID acre_mpf(const T_CMPF *pk_cmpf) +{ + ID mpfid; + ER_ID erid; + + /* %jp{属性チェック}%en{check attribute} */ +#if _KERNEL_SPT_ACRE_MPF_E_RSATR + if ( ((pk_cmpf->mpfatr & TA_TPRI) == 0 && !_KERNEL_SPT_MPF_TA_TFIFO) + || ((pk_cmpf->mpfatr & TA_TPRI) != 0 && !_KERNEL_SPT_MPF_TA_TPRI) ) + { + return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{空きID探索} */ + for ( mpfid = _KERNEL_MPF_TMAX_ID; mpfid >= _KERNEL_MPF_TMIN_ID; mpfid-- ) + { + if ( !_KERNEL_MPF_CHECK_EXS(mpfid) ) + { + break; + } + } + + /* %jp{空きID探索チェック} */ +#if _KERNEL_SPT_ACRE_MPF_E_NOID + if ( mpfid < _KERNEL_MPF_TMIN_ID ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOID; /* %jp{ID番号不足} */ + } +#endif + + /* %jp{オブジェクト生成} */ +#if (_KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_PTRARRAY) && _KERNEL_SPT_ACRE_MPF_E_NOMEM + erid = (ER_ID)_kernel_cre_mpf(mpfid, pk_cmpf); + if ( erid == E_OK ) + { + erid = (ER_ID)mpfid; /* %jp{エラーでなければ固定長メモリプールIDを格納} */ + } +#else + _kernel_cre_mpf(mpfid, pk_cmpf); + erid = (ER_ID)mpfid; /* %jp{固定長メモリプールIDを格納} */ +#endif + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return erid; +} + + +#else /* _KERNEL_SPT_ACRE_MPF */ + + +#if _KERNEL_SPT_ACRE_MPF_E_NOSPT + + +/** %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} + * @param pk_cmpf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mpfaphore creation information} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER_ID acre_mpf(const T_CMPF *pk_cmpf) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_ACRE_MPF */ + + + +/* end of file */ diff --git a/kernel/source/object/mpf/get_mpf.c b/kernel/source/object/mpf/get_mpf.c new file mode 100755 index 0000000..a0297ab --- /dev/null +++ b/kernel/source/object/mpf/get_mpf.c @@ -0,0 +1,132 @@ +/** + * Hyper Operating System V4 Advance + * + * @file get_mpf.c + * @brief %jp{固定長メモリプール資源の獲得}%en{Acquire Semaphore Resource} + * + * @version $Id: get_mpf.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mpfobj.h" + + + +#if _KERNEL_SPT_GET_MPF + + +#if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{tget_mpfありで、サイズ優先なら} */ + + +ER get_mpf(ID mpfid, VP *p_blk) +{ + /* %jp{tget_mpfで代替する} */ + return tget_mpf(mpfid, p_blk, TMO_FEVR); +} + +#else + + +ER get_mpf(ID mpfid, VP *p_blk) +{ + _KERNEL_T_MPFHDL mpfhdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + _KERNEL_MPF_T_BLKHDL blkhdl; + VP blkptr; + ER ercd; + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_GET_MPF_E_CTX + if ( _KERNEL_SYS_SNS_DPN() ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_GET_MPF_E_ID + if ( !_KERNEL_MPF_CHECK_MPFID(mpfid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_GET_MPF_E_NOEXS + if ( !_KERNEL_MPF_CHECK_EXS(mpfid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{固定長メモリプールハンドル取得} */ + mpfhdl = _KERNEL_MPF_ID2MPFHDL(mpfid); + + /* %jp{固定長メモリプールカウンタ取得} */ + blkhdl = _KERNEL_MPF_GET_FREBLK(mpfhdl); + + if ( blkhdl != _KERNEL_MPF_BLKHDL_NULL ) + { + /* %jp{固定長メモリプール資源が獲得できれば成功} */ + blkptr = _KERNEL_MPF_BLKHDL2PTR(mpfhdl, blkhdl); + *p_blk = blkptr; + _KERNEL_MPF_SET_FREBLK(mpfhdl, *(_KERNEL_MPF_T_BLKHDL *)blkptr); + _KERNEL_MPF_SET_FBLKCNT(mpfhdl, _KERNEL_MPF_GET_FBLKCNT(mpfhdl) - 1); + ercd = E_OK; + } + else + { + /* %jp{タスクを待ち状態にする} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_MPF); + _KERNEL_TSK_SET_WOBJID(tcb, mpfid); + _KERNEL_TSK_SET_DATA(tcb, (VP_INT)p_blk); + + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_MPF_ADD_QUE(mpfhdl, tskhdl); /* %jp{待ち行列に追加} */ + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tcb); + } + + _KERNEL_LEAVE_SVC(); /* %jp{オブジェクト未生成}%en{Non-existant object} */ + + return ercd; +} + +#endif + + +#else /* _KERNEL_SPT_GET_MPF */ + + +#if _KERNEL_SPT_GET_MPF_E_NOSPT + + +ER get_mpf(ID mpfid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_GET_MPF */ + + + +/* end of file */ diff --git a/kernel/source/object/mpf/kcre_mpf.c b/kernel/source/object/mpf/kcre_mpf.c new file mode 100755 index 0000000..a57ab5b --- /dev/null +++ b/kernel/source/object/mpf/kcre_mpf.c @@ -0,0 +1,189 @@ +/** + * Hyper Operating System V4 Advance + * + * @file acre_mpf.c + * @brief %jp{固定長メモリプールの生成}%en{} + * + * @version $Id: kcre_mpf.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mpfobj.h" + + +/* %jp{メモリ不足エラーチェックサポートの判定} */ +#if (_KERNEL_SPT_CRE_MPF && _KERNEL_SPT_CRE_MPF_E_NOMEM) || (_KERNEL_SPT_ACRE_MPF && _KERNEL_SPT_ACRE_MPF_E_NOMEM) +#define _KERNEL_SPT_KCRE_MPF_E_NOMEM TRUE +#else +#define _KERNEL_SPT_KCRE_MPF_E_NOMEM FALSE +#endif + + +void _kernel_set_mpf(_KERNEL_T_MPFHDL mpfhdl); + + +/** %jp{固定長メモリプールの生成}%en{Create mpfaphore} + * @param mpfid %jp{生成対象の固定長メモリプールのID番号}%en{ID number of the mpfaphore to be created} + * @param pk_ctsk %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mpfaphore creation information} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_NOMEM %jp{メモリ不足}%en{Insufficient memory} + */ +ER _kernel_cre_mpf(ID mpfid, const T_CMPF *pk_cmpf) +{ + _KERNEL_T_MPFHDL mpfhdl; + VP mpf; + + /* %jp{メモリ確保}%en{get memory} */ +#if _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_BLKARRAY + { /* %jp{MPFCB領域がブロック管理の場合} */ + + /* メモリ確保 */ + if ( pk_cmpf->mpf == NULL ) + { + mpf = _KERNEL_SYS_ALC_MEM(TSZ_MPF(pk_cmpf->blkcnt, pk_cmpf->blksz)); + /* %jp{メモリ不足チェック} */ +#if _KERNEL_SPT_KCRE_MPF_E_NOMEM + if ( mpf == NULL ) + { + return E_NOMEM; + } +#endif + } + else + { + mpf = pk_cmpf->mpf; + } + } +#elif _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_PTRARRAY +#if _KERNEL_MPFCB_ROM + { /* %jp{MPFCB領域がポインタ管理で、ROM/RAM分離の場合} */ + VP mem; + SIZE memsz; + + /* %jp{メモリサイズ決定} */ + memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB)) + + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB_ROM)); + if ( pk_cmpf->mpf == NULL ) + { + memsz += TSZ_MPF(pk_cmpf->blkcnt, pk_cmpf->blksz); + } + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(memsz); + + /* %jp{メモリ不足チェック} */ +#if _KERNEL_SPT_KCRE_MPF_E_NOMEM + if ( mem == NULL ) + { + return E_NOMEM; + } +#endif + + /* %jp{メモリ割り当て} */ + _KERNEL_TSK_ID2MPFCB(mpfid) = (_KERNEL_T_MPFCB *)mem; + _KERNEL_TSK_ID2MPFCB(mpfid)->mpfcbrom = (_KERNEL_T_MPFCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB))); + if ( pk_cmpf->mpf == NULL ) + { + mpf = (_KERNEL_T_MPFCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB)) + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB_ROM))); + } + else + { + mpf = pk_cmpf->mpf; + } + } +#else + { /* %jp{MPFCB領域がポインタ管理で、ROM/RAM統合の場合} */ + VP mem; + SIZE memsz; + + /* %jp{メモリサイズ決定} */ + memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB)); + if ( pk_cmpf->mpf == NULL ) + { + memsz += TSZ_MPF(pk_cmpf->blkcnt, pk_cmpf->blksz) + } + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(memsz); + + /* %jp{メモリ不足チェック} */ +#if _KERNEL_SPT_KCRE_MPF_E_NOMEM + if ( mem == NULL ) + { + return E_NOMEM; + } +#endif + + /* %jp{メモリ割り当て} */ + _KERNEL_MPF_ID2MPFCB(mpfid) = (_KERNEL_T_MPFCB *)mem; + if ( pk_cmpf->mpf == NULL ) + { + mpf = (_KERNEL_T_MPFCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB))); + } + else + { + mpf = pk_cmpf->mpf; + } + } +#endif +#endif + + /* %jp{固定長メモリプール生成} */ + mpfhdl = _KERNEL_MPF_ID2MPFHDL(mpfid); + + /* %jp{メンバ初期化} */ + _KERNEL_MPF_SET_MPFATR(mpfhdl, pk_cmpf->mpfatr); + _KERNEL_MPF_SET_BLKCNT(mpfhdl, pk_cmpf->blkcnt); + _KERNEL_MPF_SET_BLKSZ(mpfhdl, _KERNEL_TSZ_ALIGNED(pk_cmpf->blksz)); + _KERNEL_MPF_SET_MPF(mpfhdl, mpf); + _KERNEL_CRE_QUE(_KERNEL_MPF_GET_QUE(mpfhdl)); + + _kernel_set_mpf(mpfhdl); + + return E_OK; +} + + +void _kernel_set_mpf(_KERNEL_T_MPFHDL mpfhdl) +{ + UINT i; + +#if _KERNEL_MPF_ALGORITHM == _KERNEL_MPF_ALG_CHAIN_PTR /* %jp{ポインタ管理} */ + { + VB *ptr, *next; + + ptr = (VB *)_KERNEL_MPF_GET_MPF(mpfhdl); + _KERNEL_MPF_SET_FREBLK(mpfhdl, ptr); + for ( i = 0; i < _KERNEL_MPF_GET_BLKCNT(mpfhdl) - 1; i++ ) + { + next = ptr + _KERNEL_MPF_GET_BLKSZ(mpfhdl); + *(_KERNEL_MPFCB_T_BLKHDL *)ptr = next; + ptr = next; + } + *(_KERNEL_MPFCB_T_BLKHDL *)ptr = NULL; + } +#elif _KERNEL_MPF_ALGORITHM == _KERNEL_MPF_ALG_CHAIN_NUM /* %jp{ブロック番号管理} */ + { + VB *ptr; + + ptr = (VB *)_KERNEL_MPF_GET_MPF(mpfhdl); + _KERNEL_MPF_SET_FREBLK(mpfhdl, 1); + for ( i = 1; i < _KERNEL_MPF_GET_BLKCNT(mpfhdl) - 1; i++ ) + { + *(_KERNEL_MPFCB_T_BLKHDL *)ptr = (i + 1); + ptr += _KERNEL_MPF_GET_BLKSZ(mpfhdl); + } + *(_KERNEL_MPFCB_T_BLKHDL *)ptr = 0; + } +#endif +} + + + + +/* end of file */ diff --git a/kernel/source/object/mpf/pget_mpf.c b/kernel/source/object/mpf/pget_mpf.c new file mode 100755 index 0000000..237aedf --- /dev/null +++ b/kernel/source/object/mpf/pget_mpf.c @@ -0,0 +1,108 @@ +/** + * Hyper Operating System V4 Advance + * + * @file get_mpf.c + * @brief %jp{固定長メモリプール資源の獲得}%en{Acquire Semaphore Resource} + * + * @version $Id: pget_mpf.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mpfobj.h" + + + +#if _KERNEL_SPT_PGET_MPF + + +#if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{tget_mpfありで、サイズ優先なら} */ + + +ER pget_mpf(ID mpfid, VP *p_blk) +{ + /* %jp{tget_mpfで代替する} */ + return tget_mpf(mpfid, p_blk, TMO_POL); +} + +#else + + +ER pget_mpf(ID mpfid, VP *p_blk) +{ + _KERNEL_T_MPFHDL mpfhdl; + _KERNEL_MPF_T_BLKHDL blkhdl; + VP blkptr; + ER ercd; + + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_PGET_MPF_E_ID + if ( !_KERNEL_MPF_CHECK_MPFID(mpfid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_PGET_MPF_E_NOEXS + if ( !_KERNEL_MPF_CHECK_EXS(mpfid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{固定長メモリプールハンドル取得} */ + mpfhdl = _KERNEL_MPF_ID2MPFHDL(mpfid); + + /* %jp{固定長メモリプールカウンタ取得} */ + blkhdl = _KERNEL_MPF_GET_FREBLK(mpfhdl); + + if ( blkhdl != _KERNEL_MPF_BLKHDL_NULL ) + { + /* %jp{固定長メモリプール資源が獲得できれば成功} */ + blkptr = _KERNEL_MPF_BLKHDL2PTR(mpfhdl, blkhdl); + *p_blk = blkptr; + _KERNEL_MPF_SET_FREBLK(mpfhdl, *(_KERNEL_MPF_T_BLKHDL *)blkptr); + _KERNEL_MPF_SET_FBLKCNT(mpfhdl, _KERNEL_MPF_GET_FBLKCNT(mpfhdl) - 1); + ercd = E_OK; + } + else + { + ercd = E_TMOUT; + } + + _KERNEL_LEAVE_SVC(); /* %jp{オブジェクト未生成}%en{Non-existant object} */ + + return ercd; +} + +#endif + + +#else /* _KERNEL_SPT_GET_MPF */ + + +#if _KERNEL_SPT_GET_MPF_E_NOSPT + + +ER pget_mpf(ID mpfid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_GET_MPF */ + + + +/* end of file */ diff --git a/kernel/source/object/mpf/rel_mpf.c b/kernel/source/object/mpf/rel_mpf.c new file mode 100755 index 0000000..63ff23b --- /dev/null +++ b/kernel/source/object/mpf/rel_mpf.c @@ -0,0 +1,122 @@ +/** + * Hyper Operating System V4 Advance + * + * @file get_mpf.c + * @brief %jp{固定長メモリプール資源の獲得}%en{Acquire Semaphore Resource} + * + * @version $Id: rel_mpf.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mpfobj.h" + + + +#if _KERNEL_SPT_GET_MPF + + +#if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{tget_mpfありで、サイズ優先なら} */ + + +ER get_mpf(ID mpfid, VP *p_blk) +{ + /* %jp{tget_mpfで代替する} */ + return tget_mpf(mpfid, p_blk, TMO_FEVR); +} + +#else + + +ER rel_mpf(ID mpfid, VP blk) +{ + _KERNEL_T_MPFHDL mpfhdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_GET_MPF_E_CTX + if ( _KERNEL_SYS_SNS_DPN() ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_GET_MPF_E_ID + if ( !_KERNEL_MPF_CHECK_MPFID(mpfid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_GET_MPF_E_NOEXS + if ( !_KERNEL_MPF_CHECK_EXS(mpfid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{固定長メモリプールハンドル取得} */ + mpfhdl = _KERNEL_MPF_ID2MPFHDL(mpfid); + + /* %jp{待ち行列先頭からタスク取り出し} */ + tskhdl = _KERNEL_MPF_RMH_QUE(_KERNEL_MPF_GET_QUE(mpfhdl)); + if ( tskhdl != _KERNEL_TSKHDL_NULL ) + { + VP *p_blk; + + /* %jp{待ちタスクがあれば待ち解除} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + p_blk = (VP *)_KERNEL_TSK_GET_DATA(tcb); + *p_blk = blk; + _KERNEL_TSK_SET_ERCD(tcb, E_OK); /* %jp{エラーコード設定} */ + _KERNEL_DSP_WUP_TSK(tskhdl); /* %jp{タスクの待ち解除} */ + _KERNEL_MPF_RMV_TOQ(tskhdl); + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + } + else + { + /* %jp{プールに返却} */ + *(_KERNEL_MPF_T_BLKHDL *)blk = _KERNEL_MPF_GET_FREBLK(mpfhdl); + _KERNEL_MPF_SET_FREBLK(mpfhdl, _KERNEL_MPF_PTR2BLKHDL(mpfhdl, blk)); + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return E_OK; +} + +#endif + + +#else /* _KERNEL_SPT_GET_MPF */ + + +#if _KERNEL_SPT_GET_MPF_E_NOSPT + + +ER get_mpf(ID mpfid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_GET_MPF */ + + + +/* end of file */ diff --git a/kernel/source/object/sem/acre_sem.c b/kernel/source/object/sem/acre_sem.c new file mode 100755 index 0000000..23c7690 --- /dev/null +++ b/kernel/source/object/sem/acre_sem.c @@ -0,0 +1,102 @@ +/** + * Hyper Operating System V4 Advance + * + * @file acre_sem.c + * @brief %jp{セマフォの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} + * + * @version $Id: acre_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/semobj.h" + + + +#if _KERNEL_SPT_ACRE_SEM + +/** %jp{セマフォの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} + * @param pk_csem %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information} + * @retval %jp{正の値}%en{positiv-value} %jp{生成したセマフォのID番号}%en{ID number of the created semaphore} + * @retval E_NOID %jp{ID番号不足(割付可能なセマフォIDが無い)}%en{No ID number available(there id no semaphore ID assignable)} + * @retval E_RSATR %jp{予約属性(sematrが不正あるいは使用できない)}%en{Reserved attribute(sematr is invalid or unusable)} + */ +ER_ID acre_sem(const T_CSEM *pk_csem) +{ + ID semid; + ER_ID erid; + + /* %jp{属性チェック}%en{check attribute} */ +#if _KERNEL_SPT_ACRE_SEM_E_RSATR + if ( ((pk_csem->sematr & TA_TPRI) == 0 && !_KERNEL_SPT_SEM_TA_TFIFO) + || ((pk_csem->sematr & TA_TPRI) != 0 && !_KERNEL_SPT_SEM_TA_TPRI) ) + { + return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{空きID探索} */ + for ( semid = _KERNEL_SEM_TMAX_ID; semid >= _KERNEL_SEM_TMIN_ID; semid-- ) + { + if ( !_KERNEL_SEM_CHECK_EXS(semid) ) + { + break; + } + } + + /* %jp{空きID探索チェック} */ +#if _KERNEL_SPT_ACRE_SEM_E_NOID + if ( semid < _KERNEL_SEM_TMIN_ID ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOID; /* %jp{ID番号不足} */ + } +#endif + + /* %jp{オブジェクト生成} */ +#if (_KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY) && _KERNEL_SPT_ACRE_SEM_E_NOMEM + erid = (ER_ID)_kernel_cre_sem(semid, pk_csem); + if ( erid == E_OK ) + { + erid = (ER_ID)semid; /* %jp{エラーでなければセマフォIDを格納} */ + } +#else + _kernel_cre_sem(semid, pk_csem); + erid = (ER_ID)semid; /* %jp{セマフォIDを格納} */ +#endif + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return erid; +} + + +#else /* _KERNEL_SPT_ACRE_SEM */ + + +#if _KERNEL_SPT_ACRE_SEM_E_NOSPT + + +/** %jp{セマフォの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} + * @param pk_csem %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER_ID acre_sem(const T_CSEM *pk_csem) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_ACRE_SEM */ + + + +/* end of file */ diff --git a/kernel/source/object/sem/cre_sem.c b/kernel/source/object/sem/cre_sem.c new file mode 100755 index 0000000..08cc8e6 --- /dev/null +++ b/kernel/source/object/sem/cre_sem.c @@ -0,0 +1,93 @@ +/** + * Hyper Operating System V4 Advance + * + * @file cre_sem.c + * @brief %jp{セマフォの生成}%en{Create Semaphore} + * + * @version $Id: cre_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" +#include "object/semobj.h" + + + +#if _KERNEL_SPT_CRE_SEM + + +/** %jp{セマフォの生成}%en{Create Semaphore} + * @param semid %jp{生成対象のセマフォのID番号}%en{ID number of the semaphore to be created} + * @param pk_ctsk %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_RSATR %jp{予約属性(sematrが不正あるいは使用できない)}%en{Reserved attribute(sematr is invalid or unusable)} + * @retval E_OBJ %jp{オブジェクト状態エラー(対象セマフォが登録済み)}%en{Object state error(specified semaphore is already registerd)} + */ +ER cre_sem(ID semid, const T_CSEM *pk_csem) +{ + ER ercd; + + /* %jp{IDチェック}%en{check ID} */ +#if _KERNEL_SPT_CRE_SEM_E_ID + if ( !_KERNEL_SEM_CHECK_SEMID(semid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + /* %jp{属性チェック}%en{check attribute} */ +#if _KERNEL_SPT_CRE_SEM_E_RSATR + if ( ((pk_csem->sematr & TA_TPRI) == 0 && !_KERNEL_SPT_SEM_TA_TFIFO) + || ((pk_csem->sematr & TA_TPRI) != 0 && !_KERNEL_SPT_SEM_TA_TPRI) ) + { + return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{存在チェック}%en{check object} */ +#if _KERNEL_SPT_CRE_SEM_E_OBJ + if ( _KERNEL_SEM_CHECK_EXS(semid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_OBJ; /* %jp{オブジェクト状態エラー}%en{Object state error} */ + } +#endif + + /* %jp{オブジェクト生成}%en{create object} */ + ercd = _kernel_cre_sem(semid, pk_csem); + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return ercd; +} + + +#else /* _KERNEL_SPT_CRE_SEM */ + + +#if _KERNEL_SPT_CRE_SEM_E_NOSPT + +/** %jp{セマフォの生成}%en{Create Semaphore} + * @param semid %jp{生成対象のセマフォのID番号}%en{ID number of the semaphore to be created} + * @param pk_ctsk %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER cre_sem(ID semid, const T_CSEM *pk_csem) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_CRE_SEM */ + + + +/* end of file */ diff --git a/kernel/source/object/sem/del_sem.c b/kernel/source/object/sem/del_sem.c new file mode 100755 index 0000000..cad1368 --- /dev/null +++ b/kernel/source/object/sem/del_sem.c @@ -0,0 +1,105 @@ +/** + * Hyper Operating System V4 Advance + * + * @file del_sem.c + * @brief %jp{セマフォの削除}%en{Delete Semaphore} + * + * @version $Id: del_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" +#include "object/semobj.h" + + + +#if _KERNEL_SPT_DEL_SEM + + +/** %jp{セマフォの削除}%en{Delete Semaphore} + * @param semid %jp{削除対象のセマフォのID番号}%en{ID number of the semaphore to be deleted} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + */ +ER del_sem(ID semid) +{ + _KERNEL_T_SEMCB *semcb; + _KERNEL_T_QUE *pk_que; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + + /* %jp{IDチェック}%en{check ID} */ +#if _KERNEL_SPT_DEL_SEM_E_ID + if ( !_KERNEL_SEM_CHECK_SEMID(semid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{存在チェック}%en{check object} */ +#if _KERNEL_SPT_DEL_SEM_E_NOEXS + if ( _KERNEL_SEM_CHECK_EXS(semid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_OBJ; /* %jp{オブジェクト状態エラー}%en{Object state error} */ + } +#endif + + /* %jp{セマフォコントロールブロック取得} */ + semcb = _KERNEL_SEM_ID2SEMCB(semid); + + /* %jp{待ち行列取得} */ + pk_que = _KERNEL_SEM_GET_QUE(semcb); + + /* %jp{待ち行列のタスクを全て起床} */ + while ( (tskhdl = _KERNEL_RMH_QUE(pk_que)) != _KERNEL_TSKHDL_NULL ) + { + /* %jp{待ちタスクがあれば待ち解除} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + _KERNEL_TSK_SET_ERCD(tcb, E_DLT); /* %jp{エラーコード設定} */ + _KERNEL_SEM_RMV_TOQ(tskhdl); /* %jp{タイムアウトキューから外す} */ + _KERNEL_DSP_WUP_TSK(tskhdl); /* %jp{タスクの待ち解除} */ + } + + /* %jp{オブジェクト削除} */ +#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY + _KERNEL_SYS_FRE_MEM(semcb); /* %jp{メモリ開放} */ + _KERNEL_SEM_ID2SEMCB(semid) = NULL; +#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY + _KERNEL_SEM_SET_MAXSEM(semcb, 0); +#endif + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return E_OK; +} + + +#else /* _KERNEL_SPT_DEL_SEM */ + + +#if _KERNEL_SPT_DEL_SEM_E_NOSPT + +/** %jp{セマフォの削除}%en{Delete Semaphore} + * @param semid %jp{削除対象のセマフォのID番号}%en{ID number of the semaphore to be deleted} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER del_sem(ID semid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_DEL_SEM */ + + + +/* end of file */ diff --git a/kernel/source/object/sem/kcre_sem.c b/kernel/source/object/sem/kcre_sem.c new file mode 100755 index 0000000..e658e2e --- /dev/null +++ b/kernel/source/object/sem/kcre_sem.c @@ -0,0 +1,106 @@ +/** + * Hyper Operating System V4 Advance + * + * @file acre_sem.c + * @brief %en{Activate Task}%jp{タスクの起動} + * + * @version $Id: kcre_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/semobj.h" + + +/* %jp{メモリ不足エラーチェックサポートの判定} */ +#if (_KERNEL_SPT_CRE_SEM && _KERNEL_SPT_CRE_SEM_E_NOMEM) || (_KERNEL_SPT_ACRE_SEM && _KERNEL_SPT_ACRE_SEM_E_NOMEM) +#define _KERNEL_SPT_KCRE_SEM_E_NOMEM TRUE +#else +#define _KERNEL_SPT_KCRE_SEM_E_NOMEM FALSE +#endif + + + +/** %jp{セマフォの生成}%en{Create semaphore} + * @param semid %jp{生成対象のセマフォのID番号}%en{ID number of the semaphore to be created} + * @param pk_ctsk %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_NOMEM %jp{メモリ不足}%en{Insufficient memory} + */ +ER _kernel_cre_sem(ID semid, const T_CSEM *pk_csem) +{ + _KERNEL_T_SEMCB *semcb; + _KERNEL_T_SEMCB_RO *semcb_ro; + + /* %jp{メモリ確保}%en{get memory} */ +#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY + { + semcb = _KERNEL_SEM_ID2SEMCB(semid); + semcb_ro = semcb; + } +#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY +#if _KERNEL_SEMCB_SPLIT_RO + { + /* %jp{SEMCB領域がポインタ管理で、ROM/RAM分離の場合} */ + VP mem; + SIZE memsz; + + /* %jp{メモリサイズ決定} */ + memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_SEMCB)) + + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_SEMCB_RO)); + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(memsz); + + /* %jp{メモリ不足チェック} */ +#if _KERNEL_SPT_KCRE_SEM_E_NOMEM + if ( mem == NULL ) + { + return E_NOMEM; + } +#endif + + /* %jp{メモリ割り当て} */ + semcb = (_KERNEL_T_SEMCB *)mem; + semcb_ro = (_KERNEL_T_SEMCB_RO *)((VB *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_SEMCB))); + _KERNEL_SEM_ID2SEMCB(semid) = semcb; + _KERNEL_SEM_ID2SEMCB(semid)->semcb_ro = (const _KERNEL_T_SEMCB_RO *)semcb_ro; + } +#else + { + VP mem; + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(sizeof(_KERNEL_T_SEMCB)); + + /* %jp{メモリ不足チェック} */ +#if _KERNEL_SPT_KCRE_SEM_E_NOMEM + if ( mem == NULL ) + { + return E_NOMEM; + } +#endif + + /* %jp{メモリ割り当て} */ + semcb = (_KERNEL_T_SEMCB *)mem; + semcb_ro = (_KERNEL_T_SEMCB_RO *)mem; + _KERNEL_SEM_ID2SEMCB(semid) = semcb; + } +#endif +#endif + + /* %jp{メンバ初期化} */ + _KERNEL_CRE_QUE(_KERNEL_SEM_GET_QUE(semcb)); + _KERNEL_SEM_SET_SEMCNT(semcb, pk_csem->isemcnt); + _KERNEL_SEM_SET_SEMATR(semcb_ro, pk_csem->sematr); + _KERNEL_SEM_SET_MAXSEM(semcb_ro, pk_csem->maxsem); + + return E_OK; +} + + +/* end of file */ diff --git a/kernel/source/object/sem/kwai_sem.c b/kernel/source/object/sem/kwai_sem.c new file mode 100755 index 0000000..9324da6 --- /dev/null +++ b/kernel/source/object/sem/kwai_sem.c @@ -0,0 +1,117 @@ +/** + * Hyper Operating System V4 Advance + * + * @file twai_sem.c + * @brief %jp{セマフォ資源の獲得(統合版)}%en{Acquire Semaphore Resource} + * + * @version $Id: kwai_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/semobj.h" + + + + +/** %jp{セマフォ資源の獲得(統合版)}%en{Acquire Semaphore Resource} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @param tmout %jp{タイムアウト指定}%en{Specified timeout} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_CTX %jp{コンテキストエラー}%en{Context error} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_TMOUT %jp{タイムアウト}%en{Timeout} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)} + */ +ER _kernel_wai_sem(ID semid, TMO tmout) +{ + _KERNEL_T_SEMHDL semhdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_SEM_T_SEMCNT semcnt; + ER ercd; + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_KWAI_SEM_E_ID + if ( !_KERNEL_SEM_CHECK_SEMID(semid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_KWAI_SEM_E_CTX + if ( tmout != TMO_POL && _KERNEL_SYS_SNS_DPN() ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_KWAI_SEM_E_NOEXS + if ( !_KERNEL_SEM_CHECK_EXS(semid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{セマフォハンドル取得} */ + semhdl = _KERNEL_SEM_ID2SEMHDL(semid); + + /* %jp{セマフォカウンタ取得} */ + semcnt = _KERNEL_SEM_GET_SEMCNT(semhdl); + + if ( semcnt > 0 ) + { + /* %jp{セマフォ資源が獲得できれば成功} */ + _KERNEL_SEM_SET_SEMCNT(semhdl, semcnt - 1); /* %jp{セマフォ資源の獲得} */ + ercd = E_OK; + } + else + { +#if _KERNEL_SPT_TWAI_SEM || _KERNEL_SPT_POL_SEM + if ( tmout == TMO_POL ) + { + ercd = E_TMOUT; /* %jp{タイムアウト}%en{Timeout} */ + } + else +#endif + { + /* %jp{タスクを待ち状態にする} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_TSK_SET_TSKWAIT(tskhdl, _KERNEL_TTW_SEM); + _KERNEL_TSK_SET_WOBJID(tskhdl, semid); + _KERNEL_SEM_ADD_QUE(semhdl, tskhdl); /* %jp{待ち行列に追加} */ + +#if _KERNEL_SPT_TWAI_SEM + if ( tmout != TMO_FEVR ) + { + _KERNEL_SEM_ADD_TOQ(tskhdl, tmout); /* %jp{タイムアウトキューに追加} */ + } +#endif + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tskhdl); + } + } + + _KERNEL_LEAVE_SVC(); /* %jp{オブジェクト未生成}%en{Non-existant object} */ + + return ercd; +} + + +/* end of file */ diff --git a/kernel/source/object/sem/pol_sem.c b/kernel/source/object/sem/pol_sem.c new file mode 100755 index 0000000..c5f8dae --- /dev/null +++ b/kernel/source/object/sem/pol_sem.c @@ -0,0 +1,120 @@ +/** + * Hyper Operating System V4 Advance + * + * @file pol_sem.c + * @brief %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)} + * + * @version $Id: pol_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/semobj.h" + + + +#if _KERNEL_SPT_POL_SEM + + +#if _KERNEL_SPT_TWAI_SEM && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{twai_semありで、サイズ優先なら} */ + +/** %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_TMOUT %jp{ポーリング失敗}%en{Polling failure} + */ +ER pol_sem(ID semid) +{ + /* %jp{pol_semやtwai_semと共通処理とする} */ + return _kernel_wai_sem(semid, TMO_POL); +} + +#else + +/** %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_TMOUT %jp{ポーリング失敗}%en{Polling failure} + */ +ER pol_sem(ID semid) +{ + _KERNEL_T_SEMCB *semcb; + _KERNEL_SEM_T_SEMCNT semcnt; + ER ercd; + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_POL_SEM_E_ID + if ( !_KERNEL_SEM_CHECK_SEMID(semid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_POL_SEM_E_NOEXS + if ( !_KERNEL_SEM_CHECK_EXS(semid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{セマフォコントロールブロック取得} */ + semcb = _KERNEL_SEM_ID2SEMCB(semid); + + /* %jp{セマフォカウンタ取得} */ + semcnt = _KERNEL_SEM_GET_SEMCNT(semcb); + + /* %jp{資源数チェック} */ + if ( semcnt > 0 ) + { + /* %jp{セマフォ資源が獲得} */ + _KERNEL_SEM_SET_SEMCNT(semcb, semcnt - 1); /* %jp{セマフォ資源の獲得} */ + ercd = E_OK; + } + else + { + ercd = E_TMOUT; + } + + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return ercd; +} + +#endif + + +#else /* _KERNEL_SPT_POL_SEM */ + + +#if _KERNEL_SPT_POL_SEM_E_NOSPT + +/** %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER wai_sem(ID semid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_POL_SEM */ + + + +/* end of file */ diff --git a/kernel/source/object/sem/ref_sem.c b/kernel/source/object/sem/ref_sem.c new file mode 100755 index 0000000..705da96 --- /dev/null +++ b/kernel/source/object/sem/ref_sem.c @@ -0,0 +1,95 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ref_sem.c + * @brief %jp{セマフォの状態参照}%en{Reference Semaphore State} + * + * @version $Id: ref_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/semobj.h" + + + +#if _KERNEL_SPT_REF_SEM + + +/** %jp{セマフォの状態参照}%en{Reference Semaphore State} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @param pk_rsem %jp{セマフォ状態を返すパケットへのポインタ}%en{Pointer to the packet returning the semaphore state} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_PAR %jp{パラメータエラー(pk_rsemが不正)}%en{Parameter error(pk_rsem is invalid)} + */ +ER ref_sem(ID semid, T_RSEM *pk_rsem) +{ + _KERNEL_T_SEMCB *semcb; + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_REF_SEM_E_ID + if ( !_KERNEL_SEM_CHECK_SEMID(semid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + +#if _KERNEL_SPT_REF_SEM_E_PAR + if ( pk_rsem == NULL ) + { + return E_PAR; /* %jp{パラメータエラー}%en{Parameter error} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_REF_SEM_E_NOEXS + if ( !_KERNEL_SEM_CHECK_EXS(semid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{セマフォコントロールブロック取得} */ + semcb = _KERNEL_SEM_ID2SEMCB(semid); + + /* %jp{情報取得} */ + pk_rsem->wtskid = _KERNEL_TSK_GET_TSKID(_KERNEL_REF_QUE(_KERNEL_SEM_GET_QUE(semcb))); + pk_rsem->semcnt = _KERNEL_SEM_GET_SEMCNT(semcb); + + _KERNEL_LEAVE_SVC(); /* %jp{オブジェクト未生成}%en{Non-existant object} */ + + return E_OK; +} + + +#else /* _KERNEL_SPT_REF_SEM */ + + +#if _KERNEL_SPT_REF_SEM_E_NOSPT + +/** %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER ref_sem(ID semid, T_RSEM *pk_rsem) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_REF_SEM */ + + + +/* end of file */ diff --git a/kernel/source/object/sem/sig_sem.c b/kernel/source/object/sem/sig_sem.c new file mode 100755 index 0000000..fa3e1c7 --- /dev/null +++ b/kernel/source/object/sem/sig_sem.c @@ -0,0 +1,122 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sig_sem.c + * @brief %jp{セマフォ資源の返却}%en{Release Semaphore Resource} + * + * @version $Id: sig_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/semobj.h" + + + +#if _KERNEL_SPT_SIG_SEM + + +/** %jp{セマフォ資源の返却}%en{Release Semaphore Resource} + * @param semid %jp{セマフォ資源返却対象のセマフォのID番号}%en{ID number of the semaphore to which resource is released} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_QOVR %jp{キューイングオーバーフロー(最大資源数を越える返却)}%en{Queue overflow(release will exceed maximum resource count)} + */ +ER sig_sem(ID semid) +{ + _KERNEL_T_SEMCB *semcb; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + _KERNEL_SEM_T_SEMCNT semcnt; + + /* %jp{ID のチェック} */ +#ifdef _KERNEL_SPT_SIG_SEM_E_ID + if ( !_KERNEL_SEM_CHECK_SEMID(semid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_SIG_SEM_E_NOEXS + if ( !_KERNEL_SEM_CHECK_EXS(semid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + + /* %jp{セマフォコントロールブロック取得} */ + semcb = _KERNEL_SEM_ID2SEMCB(semid); + + /* %jp{待ち行列先頭からタスク取り出し} */ + tskhdl = _KERNEL_SEM_RMH_QUE(_KERNEL_SEM_GET_QUE(semcb)); + if ( tskhdl != _KERNEL_TSKHDL_NULL ) + { + /* %jp{待ちタスクがあれば待ち解除} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + _KERNEL_TSK_SET_ERCD(tcb, E_OK); /* %jp{エラーコード設定} */ + _KERNEL_DSP_WUP_TSK(tskhdl); /* %jp{タスクの待ち解除} */ + _KERNEL_SEM_RMV_TOQ(tskhdl); + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + } + else + { + /* %jp{セマフォカウンタ取得} */ + semcnt = _KERNEL_SEM_GET_SEMCNT(semcb); + + /* %jp{キューイングオーバーフローチェック} */ +#ifdef _KERNEL_SPT_SIG_SEM_E_QOVR + { + const _KERNEL_T_SEMCB_RO *semcb_ro; + + semcb_ro = _KERNEL_SEM_GET_SEMCB_RO(semid, semcb); + if ( semcnt >= _KERNEL_SEM_GET_MAXSEM(semcb_ro) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_QOVR; /* %jp{キューイングオーバーフロー}%en{Queue overflow} */ + } + } +#endif + + /* %jp{セマフォ資源返却} */ + _KERNEL_SEM_SET_SEMCNT(semcb, semcnt + 1); + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return E_OK; /* %jp{正常終了}%en{Normal completion} */ +} + + +#else /* _KERNEL_SPT_SIG_SEM */ + + +#if _KERNEL_SPT_SIG_SEM_E_NOSPT + +/** %jp{セマフォ資源の返却}%en{Release Semaphore Resource} + * @param semid %jp{セマフォ資源返却対象のセマフォのID番号}%en{ID number of the semaphore to which resource is released} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER sig_sem(ID semid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_SIG_SEM */ + + + +/* end of file */ diff --git a/kernel/source/object/sem/twai_sem.c b/kernel/source/object/sem/twai_sem.c new file mode 100755 index 0000000..d952605 --- /dev/null +++ b/kernel/source/object/sem/twai_sem.c @@ -0,0 +1,166 @@ +/** + * Hyper Operating System V4 Advance + * + * @file twai_sem.c + * @brief %jp{セマフォ資源の獲得(タイムアウトあり)}%en{Acquire Semaphore Resource(with Timeout)} + * + * @version $Id: twai_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/semobj.h" + + + +#if _KERNEL_SPT_TWAI_SEM + + +/** %jp{セマフォ資源の獲得(タイムアウトあり)}%en{Acquire Semaphore Resource(with Timeout)} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @param tmout %jp{タイムアウト指定}%en{Specified timeout} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_CTX %jp{コンテキストエラー}%en{Context error} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_TMOUT %jp{タイムアウト}%en{Timeout} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)} + */ +ER twai_sem(ID semid, TMO tmout) +{ + return _kernel_wai_sem(semid, tmout); +} + + +#else /* _KERNEL_SPT_TWAI_SEM */ + + +#if _KERNEL_SPT_TWAI_SEM_E_NOSPT + +/** %jp{セマフォ資源の獲得(タイムアウトあり)}%en{Acquire Semaphore Resource(with Timeout)} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER twai_sem(ID semid, TMO tmout) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_TWAI_SEM */ + + + +#if _KERNEL_SPT_KWAI_SEM + + +/** %jp{セマフォ資源の獲得(統合版)}%en{Acquire Semaphore Resource} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @param tmout %jp{タイムアウト指定}%en{Specified timeout} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_CTX %jp{コンテキストエラー}%en{Context error} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_TMOUT %jp{タイムアウト}%en{Timeout} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)} + */ +ER _kernel_wai_sem(ID semid, TMO tmout) +{ + _KERNEL_T_SEMCB *semcb; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + _KERNEL_SEM_T_SEMCNT semcnt; + ER ercd; + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_KWAI_SEM_E_ID + if ( !_KERNEL_SEM_CHECK_SEMID(semid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_KWAI_SEM_E_CTX + if ( tmout != TMO_POL && _KERNEL_SYS_SNS_DPN() ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_KWAI_SEM_E_NOEXS + if ( !_KERNEL_SEM_CHECK_EXS(semid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{セマフォコントロールブロック取得} */ + semcb = _KERNEL_SEM_ID2SEMCB(semid); + + /* %jp{セマフォカウンタ取得} */ + semcnt = _KERNEL_SEM_GET_SEMCNT(semcb); + + if ( semcnt > 0 ) + { + /* %jp{セマフォ資源が獲得できれば成功} */ + _KERNEL_SEM_SET_SEMCNT(semcb, semcnt - 1); /* %jp{セマフォ資源の獲得} */ + ercd = E_OK; + } + else + { +#if _KERNEL_SPT_TWAI_SEM || _KERNEL_SPT_POL_SEM + if ( tmout == TMO_POL ) + { + ercd = E_TMOUT; /* %jp{タイムアウト}%en{Timeout} */ + } + else +#endif + { + /* %jp{タスクを待ち状態にする} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_SEM); + _KERNEL_TSK_SET_WOBJID(tcb, semid); + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_SEM_ADD_QUE(semcb, _KERNEL_SEM_GET_SEMCB_RO(semid, semcb), tskhdl); /* %jp{待ち行列に追加} */ + +#if _KERNEL_SPT_TWAI_SEM + if ( tmout != TMO_FEVR ) + { + _KERNEL_SEM_ADD_TOQ(tskhdl, tmout); /* %jp{タイムアウトキューに追加} */ + } +#endif + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tcb); + } + } + + _KERNEL_LEAVE_SVC(); /* %jp{オブジェクト未生成}%en{Non-existant object} */ + + return ercd; +} + + +#endif /* _KERNEL_SPT_KWAI_SEM */ + + + +/* end of file */ diff --git a/kernel/source/object/sem/wai_sem.c b/kernel/source/object/sem/wai_sem.c new file mode 100755 index 0000000..2753457 --- /dev/null +++ b/kernel/source/object/sem/wai_sem.c @@ -0,0 +1,142 @@ +/** + * Hyper Operating System V4 Advance + * + * @file wai_sem.c + * @brief %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource} + * + * @version $Id: wai_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/semobj.h" + + + +#if _KERNEL_SPT_WAI_SEM + + +#if _KERNEL_SPT_KWAI_SEM && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{コードサイズ優先で統合ありなら} */ + +/** %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)} + */ +ER wai_sem(ID semid) +{ + /* %jp{pol_semやtwai_semと共通処理とする} */ + return _kernel_wai_sem(semid, TMO_FEVR); +} + +#else + +/** %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)} + * @retval E_CTX %jp{コンテキストエラー}%en{Context error} + * @retval E_NOEXS %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)} + */ +ER wai_sem(ID semid) +{ + _KERNEL_T_SEMHDL semhdl; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_SEM_T_SEMCNT semcnt; + ER ercd; + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_WAI_SEM_E_CTX + if ( _KERNEL_SYS_SNS_DPN() ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_WAI_SEM_E_ID + if ( !_KERNEL_SEM_CHECK_SEMID(semid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_WAI_SEM_E_NOEXS + if ( !_KERNEL_SEM_CHECK_EXS(semid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{セマフォハンドル取得} */ + semhdl = _KERNEL_SEM_ID2SEMHDL(semid); + + /* %jp{セマフォカウンタ取得} */ + semcnt = _KERNEL_SEM_GET_SEMCNT(semhdl); + + if ( semcnt > 0 ) + { + /* %jp{セマフォ資源が獲得できれば成功} */ + _KERNEL_SEM_SET_SEMCNT(semhdl, semcnt - 1); /* %jp{セマフォ資源の獲得} */ + ercd = E_OK; + } + else + { + /* %jp{タスクを待ち状態にする} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_TSK_SET_TSKWAIT(tskhdl, _KERNEL_TTW_SEM); + _KERNEL_TSK_SET_WOBJID(tskhdl, semid); + _KERNEL_SEM_ADD_QUE(semhdl, tskhdl); /* %jp{待ち行列に追加} */ + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tskhdl); + } + + _KERNEL_LEAVE_SVC(); /* %jp{オブジェクト未生成}%en{Non-existant object} */ + + return ercd; +} + +#endif + + +#else /* _KERNEL_SPT_WAI_SEM */ + + +#if _KERNEL_SPT_WAI_SEM_E_NOSPT + +/** %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource} + * @param semid %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER wai_sem(ID semid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_WAI_SEM */ + + + +/* end of file */ diff --git a/kernel/source/object/sys/dis_dsp.c b/kernel/source/object/sys/dis_dsp.c new file mode 100755 index 0000000..d5adf83 --- /dev/null +++ b/kernel/source/object/sys/dis_dsp.c @@ -0,0 +1,36 @@ +/** + * Hyper Operating System V4 Advance + * + * @file unl_cpu.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: dis_dsp.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{ディスパッチの禁止} + * @return void + */ +ER dis_dsp(void) +{ + _KERNEL_ENTER_SVC(); + + /* %jp{ディスパッチの禁止} */ + _KERNEL_SYS_SET_DSP(); + + _KERNEL_LEAVE_SVC(); + + return E_OK; /* %jp{成功} */ +} + + + +/* end of file */ diff --git a/kernel/source/object/sys/ena_dsp.c b/kernel/source/object/sys/ena_dsp.c new file mode 100755 index 0000000..f6ad61b --- /dev/null +++ b/kernel/source/object/sys/ena_dsp.c @@ -0,0 +1,43 @@ +/** + * Hyper Operating System V4 Advance + * + * @file unl_cpu.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: ena_dsp.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{ディスパッチの許可} + * @return void + */ +ER ena_dsp(void) +{ + _KERNEL_ENTER_SVC(); + + /* %jp{ディスパッチの禁止} */ + _KERNEL_SYS_CLR_DSP(); + + /* %jp{遅延しているディスパッチがあれば実施} */ + if ( _KERNEL_SYS_SNS_DLY() ) + { + _KERNEL_SYS_CLR_DLY(); + _KERNEL_DSP_TSK(); + } + + _KERNEL_LEAVE_SVC(); + + return E_OK; /* %jp{成功} */ +} + + + +/* end of file */ diff --git a/kernel/source/object/sys/get_tid.c b/kernel/source/object/sys/get_tid.c new file mode 100755 index 0000000..645c0a6 --- /dev/null +++ b/kernel/source/object/sys/get_tid.c @@ -0,0 +1,39 @@ +/** + * Hyper Operating System V4 Advance + * + * @file unl_cpu.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: get_tid.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{実行状態タスクIDの参照} + * @return void + */ +ER get_tid(ID *p_tskid) +{ + _KERNEL_T_TSKHDL tskhdl; + + _KERNEL_ENTER_SVC(); + + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + *p_tskid = _KERNEL_TSK_TSKHDL2ID(tskhdl); + + _KERNEL_LEAVE_SVC(); + + return E_OK; +} + + + +/* end of file */ diff --git a/kernel/source/object/sys/loc_cpu.c b/kernel/source/object/sys/loc_cpu.c new file mode 100755 index 0000000..1d4d7e0 --- /dev/null +++ b/kernel/source/object/sys/loc_cpu.c @@ -0,0 +1,35 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sta_knl.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: loc_cpu.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{CPUのロック} + * @return void + */ +ER loc_cpu(void) +{ + _KERNEL_ENTER_SVC(); + + _KERNEL_SYS_SET_LOC(); + + _KERNEL_LEAVE_SVC(); + + return E_OK; /* %jp{成功} */ +} + + + +/* end of file */ diff --git a/kernel/source/object/sys/sns_ctx.c b/kernel/source/object/sys/sns_ctx.c new file mode 100755 index 0000000..e3da550 --- /dev/null +++ b/kernel/source/object/sys/sns_ctx.c @@ -0,0 +1,37 @@ +/** + * Hyper Operating System V4 Advance + * + * @file unl_cpu.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: sns_ctx.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{コンテキストの参照} + * @return void + */ +BOOL sns_ctx(void) +{ + BOOL stat; + + _KERNEL_ENTER_SVC(); + + stat = _KERNEL_SYS_SNS_CTX(); + + _KERNEL_LEAVE_SVC(); + + return stat; +} + + + +/* end of file */ diff --git a/kernel/source/object/sys/sns_dsp.c b/kernel/source/object/sys/sns_dsp.c new file mode 100755 index 0000000..ec595aa --- /dev/null +++ b/kernel/source/object/sys/sns_dsp.c @@ -0,0 +1,37 @@ +/** + * Hyper Operating System V4 Advance + * + * @file unl_cpu.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: sns_dsp.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{} + * @return void + */ +BOOL sns_dsp(void) +{ + BOOL stat; + + _KERNEL_ENTER_SVC(); + + stat = _KERNEL_SYS_SNS_DSP(); + + _KERNEL_LEAVE_SVC(); + + return stat; +} + + + +/* end of file */ diff --git a/kernel/source/object/sys/sns_loc.c b/kernel/source/object/sys/sns_loc.c new file mode 100755 index 0000000..fb0448a --- /dev/null +++ b/kernel/source/object/sys/sns_loc.c @@ -0,0 +1,37 @@ +/** + * Hyper Operating System V4 Advance + * + * @file unl_cpu.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: sns_loc.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{CPUロック状態の参照} + * @return void + */ +BOOL sns_loc(void) +{ + BOOL stat; + + _KERNEL_ENTER_SVC(); + + stat = _KERNEL_SYS_SNS_LOC(); + + _KERNEL_LEAVE_SVC(); + + return stat; +} + + + +/* end of file */ diff --git a/kernel/source/object/sys/sta_knl.c b/kernel/source/object/sys/sta_knl.c new file mode 100755 index 0000000..f313798 --- /dev/null +++ b/kernel/source/object/sys/sta_knl.c @@ -0,0 +1,98 @@ +/** + * Hyper Operating System V4 Advance + * + * @file sta_knl.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: sta_knl.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/isrobj.h" + + + +_KERNEL_T_SYSCB _kernel_syscb; + +extern VP _kernel_idl_stk; +extern SIZE _kernel_idl_stksz; + + +static void _kernel_sys_sta(void); + + +/** %jp{カーネルの開始(独自サービスコール)}%en{Start Kernel} + * @return void + */ +ER vsta_knl(void) +{ + /* %jp{システムの初期化} */ + _KERNEL_SYS_INI_SYS(); + + /* %jp{プロセッサ固有の初期化} */ + _KERNEL_INI_PRC(); + + + _KERNEL_ENTER_SVC(); + + /* %jp{初期化ルーチンは非タスク部扱い} */ + _KERNEL_SYS_SET_CTX(); + _KERNEL_SYS_SET_LOC(); + + /* %jp{IRC固有の初期化} */ + _KERNEL_INI_IRC(); + + + _kernel_syscb.proccb[0].sysstk = _kernel_idl_stk; + _kernel_syscb.proccb[0].sysstksz = _kernel_idl_stksz; + + + /* %jp{システムコンテキストの生成} */ + _KERNEL_CRE_CTX( + _KERNEL_SYS_GET_SYSCTXCB(), + _KERNEL_SYS_GET_SYSSTKSZ(), + _KERNEL_SYS_GET_SYSSTK(), + _KERNEL_SYS_GET_SYSISP(), + (FP)_kernel_sys_sta, + (VP_INT)0, + (VP_INT)0 + ); + + /* %jp{初期化ハンドラ実行} */ + _kernel_cfg_ini(); + + _KERNEL_LEAVE_SVC(); + + /* %jp{初期化ハンドラ実行} */ + _kernel_cfg_sta(); + + _KERNEL_ENTER_SVC(); + + + /* %jp{初期コンテキストの開始} */ + _kernel_sta_ctx(_KERNEL_SYS_GET_SYSCTXCB()); + + return E_OK; /* %jp{成功} */ +} + + +void _kernel_sys_sta(void) +{ + _KERNEL_SYS_CLR_CTX(); + _KERNEL_SYS_CLR_LOC(); + _KERNEL_SYS_CLR_DLY(); + + _KERNEL_DSP_TSK(); + + _KERNEL_LEAVE_SVC(); + + _kernel_idl_lop(); +} + + +/* end of file */ diff --git a/kernel/source/object/sys/unl_cpu.c b/kernel/source/object/sys/unl_cpu.c new file mode 100755 index 0000000..71976da --- /dev/null +++ b/kernel/source/object/sys/unl_cpu.c @@ -0,0 +1,43 @@ +/** + * Hyper Operating System V4 Advance + * + * @file unl_cpu.c + * @brief %en{Start Kernel}%jp{OSの起動} + * + * @version $Id: unl_cpu.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{CPUのアンロック} + * @return void + */ +ER unl_cpu(void) +{ + _KERNEL_ENTER_SVC(); + + /* %jp{CPUロック解除} */ + _KERNEL_SYS_CLR_LOC(); + + /* %jp{遅延しているディスパッチがあれば実施} */ + if ( _KERNEL_SYS_SNS_DLY() ) + { + _KERNEL_SYS_CLR_DLY(); + _KERNEL_DSP_TSK(); + } + + _KERNEL_LEAVE_SVC(); + + return E_OK; /* %jp{成功} */ +} + + + +/* end of file */ diff --git a/kernel/source/object/tim/isig_tim.c b/kernel/source/object/tim/isig_tim.c new file mode 100755 index 0000000..946955c --- /dev/null +++ b/kernel/source/object/tim/isig_tim.c @@ -0,0 +1,58 @@ +/** + * Hyper Operating System V4 Advance + * + * @file isig_tim.c + * @brief %jp{タイムティックの供給}%en{Supply Time Tick} + * + * @version $Id: isig_tim.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +#if _KERNEL_SPT_ISIG_TIM + +/** %jp{タイムティックの供給}%en{Supply Time Tick} + * @retval E_OK %jp{正常終了}%en{Normal completion} + */ +ER isig_tim(void) +{ + RELTIM tictim; + + tictim = 1; + +/* _kernel_sig_tmq(tictim); */ + + _kernel_sig_toq(tictim); + + return E_OK; +} + + +#else /* _KERNEL_SPT_ISIG_TIM */ + + +#if _KERNEL_SPT_ISIG_TIM_E_NOSPT + +/** %jp{タイムティックの供給}%en{Supply Time Tick} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER isig_tim(void) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_ISIG_TIM */ + + + +/* end of file */ diff --git a/kernel/source/object/tsk/acre_tsk.c b/kernel/source/object/tsk/acre_tsk.c new file mode 100755 index 0000000..752e162 --- /dev/null +++ b/kernel/source/object/tsk/acre_tsk.c @@ -0,0 +1,58 @@ +/** + * Hyper Operating System V4 Advance + * + * @file act_tsk.c + * @brief %en{Activate Task}%jp{タスクの起動} + * + * @version $Id: acre_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %en{Create Task}%jp{タスクの起動} + * @param tskid pk_ctsk %jp{タスク生成情報}%en{} + * @return Error code or task ID + */ +ER_ID acre_tsk(const T_CTSK *pk_ctsk) +{ + ID tskid; + ER_ID erid; + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{空きID探索} */ + for ( tskid = _KERNEL_TMIN_TSKID; tskid <= _KERNEL_TMAX_TSKID; tskid++ ) + { + if ( !_KERNEL_TSK_CHECK_EXS(tskid) ) + { + break; + } + } + if ( tskid > _KERNEL_TMAX_TSKID ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOID; /* %jp{ID番号不足} */ + } + + /* %jp{タスク生成} */ + erid = (ER_ID)_kernel_cre_tsk(tskid, pk_ctsk); + if ( erid == E_OK ) + { + erid = (ER_ID)tskid; + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return erid; +} + + + +/* end of file */ diff --git a/kernel/source/object/tsk/act_tsk.c b/kernel/source/object/tsk/act_tsk.c new file mode 100755 index 0000000..c004531 --- /dev/null +++ b/kernel/source/object/tsk/act_tsk.c @@ -0,0 +1,133 @@ +/** + * Hyper Operating System V4 Advance + * + * @file act_tsk.c + * @brief %en{Activate Task}%jp{タスクの起動} + * + * @version $Id: act_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %en{Activate Task}%jp{タスクの起動} + * @param tskid %en{ID number of the task to be activated}%jp{タスクID} + * @return void + */ +ER act_tsk( + ID tskid) +{ + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + const _KERNEL_T_TCB_RO *tcb_ro; + + if ( tskid == TSK_SELF ) /* %jp{自タスク指定時の変換} */ + { +#ifdef _KERNEL_SPT_ACT_TSK_E_ID + if ( _KERNEL_SYS_SNS_CTX() ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + /* %jp{実行中タスクを取得} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + } + else + { +#if _KERNEL_SPT_ACT_TSK_E_ID + if ( !_KERNEL_TSK_CHECK_TSKID(tskid) ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_CFG_ACT_TSK_E_NOEXS + if ( _KERNEL_TSK_CHECK_EXS(tskid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{leave service-call}%jp{サービスコールを出る} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + /* ID番号指定時の変換 */ + tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid); + } + + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + if ( _KERNEL_TSK_GET_TSKSTAT(tcb) != _KERNEL_TTS_DMT ) /* %jp{オブジェクト状態判定} */ + { +#if _KERNEL_TCB_ACTCNT + { + _KERNEL_TSK_T_ACTCNT actcnt; + + /* %jp{既に実行状態なら起動要求をキューイング} */ + actcnt = _KERNEL_TSK_GET_ACTCNT(tcb); + + /* %jp{既に実行状態なら起動要求をキューイング} */ + #ifdef _KERNEL_CFG_ACT_TSK_E_QOVR + if ( actcnt >= _KERNEL_TMAX_ACTCNT ) + { + _KERNEL_LEAVE_SVC(); + return E_QOVR; /* %jp{キューイングオーバーフロー} */ + } + #endif + + /* %jp{起動要求をキューイング} */ + _KERNEL_TSK_SET_ACTCNT(tcb, actcnt + 1); + } +#else + { + _KERNEL_LEAVE_SVC(); + return E_QOVR; /* %jp{キューイングオーバーフロー} */ + } +#endif + } + else + { + /* %jp{タスク状態初期化} */ + tcb_ro = _KERNEL_TSK_GET_TCB_RO(tskid, tcb); + _KERNEL_TSK_SET_TSKPRI(tcb, _KERNEL_TSK_GET_ITSKPRI(tcb_ro)); + _KERNEL_TSK_SET_TSKBPRI(tcb, _KERNEL_TSK_GET_ITSKPRI(tcb_ro)); + _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_RDY); + _KERNEL_TSK_SET_ACTCNT(tcb, 0); + _KERNEL_TSK_SET_WUPCNT(tcb, 0); + _KERNEL_TSK_SET_SUSCNT(tcb, 0); + + /* %jp{コンテキスト生成} */ + _KERNEL_CRE_CTX( + _KERNEL_TSK_GET_CTXCB(tcb), /* %jp{コンテキスト制御ブロック} */ + _KERNEL_TSK_GET_STKSZ(tcb_ro), /* %jp{タスクのスタック領域サイズ} */ + _KERNEL_TSK_GET_STK(tcb_ro), /* %jp{タスクのスタック領域の先頭番地} */ + (VP)_KERNEL_TSK_GET_ISP(tcb_ro), /* %jp{スタックポインタの初期値} */ + (FP)_kernel_ent_tsk, /* %jp{コンテキストの開始アドレス} */ + (VP_INT)_KERNEL_TSK_GET_EXINF(tcb_ro), /* %jp{タスクの拡張情報} */ + (VP_INT)_KERNEL_TSK_GET_TASK(tcb_ro) /* %jp{タスクの起動番地} */ + ); + + /* %jp{タスク実行可能状態に設定} */ + _KERNEL_DSP_STA_TSK(tskhdl); + + /* %jp{タスクディスパッチの実行}%en{task dispatch} */ + _KERNEL_DSP_TSK(); + } + + _KERNEL_LEAVE_SVC(); + + return E_OK; /* 成功 */ +} + + +/* end of file */ diff --git a/kernel/source/object/tsk/can_wup.c b/kernel/source/object/tsk/can_wup.c new file mode 100755 index 0000000..d290d67 --- /dev/null +++ b/kernel/source/object/tsk/can_wup.c @@ -0,0 +1,74 @@ +/** + * Hyper Operating System V4 Advance + * + * @file wup_tsk.c + * @brief %jp{タスクの起床}%en{Wakeup Task} + * + * @version $Id: can_wup.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +ER can_wup( + ID tskid) +{ + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + + if ( tskid == TSK_SELF ) /* %jp{自タスク指定時の変換} */ + { +#if _KERNEL_SPT_CAN_WUP_E_ID + if ( _KERNEL_SYS_SNS_CTX() ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + /* %jp{実行中タスクを取得} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + } + else + { +#if _KERNEL_SPT_CAN_WUP_E_ID + if ( !_KERNEL_TSK_CHECK_TSKID(tskid) ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_CAN_WUP_E_NOEXS + if ( _KERNEL_TSK_CHECK_EXS(tskid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{leave service-call}%jp{サービスコールを出る} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + /* ID番号指定時の変換 */ + tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid); + } + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + /* %jp{待ちカウンタクリア} */ + _KERNEL_TSK_SET_WUPCNT(tcb, 0); + + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return E_OK; +} + + +/* end of file */ diff --git a/kernel/source/object/tsk/cre_tsk.c b/kernel/source/object/tsk/cre_tsk.c new file mode 100755 index 0000000..f803c64 --- /dev/null +++ b/kernel/source/object/tsk/cre_tsk.c @@ -0,0 +1,48 @@ +/** + * Hyper Operating System V4 Advance + * + * @file act_tsk.c + * @brief %en{Activate Task}%jp{タスクの起動} + * + * @version $Id: cre_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %en{Create Task}%jp{タスクの生成} + * @param tskid %jp{タスクID}%en{ID number of the task to be created} + * @param pk_ctsk %jp{タスク生成情報}%en{} + * @retval E_OK + * @retval E_NOMEM + */ +ER cre_tsk(ID tskid, const T_CTSK *pk_ctsk) +{ + ER ercd; + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{空きID探索} */ + if ( _KERNEL_TSK_CHECK_EXS(tskid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_OBJ; /* %jp{ID番号不足} */ + } + + /* %jp{タスク生成} */ + ercd = _kernel_cre_tsk(tskid, pk_ctsk); + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + + return ercd; /* 成功 */ +} + + + +/* end of file */ diff --git a/kernel/source/object/tsk/dly_tsk.c b/kernel/source/object/tsk/dly_tsk.c new file mode 100755 index 0000000..d3c5cef --- /dev/null +++ b/kernel/source/object/tsk/dly_tsk.c @@ -0,0 +1,68 @@ +/** + * Hyper Operating System V4 Advance + * + * @file dly_tsk.c + * @brief %jp{自タスクの遅延}%en{Delay Task} + * + * @version $Id: dly_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" + + + +/** %jp{自タスクの遅延}%en{Delay Task} + * @retval E_OK %jp{成功} + */ +ER dly_tsk(RELTIM dlytim) +{ + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + ER ercd; + + /* %jp{実行中タスクを取得} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_DLY_TSK_E_CTX + if ( _KERNEL_SYS_SNS_DPN() ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + /* %jp{タスクを待ち状態にする} */ + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_WAI); + _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_DLY); + + /* %jp{タイムアウトキューに繋ぐ} */ + _KERNEL_ADD_TOQ(tskhdl, dlytim); + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tcb); + if ( ercd == E_TMOUT ) + { + ercd = E_OK; + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return ercd; +} + + +/* end of file */ diff --git a/kernel/source/object/tsk/ext_tsk.c b/kernel/source/object/tsk/ext_tsk.c new file mode 100755 index 0000000..0f1a598 --- /dev/null +++ b/kernel/source/object/tsk/ext_tsk.c @@ -0,0 +1,77 @@ +/** + * Hyper Operating System V4 Advance + * + * @file ext_tsk.c + * @brief %jp{タスクの終了}%en{Exit Task} + * + * @version $Id: ext_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{タスクの終了}%en{Exit Task} + * @return void + */ +void ext_tsk(void) +{ + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB_RO *tcb_ro; + _KERNEL_TSK_T_ACTCNT actcnt; + + /* %jp{実行中タスクを取得} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + + /* %jp{レディーキューから削除} */ + _KERNEL_DSP_EXT_TSK(tskhdl); + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + tcb_ro = _KERNEL_TSK_GET_TCB_RO(tskid, tcb); + + actcnt = _KERNEL_TSK_GET_ACTCNT(tcb); + + /* %jp{起動要求ネストのチェック} */ + if ( actcnt > 0 ) /* %jp{起動要求ネストがあるなら再生成} */ + { + _KERNEL_TSK_T_TPRI itskpri; + + _KERNEL_TSK_SET_ACTCNT(tcb, actcnt - 1); + itskpri = _KERNEL_TSK_GET_ITSKPRI(tcb_ro); + _KERNEL_TSK_SET_TSKPRI(tcb, itskpri); + _KERNEL_TSK_SET_TSKBPRI(tcb, itskpri); + + /* %jp{レディーキュー再接続} */ + _KERNEL_DSP_STA_TSK(tskhdl); + } + else /* %jp{起動要求ネストがなければ終了} */ + { + _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_DMT); + } + + /* %jp{タスクディスパッチの実行}%en{task dispatch} */ + _KERNEL_DSP_TSK(); + + /* %jp{リスタート} */ + _KERNEL_RST_CTX( + _KERNEL_TSK_GET_CTXCB(tcb), /* %jp{コンテキスト制御ブロック} */ + _KERNEL_TSK_GET_STKSZ(tcb_ro), /* %jp{タスクのスタック領域サイズ} */ + _KERNEL_TSK_GET_STK(tcb_ro), /* %jp{タスクのスタック領域の先頭番地} */ + _KERNEL_TSK_GET_ISP(tcb_ro), /* %jp{スタックポインタの初期値} */ + (FP)_kernel_ent_tsk, /* %jp{コンテキストの開始アドレス} */ + (VP_INT)_KERNEL_TSK_GET_EXINF(tcb_ro), /* %jp{タスクの拡張情報} */ + (VP_INT)_KERNEL_TSK_GET_TASK(tcb_ro) /* %jp{タスクの起動番地} */ + ); +} + + +/* end of file */ diff --git a/kernel/source/object/tsk/kcre_tsk.c b/kernel/source/object/tsk/kcre_tsk.c new file mode 100755 index 0000000..3d590ed --- /dev/null +++ b/kernel/source/object/tsk/kcre_tsk.c @@ -0,0 +1,173 @@ +/** + * Hyper Operating System V4 Advance + * + * @file kact_tsk.c + * @brief %en{Activate Task}%jp{タスクの起動} + * + * @version $Id: kcre_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %en{Activate Task}%jp{タスクの起動} + * @param tskid %jp{タスクID}%en{ID number of the task to be activated} + * @param pk_ctsk %jp{タスク生成情報}%en{} + * @retval E_OK + * @retval E_NOMEM + */ +ER _kernel_cre_tsk(ID tskid, const T_CTSK *pk_ctsk) +{ +/* _KERNEL_T_TSKHDL tskhdl; */ + _KERNEL_T_TCB *tcb; + _KERNEL_T_TCB_RO *tcb_ro; + VP stk; + + /* %jp{メモリ確保}%en{get memory} */ +#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY + { + /* %jp{TCB領域がブロック配列の場合、スタックのみ確保} */ + + /* %jp{スタックの確保} */ + if ( pk_ctsk->stk == NULL ) + { + stk = _KERNEL_SYS_ALC_MEM(pk_ctsk->stksz); + if ( stk == NULL ) + { + return E_NOMEM; + } + } + else + { + stk = pk_ctsk->stk; + } + +/* tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid); */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + tcb_ro = _KERNEL_TSK_GET_TCB_RO(tskid, tcb); + } +#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY +#if _KERNEL_TCB_SPLIT_RO + { + /* %jp{TCB領域がポインタ管理で、ROM/RAM分離の場合} */ + + VP mem; + SIZE memsz; + + /* %jp{メモリサイズ決定} */ + memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB)) + + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB_RO)); + if ( pk_ctsk->stk == NULL ) + { + memsz += pk_ctsk->stksz; + } + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(pk_ctsk->stksz); + if ( mem == NULL ) + { + return E_NOMEM; + } + + /* %jp{メモリ割り当て} */ + _KERNEL_TSK_ID2TCB(tskid) = tcb = (_KERNEL_T_TCB *)mem; + tcb->tcb_ro = tcb_ro = (_KERNEL_T_TCB_RO *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB))); + if ( pk_ctsk->stk == NULL ) + { + stk = (VP)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB)) + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB))); + } + else + { + stk = pk_ctsk->stk; + } +/* tskhdl = tcb; */ + } +#else + { + VP mem; + SIZE memsz; + + /* %jp{メモリサイズ決定} */ + memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB)); + if ( pk_ctsk->stk == NULL ) + { + memsz += pk_ctsk->stksz; + } + + /* %jp{メモリ確保} */ + mem = _KERNEL_SYS_ALC_MEM(pk_ctsk->stksz); + if ( mem == NULL ) + { + return E_NOMEM; + } + + /* %jp{メモリ割り当て} */ + _KERNEL_TSK_ID2TCB(tskid) = tcb_ro = tcb = (_KERNEL_T_TCB *)mem; + if ( pk_ctsk->stk == NULL ) + { + stk = (VP)((VB *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB))); + } + else + { + stk = pk_ctsk->stk; + } + +/* tskhdl = tcb; */ + } +#endif +#endif + + /* %jp{基本メンバ設定} */ + _KERNEL_TSK_SET_TSKATR(tcb_ro, pk_ctsk->tskatr); /* %jp{タスク属性} */ + _KERNEL_TSK_SET_EXINF(tcb_ro, pk_ctsk->exinf); /* %jp{タスクの拡張情報} */ + _KERNEL_TSK_SET_TASK(tcb_ro, pk_ctsk->task); /* %jp{タスクの起動番地} */ + _KERNEL_TSK_SET_ITSKPRI(tcb_ro, pk_ctsk->itskpri); /* %jp{タスクの起動時優先度} */ + _KERNEL_TSK_SET_STKSZ(tcb_ro, pk_ctsk->stksz); /* %jp{スタック領域のサイズ(バイト数)} */ + _KERNEL_TSK_SET_STK(tcb_ro, stk); /* %jp{スタック領域の先頭番地} */ + _KERNEL_TSK_SET_ISP(tcb_ro, (VB *)stk + pk_ctsk->stksz); /* %jp{スタックポインタ初期値の先頭番地} */ + _KERNEL_TSK_SET_TSKID(tcb_ro, tskid); + _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_DMT); + + + /* %jp{TA_ACT属性があればタスク実行} */ +#if _KERNEL_SPT_TSK_TA_ACT + if ( pk_ctsk->tskatr & TA_ACT ) + { + /* %jp{タスク状態初期化} */ + _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_RDY); + _KERNEL_TSK_SET_TSKPRI(tcb, pk_ctsk->itskpri); + _KERNEL_TSK_SET_TSKBPRI(tcb, pk_ctsk->itskpri); + _KERNEL_TSK_SET_ACTCNT(tcb, 0); + _KERNEL_TSK_SET_WUPCNT(tcb, 0); + _KERNEL_TSK_SET_SUSCNT(tcb, 0); + + /* %jp{コンテキスト生成} */ + _KERNEL_CRE_CTX( + _KERNEL_TSK_GET_CTXCB(tcb), /* %jp{コンテキスト制御ブロック} */ + pk_ctsk->tsksz, /* %jp{タスクのスタック領域サイズ} */ + stk, /* %jp{タスクのスタック領域の先頭番地} */ + (VP)((VB *)stk + pk_ctsk->stksz), /* %jp{スタックポインタの初期値} */ + (FP)_kernel_ent_tsk, /* %jp{コンテキストの開始アドレス} */ + (VP_INT)pk_ctsk->exinf, /* %jp{タスクの拡張情報} */ + (VP_INT)pk_ctsk->task /* %jp{タスクの起動番地} */ + ); + + /* %jp{タスク実行可能状態に設定} */ + _KERNEL_DSP_STA_TSK(_KERNEL_TSK_GET_TSKHDL(tskid, tcb)); + + /* %jp{タスクディスパッチの実行}%en{task dispatch} */ + _KERNEL_DSP_TSK(); + } +#endif + + return E_OK; +} + + +/* end of file */ diff --git a/kernel/source/object/tsk/ref_tsk.c b/kernel/source/object/tsk/ref_tsk.c new file mode 100755 index 0000000..368f373 --- /dev/null +++ b/kernel/source/object/tsk/ref_tsk.c @@ -0,0 +1,80 @@ +/** + * Hyper Operating System V4 Advance + * + * @file wup_tsk.c + * @brief %jp{タスクの起床}%en{Wakeup Task} + * + * @version $Id: ref_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/* タスクの状態参照 */ +ER ref_tsk(ID tskid, T_RTSK *p_rtsk) +{ + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + + if ( tskid == TSK_SELF ) /* %jp{自タスク指定時の変換} */ + { +#if _KERNEL_SPT_REF_TSK_E_ID + if ( _KERNEL_SYS_SNS_CTX() ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + /* %jp{実行中タスクを取得} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + } + else + { +#if _KERNEL_SPT_REF_TSK_E_ID + if ( !_KERNEL_TSK_CHECK_TSKID(tskid) ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_REF_TSK_E_NOEXS + if ( _KERNEL_TSK_CHECK_EXS(tskid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{leave service-call}%jp{サービスコールを出る} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + /* ID番号指定時の変換 */ + tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid); + } + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + p_rtsk->tskstat = _KERNEL_DEC_TTS(_KERNEL_TSK_GET_TSKSTAT(tcb)); /*%jp{タスク状態} */ + p_rtsk->tskpri = _KERNEL_TSK_GET_TSKPRI(tcb); /*%jp{タスクの現在優先度} */ + p_rtsk->tskbpri = _KERNEL_TSK_GET_TSKBPRI(tcb); /*%jp{タスクのベース優先度} */ + p_rtsk->tskwait = _KERNEL_DEC_TTW(_KERNEL_TSK_GET_TSKWAIT(tcb)); /*%jp{待ち要因} */ + p_rtsk->wobjid = _KERNEL_TSK_GET_WOBJID(tcb); /*%jp{待ち対象のオブジェクトのID番号} */ +/* p_rtsk->lefttmo = _KERNEL_TSK_GET_LEFTTMO(tskhdl); */ /*%jp{タイムアウトするまでの時間} */ + p_rtsk->actcnt = _KERNEL_TSK_GET_ACTCNT(tcb); /*%jp{起動要求キューイング回数} */ + p_rtsk->wupcnt = _KERNEL_TSK_GET_WUPCNT(tcb); /*%jp{起床要求キューイング回数} */ + p_rtsk->suscnt = _KERNEL_TSK_GET_SUSCNT(tcb); /*%jp{強制待ち要求ネスト回数} */ + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return E_OK; +} + + +/* end of file */ diff --git a/kernel/source/object/tsk/rel_wai.c b/kernel/source/object/tsk/rel_wai.c new file mode 100755 index 0000000..2bf10ec --- /dev/null +++ b/kernel/source/object/tsk/rel_wai.c @@ -0,0 +1,81 @@ +/** + * Hyper Operating System V4 Advance + * + * @file wup_tsk.c + * @brief %jp{タスクの起床}%en{Wakeup Task} + * + * @version $Id: rel_wai.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +ER rel_wai( + ID tskid) +{ + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + + if ( tskid == TSK_SELF ) /* %jp{自タスク指定時の変換} */ + { +#if _KERNEL_SPT_REL_WAI_E_ID + if ( _KERNEL_SYS_SNS_CTX() ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + /* %jp{実行中タスクを取得} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + } + else + { +#if _KERNEL_SPT_REL_WAI_E_ID + if ( !_KERNEL_TSK_CHECK_TSKID(tskid) ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_REL_WAI_E_NOEXS + if ( _KERNEL_TSK_CHECK_EXS(tskid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{leave service-call}%jp{サービスコールを出る} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + /* ID番号指定時の変換 */ + tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid); + } + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + if ( _KERNEL_TSK_GET_TSKSTAT(tcb) == _KERNEL_TTS_WAI ) + { + /* %jp{待ち解除} */ + _KERNEL_TRM_QUE(tskhdl); + _KERNEL_TSK_SET_ERCD(tcb, E_RLWAI); /* %jp{エラーコード設定} */ + _KERNEL_DSP_WUP_TSK(tskhdl); /* %jp{タスクの待ち解除} */ + + /* タスクディスパッチの実行 */ + _KERNEL_DSP_TSK(); + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return E_OK; +} + + +/* end of file */ diff --git a/kernel/source/object/tsk/slp_tsk.c b/kernel/source/object/tsk/slp_tsk.c new file mode 100755 index 0000000..1bd7ae3 --- /dev/null +++ b/kernel/source/object/tsk/slp_tsk.c @@ -0,0 +1,68 @@ +/** + * Hyper Operating System V4 Advance + * + * @file slp_tsk.c + * @brief %jp{タスクの起床待ち}%en{Sleep Task} + * + * @version $Id: slp_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" + + + +/** %jp{タスクの起床待ち}%en{Sleep Task} + * @retval E_OK %jp{成功} + */ +ER slp_tsk(void) +{ + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + ER ercd; + + + /* %jp{実行中タスクを取得} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + +#if _KERNEL_TCB_WUPCNT + { + _KERNEL_TSK_T_WUPCNT wupcnt; + + /* %jp{起床要求のキューイングをチェック} */ + wupcnt = _KERNEL_TSK_GET_WUPCNT(tcb); + if ( wupcnt > 0 ) + { + _KERNEL_TSK_SET_WUPCNT(tcb, wupcnt - 1); + _KERNEL_LEAVE_SVC(); + return E_OK; /* %jp{キューイングオーバーフロー} */ + } + } +#endif + + /* %jp{タスクを待ち状態にする} */ + _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_WAI); + _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_SLP); + _KERNEL_DSP_WAI_TSK(tskhdl); + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tcb); + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return ercd; +} + + +/* end of file */ diff --git a/kernel/source/object/tsk/tcb2id.c b/kernel/source/object/tsk/tcb2id.c new file mode 100755 index 0000000..59fc44c --- /dev/null +++ b/kernel/source/object/tsk/tcb2id.c @@ -0,0 +1,42 @@ +/** + * Hyper Operating System V4 Advance + * + * @file tcb2id.c + * @brief %jp{TCBアドレスをIDに変換}%en{TCB-address to ID} + * + * @version $Id: tcb2id.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" + + + +#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY /* pointer array */ + + +/** %jp{TCBアドレスをIDに変換}%en{TCB-address to ID} */ +ID _kernel_tsk_tcb2id(_KERNEL_T_TCB *pk_tcb) +{ + ID tskid; + + /* %jp{テーブルを検索} */ + for ( tskid = _KERNEL_TMIN_TSK_ID; tskid <= _KERNEL_TMAX_TSK_ID; tskid++ ) + { + if ( _KERNEL_TSK_ID2TCB(tskid) == pk_tcb ) + { + break; + } + } + + return tskid; +} + +#endif + + + +/* end of file */ diff --git a/kernel/source/object/tsk/tget_que.c b/kernel/source/object/tsk/tget_que.c new file mode 100755 index 0000000..58a9288 --- /dev/null +++ b/kernel/source/object/tsk/tget_que.c @@ -0,0 +1,86 @@ +/** + * Hyper Operating System V4 Advance + * + * @file tget_que.c + * @brief %jp{TCBアドレスをIDに変換}%en{TCB-address to ID} + * + * @version $Id: tget_que.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "core/core.h" +#include "object/semobj.h" +#include "object/flgobj.h" + + + +#if !_KERNEL_TCB_QUE && _KERNEL_TCB_TSKWAIT && _KERNEL_TCB_WOBJID + +_KERNEL_T_QUE *_kernel_tsk_get_que(_KERNEL_T_TSKHDL tskhdl) +{ + switch ( _KERNEL_TSK_GET_TSKWAIT(tskhdl) ) + { +#if _KERNEL_SPT_SEM + case _KERNEL_TTW_SEM: + return _KERNEL_SEM_GET_QUE(_KERNEL_SEM_ID2SEMHDL(_KERNEL_TSK_GET_WOBJID(tskhdl))); +#endif + +#if _KERNEL_SPT_FLG + case _KERNEL_TTW_FLG: + return _KERNEL_FLG_GET_QUE(_KERNEL_FLG_ID2FLGHDL(_KERNEL_TSK_GET_WOBJID(tskhdl))); +#endif + +#if _KERNEL_SPT_DTQ + case _KERNEL_TTW_SDTQ: + return _KERNEL_DTQ_GET_SQUE(_KERNEL_DTQ_ID2DTQHDL(_KERNEL_TSK_GET_WOBJID(tskhdl))); + + case _KERNEL_TTW_RDTQ: + return _KERNEL_DTQ_GET_RQUE(_KERNEL_DTQ_ID2DTQHDL(_KERNEL_TSK_GET_WOBJID(tskhdl))); +#endif + +#if _KERNEL_SPT_MBX + case _KERNEL_TTW_MBX: + return _KERNEL_MBX_GET_QUE(_KERNEL_MBX_ID2MBXHDL(_KERNEL_TSK_GET_WOBJID(tskhdl))); +#endif + +#if _KERNEL_SPT_MTX + case _KERNEL_TTW_MTX: + return _KERNEL_MTX_GET_RQUE(_KERNEL_MTX_ID2MTXHDL(_KERNEL_TSK_GET_WOBJID(tskhdl))); +#endif + +#if _KERNEL_SPT_MBF + case _KERNEL_TTW_SMBF: + break; + + case _KERNEL_TTW_RMBF: + break; +#endif + +#if 0 + case _KERNEL_TTW_CAL: + break; + + case _KERNEL_TTW_ACP: + break; + + case _KERNEL_TTW_RDV: + break; + + case _KERNEL_TTW_MPF: + break; + + case _KERNEL_TTW_MPL: + break; +#endif + } + + return NULL; +} + +#endif + + +/* end of file */ diff --git a/kernel/source/object/tsk/wup_tsk.c b/kernel/source/object/tsk/wup_tsk.c new file mode 100755 index 0000000..bbe5f93 --- /dev/null +++ b/kernel/source/object/tsk/wup_tsk.c @@ -0,0 +1,103 @@ +/** + * Hyper Operating System V4 Advance + * + * @file wup_tsk.c + * @brief %jp{タスクの起床}%en{Wakeup Task} + * + * @version $Id: wup_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" + + + +/** %jp{タスクの起床}%en{Wakeup Task} + * @retval E_OK %jp{成功} + */ +ER wup_tsk( + ID tskid) +{ + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + + if ( tskid == TSK_SELF ) /* %jp{自タスク指定時の変換} */ + { +#if _KERNEL_SPT_WUP_TSK_E_ID + if ( _KERNEL_SYS_SNS_CTX() ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + /* %jp{実行中タスクを取得} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + } + else + { +#if _KERNEL_SPT_WUP_TSK_E_ID + if ( !_KERNEL_TSK_CHECK_TSKID(tskid) ) + { + return E_ID; /* %jp{不正ID番号} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{enter service-call}%jp{サービスコールに入る} */ + + /* %jp{オブジェクト存在チェック} */ +#ifdef _KERNEL_SPT_WUP_TSK_E_NOEXS + if ( !_KERNEL_TSK_CHECK_EXS(tskid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{leave service-call}%jp{サービスコールを出る} */ + return E_NOEXS; /* %jp{オブジェクト未生成} */ + } +#endif + /* ID番号指定時の変換 */ + tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid); + } + + /* %jp{TCB取得} */ + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); + + if ( (_KERNEL_TSK_GET_TSKSTAT(tcb) == _KERNEL_TTS_WAI) && _KERNEL_TSK_GET_TSKWAIT(tcb) == _KERNEL_TTW_SLP ) + { + /* %jp{待ち解除} */ + _KERNEL_TSK_SET_ERCD(tcb, E_OK); /* %jp{エラーコード設定} */ + _KERNEL_DSP_WUP_TSK(tskhdl); /* %jp{タスクの待ち解除} */ + + /* タスクディスパッチの実行 */ + _KERNEL_DSP_TSK(); + } + else + { +#if _KERNEL_TCB_WUPCNT + { + _KERNEL_TSK_T_WUPCNT wupcnt; + + wupcnt = _KERNEL_TSK_GET_WUPCNT(tcb); + + #ifdef _KERNEL_SPT_WUP_TSK_E_QOVR + if ( wupcnt >= _KERNEL_TMAX_WUPCNT ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + return E_QOVR; + } + #endif + + _KERNEL_TSK_SET_WUPCNT(tcb, wupcnt + 1); + } +#endif + } + + _KERNEL_LEAVE_SVC(); /* %jp{サービスコール終了} */ + + return E_OK; +} + + +/* end of file */ diff --git a/sample/h8/h83069/ch38/dbsct.c b/sample/h8/h83069/ch38/dbsct.c new file mode 100755 index 0000000..aa5eb6b --- /dev/null +++ b/sample/h8/h83069/ch38/dbsct.c @@ -0,0 +1,30 @@ +/***********************************************************************/ +/* */ +/* FILE :dbsct.c */ +/* DATE :Wed, Aug 02, 2006 */ +/* DESCRIPTION :Setting of B,R Section */ +/* CPU TYPE :SH7040 */ +/* */ +/* This file is generated by Renesas Project Generator (Ver.4.5). */ +/* */ +/***********************************************************************/ + + + + +#pragma section $DSEC +static const struct { + unsigned char *rom_s; /* 初期化データセクションのROM 上の先頭アドレス */ + unsigned char *rom_e; /* 初期化データセクションのROM 上の最終アドレス */ + unsigned char *ram_s; /* 初期化データセクションのRAM 上の先頭アドレス */ +} DTBL[] = { + { __sectop("D"), __secend("D"), __sectop("R") } +}; + +#pragma section $BSEC +static const struct { + unsigned char *b_s; /* 未初期化データセクションの先頭アドレス */ + unsigned char *b_e; /* 未初期化データセクションの最終アドレス */ +} BTBL[] = { + { __sectop("B"), __secend("B") } +}; diff --git a/sample/h8/h83069/ch38/gmake.mak b/sample/h8/h83069/ch38/gmake.mak new file mode 100755 index 0000000..2caccea --- /dev/null +++ b/sample/h8/h83069/ch38/gmake.mak @@ -0,0 +1,84 @@ + + +TARGET ?= sample.abs + +INC_DIR = ../../../../kernel/include + +# Tools +CC = ch38 +ASM = asm38 +LINK = optlnk +DEPEND = depend +LINT = splint +AWK = gawk + +CFLAGS = -CP=300HA -DEBug -I=$(INC_DIR) +AFLAGS = -CP=300HA -DEBug +LFLAGS = + +OBJS_DIR = objs + +OBJS = $(OBJS_DIR)/main.obj \ + $(OBJS_DIR)/sample.obj \ + $(OBJS_DIR)/ostimer.obj \ + $(OBJS_DIR)/kernel_cfg.obj \ + $(OBJS_DIR)/dbsct.obj \ + $(OBJS_DIR)/startup.obj \ + $(OBJS_DIR)/vcttbl.obj \ + $(OBJS_DIR)/lowlvl.obj \ + $(OBJS_DIR)/lowsrc.obj \ + $(OBJS_DIR)/sbrk.obj \ + + + +OS_LIBS = ../../../../kernel/build/h8/h8300ha/ch38/libhosv4a.lib +OS_CFG = ../../../../cfgrtr/build/gcc/h4acfg-h8300ha.exe + +STD_LIBS = stdlib.lib + +VPATH = .. + +all: mkdir_objs mk_kernel $(TARGET) + + +$(TARGET): $(OBJS) $(STD_LIBS) $(OS_LIBS) + echo rom D=R > $(OBJS_DIR)/subcmd.txt + echo list smp.map >> $(OBJS_DIR)/subcmd.txt + echo -Input=$(OBJS) | sed "s/ /,/g" >> $(OBJS_DIR)/subcmd.txt + echo -LIB=$(OS_LIBS),$(STD_LIBS) >> $(OBJS_DIR)/subcmd.txt + echo "-start=VECTTBL,P,C,C\$$BSEC,C\$$DSEC,D/00,B,R/0200000,S/000FFBF20" >> $(OBJS_DIR)/subcmd.txt + echo -output=$(TARGET) >> $(OBJS_DIR)/subcmd.txt + echo end >> $(OBJS_DIR)/subcmd.txt + echo -input=$(TARGET) >> $(OBJS_DIR)/subcmd.txt + echo form stype >> $(OBJS_DIR)/subcmd.txt + echo output smp.mot >> $(OBJS_DIR)/subcmd.txt + echo -exit >> $(OBJS_DIR)/subcmd.txt + $(LINK) -SU=$(OBJS_DIR)/subcmd.txt + +$(STD_LIBS): + lbg38 -OUTPut=$(STD_LIBS) $(CFLAGS) -REent + +mk_kernel: + make -C ../../../../kernel/build/h8/h8300ha/ch38 -f gmake.mak + +mkdir_objs: + @mkdir -p $(OBJS_DIR) + +clean: + rm -f $(OBJS) $(TARGET) ../kernel_cfg.c ../kernel_id.h + +$(OBJS_DIR)/sample.obj: sample.c ../kernel_id.h + +../kernel_cfg.c ../kernel_id.h: ../system.cfg + cpp -E ../system.cfg ../system.i + $(OS_CFG) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h + + + +$(OBJS_DIR)/%.obj :: %.c + $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst) + +$(OBJS_DIR)/%.obj :: %.src + $(ASM) $(AFLAGS) $< -OB=$@ + + diff --git a/sample/h8/h83069/ch38/lowlvl.src b/sample/h8/h83069/ch38/lowlvl.src new file mode 100755 index 0000000..61f9a7b --- /dev/null +++ b/sample/h8/h83069/ch38/lowlvl.src @@ -0,0 +1,52 @@ +;------------------------------------------------------------------------ +; | +; FILE :lowlvl.src | +; DATE :Mon, Aug 07, 2006 | +; DESCRIPTION :Program of Low level | +; CPU TYPE :H8/ | +; | +; This file is generated by Renesas Project Generator (Ver.4.5). | +; | +;------------------------------------------------------------------------ + + + + + .EXPORT _charput + .EXPORT _charget + +SIM_IO: .EQU H'0000 + + .SECTION P,CODE,ALIGN=2 +;----------------------------------------------------------------------- +; _charput: +;----------------------------------------------------------------------- +_charput: + MOV.B R0L,@IO_BUF + MOV.W #H'0112,R0 + MOV.L #IO_BUF,ER1 + MOV.L ER1,@PARM +; MOV.W #H'0000,E1 +; MOV.W #LWORD PARM,R1 + mov.l #PARM, er1 + JSR @SIM_IO + RTS +;----------------------------------------------------------------------- +; _charget: +;----------------------------------------------------------------------- +_charget: + MOV.W #H'0101,R0 + MOV.W #LWORD IO_BUF,R1 + MOV.W R1,@PARM + MOV.W #H'0000,E1 + MOV.W #LWORD PARM,R1 + JSR @SIM_IO + MOV.B @IO_BUF,R0L + RTS +;----------------------------------------------------------------------- +; I/O Buffer +;----------------------------------------------------------------------- + .SECTION B,DATA,ALIGN=2 +PARM: .RES.L 1 +IO_BUF: .RES.B 1 + .END diff --git a/sample/h8/h83069/ch38/lowsrc.c b/sample/h8/h83069/ch38/lowsrc.c new file mode 100755 index 0000000..b18a428 --- /dev/null +++ b/sample/h8/h83069/ch38/lowsrc.c @@ -0,0 +1,481 @@ +/***********************************************************************/ +/* */ +/* FILE :lowsrc.c */ +/* DATE :Tue, Mar 04, 2003 */ +/* DESCRIPTION :Program of I/O Stream */ +/* CPU TYPE :H8/SH */ +/* */ +/***********************************************************************/ + +// SH・H8共用ファイル + + +#include +#include +#include +#include "lowsrc.h" + +/* H8のみno_float.hをインクルード */ +#if defined( __2000N__ ) || defined( __2600N__ ) || defined( __300HN__ ) || defined( __2000A__ ) || defined( __2600A__ ) || defined( __300HA__ ) || defined( __300__ ) || defined( __300L__ ) +#include +#endif + +/* ファイル番号 */ +#define STDIN 0 /* 標準入力 (コンソール) */ +#define STDOUT 1 /* 標準出力 (コンソール) */ +#define STDERR 2 /* 標準エラー出力 (コンソール) */ + +#define FLMIN 0 /* 最小のファイル番号 */ + +/* ファイルフラグ */ +#define O_RDONLY 0x0001 /* 読み込み専用にオープン。 */ +#define O_WRONLY 0x0002 /* 書き出し専用にオープン。 */ +#define O_RDWR 0x0004 /* 読み書き、両用にオープン。 */ +#define O_CREAT 0x0008 /* ファイルが存在しない場合、新規作成。 */ +#define O_TRUNC 0x0010 /* ファイルが存在する場合、ファイルサイズを0に。*/ +#define O_APPEND 0x0020 /* 次に読み書きを行うファイル内の位置を設定。 */ + /* 0:ファイルの先頭。 1:ファイルの最後。 */ + + +/* 特殊文字コード */ +#define CR 0x0d /* 復帰 */ +#define LF 0x0a /* 改行 */ + +const int _nfiles = IOSTREAM; /* 入出力ファイル数を指定。 */ +struct _iobuf _iob[IOSTREAM]; +unsigned char sml_buf[IOSTREAM]; + + +/* H8ノーマルモード・SH */ +#if defined( __2000N__ ) || defined( __2600N__ ) || defined( __300HN__ ) || defined( _SH1 ) || defined( _SH2 ) || defined( _SH2E ) || defined( _SH3 ) || defined( _SH4 ) +/* 標準入力からの1文字入力処理 */ +extern void charput(char); +/* 標準出力への1文字出力処理 */ +extern char charget(void); +/* ファイルへの1文字出力処理 */ +extern char fcharput(char, unsigned char); +/* ファイルからの1文字入力処理 */ +extern char fcharget(char*, unsigned char); +/* ファイルのオープン */ +extern char fileopen(char*, unsigned char, unsigned char*); +/* ファイルのクローズ */ +extern char fileclose(unsigned char); +/* ファイルポインタの移動 */ +extern char fpseek(unsigned char, long, unsigned char); +/* ファイルポインタの取得 */ +extern char fptell(unsigned char, long*); + +/* H8アドバンストモード */ +#elif defined( __2000A__ ) || defined( __2600A__ ) || defined( __300HA__ ) +/* 標準入力からの1文字入力処理 */ +extern void charput(char); +/* 標準出力への1文字出力処理 */ +extern char charget(void); +/* ファイルへの1文字出力処理 */ +extern char fcharput(char, unsigned char); +/* ファイルからの1文字入力処理 */ +extern char fcharget(char*, unsigned char); +/* ファイルのオープン */ +/* 引数格納レジスタ3指定。 */ +extern char __regparam3 fileopen(char*, unsigned char, unsigned char*); +/* ファイルのクローズ */ +extern char fileclose(unsigned char); +/* ファイルポインタの移動 */ +extern char fpseek(unsigned char, long, unsigned char); +/* ファイルポインタの取得 */ +extern char fptell(unsigned char, long*); + +/* H8300・H8300L */ +#elif defined( __300__ ) || defined( __300L__ ) +/* 標準入力からの1文字入力処理 */ +extern void charput(char); +/* 標準出力への1文字出力処理 */ +extern char charget(void); +/* ファイルへの1文字出力処理 */ +extern char fcharput(char, unsigned char); +/* ファイルからの1文字入力処理 */ +extern char fcharget(char*, unsigned char); +/* ファイルのオープン */ +/* 引数格納レジスタ3指定。 */ +extern char __regparam3 fileopen(char*, unsigned char, unsigned char*); +/* ファイルのクローズ */ +extern char fileclose(unsigned char); +/* ファイルポインタの移動 */ +/* 引数格納レジスタ3指定。 */ +extern char __regparam3 fpseek(unsigned char, long, unsigned char); +/* ファイルポインタの取得 */ +extern char fptell(unsigned char, long*); +#endif + +char flmod[IOSTREAM]; /* オープンしたファイルのモード設定場所 */ + + +/**************************************************************************/ +/* open:file open */ +/* Return value:File number (Pass) */ +/* -1 (Failure) */ +/**************************************************************************/ +open(char *name, /* ファイル名 */ + int mode, /* オープンモード */ + int flg) /* オープンフラグ */ +{ + char rcode = 0; /* fileopen()の戻り値 */ + unsigned char fileno = 0; /* ファイル番号 */ + unsigned char openmode = 0; /* シミュレータ用オープンモード */ + + + if(strcmp(name,"stdin")==0){ /* 標準入力ファイル */ + if((mode&O_RDONLY)==0){ + return -1; + } + flmod[STDIN] = mode; + return STDIN; + } + + else if(strcmp(name,"stdout")==0){ /* 標準出力ファイル */ + if((mode&O_WRONLY)==0){ + return -1; + } + flmod[STDOUT] = mode; + return STDOUT; + } + + else if(strcmp(name,"stderr")==0){ /* 標準エラー出力ファイル */ + if((mode&O_WRONLY)==0){ + return -1; + } + flmod[STDERR] = mode; + return STDERR; + } + + + flg = 0777; /* フラグの設定 */ + + /* ファイル名に従ってモードをチェックし、ファイル番号を返す。 */ + /* fileopen()でオープン処理を行い、得られたファイル番号を返す。 */ + + /* 引数で与えられたオープンモードをシミュレータ用に変換。 */ + + if( mode == O_RDONLY ) /* "r" */ + { + openmode = 0x00; + } + else if( mode == (O_WRONLY | O_CREAT | O_TRUNC) ) /* "w" */ + { + openmode = 0x01; + } + else if( mode == (O_WRONLY | O_CREAT | O_APPEND) ) /* "a" */ + { + openmode = 0x02; + } + else if( mode == O_RDWR ) /* "r+" */ + { + openmode = 0x03; + } + else if( mode == (O_RDWR | O_CREAT | O_TRUNC) ) /* "w+" */ + { + openmode = 0x04; + } + else if( mode == (O_RDWR | O_CREAT | O_APPEND) ) /* "a+" */ + { + openmode = 0x05; + } + else /* 対象外 */ + { + return -1; + } + + rcode=fileopen( name, openmode, &fileno ); + if( rcode==0 ) /* オープン処理成功。 */ + { + flmod[fileno] = mode; /* モードを設定。 */ + if( fileno == 0 ) + { + flmod[fileno] = O_RDONLY; + } + return fileno; /* ファイル番号を返却。 */ + } + else /* オープン処理失敗。 */ + { + return -1; /* エラー。 */ + } +} + +/**************************************************************************/ +/* close:File close */ +/* Return value: 0 (pass) */ +/* -1 (Failure) */ +/**************************************************************************/ +close(int fileno) /* ファイル番号 */ +{ + char rcode = 0; /* fclose()の戻り値 */ + + /* ファイル番号をチェックし、fileclose()でファイルをクローズする。 */ + + /* 最小ファイル番号、最大ファイル番号チェック。 */ + if( (fileno < FLMIN) || (IOSTREAM <= fileno) ) + { + return -1; /* エラー。 */ + } + else + { + if( flmod[fileno] != 0 ) /* ファイルのオープンチェック。 */ + { + rcode = fileclose( fileno ); + if( rcode == 0 ) /* クローズ処理成功。 */ + { + flmod[fileno] = 0; /* ファイルモードのリセット。 */ + return 0; + } + else /* クローズ処理失敗。 */ + { + return -1; /* エラー。 */ + } + } + else /* オープンされていない。 */ + { + return -1; /* エラー。 */ + + } + } +} + +/**************************************************************************/ +/* read:Data read */ +/* Return value:Number of read characters (Pass) */ +/* -1 (Failure) */ +/**************************************************************************/ +read(int fileno, /* ファイル番号 */ + char *buf, /* 転送先バッファアドレス */ + int count) /* 読み込む文字数 */ +{ + unsigned int i; /* カウント用変数 */ + char rcode = 0; /* fcharget()の戻り値 */ + char* tmppt = NULL; /* 先頭アドレスの保持 */ + int datanum = 0; /* 読み込んだデータ数 */ + + /* ファイルのモードをチェックし、一文字づつ読み込みバッファに格納。 */ + + /* 読み込み専用 or 読み込み書き出し両用にオープンされているか判定。 */ + if(flmod[fileno]&O_RDONLY||flmod[fileno]&O_RDWR) + { + /* ファイル番号を比較。 */ + /* 標準入力(stdin)の時 ⇒ charget()をコール。 */ + /* 標準出力(stdout・stderr) ⇒ エラーを返却。 */ + /* それ以外 ⇒ fcharget()をコール。 */ + + if( fileno == STDIN ) /* 標準入力 */ + { + for(i=count; i>0; --i) + { + *buf = charget(); + if( *buf == CR ) /* 改行文字の置き換え。 */ + *buf=LF; + buf++; + } + return count; /* 読み込んだ文字数返却。 */ + } + else if( (fileno == STDOUT) || + (fileno == STDERR) ) /* 標準出力 */ + { + return -1; + } + else /* ファイル入力 */ + { + tmppt = buf; /* 先頭アドレスの保持。 */ + for( i=count; i>0; --i ) + { + rcode = fcharget( buf, fileno ); + if( rcode == 0 ) /* 処理成功 */ + { + if( *buf == CR ) /* 改行文字の置き換え。 */ + { + *buf = LF; + } + datanum++; /* 取得文字数のインクリメント。 */ + buf++; /* 出力先ポインタのインクリメント。*/ + } + else /* EOF検出(-1) */ + { + break; /* 処理終了 */ + } + } + buf = tmppt; /* 先頭アドレスの設定。 */ + } + return datanum; /* 読み込んだ文字数返却。 */ + } + else + { + return -1; /* エラー。 */ + } +} + +/**************************************************************************/ +/* write:Data write */ +/* Return value:Number of write characters (Pass) */ +/* -1 (Failure) */ +/**************************************************************************/ +write(int fileno, /* ファイル番号 */ + char *buf, /* 転送先バッファアドレス */ + int count) /* 書き出し文字数 */ +{ + unsigned int i; /* カウント用変数 */ + char c; /* 出力文字 */ + char rcode = 0; /* fcaharget()戻り値 */ + int datanum = 0; /* 書き出したデータ数 */ + + /* ファイルのモードをチェックし、一文字づつ出力。 */ + + /* 書き出し専用 or 読み込み書き出し両用にオープンされているか判定。 */ + if(flmod[fileno]&O_WRONLY || flmod[fileno]&O_RDWR) + { + /* ファイル番号を比較。 */ + /* 標準出力(stdout・stderr)の時 ⇒ charput()をコール。 */ + /* 標準入力(stdin)の時 ⇒ エラーを返却。 */ + /* それ以外 ⇒ fcharput()をコール。 */ + + if( fileno == STDIN ) /* 標準入力 */ + { + return -1; + } + else if( (fileno == STDOUT) || + (fileno == STDERR) ) /* 標準出力 */ + { + for( i = count; i > 0; --i ) + { + c = *buf++; + charput(c); + } + return count; /* 書き出した文字数返却。 */ + } + else /* ファイル出力 */ + { + for( i = count; i > 0; --i ) + { + c = *buf++; + rcode = fcharput( c, fileno ); + if( rcode != 0 ) /* 処理失敗 */ + { + return -1; + } + datanum++; /* 出力文字数のインクリメント。 */ + } + return datanum; /* 書き出した文字数返却。 */ + } + } + else + { + return -1; /* エラー */ + } +} + +/**************************************************************************/ +/* lseek:Definition of file read/write position */ +/* Return value:Offset from the top of file read/whrte position(Pass) */ +/* -1 (Failure) */ +/* (lseek is not supported in the console input/output) */ +/**************************************************************************/ +long lseek(int fileno, /* ファイル番号 */ + long offset, /* 読み込み/書き出し位置 */ + int base) /* オフセットの起点 */ +{ + char rcode = 0; /* fpseek()の戻り値 */ + long new_offset = 0; /* 新しいオフセット値 */ + + /* ファイル番号を比較。 */ + /* 標準入出力(stdin・stdout・stderr)の時 ⇒ エラーを返却。 */ + /* ファイルの時 ⇒ fpseek()をコール。 */ + /* fpseek() 成功 ⇒ fptell()により、新しいオフセット値の取得。 */ + /* 取得したオフセット値 < 0 ⇒ エラーを返却。 */ + /* それ以外 ⇒ オフセット値返却。 */ + /* fpseek() 失敗 ⇒ エラーを返却。 */ + + if( (fileno == STDIN) || + (fileno == STDOUT) || + (fileno == STDERR) ) /* 標準入出力の場合 */ + { + return -1; /* エラー。 */ + } + else /* 標準入出力以外 */ + { + rcode = fpseek( fileno, offset, base ); + if( rcode == 0 ) /* ポインタ移動処理成功 */ + { + /* fptell()で新しいオフセット値の取得。 */ + rcode = fptell( fileno, &new_offset ); + if( rcode == 0 ) /* オフセット取得成功 */ + { + if( new_offset < 0 ) /* オフセット値判定。 */ + { + return -1; /* エラー。 */ + } + else + { + return new_offset; /* 新しいオフセットの返却。 */ + } + } + else + { + return -1; /* エラー。 */ + } + } + else /* ポインタ移動処理失敗。 */ + { + return -1; /* エラー。 */ + } + } +} + +/****************************************************************************/ +/* _INIT_IOLIB */ +/* Initialize C library Functions, if necessary. */ +/* Define USES_SIMIO on Assembler Option. */ +/****************************************************************************/ +void _INIT_IOLIB(void) +{ +FILE *fp; + + for( fp = _iob; fp < _iob + _nfiles; fp++ ) /* ファイル型データの初期設定 */ + { + fp->_bufptr = NULL; /* バッファへのポインタ */ + fp->_bufcnt = 0; /* バッファカウント */ + fp->_buflen = 0; /* バッファ長 */ + fp->_bufbase = NULL; /* バッファへのベースポインタ */ + fp->_ioflag1 = 0; /* I/Oフラグ */ + fp->_ioflag2 = 0; /* I/Oフラグ */ + fp->_iofd = 0; /* ファイル番号 */ + } + + // 標準入出力用ファイルをオープン。 + // "stdin"・"stdout"・"stderr"は、ファイルが存在しなくても自動生成されます。 + // "stdin"は、実際は"r"でオープンしなくてはならないが、 + // 自動生成するために"w"でオープンした後I/Oフラグに"r"を設定しています。 + if(freopen( "stdin", "r", stdin )==NULL) /* 標準入力ファイルをオープン。 */ + stdin->_ioflag1 = 0xff; /* オープン失敗時のアクセス禁止。 */ + stdin->_ioflag1 = _IOREAD; /* "r"でオープンしたことにします。 */ + stdin->_ioflag1 |= _IOUNBUF; /* データのバッファリングなしに設定。 */ + if(freopen( "stdout", "w", stdout )==NULL) /* 標準出力ファイルをオープン。 */ + stdout->_ioflag1 = 0xff; /* オープン失敗時のアクセス禁止。 */ + stdout->_ioflag1 |= _IOUNBUF; /* オープンのバッファリングなしに設定。 */ + if(freopen( "stderr", "w", stderr )==NULL) /* 標準エラーファイルをオープン。 */ + stderr->_ioflag1 = 0xff; /* オープン失敗時のアクセス禁止。 */ + stderr->_ioflag1 |= _IOUNBUF; +} + +/****************************************************************************/ +/* _CLOSEALL */ +/****************************************************************************/ + +void _CLOSEALL(void) +{ +int i; + + for( i=0; i < _nfiles; i++ ) + { + /* ファイルがオープンしているかチェック。 */ + if( _iob[i]._ioflag1 & (_IOREAD | _IOWRITE | _IORW ) ) + /* ファイルをクローズする。 */ + fclose( & _iob[i] ); + } +} + diff --git a/sample/h8/h83069/ch38/lowsrc.h b/sample/h8/h83069/ch38/lowsrc.h new file mode 100755 index 0000000..2b9167c --- /dev/null +++ b/sample/h8/h83069/ch38/lowsrc.h @@ -0,0 +1,12 @@ +/***********************************************************************/ +/* */ +/* FILE :lowsrc.h */ +/* DATE :Mon, Aug 07, 2006 */ +/* DESCRIPTION :Header file of I/O Stream file */ +/* CPU TYPE :H8/ */ +/* */ +/* This file is generated by Renesas Project Generator (Ver.4.5). */ +/* */ +/***********************************************************************/ +/*Number of I/O Stream*/ +#define IOSTREAM 3 diff --git a/sample/h8/h83069/ch38/sbrk.c b/sample/h8/h83069/ch38/sbrk.c new file mode 100755 index 0000000..1617eb3 --- /dev/null +++ b/sample/h8/h83069/ch38/sbrk.c @@ -0,0 +1,49 @@ +/***********************************************************************/ +/* */ +/* FILE :sbrk.c */ +/* DATE :Mon, Aug 07, 2006 */ +/* DESCRIPTION :Program of sbrk */ +/* CPU TYPE :H8/ */ +/* */ +/* This file is generated by Renesas Project Generator (Ver.4.5). */ +/* */ +/***********************************************************************/ + + + +#include +#include +#include "typedefine.h" +#include "sbrk.h" +_SBYTE *sbrk(size_t); + +//const size_t _sbrk_size= /* Specifies the minimum unit of */ + /* the defined heap area */ + +#pragma pack 2 +static union { + _SWORD dummy; /* 2バイト境界にするためのダミー */ + _SBYTE heap[HEAPSIZE]; /* sbrkで管理する領域の宣言 */ +} heap_area; +#pragma unpack + +static _SBYTE *brk=(_SBYTE *)&heap_area; /* sbrkで割り付けた領域の最終アドレス */ + +/*****************************************************************************/ +/* sbrk:データの書き出し */ +/* リターン値:割り付けた領域の先頭アドレス(成功) */ +/* -1 (失敗) */ +/*****************************************************************************/ +extern _SBYTE *sbrk(size_t size) /* 割り付ける領域のサイズ */ +{ + _SBYTE *p; + if(brk+size > heap_area.heap+HEAPSIZE){ /* 空き領域のチェック */ + p = (_SBYTE *)-1; + } + else { + p = brk; /* 領域の割り付け */ + brk += size; /* 最終アドレスの更新 */ + } + + return p; +} diff --git a/sample/h8/h83069/ch38/sbrk.h b/sample/h8/h83069/ch38/sbrk.h new file mode 100755 index 0000000..aa298c5 --- /dev/null +++ b/sample/h8/h83069/ch38/sbrk.h @@ -0,0 +1,12 @@ +/***********************************************************************/ +/* */ +/* FILE :sbrk.h */ +/* DATE :Mon, Aug 07, 2006 */ +/* DESCRIPTION :Header file of sbrk file */ +/* CPU TYPE :H8/ */ +/* */ +/* This file is generated by Renesas Project Generator (Ver.4.5). */ +/* */ +/***********************************************************************/ +/* size of area managed by sbrk */ +#define HEAPSIZE 0x420 diff --git a/sample/h8/h83069/ch38/startup.src b/sample/h8/h83069/ch38/startup.src new file mode 100755 index 0000000..27aff7e --- /dev/null +++ b/sample/h8/h83069/ch38/startup.src @@ -0,0 +1,22 @@ + + .EXPORT _ResetHandler + .IMPORT __INITSCT + .IMPORT __INIT_IOLIB + .IMPORT _main + + .SECTION P, CODE, ALIGN=2 +_ResetHandler: + mov.l #H'00FFFF00, er7 + jsr @__INITSCT + jsr @__INIT_IOLIB + jsr @_main + sleep + + + + .SECTION S, STACK, ALIGN=2 + .RES.B 1024 + + + .END _ResetHandler + diff --git a/sample/h8/h83069/ch38/typedefine.h b/sample/h8/h83069/ch38/typedefine.h new file mode 100755 index 0000000..d007711 --- /dev/null +++ b/sample/h8/h83069/ch38/typedefine.h @@ -0,0 +1,21 @@ +/***********************************************************************/ +/* */ +/* FILE :typedefine.h */ +/* DATE :Mon, Aug 07, 2006 */ +/* DESCRIPTION :Aliases of Integer Type */ +/* CPU TYPE :H8/ */ +/* */ +/* This file is generated by Renesas Project Generator (Ver.4.5). */ +/* */ +/***********************************************************************/ + + + +typedef signed char _SBYTE; +typedef unsigned char _UBYTE; +typedef signed short _SWORD; +typedef unsigned short _UWORD; +typedef signed int _SINT; +typedef unsigned int _UINT; +typedef signed long _SDWORD; +typedef unsigned long _UDWORD; diff --git a/sample/h8/h83069/ch38/vcttbl.src b/sample/h8/h83069/ch38/vcttbl.src new file mode 100755 index 0000000..4b3675a --- /dev/null +++ b/sample/h8/h83069/ch38/vcttbl.src @@ -0,0 +1,76 @@ + + .IMPORT _ResetHandler + .IMPORT __kernel_vector_012 + .IMPORT __kernel_vector_dmy + + + .SECTION VECTTBL, DATA, ALIGN=4 + +_Vectors: + .DATA.L _ResetHandler ; ベクタ0 リセット + .DATA.L __kernel_vector_dmy ; ベクタ1 + .DATA.L __kernel_vector_dmy ; ベクタ2 + .DATA.L __kernel_vector_dmy ; ベクタ3 + .DATA.L __kernel_vector_dmy ; ベクタ4 + .DATA.L __kernel_vector_dmy ; ベクタ5 + .DATA.L __kernel_vector_dmy ; ベクタ6 + .DATA.L __kernel_vector_dmy ; ベクタ7 NMI + .DATA.L __kernel_vector_dmy ; ベクタ8 TRAP0 + .DATA.L __kernel_vector_dmy ; ベクタ9 TRAP1 + .DATA.L __kernel_vector_dmy ; ベクタ10 TRAP2 + .DATA.L __kernel_vector_dmy ; ベクタ11 TRAP3 + .DATA.L __kernel_vector_012 ; ベクタ12 IRQ0 + .DATA.L __kernel_vector_dmy ; ベクタ13 + .DATA.L __kernel_vector_dmy ; ベクタ14 + .DATA.L __kernel_vector_dmy ; ベクタ15 + .DATA.L __kernel_vector_dmy ; ベクタ16 + .DATA.L __kernel_vector_dmy ; ベクタ17 + .DATA.L __kernel_vector_dmy ; ベクタ18 + .DATA.L __kernel_vector_dmy ; ベクタ19 + .DATA.L __kernel_vector_dmy ; ベクタ20 + .DATA.L __kernel_vector_dmy ; ベクタ21 + .DATA.L __kernel_vector_dmy ; ベクタ22 + .DATA.L __kernel_vector_dmy ; ベクタ23 + .DATA.L __kernel_vector_dmy ; ベクタ24 + .DATA.L __kernel_vector_dmy ; ベクタ25 + .DATA.L __kernel_vector_dmy ; ベクタ26 + .DATA.L __kernel_vector_dmy ; ベクタ27 + .DATA.L __kernel_vector_dmy ; ベクタ28 + .DATA.L __kernel_vector_dmy ; ベクタ29 + .DATA.L __kernel_vector_dmy ; ベクタ30 + .DATA.L __kernel_vector_dmy ; ベクタ31 + .DATA.L __kernel_vector_dmy ; ベクタ32 + .DATA.L __kernel_vector_dmy ; ベクタ33 + .DATA.L __kernel_vector_dmy ; ベクタ34 + .DATA.L __kernel_vector_dmy ; ベクタ35 + .DATA.L __kernel_vector_dmy ; ベクタ36 + .DATA.L __kernel_vector_dmy ; ベクタ37 + .DATA.L __kernel_vector_dmy ; ベクタ38 + .DATA.L __kernel_vector_dmy ; ベクタ39 + .DATA.L __kernel_vector_dmy ; ベクタ40 + .DATA.L __kernel_vector_dmy ; ベクタ41 + .DATA.L __kernel_vector_dmy ; ベクタ42 + .DATA.L __kernel_vector_dmy ; ベクタ43 + .DATA.L __kernel_vector_dmy ; ベクタ44 + .DATA.L __kernel_vector_dmy ; ベクタ45 + .DATA.L __kernel_vector_dmy ; ベクタ46 + .DATA.L __kernel_vector_dmy ; ベクタ47 + .DATA.L __kernel_vector_dmy ; ベクタ48 + .DATA.L __kernel_vector_dmy ; ベクタ49 + .DATA.L __kernel_vector_dmy ; ベクタ50 + .DATA.L __kernel_vector_dmy ; ベクタ51 + .DATA.L __kernel_vector_dmy ; ベクタ52 + .DATA.L __kernel_vector_dmy ; ベクタ53 + .DATA.L __kernel_vector_dmy ; ベクタ54 + .DATA.L __kernel_vector_dmy ; ベクタ55 + .DATA.L __kernel_vector_dmy ; ベクタ56 + .DATA.L __kernel_vector_dmy ; ベクタ57 + .DATA.L __kernel_vector_dmy ; ベクタ58 + .DATA.L __kernel_vector_dmy ; ベクタ59 + .DATA.L __kernel_vector_dmy ; ベクタ60 + .DATA.L __kernel_vector_dmy ; ベクタ61 + .DATA.L __kernel_vector_dmy ; ベクタ62 + .DATA.L __kernel_vector_dmy ; ベクタ63 + + + .END diff --git a/sample/h8/h83069/main.c b/sample/h8/h83069/main.c new file mode 100755 index 0000000..c4591df --- /dev/null +++ b/sample/h8/h83069/main.c @@ -0,0 +1,29 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file main.c + * @brief %jp{メイン関数}%en{main} + * + * @version $Id: main.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "kernel.h" + + +/** %jp{メイン関数} */ +int main() +{ + /** %jp{カーネルの動作開始} */ + vsta_knl(); + + return 0; +} + + +void *_kernel_int_isp = (void *)0x00ffff00; + +/* end of file */ diff --git a/sample/h8/h83069/ostimer.c b/sample/h8/h83069/ostimer.c new file mode 100755 index 0000000..ee6dbcd --- /dev/null +++ b/sample/h8/h83069/ostimer.c @@ -0,0 +1,44 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file ostimer.c + * @brief %jp{OSタイマ}%en{OS timer} + * + * @version $Id: ostimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "kernel.h" +#include "ostimer.h" + + +#define OSTIMER_TIMER_INHNO 12 /**< %jp{割り込みハンドラ番号} */ + + +static void OsTimer_IrqHandler(void); /**< %jp{タイマ割り込みハンドラ} */ + + +/** %jp{OS用タイマ初期化ルーチン} */ +void OsTimer_Initialize(VP_INT exinf) +{ + T_DINH dfinh; + + /* %jp{割り込みハンドラ定義} */ + dfinh.inthdr = (FP)OsTimer_IrqHandler; + def_inh(OSTIMER_TIMER_INHNO, &dfinh); + + /* %jp{タイマ動作開始} */ +} + + +/** %jp{タイマ割り込みハンドラ} */ +void OsTimer_IrqHandler(void) +{ + isig_tim(); +} + + +/* end of file */ diff --git a/sample/h8/h83069/ostimer.h b/sample/h8/h83069/ostimer.h new file mode 100755 index 0000000..26cc6aa --- /dev/null +++ b/sample/h8/h83069/ostimer.h @@ -0,0 +1,33 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file ostimer.c + * @brief %jp{OSタイマ}%en{OS timer} + * + * @version $Id: ostimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef __ostimer_h__ +#define __ostimer_h__ + + +#ifdef __cplusplus +extern "C" { +#endif + +/** %jp{OS用タイマ初期化ルーチン} */ +void OsTimer_Initialize(VP_INT exinf); + +#ifdef __cplusplus +} +#endif + + +#endif /* __ostimer_h__ */ + + +/* end of file */ diff --git a/sample/h8/h83069/sample.c b/sample/h8/h83069/sample.c new file mode 100755 index 0000000..cadfd46 --- /dev/null +++ b/sample/h8/h83069/sample.c @@ -0,0 +1,159 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file sample.c + * @brief %jp{サンプルプログラム}%en{Sample program} + * + * @version $Id: sample.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "kernel.h" +#include "kernel_id.h" + + +#define LEFT(num) ((num) <= 1 ? 5 : (num) - 1) +#define RIGHT(num) ((num) >= 5 ? 1 : (num) + 1) + + +ID mbxid; +ID mpfid; + + +/** %jp{メッセージ構造体} */ +typedef struct t_print_msg +{ + T_MSG msg; + char text[32]; +} T_PRINT_MSG; + + +/** %jp{初期化ハンドラ} */ +void Sample_Initialize(VP_INT exinf) +{ + T_CMPF cmpf; + T_CMBX cmbx; + + /* %jp{固定長メモリプール生成} */ + cmpf.mpfatr = TA_TFIFO; + cmpf.blkcnt = 3; + cmpf.blksz = sizeof(T_PRINT_MSG); + cmpf.mpf = NULL; + mpfid = acre_mpf(&cmpf); + + /* %jp{メールボックス生成} */ + cmbx.mbxatr = TA_TFIFO | TA_TFIFO; + cmbx.maxmpri = 1; + cmbx.mprihd = NULL; + mbxid = acre_mbx(&cmbx); + + /* %jp{タスク起動} */ + act_tsk(TSKID_PRINT); + act_tsk(TSKID_SAMPLE1); + act_tsk(TSKID_SAMPLE2); + act_tsk(TSKID_SAMPLE3); + act_tsk(TSKID_SAMPLE4); + act_tsk(TSKID_SAMPLE5); +} + + +/** %jp{適当な時間待つ} */ +void rand_wait(void) +{ + dly_tsk(10000 /*rand()*/ % 1000 + 1); +} + + +/** %jp{状態表示} */ +void print_state(int num, char *text) +{ + T_PRINT_MSG *msg; + VP mem; + + /* %jp{メモリ取得} */ + get_mpf(mpfid, &mem); + msg = (T_PRINT_MSG *)mem; + + /* %jp{文字列生成} */ +/* sprintf(msg->text, "%d : %s", num, text); */ + + /* %jp{表示タスクに送信} */ + snd_mbx(mbxid, (T_MSG *)msg); +} + + +/** %jp{サンプルタスク} */ +void Sample_Task(VP_INT exinf) +{ + int num; + + num = (int)exinf; + + putchar('a'); + + /* %jp{いわゆる哲学者の食事の問題} */ + for ( ; ; ) + { + /* %jp{適当な時間考える} */ + print_state(num, "thinking"); + rand_wait(); + + /* %jp{左右のフォークを取るまでループ} */ + for ( ; ; ) + { + /* %jp{左から順に取る} */ + wai_sem(LEFT(num)); + if ( pol_sem(RIGHT(num)) == E_OK ) + { + break; /* %jp{両方取れた} */ + } + sig_sem(LEFT(num)); /* %jp{取れなければ離す} */ + + /* %jp{適当な時間待つ} */ + print_state(num, "hungry"); + rand_wait(); + + /* %jp{右から順に取る} */ + wai_sem(RIGHT(num)); + if ( pol_sem(LEFT(num)) == E_OK ) + { + break; /* %jp{両方取れた} */ + } + sig_sem(RIGHT(num)); /* %jp{取れなければ離す} */ + + /* %jp{適当な時間待つ} */ + print_state(num, "hungry"); + rand_wait(); + } + + /* %jp{適当な時間、食べる} */ + print_state(num, "eating"); + rand_wait(); + + /* %jp{フォークを置く} */ + sig_sem(LEFT(num)); + sig_sem(RIGHT(num)); + } +} + + +/** %jp{表示タスク} */ +void Sample_Print(VP_INT exinf) +{ + T_PRINT_MSG *msg; + + for ( ; ; ) + { + rcv_mbx(mbxid, (T_MSG **)&msg); + /* printf("%s\n", msg->text); */ + rel_mpf(mpfid, msg); + } +} + + + +/* end of file */ diff --git a/sample/h8/h83069/sample.h b/sample/h8/h83069/sample.h new file mode 100755 index 0000000..aa5a5cc --- /dev/null +++ b/sample/h8/h83069/sample.h @@ -0,0 +1,35 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file sample.c + * @brief %jp{サンプルプログラム}%en{Sample program} + * + * @version $Id: sample.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef __sample_h__ +#define __sample_h__ + + +#ifdef __cplusplus +extern "C" { +#endif + +void Sample_Initialize(VP_INT exinf); +void Sample_Task(VP_INT exinf); +void Sample_Print(VP_INT exinf); + +#ifdef __cplusplus +} +#endif + + +#endif /* __sample_h__ */ + + +/* end of file */ diff --git a/sample/h8/h83069/system.cfg b/sample/h8/h83069/system.cfg new file mode 100755 index 0000000..2619bb4 --- /dev/null +++ b/sample/h8/h83069/system.cfg @@ -0,0 +1,40 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file system.cfg + * @brief %jp{サンプルのコンフィギュレーション} + * + * @version $Id: system.cfg,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +/* %jp{カーネル独自の設定}%en{kernel} */ +KERNEL_HEP_MEM(65536, NULL); +KERNEL_MAX_TSKID(16); +KERNEL_MAX_SEMID(16); + + +/* %jp{OSタイマの設定}%en{OS timer} */ +INCLUDE("\"ostimer.h\""); +ATT_INI({TA_HLNG, 0, OsTimer_Initialize}); + +/* %jp{サンプル}%en{Sample program} */ +INCLUDE("\"sample.h\""); +ATT_INI({TA_HLNG, 0, Sample_Initialize}); +CRE_TSK(TSKID_PRINT, {TA_HLNG, 1, Sample_Print, 1, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 1024, NULL}); +CRE_SEM(1, {TA_TFIFO, 1, 1}); +CRE_SEM(2, {TA_TFIFO, 1, 1}); +CRE_SEM(3, {TA_TFIFO, 1, 1}); +CRE_SEM(4, {TA_TFIFO, 1, 1}); +CRE_SEM(5, {TA_TFIFO, 1, 1}); + + +/* end of file */ diff --git a/sample/sh/sh7045/gcc/crt0.S b/sample/sh/sh7045/gcc/crt0.S new file mode 100755 index 0000000..4425529 --- /dev/null +++ b/sample/sh/sh7045/gcc/crt0.S @@ -0,0 +1,113 @@ +/* ------------------------------------------------------------------------ */ +/* Hyper Operating System V4 サンプルプログラム */ +/* スタートアップモジュール (日立 SH2 gcc 用) */ +/* */ +/* Copyright (C) 1998-2002 by Project HOS */ +/* http://sourceforge.jp/projects/hos/ */ +/* ------------------------------------------------------------------------ */ + + + .extern _main + .extern _DATA_ROM + .extern _DATA_START + .extern _DATA_END + .extern _BSS_START + .extern _BSS_END + + .global _pwr_reset + .global _man_reset + .global ___main + + + +/************************************************ + リセットハンドラ +************************************************/ + .section .text + .align 4 +_pwr_reset: +_man_reset: + /* DATA領域のコピー */ + mov.l l_data_rom, r0 + mov.l l_data_start, r1 + mov.l l_data_end, r2 + cmp/hs r2, r1 + bt data_end +data_loop: + mov.l @r0+, r3 + mov.l r3, @r1 + add #4, r1 + cmp/hs r2, r1 + bf data_loop +data_end: + + /* BSS領域の初期化 */ + mov.l l_bss_start, r0 + mov.l l_bss_end, r1 + cmp/hs r1, r0 + bt bss_end + mov #0, r2 +bss_loop: + mov.l r2, @r0 + add #4, r0 + cmp/hs r1, r0 + bf bss_loop +bss_end: + + /* main関数の呼び出し */ + mov.l l_main, r8 + jsr @r8 + nop +end_loop: + bra end_loop + nop + + /* __main */ +___main: + rts /* 何もしない */ + nop + + .align 4 +l_data_rom: + .long _DATA_ROM +l_data_start: + .long _DATA_START +l_data_end: + .long _DATA_END +l_bss_start: + .long _BSS_START +l_bss_end: + .long _BSS_END +l_main: + .long _main + + + +/************************************************ + カーネル用スタックポインタ定義 +************************************************/ + .global _kernel_int_sp + .section .rodata + .align 4 +_kernel_int_sp: + .long _stack /* 割り込み時の er7 保存用 */ + + + +/************************************************ + スタック領域 +************************************************/ + .section .stack + .global _stack + + .align 4 +_stack: .long 1 + + + + .end + + +/* ------------------------------------------------------------------------ */ +/* Copyright (C) 1998-2002 by Project HOS */ +/* ------------------------------------------------------------------------ */ diff --git a/sample/sh/sh7045/gcc/gmake.mak b/sample/sh/sh7045/gcc/gmake.mak new file mode 100755 index 0000000..9aed81c --- /dev/null +++ b/sample/sh/sh7045/gcc/gmake.mak @@ -0,0 +1,43 @@ + + +TARGET ?= sample.out + +# Tools +CC = sh-elf-gcc +ASM = sh-elf-gcc +LINK = sh-elf-gcc +DEPEND = sh-elf-gcc -M +LINT = splint +AWK = gawk + + +INC_DIR = ../../../../kernel/include + + +CFLAGS = -c -g -O0 -Wall -std=c89 -I$(INC_DIR) +AFLAGS = -c -g +LFLAGS = -m2 -nostartfiles -Wl,-v,-t,-Map,sample.map,-Tsample.x + +OBJS = vector.o crt0.o kernel_cfg.o sample.o ../../../../kernel/build/sh/sh2/gcc/libhosv4a.a + +all: $(OBJS) + $(LINK) $(LFLAGS) $(OBJS) -o sample.elf + + +vector.o: vector.S + $(CC) $(AFLAGS) vector.S -o vector.o + +crt0.o: crt0.S + $(CC) $(AFLAGS) crt0.S -o crt0.o + +sample.o: sample.c + $(CC) $(CFLAGS) sample.c -o sample.o + +kernel_cfg.o: kernel_cfg.c + $(CC) $(CFLAGS) kernel_cfg.c -o kernel_cfg.o + +kernel_cfg.c: system.cfg + cpp -E system.cfg > system.i + ../../../../cfgrtr/build/gcc/h4acfg-sh2 + + diff --git a/sample/sh/sh7045/gcc/sample.c b/sample/sh/sh7045/gcc/sample.c new file mode 100755 index 0000000..7a9a66c --- /dev/null +++ b/sample/sh/sh7045/gcc/sample.c @@ -0,0 +1,31 @@ +#include + + +#include "kernel.h" + + + +int main() +{ + +/* _kernel_sta_knl(); */ + + return 0; +} + + +void Sample_Initialize(VP_INT exinf) +{ +} + +void Sample_Task1(VP_INT exinf) +{ +} + +void Sample_Task2(VP_INT exinf) +{ +} + +void Sample_Task3(VP_INT exinf) +{ +} diff --git a/sample/sh/sh7045/gcc/sample.h b/sample/sh/sh7045/gcc/sample.h new file mode 100755 index 0000000..8ec9001 --- /dev/null +++ b/sample/sh/sh7045/gcc/sample.h @@ -0,0 +1,6 @@ + + +void Sample_Initialize(VP_INT exinf); +void Sample_Task1(VP_INT exinf); +void Sample_Task2(VP_INT exinf); +void Sample_Task3(VP_INT exinf); diff --git a/sample/sh/sh7045/gcc/sample.x b/sample/sh/sh7045/gcc/sample.x new file mode 100755 index 0000000..e5cea14 --- /dev/null +++ b/sample/sh/sh7045/gcc/sample.x @@ -0,0 +1,47 @@ +OUTPUT_FORMAT("coff-sh") +OUTPUT_ARCH(sh) +MEMORY +{ + vector : o = 0xfffff200, l = 0x00000300 + rom : o = 0x00c00000, l = 0x00020000 + ram : o = 0x00c20000, l = 0x0001fff0 + stack : o = 0x00c3fff0, l = 0x00000010 +} +SECTIONS +{ + .vector : + { + _VECTOR_START = . ; + *(.vector) + } > vector + + .text : + { + _TEXT_START = . ; + *(.vector) + *(.text) + *(.strings) + *(.rodata) + _TEXT_END = . ; + } > rom + .data : AT (ADDR(.text) + SIZEOF(.text)) + { + _DATA_ROM = ADDR(.text) + SIZEOF(.text) ; + _DATA_START = . ; + *(.data) + _DATA_END = . ; + } > ram + .bss : + { + _BSS_START = . ; + *(.bss) + *(COMMON) + _BSS_END = . ; + } > ram + .stack : + { + _STACK_START = . ; + *(.stack); + _STACK_END = . ; + } > stack +} diff --git a/sample/sh/sh7045/gcc/system.cfg b/sample/sh/sh7045/gcc/system.cfg new file mode 100755 index 0000000..6cee763 --- /dev/null +++ b/sample/sh/sh7045/gcc/system.cfg @@ -0,0 +1,9 @@ + +INCLUDE("\"sample.h\""); + +ATT_INI({TA_HLNG, 0, Sample_Initialize}); +CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task1, 1, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task2, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task3, 3, 1024, NULL}); + + diff --git a/sample/sh/sh7045/gcc/vector.S b/sample/sh/sh7045/gcc/vector.S new file mode 100755 index 0000000..d98cc74 --- /dev/null +++ b/sample/sh/sh7045/gcc/vector.S @@ -0,0 +1,333 @@ +/* ------------------------------------------------------------------------ */ +/* Hyper Operating System V4 サンプルプログラム */ +/* 割り込みベクタテーブル (日立 SH2 gcc 用) */ +/* */ +/* Copyright (C) 1998-2002 by Project HOS */ +/* http://sourceforge.jp/projects/hos/ */ +/* ------------------------------------------------------------------------ */ + + + .global _kernel_vecter004 + .global _kernel_vecter005 + .global _kernel_vecter006 + .global _kernel_vecter007 + .global _kernel_vecter008 + .global _kernel_vecter009 + .global _kernel_vecter010 + .global _kernel_vecter011 + .global _kernel_vecter012 + .global _kernel_vecter013 + .global _kernel_vecter014 + .global _kernel_vecter015 + .global _kernel_vecter016 + .global _kernel_vecter017 + .global _kernel_vecter018 + .global _kernel_vecter019 + .global _kernel_vecter020 + .global _kernel_vecter021 + .global _kernel_vecter022 + .global _kernel_vecter023 + .global _kernel_vecter024 + .global _kernel_vecter025 + .global _kernel_vecter026 + .global _kernel_vecter027 + .global _kernel_vecter028 + .global _kernel_vecter029 + .global _kernel_vecter030 + .global _kernel_vecter031 + .global _kernel_vecter032 + .global _kernel_vecter033 + .global _kernel_vecter034 + .global _kernel_vecter035 + .global _kernel_vecter036 + .global _kernel_vecter037 + .global _kernel_vecter038 + .global _kernel_vecter039 + .global _kernel_vecter040 + .global _kernel_vecter041 + .global _kernel_vecter042 + .global _kernel_vecter043 + .global _kernel_vecter044 + .global _kernel_vecter045 + .global _kernel_vecter046 + .global _kernel_vecter047 + .global _kernel_vecter048 + .global _kernel_vecter049 + .global _kernel_vecter050 + .global _kernel_vecter051 + .global _kernel_vecter052 + .global _kernel_vecter053 + .global _kernel_vecter054 + .global _kernel_vecter055 + .global _kernel_vecter056 + .global _kernel_vecter057 + .global _kernel_vecter058 + .global _kernel_vecter059 + .global _kernel_vecter060 + .global _kernel_vecter061 + .global _kernel_vecter062 + .global _kernel_vecter063 + .global _kernel_vecter064 + .global _kernel_vecter065 + .global _kernel_vecter066 + .global _kernel_vecter067 + .global _kernel_vecter068 + .global _kernel_vecter069 + .global _kernel_vecter070 + .global _kernel_vecter071 + .global _kernel_vecter072 + .global _kernel_vecter073 + .global _kernel_vecter074 + .global _kernel_vecter075 + .global _kernel_vecter076 + .global _kernel_vecter077 + .global _kernel_vecter078 + .global _kernel_vecter079 + .global _kernel_vecter080 + .global _kernel_vecter081 + .global _kernel_vecter082 + .global _kernel_vecter083 + .global _kernel_vecter084 + .global _kernel_vecter085 + .global _kernel_vecter086 + .global _kernel_vecter087 + .global _kernel_vecter088 + .global _kernel_vecter089 + .global _kernel_vecter090 + .global _kernel_vecter091 + .global _kernel_vecter092 + .global _kernel_vecter093 + .global _kernel_vecter094 + .global _kernel_vecter095 + .global _kernel_vecter096 + .global _kernel_vecter097 + .global _kernel_vecter098 + .global _kernel_vecter099 + .global _kernel_vecter100 + .global _kernel_vecter101 + .global _kernel_vecter102 + .global _kernel_vecter103 + .global _kernel_vecter104 + .global _kernel_vecter105 + .global _kernel_vecter106 + .global _kernel_vecter107 + .global _kernel_vecter108 + .global _kernel_vecter109 + .global _kernel_vecter110 + .global _kernel_vecter111 + .global _kernel_vecter112 + .global _kernel_vecter113 + .global _kernel_vecter114 + .global _kernel_vecter115 + .global _kernel_vecter116 + .global _kernel_vecter117 + .global _kernel_vecter118 + .global _kernel_vecter119 + .global _kernel_vecter120 + .global _kernel_vecter121 + .global _kernel_vecter122 + .global _kernel_vecter123 + .global _kernel_vecter124 + .global _kernel_vecter125 + .global _kernel_vecter126 + .global _kernel_vecter127 + .global _kernel_vecter128 + .global _kernel_vecter129 + .global _kernel_vecter130 + .global _kernel_vecter131 + .global _kernel_vecter132 + .global _kernel_vecter133 + .global _kernel_vecter134 + .global _kernel_vecter135 + .global _kernel_vecter136 + .global _kernel_vecter137 + .global _kernel_vecter138 + .global _kernel_vecter139 + .global _kernel_vecter140 + .global _kernel_vecter141 + .global _kernel_vecter142 + .global _kernel_vecter143 + .global _kernel_vecter144 + .global _kernel_vecter145 + .global _kernel_vecter146 + .global _kernel_vecter147 + .global _kernel_vecter148 + .global _kernel_vecter149 + .global _kernel_vecter150 + .global _kernel_vecter151 + .global _kernel_vecter152 + .global _kernel_vecter153 + .global _kernel_vecter154 + .global _kernel_vecter155 + .global _kernel_vecter156 + + + + .section .vector + + .long _pwr_reset /* パワーオンリセット */ + .long _STACK_END + .long _man_reset /* マニュアルリセット */ + .long _STACK_END + .long _kernel_vecter004 + .long _kernel_vecter005 + .long _kernel_vecter006 + .long _kernel_vecter007 + .long _kernel_vecter008 + .long _kernel_vecter009 + .long _kernel_vecter010 + .long _kernel_vecter011 + .long _kernel_vecter012 + .long _kernel_vecter013 + .long _kernel_vecter014 + .long _kernel_vecter015 + .long _kernel_vecter016 + .long _kernel_vecter017 + .long _kernel_vecter018 + .long _kernel_vecter019 + .long _kernel_vecter020 + .long _kernel_vecter021 + .long _kernel_vecter022 + .long _kernel_vecter023 + .long _kernel_vecter024 + .long _kernel_vecter025 + .long _kernel_vecter026 + .long _kernel_vecter027 + .long _kernel_vecter028 + .long _kernel_vecter029 + .long _kernel_vecter030 + .long _kernel_vecter031 + .long _kernel_vecter032 + .long _kernel_vecter033 + .long _kernel_vecter034 + .long _kernel_vecter035 + .long _kernel_vecter036 + .long _kernel_vecter037 + .long _kernel_vecter038 + .long _kernel_vecter039 + .long _kernel_vecter040 + .long _kernel_vecter041 + .long _kernel_vecter042 + .long _kernel_vecter043 + .long _kernel_vecter044 + .long _kernel_vecter045 + .long _kernel_vecter046 + .long _kernel_vecter047 + .long _kernel_vecter048 + .long _kernel_vecter049 + .long _kernel_vecter050 + .long _kernel_vecter051 + .long _kernel_vecter052 + .long _kernel_vecter053 + .long _kernel_vecter054 + .long _kernel_vecter055 + .long _kernel_vecter056 + .long _kernel_vecter057 + .long _kernel_vecter058 + .long _kernel_vecter059 + .long _kernel_vecter060 + .long _kernel_vecter061 + .long _kernel_vecter062 + .long _kernel_vecter063 + .long _kernel_vecter064 + .long _kernel_vecter065 + .long _kernel_vecter066 + .long _kernel_vecter067 + .long _kernel_vecter068 + .long _kernel_vecter069 + .long _kernel_vecter070 + .long _kernel_vecter071 + .long _kernel_vecter072 + .long _kernel_vecter073 + .long _kernel_vecter074 + .long _kernel_vecter075 + .long _kernel_vecter076 + .long _kernel_vecter077 + .long _kernel_vecter078 + .long _kernel_vecter079 + .long _kernel_vecter080 + .long _kernel_vecter081 + .long _kernel_vecter082 + .long _kernel_vecter083 + .long _kernel_vecter084 + .long _kernel_vecter085 + .long _kernel_vecter086 + .long _kernel_vecter087 + .long _kernel_vecter088 + .long _kernel_vecter089 + .long _kernel_vecter090 + .long _kernel_vecter091 + .long _kernel_vecter092 + .long _kernel_vecter093 + .long _kernel_vecter094 + .long _kernel_vecter095 + .long _kernel_vecter096 + .long _kernel_vecter097 + .long _kernel_vecter098 + .long _kernel_vecter099 + .long _kernel_vecter100 + .long _kernel_vecter101 + .long _kernel_vecter102 + .long _kernel_vecter103 + .long _kernel_vecter104 + .long _kernel_vecter105 + .long _kernel_vecter106 + .long _kernel_vecter107 + .long _kernel_vecter108 + .long _kernel_vecter109 + .long _kernel_vecter110 + .long _kernel_vecter111 + .long _kernel_vecter112 + .long _kernel_vecter113 + .long _kernel_vecter114 + .long _kernel_vecter115 + .long _kernel_vecter116 + .long _kernel_vecter117 + .long _kernel_vecter118 + .long _kernel_vecter119 + .long _kernel_vecter120 + .long _kernel_vecter121 + .long _kernel_vecter122 + .long _kernel_vecter123 + .long _kernel_vecter124 + .long _kernel_vecter125 + .long _kernel_vecter126 + .long _kernel_vecter127 + .long _kernel_vecter128 + .long _kernel_vecter129 + .long _kernel_vecter130 + .long _kernel_vecter131 + .long _kernel_vecter132 + .long _kernel_vecter133 + .long _kernel_vecter134 + .long _kernel_vecter135 + .long _kernel_vecter136 + .long _kernel_vecter137 + .long _kernel_vecter138 + .long _kernel_vecter139 + .long _kernel_vecter140 + .long _kernel_vecter141 + .long _kernel_vecter142 + .long _kernel_vecter143 + .long _kernel_vecter144 + .long _kernel_vecter145 + .long _kernel_vecter146 + .long _kernel_vecter147 + .long _kernel_vecter148 + .long _kernel_vecter149 + .long _kernel_vecter150 + .long _kernel_vecter151 + .long _kernel_vecter152 + .long _kernel_vecter153 + .long _kernel_vecter154 + .long _kernel_vecter155 + .long _kernel_vecter156 + + + + .end + + +/* ------------------------------------------------------------------------ */ +/* Copyright (C) 1998-2002 by Project HOS */ +/* ------------------------------------------------------------------------ */ diff --git a/sample/sh/sh7144/main.c b/sample/sh/sh7144/main.c new file mode 100755 index 0000000..a05b33c --- /dev/null +++ b/sample/sh/sh7144/main.c @@ -0,0 +1,27 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file main.c + * @brief %jp{メイン関数}%en{main} + * + * @version $Id: main.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "kernel.h" + + +/** %jp{メイン関数} */ +int main() +{ + /** %jp{カーネルの動作開始} */ + vsta_knl(); + + return 0; +} + + +/* end of file */ diff --git a/sample/sh/sh7144/ostimer.c b/sample/sh/sh7144/ostimer.c new file mode 100755 index 0000000..e53e761 --- /dev/null +++ b/sample/sh/sh7144/ostimer.c @@ -0,0 +1,57 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file ostimer.c + * @brief %jp{OSタイマ}%en{OS timer} + * + * @version $Id: ostimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "kernel.h" +#include "ostimer.h" +#include "regs_sh7144.h" + + +#define INHNO_OSTIMER 144 /**< %jp{割り込みハンドラ番号} */ +#define PERIPHERAL_CLOCK (24000000UL) /**< %jp{ペリフェラルクロック(24MHz)} */ + + +static void OsTimer_IrqHandler(void); /**< %jp{タイマ割り込みハンドラ} */ + + +/** %jp{OS用タイマ初期化ルーチン} */ +void OsTimer_Initialize(VP_INT exinf) +{ + T_DINH dfinh; + + /* %jp{割り込みハンドラ定義} */ + dfinh.inthdr = (FP)OsTimer_IrqHandler; + def_inh(INHNO_OSTIMER, &dfinh); + + /* %jp{タイマ動作開始} */ + *REG_STANDBY_MSTCR2 &= 0xefff; + *REG_CMT_CMSTR &= 0xfffe; /* %jp{動作停止} */ + *REG_CMT0_CMCNT = 0x0000; /* %jp{カウンタクリア} */ + *REG_CMT0_CMCOR = (PERIPHERAL_CLOCK / 128) / 1000; /* %jp{1msに設定} */ + *REG_CMT0_CMCSR = 0x0042; /* %jp{128分周に設定} */ + *REG_CMT_CMSTR |= 0x0001; /* %jp{動作開始} */ + + /* %jp{割り込み許可} */ + *REG_INTC_IPRG = ((*REG_INTC_IPRG & 0xff0f) | 0x0010); +} + + +/** %jp{タイマ割り込みハンドラ} */ +void OsTimer_IrqHandler(void) +{ + *REG_CMT0_CMCSR &= 0xff7f; + + isig_tim(); +} + + +/* end of file */ diff --git a/sample/sh/sh7144/ostimer.h b/sample/sh/sh7144/ostimer.h new file mode 100755 index 0000000..26cc6aa --- /dev/null +++ b/sample/sh/sh7144/ostimer.h @@ -0,0 +1,33 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file ostimer.c + * @brief %jp{OSタイマ}%en{OS timer} + * + * @version $Id: ostimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef __ostimer_h__ +#define __ostimer_h__ + + +#ifdef __cplusplus +extern "C" { +#endif + +/** %jp{OS用タイマ初期化ルーチン} */ +void OsTimer_Initialize(VP_INT exinf); + +#ifdef __cplusplus +} +#endif + + +#endif /* __ostimer_h__ */ + + +/* end of file */ diff --git a/sample/sh/sh7144/regs_sh7144.h b/sample/sh/sh7144/regs_sh7144.h new file mode 100755 index 0000000..e7c9771 --- /dev/null +++ b/sample/sh/sh7144/regs_sh7144.h @@ -0,0 +1,284 @@ +/* SH7144 レジスタ定義ファイル */ + + + +#ifndef __sh7144_regs_h__ +#define __sh7144_regs_h__ + + +/* SCI0 */ +#define REG_SCI0_SMR ((volatile UB*)0xffff81a0) /* シリアルモードレジスタ_0 */ +#define REG_SCI0_BRR ((volatile UB*)0xffff81a1) /* ビットレートレジスタ_0 */ +#define REG_SCI0_SCR ((volatile UB*)0xffff81a2) /* シリアルコントロールレジスタ_0 */ +#define REG_SCI0_TDR ((volatile UB*)0xffff81a3) /* トランスミットデータレジスタ_0 */ +#define REG_SCI0_SSR ((volatile UB*)0xffff81a4) /* シリアルステータスレジスタ_0 */ +#define REG_SCI0_RDR ((volatile UB*)0xffff81a5) /* レシーブデータレジスタ_0 */ +#define REG_SCI0_SDCR ((volatile UB*)0xffff81a6) /* シリアルディレクションコントロールレジスタ_0 */ + +/* SCI1 */ +#define REG_SCI1_SMR ((volatile UB*)0xffff81b0) /* シリアルモードレジスタ_1 */ +#define REG_SCI1_BRR ((volatile UB*)0xffff81b1) /* ビットレートレジスタ_1 */ +#define REG_SCI1_SCR ((volatile UB*)0xffff81b2) /* シリアルコントロールレジスタ_1 */ +#define REG_SCI1_TDR ((volatile UB*)0xffff81b3) /* トランスミットデータレジスタ_1 */ +#define REG_SCI1_SSR ((volatile UB*)0xffff81b4) /* シリアルステータスレジスタ_1 */ +#define REG_SCI1_RDR ((volatile UB*)0xffff81b5) /* レシーブデータレジスタ_1 */ +#define REG_SCI1_SDCR ((volatile UB*)0xffff81b6) /* シリアルディレクションコントロールレジスタ_1 */ + +/* SCI2 */ +#define REG_SCI2_SMR ((volatile UB*)0xffff81c0) /* シリアルモードレジスタ_2 */ +#define REG_SCI2_BRR ((volatile UB*)0xffff81c1) /* ビットレートレジスタ_2 */ +#define REG_SCI2_SCR ((volatile UB*)0xffff81c2) /* シリアルコントロールレジスタ_2 */ +#define REG_SCI2_TDR ((volatile UB*)0xffff81c3) /* トランスミットデータレジスタ_2 */ +#define REG_SCI2_SSR ((volatile UB*)0xffff81c4) /* シリアルステータスレジスタ_2 */ +#define REG_SCI2_RDR ((volatile UB*)0xffff81c5) /* レシーブデータレジスタ_2 */ +#define REG_SCI2_SDCR ((volatile UB*)0xffff81c6) /* シリアルディレクションコントロールレジスタ_2 */ + +/* SCI3 */ +#define REG_SCI3_SMR ((volatile UB*)0xffff81d0) /* シリアルモードレジスタ_3 */ +#define REG_SCI3_BRR ((volatile UB*)0xffff81d1) /* ビットレートレジスタ_3 */ +#define REG_SCI3_SCR ((volatile UB*)0xffff81d2) /* シリアルコントロールレジスタ_3 */ +#define REG_SCI3_TDR ((volatile UB*)0xffff81d3) /* トランスミットデータレジスタ_3 */ +#define REG_SCI3_SSR ((volatile UB*)0xffff81d4) /* シリアルステータスレジスタ_3 */ +#define REG_SCI3_RDR ((volatile UB*)0xffff81d5) /* レシーブデータレジスタ_3 */ +#define REG_SCI3_SDCR ((volatile UB*)0xffff81d6) /* シリアルディレクションコントロールレジスタ_3 */ + +/* MTU 3,4 */ +#define REG_MTU3_TCR ((volatile UB*)0xffff8200) /* タイマコントロールレジスタ_3 */ +#define REG_MTU4_TCR ((volatile UB*)0xffff8201) /* タイマコントロールレジスタ_4 */ +#define REG_MTU3_TMDR ((volatile UB*)0xffff8202) /* タイマモードレジスタ_3 */ +#define REG_MTU4_TMDR ((volatile UB*)0xffff8203) /* タイマモードレジスタ_4 */ +#define REG_MTU3_TIORH ((volatile UB*)0xffff8204) /* タイマI/O コントロールレジスタH_3 */ +#define REG_MTU3_TIORL ((volatile UB*)0xffff8205) /* タイマI/O コントロールレジスタL_3 */ +#define REG_MTU4_TIORH ((volatile UB*)0xffff8206) /* タイマI/O コントロールレジスタH_4 */ +#define REG_MTU4_TIORL ((volatile UB*)0xffff8207) /* タイマI/O コントロールレジスタL_4 */ +#define REG_MTU3_TIER ((volatile UB*)0xffff8208) /* タイマインタラプトイネーブルレジスタ_3 */ +#define REG_MTU4_TIER ((volatile UB*)0xffff8209) /* タイマインタラプトイネーブルレジスタ_4 */ +#define REG_MTU_TOER ((volatile UB*)0xffff820a) /* タイマアウトプットマスタイネーブルレジスタ */ +#define REG_MTU_TOCR ((volatile UB*)0xffff820b) /* タイマアウトプットコントロールレジスタ */ +#define REG_MTU_TGCR ((volatile UB*)0xffff820d) /* タイマゲートコントロールレジスタ */ +#define REG_MTU3_TCNT ((volatile UH*)0xffff8210) /* タイマカウンタ_3 */ +#define REG_MTU4_TCNT ((volatile UH*)0xffff8212) /* タイマカウンタ_4 */ +#define REG_MTU_TCDR ((volatile UH*)0xffff8214) /* タイマ周期データレジスタ */ +#define REG_MTU_TDDR ((volatile UH*)0xffff8216) /* タイマデッドタイムデータレジスタ */ +#define REG_MTU3_TGRA ((volatile UH*)0xffff8218) /* タイマジェネラルレジスタA_3 */ +#define REG_MTU3_TGRB ((volatile UH*)0xffff821a) /* タイマジェネラルレジスタB_3 */ +#define REG_MTU4_TGRA ((volatile UH*)0xffff821c) /* タイマジェネラルレジスタA_4 */ +#define REG_MTU4_TGRB ((volatile UH*)0xffff821e) /* タイマジェネラルレジスタB_4 */ +#define REG_MTU_TCNTS ((volatile UH*)0xffff8220) /* タイマサブカウンタ */ +#define REG_MTU_TCBR ((volatile UH*)0xffff8222) /* タイマ周期バッファレジスタ */ +#define REG_MTU3_TGRC ((volatile UH*)0xffff8224) /* タイマジェネラルレジスタC_3 */ +#define REG_MTU3_TGRD ((volatile UH*)0xffff8226) /* タイマジェネラルレジスタD_3 */ +#define REG_MTU4_TGRC ((volatile UH*)0xffff8228) /* タイマジェネラルレジスタC_4 */ +#define REG_MTU4_TGRD ((volatile UH*)0xffff822a) /* タイマジェネラルレジスタD_4 */ +#define REG_MTU3_TSR ((volatile UB*)0xffff822c) /* タイマステータスレジスタ_3 */ +#define REG_MTU4_TSR ((volatile UB*)0xffff822d) /* タイマステータスレジスタ_4 */ + +/* MTU(common) */ +#define REG_MTU_TSTR ((volatile UB*)0xffff8240) /* タイマスタートレジスタ */ +#define REG_MTU_TSYR ((volatile UB*)0xffff8241) /* タイマシンクロレジスタ */ + +/* MTU0 */ +#define REG_MTU0_TCR ((volatile UB*)0xffff8260) /* タイマコントロールレジスタ_0 */ +#define REG_MTU0_TMDR ((volatile UB*)0xffff8261) /* タイマモードレジスタ_0 */ +#define REG_MTU0_TIORH ((volatile UB*)0xffff8262) /* タイマI/OコントロールレジスタH_0 */ +#define REG_MTU0_TIORL ((volatile UB*)0xffff8263) /* タイマI/OコントロールレジスタL_0 */ +#define REG_MTU0_TIER ((volatile UB*)0xffff8264) /* タイマインタラプトイネーブルレジスタ_0 */ +#define REG_MTU0_TSR ((volatile UB*)0xffff8265) /* タイマステータスレジスタ_0 */ +#define REG_MTU0_TCNT ((volatile UH*)0xffff8266) /* タイマカウンタ_0 */ +#define REG_MTU0_TGRA ((volatile UH*)0xffff8268) /* タイマジェネラルレジスタA_0 */ +#define REG_MTU0_TGRB ((volatile UH*)0xffff826a) /* タイマジェネラルレジスタB_0 */ +#define REG_MTU0_TGRC ((volatile UH*)0xffff826c) /* タイマジェネラルレジスタC_0 */ +#define REG_MTU0_TGRD ((volatile UH*)0xffff826e) /* タイマジェネラルレジスタD_0 */ + +/* MTU1 */ +#define REG_MTU1_TCR ((volatile UB*)0xffff8280) /* タイマコントロールレジスタ_1 */ +#define REG_MTU1_TMDR ((volatile UB*)0xffff8281) /* タイマモードレジスタ_1 */ +#define REG_MTU1_TIOR ((volatile UB*)0xffff8282) /* タイマI/Oコントロールレジスタ_1 */ +#define REG_MTU1_TIER ((volatile UB*)0xffff8284) /* タイマインタラプトイネーブルレジスタ_1 */ +#define REG_MTU1_TSR ((volatile UB*)0xffff8285) /* タイマステータスレジスタ_1 */ +#define REG_MTU1_TCNT ((volatile UH*)0xffff8286) /* タイマカウンタ_1 */ +#define REG_MTU1_TGRA ((volatile UH*)0xffff8288) /* タイマジェネラルレジスタA_1 */ +#define REG_MTU1_TGRB ((volatile UH*)0xffff828a) /* タイマジェネラルレジスタB_1 */ + +/* MTU2 */ +#define REG_MTU2_TCR ((volatile UB*)0xffff82a0) /* タイマコントロールレジスタ_2 */ +#define REG_MTU2_TMDR ((volatile UB*)0xffff82a1) /* タイマモードレジスタ_2 */ +#define REG_MTU2_TIOR ((volatile UB*)0xffff82a2) /* タイマI/O コントロールレジスタ_2 */ +#define REG_MTU2_TIER ((volatile UB*)0xffff82a4) /* タイマインタラプトイネーブルレジスタ_2 */ +#define REG_MTU2_TSR ((volatile UB*)0xffff82a5) /* タイマステータスレジスタ_2 */ +#define REG_MTU2_TCNT ((volatile UH*)0xffff82a6) /* タイマカウンタ_2 */ +#define REG_MTU2_TGRA ((volatile UH*)0xffff82a8) /* タイマジェネラルレジスタA_2 */ +#define REG_MTU2_TGRB ((volatile UH*)0xffff82aa) /* タイマジェネラルレジスタB_2 */ + +/* INTC */ +#define REG_INTC_IPRA ((volatile UH*)0xffff8348) /* インタラプトプライオリティレジスタA */ +#define REG_INTC_IPRB ((volatile UH*)0xffff834a) /* インタラプトプライオリティレジスタB */ +#define REG_INTC_IPRC ((volatile UH*)0xffff834c) /* インタラプトプライオリティレジスタC */ +#define REG_INTC_IPRD ((volatile UH*)0xffff834e) /* インタラプトプライオリティレジスタD */ +#define REG_INTC_IPRE ((volatile UH*)0xffff8350) /* インタラプトプライオリティレジスタE */ +#define REG_INTC_IPRF ((volatile UH*)0xffff8352) /* インタラプトプライオリティレジスタF */ +#define REG_INTC_IPRG ((volatile UH*)0xffff8354) /* インタラプトプライオリティレジスタG */ +#define REG_INTC_IPRH ((volatile UH*)0xffff8356) /* インタラプトプライオリティレジスタH */ +#define REG_INTC_ICR1 ((volatile UH*)0xffff8358) /* 割り込みコントロールレジスタ1 */ +#define REG_INTC_ISR ((volatile UH*)0xffff835a) /* IRQステータスレジスタ */ +#define REG_INTC_IPRI ((volatile UH*)0xffff835c) /* インタラプトプライオリティレジスタI */ +#define REG_INTC_IPRJ ((volatile UH*)0xffff835e) /* インタラプトプライオリティレジスタJ */ +#define REG_INTC_ICR2 ((volatile UH*)0xffff8366) /* 割り込みコントロールレジスタ2 */ + +/* I/O, PFC (port-A) */ +#define REG_PA_DR ((volatile UW*)0xffff8380) /* ポートA データレジスタ(H/L) */ +#define REG_PA_DRH ((volatile UH*)0xffff8380) /* ポートA データレジスタH */ +#define REG_PA_DRL ((volatile UH*)0xffff8382) /* ポートA データレジスタL */ +#define REG_PFC_PAIORH ((volatile UH*)0xffff8384) /* ポートA IOレジスタH */ +#define REG_PFC_PAIORL ((volatile UH*)0xffff8386) /* ポートA IOレジスタL */ +#define REG_PFC_PACRH ((volatile UH*)0xffff8388) /* ポートAコントロールレジスタH */ +#define REG_PFC_PACRL1 ((volatile UH*)0xffff8388) /* ポートAコントロールレジスタL1 */ +#define REG_PFC_PACRL2 ((volatile UH*)0xffff8388) /* ポートAコントロールレジスタL2 */ + +/* I/O, PFC (port-B, C) */ +#define REG_PB_DR ((volatile UH*)0xffff8388) /* ポートB データレジスタ */ +#define REG_PC_DR ((volatile UH*)0xffff8388) /* ポートC データレジスタ */ +#define REG_PFC_PBIOR ((volatile UH*)0xffff8394) /* ポートB IOレジスタ */ +#define REG_PFC_PCIOR ((volatile UH*)0xffff8396) /* ポートC IOレジスタ */ +#define REG_PFC_PBCR1 ((volatile UH*)0xffff8398) /* ポートBコントロールレジスタ1 */ +#define REG_PFC_PBCR2 ((volatile UH*)0xffff839a) /* ポートBコントロールレジスタ2 */ +#define REG_PFC_PCCR ((volatile UH*)0xffff839c) /* ポートCコントロールレジスタ2 */ + +/* I/O, PFC (port-D) */ +#define REG_PD_DR ((volatile UW*)0xffff83a0) /* ポートD・データレジスタ(H/L) */ +#define REG_PD_DRH ((volatile UH*)0xffff83a0) /* ポートD・データレジスタH */ +#define REG_PD_DRL ((volatile UH*)0xffff83a2) /* ポートD・データレジスタL */ +#define REG_PFC_PDIORH ((volatile UH*)0xffff83a4) /* ポートD・IOレジスタH */ +#define REG_PFC_PDIORL ((volatile UH*)0xffff83a6) /* ポートD・IOレジスタL */ +#define REG_PFC_PDCRH1 ((volatile UH*)0xffff83a8) /* ポートDコントロールレジスタH1 */ +#define REG_PFC_PDCRH2 ((volatile UH*)0xffff83aa) /* ポートDコントロールレジスタH2 */ +#define REG_PFC_PDCRL1 ((volatile UH*)0xffff83ac) /* ポートDコントロールレジスタL1 */ +#define REG_PFC_PDCRL2 ((volatile UH*)0xffff83ae) /* ポートDコントロールレジスタL2 */ + +/* I/O, PFC (port-E, F) */ +#define REG_PE_DRL ((volatile UH*)0xffff83b0) /* ポートE データレジスタL */ +#define REG_PF_DR ((volatile UB*)0xffff83b3) /* ポートF データレジスタ */ +#define REG_PFC_PEIORL ((volatile UH*)0xffff83b4) /* ポートE IO レジスタL */ +#define REG_PFC_PECRL1 ((volatile UH*)0xffff83b8) /* ポートE コントロールレジスタL1 */ +#define REG_PFC_PECRL2 ((volatile UH*)0xffff83ba) /* ポートE コントロールレジスタL2 */ + +/* POE */ +#define REG_POE_ICSR1 ((volatile UH*)0xffff83c0) /* 入力レベルコントロール/ステータスレジスタ1 */ +#define REG_POE_OCSR ((volatile UH*)0xffff83c2) /* 出力レベルコントロール/ステータスレジスタ */ + +/* CMT */ +#define REG_CMT_CMSTR ((volatile UH*)0xffff83d0) /* コンペアマッチタイマスタートレジスタ */ +#define REG_CMT0_CMCSR ((volatile UH*)0xffff83d2) /* コンペアマッチタイマコントロール/ステータスレジスタ_0 */ +#define REG_CMT0_CMCNT ((volatile UH*)0xffff83d4) /* コンペアマッチタイマカウンタ_0 */ +#define REG_CMT0_CMCOR ((volatile UH*)0xffff83d6) /* コンペアマッチタイマコンスタントレジスタ_0 */ +#define REG_CMT1_CMCSR ((volatile UH*)0xffff83d8) /* コンペアマッチタイマコントロール/ステータスレジスタ_1 */ +#define REG_CMT1_CMCNT ((volatile UH*)0xffff83da) /* コンペアマッチタイマカウンタ_1 */ +#define REG_CMT1_CMCOR ((volatile UH*)0xffff83dc) /* コンペアマッチタイマコンスタントレジスタ_1 */ + +/* AD */ +#define REG_AD0_ADDR0 ((volatile UH*)0xffff8420) /* A/Dデータレジスタ0 */ +#define REG_AD0_ADDR1 ((volatile UH*)0xffff8422) /* A/Dデータレジスタ1 */ +#define REG_AD0_ADDR2 ((volatile UH*)0xffff8424) /* A/Dデータレジスタ2 */ +#define REG_AD0_ADDR3 ((volatile UH*)0xffff8426) /* A/Dデータレジスタ3 */ +#define REG_AD1_ADDR4 ((volatile UH*)0xffff8428) /* A/Dデータレジスタ4 */ +#define REG_AD1_ADDR5 ((volatile UH*)0xffff842a) /* A/Dデータレジスタ5 */ +#define REG_AD1_ADDR6 ((volatile UH*)0xffff842c) /* A/Dデータレジスタ6 */ +#define REG_AD1_ADDR7 ((volatile UH*)0xffff842e) /* A/Dデータレジスタ7 */ +#define REG_AD0_ADCSR ((volatile UB*)0xffff8480) /* A/Dコントロール/ステータスレジスタ_0 */ +#define REG_AD1_ADCSR ((volatile UB*)0xffff8481) /* A/Dコントロール/ステータスレジスタ_1 */ +#define REG_AD0_ADCR ((volatile UB*)0xffff8488) /* A/Dコントロールレジスタ_0 */ +#define REG_AD1_ADCR ((volatile UB*)0xffff8489) /* A/Dコントロールレジスタ_1 */ + +/* FLASH */ +#define REG_FLASH_FLMCR1 ((volatile UB*)0xffff8580) /* フラッシュメモリコントロールレジスタ1 */ +#define REG_FLASH_FLMCR2 ((volatile UB*)0xffff8581) /* フラッシュメモリコントロールレジスタ2 */ +#define REG_FLASH_EBR1 ((volatile UB*)0xffff8582) /* 消去ブロック指定レジスタ1 */ +#define REG_FLASH_EBR2 ((volatile UB*)0xffff8583) /* 消去ブロック指定レジスタ2 */ + +/* UBC */ +#define REG_UBC_UBARH ((volatile UH*)0xffff8600) /* ユーザブレークアドレスレジスタH */ +#define REG_UBC_UBARL ((volatile UH*)0xffff8602) /* ユーザブレークアドレスレジスタL */ +#define REG_UBC_UBAMRH ((volatile UH*)0xffff8604) /* ユーザブレークアドレスマスクレジスタH */ +#define REG_UBC_UBAMRL ((volatile UH*)0xffff8606) /* ユーザブレークアドレスマスクレジスタL */ +#define REG_UBC_UBBR ((volatile UH*)0xffff8608) /* ユーザブレークバスサイクルレジスタ */ +#define REG_UBC_UBCR ((volatile UH*)0xffff860a) /* ユーザブレークコントロールレジスタ */ + +/* WDT */ +#define REG_WDT_TCSR ((volatile UB*)0xffff8610) /* タイマコントロール/ステータスレジスタ */ +#define REG_WDT_TCNT_W ((volatile UB*)0xffff8610) /* タイマカウンタ(Read) */ +#define REG_WDT_TCNT_R ((volatile UB*)0xffff8611) /* タイマカウンタ(Write) */ +#define REG_WDT_RSTCSR_1 ((volatile UB*)0xffff8612) /* リセットコントロール/ステータスレジスタ */ +#define REG_WDT_RSTCSR_2 ((volatile UB*)0xffff8613) /* リセットコントロール/ステータスレジスタ */ + +/* Standby*/ +#define REG_STANDBY_SBYCR ((volatile UB*)0xffff8614) /* スタンバイコントロールレジスタ */ +#define REG_STANDBY_SYSCR ((volatile UB*)0xffff8618) /* システムコントロールレジスタ */ +#define REG_STANDBY_MSTCR1 ((volatile UH*)0xffff861c) /* モジュールスタンバイコントロールレジスタ1 */ +#define REG_STANDBY_MSTCR2 ((volatile UH*)0xffff861e) /* モジュールスタンバイコントロールレジスタ2 */ + +/* BSC */ +#define REG_BSC_BCR1 ((volatile UH*)0xffff8620) /* バスコントロールレジスタ1 */ +#define REG_BSC_BCR2 ((volatile UH*)0xffff8622) /* バスコントロールレジスタ2 */ +#define REG_BSC_WCR1 ((volatile UH*)0xffff8624) /* ウェイトコントロールレジスタ1 */ +#define REG_BSC_WCR2 ((volatile UH*)0xffff8626) /* ウェイトコントロールレジスタ2 */ + +/* FLASH */ +#define REG_FLASH_RAMER ((volatile UH*)0xffff8628) /* RAMエミュレーションレジスタ */ + +/* DMA */ +#define REG_DMA_DMAOR ((volatile UH*)0xffff86b0) /* DMAオペレーションレジスタ */ +#define REG_DMA0_SAR ((volatile UW*)0xffff86c0) /* DMAソースアドレスレジスタ_0 */ +#define REG_DMA0_DAR ((volatile UW*)0xffff86c4) /* DMAデスティネーションアドレスレジスタ_0 */ +#define REG_DMA0_DMATCR ((volatile UW*)0xffff86c8) /* DMAトランスファカウントレジスタ_0 */ +#define REG_DMA0_CHCR ((volatile UW*)0xffff86cc) /* DMAチャネルコントロールレジスタ_0 */ +#define REG_DMA1_SAR ((volatile UW*)0xffff86d0) /* DMAソースアドレスレジスタ_1 */ +#define REG_DMA1_DAR ((volatile UW*)0xffff86d4) /* DMAデスティネーションアドレスレジスタ_1 */ +#define REG_DMA1_DMATCR ((volatile UW*)0xffff86d8) /* DMAトランスファカウントレジスタ_1 */ +#define REG_DMA1_CHCR ((volatile UW*)0xffff86dc) /* DMAチャネルコントロールレジスタ_1 */ +#define REG_DMA2_SAR ((volatile UW*)0xffff86e0) /* DMAソースアドレスレジスタ_2 */ +#define REG_DMA2_DAR ((volatile UW*)0xffff86e4) /* DMAデスティネーションアドレスレジスタ_2 */ +#define REG_DMA2_DMATCR ((volatile UW*)0xffff86e8) /* DMAトランスファカウントレジスタ_2 */ +#define REG_DMA2_CHCR ((volatile UW*)0xffff86ec) /* DMAチャネルコントロールレジスタ_2 */ +#define REG_DMA3_SAR ((volatile UW*)0xffff86f0) /* DMAソースアドレスレジスタ_3 */ +#define REG_DMA3_DAR ((volatile UW*)0xffff86f4) /* DMAデスティネーションアドレスレジスタ_3 */ +#define REG_DMA3_DMATCR ((volatile UW*)0xffff86f8) /* DMAトランスファカウントレジスタ_3 */ +#define REG_DMA3_CHCR ((volatile UW*)0xffff86fc) /* DMAチャネルコントロールレジスタ_3 */ + +/* DTC */ +#define REG_DTC_DTEA ((volatile UB*)0xffff8700) /* DTCイネーブルレジスタA */ +#define REG_DTC_DTEB ((volatile UB*)0xffff8701) /* DTCイネーブルレジスタB */ +#define REG_DTC_DTEC ((volatile UB*)0xffff8702) /* DTCイネーブルレジスタC */ +#define REG_DTC_DTED ((volatile UB*)0xffff8703) /* DTCイネーブルレジスタD */ +#define REG_DTC_DTCSR ((volatile UH*)0xffff8706) /* DTCコントロール/ステータスレジスタ */ +#define REG_DTC_DTBR ((volatile UH*)0xffff8708) /* DTC情報ベースレジスタ */ +#define REG_DTC_DTEE ((volatile UB*)0xffff8710) /* DTCイネーブルレジスタE */ +#define REG_DTC_DTEG ((volatile UB*)0xffff8712) /* DTCイネーブルレジスタG */ + +/* IIC */ +#define REG_IIC_SCRX ((volatile UB*)0xffff87f0) /* シリアルコントロールレジスタX */ + +/* AD */ +#define REG_AD_ADTSR ((volatile UB*)0xffff87f4) /* ADトリガセレクトレジスタ */ + +/* Port-E */ +#define REG_PE_PPCR ((volatile UB*)0xffff87f8) /* 大電流ポートコントロールレジスタ */ + +/* IIC */ +#define REG_IIC_ICCR ((volatile UB*)0xffff87f8) /* IICバスコントロールレジスタ */ +#define REG_IIC_ICSR ((volatile UB*)0xffff87f8) /* IICバスステータスレジスタ */ +#define REG_IIC_ICDR ((volatile UB*)0xffff87f8) /* IICバスデータレジスタ */ +#define REG_IIC_SARX ((volatile UB*)0xffff87f8) /* 第2スレーブアドレスレジスタ */ +#define REG_IIC_ICMR ((volatile UB*)0xffff87f8) /* IICバスモードレジスタ */ +#define REG_IIC_SAR ((volatile UB*)0xffff87f8) /* スレーブアドレスレジスタ */ + +/* H-UDI */ +#define REG_HUDI_SDIR ((volatile UH*)0xffff8a50) /* インストラクションレジスタ */ +#define REG_HUDI_SDSR ((volatile UH*)0xffff8a52) /* ステータスレジスタ */ +#define REG_HUDI_SDDRH ((volatile UH*)0xffff8a54) /* データレジスタH */ +#define REG_HUDI_SDDRL ((volatile UH*)0xffff8a56) /* データレジスタL */ + + +#endif /* __sh7144_regs_h__ */ + + +/* end of file */ diff --git a/sample/sh/sh7144/sample.c b/sample/sh/sh7144/sample.c new file mode 100755 index 0000000..60ec222 --- /dev/null +++ b/sample/sh/sh7144/sample.c @@ -0,0 +1,178 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file sample.c + * @brief %jp{サンプルプログラム}%en{Sample program} + * + * @version $Id: sample.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "kernel.h" +#include "kernel_id.h" +#include "sci1.h" + + +#define LEFT(num) ((num) <= 1 ? 5 : (num) - 1) +#define RIGHT(num) ((num) >= 5 ? 1 : (num) + 1) + + +ID mbxid; +ID mpfid; + + +/*const VP _kernel_int_isp = (VP)0xfffffff0;*/ + + +/* void sim_puts(void *addr); */ + + + +/** %jp{メッセージ構造体} */ +typedef struct t_print_msg +{ + T_MSG msg; + char text[32]; +} T_PRINT_MSG; + + +/** %jp{初期化ハンドラ} */ +void Sample_Initialize(VP_INT exinf) +{ + T_CMPF cmpf; + T_CMBX cmbx; + + /* %jp{固定長メモリプール生成} */ + cmpf.mpfatr = TA_TFIFO; + cmpf.blkcnt = 3; + cmpf.blksz = sizeof(T_PRINT_MSG); + cmpf.mpf = NULL; + mpfid = acre_mpf(&cmpf); + + /* %jp{メールボックス生成} */ + cmbx.mbxatr = TA_TFIFO | TA_TFIFO; + cmbx.maxmpri = 1; + cmbx.mprihd = NULL; + mbxid = acre_mbx(&cmbx); + + /* %jp{タスク起動} */ + act_tsk(TSKID_PRINT); + act_tsk(TSKID_SAMPLE1); + act_tsk(TSKID_SAMPLE2); + act_tsk(TSKID_SAMPLE3); + act_tsk(TSKID_SAMPLE4); + act_tsk(TSKID_SAMPLE5); +} + + +/** %jp{適当な時間待つ} */ +void rand_wait(void) +{ + dly_tsk(rand() % 1000 + 100); +} + + +/** %jp{状態表示} */ +void print_state(int num, char *text) +{ + T_PRINT_MSG *msg; + VP mem; + + /* %jp{メモリ取得} */ + get_mpf(mpfid, &mem); + msg = (T_PRINT_MSG *)mem; + + /* %jp{文字列生成} */ + msg->text[0] = '0' + num; + msg->text[1] = ' '; + msg->text[2] = ':'; + msg->text[3] = ' '; + strcpy(&msg->text[4], text); + strcat(msg->text, "\n"); + + /* %jp{表示タスクに送信} */ + snd_mbx(mbxid, (T_MSG *)msg); +} + + +/** %jp{サンプルタスク} */ +void Sample_Task(VP_INT exinf) +{ + char buf[16]; + int num; + + num = (int)exinf; + + print_state(num, "start"); + + /* %jp{いわゆる哲学者の食事の問題} */ + for ( ; ; ) + { + /* %jp{適当な時間考える} */ + print_state(num, "thinking"); + rand_wait(); + + /* %jp{左右のフォークを取るまでループ} */ + for ( ; ; ) + { + /* %jp{左から順に取る} */ + wai_sem(LEFT(num)); + if ( pol_sem(RIGHT(num)) == E_OK ) + { + break; /* %jp{両方取れた} */ + } + sig_sem(LEFT(num)); /* %jp{取れなければ離す} */ + + /* %jp{適当な時間待つ} */ + print_state(num, "hungry"); + rand_wait(); + + /* %jp{右から順に取る} */ + wai_sem(RIGHT(num)); + if ( pol_sem(LEFT(num)) == E_OK ) + { + break; /* %jp{両方取れた} */ + } + sig_sem(RIGHT(num)); /* %jp{取れなければ離す} */ + + /* %jp{適当な時間待つ} */ + print_state(num, "hungry"); + rand_wait(); + } + + /* %jp{適当な時間、食べる} */ + print_state(num, "eating"); + rand_wait(); + + /* %jp{フォークを置く} */ + sig_sem(LEFT(num)); + sig_sem(RIGHT(num)); + } +} + + +/** %jp{表示タスク} */ +void Sample_Print(VP_INT exinf) +{ + T_PRINT_MSG *msg; + + Sci1_Initialize(); + + for ( ; ; ) + { + rcv_mbx(mbxid, (T_MSG **)&msg); +/* sim_puts(msg->text); */ + Sci1_PutString(msg->text); + rel_mpf(mpfid, msg); + } +} + + + + + + +/* end of file */ diff --git a/sample/sh/sh7144/sample.h b/sample/sh/sh7144/sample.h new file mode 100755 index 0000000..aa5a5cc --- /dev/null +++ b/sample/sh/sh7144/sample.h @@ -0,0 +1,35 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file sample.c + * @brief %jp{サンプルプログラム}%en{Sample program} + * + * @version $Id: sample.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef __sample_h__ +#define __sample_h__ + + +#ifdef __cplusplus +extern "C" { +#endif + +void Sample_Initialize(VP_INT exinf); +void Sample_Task(VP_INT exinf); +void Sample_Print(VP_INT exinf); + +#ifdef __cplusplus +} +#endif + + +#endif /* __sample_h__ */ + + +/* end of file */ diff --git a/sample/sh/sh7144/sci1.c b/sample/sh/sh7144/sci1.c new file mode 100755 index 0000000..74ad484 --- /dev/null +++ b/sample/sh/sh7144/sci1.c @@ -0,0 +1,60 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file sci1.c + * @brief %jp{SCI1への出力}%en{SCI1 device driver} + * + * @version $Id: sci1.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "kernel.h" +#include "regs_sh7144.h" + + +/* %jp{SCI1 の初期化} */ +void Sci1_Initialize(void) +{ + *REG_STANDBY_MSTCR1 &= ~0x0002; /* %jp{SCI1のスタンバイモードを解除} */ + *REG_SCI1_SCR = 0; + *REG_SCI1_SMR = 0; + *REG_SCI1_BRR = 19; /* %jp{ボーレート設定(38400bps)} */ + *REG_PFC_PACRL2 |= 0x0100; /* %jp{端子設定} */ + *REG_SCI1_SCR |= 0x20; /* %jp{送信許可} */ +} + +/* %jp{1文字出力} */ +void Sci1_PutChar(int c) +{ + while ( ((*REG_SCI1_SSR) & 0x80) != 0x80 ) + ; + + *REG_SCI1_TDR = (UB)c; + + *REG_SCI1_SSR &= 0x7f; +} + +/* %jp{文字列出力} */ +void Sci1_PutString(const char *text) +{ + while ( *text != '\0' ) + { + if ( *text == '\n' ) + { + Sci1_PutChar('\r'); + Sci1_PutChar('\n'); + } + else + { + Sci1_PutChar(*text); + } + + text++; + } +} + + +/* end of file */ diff --git a/sample/sh/sh7144/sci1.h b/sample/sh/sh7144/sci1.h new file mode 100755 index 0000000..51cdcac --- /dev/null +++ b/sample/sh/sh7144/sci1.h @@ -0,0 +1,34 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file sci1.h + * @brief %jp{SCI1への出力}%en{SCI1 device driver} + * + * @version $Id: sci1.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef __ostimer_h__ +#define __ostimer_h__ + + +#ifdef __cplusplus +extern "C" { +#endif + +void Sci1_Initialize(void); /* %jp{SCI1 の初期化} */ +void Sci1_PutChar(int c); /* %jp{1文字出力} */ +void Sci1_PutString(const char *text); /* %jp{文字列出力} */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __ostimer_h__ */ + + +/* end of file */ diff --git a/sample/sh/sh7144/shc/dbsct.c b/sample/sh/sh7144/shc/dbsct.c new file mode 100755 index 0000000..64b463b --- /dev/null +++ b/sample/sh/sh7144/shc/dbsct.c @@ -0,0 +1,21 @@ +/* _INITSCT でセクション初期化をする為のテーブル */ + +#pragma section $DSEC +static const struct { + unsigned char *rom_s; + unsigned char *rom_e; + unsigned char *ram_s; +} DTBL[] = { + { __sectop("D"), __secend("D"), __sectop("R") } +}; + +#pragma section $BSEC +static const struct { + unsigned char *b_s; + unsigned char *b_e; +} BTBL[] = { + { __sectop("B"), __secend("B") } +}; + + +/* end of file */ diff --git a/sample/sh/sh7144/shc/gmake.mak b/sample/sh/sh7144/shc/gmake.mak new file mode 100755 index 0000000..e6642ee --- /dev/null +++ b/sample/sh/sh7144/shc/gmake.mak @@ -0,0 +1,111 @@ + + +TARGET ?= sample.abs + +INC_DIR = ../../../../kernel/include + +# Tools +CC = shc +ASM = asmsh +LINK = optlnk +DEPEND = depend +LINT = splint +AWK = gawk + +CFLAGS = -CPu=sh2 -I=$(INC_DIR) +AFLAGS = -CPu=sh2 +LFLAGS = + +ifeq ($DEBUG),Yes) +OS_LIBS = ../../../../kernel/build/sh/sh2/shc/libhosv4adbg.lib +AFLAGS += -DEBug +CFLAGS += -DEBug -OP=0 +else +OS_LIBS = ../../../../kernel/build/sh/sh2/shc/libhosv4a.lib +AFLAGS += +CFLAGS += -OP=1 +endif + +OS_CFG = ../../../../cfgrtr/build/gcc/h4acfg-sh2.exe + + +OBJS_DIR = objs + +OBJS = $(OBJS_DIR)/vcttbl.obj \ + $(OBJS_DIR)/dbsct.obj \ + $(OBJS_DIR)/startup.obj \ + $(OBJS_DIR)/kernel_cfg.obj \ + $(OBJS_DIR)/main.obj \ + $(OBJS_DIR)/sample.obj \ + $(OBJS_DIR)/ostimer.obj + +# シミュレータ有効時、SCI出力を入れ替える +ifeq ($(SIM),Yes) +OBJS += $(OBJS_DIR)/sim_io.obj +else +OBJS += $(OBJS_DIR)/sci1.obj +endif + + +STD_LIBS = stdlib.lib + +VPATH = .. + +all: mkdir_objs mk_kernel $(TARGET) + + +# メモリ配置 +ifeq ($(ROM),Yes) +SECTION_VECT ?= 000000000 +SECTION_ROM ?= 000000400 +SECTION_RAM ?= 0FFFFE000 +else +SECTION_VECT ?= 000400000 +SECTION_ROM ?= 000400400 +SECTION_RAM ?= 000410000 +endif + + +$(TARGET): $(OBJS) $(STD_LIBS) $(OS_LIBS) + echo rom D=R > $(OBJS_DIR)/subcmd.txt + echo list sample.map >> $(OBJS_DIR)/subcmd.txt + echo SHow SY,R,X >> $(OBJS_DIR)/subcmd.txt + echo -Input=$(OBJS) | sed "s/ /,/g" >> $(OBJS_DIR)/subcmd.txt + echo -LIB=$(OS_LIBS),$(STD_LIBS) >> $(OBJS_DIR)/subcmd.txt + echo "-start=VECTTBL/$(SECTION_VECT),P,C,C\$$BSEC,C\$$DSEC,D/$(SECTION_ROM),B,R/$(SECTION_RAM),S/0FFFFFBF0" >> $(OBJS_DIR)/subcmd.txt + echo -output=$(TARGET) >> $(OBJS_DIR)/subcmd.txt + echo end >> $(OBJS_DIR)/subcmd.txt + echo -input=$(TARGET) >> $(OBJS_DIR)/subcmd.txt + echo form stype >> $(OBJS_DIR)/subcmd.txt + echo output sample.mot >> $(OBJS_DIR)/subcmd.txt + echo -exit >> $(OBJS_DIR)/subcmd.txt + $(RM) -f $(TARGET) + $(LINK) -SU=$(OBJS_DIR)/subcmd.txt + +$(STD_LIBS): + lbgsh -OUTPut=$(STD_LIBS) $(CFLAGS) +# lbgsh -OUTPut=$(STD_LIBS) $(CFLAGS) -REent + +mk_kernel: + make -C ../../../../kernel/build/sh/sh2/shc -f gmake.mak + +mkdir_objs: + @mkdir -p $(OBJS_DIR) + +clean: + rm -f $(OBJS) $(TARGET) ../kernel_cfg.c ../kernel_id.h + +../kernel_cfg.c ../kernel_id.h: ../system.cfg + cpp -E ../system.cfg ../system.i + $(OS_CFG) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h + + +$(OBJS_DIR)/sample.obj: ../kernel_id.h + +$(OBJS_DIR)/%.obj :: %.c + $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst) + +$(OBJS_DIR)/%.obj :: %.src + $(ASM) $(AFLAGS) $< -OB=$@ + + diff --git a/sample/sh/sh7144/shc/readme.txt b/sample/sh/sh7144/shc/readme.txt new file mode 100755 index 0000000..3f69dd9 --- /dev/null +++ b/sample/sh/sh7144/shc/readme.txt @@ -0,0 +1,35 @@ +sh7144用サンプル + + +<概要> + お題は例によって、「哲学者の食事の問題」 (^^; + + +<環境> + ボード:Interface 2006å¹´6月号付録基板+メモリ増設環境 + ソフト:当方ルネサスのモニタプログラムをROMに焼いてます。 + (つまりは 外部SRAM(0x00400000)からベクタを配置です) + + コンパイラ:ルネサスの評価版コンパイラ + (現時点で SH SERIES C/C++ Compiler V.9.00.02.001) + + メイク:cygwinからGNU makeを使用 + (すいません、そのうち nmake とかの対応も考えます...) + シリアル:38400bps 8bit ノンパリ ストップビット1bit でよいかと。 + + +<使い方> + cygwin で + + hos-v4a/sample/sh/sh7144/shc + + に移動して、gmake -f gmake.mak + + とうつ + + 出来上がった、sample.abs なり、sample.mot なりをメモリにロードして +実行開始。 + 5人の哲学者がそれぞれ、考えたり、腹減ったり、飯くったりする様子が +シリアルに表示されれば成功です。 + + diff --git a/sample/sh/sh7144/shc/sim_io.src b/sample/sh/sh7144/shc/sim_io.src new file mode 100755 index 0000000..b5b3ca3 --- /dev/null +++ b/sample/sh/sh7144/shc/sim_io.src @@ -0,0 +1,41 @@ +; SCI出力をルネサスのシミュレータ用のIO出力に切り替えるファイル + + + .EXPORT _Sci1_Initialize + .EXPORT _Sci1_PutString + + + .SECTION P, CODE, ALIGN=4 +_Sci1_Initialize: + rts + nop + + +_Sci1_PutString: + mov.l addr_fno_fputs, r0 + xor.l r2, r2 + mov.l addr_sim_param, r1 + mov.l r4, @r1 + jsr @r2 + nop + rts + nop + + + .ALIGN 4 +addr_fno_fputs: + .DATA.L h'01240000 + +addr_sim_param: + .DATA.L sim_param + + + .SECTION B, DATA, ALIGN=4 +sim_param: + .RES.L 1 + + + .END + + +; end of file diff --git a/sample/sh/sh7144/shc/startup.src b/sample/sh/sh7144/shc/startup.src new file mode 100755 index 0000000..6686945 --- /dev/null +++ b/sample/sh/sh7144/shc/startup.src @@ -0,0 +1,35 @@ + + .EXPORT _ResetHandler + .IMPORT __INITSCT + .IMPORT _main + + .SECTION VECTTBL, DATA, ALIGN=4 + + .SECTION P, CODE, ALIGN=4 +_ResetHandler: + mov.l addr_VECTTBL, r1 + mov.l addr_INITSCT, r0 + jsr @r0 + ldc r1, VBR + + mov.l addr_main, r0 + jsr @r0 + nop + sleep + + + .ALIGN 4 +addr_VECTTBL: + .DATA.L STARTOF VECTTBL +addr_INITSCT: + .DATA.L __INITSCT +addr_main: + .DATA.L _main + + + .SECTION S, STACK, ALIGN=4 + .RES.B 1024 + + + .END _ResetHandler + diff --git a/sample/sh/sh7144/shc/vcttbl.src b/sample/sh/sh7144/shc/vcttbl.src new file mode 100755 index 0000000..1caa984 --- /dev/null +++ b/sample/sh/sh7144/shc/vcttbl.src @@ -0,0 +1,274 @@ + + + + .IMPORT _ResetHandler ; リセットベクタ + .IMPORT __kernel_vector_dmy ; ダミーベクタ + .IMPORT __kernel_vector_144 ; ベクタ255 + + + + .SECTION VECTTBL, DATA, ALIGN=4 + +_Vectors: + .DATA.L _ResetHandler ; ベクタ0 + .DATA.L STARTOF S + SIZEOF S ; ベクタ1 + .DATA.L _ResetHandler ; ベクタ2 + .DATA.L STARTOF S + SIZEOF S ; ベクタ3 + .DATA.L __kernel_vector_dmy ; ベクタ4 + .DATA.L 0 ; ベクタ5 + .DATA.L __kernel_vector_dmy ; ベクタ6 + .DATA.L 0 ; ベクタ7 + .DATA.L h'c91f0606 ; ベクタ8 + .DATA.L __kernel_vector_dmy ; ベクタ9 + .DATA.L __kernel_vector_dmy ; ベクタ10 + .DATA.L __kernel_vector_dmy ; ベクタ11 + .DATA.L __kernel_vector_dmy ; ベクタ12 + .DATA.L __kernel_vector_dmy ; ベクタ13 + .DATA.L __kernel_vector_dmy ; ベクタ14 + .DATA.L __kernel_vector_dmy ; ベクタ15 + .DATA.L __kernel_vector_dmy ; ベクタ16 + .DATA.L __kernel_vector_dmy ; ベクタ17 + .DATA.L __kernel_vector_dmy ; ベクタ18 + .DATA.L __kernel_vector_dmy ; ベクタ19 + .DATA.L __kernel_vector_dmy ; ベクタ20 + .DATA.L __kernel_vector_dmy ; ベクタ21 + .DATA.L __kernel_vector_dmy ; ベクタ22 + .DATA.L __kernel_vector_dmy ; ベクタ23 + .DATA.L __kernel_vector_dmy ; ベクタ24 + .DATA.L __kernel_vector_dmy ; ベクタ25 + .DATA.L __kernel_vector_dmy ; ベクタ26 + .DATA.L __kernel_vector_dmy ; ベクタ27 + .DATA.L __kernel_vector_dmy ; ベクタ28 + .DATA.L __kernel_vector_dmy ; ベクタ29 + .DATA.L __kernel_vector_dmy ; ベクタ30 + .DATA.L __kernel_vector_dmy ; ベクタ31 + .DATA.L __kernel_vector_dmy ; ベクタ32 + .DATA.L __kernel_vector_dmy ; ベクタ33 + .DATA.L __kernel_vector_dmy ; ベクタ34 + .DATA.L __kernel_vector_dmy ; ベクタ35 + .DATA.L __kernel_vector_dmy ; ベクタ36 + .DATA.L __kernel_vector_dmy ; ベクタ37 + .DATA.L __kernel_vector_dmy ; ベクタ38 + .DATA.L __kernel_vector_dmy ; ベクタ39 + .DATA.L __kernel_vector_dmy ; ベクタ40 + .DATA.L __kernel_vector_dmy ; ベクタ41 + .DATA.L __kernel_vector_dmy ; ベクタ42 + .DATA.L __kernel_vector_dmy ; ベクタ43 + .DATA.L __kernel_vector_dmy ; ベクタ44 + .DATA.L __kernel_vector_dmy ; ベクタ45 + .DATA.L __kernel_vector_dmy ; ベクタ46 + .DATA.L __kernel_vector_dmy ; ベクタ47 + .DATA.L __kernel_vector_dmy ; ベクタ48 + .DATA.L __kernel_vector_dmy ; ベクタ49 + .DATA.L __kernel_vector_dmy ; ベクタ50 + .DATA.L __kernel_vector_dmy ; ベクタ51 + .DATA.L __kernel_vector_dmy ; ベクタ52 + .DATA.L __kernel_vector_dmy ; ベクタ53 + .DATA.L __kernel_vector_dmy ; ベクタ54 + .DATA.L __kernel_vector_dmy ; ベクタ55 + .DATA.L __kernel_vector_dmy ; ベクタ56 + .DATA.L __kernel_vector_dmy ; ベクタ57 + .DATA.L __kernel_vector_dmy ; ベクタ58 + .DATA.L __kernel_vector_dmy ; ベクタ59 + .DATA.L __kernel_vector_dmy ; ベクタ60 + .DATA.L __kernel_vector_dmy ; ベクタ61 + .DATA.L __kernel_vector_dmy ; ベクタ62 + .DATA.L __kernel_vector_dmy ; ベクタ63 + .DATA.L __kernel_vector_dmy ; ベクタ64 + .DATA.L __kernel_vector_dmy ; ベクタ65 + .DATA.L __kernel_vector_dmy ; ベクタ66 + .DATA.L __kernel_vector_dmy ; ベクタ67 + .DATA.L __kernel_vector_dmy ; ベクタ68 + .DATA.L __kernel_vector_dmy ; ベクタ69 + .DATA.L __kernel_vector_dmy ; ベクタ70 + .DATA.L __kernel_vector_dmy ; ベクタ71 + .DATA.L __kernel_vector_dmy ; ベクタ72 + .DATA.L __kernel_vector_dmy ; ベクタ73 + .DATA.L __kernel_vector_dmy ; ベクタ74 + .DATA.L __kernel_vector_dmy ; ベクタ75 + .DATA.L __kernel_vector_dmy ; ベクタ76 + .DATA.L __kernel_vector_dmy ; ベクタ77 + .DATA.L __kernel_vector_dmy ; ベクタ78 + .DATA.L __kernel_vector_dmy ; ベクタ79 + .DATA.L __kernel_vector_dmy ; ベクタ80 + .DATA.L __kernel_vector_dmy ; ベクタ81 + .DATA.L __kernel_vector_dmy ; ベクタ82 + .DATA.L __kernel_vector_dmy ; ベクタ83 + .DATA.L __kernel_vector_dmy ; ベクタ84 + .DATA.L __kernel_vector_dmy ; ベクタ85 + .DATA.L __kernel_vector_dmy ; ベクタ86 + .DATA.L __kernel_vector_dmy ; ベクタ87 + .DATA.L __kernel_vector_dmy ; ベクタ88 + .DATA.L __kernel_vector_dmy ; ベクタ89 + .DATA.L __kernel_vector_dmy ; ベクタ90 + .DATA.L __kernel_vector_dmy ; ベクタ91 + .DATA.L __kernel_vector_dmy ; ベクタ92 + .DATA.L __kernel_vector_dmy ; ベクタ93 + .DATA.L __kernel_vector_dmy ; ベクタ94 + .DATA.L __kernel_vector_dmy ; ベクタ95 + .DATA.L __kernel_vector_dmy ; ベクタ96 + .DATA.L __kernel_vector_dmy ; ベクタ97 + .DATA.L __kernel_vector_dmy ; ベクタ98 + .DATA.L __kernel_vector_dmy ; ベクタ99 + .DATA.L __kernel_vector_dmy ; ベクタ100 + .DATA.L __kernel_vector_dmy ; ベクタ101 + .DATA.L __kernel_vector_dmy ; ベクタ102 + .DATA.L __kernel_vector_dmy ; ベクタ103 + .DATA.L __kernel_vector_dmy ; ベクタ104 + .DATA.L __kernel_vector_dmy ; ベクタ105 + .DATA.L __kernel_vector_dmy ; ベクタ106 + .DATA.L __kernel_vector_dmy ; ベクタ107 + .DATA.L __kernel_vector_dmy ; ベクタ108 + .DATA.L __kernel_vector_dmy ; ベクタ109 + .DATA.L __kernel_vector_dmy ; ベクタ110 + .DATA.L __kernel_vector_dmy ; ベクタ111 + .DATA.L __kernel_vector_dmy ; ベクタ112 + .DATA.L __kernel_vector_dmy ; ベクタ113 + .DATA.L __kernel_vector_dmy ; ベクタ114 + .DATA.L __kernel_vector_dmy ; ベクタ115 + .DATA.L __kernel_vector_dmy ; ベクタ116 + .DATA.L __kernel_vector_dmy ; ベクタ117 + .DATA.L __kernel_vector_dmy ; ベクタ118 + .DATA.L __kernel_vector_dmy ; ベクタ119 + .DATA.L __kernel_vector_dmy ; ベクタ120 + .DATA.L __kernel_vector_dmy ; ベクタ121 + .DATA.L __kernel_vector_dmy ; ベクタ122 + .DATA.L __kernel_vector_dmy ; ベクタ123 + .DATA.L __kernel_vector_dmy ; ベクタ124 + .DATA.L __kernel_vector_dmy ; ベクタ125 + .DATA.L __kernel_vector_dmy ; ベクタ126 + .DATA.L __kernel_vector_dmy ; ベクタ127 + .DATA.L __kernel_vector_dmy ; ベクタ128 + .DATA.L __kernel_vector_dmy ; ベクタ129 + .DATA.L __kernel_vector_dmy ; ベクタ130 + .DATA.L __kernel_vector_dmy ; ベクタ131 + .DATA.L __kernel_vector_dmy ; ベクタ132 + .DATA.L __kernel_vector_dmy ; ベクタ133 + .DATA.L __kernel_vector_dmy ; ベクタ134 + .DATA.L __kernel_vector_dmy ; ベクタ135 + .DATA.L __kernel_vector_dmy ; ベクタ136 + .DATA.L __kernel_vector_dmy ; ベクタ137 + .DATA.L __kernel_vector_dmy ; ベクタ138 + .DATA.L __kernel_vector_dmy ; ベクタ139 + .DATA.L __kernel_vector_dmy ; ベクタ140 + .DATA.L __kernel_vector_dmy ; ベクタ141 + .DATA.L __kernel_vector_dmy ; ベクタ142 + .DATA.L __kernel_vector_dmy ; ベクタ143 + .DATA.L __kernel_vector_144 ; ベクタ144 (CMT0) + .DATA.L __kernel_vector_dmy ; ベクタ145 + .DATA.L __kernel_vector_dmy ; ベクタ146 + .DATA.L __kernel_vector_dmy ; ベクタ147 + .DATA.L __kernel_vector_dmy ; ベクタ148 + .DATA.L __kernel_vector_dmy ; ベクタ149 + .DATA.L __kernel_vector_dmy ; ベクタ150 + .DATA.L __kernel_vector_dmy ; ベクタ151 + .DATA.L __kernel_vector_dmy ; ベクタ152 + .DATA.L __kernel_vector_dmy ; ベクタ153 + .DATA.L __kernel_vector_dmy ; ベクタ154 + .DATA.L __kernel_vector_dmy ; ベクタ155 + .DATA.L __kernel_vector_dmy ; ベクタ156 + .DATA.L __kernel_vector_dmy ; ベクタ157 + .DATA.L __kernel_vector_dmy ; ベクタ158 + .DATA.L __kernel_vector_dmy ; ベクタ159 + .DATA.L __kernel_vector_dmy ; ベクタ160 + .DATA.L __kernel_vector_dmy ; ベクタ161 + .DATA.L __kernel_vector_dmy ; ベクタ162 + .DATA.L __kernel_vector_dmy ; ベクタ163 + .DATA.L __kernel_vector_dmy ; ベクタ164 + .DATA.L __kernel_vector_dmy ; ベクタ165 + .DATA.L __kernel_vector_dmy ; ベクタ166 + .DATA.L __kernel_vector_dmy ; ベクタ167 + .DATA.L __kernel_vector_dmy ; ベクタ168 + .DATA.L __kernel_vector_dmy ; ベクタ169 + .DATA.L __kernel_vector_dmy ; ベクタ170 + .DATA.L __kernel_vector_dmy ; ベクタ171 + .DATA.L __kernel_vector_dmy ; ベクタ172 + .DATA.L __kernel_vector_dmy ; ベクタ173 + .DATA.L __kernel_vector_dmy ; ベクタ174 + .DATA.L __kernel_vector_dmy ; ベクタ175 + .DATA.L __kernel_vector_dmy ; ベクタ176 + .DATA.L __kernel_vector_dmy ; ベクタ177 + .DATA.L __kernel_vector_dmy ; ベクタ178 + .DATA.L __kernel_vector_dmy ; ベクタ179 + .DATA.L __kernel_vector_dmy ; ベクタ180 + .DATA.L __kernel_vector_dmy ; ベクタ181 + .DATA.L __kernel_vector_dmy ; ベクタ182 + .DATA.L __kernel_vector_dmy ; ベクタ183 + .DATA.L __kernel_vector_dmy ; ベクタ184 + .DATA.L __kernel_vector_dmy ; ベクタ185 + .DATA.L __kernel_vector_dmy ; ベクタ186 + .DATA.L __kernel_vector_dmy ; ベクタ187 + .DATA.L __kernel_vector_dmy ; ベクタ188 + .DATA.L __kernel_vector_dmy ; ベクタ189 + .DATA.L __kernel_vector_dmy ; ベクタ190 + .DATA.L __kernel_vector_dmy ; ベクタ191 + .DATA.L __kernel_vector_dmy ; ベクタ192 + .DATA.L __kernel_vector_dmy ; ベクタ193 + .DATA.L __kernel_vector_dmy ; ベクタ194 + .DATA.L __kernel_vector_dmy ; ベクタ195 + .DATA.L __kernel_vector_dmy ; ベクタ196 + .DATA.L __kernel_vector_dmy ; ベクタ197 + .DATA.L __kernel_vector_dmy ; ベクタ198 + .DATA.L __kernel_vector_dmy ; ベクタ199 + .DATA.L __kernel_vector_dmy ; ベクタ200 + .DATA.L __kernel_vector_dmy ; ベクタ201 + .DATA.L __kernel_vector_dmy ; ベクタ202 + .DATA.L __kernel_vector_dmy ; ベクタ203 + .DATA.L __kernel_vector_dmy ; ベクタ204 + .DATA.L __kernel_vector_dmy ; ベクタ205 + .DATA.L __kernel_vector_dmy ; ベクタ206 + .DATA.L __kernel_vector_dmy ; ベクタ207 + .DATA.L __kernel_vector_dmy ; ベクタ208 + .DATA.L __kernel_vector_dmy ; ベクタ209 + .DATA.L __kernel_vector_dmy ; ベクタ210 + .DATA.L __kernel_vector_dmy ; ベクタ211 + .DATA.L __kernel_vector_dmy ; ベクタ212 + .DATA.L __kernel_vector_dmy ; ベクタ213 + .DATA.L __kernel_vector_dmy ; ベクタ214 + .DATA.L __kernel_vector_dmy ; ベクタ215 + .DATA.L __kernel_vector_dmy ; ベクタ216 + .DATA.L __kernel_vector_dmy ; ベクタ217 + .DATA.L __kernel_vector_dmy ; ベクタ218 + .DATA.L __kernel_vector_dmy ; ベクタ219 + .DATA.L __kernel_vector_dmy ; ベクタ220 + .DATA.L __kernel_vector_dmy ; ベクタ221 + .DATA.L __kernel_vector_dmy ; ベクタ222 + .DATA.L __kernel_vector_dmy ; ベクタ223 + .DATA.L __kernel_vector_dmy ; ベクタ224 + .DATA.L __kernel_vector_dmy ; ベクタ225 + .DATA.L __kernel_vector_dmy ; ベクタ226 + .DATA.L __kernel_vector_dmy ; ベクタ227 + .DATA.L __kernel_vector_dmy ; ベクタ228 + .DATA.L __kernel_vector_dmy ; ベクタ229 + .DATA.L __kernel_vector_dmy ; ベクタ230 + .DATA.L __kernel_vector_dmy ; ベクタ231 + .DATA.L __kernel_vector_dmy ; ベクタ232 + .DATA.L __kernel_vector_dmy ; ベクタ233 + .DATA.L __kernel_vector_dmy ; ベクタ234 + .DATA.L __kernel_vector_dmy ; ベクタ235 + .DATA.L __kernel_vector_dmy ; ベクタ236 + .DATA.L __kernel_vector_dmy ; ベクタ237 + .DATA.L __kernel_vector_dmy ; ベクタ238 + .DATA.L __kernel_vector_dmy ; ベクタ239 + .DATA.L __kernel_vector_dmy ; ベクタ240 + .DATA.L __kernel_vector_dmy ; ベクタ241 + .DATA.L __kernel_vector_dmy ; ベクタ242 + .DATA.L __kernel_vector_dmy ; ベクタ243 + .DATA.L __kernel_vector_dmy ; ベクタ244 + .DATA.L __kernel_vector_dmy ; ベクタ245 + .DATA.L __kernel_vector_dmy ; ベクタ246 + .DATA.L __kernel_vector_dmy ; ベクタ247 + .DATA.L __kernel_vector_dmy ; ベクタ248 + .DATA.L __kernel_vector_dmy ; ベクタ249 + .DATA.L __kernel_vector_dmy ; ベクタ250 + .DATA.L __kernel_vector_dmy ; ベクタ251 + .DATA.L __kernel_vector_dmy ; ベクタ252 + .DATA.L __kernel_vector_dmy ; ベクタ253 + .DATA.L __kernel_vector_dmy ; ベクタ254 + .DATA.L __kernel_vector_dmy ; ベクタ255 + + + .SECTION S, STACK, ALIGN=4 + + + .END diff --git a/sample/sh/sh7144/system.cfg b/sample/sh/sh7144/system.cfg new file mode 100755 index 0000000..8673096 --- /dev/null +++ b/sample/sh/sh7144/system.cfg @@ -0,0 +1,41 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file system.cfg + * @brief %jp{サンプルのコンフィギュレーション} + * + * @version $Id: system.cfg,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +/* %jp{カーネル独自の設定}%en{kernel} */ +KERNEL_HEP_MEM(1024, NULL); +KERNEL_INT_STK(512, NULL); +KERNEL_MAX_TSKID(16); +KERNEL_MAX_SEMID(16); + + +/* %jp{OSタイマの設定}%en{OS timer} */ +INCLUDE("\"ostimer.h\""); +ATT_INI({TA_HLNG, 0, OsTimer_Initialize}); + +/* %jp{サンプル}%en{Sample program} */ +INCLUDE("\"sample.h\""); +ATT_INI({TA_HLNG, 0, Sample_Initialize}); +CRE_TSK(TSKID_PRINT, {TA_HLNG, 1, Sample_Print, 1, 256, NULL}); +CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 256, NULL}); +CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 256, NULL}); +CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 256, NULL}); +CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 256, NULL}); +CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 256, NULL}); +CRE_SEM(1, {TA_TFIFO, 1, 1}); +CRE_SEM(2, {TA_TFIFO, 1, 1}); +CRE_SEM(3, {TA_TFIFO, 1, 1}); +CRE_SEM(4, {TA_TFIFO, 1, 1}); +CRE_SEM(5, {TA_TFIFO, 1, 1}); + + +/* end of file */ diff --git a/sample/win/win32/gcc/gmake.mak b/sample/win/win32/gcc/gmake.mak new file mode 100755 index 0000000..26abd91 --- /dev/null +++ b/sample/win/win32/gcc/gmake.mak @@ -0,0 +1,57 @@ + + +TARGET ?= sample.exe + +INC_DIR = ../../../../kernel/include + +# Tools +CC = gcc +ASM = gcc +LINK = gcc +DEPEND = gcc -M +LINT = splint +AWK = gawk + +CFLAGS = -c -g -O0 -Wall -I$(INC_DIR) +AFLAGS = -c -g +LFLAGS = + +OBJS_DIR = objs + +OBJS = $(OBJS_DIR)/main.o \ + $(OBJS_DIR)/sample.o \ + $(OBJS_DIR)/ostimer.o \ + $(OBJS_DIR)/wintimer.o \ + $(OBJS_DIR)/kernel_cfg.o + +OS_LIBS = ../../../../kernel/build/win/win32/gcc/libhosv4a.a +OS_CFG = ../../../../cfgrtr/build/gcc/h4acfg-win32.exe + +VPATH = .. + +all: mkdir_objs mk_kernel $(TARGET) + + +$(TARGET): $(OBJS) + $(LINK) $(LFLAGS) $(OBJS) $(OS_LIBS) -lwinmm -o $(TARGET) + +mk_kernel: + make -C ../../../../kernel/build/win/win32/gcc -f gmake.mak + +mkdir_objs: + @mkdir -p $(OBJS_DIR) + +clean: + rm -f $(OBJS) $(TARGET) ../kernel_cfg.c ../kernel_id.h + +../kernel_cfg.c ../kernel_id.h: ../system.cfg + cpp -E ../system.cfg ../system.i + $(OS_CFG) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h + + +$(OBJS_DIR)/sample.o: ../kernel_id.h + +$(OBJS_DIR)/%.o :: %.c + $(CC) $(CFLAGS) -c $< -o $@ + + diff --git a/sample/win/win32/main.c b/sample/win/win32/main.c new file mode 100755 index 0000000..a05b33c --- /dev/null +++ b/sample/win/win32/main.c @@ -0,0 +1,27 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file main.c + * @brief %jp{メイン関数}%en{main} + * + * @version $Id: main.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "kernel.h" + + +/** %jp{メイン関数} */ +int main() +{ + /** %jp{カーネルの動作開始} */ + vsta_knl(); + + return 0; +} + + +/* end of file */ diff --git a/sample/win/win32/ostimer.c b/sample/win/win32/ostimer.c new file mode 100755 index 0000000..5f769df --- /dev/null +++ b/sample/win/win32/ostimer.c @@ -0,0 +1,46 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file ostimer.c + * @brief %jp{OSタイマ}%en{OS timer} + * + * @version $Id: ostimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include "kernel.h" +#include "ostimer.h" +#include "wintimer.h" + + +#define OSTIMER_TIMER_INHNO 1 /**< %jp{割り込みハンドラ番号} */ + + +static void OsTimer_IrqHandler(void); /**< %jp{タイマ割り込みハンドラ} */ + + +/** %jp{OS用タイマ初期化ルーチン} */ +void OsTimer_Initialize(VP_INT exinf) +{ + T_DINH dfinh; + + /* %jp{割り込みハンドラ定義} */ + dfinh.inthdr = (FP)OsTimer_IrqHandler; + def_inh(OSTIMER_TIMER_INHNO, &dfinh); + + /* %jp{タイマ動作開始} */ + WinTimer_Start(OSTIMER_TIMER_INHNO, 10); +} + + +/** %jp{タイマ割り込みハンドラ} */ +void OsTimer_IrqHandler(void) +{ + isig_tim(); +} + + +/* end of file */ diff --git a/sample/win/win32/ostimer.h b/sample/win/win32/ostimer.h new file mode 100755 index 0000000..26cc6aa --- /dev/null +++ b/sample/win/win32/ostimer.h @@ -0,0 +1,33 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file ostimer.c + * @brief %jp{OSタイマ}%en{OS timer} + * + * @version $Id: ostimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef __ostimer_h__ +#define __ostimer_h__ + + +#ifdef __cplusplus +extern "C" { +#endif + +/** %jp{OS用タイマ初期化ルーチン} */ +void OsTimer_Initialize(VP_INT exinf); + +#ifdef __cplusplus +} +#endif + + +#endif /* __ostimer_h__ */ + + +/* end of file */ diff --git a/sample/win/win32/sample.c b/sample/win/win32/sample.c new file mode 100755 index 0000000..d1e89d0 --- /dev/null +++ b/sample/win/win32/sample.c @@ -0,0 +1,159 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file sample.c + * @brief %jp{サンプルプログラム}%en{Sample program} + * + * @version $Id: sample.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include +#include "kernel.h" +#include "kernel_id.h" +#include "wintimer.h" + + +#define LEFT(num) ((num) <= 1 ? 5 : (num) - 1) +#define RIGHT(num) ((num) >= 5 ? 1 : (num) + 1) + + +ID mbxid; +ID mpfid; + + +/** %jp{メッセージ構造体} */ +typedef struct t_print_msg +{ + T_MSG msg; + char text[32]; +} T_PRINT_MSG; + + +/** %jp{初期化ハンドラ} */ +void Sample_Initialize(VP_INT exinf) +{ + T_CMPF cmpf; + T_CMBX cmbx; + + /* %jp{固定長メモリプール生成} */ + cmpf.mpfatr = TA_TFIFO; + cmpf.blkcnt = 3; + cmpf.blksz = sizeof(T_PRINT_MSG); + cmpf.mpf = NULL; + mpfid = acre_mpf(&cmpf); + + /* %jp{メールボックス生成} */ + cmbx.mbxatr = TA_TFIFO | TA_TFIFO; + cmbx.maxmpri = 1; + cmbx.mprihd = NULL; + mbxid = acre_mbx(&cmbx); + + /* %jp{タスク起動} */ + act_tsk(TSKID_PRINT); + act_tsk(TSKID_SAMPLE1); + act_tsk(TSKID_SAMPLE2); + act_tsk(TSKID_SAMPLE3); + act_tsk(TSKID_SAMPLE4); + act_tsk(TSKID_SAMPLE5); +} + + +/** %jp{適当な時間待つ} */ +void rand_wait(void) +{ + dly_tsk(rand() % 100 + 1); +} + + +/** %jp{状態表示} */ +void print_state(int num, char *text) +{ + T_PRINT_MSG *msg; + VP mem; + + /* %jp{メモリ取得} */ + get_mpf(mpfid, &mem); + msg = (T_PRINT_MSG *)mem; + + /* %jp{文字列生成} */ + sprintf(msg->text, "%d : %s", num, text); + + /* %jp{表示タスクに送信} */ + snd_mbx(mbxid, (T_MSG *)msg); +} + + +/** %jp{サンプルタスク} */ +void Sample_Task(VP_INT exinf) +{ + int num; + + num = (int)exinf; + + /* %jp{いわゆる哲学者の食事の問題} */ + for ( ; ; ) + { + /* %jp{適当な時間考える} */ + print_state(num, "thinking"); + rand_wait(); + + /* %jp{左右のフォークを取るまでループ} */ + for ( ; ; ) + { + /* %jp{左から順に取る} */ + wai_sem(LEFT(num)); + if ( pol_sem(RIGHT(num)) == E_OK ) + { + break; /* %jp{両方取れた} */ + } + sig_sem(LEFT(num)); /* %jp{取れなければ離す} */ + + /* %jp{適当な時間待つ} */ + print_state(num, "hungry"); + rand_wait(); + + /* %jp{右から順に取る} */ + wai_sem(RIGHT(num)); + if ( pol_sem(LEFT(num)) == E_OK ) + { + break; /* %jp{両方取れた} */ + } + sig_sem(RIGHT(num)); /* %jp{取れなければ離す} */ + + /* %jp{適当な時間待つ} */ + print_state(num, "hungry"); + rand_wait(); + } + + /* %jp{適当な時間、食べる} */ + print_state(num, "eating"); + rand_wait(); + + /* %jp{フォークを置く} */ + sig_sem(LEFT(num)); + sig_sem(RIGHT(num)); + } +} + + +/** %jp{表示タスク} */ +void Sample_Print(VP_INT exinf) +{ + T_PRINT_MSG *msg; + + for ( ; ; ) + { + rcv_mbx(mbxid, (T_MSG **)&msg); + printf("%s\n", msg->text); + rel_mpf(mpfid, msg); + } +} + + + +/* end of file */ diff --git a/sample/win/win32/sample.h b/sample/win/win32/sample.h new file mode 100755 index 0000000..aa5a5cc --- /dev/null +++ b/sample/win/win32/sample.h @@ -0,0 +1,35 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file sample.c + * @brief %jp{サンプルプログラム}%en{Sample program} + * + * @version $Id: sample.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef __sample_h__ +#define __sample_h__ + + +#ifdef __cplusplus +extern "C" { +#endif + +void Sample_Initialize(VP_INT exinf); +void Sample_Task(VP_INT exinf); +void Sample_Print(VP_INT exinf); + +#ifdef __cplusplus +} +#endif + + +#endif /* __sample_h__ */ + + +/* end of file */ diff --git a/sample/win/win32/system.cfg b/sample/win/win32/system.cfg new file mode 100755 index 0000000..91b5abd --- /dev/null +++ b/sample/win/win32/system.cfg @@ -0,0 +1,41 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file system.cfg + * @brief %jp{サンプルのコンフィギュレーション} + * + * @version $Id: system.cfg,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +/* %jp{カーネル独自の設定}%en{kernel} */ +KERNEL_HEP_MEM(65536, NULL); +KERNEL_INT_STK(4096, NULL); +KERNEL_MAX_TSKID(16); +KERNEL_MAX_SEMID(16); + + +/* %jp{OSタイマの設定}%en{OS timer} */ +INCLUDE("\"ostimer.h\""); +ATT_INI({TA_HLNG, 0, OsTimer_Initialize}); + +/* %jp{サンプル}%en{Sample program} */ +INCLUDE("\"sample.h\""); +ATT_INI({TA_HLNG, 0, Sample_Initialize}); +CRE_TSK(TSKID_PRINT, {TA_HLNG, 1, Sample_Print, 1, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 1024, NULL}); +CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 1024, NULL}); +CRE_SEM(1, {TA_TFIFO, 1, 1}); +CRE_SEM(2, {TA_TFIFO, 1, 1}); +CRE_SEM(3, {TA_TFIFO, 1, 1}); +CRE_SEM(4, {TA_TFIFO, 1, 1}); +CRE_SEM(5, {TA_TFIFO, 1, 1}); + + +/* end of file */ diff --git a/sample/win/win32/vc60/cfg.bat b/sample/win/win32/vc60/cfg.bat new file mode 100755 index 0000000..c68a0d9 --- /dev/null +++ b/sample/win/win32/vc60/cfg.bat @@ -0,0 +1,4 @@ +cd .. +cl /E system.cfg > system.i +..\..\..\cfgrtr\build\vc60\Debug\h4acfg.exe +pause diff --git a/sample/win/win32/vc60/sample.dsp b/sample/win/win32/vc60/sample.dsp new file mode 100755 index 0000000..32e4d09 --- /dev/null +++ b/sample/win/win32/vc60/sample.dsp @@ -0,0 +1,137 @@ +# Microsoft Developer Studio Project File - Name="sample" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** •ÒW‚µ‚È‚¢‚Å‚­‚¾‚³‚¢ ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=sample - Win32 Debug +!MESSAGE ‚±‚ê‚Í—LŒø‚ÈÒ²¸Ì§²Ù‚Å‚Í‚ ‚è‚Ü‚¹‚ñB ‚±‚ÌÌßÛ¼Þª¸Ä‚ðËÞÙÄނ·‚邽‚ß‚É‚Í NMAKE ‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B +!MESSAGE [Ò²¸Ì§²Ù‚Ì´¸½Îß°Ä] ºÏÝÄނðŽg—p‚µ‚ÄŽÀs‚µ‚Ä‚­‚¾‚³‚¢ +!MESSAGE +!MESSAGE NMAKE /f "sample.mak". +!MESSAGE +!MESSAGE NMAKE ‚ÌŽÀsŽž‚ɍ\¬‚ðŽw’è‚Å‚«‚Ü‚· +!MESSAGE ºÏÝÄÞ ×²Ýã‚Åϸۂ̐ݒè‚ð’è‹`‚µ‚Ü‚·B—á: +!MESSAGE +!MESSAGE NMAKE /f "sample.mak" CFG="sample - Win32 Debug" +!MESSAGE +!MESSAGE ‘I‘ð‰Â”\‚ÈËÞÙÄÞ Ó°ÄÞ: +!MESSAGE +!MESSAGE "sample - Win32 Release" ("Win32 (x86) Console Application" —p) +!MESSAGE "sample - Win32 Debug" ("Win32 (x86) Console Application" —p) +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sample - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../../../../kernel/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x411 /d "NDEBUG" +# ADD RSC /l 0x411 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../kernel/include" /D "_CONSOLE" /D "WIN32" /D "_DEBUG" /D "_MBCS" /YX /FD /D /GZ /c +# ADD BASE RSC /l 0x411 /d "_DEBUG" +# ADD RSC /l 0x411 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "sample - Win32 Release" +# Name "sample - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\kernel_cfg.c +# End Source File +# Begin Source File + +SOURCE=..\main.c +# End Source File +# Begin Source File + +SOURCE=..\ostimer.c +# End Source File +# Begin Source File + +SOURCE=..\sample.c +# End Source File +# Begin Source File + +SOURCE=..\wintimer.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\kernel_id.h +# End Source File +# Begin Source File + +SOURCE=..\ostimer.h +# End Source File +# Begin Source File + +SOURCE=..\sample.h +# End Source File +# Begin Source File + +SOURCE=..\wintimer.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\system.cfg +# End Source File +# End Target +# End Project diff --git a/sample/win/win32/vc60/sample.dsw b/sample/win/win32/vc60/sample.dsw new file mode 100755 index 0000000..6e8d891 --- /dev/null +++ b/sample/win/win32/vc60/sample.dsw @@ -0,0 +1,59 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# Œx: ‚±‚ÌÜ°¸½Íß°½ ̧²Ù ‚ð•ÒW‚Ü‚½‚͍폜‚µ‚È‚¢‚Å‚­‚¾‚³‚¢! + +############################################################################### + +Project: "h4acfg"="..\..\..\..\cfgrtr\build\vc60\h4acfg.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "hosv4a"="..\..\..\..\kernel\build\win\win32\vc60\hosv4a.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "sample"=".\sample.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name hosv4a + End Project Dependency + Begin Project Dependency + Project_Dep_Name h4acfg + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/sample/win/win32/wintimer.c b/sample/win/win32/wintimer.c new file mode 100755 index 0000000..92714a3 --- /dev/null +++ b/sample/win/win32/wintimer.c @@ -0,0 +1,62 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file wintimer.c + * @brief %jp{Windows用のタイマ}%en{Windows timer object} + * + * @version $Id: wintimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +/** %jp{Windows ヘッダファイルの読みこみ} */ +#define SIZE WIN_SIZE +#include +#undef SIZE + +#include "kernel.h" +#include "wintimer.h" +#include "arch/proc/win/win32/proc.h" + + +static DWORD WINAPI WinTimer_Thread(LPVOID param); /**< %jp{タイマ割り込み用スレッド関数} */ +static HANDLE hEventTimer; /**< %jp{タイマハンドル} */ + + +/** %jp{OS用タイマの初期化} */ +void WinTimer_Start(INHNO inhno, int iInterval) +{ + DWORD dwThreadId; + + /* %jp{タイマ用イベントの作成} */ + hEventTimer = CreateEvent(NULL, FALSE, FALSE, NULL); + + /* %jp{マルチメディアタイマの開始} */ + timeSetEvent(iInterval, 1, (LPTIMECALLBACK)hEventTimer, 0, TIME_PERIODIC | TIME_CALLBACK_EVENT_PULSE); + + /* %jp{スレッド生成} */ + CreateThread(NULL, 0, WinTimer_Thread, (LPVOID)inhno, 0, &dwThreadId); +} + + +/** %jp{タイマ割り込み用スレッド関数} */ +DWORD WINAPI WinTimer_Thread(LPVOID param) +{ + INHNO inhno; + + inhno = (INHNO)param; + + for ( ; ; ) + { + /* %jp{タイマイベントを待つ} */ + WaitForSingleObject(hEventTimer, INFINITE); + + /* %jp{割り込みシグナルを入れる} */ + vsig_int(inhno); + } +} + + +/* end of file */ diff --git a/sample/win/win32/wintimer.h b/sample/win/win32/wintimer.h new file mode 100755 index 0000000..491f3b8 --- /dev/null +++ b/sample/win/win32/wintimer.h @@ -0,0 +1,35 @@ +/** + * Sample program for Hyper Operating System V4 Advance + * + * @file wintimer.h + * @brief %jp{Windows用のタイマ}%en{Windows timer object} + * + * @version $Id: wintimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $ + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef __wintimer_h__ +#define __wintimer_h__ + + +#ifdef __cplusplus +extern "C" { +#endif + +void WinTimer_Start(INHNO inhno, int iInterval); /** %jp{タイマ動作開始} */ + +#ifdef __cplusplus +} +#endif + + + +#endif /* __wintimer_h__ */ + + + +/* end of file */ diff --git a/test/que/test_que.c b/test/que/test_que.c new file mode 100755 index 0000000..323552c --- /dev/null +++ b/test/que/test_que.c @@ -0,0 +1,487 @@ +/* ------------------------------------------------------------------------ */ +/* Hyper Operating System V4 μITRON4.0仕様 Real-Time OS */ +/* μカーネル キュー の単体テストモジュール */ +/* */ +/* Copyright (C) 1998-2006 by Project HOS */ +/* http://sourceforge.jp/projects/hos/ */ +/* ------------------------------------------------------------------------ */ + + + +#include +#include "kernel.h" +#include "arch/proc/win/win32/procatr.h" +#include "arch/proc/win/win32/proc.h" +#include "arch/irc/none/ircatr.h" +#include "arch/irc/none/irc.h" +#include "config/cfgknl.h" +#include "parser/parsknl.h" +#include "core/opttyp.h" +#include "object/tskobj.h" +#include "config/cfgerr.h" +#include "parser/parserr.h" + + + +#include +#define TEST_ASSERT(a) assert(a) + +int que_test(void); + + +int main() +{ + que_test(); + + printf("OK\n"); + + return 0; +} + + +#define TEST_QUE_NUM 6 + +static _KERNEL_T_QUE test_que; + + +#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY /* %en{block array}%jp{TCBを単純配列で管理} */ + +_KERNEL_T_TCB _kernel_tcb_tbl[TEST_QUE_NUM]; /* %jp{タスクコントロールブロックのポインタを配列で持つ} */ + +#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY /* pointer array */ + + +_KERNEL_T_TCB test_tcb[TEST_QUE_NUM]; +_KERNEL_T_TCB *_kernel_tcb_tbl[TEST_QUE_NUM] = /* %jp{タスクコントロールブロックのポインタを配列で持つ} */ + { + &test_tcb[0], + &test_tcb[1], + &test_tcb[2], + &test_tcb[3], + &test_tcb[4], + &test_tcb[5], + }; + +#endif + + + +/* キューが全部外れていることをチェック */ +BOOL check_que_empty(void) +{ + _KERNEL_T_TSKHDL tskhdl; + int i; + + if ( _KERNEL_REF_QUE(&test_que) != _KERNEL_TSKHDL_NULL ) + { + return FALSE; /* 異常 */ + } + + for ( i = 1; i <= TEST_QUE_NUM; i++ ) + { + tskhdl = _KERNEL_TSK_ID2TSKHDL(i); + + if ( _KERNEL_TSK_GET_QUE(tskhdl) != NULL ) + { + return FALSE; /* 異常 */ + } + } + + return TRUE; +} + + + +int que_test(void) +{ + _KERNEL_T_TSKHDL tskhdl; + + /* Initialize */ + _KERNEL_CRE_QUE(&test_que); + + _KERNEL_TSK_SET_QUE (_KERNEL_TSK_ID2TSKHDL(1), NULL); + _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(1), 1); + _KERNEL_TSK_SET_QUE (_KERNEL_TSK_ID2TSKHDL(2), NULL); + _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(2), 2); + _KERNEL_TSK_SET_QUE (_KERNEL_TSK_ID2TSKHDL(3), NULL); + _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(3), 3); + _KERNEL_TSK_SET_QUE (_KERNEL_TSK_ID2TSKHDL(4), NULL); + _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(4), 1); + _KERNEL_TSK_SET_QUE (_KERNEL_TSK_ID2TSKHDL(5), NULL); + _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(5), 2); + _KERNEL_TSK_SET_QUE (_KERNEL_TSK_ID2TSKHDL(6), NULL); + _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(6), 3); + + + /* ----------------------------- */ + /* FIFO順 */ + /* ----------------------------- */ + + /* 1個の付け外し */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(check_que_empty()); + + /* 1個の付け外し(頭抜き) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + tskhdl = _KERNEL_RMH_QUE(&test_que); + TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(check_que_empty()); + + /* 2個の付け外し(先頭外し) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(check_que_empty()); + + /* 2個の付け外し(末尾外し) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(check_que_empty()); + + /* 2個の付け外し(頭抜き) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + tskhdl = _KERNEL_RMH_QUE(&test_que); + TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(1)); + tskhdl = _KERNEL_RMH_QUE(&test_que); + TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(先→中→末の順で取り外し) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(先→末→中の順で取り外し) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(中→先→末の順で取り外し) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(中→末→先の順で取り外し) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(末→先→中の順で取り外し) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(末→中→先の順で取り外し) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(頭抜き) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + tskhdl = _KERNEL_RMH_QUE(&test_que); + TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(1)); + tskhdl = _KERNEL_RMH_QUE(&test_que); + TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(2)); + tskhdl = _KERNEL_RMH_QUE(&test_que); + TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + + + /* ----------------------------- */ + /* 優先度順 */ + /* ----------------------------- */ + + /* 1個の付け外し */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(check_que_empty()); + + + /* 2個の付け外し(優先度:1→2) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(check_que_empty()); + + /* 2個の付け外し(優先度:2→1) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(check_que_empty()); + + /* 2個の付け外し(優先度:2→2 (FIFO順になるはず)) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(5), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(5)); + TEST_ASSERT(check_que_empty()); + + /* 上の逆 */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(5), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(5)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(check_que_empty()); + + + /* 3個の付け外し(優先度:1→2→3) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(優先度:1→3→2) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(優先度:2→1→3) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(優先度:2→3→1) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(優先度:3→1→2) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(優先度:3→2→1) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(同優先混ぜ:先頭) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(4), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(4)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(4)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(同優先混ぜ:中) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(5), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(5)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(check_que_empty()); + + /* 3個の付け外し(同優先混ぜ:末尾) */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(6), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(6)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(6)); + TEST_ASSERT(check_que_empty()); + + + /* ALL:おまけ */ + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(6), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(5), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(4), TA_TPRI); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1)); + + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(4)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(4)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(5)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3)); + TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(6)); + _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(6)); + TEST_ASSERT(check_que_empty()); + + return TRUE; +} + + + diff --git a/test/que/test_que.dsp b/test/que/test_que.dsp new file mode 100755 index 0000000..30097b5 --- /dev/null +++ b/test/que/test_que.dsp @@ -0,0 +1,100 @@ +# Microsoft Developer Studio Project File - Name="test_que" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** •ÒW‚µ‚È‚¢‚Å‚­‚¾‚³‚¢ ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=test_que - Win32 Debug +!MESSAGE ‚±‚ê‚Í—LŒø‚ÈÒ²¸Ì§²Ù‚Å‚Í‚ ‚è‚Ü‚¹‚ñB ‚±‚ÌÌßÛ¼Þª¸Ä‚ðËÞÙÄނ·‚邽‚ß‚É‚Í NMAKE ‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B +!MESSAGE [Ò²¸Ì§²Ù‚Ì´¸½Îß°Ä] ºÏÝÄނðŽg—p‚µ‚ÄŽÀs‚µ‚Ä‚­‚¾‚³‚¢ +!MESSAGE +!MESSAGE NMAKE /f "test_que.mak". +!MESSAGE +!MESSAGE NMAKE ‚ÌŽÀsŽž‚ɍ\¬‚ðŽw’è‚Å‚«‚Ü‚· +!MESSAGE ºÏÝÄÞ ×²Ýã‚Åϸۂ̐ݒè‚ð’è‹`‚µ‚Ü‚·B—á: +!MESSAGE +!MESSAGE NMAKE /f "test_que.mak" CFG="test_que - Win32 Debug" +!MESSAGE +!MESSAGE ‘I‘ð‰Â”\‚ÈËÞÙÄÞ Ó°ÄÞ: +!MESSAGE +!MESSAGE "test_que - Win32 Release" ("Win32 (x86) Console Application" —p) +!MESSAGE "test_que - Win32 Debug" ("Win32 (x86) Console Application" —p) +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "test_que - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../../kernel/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x411 /d "NDEBUG" +# ADD RSC /l 0x411 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "test_que - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../kernel/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x411 /d "_DEBUG" +# ADD RSC /l 0x411 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "test_que - Win32 Release" +# Name "test_que - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\test_que.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/test/que/test_que.dsw b/test/que/test_que.dsw new file mode 100755 index 0000000..f55812e --- /dev/null +++ b/test/que/test_que.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# Œx: ‚±‚ÌÜ°¸½Íß°½ ̧²Ù ‚ð•ÒW‚Ü‚½‚͍폜‚µ‚È‚¢‚Å‚­‚¾‚³‚¢! + +############################################################################### + +Project: "hosv4a"="..\..\kernel\build\win\win32\vc60\hosv4a.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "test_que"=".\test_que.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name hosv4a + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/tools/cmtcnv/cmtcnv.c b/tools/cmtcnv/cmtcnv.c new file mode 100755 index 0000000..5c84283 --- /dev/null +++ b/tools/cmtcnv/cmtcnv.c @@ -0,0 +1,181 @@ +#include +#include + + +#define BUF_SIZE 4096 + +#define MAIN_ST_CODE 0 +#define MAIN_ST_COMMENT1 1 +#define MAIN_ST_COMMENT2 2 + +#define COMMENT_ST_NORMAL 0 +#define COMMENT_ST_FILTER_CHECK 1 +#define COMMENT_ST_FILTER_OK 2 +#define COMMENT_ST_FILTER_NG 3 + + +char szBuf[BUF_SIZE]; +int iBufSize = 0; +int iMainState = MAIN_ST_CODE; +int iCommentState = COMMENT_ST_NORMAL; +FILE *fpIn = stdin; +FILE *fpOut = stdout; +char *pszFilter = "en"; +int c; + + +static void CommentState(void); +static void FlushBuffer(void); + + +int main(int argc, char *argv[]) +{ + + while ( (c = fgetc(fpIn)) != EOF ) + { + szBuf[iBufSize++] = c; + if ( iBufSize <= 1 ) + { + continue; + } + + switch ( iMainState ) + { + case MAIN_ST_CODE: + if ( iBufSize > 1 ) + { + if ( szBuf[0] == '/' && szBuf[1] == '*' ) + { + FlushBuffer(); + iMainState = MAIN_ST_COMMENT1; + iCommentState = COMMENT_ST_NORMAL; + } + else if ( szBuf[0] == '/' && szBuf[1] == '/' ) + { + FlushBuffer(); + iMainState = MAIN_ST_COMMENT2; + iCommentState = COMMENT_ST_NORMAL; + } + else + { + fputc(szBuf[0], fpOut); + szBuf[0] = szBuf[1]; + iBufSize = 1; + } + } + break; + + case MAIN_ST_COMMENT1: + if ( szBuf[iBufSize - 2] == '*' && szBuf[iBufSize - 1] == '/' ) + { + FlushBuffer(); + iMainState = MAIN_ST_CODE; + } + else + { + CommentState(); + } + break; + + case MAIN_ST_COMMENT2: + if ( szBuf[iBufSize - 1] == '\n' ) + { + FlushBuffer(); + iMainState = MAIN_ST_CODE; + } + else + { + CommentState(); + } + break; + } + } + + return 0; +} + + +void CommentState(void) +{ + switch ( iCommentState ) + { + case COMMENT_ST_NORMAL: + if ( iBufSize > 1 ) + { + if ( szBuf[0] == '%' ) + { + if ( szBuf[1] != '%' ) + { + iCommentState = COMMENT_ST_FILTER_CHECK; + szBuf[0] = szBuf[1]; + iBufSize = 1; + } + else + { + fputc('%', fpOut); + iBufSize = 0; + } + } + else + { + fputc(szBuf[0], fpOut); + szBuf[0] = szBuf[1]; + iBufSize = 1; + } + } + break; + + case COMMENT_ST_FILTER_CHECK: + if ( szBuf[iBufSize - 1] == '{' ) + { + szBuf[iBufSize - 1] = '\0'; + if ( strcmp(szBuf, pszFilter) == 0 ) + { + iCommentState = COMMENT_ST_FILTER_OK; + } + else + { + iCommentState = COMMENT_ST_FILTER_NG; + } + iBufSize = 0; + } + break; + + case COMMENT_ST_FILTER_OK: + if ( szBuf[1] == '}' ) + { + fputc(szBuf[0], fpOut); + iBufSize = 0; + iCommentState = COMMENT_ST_NORMAL; + } + else + { + fputc(szBuf[0], fpOut); + szBuf[0] = szBuf[1]; + iBufSize = 1; + } + break; + + case COMMENT_ST_FILTER_NG: + if ( szBuf[1] == '}' ) + { + iBufSize = 0; + iCommentState = COMMENT_ST_NORMAL; + } + else + { + szBuf[0] = szBuf[1]; + iBufSize = 1; + } + break; + } +} + + + +void FlushBuffer(void) +{ + szBuf[iBufSize] = '\0'; + fputs(szBuf, fpOut); + iBufSize = 0; +} diff --git a/tools/cmtcnv/cmtcnv.dsp b/tools/cmtcnv/cmtcnv.dsp new file mode 100755 index 0000000..b6aba36 --- /dev/null +++ b/tools/cmtcnv/cmtcnv.dsp @@ -0,0 +1,100 @@ +# Microsoft Developer Studio Project File - Name="cmtcnv" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** •ÒW‚µ‚È‚¢‚Å‚­‚¾‚³‚¢ ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=cmtcnv - Win32 Debug +!MESSAGE ‚±‚ê‚Í—LŒø‚ÈÒ²¸Ì§²Ù‚Å‚Í‚ ‚è‚Ü‚¹‚ñB ‚±‚ÌÌßÛ¼Þª¸Ä‚ðËÞÙÄނ·‚邽‚ß‚É‚Í NMAKE ‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B +!MESSAGE [Ò²¸Ì§²Ù‚Ì´¸½Îß°Ä] ºÏÝÄނðŽg—p‚µ‚ÄŽÀs‚µ‚Ä‚­‚¾‚³‚¢ +!MESSAGE +!MESSAGE NMAKE /f "cmtcnv.mak". +!MESSAGE +!MESSAGE NMAKE ‚ÌŽÀsŽž‚ɍ\¬‚ðŽw’è‚Å‚«‚Ü‚· +!MESSAGE ºÏÝÄÞ ×²Ýã‚Åϸۂ̐ݒè‚ð’è‹`‚µ‚Ü‚·B—á: +!MESSAGE +!MESSAGE NMAKE /f "cmtcnv.mak" CFG="cmtcnv - Win32 Debug" +!MESSAGE +!MESSAGE ‘I‘ð‰Â”\‚ÈËÞÙÄÞ Ó°ÄÞ: +!MESSAGE +!MESSAGE "cmtcnv - Win32 Release" ("Win32 (x86) Console Application" —p) +!MESSAGE "cmtcnv - Win32 Debug" ("Win32 (x86) Console Application" —p) +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "cmtcnv - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x411 /d "NDEBUG" +# ADD RSC /l 0x411 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "cmtcnv - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x411 /d "_DEBUG" +# ADD RSC /l 0x411 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "cmtcnv - Win32 Release" +# Name "cmtcnv - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\cmtcnv.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/tools/cmtcnv/cmtcnv.dsw b/tools/cmtcnv/cmtcnv.dsw new file mode 100755 index 0000000..51caa6b --- /dev/null +++ b/tools/cmtcnv/cmtcnv.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# Œx: ‚±‚ÌÜ°¸½Íß°½ ̧²Ù ‚ð•ÒW‚Ü‚½‚͍폜‚µ‚È‚¢‚Å‚­‚¾‚³‚¢! + +############################################################################### + +Project: "cmtcnv"=".\cmtcnv.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + -- 2.11.0