source: kernel/genoffset.tf

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

TOPPERS/ASP 1.9.1

ファイルサイズ: 4.2 KB
 
1$ ======================================================================
2$
3$   TOPPERS/ASP Kernel
4$       Toyohashi Open Platform for Embedded Real-Time Systems/
5$       Advanced Standard Profile Kernel
6$
7$   Copyright (C) 2011 by Embedded and Real-Time Systems Laboratory
8$               Graduate School of Information Science, Nagoya Univ., JAPAN
9
10$   Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
11$   ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
12$   ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
13$   (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
14$       ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
15$       ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
16$   (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
17$       Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
18$       ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
19$       €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
20$   (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
21$       Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
22$       €È¡¥
23$     (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
24$         ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
25$     (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
26$         Êó¹ð€¹€ë€³€È¡¥
27$   (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
28$       ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
29$       €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
30$       Í³€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
31$       ÌÈÀÕ€¹€ë€³€È¡¥
32
33$   ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
34$   €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
35$   €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
36$   ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
37$   €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
38$
39$   $Id$
40$
41$ =====================================================================
42
43$
44$  #define¥Ç¥£¥ì¥¯¥Æ¥£¥Ö€ÎÀžÀ®
45$
46$FUNCTION DEFINE$
47        #define $ARGV[1]$$TAB$$FORMAT("%d", +ARGV[2])$$NL$
48$END$
49
50$
51$  ¥Ó¥Ã¥È€Î¥µ¡Œ¥Á
52$
53$FUNCTION SEARCH_BIT$
54        $_val = ARGV[1]$
55        $FOREACH _val_bit RANGE(0,7)$
56                $IF (_val & 1) != 0$
57                        $RESULT = _val_bit$
58                $END$
59                $_val = _val >> 1$
60        $END$
61$END$
62
63$
64$  ¥Ó¥Ã¥È¥Õ¥£¡Œ¥ë¥É€Î¥ª¥Õ¥»¥Ã¥È€È¥Ó¥Ã¥È°ÌÃÖ€ÎÄêµÁ€ÎÀžÀ®
65$
66$FUNCTION DEFINE_BIT$
67        $label = ARGV[1]$
68        $struct_size = ARGV[2]$
69        $output_size = ARGV[3]$
70
71        $top = SYMBOL(label)$
72        $IF !LENGTH(top)$
73                $ERROR$$FORMAT("label %1% not found", label)$$END$
74        $ELSE$
75                $val = 0$
76                $FOREACH i RANGE(0,struct_size-1)$
77                        $tmp_val = PEEK(top + i, 1)$
78                        $IF val == 0 && tmp_val != 0$
79                                $val = tmp_val$
80                                $offset = i$
81                        $END$
82                $END$
83
84                $IF val == 0$
85                        $ERROR$$FORMAT("bit not found in %1%", ARGV[1])$$END$
86                $ELSE$
87                        $val_bit = SEARCH_BIT(val)$
88                        $RESULT = {}$
89                        $IF EQ(output_size, "W")$
90                                $IF SIL_ENDIAN_BIG$
91                                        $val_bit = val_bit + 24 - ((offset & 0x03) << 3)$
92                                $ELSE$
93                                        $val_bit = val_bit + ((offset & 0x03) << 3)$
94                                $END$
95                                $offset = offset & ~0x03$
96                        $ELSE$$IF EQ(output_size, "H")$
97                                $IF SIL_ENDIAN_BIG$
98                                        $val_bit = val_bit + 8 - ((offset & 0x01) << 3)$
99                                $ELSE$
100                                        $val_bit = val_bit + ((offset & 0x01) << 3)$
101                                $END$
102                                $offset = offset & ~0x01$
103                        $END$$END$
104                $END$
105
106                #define $label$$TAB$$FORMAT("%d", +offset)$$NL$
107                #define $label$_bit$TAB$$FORMAT("%d", +val_bit)$$NL$
108                #define $label$_mask$TAB$$FORMAT("0x%x", 1 << val_bit)$$NL$
109        $END$
110$END$
111
112$
113$  ¥Ð¥€¥ÈÇÛÃրΥÁ¥§¥Ã¥¯
114$
115$FUNCTION MAGIC_CHECK$
116        $size = ARGV[1]$
117        $check = ARGV[2]$
118
119        $label = FORMAT("MAGIC_%d", +size)$
120        $top = SYMBOL(label)$
121        $IF !LENGTH(top)$
122                $ERROR$$FORMAT("label %1% not found", label)$$END$
123        $ELSE$
124                $FOREACH offset RANGE(1,size)$
125                        $IF SIL_ENDIAN_BIG$
126                                $val = PEEK(top + offset - 1, 1)$
127                        $ELSE$
128                                $val = PEEK(top + size - offset, 1)$
129                        $END$
130                        $IF val != AT(check, offset - 1)$
131                                $ERROR$$FORMAT("value check of %1% failed", label)$$END$
132                        $END$
133                $END$
134        $END$
135$END$
136
137$MAGIC_CHECK(1, { 0x12 })$
138$MAGIC_CHECK(2, { 0x12, 0x34 })$
139$MAGIC_CHECK(4, { 0x12, 0x34, 0x56, 0x78 })$
140
141$
142$  ¥Õ¥¡¥€¥ë¥Ø¥Ã¥À€ÎÀžÀ®
143$
144$FILE "offset.h"$
145/* offset.h */$NL$
146$NL$
詳しい使い方は TracBrowser を参照してください。