[302] | 1 | TOPPERS Confidential
|
---|
| 2 | TOPPERSããã¸ã§ã¯ã ãã£ã¹ã«ãã·ã§ã³ã¡ã¢
|
---|
| 3 | ãªã¼ãã©ã³ãã³ãã©ã«é¢ããè¨è¨ã¡ã¢
|
---|
| 4 |
|
---|
| 5 | ä½æè
|
---|
| 6 | : é«ç°åºç« ï¼åå¤å±å¤§å¦ï¼
|
---|
| 7 | æçµæ´æ°: 2015å¹´8æ21æ¥
|
---|
| 8 |
|
---|
| 9 | âã¡ã¢ã®ä½ç½®ä»ã
|
---|
| 10 |
|
---|
| 11 | ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASP3ã«ã¼ãã«ã®ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã«
|
---|
| 12 | é¢ããè¨è¨ã¡ã¢ã§ããï¼
|
---|
| 13 |
|
---|
| 14 | âãã¼ã¿åã¨å®æ°ã®å®ç¾©
|
---|
| 15 |
|
---|
| 16 | ããã»ããµæéã表ç¾ãããã¼ã¿åPRCTIMã®å®ç¾©ãï¼t_stddef.hã«å«ããï¼
|
---|
| 17 |
|
---|
| 18 | ----------------------------------------
|
---|
| 19 | typedef uint32_t PRCTIM; /* ããã»ããµæé */
|
---|
| 20 | ----------------------------------------
|
---|
| 21 |
|
---|
| 22 | æ®ãããã»ããµæéã«æå®ã§ããæ大å¤ã¯ï¼ã¿ã¼ã²ããä¾åé¨ï¼target_kernel.h
|
---|
| 23 | ã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã§å®ç¾©ãããã®ã¨ãããï¼ããã©
|
---|
| 24 | ã«ãã®å®ç¾©ãkernel.hã«å«ããï¼
|
---|
| 25 |
|
---|
| 26 | ----------------------------------------
|
---|
| 27 | #ifndef TMAX_OVRTIM
|
---|
| 28 | #define TMAX_OVRTIM UINT32_MAX
|
---|
| 29 | #endif /* TMAX_OVRTIM */
|
---|
| 30 | ----------------------------------------
|
---|
| 31 |
|
---|
| 32 | ã¾ãï¼ãªã¼ãã©ã³ãã³ãã©ã®ãã¼ã¿åOVRHDRã®å®ç¾©ãï¼kernel.hã«å«ããï¼
|
---|
| 33 |
|
---|
| 34 | ----------------------------------------
|
---|
| 35 | typedef void (*OVRHDR)(ID tskid, intptr_t exinf);
|
---|
| 36 | ----------------------------------------
|
---|
| 37 |
|
---|
| 38 | ãã®ä»ã«ï¼ãªã¼ãã©ã³ãã³ãã©æ©è½ã®ãµã¼ãã¹ã³ã¼ã«ã®å®£è¨ã¨é¢é£ããå®æ°ã®
|
---|
| 39 | å®ç¾©ãï¼kernelã«å«ããï¼
|
---|
| 40 |
|
---|
| 41 | âç¨ãããã¼ãã¦ã§ã¢è³æºã¨ãµãã¼ãã§ããªãå ´åã®æªç½®
|
---|
| 42 |
|
---|
| 43 | ãªã¼ãã©ã³ãã³ãã©ãå®ç¾ããããã«ï¼ã·ã¹ãã æå»ãé²ããããã®é«å解è½
|
---|
| 44 | ã¿ã¤ãã¨ã¯å¥ã®ã¿ã¤ãï¼ä»¥ä¸ï¼ããããªã¼ãã©ã³ã¿ã¤ãã¨å¼ã¶ï¼ãç¨ããï¼ã
|
---|
| 45 | ã®ããï¼ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼ãªã¼ãã©ã³ãã³ãã©ããµãã¼ãã§ããªãå ´å
|
---|
| 46 | ãèããããï¼
|
---|
| 47 |
|
---|
| 48 | ããã§ï¼ãªã¼ãã©ã³ãã³ãã©ããµãã¼ãã§ããå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã«
|
---|
| 49 | ããã¦ï¼TOPPERS_TARGET_SUPPORT_OVRHDRããã¯ãå®ç¾©ãããã®ã¨ããï¼
|
---|
| 50 |
|
---|
| 51 | ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã®kernel.hã§ã¯ï¼TOPPERS_TARGET_SUPPORT_OVRHDR
|
---|
| 52 | ããã¯ãå®ç¾©ããã¦ããã°ï¼TOPPERS_SUPPORT_OVRHDRãå®ç¾©ããï¼
|
---|
| 53 |
|
---|
| 54 | ----------------------------------------
|
---|
| 55 | #ifdef TOPPERS_TARGET_SUPPORT_OVRHDR
|
---|
| 56 | #define TOPPERS_SUPPORT_OVRHDR /* ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µ */
|
---|
| 57 | #endif /* TOPPERS_TARGET_SUPPORT_OVRHDR */
|
---|
| 58 | ----------------------------------------
|
---|
| 59 |
|
---|
| 60 | ãªã¼ãã©ã³ãã³ãã©æ©è½ã¯ï¼TOPPERS_SUPPORT_OVRHDRãå®ç¾©ããã¦ããå ´åã®
|
---|
| 61 | ã¿çµã¿è¾¼ãï¼ããã«ããï¼ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã使ç¨ãï¼ã¿ã¼ã²ãã
|
---|
| 62 | ä¾åé¨ããªã¼ãã©ã³ãã³ãã©ããµãã¼ããã¦ããå ´åã®ã¿ï¼ãªã¼ãã©ã³ãã³ã
|
---|
| 63 | ã©æ©è½ãçµã¿è¾¼ã¾ãããã¨ã«ãªãï¼
|
---|
| 64 |
|
---|
| 65 | âãªã¼ãã©ã³ãã³ãã©ã«é¢é£ãããã¼ã¿æ§é
|
---|
| 66 |
|
---|
| 67 | ãªã¼ãã©ã³ãã³ãã©ãå®è£
|
---|
| 68 | ããããã«ï¼TCBã«ï¼ãªã¼ãã©ã³ãã³ãã©ãåä½ç¶æ
|
---|
| 69 |
|
---|
| 70 | ã§ãããã¨ã示ããã£ã¼ã«ãstaovrã¨ï¼æ®ãããã»ããµæéã表ããã£ã¼ã«ã
|
---|
| 71 | leftotmã追å ããï¼task.hï¼ï¼
|
---|
| 72 |
|
---|
| 73 | ----------------------------------------
|
---|
| 74 | typedef struct task_control_block {
|
---|
| 75 | ...
|
---|
| 76 | BIT_FIELD_BOOL staovr : 1; /* ãªã¼ãã©ã³ãã³ãã©åä½ç¶æ
|
---|
| 77 | */
|
---|
| 78 | ...
|
---|
| 79 | PRCTIM leftotm; /* æ®ãããã»ããµæé */
|
---|
| 80 | ...
|
---|
| 81 | } TCB;
|
---|
| 82 | ----------------------------------------
|
---|
| 83 |
|
---|
| 84 | ãªã¼ãã©ã³ãã³ãã©ã®åä½ç¶æ
|
---|
| 85 | ã¯ï¼ã¿ã¹ã¯ã®ç»é²æã¨ã¿ã¹ã¯ãä¼æ¢ç¶æ
|
---|
| 86 | ã«é·ç§»
|
---|
| 87 | ããæã«ï¼åä½ãã¦ããªãç¶æ
|
---|
| 88 | ã«åæåãããï¼»NGKI2587ï¼½ãã¨ããï¼
|
---|
| 89 | make_dormantã®ä¸ã§staovrãfalseã«åæåããï¼task.cï¼ï¼
|
---|
| 90 |
|
---|
| 91 | ----------------------------------------
|
---|
| 92 | void
|
---|
| 93 | make_dormant(TCB *p_tcb)
|
---|
| 94 | {
|
---|
| 95 | ...
|
---|
| 96 | p_tcb->staovr = false;
|
---|
| 97 | ...
|
---|
| 98 | }
|
---|
| 99 | ----------------------------------------
|
---|
| 100 |
|
---|
| 101 | ãªã¼ãã©ã³ãã³ãã©ã«å¯¾ãã¦ã¯ï¼ç®¡çãããã¯ã¯å¿
|
---|
| 102 | è¦ãªãï¼DEF_OVRã§å®ç¾©ãã
|
---|
| 103 | æ
|
---|
| 104 | å ±ãæ ¼ç´ããåæåãããã¯ã®ã¿ãç¨æããï¼åæåãããã¯ãï¼åä¸ã®è¦
|
---|
| 105 | ç´ ã§ååã§ããï¼é
|
---|
| 106 | åã§ããå¿
|
---|
| 107 | è¦ã¯ãªãï¼overrun.hï¼ï¼
|
---|
| 108 |
|
---|
| 109 | ----------------------------------------
|
---|
| 110 | typedef struct overrun_handler_initialization_block {
|
---|
| 111 | ATR ovratr; /* ãªã¼ãã©ã³ãã³ãã©å±æ§ */
|
---|
| 112 | OVRHDR ovrhdr; /* ãªã¼ãã©ã³ãã³ãã©ã®èµ·åçªå° */
|
---|
| 113 | } OVRINIB;
|
---|
| 114 | ----------------------------------------
|
---|
| 115 | extern const OVRINIB ovrinib;
|
---|
| 116 | ----------------------------------------
|
---|
| 117 |
|
---|
| 118 | ãªã¼ãã©ã³ã¿ã¤ããåä½ä¸ãã示ããã©ã°ã¨ãã¦ï¼boot_tåã®å¤æ°
|
---|
| 119 | ovrtimer_flagãç¨æããï¼overrun.hï¼overrun.cï¼ï¼
|
---|
| 120 |
|
---|
| 121 | ----------------------------------------
|
---|
| 122 | extern boot_t ovrtimer_flag;
|
---|
| 123 | ----------------------------------------
|
---|
| 124 |
|
---|
| 125 | ã·ã³ã°ã«ããã»ããµã®å ´åã«ã¯ï¼ãªã¼ãã©ã³ã¿ã¤ããåä½ä¸ãã¯ï¼æ¬¡ã®æ¹æ³ã§
|
---|
| 126 | å¤å¥ãããã¨ãã§ããï¼
|
---|
| 127 |
|
---|
| 128 | ã¿ã¹ã¯ã³ã³ããã¹ãã§ã¯ï¼
|
---|
| 129 | (p_runtsk != NULL && p_runtsk->staovr)ã®æã®ã¿åä½ãã¦ããï¼
|
---|
| 130 | éã¿ã¹ã¯ã³ã³ããã¹ãã§ã¯ï¼åä½ãã¦ããªãï¼
|
---|
| 131 |
|
---|
| 132 | ãã®ããï¼ãã®ãã©ã°ãç¨ããªãå®è£
|
---|
| 133 | ãå¯è½ã§ãããï¼ãã«ãããã»ããµã¸ã®
|
---|
| 134 | æ¡å¼µæ§ãã¿ã¼ã²ããä¾åæ§ãä¸ããããã«ï¼ãããç¨ããå®è£
|
---|
| 135 | ã¨ãã¦ããï¼å®
|
---|
| 136 | éï¼Mac OS Xã¿ã¼ã²ããä¾åé¨ã§ã¯ï¼ãããæ´»ç¨ãã¦ããï¼ï¼
|
---|
| 137 |
|
---|
| 138 | ovrtimer_flagãç¨ãããã¨ã«ãããã¨ããï¼å²è¾¼ã¿ï¼CPUä¾å¤åºå
|
---|
| 139 | ¥å£å¦çã«ã
|
---|
| 140 | ãã¦ï¼p_runtskãNULLã§ãããã©ããããã§ãã¯ããã«ï¼ovrtimer_stopãå¼ã¶
|
---|
| 141 | ãã¨ã¨ãã¦ããï¼ã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãï¼ï¼
|
---|
| 142 |
|
---|
| 143 | âæ®ãããã»ããµæéã®ä¿åï¼å¾©å¸°å¦çã®å
|
---|
| 144 | 容
|
---|
| 145 |
|
---|
| 146 | ãã£ã¹ãããã£ããã³å²è¾¼ã¿å¦çï¼CPUä¾å¤å¦çã®åºå
|
---|
| 147 | ¥å£ã§ï¼ã¿ã¹ã¯ã®æ®ããã
|
---|
| 148 | ã»ããµæéãä¿åï¼å¾©å¸°ããå¿
|
---|
| 149 | è¦ãããï¼å
|
---|
| 150 | ·ä½çã«ã¯ï¼ä»¥ä¸ã®ãããªå¦çãå¿
|
---|
| 151 |
|
---|
| 152 | è¦ã§ããï¼
|
---|
| 153 |
|
---|
| 154 | (a) dispatchã¸ã®å
|
---|
| 155 | ¥å£
|
---|
| 156 |
|
---|
| 157 | ovrtimer_flagãtrueã§ããã°ï¼ã¾ãã¯ï¼p_runtsk->staovrãtrueã§ããã°ï¼ï¼
|
---|
| 158 | ãªã¼ãã©ã³ã¿ã¤ããåæ¢ããï¼æ®ãããã»ããµæéãp_runtsk->leftotmã«æ ¼ç´
|
---|
| 159 | ããï¼æ®ãããã»ããµæéããªããªã£ã¦ããå ´åã«ã¯ï¼p_runtsk->leftotmã«0
|
---|
| 160 | ãæ ¼ç´ããï¼
|
---|
| 161 |
|
---|
| 162 | (b) dispatchããã®åºå£
|
---|
| 163 |
|
---|
| 164 | p_runtsk->staovrãtrueã§ããã°ï¼æ®ãããã»ããµæéãp_runtsk->leftotmã¨
|
---|
| 165 | ãã¦ãªã¼ãã©ã³ã¿ã¤ããåä½éå§ããï¼
|
---|
| 166 |
|
---|
| 167 | (c) å²è¾¼ã¿å¦çï¼CPUä¾å¤å¦çã®å
|
---|
| 168 | ¥å£
|
---|
| 169 |
|
---|
| 170 | ã¿ã¹ã¯ã³ã³ããã¹ãã§å²è¾¼ã¿ï¼CPUä¾å¤ãçºçããå ´åã«ï¼ovrtimer_flagã
|
---|
| 171 | trueã§ããã°ï¼ã¾ãã¯ï¼p_runtskãNULLã§ãªãï¼p_runtsk->staovrãtrueã§ã
|
---|
| 172 | ãã°ï¼ï¼ãªã¼ãã©ã³ã¿ã¤ããåæ¢ããï¼æ®ãããã»ããµæéã
|
---|
| 173 | p_runtsk->leftotmã«æ ¼ç´ããï¼æ®ãããã»ããµæéããªããªã£ã¦ããå ´åã«ã¯ï¼
|
---|
| 174 | p_runtsk->leftotmã«0ãæ ¼ç´ããï¼
|
---|
| 175 |
|
---|
| 176 | ãã®å¦çã¯ï¼ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ããã¹ã¦ç¦æ¢ããç¶æ
|
---|
| 177 | ã§è¡ãå¿
|
---|
| 178 | è¦ãããï¼
|
---|
| 179 | å²è¾¼ã¿ï¼CPUä¾å¤çºçç´å¾ã«ãã¹ã¦ã®å²è¾¼ã¿ãç¦æ¢ãããªãããã»ããµã§ã¯ï¼å²
|
---|
| 180 | è¾¼ã¿ãç¦æ¢ããå¾ã«ãã®å¦çãè¡ãå¿
|
---|
| 181 | è¦ãããï¼
|
---|
| 182 |
|
---|
| 183 | (d) å²è¾¼ã¿å¦çï¼CPUä¾å¤å¦çã®åºå£
|
---|
| 184 |
|
---|
| 185 | ã¿ã¹ã¯ã³ã³ããã¹ãã«æ»ãå ´åã«ï¼p_runtskãNULLã§ãªãï¼p_runtsk->staovr
|
---|
| 186 | ãtrueã§ããã°ï¼æ®ãããã»ããµæéãp_runtsk->leftotmã¨ãã¦ãªã¼ãã©ã³ã¿
|
---|
| 187 | ã¤ããåä½éå§ããï¼
|
---|
| 188 |
|
---|
| 189 | (e) ã¿ã¹ã¯ã®çµäºæ
|
---|
| 190 |
|
---|
| 191 | ovrtimer_flagãtrueã§ããã°ï¼ã¾ãã¯ï¼p_runtsk->staovrãtrueã§ããã°ï¼ï¼
|
---|
| 192 | ãªã¼ãã©ã³ã¿ã¤ããåæ¢ãããï¼æ®ãããã»ããµæéãp_runtsk->leftotmã«æ ¼
|
---|
| 193 | ç´ããå¿
|
---|
| 194 | è¦ã¯ãªãï¼ã¿ã¹ã¯ãçµäºããã¨ï¼ãªã¼ãã©ã³ãã³ãã©ã¯åæ¢ããã
|
---|
| 195 | ãï¼ï¼
|
---|
| 196 |
|
---|
| 197 | (f) ã¿ã¹ã¯ã®å®è¡éå§æ
|
---|
| 198 |
|
---|
| 199 | p_runtsk->staovrãtrueã§ããã°ï¼æ®ãããã»ããµæéãp_runtsk->leftotmã¨
|
---|
| 200 | ãã¦ãªã¼ãã©ã³ã¿ã¤ããåä½éå§ããï¼
|
---|
| 201 |
|
---|
| 202 | âã¿ã¼ã²ããä¾åé¨ã®ã¤ã³ã¿ãã§ã¼ã¹
|
---|
| 203 |
|
---|
| 204 | ãªã¼ãã©ã³ãã³ãã©æ©è½ã®ã¿ã¼ã²ããä¾åé¨ã§ã¯ï¼ãªã¼ãã©ã³ãã³ãã©ç¨ã®ã¿
|
---|
| 205 | ã¤ãï¼ä»¥ä¸ï¼ãªã¼ãã©ã³ã¿ã¤ãã¨å¼ã¶ï¼ãæä½ããããã®æ©è½ãæä¾ããï¼
|
---|
| 206 |
|
---|
| 207 | ã¾ãï¼æ¬¡ã®å®æ°ããã¯ãå®ç¾©ããï¼
|
---|
| 208 |
|
---|
| 209 | (1) TMAX_OVRTIM
|
---|
| 210 |
|
---|
| 211 | æ®ãããã»ããµæéã¨ãã¦ãªã¼ãã©ã³ãã³ãã©ç¨ã¿ã¤ãã«è¨å®ã§ããæ大ã®å¤ï¼
|
---|
| 212 | åä½ã¯ãã¤ã¯ãç§ã¨ããï¼ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããªãå ´åã«ã¯ï¼kernel.h
|
---|
| 213 | ã§UINT32_MAXã«å®ç¾©ããï¼
|
---|
| 214 |
|
---|
| 215 | ã¾ãï¼æ¬¡ã®5ã¤ã®é¢æ°ãç¨æããï¼
|
---|
| 216 |
|
---|
| 217 | (1) void target_ovrtimer_initialize(intptr_t exinf)
|
---|
| 218 |
|
---|
| 219 | ãªã¼ãã©ã³ã¿ã¤ãã®åæåå¦çãè¡ãï¼ã¿ã¤ãã®åä½éå§ã¯è¡ããªãï¼
|
---|
| 220 |
|
---|
| 221 | ãã®é¢æ°ã¯ï¼target_timer.cfgä¸ã«è¨è¿°ããéçAPIã«ããï¼åæåã«ã¼ãã³ã¨
|
---|
| 222 | ãã¦ã«ã¼ãã«ã«ç»é²ãããã¨ãæ³å®ãã¦ããï¼
|
---|
| 223 |
|
---|
| 224 | (2) void target_ovrtimer_terminate(intptr_t exinf)
|
---|
| 225 |
|
---|
| 226 | ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢å¦çãè¡ãï¼
|
---|
| 227 |
|
---|
| 228 | ãã®é¢æ°ã¯ï¼target_timer.cfgä¸ã«è¨è¿°ããéçAPIã«ããï¼çµäºå¦çã«ã¼ãã³
|
---|
| 229 | ã¨ãã¦ã«ã¼ãã«ã«ç»é²ãããã¨ãæ³å®ãã¦ããï¼
|
---|
| 230 |
|
---|
| 231 | (3) void target_ovrtimer_start(PRCTIM ovrtim)
|
---|
| 232 |
|
---|
| 233 | ãªã¼ãã©ã³ã¿ã¤ããï¼ovrtimã§æå®ããæéãçµéãããå²è¾¼ã¿ãçºçããã
|
---|
| 234 | ãã«è¨å®ãï¼åä½éå§ããï¼ovrtimã0ã®å ´åã¯ï¼ã§ããéãæ©ããªã¼ãã©ã³ã¿
|
---|
| 235 | ã¤ãå²è¾¼ã¿ãçºçãããï¼ovrtimã®åä½ã¯ãã¤ã¯ãç§ã¨ããï¼
|
---|
| 236 |
|
---|
| 237 | (4) PRCTIM target_ovrtimer_stop(void)
|
---|
| 238 |
|
---|
| 239 | ãªã¼ãã©ã³ã¿ã¤ããåæ¢ãï¼ã¿ã¤ãã®æ®ãæéï¼å²è¾¼ã¿çºçã¾ã§ã®æéï¼ãè¿
|
---|
| 240 | ãï¼æ®ãæéããªããªã£ã¦ããå ´åã«ã¯ï¼0ãè¿ãï¼ã¾ãï¼ãªã¼ãã©ã³ã¿ã¤ãã
|
---|
| 241 | ãã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢ããï¼ã¯ãªã¢ããªãã¨ã¹ããªã¢ã¹å²è¾¼ã¿ãçºçãããï¼
|
---|
| 242 | ã¯ãªã¢ãããã¨ã¯å¿
|
---|
| 243 | é ã§ã¯ãªãï¼ï¼
|
---|
| 244 |
|
---|
| 245 | (5) PRCTIM target_ovrtimer_get_current(void)
|
---|
| 246 |
|
---|
| 247 | ãªã¼ãã©ã³ã¿ã¤ãã®æ®ãæéï¼å²è¾¼ã¿çºçã¾ã§ã®æéï¼ãèªã¿åºãï¼æ®ãæé
|
---|
| 248 | ããªããªã£ã¦ããå ´åã«ã¯ï¼0ãè¿ãï¼ãªã¼ãã©ã³ã¿ã¤ãããã®å²è¾¼ã¿ã¯ã¯ãªã¢
|
---|
| 249 | ããªãï¼
|
---|
| 250 |
|
---|
| 251 | âæ®ãããã»ããµæéã®ä¿åï¼å¾©å¸°ã®å®è£
|
---|
| 252 | ï¼ã¿ã¼ã²ããéä¾åé¨ï¼
|
---|
| 253 |
|
---|
| 254 | ã¾ãï¼(a)ã¨(b)ãå®ç¾ããé¢æ°ovrtimer_stopã¨ovrtimer_startãã¿ã¼ã²ããé
|
---|
| 255 | ä¾åé¨ã«è¨ãï¼ã¿ã¼ã²ããä¾åé¨ã®è©²å½ç®æããå¼ã³åºãããã«ããï¼
|
---|
| 256 |
|
---|
| 257 | ----------------------------------------
|
---|
| 258 | void
|
---|
| 259 | ovrtimer_stop(void)
|
---|
| 260 | {
|
---|
| 261 | if (ovrtimer_flag) {
|
---|
| 262 | assert(p_rutsk != NULL && p_runtsk->staovr);
|
---|
| 263 | p_runtsk->leftotm = target_ovrtimer_stop();
|
---|
| 264 | ovrtimer_flag = false;
|
---|
| 265 | }
|
---|
| 266 | }
|
---|
| 267 | ----------------------------------------
|
---|
| 268 | void
|
---|
| 269 | ovrtimer_start(void)
|
---|
| 270 | {
|
---|
| 271 | if (p_runtsk->staovr) {
|
---|
| 272 | target_ovrtimer_start(p_runtsk->leftotm);
|
---|
| 273 | ovrtimer_flag = true;
|
---|
| 274 | }
|
---|
| 275 | }
|
---|
| 276 | ----------------------------------------
|
---|
| 277 |
|
---|
| 278 |
|
---|
| 279 | (c)ã¯ï¼(a)ã¨åãå¦çå
|
---|
| 280 | 容ã§ããããï¼ovrtimer_stopãå¼ã³åºãã°ããï¼(d)
|
---|
| 281 | ã¯ï¼p_runtskãNULLã§ãªãå ´åã«ï¼ovrtime_startãå¼ã³åºãããã«å®ç¾ããã°
|
---|
| 282 | ããï¼
|
---|
| 283 |
|
---|
| 284 | (e)ã¯ï¼æ®ãããã»ããµæéãp_runtsk->leftotmã«æ ¼ç´ããå¿
|
---|
| 285 | è¦ããªãç¹ã§
|
---|
| 286 | (a)ã¨å¦çå
|
---|
| 287 | 容ãç°ãªãããï¼ext_tskã¨ena_terã«æ¬¡ã®ä¿®æ£ãå ãã
|
---|
| 288 | ï¼task_term.cï¼ï¼task_terminateã®ä¸ã§ï¼TCBä¸ã®staovrãåæåããããï¼
|
---|
| 289 | ãããå¼ã¶åã«ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢å¦çãå
|
---|
| 290 | ¥ããå¿
|
---|
| 291 | è¦ãããï¼
|
---|
| 292 |
|
---|
| 293 | ----------------------------------------
|
---|
| 294 | ER
|
---|
| 295 | ext_tsk(void)
|
---|
| 296 | {
|
---|
| 297 | ...
|
---|
| 298 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 299 | if (p_runtsk->staovr) {
|
---|
| 300 | (void) target_ovrtimer_stop();
|
---|
| 301 | ovrtimer_flag = false;
|
---|
| 302 | }
|
---|
| 303 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 304 | (void) task_terminate(p_runtsk);
|
---|
| 305 | exit_and_dispatch();
|
---|
| 306 | ...
|
---|
| 307 | }
|
---|
| 308 | ----------------------------------------
|
---|
| 309 | ER
|
---|
| 310 | ena_ter(void)
|
---|
| 311 | {
|
---|
| 312 | ...
|
---|
| 313 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 314 | if (p_runtsk->staovr) {
|
---|
| 315 | (void) target_ovrtimer_stop();
|
---|
| 316 | ovrtimer_flag = false;
|
---|
| 317 | }
|
---|
| 318 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 319 | (void) task_terminate(p_runtsk);
|
---|
| 320 | exit_and_dispatch();
|
---|
| 321 | ...
|
---|
| 322 | }
|
---|
| 323 | ----------------------------------------
|
---|
| 324 |
|
---|
| 325 | (f)ã¯(b)ã¨åãå¦çå
|
---|
| 326 | 容ã§ããããï¼ovrtimer_startãå¼ã³åºãã°ããï¼
|
---|
| 327 |
|
---|
| 328 | âæ®ãããã»ããµæéã®ä¿åï¼å¾©å¸°ã®å®è£
|
---|
| 329 | ï¼ã¿ã¼ã²ããä¾åé¨ï¼
|
---|
| 330 |
|
---|
| 331 | (a) dispatchã¸ã®å
|
---|
| 332 | ¥å£
|
---|
| 333 |
|
---|
| 334 | ----------------------------------------
|
---|
| 335 | void
|
---|
| 336 | dispatch(void)
|
---|
| 337 | {
|
---|
| 338 | |#ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 339 | | ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢ */
|
---|
| 340 | |#endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 341 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
| 342 | ...
|
---|
| 343 | }
|
---|
| 344 | ----------------------------------------
|
---|
| 345 |
|
---|
| 346 | (b) dispatchããã®åºå£
|
---|
| 347 |
|
---|
| 348 | ----------------------------------------
|
---|
| 349 | void
|
---|
| 350 | dispatch(void)
|
---|
| 351 | {
|
---|
| 352 | ...
|
---|
| 353 |
|
---|
| 354 | dispatch_r:
|
---|
| 355 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
| 356 | |#ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 357 | | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
| 358 | |#endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 359 | calltex(); ⦠(*b)
|
---|
| 360 | }
|
---|
| 361 | ----------------------------------------
|
---|
| 362 |
|
---|
| 363 | (c) å²è¾¼ã¿å¦çï¼CPUä¾å¤å¦çã®å
|
---|
| 364 | ¥å£
|
---|
| 365 |
|
---|
| 366 | å²è¾¼ã¿å¦çï¼CPUä¾å¤å¦çã®å
|
---|
| 367 | ¥å£ã¯æ¬¡ã®éãã«ä¿®æ£ããï¼
|
---|
| 368 |
|
---|
| 369 | ----------------------------------------
|
---|
| 370 | void
|
---|
| 371 | <å²è¾¼ã¿ã®åºå
|
---|
| 372 | ¥å£å¦ç>(void)
|
---|
| 373 | {
|
---|
| 374 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
| 375 | ã«ãã ⦠(*f)
|
---|
| 376 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
| 377 | if (ã¿ã¹ã¯ã³ã³ããã¹ãã§å²è¾¼ã¿çºç) {
|
---|
| 378 | |#ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 379 | | ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢ */
|
---|
| 380 | |#endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 381 | dspflgãã¹ã¿ãã¯ã«ä¿åãã
|
---|
| 382 | dspflg = false;
|
---|
| 383 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼
|
---|
| 384 | éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
| 385 | }
|
---|
| 386 | ...
|
---|
| 387 | }
|
---|
| 388 | ----------------------------------------
|
---|
| 389 | void
|
---|
| 390 | <CPUä¾å¤ã®åºå
|
---|
| 391 | ¥å£å¦ç>(void)
|
---|
| 392 | {
|
---|
| 393 | if (ã¿ã¹ã¯ã³ã³ããã¹ãã§CPUä¾å¤çºç) {
|
---|
| 394 | ï¼å°ãªãã¨ãï¼ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
| 395 | ã«ãã
|
---|
| 396 | |#ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 397 | | ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢ */
|
---|
| 398 | |#endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 399 | dspflgãã¹ã¿ãã¯ã«ä¿åãã
|
---|
| 400 | dspflg = false;
|
---|
| 401 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼
|
---|
| 402 | éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
| 403 | }
|
---|
| 404 | ...
|
---|
| 405 | }
|
---|
| 406 | ----------------------------------------
|
---|
| 407 |
|
---|
| 408 | (d) å²è¾¼ã¿å¦çï¼CPUä¾å¤å¦çã®åºå£
|
---|
| 409 |
|
---|
| 410 | å²è¾¼ã¿å¦çï¼CPUä¾å¤å¦çã®åºå£ã¯æ¬¡ã®éãã«ä¿®æ£ããï¼
|
---|
| 411 |
|
---|
| 412 | ----------------------------------------
|
---|
| 413 | void
|
---|
| 414 | <å²è¾¼ã¿ã®åºå
|
---|
| 415 | ¥å£å¦ç>(void)
|
---|
| 416 | {
|
---|
| 417 | ...
|
---|
| 418 |
|
---|
| 419 | ret_int_r:
|
---|
| 420 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
| 421 | }
|
---|
| 422 | |#ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 423 | | if (p_runtsk != NULL) {
|
---|
| 424 | | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
| 425 | | }
|
---|
| 426 | |#endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 427 | }
|
---|
| 428 | ...
|
---|
| 429 | }
|
---|
| 430 | ----------------------------------------
|
---|
| 431 | void
|
---|
| 432 | <CPUä¾å¤ã®åºå
|
---|
| 433 | ¥å£å¦ç>(void)
|
---|
| 434 | {
|
---|
| 435 | ...
|
---|
| 436 |
|
---|
| 437 | ret_exc_r:
|
---|
| 438 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
| 439 | }
|
---|
| 440 | |#ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 441 | | if (p_runtsk != NULL) {
|
---|
| 442 | | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
| 443 | | }
|
---|
| 444 | |a#endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 445 | }
|
---|
| 446 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUããã¯è§£é¤ç¶æ
|
---|
| 447 | ã«æ»ãããã«æºåãã
|
---|
| 448 | }
|
---|
| 449 | ...
|
---|
| 450 | }
|
---|
| 451 | ----------------------------------------
|
---|
| 452 |
|
---|
| 453 | (e) ã¿ã¹ã¯ã®çµäºæ
|
---|
| 454 |
|
---|
| 455 | ã¿ã¼ã²ããéä¾åé¨ã®ext_tskã¨ena_terã§å¯¾å¿ããï¼
|
---|
| 456 |
|
---|
| 457 | (f) ã¿ã¹ã¯ã®å®è¡éå§æ
|
---|
| 458 |
|
---|
| 459 | ----------------------------------------
|
---|
| 460 | void
|
---|
| 461 | activate_context(TCB *p_tcb)
|
---|
| 462 | {
|
---|
| 463 | ...
|
---|
| 464 |
|
---|
| 465 | start_r:
|
---|
| 466 | |#ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 467 | | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
| 468 | |#endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 469 | CPUããã¯è§£é¤ç¶æ
|
---|
| 470 | ã«ãã
|
---|
| 471 | èªã¿ã¹ã¯ï¼p_runtskï¼ã®èµ·åçªå°ãï¼æ¡å¼µæ
|
---|
| 472 | å ±ããã©ã¡ã¼ã¿ã¨ãã¦å¼ã³åºã
|
---|
| 473 | ext_tskã«åå²ãã ... (*c)
|
---|
| 474 | }
|
---|
| 475 | ----------------------------------------
|
---|
| 476 |
|
---|
| 477 | âãªã¼ãã©ã³ãã³ãã©ã®å¼åºãã®å®è£
|
---|
| 478 |
|
---|
| 479 |
|
---|
| 480 | ãªã¼ãã©ã³ã¿ã¤ããæºäºãï¼å²è¾¼ã¿ãçºçããå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®
|
---|
| 481 | å²è¾¼ã¿ãã³ãã©ï¼ã¾ãã¯ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ããï¼ã¿ã¼ã²ããéä¾å
|
---|
| 482 | é¨ã®call_ovrhdrãå¼ã³åºãï¼
|
---|
| 483 |
|
---|
| 484 | ããã§ï¼ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ã®èµ·åã¨ï¼sta_ovrï¼stp_ovrã®å¼åº
|
---|
| 485 | ãã®ç«¶åã®åé¡ãããï¼å
|
---|
| 486 | ·ä½ä¾ã¨ãã¦ï¼ãªã¼ãã©ã³ã¿ã¤ããæºäºããç´å¾ã«ï¼
|
---|
| 487 | ä»ã®é«åªå
|
---|
| 488 | 度ã®å²è¾¼ã¿ãçºçãï¼ãã®å¦çä¸ã§ãªã¼ãã©ã³ãã³ãã©ãååä½é
|
---|
| 489 | å§ï¼æ®ãããã»ããµã¯æ´æ°ãããï¼ãããå ´åãåæ¢ãããå ´åãåé¡ã«ãªãï¼
|
---|
| 490 | ãã®å ´åï¼ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ã®ä¸ã§ï¼ãªã¼ãã©ã³ãã³ãã©ãå¼
|
---|
| 491 | ã³åºããªãããã«ãã¹ãã§ããï¼
|
---|
| 492 |
|
---|
| 493 | ã¿ã¼ã²ããéä¾åé¨ã®call_ovrhdrã®å®è£
|
---|
| 494 | ã¯æ¬¡ã®éãï¼
|
---|
| 495 |
|
---|
| 496 | ----------------------------------------
|
---|
| 497 | void
|
---|
| 498 | call_ovrhdr(void)
|
---|
| 499 | {
|
---|
| 500 | assert(sense_context());
|
---|
| 501 | assert(!sense_lock());
|
---|
| 502 | assert(ovrinib.ovrhdr != NULL);
|
---|
| 503 |
|
---|
| 504 | lock_cpu();
|
---|
| 505 | if (p_runtsk != NULL && p_runtsk->staovr && p_runtsk->leftotm == 0U) {
|
---|
| 506 | p_runtsk->staovr = false;
|
---|
| 507 | unlock_cpu();
|
---|
| 508 |
|
---|
| 509 | LOG_OVR_ENTER(p_runtsk);
|
---|
| 510 | ((OVRHDR)(ovrinib.ovrhdr))(TSKID(p_runtsk), p_runtsk->p_tinib->exinf);
|
---|
| 511 | LOG_OVR_LEAVE(p_runtsk);
|
---|
| 512 | }
|
---|
| 513 | else {
|
---|
| 514 | /*
|
---|
| 515 | * ãã®ã«ã¼ãã³ãå¼ã³åºãããåã«ï¼ãªã¼ãã©ã³ãã³ãã©ã®èµ·åã
|
---|
| 516 | * ãã£ã³ã»ã«ãããå ´å
|
---|
| 517 | */
|
---|
| 518 | unlock_cpu();
|
---|
| 519 | }
|
---|
| 520 | }
|
---|
| 521 | ----------------------------------------
|
---|
| 522 |
|
---|
| 523 | p_runtskãNULLã®å ´åãèæ
|
---|
| 524 | ®ãã¦ããã®ã¯ï¼ã¹ããªã¢ã¹å²è¾¼ã¿ã«å¯¾ããããã¹
|
---|
| 525 | ãæ§ã確ä¿ããããã§ããï¼
|
---|
| 526 |
|
---|
| 527 | ãªã¼ãã©ã³ãã³ãã©ã®å¼åºãå¾ã«ï¼å¼åºãåã®ç¶æ
|
---|
| 528 | ï¼CPUããã¯ï¼å²è¾¼ã¿åªå
|
---|
| 529 | 度
|
---|
| 530 | ãã¹ã¯ï¼ã«æ»ããªãã®ã¯ï¼ãã®ã«ã¼ãã³ããã®ãªã¿ã¼ã³å¾ã«ï¼å²è¾¼ã¿åºå£å¦ç
|
---|
| 531 | ã§å
|
---|
| 532 | ã®ç¶æ
|
---|
| 533 | ã«æ»ãããã§ããï¼
|
---|
| 534 |
|
---|
| 535 | call_ovrhdrã¯ï¼å²è¾¼ã¿ãã³ãã©ããï¼ã¾ãã¯ï¼å²è¾¼ã¿ãã³ãã©ã¨ãã¦ï¼å¼ã³åº
|
---|
| 536 | ãããããï¼ãã®ã«ã¼ãã³ã«æ¥ãã¾ã§ã«ï¼ovrtimer_stopãå¼ã°ãã¦ããï¼ããª
|
---|
| 537 | ãã¡ï¼ãªã¼ãã©ã³ã¿ã¤ããåæ¢ãã¦ããï¼ï¼
|
---|
| 538 |
|
---|
| 539 | å²è¾¼ã¿ãã³ãã©ã®è¨å®ã¯ï¼ä»¥ä¸ã®ãããªéçAPIãï¼target_timer.hä¸ã«è¨è¿°ã
|
---|
| 540 | ããã¨ã§è¡ããã®ã¨ããï¼ã¿ã¼ã²ããã®äºæ
|
---|
| 541 | ã§å¤æ´ãã¦ããï¼ï¼
|
---|
| 542 |
|
---|
| 543 | ----------------------------------------
|
---|
| 544 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 545 | ATT_INI({ TA_NULL, 0, target_ovrtimer_initialize });
|
---|
| 546 | ATT_TER({ TA_NULL, 0, target_ovrtimer_terminate });
|
---|
| 547 | CFG_INT(INTNO_OVRTIMER, { TA_ENAINT | INTATR_OVRTIMER, INTPRI_OVRTIMER });
|
---|
| 548 | DEF_INH(INHNO_OVRTIMER, { TA_NULL, target_ovrtimer_handler });
|
---|
| 549 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 550 | ----------------------------------------
|
---|
| 551 |
|
---|
| 552 | ãããã®éçAPIä¸ã®ï¼INHNO_OVRTIMERï¼INTNO_OVRTIMERï¼INTPRI_OVRTIMERï¼
|
---|
| 553 | INTATR_OVRTIMERã®4ã¤ã®å®æ°ã¯ï¼target_timer.hä¸ã§å®ç¾©ããï¼
|
---|
| 554 |
|
---|
| 555 | âãªã¼ããããã®ä½æ¸æ¹æ³
|
---|
| 556 |
|
---|
| 557 | 以ä¸ã§èª¬æããæ¹æ³ã§ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®ã¢ã»ã³ããªè¨èªã§è¨è¿°ãããã¨
|
---|
| 558 | ãæ³å®ããã³ã¼ãããï¼ã¿ã¼ã²ããéä¾åé¨ã®ovrtimer_startã¨
|
---|
| 559 | ovrtimer_stopãå¼ã³åºãã¦ãããï¼ãããã®é¢æ°ã¯çããã®ã§ï¼ã¢ã»ã³ããªè¨
|
---|
| 560 | èªã®ä¸ã«å±éããæ¹ãå¹çãããï¼ãããã®é¢æ°ãã¢ã»ã³ããªè¨èªã®ä¸ã«å±é
|
---|
| 561 | ããå ´åã«ã¯ï¼ããããï¼OMIT_OVRTIMER_STARTã¨OMIT_OVRTIMER_STOPããã¯ã
|
---|
| 562 | å®ç¾©ããï¼
|
---|
| 563 |
|
---|
| 564 | âãã«ãããã»ããµå¯¾å¿ã«ã¼ãã«ã¸ã®å¯¾å¿ã«é¢ããã¡ã¢
|
---|
| 565 |
|
---|
| 566 | ãã«ãããã»ããµå¯¾å¿ã«ã¼ãã«ã«ããã¦ï¼sta_ovrï¼stp_ovrãï¼å¼ã³åºããå¦
|
---|
| 567 | çåä½ã¨ç°ãªãããã»ããµã«å²ãä»ããããã¿ã¹ã¯ã対象ã«çºè¡ããå ´åã®å®
|
---|
| 568 | è£
|
---|
| 569 | ã¯å·¥å¤«ãè¦ããï¼
|
---|
| 570 |
|
---|
| 571 | åºæ¬çã«ã¯ï¼å¯¾è±¡ã¿ã¹ã¯ãå²ãä»ããããããã»ããµã«å¯¾ãã¦ããã»ããµéå²
|
---|
| 572 | è¾¼ã¿ãããããã¨ã«ãã£ã¦ï¼å¯¾è±¡ã¿ã¹ã¯ã®ãªã¼ãã©ã³ãã³ãã©ã®åä½ãéå§ï¼
|
---|
| 573 | åæ¢ããããã¨ãå¿
|
---|
| 574 | è¦ã§ããï¼
|
---|
| 575 |
|
---|
| 576 | âMac OS Xã¿ã¼ã²ããä¾åé¨ã«é¢ããã¡ã¢
|
---|
| 577 |
|
---|
| 578 | Mac OS Xã¿ã¼ã²ããä¾åé¨ã§ã¯ï¼å²è¾¼ã¿å¦çï¼CPUä¾å¤å¦çåºå£ãããªã¿ã¼ã³ã
|
---|
| 579 | ãç´å¾ï¼dispatch_handlerãåä½ããåã«ï¼ä»ã®å²è¾¼ã¿å¦çãå®è¡ãããå ´å
|
---|
| 580 | ãããï¼ãã®å ´åã«ã¯ï¼ovrtimer_stopãç¶ãã¦å¼ã³åºãããç¶æ³ãçããï¼ã¿ã¼
|
---|
| 581 | ã²ããéä¾åé¨ã§ovrtimer_flagãç¨ãããã¨ã§ï¼ovrtimer_stopãç¶ãã¦å¼ã³
|
---|
| 582 | åºããã¦ãåé¡ãªãããã«ãªã£ã¦ããããï¼ãã®å®è£
|
---|
| 583 | ã§å·®ãæ¯ããªãï¼
|
---|
| 584 |
|
---|
| 585 | ã¿ã¼ã²ããéä¾åé¨ã§ovrtimer_flagãç¨ããªãå ´åï¼å²è¾¼ã¿å¦çï¼CPUä¾å¤åº
|
---|
| 586 | å£å¦çã§ã¿ã¹ã¯åæããè¡ãå ´åã«ï¼åæãåã®ã¿ã¹ã¯ã«å¯¾ãã¦ãªã¼ãã©ã³ã
|
---|
| 587 | ã³ãã©ãåä½éå§ãï¼ç´å¾ã«åæ¢ããã¨ããï¼ã ããªï¼å¦çãè¡ãå®è£
|
---|
| 588 | ãèã
|
---|
| 589 | ãããï¼
|
---|
| 590 |
|
---|
| 591 | 以ä¸
|
---|