; 78K0R C Compiler V2.10 Assembler Source Date:13 Jun 2010 Time:19:31:24 ; Command : -c9F0104 -yC:\Program Files\NEC Electronics Tools\DEV -_msgoff -i ; renge -iC:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\ ; V1.20\inc78k0r -ms -qvjl3wt -sainter_asm -zp -no renge\renge.c ; In-file : renge\renge.c ; Asm-file : inter_asm\renge.asm ; Para-file : $PROCESSOR(9F0104) $DEBUG $NODEBUGA $KANJICODE SJIS $TOL_INF 03FH, 0210H, 00H, 00H, 00H, 00H, 00H $DGS FIL_NAM, .file, 0EEH, 0FFFEH, 03FH, 067H, 01H, 00H $DGS AUX_FIL, renge.c $DGS MOD_NAM, renge, 00H, 0FFFEH, 00H, 077H, 00H, 00H $DGS SEC_NAM, @@BITS, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@CNST, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@R_INIT, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@INIT, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@DATA, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@R_INIS, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@INIS, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@DATS, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@CNSTL, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@RLINIT, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@INITL, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@DATAL, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@CALT, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, ROM_CODE, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@CODEL, U, U, 00H, 078H, 00H, 00H $DGS SEC_NAM, @@BASE, U, U, 00H, 078H, 00H, 00H $DGS ENM_TAG, .1fake, 00H, 0FFFEH, 0AH, 0FH, 01H, 00H $DGS AUX_TAG, 01H, 019H $DGS MEB_ENM, _ERR_FINISED, 00H, 0FFFFH, 04H, 010H, 00H, 00H $DGS MEB_ENM, _ERR_CONTINUE, 01H, 0FFFFH, 04H, 010H, 00H, 00H $DGS END_STR, .eos, 01H, 0FFFFH, 00H, 066H, 01H, 00H $DGS AUX_EOS, 013H, 01H $DGS LAB_SYM, bs_S0096, U, U, 00H, 06H, 00H, 00H $DGS LAB_SYM, es_S0096, U, U, 00H, 06H, 00H, 00H $DGS LAB_SYM, bs_S0094, U, U, 00H, 06H, 00H, 00H $DGS LAB_SYM, es_S0094, U, U, 00H, 06H, 00H, 00H $DGS LAB_SYM, bs_S0095, U, U, 00H, 06H, 00H, 00H $DGS LAB_SYM, es_S0095, U, U, 00H, 06H, 00H, 00H $DGS STA_SYM, _tasks, U, U, 01H, 03H, 01H, 027H $DGS AUX_STR, 00H, 00H, 016H, 0BH, 00H, 00H, 00H, 04H $DGS GLV_SYM, _renge_init, U, U, 01H, 026H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 027H, 00H, 00H $DGS BEG_FUN, ??bf_renge_init, U, U, 00H, 065H, 01H, 00H $DGS AUX_BEG, 035H, 00H, 027H $DGS END_FUN, ??ef_renge_init, U, U, 00H, 065H, 01H, 00H $DGS AUX_END, 09H $DGS GLV_SYM, _renge_task_interval_run, U, U, 0CH, 026H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 036H, 00H, 00H $DGS BEG_FUN, ??bf_renge_task_interval_run, U, U, 00H, 065H, 01H, 00H $DGS AUX_BEG, 051H, 02H, 02CH $DGS REG_VAR, _i, 06H, 0FFFFH, 010CH, 04H, 00H, 00H $DGS BEG_BLK, ??bb00_renge_task_interval_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 07H, 00H, 02EH $DGS BEG_BLK, ??bb01_renge_task_interval_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 0BH, 00H, 00H $DGS END_BLK, ??eb01_renge_task_interval_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 0FH $DGS END_BLK, ??eb00_renge_task_interval_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 010H $DGS END_FUN, ??ef_renge_task_interval_run, U, U, 00H, 065H, 01H, 00H $DGS AUX_END, 012H $DGS STA_SYM, _renge_task_immed_init, U, U, 01H, 03H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 041H, 00H, 00H $DGS BEG_FUN, ??bf_renge_task_immed_init, U, U, 00H, 065H, 01H, 00H $DGS AUX_BEG, 075H, 02H, 03BH $DGS REG_VAR, _i, 06H, 0FFFFH, 010CH, 04H, 00H, 00H $DGS BEG_BLK, ??bb00_renge_task_immed_init, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 04H, 00H, 00H $DGS END_BLK, ??eb00_renge_task_immed_init, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 06H $DGS END_FUN, ??ef_renge_task_immed_init, U, U, 00H, 065H, 01H, 00H $DGS AUX_END, 07H $DGS GLV_SYM, _renge_task_immed_add, U, U, 0CH, 026H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 062H, 00H, 00H $DGS BEG_FUN, ??bf_renge_task_immed_add, U, U, 00H, 065H, 01H, 00H $DGS AUX_BEG, 083H, 04H, 048H $DGS FUN_ARG, _new_task, 02H, 0FFFFH, 01H, 09H, 01H, 01H $DGS AUX_STR, 00H, 00H, 02H, 00H, 00H, 00H, 00H, 01H $DGS AUT_VAR, _i, 01H, 0FFFFH, 0CH, 01H, 00H, 00H $DGS BEG_BLK, ??bb00_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 08H, 00H, 04AH $DGS BEG_BLK, ??bb01_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 0AH, 00H, 04CH $DGS BEG_BLK, ??bb02_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 0DH, 00H, 052H $DGS END_BLK, ??eb02_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 011H $DGS END_BLK, ??eb01_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 012H $DGS BEG_BLK, ??bb03_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 014H, 00H, 054H $DGS BEG_BLK, ??bb04_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 019H, 00H, 056H $DGS BEG_BLK, ??bb05_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 01BH, 00H, 00H $DGS END_BLK, ??eb05_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 01EH $DGS END_BLK, ??eb04_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 01FH $DGS END_BLK, ??eb03_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 022H $DGS END_BLK, ??eb00_renge_task_immed_add, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 023H $DGS END_FUN, ??ef_renge_task_immed_add, U, U, 00H, 065H, 01H, 00H $DGS AUX_END, 027H $DGS GLV_SYM, _renge_task_immed_run, U, U, 0CH, 026H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 0DEH, 00H, 00H $DGS BEG_FUN, ??bf_renge_task_immed_run, U, U, 00H, 065H, 01H, 00H $DGS AUX_BEG, 0B0H, 04H, 068H $DGS AUT_VAR, _list_id, 03H, 0FFFFH, 0CH, 01H, 00H, 00H $DGS AUT_VAR, _last_task_id, 02H, 0FFFFH, 0CH, 01H, 00H, 00H $DGS BEG_BLK, ??bb00_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 05H, 00H, 06AH $DGS BEG_BLK, ??bb01_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 07H, 00H, 06CH $DGS BEG_BLK, ??bb02_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 08H, 00H, 06EH $DGS BEG_BLK, ??bb03_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 0BH, 00H, 072H $DGS END_BLK, ??eb03_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 011H $DGS BEG_BLK, ??bb04_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 014H, 00H, 074H $DGS BEG_BLK, ??bb05_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 016H, 00H, 07CH $DGS END_BLK, ??eb05_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 018H $DGS END_BLK, ??eb04_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 01AH $DGS END_BLK, ??eb02_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 01BH $DGS BEG_BLK, ??bb06_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 01EH, 00H, 07EH $DGS BEG_BLK, ??bb07_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 021H, 00H, 080H $DGS BEG_BLK, ??bb08_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 023H, 00H, 08AH $DGS END_BLK, ??eb08_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 025H $DGS END_BLK, ??eb07_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 026H $DGS END_BLK, ??eb06_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 028H $DGS END_BLK, ??eb01_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 02AH $DGS BEG_BLK, ??bb09_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 02DH, 00H, 08CH $DGS BEG_BLK, ??bb0A_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 02FH, 00H, 092H $DGS AUT_VAR, _i, 01H, 0FFFFH, 0CH, 01H, 01H, 00H $DGS AUX_STR, 00H, 030H, 01H, 00H, 00H, 00H, 00H, 00H $DGS AUT_VAR, _j, 00H, 0FFFFH, 0CH, 01H, 01H, 00H $DGS AUX_STR, 00H, 030H, 01H, 00H, 00H, 00H, 00H, 00H $DGS BEG_BLK, ??bb0B_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 033H, 00H, 096H $DGS END_BLK, ??eb0B_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 035H $DGS BEG_BLK, ??bb0C_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 03CH, 00H, 098H $DGS BEG_BLK, ??bb0D_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 03FH, 00H, 09AH $DGS BEG_BLK, ??bb0E_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 041H, 00H, 09CH $DGS BEG_BLK, ??bb0F_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 044H, 00H, 0A0H $DGS END_BLK, ??eb0F_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 046H $DGS BEG_BLK, ??bb10_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 04BH, 00H, 0A2H $DGS BEG_BLK, ??bb11_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 04DH, 00H, 0AAH $DGS END_BLK, ??eb11_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 04FH $DGS END_BLK, ??eb10_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 050H $DGS END_BLK, ??eb0E_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 054H $DGS BEG_BLK, ??bb12_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 056H, 00H, 0B0H $DGS END_BLK, ??eb12_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 05BH $DGS END_BLK, ??eb0D_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 05CH $DGS BEG_BLK, ??bb13_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 05EH, 00H, 0B2H $DGS BEG_BLK, ??bb14_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 062H, 00H, 0B8H $DGS END_BLK, ??eb14_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 065H $DGS END_BLK, ??eb13_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 068H $DGS BEG_BLK, ??bb15_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 06BH, 00H, 0BEH $DGS END_BLK, ??eb15_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 071H $DGS END_BLK, ??eb0C_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 072H $DGS BEG_BLK, ??bb16_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 077H, 00H, 0C0H $DGS BEG_BLK, ??bb17_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 079H, 00H, 0C2H $DGS BEG_BLK, ??bb18_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 07EH, 00H, 0C4H $DGS BEG_BLK, ??bb19_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 080H, 00H, 0CCH $DGS END_BLK, ??eb19_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 082H $DGS END_BLK, ??eb18_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 083H $DGS END_BLK, ??eb17_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 087H $DGS BEG_BLK, ??bb1A_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 089H, 00H, 0D8H $DGS END_BLK, ??eb1A_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 08BH $DGS END_BLK, ??eb16_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 08CH $DGS END_BLK, ??eb0A_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 08EH $DGS END_BLK, ??eb09_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 08FH $DGS END_BLK, ??eb00_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 090H $DGS BEG_BLK, ??bb1B_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 098H, 00H, 00H $DGS END_BLK, ??eb1B_renge_task_immed_run, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 09BH $DGS END_FUN, ??ef_renge_task_immed_run, U, U, 00H, 065H, 01H, 00H $DGS AUX_END, 09EH $DGS GLV_SYM, _wait_ms, U, U, 01H, 026H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 0EEH, 00H, 00H $DGS BEG_FUN, ??bf_wait_ms, U, U, 00H, 065H, 01H, 00H $DGS AUX_BEG, 0157H, 04H, 0E4H $DGS FUN_ARG, _ms, 02H, 0FFFFH, 0CH, 09H, 00H, 00H $DGS AUT_VAR, _fine, 00H, 0FFFFH, 0DH, 01H, 00H, 00H $DGS BEG_BLK, ??bb00_wait_ms, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 06H, 00H, 0E6H $DGS BEG_BLK, ??bb01_wait_ms, U, U, 00H, 064H, 01H, 00H $DGS AUX_BEG, 0DH, 00H, 00H $DGS END_BLK, ??eb01_wait_ms, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 0FH $DGS END_BLK, ??eb00_wait_ms, U, U, 00H, 064H, 01H, 00H $DGS AUX_END, 010H $DGS END_FUN, ??ef_wait_ms, U, U, 00H, 065H, 01H, 00H $DGS AUX_END, 011H $DGS GLV_SYM, _renge_flg_interval, U, U, 034CH, 027H, 00H, 00H $DGS GLV_SYM, _renge_task_interval_run_force, U, U, 034CH, 027H, 00H, 00H $DGS GLV_SYM, _renge_task_immediate_not_empty, U, U, 034CH, 027H, 00H, 00H $DGS GLV_SYM, _system_time, U, U, 0CH, 026H, 00H, 00H $DGS GLV_SYM, _tasks_immed, U, U, 0AH, 026H, 01H, 027H $DGS AUX_STR, 013H, 00H, 010H, 08H, 00H, 00H, 00H, 04H $DGS GLV_SYM, _tsk_sw, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_adc, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_batt, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_led_pow, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_led_wifi, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_led_notify, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_led_cam, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_misc_stat, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_debug, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_debug2, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _tsk_sys, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H $DGS GLV_SYM, _WDT_Restart, U, U, 01H, 02H, 01H, 02H $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H EXTRN _tsk_sw EXTRN _tsk_adc EXTRN _tsk_batt EXTRN _tsk_led_pow EXTRN _tsk_led_wifi EXTRN _tsk_led_notify EXTRN _tsk_led_cam EXTRN _tsk_misc_stat EXTRN _tsk_debug EXTRN _tsk_debug2 EXTRN _tsk_sys EXTRN _WDT_Restart PUBLIC _renge_flg_interval PUBLIC _renge_task_interval_run_force PUBLIC _renge_task_immediate_not_empty PUBLIC _system_time PUBLIC _tasks_immed PUBLIC _renge_init PUBLIC _renge_task_interval_run PUBLIC _renge_task_immed_add PUBLIC _renge_task_immed_run PUBLIC _wait_ms @@BITS BSEG _renge_flg_interval DBIT _renge_task_interval_run_force DBIT _renge_task_immediate_not_empty DBIT @@CNST CSEG MIRRORP @@R_INIT CSEG UNIT64KP DW loww (_tsk_sw) DW loww (_tsk_adc) DW loww (_tsk_batt) DW loww (_tsk_led_pow) DW loww (_tsk_led_wifi) DW loww (_tsk_led_notify) DW loww (_tsk_led_cam) DW loww (_tsk_misc_stat) DW loww (_tsk_debug) DW loww (_tsk_debug2) DW loww (_tsk_sys) @@INIT DSEG BASEP _tasks: DS (22) @@DATA DSEG BASEP _system_time: DS (1) DS (1) _tasks_immed: DS (16) @@R_INIS CSEG UNIT64KP @@INIS DSEG SADDRP @@DATS DSEG SADDRP @@CNSTL CSEG PAGE64KP @@RLINIT CSEG UNIT64KP @@INITL DSEG UNIT64KP @@DATAL DSEG UNIT64KP @@CALT CSEG CALLT0 ; Sub-Routines created by CC78K0R ROM_CODE CSEG BASE bs_S0096: clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 movw bc,ax ;[INF] 1, 1 onew ax ;[INF] 1, 1 movw _tasks_immed[bc],ax ;[INF] 3, 1 ret ;[INF] 1, 6 es_S0096: ROM_CODE CSEG BASE bs_S0094: mov a,[hl+1] ;[INF] 2, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 addw ax,#loww (_tasks_immed) ;[INF] 3, 1 movw de,ax ;[INF] 1, 1 movw ax,[de] ;[INF] 1, 1 or a,x ;[INF] 2, 1 ret ;[INF] 1, 6 es_S0094: ROM_CODE CSEG BASE bs_S0095: mov a,[hl+3] ;[INF] 2, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 addw ax,#loww (_tasks_immed) ;[INF] 3, 1 movw de,ax ;[INF] 1, 1 movw ax,[de] ;[INF] 1, 1 or a,x ;[INF] 2, 1 ret ;[INF] 1, 6 es_S0095: ; *** Sub-Routine Information *** ; ; $SUB bs_S0094 ; CODE SIZE= 13 bytes ; ; $SUB bs_S0095 ; CODE SIZE= 13 bytes ; ; $SUB bs_S0096 ; CODE SIZE= 9 bytes ; End of Sub-Routines ; line 1 : #pragma section @@CODE ROM_CODE ; line 2 : #pragma nop ; line 3 : #pragma ei ; line 4 : #pragma di ; line 5 : #pragma sfr ; line 6 : ; line 7 : /*************************************************************** ; *************** ; line 8 : タスクシステム? ; line 9 : なるほど、iTRONにはコンフィギュレータがあるはずだ。 ; line 10 : →作りました ; line 11 : ctr_mcu_config.rb 参照。 task_config.hが作成されます。 ; line 12 : *************************************************************** ; **************/ ; line 13 : #include "renge.h" ; line 14 : #include "renge_task_intval.h" ; line 15 : #include "renge_task_immediate.h" ; line 16 : #include "..\WDT.h" ; line 17 : #include "..\config.h" ; line 18 : #include "..\user_define.h" ; line 19 : ; line 20 : ; line 21 : #define _renge_test_ ; line 22 : ; line 23 : //************************************************************** ; **************** ; line 24 : bit renge_flg_interval; ; line 25 : bit renge_task_interval_run_force; ; line 26 : bit renge_task_immediate_not_empty; ; line 27 : ; line 28 : u8 system_time; ; line 29 : ; line 30 : ; line 31 : ; line 32 : #include "..\bsr_system.h" ; line 33 : extern system_status_ system_status; ; line 34 : ; line 35 : ; line 36 : ; line 37 : //************************************************************** ; **************** ; line 38 : static void renge_task_immed_init(); ; line 39 : static void renge_task_immed_del(); ; line 40 : ; line 41 : ; line 42 : ; line 43 : //************************************************************** ; **************** ; line 44 : task_status_immed ( *tasks_immed[ TASK_IMMED_RUN_LIST_MAX ] )(); ; line 45 : ; line 46 : ; line 47 : ; line 48 : /*************************************************************** ; *************** ; line 49 : 初期化 ; line 50 : ・タスクシステムの動的部分の初期化 ; line 51 : ・インターバルタイマ ; line 52 : *************************************************************** ; **************/ ; line 53 : void renge_init(){ ROM_CODE CSEG BASE _renge_init: $DGL 1,33 ??bf_renge_init: ; line 54 : renge_task_immed_init(); $DGL 0,2 br !_renge_task_immed_init ;[INF] 3, 3 ??ef_renge_init: ??ee_renge_init: ; line 55 : /* ; line 56 : イベントタイマのセットなど ; line 57 : 今回はRTCを流用しているのでコメントアウト ; line 58 : #define renge_tick 19xxxxxxx [ms] ; line 59 : renge_interval_init(); → RTC_init(); ; line 60 : */ ; line 61 : } ; line 62 : ; line 63 : ; line 64 : ; line 65 : /*************************************************************** ; *************** ; line 66 : システムチックを進める ; line 67 : *************************************************************** ; **************/ ; line 68 : /* ; line 69 : void renge_interval(){ ; line 70 : // RTCがやってくれる ; line 71 : →__interrupt void int_rtc_int(); ; line 72 : } ; line 73 : */ ; line 74 : ; line 75 : ; line 76 : ; line 77 : /*************************************************************** ; *************** ; line 78 : コンパイル時に決まっている、インターバル起動のタスク ; line 79 : そのうち、逐次起動と混ぜるかもしれない。 ; line 80 : *************************************************************** ; **************/ ; line 81 : err renge_task_interval_run(){ _renge_task_interval_run: $DGL 1,39 push hl ;[INF] 1, 1 ??bf_renge_task_interval_run: ; line 82 : u8 i; ; line 83 : ; line 84 : // インターバル起動 ; line 85 : if(( renge_flg_interval == 1 ) ; line 86 : || ( renge_task_interval_run_force != 0 )) // todo 統合 $DGL 0,6 bt _renge_flg_interval,$?L0007 ;[INF] 4, 5 bf _renge_task_interval_run_force,$?L0009 ;[INF] 4, 5 ?L0007: ; line 87 : { ??bb00_renge_task_interval_run: ; line 88 : renge_task_interval_run_force = 0; $DGL 0,8 clr1 _renge_task_interval_run_force ;[INF] 3, 2 ; line 89 : renge_flg_interval = 0; $DGL 0,9 clr1 _renge_flg_interval ;[INF] 3, 2 ; line 90 : for( i = 0; i != TSK_LAST; i += 1 ) $DGL 0,10 mov l,#00H ; 0 ;[INF] 2, 1 ?L0008: mov a,l ;[INF] 1, 1 cmp a,#0BH ; 11 ;[INF] 2, 1 bz $?L0009 ;[INF] 2, 4 ; line 91 : { ??bb01_renge_task_interval_run: ; line 92 : tasks[ i ](); $DGL 0,12 mov c,a ;[INF] 1, 1 clrb b ;[INF] 1, 1 shlw bc,1 ;[INF] 2, 1 movw ax,_tasks[bc] ;[INF] 3, 1 mov CS,#00H ; 0 ;[INF] 3, 1 call ax ;[INF] 2, 3 ; line 93 : // 逐次起動タスクがあったら起動しておく ; line 94 : renge_task_immed_run(); $DGL 0,14 call !_renge_task_immed_run ;[INF] 3, 3 ??eb01_renge_task_interval_run: ; line 95 : } $DGL 0,15 inc l ;[INF] 1, 1 br $?L0008 ;[INF] 2, 3 ?L0009: ??eb00_renge_task_interval_run: ; line 96 : } ; line 97 : return( ERR_SUCCESS ); $DGL 0,17 clrw bc ;[INF] 1, 1 ; line 98 : } $DGL 0,18 ??ef_renge_task_interval_run: pop hl ;[INF] 1, 1 ret ;[INF] 1, 6 ??ee_renge_task_interval_run: ; line 99 : ; line 100 : ; line 101 : ; line 102 : /*************************************************************** ; ************** ; line 103 : ■逐一起動タスク■ ; line 104 : ; line 105 : ●task_immed を返す関数。 ; line 106 : ●システムtick、何らかの割り込み(I2C通信完了など)で ; line 107 : スリープから復帰したタイミングで実行されます。 ; line 108 : ; line 109 : ■返値 ERR_FINISED タスクを削除 ; line 110 :     それ以外 次のタイミングでまた実行 ; line 111 : ; line 112 : *************************************************************** ; **************/ ; line 113 : ; line 114 : ; line 115 : /************************************** ; line 116 : **************************************/ ; line 117 : void renge_task_immed_init(){ _renge_task_immed_init: $DGL 1,54 push hl ;[INF] 1, 1 ??bf_renge_task_immed_init: ; line 118 : u8 i; ; line 119 : ; line 120 : for( i = 0; i < TASK_IMMED_RUN_LIST_MAX; i++ ){ $DGL 0,4 mov l,#00H ; 0 ;[INF] 2, 1 ?L0013: mov a,l ;[INF] 1, 1 cmp a,#08H ; 8 ;[INF] 2, 1 bnc $?L0014 ;[INF] 2, 4 ??bb00_renge_task_immed_init: ; line 121 : tasks_immed[ i ] = TSK_IMM_EMPTY_; $DGL 0,5 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 movw bc,ax ;[INF] 1, 1 clrw ax ;[INF] 1, 1 movw _tasks_immed[bc],ax ;[INF] 3, 1 ??eb00_renge_task_immed_init: ; line 122 : } $DGL 0,6 inc l ;[INF] 1, 1 br $?L0013 ;[INF] 2, 3 ?L0014: ; line 123 : } $DGL 0,7 ??ef_renge_task_immed_init: pop hl ;[INF] 1, 1 ret ;[INF] 1, 6 ??ee_renge_task_immed_init: ; line 124 : ; line 125 : ; line 126 : ; line 127 : /************************************** ; line 128 : 逐次実行タスクの登録 ; line 129 : 割り込み禁止 36us → ; line 130 : **************************************/ ; line 131 : err renge_task_immed_add( task_status* new_task ){ _renge_task_immed_add: $DGL 1,65 push hl ;[INF] 1, 1 push ax ;[INF] 1, 1 push ax ;[INF] 1, 1 movw hl,sp ;[INF] 3, 1 ??bf_renge_task_immed_add: ; line 132 : u8 i; ; line 133 : ; line 134 : // リストの空きの先頭に登録 ; line 135 : // 削除したばかりのタスクは、削除マーク(TSK_IMM_DELETED_)とな ; り、空きとは明示的に区別される ; line 136 : // 重複登録を避ける ; line 137 : for( i = 0; i < TASK_IMMED_RUN_LIST_MAX; i += 1 ) $DGL 0,7 mov [hl+1],#00H ; i,0 ;[INF] 3, 1 ?L0018: mov a,[hl+1] ; i ;[INF] 2, 1 cmp a,#08H ; 8 ;[INF] 2, 1 bnc $?L0019 ;[INF] 2, 4 ; line 138 : { ??bb00_renge_task_immed_add: ; line 139 : if( tasks_immed[ i ] != TSK_IMM_EMPTY_ ) $DGL 0,9 call !bs_S0094 ;[INF] 3, 3 bz $?L0021 ;[INF] 2, 4 ; line 140 : { ??bb01_renge_task_immed_add: ; line 141 : // 重複登録チェック ; line 142 : if( tasks_immed[ i ] == new_task ) $DGL 0,12 movw ax,[de] ;[INF] 1, 1 cmpw ax,[hl+2] ; new_task ;[INF] 3, 1 bnz $?L0022 ;[INF] 2, 4 ; line 143 : { ??bb02_renge_task_immed_add: ; line 144 : // 重複登録はしない ; line 145 : NOP(); $DGL 0,15 nop ;[INF] 1, 1 ; line 146 : return( ERR_ERR ); $DGL 0,16 onew bc ;[INF] 1, 1 br $?L0017 ;[INF] 2, 3 ??eb02_renge_task_immed_add: ; line 147 : } ; line 148 : } ??eb01_renge_task_immed_add: ?L0021: ; line 149 : else ; line 150 : { ??bb03_renge_task_immed_add: ; line 151 : // 空きを見つけた ; line 152 : // もたもたしているうちに割り込み等から割り込まれるの ; を考慮 ; line 153 : // 滅多にないはずだが ; line 154 : for( ; i < TASK_IMMED_RUN_LIST_MAX; i += 1 ) $DGL 0,24 mov a,[hl+1] ; i ;[INF] 2, 1 cmp a,#08H ; 8 ;[INF] 2, 1 bnc $?L0026 ;[INF] 2, 4 ; line 155 : { ??bb04_renge_task_immed_add: ; line 156 : if( tasks_immed[ i ] == TSK_IMM_EMPTY_ ) $DGL 0,26 call !bs_S0094 ;[INF] 3, 3 bnz $?L0028 ;[INF] 2, 4 ; line 157 : { ??bb05_renge_task_immed_add: ; line 158 : tasks_immed[ i ] = new_task; $DGL 0,28 movw ax,[hl+2] ; new_task ;[INF] 2, 1 movw [de],ax ;[INF] 1, 1 ; line 159 : return( ERR_SUCCESS ); $DGL 0,29 clrw bc ;[INF] 1, 1 br $?L0017 ;[INF] 2, 3 ??eb05_renge_task_immed_add: ; line 160 : } ?L0028: ??eb04_renge_task_immed_add: ; line 161 : } $DGL 0,31 inc [hl+1] ; i ;[INF] 3, 2 br $?L0021 ;[INF] 2, 3 ?L0026: ; line 162 : // 割り込まれてタスク登録できなくなった ; line 163 : return( ERR_ERR ); $DGL 0,33 onew bc ;[INF] 1, 1 br $?L0017 ;[INF] 2, 3 ??eb03_renge_task_immed_add: ; line 164 : } ?L0022: ??eb00_renge_task_immed_add: ; line 165 : } $DGL 0,35 inc [hl+1] ; i ;[INF] 3, 2 br $?L0018 ;[INF] 2, 3 ?L0019: ; line 166 : // タスク登録しすぎ(無いはず ; line 167 : NOP(); // デバッガで捕まえるため $DGL 0,37 nop ;[INF] 1, 1 ; line 168 : return( ERR_ERR ); $DGL 0,38 onew bc ;[INF] 1, 1 ; line 169 : } ?L0017: $DGL 0,39 ??ef_renge_task_immed_add: addw sp,#04H ;[INF] 2, 1 pop hl ;[INF] 1, 1 ret ;[INF] 1, 6 ??ee_renge_task_immed_add: ; line 170 : ; line 171 : ; line 172 : ; line 173 : /************************************** ; line 174 : 逐次実行タスクの実行 ; line 175 : **************************************/ ; line 176 : err renge_task_immed_run(){ _renge_task_immed_run: $DGL 1,98 push hl ;[INF] 1, 1 subw sp,#04H ;[INF] 2, 1 movw hl,sp ;[INF] 3, 1 ??bf_renge_task_immed_run: ; line 177 : u8 list_id; ; line 178 : u8 last_task_id; ; line 179 : ; line 180 : do{ ??bb00_renge_task_immed_run: ; line 181 : last_task_id = 0xFF; $DGL 0,6 mov [hl+2],#0FFH ; last_task_id,255 ;[INF] 3, 1 ; line 182 : for( list_id = 0; list_id < TASK_IMMED_RUN_LIST_MAX; list_ ; id += 1 ){ $DGL 0,7 mov [hl+3],#00H ; list_id,0 ;[INF] 3, 1 ?L0035: mov a,[hl+3] ; list_id ;[INF] 2, 1 cmp a,#08H ; 8 ;[INF] 2, 1 bnc $?L0036 ;[INF] 2, 4 ??bb01_renge_task_immed_run: ; line 183 : if( tasks_immed[ list_id ] != TSK_IMM_EMPTY_ ){ $DGL 0,8 call !bs_S0095 ;[INF] 3, 3 bz $?L0038 ;[INF] 2, 4 ??bb02_renge_task_immed_run: ; line 184 : #ifdef _renge_test_ ; line 185 : if( tasks_immed[ list_id ] == TSK_IMM_DELETED_ ) $DGL 0,10 movw ax,[de] ;[INF] 1, 1 onew bc ;[INF] 1, 1 cmpw ax,bc ;[INF] 1, 1 bnz $?L0040 ;[INF] 2, 4 ; line 186 : { ??bb03_renge_task_immed_run: ; line 187 : NOP(); $DGL 0,12 nop ;[INF] 1, 1 ??eb03_renge_task_immed_run: ; line 188 : // タスク管理の不備 ; line 189 : // 存在しないタスクを実行しようとした ; line 190 : // タスクの削除後の処理がまずい ; line 191 : // 予期しないタイミングで immed_run が呼ばれた ; line 192 : } $DGL 0,17 br $?L0039 ;[INF] 2, 3 ?L0040: ; line 193 : else ; line 194 : #endif ; line 195 : { ??bb04_renge_task_immed_run: ; line 196 : if( tasks_immed[ list_id ]() == ERR_SUCCESS ) $DGL 0,21 mov a,[hl+3] ; list_id ;[INF] 2, 1 mov c,a ;[INF] 1, 1 clrb b ;[INF] 1, 1 shlw bc,1 ;[INF] 2, 1 movw ax,_tasks_immed[bc] ;[INF] 3, 1 mov CS,#00H ; 0 ;[INF] 3, 1 call ax ;[INF] 2, 3 cmp0 c ;[INF] 1, 1 bnz $?L0042 ;[INF] 2, 4 ; line 197 : { ??bb05_renge_task_immed_run: ; line 198 : tasks_immed[ list_id ] = TSK_IMM_DELETED_; $DGL 0,23 mov a,[hl+3] ; list_id ;[INF] 2, 1 call !bs_S0096 ;[INF] 3, 3 ??eb05_renge_task_immed_run: ; line 199 : } ?L0042: ; line 200 : last_task_id = list_id; $DGL 0,25 mov a,[hl+3] ; list_id ;[INF] 2, 1 mov [hl+2],a ; last_task_id ;[INF] 2, 1 ??eb04_renge_task_immed_run: ; line 201 : } ; line 202 : } $DGL 0,27 ??eb02_renge_task_immed_run: br $?L0039 ;[INF] 2, 3 ?L0038: ; line 203 : #ifdef _renge_test_ ; line 204 : else ; line 205 : { ??bb06_renge_task_immed_run: ; line 206 : list_id += 1; $DGL 0,31 inc [hl+3] ; list_id ;[INF] 3, 2 ; line 207 : for( ; list_id < TASK_IMMED_RUN_LIST_MAX; list_id+ ; + ) $DGL 0,32 ?L0044: mov a,[hl+3] ; list_id ;[INF] 2, 1 cmp a,#08H ; 8 ;[INF] 2, 1 bnc $?L0036 ;[INF] 2, 4 ; line 208 : { ??bb07_renge_task_immed_run: ; line 209 : if( tasks_immed[ list_id ] != TSK_IMM_EMPTY_ ) $DGL 0,34 call !bs_S0095 ;[INF] 3, 3 skz ;[INF] 2, 1 ; line 210 : { ??bb08_renge_task_immed_run: ; line 211 : NOP(); // ? $DGL 0,36 nop ;[INF] 1, 1 ??eb08_renge_task_immed_run: ; line 212 : } ?L0047: ??eb07_renge_task_immed_run: ; line 213 : } $DGL 0,38 inc [hl+3] ; list_id ;[INF] 3, 2 br $?L0044 ;[INF] 2, 3 ; line 214 : break; ??eb06_renge_task_immed_run: ; line 215 : } ?L0039: ??eb01_renge_task_immed_run: ; line 216 : #endif ; line 217 : } $DGL 0,42 inc [hl+3] ; list_id ;[INF] 3, 2 br $?L0035 ;[INF] 2, 3 ?L0036: ; line 218 : ; line 219 : // タスク削除 ; line 220 : { ??bb09_renge_task_immed_run: ; line 221 : if( last_task_id != 0xFF ) $DGL 0,46 mov a,[hl+2] ; last_task_id ;[INF] 2, 1 inc a ;[INF] 1, 1 sknz ;[INF] 2, 1 br !?L0049 ;[INF] 3, 3 ; line 222 : { ??bb0A_renge_task_immed_run: ; line 223 : u8 i,j; ; line 224 : ; line 225 : #ifdef _renge_test_ ; line 226 : if ( tasks_immed[ 1 ] != 0 ){ $DGL 0,51 clrw ax ;[INF] 1, 1 cmpw ax,!_tasks_immed+2 ;[INF] 3, 1 skz ;[INF] 2, 1 ??bb0B_renge_task_immed_run: ; line 227 : NOP(); $DGL 0,52 nop ;[INF] 1, 1 ??eb0B_renge_task_immed_run: ; line 228 : } ?L0051: ; line 229 : #endif ; line 230 : // リスト前詰め ; line 231 : ; line 232 : i = 0; // 前詰め後リストの最後尾 $DGL 0,57 mov [hl+1],#00H ; i,0 ;[INF] 3, 1 ; line 233 : j = 1; // リストの後ろの方のタスクを探す $DGL 0,58 mov [hl+0],#01H ; j,1 ;[INF] 3, 1 ; line 234 : for( ; j < TASK_IMMED_RUN_LIST_MAX; j++ ) $DGL 0,59 ?L0053: mov a,[hl] ; j ;[INF] 1, 1 cmp a,#08H ; 8 ;[INF] 2, 1 skc ;[INF] 2, 1 br !?L0054 ;[INF] 3, 3 ; line 235 : { ??bb0C_renge_task_immed_run: ; line 236 : DI(); $DGL 0,61 di ;[INF] 3, 4 ; line 237 : if( tasks_immed[ i ] == TSK_IMM_DELETED_ ) $DGL 0,62 mov a,[hl+1] ; i ;[INF] 2, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 movw bc,ax ;[INF] 1, 1 movw ax,_tasks_immed[bc] ;[INF] 3, 1 onew bc ;[INF] 1, 1 cmpw ax,bc ;[INF] 1, 1 bnz $?L0056 ;[INF] 2, 4 ; line 238 : { ??bb0D_renge_task_immed_run: ; line 239 : if( tasks_immed[ j ] == TSK_IMM_EMPTY_ ) $DGL 0,64 mov a,[hl] ; j ;[INF] 1, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 addw ax,#loww (_tasks_immed) ;[INF] 3, 1 movw de,ax ;[INF] 1, 1 movw ax,[de] ;[INF] 1, 1 or a,x ;[INF] 2, 1 bnz $?L0058 ;[INF] 2, 4 ; line 240 : { ??bb0E_renge_task_immed_run: ; line 241 : // リストの最後だった ; line 242 : for( ; i < j ; i += 1 ) $DGL 0,67 ?L0060: mov a,[hl+1] ; i ;[INF] 2, 1 cmp a,[hl] ; j ;[INF] 1, 1 bnc $?L0061 ;[INF] 2, 4 ; line 243 : { ??bb0F_renge_task_immed_run: ; line 244 : tasks_immed[ i ] = TSK_IMM_EMPTY_; $DGL 0,69 mov a,[hl+1] ; i ;[INF] 2, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 movw bc,ax ;[INF] 1, 1 clrw ax ;[INF] 1, 1 movw _tasks_immed[bc],ax ;[INF] 3, 1 ??eb0F_renge_task_immed_run: ; line 245 : } $DGL 0,70 inc [hl+1] ; i ;[INF] 3, 2 br $?L0060 ;[INF] 2, 3 ?L0061: ; line 246 : #ifdef _renge_test_ ; line 247 : /// ほんと? ; line 248 : j += 1; $DGL 0,73 inc [hl+0] ; j ;[INF] 3, 2 ; line 249 : for( ; j < TASK_IMMED_RUN_LIST_MAX; j+ ; + ) $DGL 0,74 ?L0063: mov a,[hl] ; j ;[INF] 1, 1 cmp a,#08H ; 8 ;[INF] 2, 1 bnc $?L0064 ;[INF] 2, 4 ; line 250 : { ??bb10_renge_task_immed_run: ; line 251 : if( tasks_immed[ j ] != TSK_IMM_EM ; PTY_ ) $DGL 0,76 mov a,[hl] ; j ;[INF] 1, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 addw ax,#loww (_tasks_immed) ;[INF] 3, 1 movw de,ax ;[INF] 1, 1 movw ax,[de] ;[INF] 1, 1 or a,x ;[INF] 2, 1 skz ;[INF] 2, 1 ; line 252 : { ??bb11_renge_task_immed_run: ; line 253 : NOP(); // ? $DGL 0,78 nop ;[INF] 1, 1 ??eb11_renge_task_immed_run: ; line 254 : } ?L0066: ; line 255 : } $DGL 0,80 ??eb10_renge_task_immed_run: inc [hl+0] ; j ;[INF] 3, 2 br $?L0063 ;[INF] 2, 3 ?L0064: ; line 256 : #endif ; line 257 : EI(); $DGL 0,82 ei ;[INF] 3, 4 ; line 258 : break; $DGL 0,83 br $?L0054 ;[INF] 2, 3 ??eb0E_renge_task_immed_run: ; line 259 : } ?L0058: ; line 260 : if( tasks_immed[ j ] != TSK_IMM_DELETED_ ) $DGL 0,85 mov a,[hl] ; j ;[INF] 1, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 addw ax,#loww (_tasks_immed) ;[INF] 3, 1 movw de,ax ;[INF] 1, 1 movw ax,[de] ;[INF] 1, 1 onew bc ;[INF] 1, 1 cmpw ax,bc ;[INF] 1, 1 bz $?L0057 ;[INF] 2, 4 ; line 261 : { ??bb12_renge_task_immed_run: ; line 262 : // 探索隊が前詰めすべきタスクを見つけた ; line 263 : tasks_immed[ i ] = tasks_immed[ j ]; $DGL 0,88 movw ax,[de] ;[INF] 1, 1 movw bc,ax ;[INF] 1, 1 mov a,[hl+1] ; i ;[INF] 2, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 xchw ax,bc ;[INF] 1, 1 movw _tasks_immed[bc],ax ;[INF] 3, 1 ; line 264 : tasks_immed[ j ] = TSK_IMM_DELETED_; $DGL 0,89 mov a,[hl] ; j ;[INF] 1, 1 call !bs_S0096 ;[INF] 3, 3 ; line 265 : i += 1; $DGL 0,90 inc [hl+1] ; i ;[INF] 3, 2 ??eb12_renge_task_immed_run: ; line 266 : } ; line 267 : } $DGL 0,92 ??eb0D_renge_task_immed_run: br $?L0057 ;[INF] 2, 3 ?L0056: ; line 268 : else ; line 269 : { ??bb13_renge_task_immed_run: ; line 270 : #ifdef _renge_test_ ; line 271 : // タスクが滞留 ; line 272 : if( tasks_immed[ i ] == TSK_IMM_EMPTY_ ) $DGL 0,97 call !bs_S0094 ;[INF] 3, 3 sknz ;[INF] 2, 1 ; line 273 : { ??bb14_renge_task_immed_run: ; line 274 : NOP(); $DGL 0,99 nop ;[INF] 1, 1 ??eb14_renge_task_immed_run: ; line 275 : // そんなはずない ; line 276 : } ?L0070: ; line 277 : #endif ; line 278 : i += 1; $DGL 0,103 inc [hl+1] ; i ;[INF] 3, 2 ??eb13_renge_task_immed_run: ; line 279 : } ?L0057: ; line 280 : EI(); $DGL 0,105 ei ;[INF] 3, 4 ; line 281 : if( tasks_immed[ i ] == TSK_IMM_EMPTY_ ) $DGL 0,106 call !bs_S0094 ;[INF] 3, 3 bnz $?L0072 ;[INF] 2, 4 ; line 282 : { ??bb15_renge_task_immed_run: ; line 283 : #ifdef _renge_test_ ; line 284 : NOP(); $DGL 0,109 nop ;[INF] 1, 1 ; line 285 : #endif ; line 286 : break; $DGL 0,111 br $?L0054 ;[INF] 2, 3 ??eb15_renge_task_immed_run: ; line 287 : // リストの最後だった ; line 288 : } ?L0072: ??eb0C_renge_task_immed_run: ; line 289 : } $DGL 0,114 inc [hl+0] ; j ;[INF] 3, 2 br !?L0053 ;[INF] 3, 3 ?L0054: ; line 290 : DI(); $DGL 0,115 di ;[INF] 3, 4 ; line 291 : ; line 292 : // ここまでで完全に前詰めされている ; line 293 : for( j = 0; j < TASK_IMMED_RUN_LIST_MAX; j++ ) $DGL 0,118 mov [hl+0],#00H ; j,0 ;[INF] 3, 1 ?L0074: mov a,[hl] ; j ;[INF] 1, 1 cmp a,#08H ; 8 ;[INF] 2, 1 bnc $?L0075 ;[INF] 2, 4 ; line 294 : { ??bb16_renge_task_immed_run: ; line 295 : if( tasks_immed[ j ] == TSK_IMM_EMPTY_ ) $DGL 0,120 mov a,[hl] ; j ;[INF] 1, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 addw ax,#loww (_tasks_immed) ;[INF] 3, 1 movw de,ax ;[INF] 1, 1 movw ax,[de] ;[INF] 1, 1 or a,x ;[INF] 2, 1 bnz $?L0077 ;[INF] 2, 4 ; line 296 : { ??bb17_renge_task_immed_run: ; line 297 : #ifdef _renge_test_ ; line 298 : NOP(); $DGL 0,123 nop ;[INF] 1, 1 ; line 299 : j += 1; $DGL 0,124 inc [hl+0] ; j ;[INF] 3, 2 ; line 300 : for( ; j < TASK_IMMED_RUN_LIST_MAX; j++ ) $DGL 0,125 ?L0079: mov a,[hl] ; j ;[INF] 1, 1 cmp a,#08H ; 8 ;[INF] 2, 1 bnc $?L0075 ;[INF] 2, 4 ; line 301 : { ??bb18_renge_task_immed_run: ; line 302 : if( tasks_immed[ j ] != TSK_IMM_EMPTY_ ; ) $DGL 0,127 mov a,[hl] ; j ;[INF] 1, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 addw ax,#loww (_tasks_immed) ;[INF] 3, 1 movw de,ax ;[INF] 1, 1 movw ax,[de] ;[INF] 1, 1 or a,x ;[INF] 2, 1 skz ;[INF] 2, 1 ; line 303 : { ??bb19_renge_task_immed_run: ; line 304 : NOP(); // ? $DGL 0,129 nop ;[INF] 1, 1 ??eb19_renge_task_immed_run: ; line 305 : } ?L0082: ??eb18_renge_task_immed_run: ; line 306 : } $DGL 0,131 inc [hl+0] ; j ;[INF] 3, 2 br $?L0079 ;[INF] 2, 3 ; line 307 : #endif ; line 308 : break; ??eb17_renge_task_immed_run: ; line 309 : // リストの最後 ; line 310 : } ?L0077: ; line 311 : if( tasks_immed[ j ] == TSK_IMM_DELETED_ ) $DGL 0,136 mov a,[hl] ; j ;[INF] 1, 1 clrb x ;[INF] 1, 1 shrw ax,7 ;[INF] 2, 1 addw ax,#loww (_tasks_immed) ;[INF] 3, 1 movw de,ax ;[INF] 1, 1 movw ax,[de] ;[INF] 1, 1 onew bc ;[INF] 1, 1 cmpw ax,bc ;[INF] 1, 1 bnz $?L0084 ;[INF] 2, 4 ; line 312 : { ??bb1A_renge_task_immed_run: ; line 313 : tasks_immed[ j ] = TSK_IMM_EMPTY_; $DGL 0,138 clrw ax ;[INF] 1, 1 movw [de],ax ;[INF] 1, 1 ??eb1A_renge_task_immed_run: ; line 314 : } ?L0084: ??eb16_renge_task_immed_run: ; line 315 : } $DGL 0,140 inc [hl+0] ; j ;[INF] 3, 2 br $?L0074 ;[INF] 2, 3 ?L0075: ; line 316 : EI(); $DGL 0,141 ei ;[INF] 3, 4 ??eb0A_renge_task_immed_run: ; line 317 : } ?L0049: ??eb09_renge_task_immed_run: ; line 318 : } ??eb00_renge_task_immed_run: ; line 319 : } ; line 320 : #if 0 ; line 321 : while( last_task_id != 0xFF ); // タスクが残っていたら延々再実 ; 行 ; line 322 : #else ; line 323 : while( 0 ); ; line 324 : #endif ; line 325 : ; line 326 : if( last_task_id != 0xFF ) $DGL 0,151 mov a,[hl+2] ; last_task_id ;[INF] 2, 1 inc a ;[INF] 1, 1 bz $?L0086 ;[INF] 2, 4 ; line 327 : { ??bb1B_renge_task_immed_run: ; line 328 : // まだタスクが残ってる(また呼んでね) ; line 329 : return( ERR_ERR ); $DGL 0,154 onew bc ;[INF] 1, 1 br $?L0031 ;[INF] 2, 3 ??eb1B_renge_task_immed_run: ; line 330 : } ?L0086: ; line 331 : ; line 332 : return( ERR_SUCCESS ); $DGL 0,157 clrw bc ;[INF] 1, 1 ; line 333 : } ?L0031: $DGL 0,158 ??ef_renge_task_immed_run: addw sp,#04H ;[INF] 2, 1 pop hl ;[INF] 1, 1 ret ;[INF] 1, 6 ??ee_renge_task_immed_run: ; line 334 : ; line 335 : ; line 336 : ; line 337 : /*************************************************************** ; *************** ; line 338 : 単位は ms ; line 339 : NOPを回すだけ、指定時間CPUを *占有します* 。 ; line 340 : 割り込みとか入るとその分遅れます。 ; line 341 : 少し誤差あります。 ; line 342 : *************************************************************** ; **************/ ; line 343 : void wait_ms( u8 ms ){ _wait_ms: $DGL 1,222 push hl ;[INF] 1, 1 push ax ;[INF] 1, 1 push ax ;[INF] 1, 1 movw hl,sp ;[INF] 3, 1 ??bf_wait_ms: ; line 344 : u16 fine; ; line 345 : ; line 346 : WDT_Restart(); $DGL 0,4 call !_WDT_Restart ;[INF] 3, 3 ; line 347 : // まだ適当です! ; line 348 : while( ms != 0 ){ $DGL 0,6 ?L0090: mov a,[hl+2] ; ms ;[INF] 2, 1 cmp0 a ;[INF] 1, 1 bz $?L0091 ;[INF] 2, 4 ??bb00_wait_ms: ; line 349 : ms--; $DGL 0,7 dec [hl+2] ; ms ;[INF] 3, 2 ; line 350 : #ifdef _OVERCLOCK_ ; line 351 : fine = 860; $DGL 0,9 movw ax,#035CH ; 860 ;[INF] 3, 1 movw [hl],ax ; fine ;[INF] 1, 1 ; line 352 : #else ; line 353 : fine = 430; ; line 354 : #endif ; line 355 : while( fine != 0 ){ $DGL 0,13 ?L0092: clrw ax ;[INF] 1, 1 cmpw ax,[hl+0] ; fine ;[INF] 3, 1 bz $?L0090 ;[INF] 2, 4 ??bb01_wait_ms: ; line 356 : fine -= 1; $DGL 0,14 decw [hl+0] ; fine ;[INF] 3, 2 ??eb01_wait_ms: ; line 357 : } $DGL 0,15 br $?L0092 ;[INF] 2, 3 ??eb00_wait_ms: ; line 358 : } ?L0091: ; line 359 : } $DGL 0,17 ??ef_wait_ms: addw sp,#04H ;[INF] 2, 1 pop hl ;[INF] 1, 1 ret ;[INF] 1, 6 ??ee_wait_ms: @@CODEL CSEG @@BASE CSEG BASE END ; *** Code Information *** ; ; $FILE C:\78k_data\yav-mcu-basara\branches\0.10(fix)\renge\renge.c ; ; $FUNC renge_init(53) ; void=(void) ; CODE SIZE= 3 bytes, CLOCK_SIZE= 3 clocks, STACK_SIZE= 0 bytes ; ; $CALL renge_task_immed_init(54) ; void=(void) ; ; $FUNC renge_task_interval_run(81) ; bc=(void) ; CODE SIZE= 43 bytes, CLOCK_SIZE= 45 clocks, STACK_SIZE= 6 bytes ; ; $CALL (92) ; void=(void) ; ; $CALL renge_task_immed_run(94) ; bc=(void) ; ; $FUNC renge_task_immed_init(117) ; void=(void) ; CODE SIZE= 21 bytes, CLOCK_SIZE= 24 clocks, STACK_SIZE= 2 bytes ; ; $FUNC renge_task_immed_add(131) ; bc=(pointer new_task:ax) ; CODE SIZE= 66 bytes, CLOCK_SIZE= 98 clocks, STACK_SIZE= 10 bytes ; ; $FUNC renge_task_immed_run(176) ; bc=(void) ; CODE SIZE= 341 bytes, CLOCK_SIZE= 381 clocks, STACK_SIZE= 10 bytes ; ; $CALL (196) ; bc=(void) ; ; $FUNC wait_ms(343) ; void=(unsigned char ms:x) ; CODE SIZE= 36 bytes, CLOCK_SIZE= 36 clocks, STACK_SIZE= 10 bytes ; ; $CALL WDT_Restart(346) ; void=(void) ; Target chip : uPD79F0104 ; Device file : E1.00b