source: mypx/target/dummy_gcc/target_config.c

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

TOPPERS/ASP 1.9.1

ファイルサイズ: 5.2 KB
 
1/*
2 *  TOPPERS/ASP Kernel
3 *      Toyohashi Open Platform for Embedded Real-Time Systems/
4 *      Advanced Standard Profile Kernel
5 *
6 *  Copyright (C) 2013-2014 by Embedded and Real-Time Systems Laboratory
7 *              Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
9 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
10 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
11 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
12 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
13 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
14 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
15 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
16 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
17 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
18 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
19 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
20 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
21 *      €È¡¥
22 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
23 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
24 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
25 *        Êó¹ð€¹€ë€³€È¡¥
26 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
27 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
28 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
29 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
30 *      ÌÈÀÕ€¹€ë€³€È¡¥
31 *
32 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
33 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
34 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
35 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
36 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
37 *
38 *  $Id$
39 */
40
41/*
42 *              ¥¿¡Œ¥²¥Ã¥È°Íž¥â¥ž¥å¡Œ¥ë¡Ê¥À¥ß¡Œ¥¿¡Œ¥²¥Ã¥ÈÍÑ¡Ë
43 */
44
45#include "kernel_impl.h"
46#include "task.h"
47
48/*
49 *  ¥È¥ì¡Œ¥¹¥í¥°¥Þ¥¯¥í€Î¥Ç¥Õ¥©¥ë¥ÈÄêµÁ
50 */
51#ifndef LOG_DSP_ENTER
52#define LOG_DSP_ENTER(p_tcb)
53#endif /* LOG_DSP_ENTER */
54
55#ifndef LOG_DSP_LEAVE
56#define LOG_DSP_LEAVE(p_tcb)
57#endif /* LOG_DSP_LEAVE */
58
59/*
60 *  ¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ãËÜÂÎ
61 */
62static void
63dispatcher(void)
64{
65        LOG_DSP_ENTER(p_runtsk);
66        while ((p_runtsk = p_schedtsk) == NULL) {
67                /* ³ä¹þ€ß€òµö²Ä€·€¿€éCPU¥í¥Ã¥¯²òœüŸõÂրˀʀë€è€ŠœàÈ÷€¹€ë */
68                /* È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ËÀڀꎹ€š€ë */
69                do {
70                        /* ³ä¹þ€ß€ò€¹€Ù€Æµö²Ä€·¡€³ä¹þ€ßȯÀž€òÂÔ€Ä */
71                        /* ³ä¹þ€ßµö²ÄÁ°€ÎŸõÂÖ€ËÌ္¡Ê¡á¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€¹€ë¡Ë*/
72                } while (!reqflg);
73                reqflg = false;
74                /* ¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ËÌ္ */
75                /* CPU¥í¥Ã¥¯ŸõÂÖ€ËÌ္ */
76        }
77        /* Œ«¥¿¥¹¥¯¡Êp_runtsk¡Ë€ÎTCB€«€é¥¹¥¿¥Ã¥¯¥Ý¥€¥ó¥¿€òÉüµ¢€¹€ë */
78        LOG_DSP_LEAVE(p_runtsk);
79        /* Œ«¥¿¥¹¥¯€ÎTCB€«€éŒÂ¹ÔºÆ³«ÈÖÃÏ€òÉüµ¢€·¡€€œ€³€ØÊ¬Žô€¹€ë */
80}
81
82/*
83 *  ºÇ¹âÍ¥Àèœç°Ì¥¿¥¹¥¯€Ø€Î¥Ç¥£¥¹¥Ñ¥Ã¥Á
84 */
85void
86dispatch(void)
87{
88#ifdef TOPPERS_SUPPORT_OVRHDR
89        ovrtimer_stop();                                        /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€ÎÄä»ß */
90#endif /* TOPPERS_SUPPORT_OVRHDR */
91        /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òœü€¯€¹€Ù€Æ€Î¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€ËÊÝž€¹€ë */
92        /* ¥¹¥¿¥Ã¥¯¥Ý¥€¥ó¥¿€òŒ«¥¿¥¹¥¯¡Êp_runtsk¡Ë€ÎTCB€ËÊÝž€¹€ë */
93        /* dispatch_r€ò¡€ŒÂ¹ÔºÆ³«ÈÖÃπȀ·€ÆŒ«¥¿¥¹¥¯€ÎTCB€ËÊÝž€¹€ë */
94        dispatcher();
95
96/* dispatch_r: */
97        /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òœü€¯€¹€Ù€Æ€Î¥ì¥ž¥¹¥¿€ò¥¹¥¿¥Ã¥¯€«€éÉüµ¢€¹€ë */
98#ifdef TOPPERS_SUPPORT_OVRHDR
99        ovrtimer_start();                                       /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Îưºî³«»Ï */
100#endif /* TOPPERS_SUPPORT_OVRHDR */
101        calltex();
102}
103
104/*
105 *  ¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ã€Îưºî³«»Ï
106 */
107void
108start_dispatch(void)
109{
110        /* ¥¿¥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ËÀڀꎹ€š€ë */
111        /* CPU¥í¥Ã¥¯ŸõÂ֡гä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœüŸõÂրˀ¹€ë */
112        /* dispatcher_0€ËʬŽô€¹€ë */
113}
114
115/*
116 *  žœºß€Î¥³¥ó¥Æ¥­¥¹¥È€òŒÎ€Æ€Æ¥Ç¥£¥¹¥Ñ¥Ã¥Á
117 */
118void
119exit_and_dispatch(void)
120{
121        /* dispatcher€ËʬŽô€¹€ë */
122}
123
124/*
125 *  ³ä¹þ€ß¥Ï¥ó¥É¥éœÐžýœèÍý
126 *
127 *  ³ä¹þ€ß¥Ï¥ó¥É¥éÃæ€Ç€Ï¡€¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€·€Æ€€€ë€¿€á¡€œÐžý
128 *  œèÍý€Ç³ä¹þ€ß€ò¶Ø»ß€¹€ëɬÍ׀πʀ€¡¥
129 */
130void
131ret_int(void)
132{
133}
134
135/*
136 *  CPUÎã³°¥Ï¥ó¥É¥éœÐžýœèÍý
137 */
138void
139ret_exc(void)
140{
141}
142
143/*
144 *  ¥«¡Œ¥Í¥ë€ÎœªÎ»œèÍý€ÎžÆœÐ€·
145 */
146void
147call_exit_kernel(void)
148{
149        /* È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€ËÀڀꎹ€š€ë */
150        /* exit_kernel€ËʬŽô€¹€ë */
151        while (true);
152}
153
154/*
155 *  ¥¿¥¹¥¯³«»Ï»þœèÍý
156 */
157void
158start_r(void)
159{
160#ifdef TOPPERS_SUPPORT_OVRHDR
161        ovrtimer_start();                                       /* ¥ª¡Œ¥Ð¥é¥ó¥¿¥€¥Þ€Îưºî³«»Ï */
162#endif /* TOPPERS_SUPPORT_OVRHDR */
163        /* CPU¥í¥Ã¥¯²òœüŸõÂրˀ¹€ë */
164        /* Œ«¥¿¥¹¥¯¡Êp_runtsk¡Ë€Îµ¯Æ°ÈÖÃÏ€ò¡€³ÈÄ¥ŸðÊó€ò¥Ñ¥é¥á¡Œ¥¿€È€·€ÆžÆ€ÓœÐ€¹ */
165        /* ext_tsk€ËʬŽô€¹€ë */
166}
167
168/*
169 *  ¥¿¡Œ¥²¥Ã¥È°Íž€ÎœéŽü²œ
170 */
171void
172target_initialize(void)
173{
174}
175
176/*
177 *  ¥¿¡Œ¥²¥Ã¥È°Íž€ÎœªÎ»œèÍý
178 */
179void
180target_exit(void)
181{
182        exit(0);
183}
184
185/*
186 *  ¥·¥¹¥Æ¥à¥í¥°€ÎÄã¥ì¥Ù¥ëœÐÎπ΀¿€á€ÎÊž»úœÐÎÏ
187 */
188void
189target_fput_log(char c)
190{
191        /* Êž»úc€òÉœŒš/œÐÎÏ/ÊÝž€¹€ë */
192}
193
194/*
195 *  ¥á¥€¥óŽØ¿ô
196 */
197int
198main()
199{
200        sta_ker();
201        return(0);
202}
203
204/*
205 *  ¥«¡Œ¥Í¥ë€Î³ä€êÉÕ€±€ë¥á¥â¥êÎΰè€ÎŽÉÍý
206 *
207 *  TLSF¡Ê¥ª¡Œ¥×¥ó¥œ¡Œ¥¹€Î¥á¥â¥êŽÉÍý¥é¥€¥Ö¥é¥ê¡Ë€òÍÑ€€€ÆŒÂžœ¡¥
208 */
209#ifdef TOPPERS_SUPPORT_DYNAMIC_CRE
210
211#include "tlsf.h"
212
213static bool_t   tlsf_initialized = false;
214
215void
216initialize_kmm(void)
217{
218        if (init_memory_pool(kmmsz, kmm) >= 0) {
219                tlsf_initialized = true;
220        }
221}
222
223void *
224kernel_malloc(SIZE size)
225{
226        if (tlsf_initialized) {
227                return(malloc_ex(size, kmm));
228        }
229        else {
230                return(NULL);
231        }
232}
233
234void
235kernel_free(void *ptr)
236{
237        if (tlsf_initialized) {
238                free_ex(ptr, kmm);
239        }
240}
241
242#endif /* TOPPERS_SUPPORT_DYNAMIC_CRE */
詳しい使い方は TracBrowser を参照してください。