source: mypx/doc/ovrhdr_memo.txt @ 7

このファイルの 7 以降における最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 15.0 KB
 
1                                                                                                        TOPPERS Confidential
2                TOPPERS¥×¥í¥ž¥§¥¯¥È ¥Ç¥£¥¹¥«¥Ã¥·¥ç¥ó¥á¥â
3                ¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€ËŽØ€¹€ëÀß·×¥á¥â
4
5                ºîÀ®ŒÔ: ¹âÅĹ­ŸÏ¡ÊÌŸžÅ²°Âç³Ø¡Ë
6                ºÇœª¹¹¿·: 2014ǯ9·î28Æü
7
8¡û¥á¥â€Î°ÌÃÖÉÕ€±
9
10€³€Î¥É¥­¥å¥á¥ó¥È€Ï¡€TOPPERS/ASP¥«¡Œ¥Í¥ë€Î¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥éµ¡Çœ³ÈÄ¥€ËŽØ
11€¹€ëÀß·×¥á¥â€Ç€¢€ë¡¥
12
13¡û¥Ç¡Œ¥¿·¿€ÈÄê¿ô€ÎÄêµÁ
14
15¥×¥í¥»¥Ã¥µ»þŽÖ€òÉœžœ€¹€ë¥Ç¡Œ¥¿·¿OVRTIM€ÎÄêµÁ€ò¡€kernel.h€ËŽÞ€á€ë¡¥
16
17----------------------------------------
18typedef ulong_t         OVRTIM;         /* ¥×¥í¥»¥Ã¥µ»þŽÖ */
19----------------------------------------
20
21¥×¥í¥»¥Ã¥µ»þŽÖ€Ë»ØÄê€Ç€­€ëºÇÂçÃ̀ϡ€¥¿¡Œ¥²¥Ã¥È°ÍžÉô¡Êtarget_kernel.h€Þ
22€¿€Ï€œ€³€«€é¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€ë¥Õ¥¡¥€¥ë¡Ë€ÇÄêµÁ€¹€ë€â€Î€È€¹€ë€¬¡€¥Ç¥Õ¥©
23¥ë¥È€ÎÄêµÁ€òkernel.h€ËŽÞ€á€ë¡¥
24
25----------------------------------------
26#ifndef TMAX_OVRTIM
27#define TMAX_OVRTIM             ULONG_MAX
28#endif /* TMAX_OVRTIM */
29----------------------------------------
30
31€Þ€¿¡€¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€Î¥Ç¡Œ¥¿·¿OVRHDR€ÎÄêµÁ€ò¡€kernel.h€ËŽÞ€á€ë¡¥
32
33----------------------------------------
34typedef void    (*OVRHDR)(ID tskid, intptr_t exinf);
35----------------------------------------
36
37€³€ÎŸ€Ë¡€¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥éµ¡Çœ€Î¥µ¡Œ¥Ó¥¹¥³¡Œ¥ë€ÎÀëžÀ€ÈŽØÏ¢€¹€ëÄê¿ô€Î
38ÄêµÁ€ò¡€kernel€ËŽÞ€á€ë¡¥
39
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¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€òŒÂÁõ€¹€ë€¿€á€Ë¡€TCB€Ë¡€»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€òÉœ€¹¥Õ¥£¡Œ
68¥ë¥Éleftotm€òÀ߀±€ë¡Êtask.h¡Ë¡¥
69
70----------------------------------------
71typedef struct task_control_block {
72        ...
73        OVRTIM  leftotm;                                /* »Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ */
74        ...
75} TCB;
76----------------------------------------
77
78¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€¬Æ°ºî€·€Æ€€€Ê€€ŸõÂրλþ€Ï¡€leftotm€ò0€ËÀßÄꀹ€ë€³€È
79€È€·¡€make_dormant€ÎÃæ€Ç0€ËœéŽü²œ€¹€ë¡Êtask.c¡Ë¡¥
80
81----------------------------------------
82void
83make_dormant(TCB *p_tcb)
84{
85        ...
86        p_tcb->leftotm = 0U;
87        ...
88}
89----------------------------------------
90
91¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€ËÂЀ·€Æ€Ï¡€ŽÉÍý¥Ö¥í¥Ã¥¯€ÏɬÍ׀ʀ¯¡€DEF_OVR€ÇÄêµÁ€·€¿
92ŸðÊó€ò³ÊÇŒ€·€¿œéŽü²œ¥Ö¥í¥Ã¥¯€Î€ß€òÍѰՀ¹€ë¡¥œéŽü²œ¥Ö¥í¥Ã¥¯€â¡€Ã±°ì€ÎÍ×
93ÁǀǜœÊ¬€Ç€¢€ê¡€ÇÛÎó€Ç€¢€ëɬÍ׀πʀ€¡Êoverrun.h¡Ë¡¥
94
95----------------------------------------
96typedef struct overrun_handler_initialization_block {
97        ATR                     ovratr;                 /* ¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é°À­ */
98        OVRHDR          ovrhdr;                 /* ¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€Îµ¯Æ°ÈÖÃÏ */
99} OVRINIB;
100----------------------------------------
101extern const OVRINIB    ovrinib;
102----------------------------------------
103
104¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€¬Æ°ºîÃæ€«€òŒš€¹¥Õ¥é¥°€È€·€Æ¡€boot_t·¿€ÎÊÑ¿ô
105ovrtimer_flag€òÍѰՀ¹€ë¡Êoverrun.h¡€overrun.c¡Ë¡¥
106
107----------------------------------------
108extern boot_t   ovrtimer_flag;
109----------------------------------------
110
111¥·¥ó¥°¥ë¥×¥í¥»¥Ã¥µ€ÎŸì¹ç€Ë€Ï¡€¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€¬Æ°ºîÃæ€«€Ï¡€Œ¡€ÎÊýË¡€Ç
112ÈœÊÌ€¹€ë€³€È€¬€Ç€­€ë¡¥
113
114        ¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€Ç€Ï¡€(p_runtsk->leftotm > 0U)€Î»þ€Î€ßưºî€·€Æ€€€ë¡¥
115        È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€Ç€Ï¡€Æ°ºî€·€Æ€€€Ê€€¡¥
116
117€œ€Î€¿€á¡€€³€Î¥Õ¥é¥°€òÍÑ€€€Ê€€ŒÂÁõ€â²ÄÇœ€Ç€¢€ë€¬¡€¥Þ¥ë¥Á¥×¥í¥»¥Ã¥µ€Ø€Î
118³ÈÄ¥À­€ä¥¿¡Œ¥²¥Ã¥È°ÍžÀ­€ò²Œ€²€ë€¿€á€Ë¡€€³€ì€òÍÑ€€€ëŒÂÁõ€È€·€Æ€€€ë¡ÊŒÂ
119ºÝ¡€Mac OS X¥¿¡Œ¥²¥Ã¥È°ÍžÉô€Ç€Ï¡€€³€ì€ò³èÍÑ€·€Æ€€€ë¡Ë¡¥
120
121¡û»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€ÎÊÝž¡¿Éüµ¢œèÍý€ÎÆâÍÆ
122
123¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ã€ª€è€Ó³ä¹þ€ßœèÍý¡¿CPUÎã³°œèÍý€ÎœÐÆþžý€Ç¡€¥¿¥¹¥¯€Î»Ä€ê¥×¥í
124¥»¥Ã¥µ»þŽÖ€òÊÝž¡¿Éüµ¢€¹€ëɬÍ×€¬€¢€ë¡¥¶ñÂÎŪ€Ë€Ï¡€°Ê²Œ€Î€è€Š€ÊœèÍý€¬É¬
125Í׀ǀ¢€ë¡¥
126
127(a) dispatch€Ø€ÎÆþžý
128
129ovrtimer_flag€¬true€Ç€¢€ì€Ð¡Ê€Þ€¿€Ï¡€p_runtsk->leftotm€¬0€Ç€Ê€±€ì€Ð¡Ë¡€
130¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€òÄä»ß€µ€»¡€»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€òp_runtsk->leftotm€Ë³ÊÇŒ
131€¹€ë¡¥»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€¬0¡Ê€Þ€¿€Ï€œ€ìÌ€Ëþ¡Ë€Ë€Ê€Ã€Æ€€€¿Ÿì¹ç€Ë€Ï¡€
132p_runtsk->leftotm€Ë1€ò³ÊÇŒ€¹€ë¡¥
133
134(b) dispatch€«€é€ÎœÐžý
135
136¥¿¥¹¥¯Îã³°œèÍý¥ë¡Œ¥Á¥ó€ÎžÆœÐ€·Á°€Ë¡€p_runtsk->leftotm€¬0€Ç€Ê€±€ì€Ð¡€»Ä
137€ê¥×¥í¥»¥Ã¥µ»þŽÖ€òp_runtsk->leftotm€È€·€Æ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€òưºî³«»Ï€¹€ë¡¥
138
139(c) ³ä¹þ€ßœèÍý¡¿CPUÎã³°œèÍý€ÎÆþžý
140
141ovrtimer_flag€¬true€Ç€¢€ì€Ð¡€¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€òÄä»ß€µ€»¡€»Ä€ê¥×¥í¥»¥Ã¥µ
142»þŽÖ€òp_runtsk->leftotm€Ë³ÊÇŒ€¹€ë¡¥»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€¬0¡Ê€Þ€¿€Ï€œ€ìÌ€
143Ëþ¡Ë€Ë€Ê€Ã€Æ€€€¿Ÿì¹ç€Ë€Ï¡€p_runtsk->leftotm€Ë1€ò³ÊÇŒ€¹€ë¡¥
144
145€³€ÎœèÍý€Ï¡€¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò€¹€Ù€Æ¶Ø»ß€·€¿ŸõÂրǹԀŠÉ¬Í×€¬€¢€ë¡¥
146³ä¹þ€ß¡¿CPUÎ㳰ȯÀžÄŸžå€Ë€¹€Ù€Æ€Î³ä¹þ€ß€¬¶Ø»ß€µ€ì€Ê€€¥×¥í¥»¥Ã¥µ€Ç€Ï¡€³ä
147¹þ€ß€ò¶Ø»ß€·€¿žå€Ë€³€ÎœèÍý€ò¹Ô€ŠÉ¬Í×€¬€¢€ë¡¥
148
149(d) ³ä¹þ€ßœèÍý¡¿CPUÎã³°œèÍý€ÎœÐžý
150
151¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ËÌá€ëŸì¹ç€Ë¡€p_runtsk->leftotm€¬0€Ç€Ê€±€ì€Ð¡€»Ä€ê¥×
152¥í¥»¥Ã¥µ»þŽÖ€òp_runtsk->leftotm€È€·€Æ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€òưºî³«»Ï€¹€ë¡¥
153
154(e) ¥¿¥¹¥¯€ÎœªÎ»»þ
155
156ovrtimer_flag€¬true€Ç€¢€ì€Ð¡Ê€Þ€¿€Ï¡€p_runtsk->leftotm€¬0€Ç€Ê€±€ì€Ð¡Ë¡€
157¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€òÄä»ß€µ€»€ë¡¥»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€òp_runtsk->leftotm€Ë³Ê
158ÇŒ€¹€ëɬÍ׀πʀ€¡Êmake_dormant€Ç0€¬³ÊÇŒ€µ€ì€ë¡Ë¡¥
159
160(f) ¥¿¥¹¥¯€ÎŒÂ¹Ô³«»Ï»þ
161
162p_runtsk->leftotm€¬0€Ç€Ê€±€ì€Ð¡€»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€òp_runtsk->leftotm€È
163€·€Æ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€òưºî³«»Ï€¹€ë¡¥
164
165¡û¥¿¡Œ¥²¥Ã¥È°ÍžÉô€Î¥€¥ó¥¿¥Õ¥§¡Œ¥¹
166
167¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥éµ¡Çœ€Î¥¿¡Œ¥²¥Ã¥È°ÍžÉô€Ç€Ï¡€¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥éÍрΥ¿
168¥€¥Þ¡Ê°Ê²Œ¡€¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€ÈžÆ€Ö¡Ë€òÁàºî€¹€ë€¿€á€Îµ¡Çœ€òÄó¶¡€¹€ë¡¥
169
170€Þ€º¡€Œ¡€ÎÄê¿ô€ò¥Þ¥¯¥íÄêµÁ€¹€ë¡¥
171
172(1) TMAX_OVRTIM
173
174¥×¥í¥»¥Ã¥µ»þŽÖ€È€·€Æ¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥éÍÑ¥¿¥€¥Þ€ËÀßÄê€Ç€­€ëºÇÂç€ÎÃÍ¡¥Ã±
175°Ì€Ï¥Þ¥€¥¯¥íÉÀȀ¹€ë¡¥¥¿¡Œ¥²¥Ã¥È°ÍžÉô€ÇÄêµÁ€·€Ê€€Ÿì¹ç€Ë€Ï¡€kernel.h€Ç
176ULONG_MAX€ËÄêµÁ€¹€ë¡¥
177
178€Þ€¿¡€Œ¡€Î5€Ä€ÎŽØ¿ô€òÍѰՀ¹€ë¡¥
179
180(1) void target_ovrtimer_initialize(intptr_t exinf)
181
182¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€ÎœéŽü²œœèÍý€ò¹Ô€Š¡¥¥¿¥€¥Þ€Îưºî³«»Ï€Ï¹Ô€ï€Ê€€¡¥
183
184€³€ÎŽØ¿ô€Ï¡€target_timer.cfgÃæ€Ëµ­œÒ€¹€ëÀÅŪAPI€Ë€è€ê¡€œéŽü²œ¥ë¡Œ¥Á¥ó€È
185€·€Æ¥«¡Œ¥Í¥ë€ËÅÐÏ¿€¹€ë€³€È€òÁÛÄꀷ€Æ€€€ë¡¥
186
187(2) void target_ovrtimer_terminate(intptr_t exinf)
188
189¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€ÎÄä»ßœèÍý€ò¹Ô€Š¡¥
190
191€³€ÎŽØ¿ô€Ï¡€target_timer.cfgÃæ€Ëµ­œÒ€¹€ëÀÅŪAPI€Ë€è€ê¡€œªÎ»œèÍý¥ë¡Œ¥Á¥ó
192€È€·€Æ¥«¡Œ¥Í¥ë€ËÅÐÏ¿€¹€ë€³€È€òÁÛÄꀷ€Æ€€€ë¡¥
193
194(3) void target_ovrtimer_start(OVRTIM ovrtim)
195
196¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€ò¡€ovrtim€Ç»ØÄꀷ€¿»þŽÖ€¬·Ð²á€·€¿€é³ä¹þ€ß€¬È¯Àž€¹€ë€è
197€Š€ËÀßÄꀷ¡€Æ°ºî³«»Ï€¹€ë¡¥ovrtim€Îñ°Ì€Ï¥Þ¥€¥¯¥íÉÀȀ¹€ë¡¥
198
199(4) OVRTIM target_ovrtimer_stop(void)
200
201¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€òÄä»ß€·¡€¥¿¥€¥Þ€Î»Ä€ê»þŽÖ€òÆÉ€ßœÐ€¹¡¥€â€·»Ä€ê»þŽÖ€¬
2020¡Ê€Þ€¿€Ï€œ€ìÌ€Ëþ¡Ë€Ë€Ê€Ã€Æ€€€¿Ÿì¹ç€Ë€Ï¡€1€òÊÖ€¹¡¥€Þ€¿¡€¥ª¡Œ¥Ð¥é¥ó¥¿¥€
203¥Þ€«€é€Î³ä¹þ€ß€ò¥¯¥ê¥¢€¹€ë¡¥
204
205(5) OVRTIM target_ovrtimer_get_current(void)
206
207¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Î»Ä€ê»þŽÖ€òÆÉ€ßœÐ€¹¡¥€â€·»Ä€ê»þŽÖ€¬0¡Ê€Þ€¿€Ï€œ€ìÌ€Ëþ¡Ë
208€Ë€Ê€Ã€Æ€€€¿Ÿì¹ç€Ë€Ï¡€0€òÊÖ€¹¡¥¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€«€é€Î³ä¹þ€ß€Ï¥¯¥ê¥¢€·€Ê
209€€¡¥
210
211¡û»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€ÎÊÝž¡¿Éüµ¢€ÎŒÂÁõ¡Ê¥¿¡Œ¥²¥Ã¥ÈÈó°ÍžÉô¡Ë
212
213Á°µ­€ÎœèÍýÆâÍÆ€ÎÃæ€Ç¡€(a)€È(c)€Ï¡€žÆœÐ€·Ÿò·ï€¬°ã€Š€À€±€ÇœèÍýÆâÍÆ€ÏƱ°ì
214€Ç€¢€ë€¿€á¡€€³€ì€òŒÂžœ€¹€ëŽØ¿ôovrtimer_stop€ò¥¿¡Œ¥²¥Ã¥ÈÈó°ÍžÉô€ËÀ߀±¡€
215¥¿¡Œ¥²¥Ã¥È°ÍžÉô€Î³ºÅö²Õœê€«€éžÆ€ÓœÐ€¹€è€Š€Ë€¹€ë¡¥
216
217----------------------------------------
218void
219ovrtimer_stop(void)
220{
221        if (ovrtimer_flag) {
222                assert(p_runtsk->leftotm > 0U);
223                p_runtsk->leftotm = target_ovrtimer_stop();
224                ovrtimer_flag = false;
225        }
226}
227----------------------------------------
228
229€Þ€¿(b),(d),(f)€â¡€žÆœÐ€·Ÿò·ï€¬°ã€Š€À€±€ÇœèÍýÆâÍÆ€ÏƱ°ì€Ç€¢€ë€¿€á¡€€³€ì
230€òŒÂžœ€¹€ëŽØ¿ôovrtimer_start€ò¥¿¡Œ¥²¥Ã¥ÈÈó°ÍžÉô€ËÀ߀±¡€¥¿¡Œ¥²¥Ã¥È°Íž
231Éô€Î³ºÅö²Õœê€«€éžÆ€ÓœÐ€¹€è€Š€Ë€¹€ë¡¥
232
233----------------------------------------
234void
235ovrtimer_start(void)
236{
237        if (p_runtsk->leftotm > 0U) {
238                target_ovrtimer_start(p_runtsk->leftotm);
239                ovrtimer_flag = true;
240        }
241}
242----------------------------------------
243
244(e)€Ï¡€»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€òp_runtsk->leftotm€Ë³ÊÇŒ€¹€ëɬÍ׀πʀ€ÅÀ€Ç
245(a),(c)€ÈœèÍýÆâÍÆ€¬°Û€Ê€ë€¬¡€p_runtsk->leftotm€Ïmake_dormant€Ç0€ËœéŽü²œ
246€µ€ì€ë€¿€á¡€make_dormant€òžÆ€ÓœÐ€¹Á°€Ç€¢€ì€Ð¡€ovrtimer_stop€òήÍÑ€¹€ë€³
247€È€¬€Ç€­€ë¡¥€œ€³€Ç¡€ext_tsk€ËŒ¡€Îœ€Àµ€ò²Ã€š€ë¡Êtask_manage.c¡Ë¡¥
248
249----------------------------------------
250ER
251ext_tsk(void)
252{
253        ...
254        (void) make_non_runnable(p_runtsk);
255|#ifdef TOPPERS_SUPPORT_OVRHDR
256|       ovrtimer_stop();
257|#endif /* TOPPERS_SUPPORT_OVRHDR */
258        make_dormant(p_runtsk);
259        ...
260}
261----------------------------------------
262
263¡û»Ä€ê¥×¥í¥»¥Ã¥µ»þŽÖ€ÎÊÝž¡¿Éüµ¢€ÎŒÂÁõ¡Ê¥¿¡Œ¥²¥Ã¥È°ÍžÉô¡Ë
264
265(a) dispatch€Ø€ÎÆþžý
266
267----------------------------------------
268void
269dispatch(void)
270{
271|#ifdef TOPPERS_SUPPORT_OVRHDR
272|       ovrtimer_stop();                                        /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€ÎÄä»ß */
273|#endif /* TOPPERS_SUPPORT_OVRHDR */
274        ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òœü€¯€¹€Ù€Æ€Î¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€ËÊÝž€¹€ë
275        ...
276}
277----------------------------------------
278
279(b) dispatch€«€é€ÎœÐžý
280
281----------------------------------------
282void
283dispatch(void)
284{
285        ...
286
287  dispatch_r:
288        ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òœü€¯€¹€Ù€Æ€Î¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€«€éÉüµ¢€¹€ë
289|#ifdef TOPPERS_SUPPORT_OVRHDR
290|       ovrtimer_start();                                       /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Îưºî³«»Ï */
291|#endif /* TOPPERS_SUPPORT_OVRHDR */
292        calltex(); ¡Ä (*b)
293}
294----------------------------------------
295
296(c) ³ä¹þ€ßœèÍý¡¿CPUÎã³°œèÍý€ÎÆþžý
297
298³ä¹þ€ßœèÍý¡¿CPUÎã³°œèÍý€ÎÆþžý€ÏŒ¡€ÎÄÌ€ê€Ëœ€Àµ€¹€ë¡¥
299
300----------------------------------------
301void
302<³ä¹þ€ß€ÎœÐÆþžýœèÍý>(void)
303{
304        ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€ËÊÝž€¹€ë
305        if (¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€Ç³ä¹þ€ßȯÀž) {
306|#ifdef TOPPERS_SUPPORT_OVRHDR
307|               ¡ÊŸ¯€Ê€¯€È€â¡Ë¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€·€¿ŸõÂրˀ¹€ë
308|               ovrtimer_stop();                                /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€ÎÄä»ß */
309|               ¡ÊɬÍ׀ʀé¡Ëžµ€ÎŸõÂÖ€ËÌ္
310|#endif /* TOPPERS_SUPPORT_OVRHDR */
311                ¥¹¥¿¥Ã¥¯€òÈ󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥ÈÍрΥ¹¥¿¥Ã¥¯€ËÀڀꎹ€š¡€
312                                                                È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ËÀڀꎹ€š€ë
313        }
314        ...
315}
316----------------------------------------
317void
318<CPUÎã³°€ÎœÐÆþžýœèÍý>(void)
319{
320        ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€ËÊÝž€¹€ë
321        if (¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ÇCPUÎ㳰ȯÀž) {
322|#ifdef TOPPERS_SUPPORT_OVRHDR
323|               ¡ÊŸ¯€Ê€¯€È€â¡Ë¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€·€¿ŸõÂրˀ¹€ë
324|               ovrtimer_stop();                                /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€ÎÄä»ß */
325|               ¡ÊɬÍ׀ʀé¡Ëžµ€ÎŸõÂÖ€ËÌ္
326|#endif /* TOPPERS_SUPPORT_OVRHDR */
327                ¥¹¥¿¥Ã¥¯€òÈ󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥ÈÍрΥ¹¥¿¥Ã¥¯€ËÀڀꎹ€š¡€
328                                                                È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ËÀڀꎹ€š€ë
329        }
330        ...
331}
332----------------------------------------
333
334(d) ³ä¹þ€ßœèÍý¡¿CPUÎã³°œèÍý€ÎœÐžý
335
336³ä¹þ€ßœèÍý¡¿CPUÎã³°œèÍý€ÎœÐžý€ÏŒ¡€ÎÄÌ€ê€Ëœ€Àµ€¹€ë¡¥
337
338----------------------------------------
339void
340<³ä¹þ€ß€ÎœÐÆþžýœèÍý>(void)
341{
342        ...
343
344                          ret_int_r:
345                                ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òœü€¯€¹€Ù€Æ€Î¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€«€éÉüµ¢€¹€ë
346                        }
347|#ifdef TOPPERS_SUPPORT_OVRHDR
348|                       ovrtimer_start();                       /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Îưºî³«»Ï */
349|#endif /* TOPPERS_SUPPORT_OVRHDR */
350                        calltex(); ¡Ä (*b)
351                }
352|#ifdef TOPPERS_SUPPORT_OVRHDR
353|               else {
354|                       ¡ÊŸ¯€Ê€¯€È€â¡Ë¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€·€¿ŸõÂրˀ¹€ë
355|                       ovrtimer_start();                       /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Îưºî³«»Ï */
356|               }
357|#endif /* TOPPERS_SUPPORT_OVRHDR */
358        }
359        ...
360}
361----------------------------------------
362void
363<CPUÎã³°€ÎœÐÆþžýœèÍý>(void)
364{
365        ...
366
367                          ret_exc_r:
368                                ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òœü€¯€¹€Ù€Æ€Î¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€«€éÉüµ¢€¹€ë
369                        }
370|#ifdef TOPPERS_SUPPORT_OVRHDR
371|                       ovrtimer_start();                       /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Îưºî³«»Ï */
372|#endif /* TOPPERS_SUPPORT_OVRHDR */
373                        calltex(); ¡Ä (*b)
374                }
375|#ifdef TOPPERS_SUPPORT_OVRHDR
376|               else {
377|                       ¡ÊŸ¯€Ê€¯€È€â¡Ë¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€·€¿ŸõÂրˀ¹€ë
378|                       ovrtimer_start();                       /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Îưºî³«»Ï */
379|               }
380|#endif /* TOPPERS_SUPPORT_OVRHDR */
381        }
382        CPUÎã³°œèÍý€«€é€Î¥ê¥¿¡Œ¥ó€Ç¡€CPU¥í¥Ã¥¯ŸõÂÖ¡¿¥í¥Ã¥¯²òœüŸõÂÖ€¬
383                                                                CPUÎ㳰ȯÀž»þ€ÎŸõÂÖ€ËÌá€ë€è€Š€ËœàÈ÷€¹€ë
384        ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€«€éÉüµ¢€¹€ë
385        CPUÎã³°œèÍý€«€é€Î¥ê¥¿¡Œ¥ó
386}
387----------------------------------------
388
389(e) ¥¿¥¹¥¯€ÎœªÎ»»þ
390
391¥¿¡Œ¥²¥Ã¥ÈÈó°ÍžÉô€Îext_tsk€ÇÂбþ€·€¿¡¥
392
393(f) ¥¿¥¹¥¯€ÎŒÂ¹Ô³«»Ï»þ
394
395----------------------------------------
396void
397activate_context(TCB *p_tcb)
398{
399        ...
400
401  start_r:
402|#ifdef TOPPERS_SUPPORT_OVRHDR
403|       ovrtimer_start();                                       /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Îưºî³«»Ï */
404|#endif /* TOPPERS_SUPPORT_OVRHDR */
405        CPU¥í¥Ã¥¯²òœüŸõÂրˀ¹€ë
406        Œ«¥¿¥¹¥¯¡Êp_runtsk¡Ë€Îµ¯Æ°ÈÖÃÏ€ò¡€³ÈÄ¥ŸðÊó€ò¥Ñ¥é¥á¡Œ¥¿€È€·€ÆžÆ€ÓœÐ€¹
407        ext_tsk€ËʬŽô€¹€ë ... (*c)
408}
409----------------------------------------
410
411¡û¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€ÎžÆœÐ€·€ÎŒÂÁõ
412
413¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€¬Ëþλ€·¡€³ä¹þ€ß€¬È¯Àž€·€¿Ÿì¹ç€Ë€Ï¡€¥¿¡Œ¥²¥Ã¥È°ÍžÉô€Î
414³ä¹þ€ß¥Ï¥ó¥É¥é¡Ê€Þ€¿€Ï¡€³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥ó¡Ë€«€é¡€¥¿¡Œ¥²¥Ã¥ÈÈó°Íž
415Éô€Îcall_ovrhdr€òžÆ€ÓœÐ€¹¡¥
416
417€³€³€Ç¡€¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ³ä¹þ€ß¥Ï¥ó¥É¥é€Îµ¯Æ°€È¡€sta_ovr¡¿stp_ovr€ÎžÆœÐ
418€·€Î¶¥¹ç€ÎÌäÂꀬ€¢€ë¡¥¶ñÂÎÎã€È€·€Æ¡€¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€¬Ëþλ€·€¿ÄŸžå€Ë¡€
419Ÿ€Î¹âÍ¥ÀèÅـγä¹þ€ß€¬È¯Àž€·¡€€œ€ÎœèÍýÃæ€Ç¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€¬ºÆÆ°ºî³«
420»Ï¡Ê»Ä€ê¥×¥í¥»¥Ã¥µ€Ï¹¹¿·€µ€ì€ë¡Ë€µ€ì€¿Ÿì¹ç€äÄä»ß€µ€ì€¿Ÿì¹ç€¬ÌäÂê€Ë€Ê€ë¡¥
421€³€ÎŸì¹ç¡€¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ³ä¹þ€ß¥Ï¥ó¥É¥é€ÎÃæ€Ç¡€¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€òžÆ
422€ÓœÐ€µ€Ê€€€è€Š€Ë€¹€Ù€­€Ç€¢€ë¡¥
423
424¥¿¡Œ¥²¥Ã¥ÈÈó°ÍžÉô€Îcall_ovrhdr€ÎŒÂÁõ€ÏŒ¡€ÎÄ̀ꡥ
425
426----------------------------------------
427void
428call_ovrhdr(void)
429{
430        assert(sense_context());
431        assert(!sense_lock());
432        assert(ovrinib.ovrhdr != NULL);
433
434        i_lock_cpu();
435        if (p_runtsk!= NULL && p_runtsk->leftotm == 1U) {
436                p_runtsk->leftotm = 0U;
437                i_unlock_cpu();
438
439                LOG_OVR_ENTER(p_runtsk);
440                ((OVRHDR)(ovrinib.ovrhdr))(TSKID(p_runtsk), p_runtsk->p_tinib->exinf);
441                LOG_OVR_LEAVE(p_runtsk);
442        }
443        else {
444                /*
445                 *  €³€Î¥ë¡Œ¥Á¥ó€¬žÆ€ÓœÐ€µ€ì€ëÁ°€Ë¡€¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€Îµ¯Æ°€¬
446                 *  ¥­¥ã¥ó¥»¥ë€µ€ì€¿Ÿì¹ç
447                 */
448                i_unlock_cpu();
449        }
450}
451----------------------------------------
452
453p_runtsk€¬NULL€ÎŸì¹ç€ò¹ÍΞ€·€Æ€€€ë€Î€Ï¡€¥¹¥×¥ê¥¢¥¹³ä¹þ€ß€ËÂЀ¹€ë¥í¥Ð¥¹
454¥ÈÀ­€ò³ÎÊÝ€¹€ë€¿€á€Ç€¢€ë¡¥
455
456¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€ÎžÆœÐ€·žå€Ë¡€žÆœÐ€·Á°€ÎŸõÂÖ¡ÊCPU¥í¥Ã¥¯¡€³ä¹þ€ßÍ¥ÀèÅÙ
457¥Þ¥¹¥¯¡Ë€ËÌဵ€Ê€€€Î€Ï¡€€³€Î¥ë¡Œ¥Á¥ó€«€é€Î¥ê¥¿¡Œ¥óžå€Ë¡€³ä¹þ€ßœÐžýœèÍý
458€Çžµ€ÎŸõÂÖ€ËÌ္€¿€á€Ç€¢€ë¡¥
459
460call_ovrhdr€Ï¡€³ä¹þ€ß¥Ï¥ó¥É¥é€«€é¡Ê€Þ€¿€Ï¡€³ä¹þ€ß¥Ï¥ó¥É¥é€È€·€Æ¡ËžÆ€ÓœÐ
461€µ€ì€ë€¿€á¡€€³€Î¥ë¡Œ¥Á¥ó€ËÍè€ë€Þ€Ç€Ë¡€ovrtimer_stop€¬žÆ€Ð€ì€Æ€€€ë¡Ê€¹€Ê
462€ï€Á¡€¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€¬Ää»ß€·€Æ€€€ë¡Ë¡¥
463
464³ä¹þ€ß¥Ï¥ó¥É¥é€ÎÀßÄê€Ï¡€°Ê²Œ€Î€è€Š€ÊÀÅŪAPI€ò¡€target_timer.hÃæ€Ëµ­œÒ€¹
465€ë€³€È€Ç¹Ô€Š€â€Î€È€¹€ë¡Ê¥¿¡Œ¥²¥Ã¥È€Î»öŸð€ÇÊѹ¹€·€Æ€è€€¡Ë¡¥
466
467----------------------------------------
468#ifdef TOPPERS_SUPPORT_OVRHDR
469ATT_INI({ TA_NULL, 0, target_ovrtimer_initialize });
470ATT_TER({ TA_NULL, 0, target_ovrtimer_terminate });
471CFG_INT(INTNO_OVRTIMER, { TA_ENAINT | INTATR_OVRTIMER, INTPRI_OVRTIMER });
472DEF_INH(INHNO_OVRTIMER, { TA_NULL, target_ovrtimer_handler });
473#endif /* TOPPERS_SUPPORT_OVRHDR */
474----------------------------------------
475
476€³€ì€é€ÎÀÅŪAPIÃæ€Î¡€INHNO_OVRTIMER¡€INTNO_OVRTIMER¡€INTPRI_OVRTIMER¡€
477INTATR_OVRTIMER€Î4€Ä€ÎÄê¿ô€Ï¡€target_timer.hÃæ€ÇÄêµÁ€¹€ë¡¥
478
479¡û¥ª¡Œ¥Ð¥Ø¥Ã¥É€ÎÄ㞺ÊýË¡
480
481°ÊŸå€ÇÀâÌÀ€·€¿ÊýË¡€Ç€Ï¡€¥¿¡Œ¥²¥Ã¥È°ÍžÉô€Î¥¢¥»¥ó¥Ö¥êžÀžì€Çµ­œÒ€¹€ë€³€È
482€òÁÛÄꀷ€¿¥³¡Œ¥É€«€é¡€¥¿¡Œ¥²¥Ã¥ÈÈó°ÍžÉô€Îovrtimer_start€È
483ovrtimer_stop€òžÆ€ÓœÐ€·€Æ€€€ë€¬¡€€³€ì€é€ÎŽØ¿ô€Ïû€€€â€Î€Ç¡€¥¢¥»¥ó¥Ö¥êžÀ
484žì€ÎÃæ€ËÅž³«€·€¿Êý€¬žúΚ€¬€è€€¡¥€³€ì€é€ÎŽØ¿ô€ò¥¢¥»¥ó¥Ö¥êžÀžì€ÎÃæ€ËÅž³«
485€¹€ëŸì¹ç€Ë€Ï¡€€œ€ì€Ÿ€ì¡€OMIT_OVRTIMER_START€ÈOMIT_OVRTIMER_STOP€ò¥Þ¥¯¥í
486ÄêµÁ€¹€ë¡¥
487
488¡û¥Þ¥ë¥Á¥×¥í¥»¥Ã¥µÂбþ¥«¡Œ¥Í¥ë€Ø€ÎÂбþ€ËŽØ€¹€ë¥á¥â
489
490¥Þ¥ë¥Á¥×¥í¥»¥Ã¥µÂбþ¥«¡Œ¥Í¥ë€Ë€ª€€€Æ¡€sta_ovr¡¿ista_ovr¡€stp_ovr¡¿
491istp_ovr€ò¡€žÆ€ÓœÐ€·€¿œèÍýñ°Ì€È°Û€Ê€ë¥×¥í¥»¥Ã¥µ€Ë³ä€êÉÕ€±€é€ì€¿¥¿¥¹¥¯
492€òÂП݀Ëȯ¹Ô€·€¿Ÿì¹ç€ÎŒÂÁõ€Ï¹©É×€òÍ×€¹€ë¡¥
493
494ŽðËÜŪ€Ë€Ï¡€ÂПݥ¿¥¹¥¯€¬³ä€êÉÕ€±€é€ì€¿¥×¥í¥»¥Ã¥µ€ËÂЀ·€Æ¥×¥í¥»¥Ã¥µŽÖ³ä
495¹þ€ß€ò€«€±€ë€³€È€Ë€è€Ã€Æ¡€ÂПݥ¿¥¹¥¯€Î¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€Îưºî€ò³«»Ï¡¿
496Ää»ß€µ€»€ë€³€È€¬É¬Í׀ǀ¢€ë€¬¡€³ä¹þ€ß€ÎÆþžýœèÍý€ÇžÆ€ÓœÐ€¹ovrtimer_stop€Ç¡€
497ovrtimer_flag€È(p_runtsk->leftotm > 0U)€¬°ìŽÓ€·€Ê€¯€Ê€ë€¿€á¡€¹©É×€òÍ×€¹
498€ë€â€Î€È»×€ï€ì€ë¡¥
499
500°ÊŸå
詳しい使い方は TracBrowser を参照してください。