Changeset 315 for rubycfg_asp/trunk/asp_dcre/doc
- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- Location:
- rubycfg_asp/trunk/asp_dcre/doc
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_asp/trunk/asp_dcre/doc/asp_spec.txt
-
Property svn:mime-type
changed from
text/plain
totext/plane; charset=UTF-8
r313 r315 1 1 2 TOPPERS/ASP ã«ã¼ãã«ã®ä»æ§æ¦è¦3 4 対å¿ãã¼ã¸ã§ã³: Release 1.95 æçµæ´æ°: 2017å¹´1æ29æ¥6 7 ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASPã«ã¼ãã«ã®ä»æ§æ¦è¦ã«ã¤ãã¦èª¬æãããã®ã§ 8 ããï¼Î¼ITRON4.0ä»æ§ã®ã¹ã¿ã³ãã¼ããããã¡ã¤ã«ã«å¯¾ããæ¡å¼µããã³å¤æ´ç® 9 æãä¸å¿ã«èª¬æããï¼ 2 TOPPERS/ASPカーネルの仕様概要 3 4 対応バージョン: Release 1.9 5 最終更新: 2017年1月29日 6 7 このドキュメントは,TOPPERS/ASPカーネルの仕様概要について説明したもので 8 ある.μITRON4.0仕様のスタンダードプロファイルに対する拡張および変更箇 9 所を中心に説明する. 10 10 11 11 ---------------------------------------------------------------------- … … 17 17 Graduate School of Information Science, Nagoya Univ., JAPAN 18 18 19 ä¸è¨èä½æ¨©è 20 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 21 ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 22 å¤ã»åé 23 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 24 (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 25 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 26 ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 27 (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 28 ç¨ã§ããå½¢ã§åé 29 å¸ããå ´åã«ã¯ï¼åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 31 è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 33 ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 35 ç¨ã§ããªãå½¢ã§åé 36 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 37 ã¨ï¼ 38 (a) åé 39 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 40 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 41 ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 42 (b) åé 43 å¸ã®å½¢æ 44 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 45 å ±åãããã¨ï¼ 46 (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 47 害ãããï¼ä¸è¨èä½æ¨©è 48 ããã³TOPPERSããã¸ã§ã¯ããå 49 責ãããã¨ï¼ 50 ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 51 ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 52 ããã³TOPPERSããã¸ã§ã¯ãã 53 å 54 責ãããã¨ï¼ 19 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 23 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 24 スコード中に含まれていること. 25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 26 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 27 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 28 の無保証規定を掲載すること. 29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 30 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 31 と. 32 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 33 作権表示,この利用条件および下記の無保証規定を掲載すること. 34 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 35 報告すること. 36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 37 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 38 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 39 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 40 免責すること. 55 41 56 æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 57 ã 58 ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 59 ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 60 ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 61 ã®è²¬ä»»ãè² ããªãï¼ 42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 46 の責任を負わない. 62 47 63 48 $Id$ 64 49 ---------------------------------------------------------------------- 65 50 66 âåæã¨ãªãææ¸ 67 68 [1] ããã³åä¼: μITRON4.0ä»æ§, Ver.4.02.00, 2004å¹´. 69 70 [2] ããã³åä¼: μITRON4.0ä»æ§ ä¿è·æ©è½æ¡å¼µï¼Î¼ITRON4.0/PXä»æ§ï¼, 71 Ver.1.00.00, 2002å¹´. 72 73 [3] TOPPERSããã¸ã§ã¯ã: TOPPERS/JSPã«ã¼ãã« ã¦ã¼ã¶ãºããã¥ã¢ã« 74 Release 1.4.3対å¿, æçµæ´æ°: 2007å¹´4æ23æ¥. 75 76 âä»æ§ã®æ¦ç¥ 77 78 TOPPERS/ASPã«ã¼ãã«ã®ä»æ§ã¯ï¼Î¼ITRON4.0ä»æ§ã®ã¹ã¿ã³ãã¼ããããã¡ã¤ã«ã 79 ãã¼ã¹ã«ï¼æ¬¡ã®ãããªæ¡å¼µã»æ¹è¯ãå ãããã®ã§ããï¼ 80 81 ã»å²è¾¼ã¿å¦çæ©è½ã«ã¤ãã¦ã¯ï¼TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã«æºæ ãããï¼ 82 ã»Î¼ITRON4.0ä»æ§ã®ã¹ã¿ã³ãã¼ããããã¡ã¤ã«å¤ã®æ©è½ã®ä¸é¨ãå°å 83 ¥ããï¼ 84 ã»ä¸é¨ã®ä»æ§ã«ã¤ãã¦ï¼Î¼ITRON4.0ä»æ§ã«å¯¾ãã¦å¤æ´ãå ããï¼ 85 ã»JSPã«ã¼ãã«ã«ãããç¬èªã®æ¡å¼µæ©è½ãä¸é¨å¤æ´ãã¦å®è£ 86 ããï¼ 87 ã»ASPã«ã¼ãã«ã«ãããç¬èªã®æ¡å¼µæ©è½ãæ°ãã«å®è£ 88 ããï¼ 89 ã»ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³å¦çãå 90 ¨é¢çã«è¦ç´ãï¼ 91 ã»æ¡å¼µæ©è½ãå®è£ 92 ããããã®æ¡å¼µããã±ã¼ã¸ããµãã¼ãããï¼ 93 ã»TOPPERSçµè¾¼ã¿ã³ã³ãã¼ãã³ãã·ã¹ãã ï¼TECSï¼ãå°å 94 ¥ããï¼ 95 96 ãã®ããASPã«ã¼ãã«ã¯ï¼Î¼ITRON4.0ä»æ§ã«å®å 97 ¨ã«æºæ ãã¦ããããã§ã¯ãªãï¼ 98 JSPã«ã¼ãã«ã®ä¸ä½äºæã«ããªã£ã¦ããªãï¼ 99 100 μITRON4.0ä»æ§ã§ã¯ï¼å®è£ 101 ç¬èªã«ç¨æããéçAPIããã³ãµã¼ãã¹ã³ã¼ã«ã®å称 102 ã«ã¯ï¼å 103 é ã«ãããã"V"ããã³"v"ã®æåãä»å ãããã®ã¨ãã¦ãããï¼ASPã«ã¼ 104 ãã«ã§ã¯ãã®è¦å®ã¯æ¡ç¨ããªãï¼ 105 106 以ä¸ã§ã¯ï¼Î¼ITRON4.0ä»æ§ã®ã¹ã¿ã³ãã¼ããããã¡ã¤ã«ã«å¯¾ããæ¡å¼µããã³å¤ 107 æ´ç®æã«ã¤ãã¦èª¬æããï¼ 108 109 âã¹ã¿ã³ãã¼ããããã¡ã¤ã«å¤ã®æ©è½ã®ä¸é¨å°å 110 ¥ 111 112 μITRON4.0ä»æ§ã«ã¯è¦å®ããã¦ãããï¼ã¹ã¿ã³ãã¼ããããã¡ã¤ã«ã«å«ã¾ã㪠113 ãï¼ã¾ãã¯ï¼å«ã¾ããã¨ã¯éããªãï¼æ©è½ã¨ãã¦ï¼æ¬¡ã®æ©è½ãå®è£ 114 ããï¼ 115 116 (1) ã¤ãã³ããã©ã°ã®è¤æ°ã¿ã¹ã¯å¾ 117 ã¡ 118 119 ã¤ãã³ããã©ã°ã«å¯¾ããè¤æ°ã¿ã¹ã¯å¾ 120 ã¡ã®æ©è½ï¼TA_WMULå±æ§ã®ã¤ãã³ããã©ã°ï¼ 121 ãå®è£ 122 ããï¼ 123 124 ããã«ããï¼ã¤ãã³ããã©ã°ã®ã»ããï¼set_flgï¼iset_flgï¼ã§è¤æ°ã®ã¿ã¹ã¯ã 125 èµ·åºãããå¯è½æ§ãçããï¼å¤ãã®ã¿ã¹ã¯ãåæã«å¾ 126 ã¡è§£é¤ããå ´åï¼ã«ã¼ã 127 ã«å 128 ã§ã®å²è¾¼ã¿ç¦æ¢æéãé·ããªãããï¼ä½¿ç¨ã«ããã£ã¦ã¯æ³¨æãå¿ 129 è¦ã§ããï¼ 130 131 (2) ã¢ã©ã¼ã ãã³ãã© 132 133 ã¢ã©ã¼ã ãã³ãã©ã®æ©è½ãå®è£ 134 ããï¼ã¢ã©ã¼ã ãã³ãã©æ©è½ã®ããã«å®è£ 135 ãã 136 éçAPIããã³ãµã¼ãã¹ã³ã¼ã«ã¯æ¬¡ã®éãã§ããï¼ 137 138 CRE_ALM ã¢ã©ã¼ã ãã³ãã©ã®çæï¼éçAPIï¼ 139 sta_alm ã¢ã©ã¼ã ãã³ãã©ã®åä½éå§ 140 ista_alm ã¢ã©ã¼ã ãã³ãã©ã®åä½éå§ï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ï¼ 141 stp_alm ã¢ã©ã¼ã ãã³ãã©ã®åä½åæ¢ 142 istp_alm ã¢ã©ã¼ã ãã³ãã©ã®åä½åæ¢ï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ï¼ 143 144 (3) å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ 145 146 ã¹ã¿ã³ãã¼ããããã¡ã¤ã«ã§ã¯ï¼å²è¾¼ã¿ãã³ãã©ã¨å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã® 147 ããããããµãã¼ãããã°ãããã¨ã«ãªã£ã¦ããï¼JSPã«ã¼ãã«ã§ã¯å²è¾¼ã¿ãã³ 148 ãã©ã®ã¿ãå®è£ 149 ãã¦ãããï¼ASPã«ã¼ãã«ã§ã¯ãã®ä¸¡è 150 ãå®è£ 151 ããï¼ 152 153 å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®ä»æ§ã«ã¤ãã¦ã¯ï¼TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã®è¦ 154 å®ã«æºæ ããï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã追å ãããµã¼ãã¹ã³ã¼ã«ã¨ãã¦ï¼æ¬¡ 155 ã®éçAPIãå®è£ 156 ããï¼ãã®éçAPIã®ä»æ§ã«ã¤ãã¦ã¯ï¼TOPPERSæ¨æºå²è¾¼ã¿å¦ç 157 ã¢ãã«ã«ããã¦ï¼Î¼ITRON4.0ä»æ§ã«å¯¾ãã¦æ¡å¼µãå ãã¦ããï¼ 158 159 ATT_ISR å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®è¿½å ï¼éçAPIï¼ 160 161 (4) å²è¾¼ã¿ç®¡çæ©è½ 162 163 ã¹ã¿ã³ãã¼ããããã¡ã¤ã«ã«å«ã¾ããªãå²è¾¼ã¿ç®¡çæ©è½ã¨ãã¦ï¼æ¬¡ã®ãµã¼ãã¹ 164 ã³ã¼ã«ãå®è£ 165 ããï¼JSPã«ã¼ãã«ã§ã¯ï¼ãããã®ãµã¼ãã¹ã³ã¼ã«ãå®è£ 166 ãããã© 167 ããã¯ã¿ã¼ã²ããä¾åã¨ãªã£ã¦ãããï¼ASPã«ã¼ãã«ã§ã¯ï¼TOPPERSæ¨æºå²è¾¼ã¿ 168 å¦çã¢ãã«ã®è¦å®ã«æºæ ãã¦ï¼ã¿ã¼ã²ããéä¾åã«å®è£ 169 ããï¼ 170 171 dis_int å²è¾¼ã¿ã®ç¦æ¢ 172 ena_int å²è¾¼ã¿ã®è¨±å¯ 173 chg_ipm å²è¾¼ã¿åªå 174 度ãã¹ã¯ã®å¤æ´ 175 get_ipm å²è¾¼ã¿åªå 176 度ãã¹ã¯ã®åç 177 § 178 179 (5) ãªãã¸ã§ã¯ãã®ç¶æ 180 åç 181 §æ©è½ 182 183 主ã«ãããã°æåãã®æ©è½ã¨ãã¦ï¼ãªãã¸ã§ã¯ãã®ç¶æ 184 åç 185 §æ©è½ãå®è£ 186 ããï¼ 187 å 188 ·ä½çã«ã¯ï¼æ¬¡ã®ãµã¼ãã¹ã³ã¼ã«ãå®è£ 189 ããï¼ 190 191 ref_tsk ã¿ã¹ã¯ã®ç¶æ 192 åç 193 § 194 ref_tex ã¿ã¹ã¯ä¾å¤å¦çã®ç¶æ 195 åç 196 § 197 ref_sem ã»ããã©ã®ç¶æ 198 åç 199 § 200 ref_flg ã¤ãã³ããã©ã°ã®ç¶æ 201 åç 202 § 203 ref_dtq ãã¼ã¿ãã¥ã¼ã®ç¶æ 204 åç 205 § 206 ref_mbx ã¡ã¼ã«ããã¯ã¹ã®ç¶æ 207 åç 208 § 209 ref_mpf åºå®é·ã¡ã¢ãªãã¼ã«ã®ç¶æ 210 åç 211 § 212 ref_cyc å¨æãã³ãã©ã®ç¶æ 213 åç 214 § 215 ref_alm ã¢ã©ã¼ã ãã³ãã©ã®ç¶æ 216 åç 217 § 218 219 âμITRON4.0ä»æ§ã«å¯¾ããå¤æ´ 220 221 (1) ITRONæ¨æºãã¼ã¿åã®è¦ç´ã 222 223 ãµã¤ãºã®æ±ºã¾ã£ãæ´æ°åï¼Bï¼H, Wãªã©ï¼ãªã©ã«ã¤ãã¦ï¼C99ã«æºæ ããåã®å 224 称ï¼int8_tï¼int16_tï¼int32_tãªã©ï¼ãããã¨ç¸æ§ãè¯ãå称ã«å¤æ´ããï¼ 225 ITRONæ¨æºãã¼ã¿åï¼Bï¼H, Wãªã©ï¼ãå¿ 226 è¦ã¨ããã¢ããªã±ã¼ã·ã§ã³ã®ããã«ï¼ 227 itron.hãç¨æããï¼ 228 229 (2) éã¿ã¹ã¯ã³ã³ããã¹ãããã®ext_tsk 230 231 éã¿ã¹ã¯ã³ã³ããã¹ãããext_tskãå¼ã°ããå ´åï¼E_CTXã¨ã©ã¼ãè¿ããã®ã¨ 232 ããï¼ããã«ã¨ããªã£ã¦ï¼ext_tskããªã¿ã¼ã³ããå¯è½æ§ããããã®ã¨ãï¼è¿ã 233 å¤ã®åãERã¨ããï¼ 234 235 (3) CPUä¾å¤ãã³ãã©ã§è¡ããæä½ 236 237 CPUä¾å¤ãã³ãã©ã§è¡ããæä½ã«ã¤ãã¦ã¯ï¼TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã«æº 238 æ ãããã¨ã¨ãï¼JSPã«ã¼ãã«ã®ä»æ§ãè¸è¥²ããï¼Î¼ITRON4.0ä»æ§ã«ãå¾ããªãï¼ 239 ãã®ããã®ãµã¼ãã¹ã³ã¼ã«ã¨ãã¦ï¼æ¬¡ã®ãµã¼ãã¹ã³ã¼ã«ãå®è£ 240 ããï¼ 241 242 xsns_dpn CPUä¾å¤çºçæã®ãã£ã¹ãããä¿çç¶æ 243 ã®åç 244 § 245 xsns_xpn CPUä¾å¤çºçæã®ã¿ã¹ã¯ä¾å¤å¦çä¿çç¶æ 246 ã®åç 247 § 248 249 (4) ã«ã¼ãã«ã®ç¨ãã管çé åã®åé¢ 250 251 μITRON4.0/PXä»æ§ã«ããã¦å°å 252 ¥ãããμITRON4.0ä»æ§ã«å¯¾ããå¤æ´ã¨ãã¦ï¼ã«ã¼ 253 ãã«ã®ç¨ãã管çé åã®åé¢ã«é¢ããä»æ§ãä¸é¨æ¡ç¨ããï¼ 254 255 ã¾ãï¼åºå®é·ã¡ã¢ãªãã¼ã«ã®å®è£ 256 ã«ããã¦ï¼ã«ã¼ãã«ã®ç¨ãã管çé åãåé¢ 257 ãããã¨ã«ä¼´ãï¼åºå®é·ã¡ã¢ãªãã¼ã«ãçæããéçAPIï¼CRE_MPFï¼ã®ãã©ã¡ã¼ 258 ã¿ã«ï¼åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çé åã®å 259 é çªå°ï¼mpfmbï¼ã追å ããï¼ 260 261 ã¾ãï¼ããã«ãããã¦ï¼ãã¼ã¿ãã¥ã¼ãçæããéçAPIï¼CRE_DTQï¼ã®æå¾ã® 262 ãã©ã¡ã¼ã¿ã®å称ãï¼ãã¼ã¿ãã¥ã¼ç®¡çé åã®å 263 é çªå°ï¼dtqmbï¼ã«å¤æ´ããï¼ 264 265 ãªãï¼ã¡ã¼ã«ããã¯ã¹ã¯ï¼Î¼ITRON4.0ä»æ§ã¨ã®äºææ§ã®ããã«æ®ãã¦ããæ©è½ 266 ã¨ä½ç½®ä»ãï¼ã«ã¼ãã«ã®ç¨ãã管çé åã®åé¢ã¯è¡ããªãï¼ãã®ããï¼ã¡ã¼ã« 267 ããã¯ã¹ãçæããéçAPIï¼CRE_MBXï¼ã«å¯¾ããå¤æ´ã¯ãªãï¼ 268 269 (5) å¦çåä½ã¨ã¡ã¢ãªé åã®ãã¼ã¿åã®è¦ç´ã 270 271 å¦çåä½ã®ã¨ã³ããªçªå°ã®ãã¼ã¿åãï¼ãã©ã¡ã¼ã¿ãåæ ãããªãFPåã§ã¯ãª 272 ãï¼å¦çåä½æ¯ã®å°ç¨ã®ãã¼ã¿åã¨ããï¼ä¾ãã°ï¼ã¿ã¹ã¯ã®ã¨ã³ããªçªå°ã®ãã¼ 273 ã¿åãTASKåï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®ãã¼ã¿åãTEXRTNåã¨ããï¼ 274 275 ã¾ãï¼ã¹ã¿ãã¯é åã¨åºå®é·ã¡ã¢ãªãã¼ã«é åã®ãã¼ã¿åãï¼ããããSTK_Tå 276 ã¨MPF_Tåã¨ããï¼ 277 278 (6) å¤ã0ã®å®æ°ï¼ãªãã¸ã§ã¯ãå±æ§çï¼ã®è¦ç´ã 279 280 ã³ã¼ãã£ã³ã°ãã¹ãé²ãããã«ï¼å¤ã0ã®å®æ°ã®æ±ããè¦ç´ãï¼ãªãã¸ã§ã¯ãå± 281 æ§ï¼TA_TFIFOçï¼ã«ã¤ãã¦ã¯ï¼å¤ã0ã®ãã®ã¯ããã©ã«ãæ±ããã¦å»æ¢ãï¼å®ç¾© 282 ãitron.hã«ç§»ãï¼å¤ã0ã®ãµã¼ãã¹ã³ã¼ã«ã®åä½ã¢ã¼ãï¼TWF_ANDWï¼ããªãã¸ã§ 283 ã¯ãã®ç¶æ 284 ï¼TTEX_ENAçï¼ã«ã¤ãã¦ã¯ï¼å¤ãå¤æ´ããï¼ 285 286 (7) å¼·å¶å¾ 287 ã¡è¦æ±ãã¹ãã®å»æ¢ 288 289 å¼·å¶å¾ 290 ã¡è¦æ±ããã¹ãããæ©è½ãå»æ¢ããï¼è¨ãæããã¨ï¼å¼·å¶å¾ 291 ã¡è¦æ±ãã¹ 292 ãæ°ã®æ大å¤ã1ã«åºå®ããï¼ããã«ä¼´ãï¼frsm_tskã¯å»æ¢ãï¼itron.hã«ãã 293 ã¦frsm_tskãrsm_tskã«ãã¯ãå®ç¾©ããï¼ã¾ãï¼TMAX_SUSCNTã®å®ç¾©ãitron.hã« 294 移ãï¼ 295 296 (8) ã·ã¹ãã æå»ã®è¨å®æ©è½ã®å»æ¢ 297 298 set_timï¼ã·ã¹ãã æå»ã®è¨å®ï¼ãå»æ¢ããï¼ 299 300 (9) å¨æãã³ãã©ã®ä»æ§å¤æ´ 301 302 sta_cycãå¼ã³åºããå¾ï¼æåã«å¨æãã³ãã©ãèµ·åãããæå»ãå¤æ´ããï¼ 303 μITRON4.0ä»æ§ã§ã¯ï¼sta_cycãå¼ã³åºãã¦ããå¨æãã³ãã©ã®èµ·åå¨æã§æå® 304 ããç¸å¯¾æéå¾ã¨ãã¦ãããï¼ASPã«ã¼ãã«ã§ã¯ï¼èµ·åä½ç¸ã§æå®ããç¸å¯¾æé 305 å¾ã¨ããï¼ 306 307 (10) ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§æ¡ä»¶ã®å¤æ´ 308 309 å²è¾¼ã¿åªå 310 度ãã¹ã¯å 311 ¨è§£é¤ç¶æ 312 ã§ãªãå ´åã«ã¯ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å® 313 è¡ãéå§ãããªãã¨ããä»æ§ã«å¤æ´ããï¼ 314 315 âJSPã«ã¼ãã«ã«ãããç¬èªã®æ¡å¼µæ©è½ 316 317 JSPã«ã¼ãã«ã«ãããç¬èªã®æ¡å¼µæ©è½ã®ä¸ã§ï¼ä»¥ä¸ã®æ©è½ãå®è£ 318 ããï¼ 319 320 (1) æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»åç 321 §æ©è½ 322 323 æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»åç 324 §æ©è½ã¨ã¯ï¼ASPã«ã¼ãã«ä¸ã§åä½ããã¿ã¹ã¯ãASP 325 ã«ã¼ãã«èªèº«ã®æ§è½ãè¨æ¸¬ããããã®ï¼ã·ã¹ãã æå»ãμç§åä½ã§èªã¿åºãæ© 326 è½ã§ããï¼ãã®æ©è½ã®ããã®ãµã¼ãã¹ã³ã¼ã«ã¯æ¬¡ã®éãã§ããï¼JSPã«ã¼ãã«ã¨ 327 ã¯å称ãå¤æ´ããï¼ï¼ 328 329 get_utm æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®åç 330 § 331 332 JSPã«ã¼ãã«ããã®ä»æ§å¤æ´ã¨ãã¦ï¼get_utmã¯ä»»æã®ã³ã³ããã¹ãããå¼ã³åº 333 ããã¨ãã§ãããã®ããï¼ã¾ãï¼æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®åï¼SYSUTMï¼ãï¼ 334 ã¿ã¼ã²ããéä¾åé¨ã§ulong_tã«å®ç¾©ããï¼ 335 336 (2) çµäºå¦çã«ã¼ãã³æ©è½ 337 338 ASPã«ã¼ãã«ã§ã¯ï¼ã·ã¹ãã ã®çµäºæã«å¼ã³åºãããçµäºå¦çã«ã¼ãã³ãç»é²ã 339 ãããã®æ©è½ããµãã¼ãããï¼ãã®æ©è½ã®ããã®éçAPIã¯æ¬¡ã®éãã§ããï¼ 340 341 ATT_TER çµäºå¦çã«ã¼ãã³ã®è¿½å ï¼éçAPIï¼ 342 343 (3) ã«ã¼ãã«åä½ç¶æ 344 ã®åç 345 § 346 347 ã«ã¼ãã«ä¸ã§åä½ããã¿ã¹ã¯ããå¼ã³åºãããé¢æ°ãï¼ã«ã¼ãã«ã®åæåå®äº 348 åãçµäºå¦çéå§å¾ã«ãå¼ã³åºãããå¯è½æ§ãããå ´åã«ã¯ï¼ãã®ä¸ã§ã«ã¼ã 349 ã«ã®ãµã¼ãã¹ã³ã¼ã«ãå¼ã³åºããããå¤å¥ãããã¨ãå¿ 350 è¦ã¨ãªãï¼ãã®æ©è½ã® 351 ããã®ãµã¼ãã¹ã³ã¼ã«ã¯æ¬¡ã®éãã§ããï¼JSPã«ã¼ãã«ã¨ã¯å称ãå¤æ´ããï¼ï¼ 352 353 sns_ker ã«ã¼ãã«éåä½ç¶æ 354 ã®åç 355 § 356 357 âASPã«ã¼ãã«ã«ãããç¬èªã®æ¡å¼µæ©è½ 358 359 (1) å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å® 360 361 å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ãè¨å®ããæ©è½ã¨ãã¦ï¼TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã« 362 ã§è¦å®ããã次ã®éçAPIãå®è£ 363 ããï¼ 364 365 CFG_INT å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å®ï¼éçAPIï¼ 366 367 (2) åæã»éä¿¡ãªãã¸ã§ã¯ãã®ååæåæ©è½ 368 369 åæã»éä¿¡ãªãã¸ã§ã¯ããåæç¶æ 370 ã«æ»ãããã®æ©è½ã¨ãã¦ï¼æ¬¡ã®ãµã¼ãã¹ã³ã¼ 371 ã«ãå®è£ 372 ããï¼ 373 374 ini_sem ã»ããã©ã®ååæå 375 ini_flg ã¤ãã³ããã©ã°ã®ååæå 376 ini_dtq ãã¼ã¿ãã¥ã¼ã®ååæå 377 ini_mbx ã¡ã¼ã«ããã¯ã¹ã®ååæå 378 ini_mpf åºå®é·ã¡ã¢ãªãã¼ã«ã®ååæå 379 380 åæã»éä¿¡ãªãã¸ã§ã¯ãã®ååæåã®éã«ï¼ãã®åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ 381 ãã¦å¾ 382 ã¡ç¶æ 383 ã¨ãªã£ã¦ããã¿ã¹ã¯ã¯ãã¹ã¦å¾ 384 ã¡è§£é¤ãããï¼å¾ 385 ã¡è§£é¤ãããã¿ 386 ã¹ã¯ã«å¯¾ãã¦ã¯ï¼E_DLTãè¿ãï¼E_DLTã¯ï¼ã¹ã¿ã³ãã¼ããããã¡ã¤ã«ã§ã¯ä½¿ç¨ 387 ãã¦ããªãã¨ã©ã¼ã³ã¼ãã§ããï¼ 388 389 ãã®ããï¼ãããã®ãµã¼ãã¹ã³ã¼ã«ã«ããï¼è¤æ°ã®ã¿ã¹ã¯ãèµ·åºãããå¯è½æ§ 390 ãçããï¼å¤ãã®ã¿ã¹ã¯ãåæã«å¾ 391 ã¡è§£é¤ããå ´åï¼ã«ã¼ãã«å 392 ã§ã®å²è¾¼ã¿ç¦ 393 æ¢æéãé·ããªãããï¼ä½¿ç¨ã«ããã£ã¦ã¯æ³¨æãå¿ 394 è¦ã§ããï¼ 395 396 åæã»éä¿¡ãªãã¸ã§ã¯ããååæåããéã«ï¼ã¢ããªã±ã¼ã·ã§ã³å´ã¨ã®æ´åæ§ 397 ãä¿ã¤ã®ã¯ã¢ããªã±ã¼ã·ã§ã³ã®è²¬ä»»ã§ããï¼å 398 ·ä½çã«ã¯ï¼åºå®é·ã¡ã¢ãªãã¼ã« 399 ãååæåããéã«ã¯ï¼ããããç²å¾æ¸ã¿ã®ã¡ã¢ãªãããã¯ããã以é使ã㪠400 ãããã«ããªããã°ãªããªãï¼ã¾ãï¼ã¡ã¼ã«ããã¯ã¹ãååæåããéã«ã¯ï¼ 401 ã¡ã¼ã«ããã¯ã¹ã«éä¿¡ãããã¡ãã»ã¼ã¸é åãååããªããã°ãªããªãï¼ 402 403 (3) åªå 404 度ãã¼ã¿ãã¥ã¼ã®æ°è¨ 405 406 åªå 407 度ä»ãã®ãã¼ã¿ãã¥ã¼ã®æ©è½ãæ°è¨ããï¼åªå 408 度ä»ããã¼ã¿ãã¥ã¼æ©è½ã® 409 ããã«å®è£ 410 ããéçAPIããã³ãµã¼ãã¹ã³ã¼ã«ã¯æ¬¡ã®éãã§ããï¼ 411 412 CRE_PDQ åªå 413 度ãã¼ã¿ãã¥ã¼ã®çæ 414 snd_pdq åªå 415 度ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ 416 psnd_pdq åªå 417 度ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼ 418 ipsnd_pdq åªå 419 度ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼éã¿ã¹ã¯ã³ã³ããã¹ãï¼ 420 tsnd_pdq åªå 421 度ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼ 422 rcv_pdq åªå 423 度ãã¼ã¿ãã¥ã¼ããã®åä¿¡ 424 prcv_pdq åªå 425 度ãã¼ã¿ãã¥ã¼ããã®åä¿¡ï¼ãã¼ãªã³ã°ï¼ 426 trcv_pdq åªå 427 度ãã¼ã¿ãã¥ã¼ããã®åä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼ 428 ini_pdq åªå 429 度ãã¼ã¿ãã¥ã¼ã®ååæå 430 ref_pdq åªå 431 度ãã¼ã¿ãã¥ã¼ã®ç¶æ 432 åç 433 § 434 435 ããã§ï¼åªå 436 度ãã¼ã¿ãã¥ã¼ã«èç©ããããã¼ã¿ã®æ°ãå¤ãå ´åï¼åªå 437 度ãã¼ 438 ã¿ãã¥ã¼ã¸ã®ãã¼ã¿ã®éä¿¡ãè¡ããµã¼ãã¹ã³ã¼ã«ï¼snd_pdqï¼psnd_pdqï¼ 439 ipsnd_pdqï¼tsnd_pdqï¼ã®å¦çæéãé·ããªãï¼ã«ã¼ãã«å 440 ã§ã®å²è¾¼ã¿ç¦æ¢æé 441 ãé·ããªãããï¼ä½¿ç¨ã«ããã£ã¦ã¯æ³¨æãå¿ 442 è¦ã§ããï¼ 443 444 (4) èªã¿ã¹ã¯ã®æ¡å¼µæ 445 å ±ã®åç 446 § 447 448 èªã¿ã¹ã¯ã®æ¡å¼µæ 449 å ±ãåç 450 §ããããã®ãµã¼ãã¹ã³ã¼ã«ãæ°è¨ããï¼ã©ã¤ãã©ãª 451 çã®ä¸ã§ç¨ãããã¨ãæ³å®ãã¦ããï¼ 452 453 get_inf èªã¿ã¹ã¯ã®æ¡å¼µæ 454 å ±ã®åç 455 § 456 457 (5) ã«ã¼ãã«ã®çµäº 458 459 è´å½çãªã¨ã©ã¼ãèµ·ãã£ãå ´åãªã©ã«ã«ã¼ãã«ãçµäºãããããã®ãµã¼ãã¹ã³ã¼ 460 ã«ãæ°è¨ããï¼ãã®æ©è½ã¯ï¼Î¼ITRON4.0ä»æ§ã®æ©è½åé¡ã§ã¯ï¼ã·ã¹ãã æ§æ管 461 çæ©è½ã«åé¡ããï¼JSPã«ã¼ãã«ã§ã¯ï¼kernel_exitã¨ããå称ã§ï¼å®è³ªçã«ã 462 ã®æ©è½ãç¨æãã¦ããï¼ï¼ 463 464 ext_ker ã«ã¼ãã«ã®çµäº 465 466 ASPã«ã¼ãã«ã§ã¯ï¼ãã®ãµã¼ãã¹ã³ã¼ã«ãããªã¿ã¼ã³ãããã¨ã¯ãªããï¼ä¿è·æ© 467 è½ãæã£ãã«ã¼ãã«ã§ã¯ã¨ã©ã¼ãªã¿ã¼ã³ããå¯è½æ§ãããããï¼è¿ãå¤ã®åã 468 ERã¨ããï¼ 469 470 ããã«ä¼´ã£ã¦ï¼JSPã«ã¼ãã«ã®kernel_startãï¼sta_kerã«å称å¤æ´ããï¼ãã 471 ãï¼sta_kerã¯ãµã¼ãã¹ã³ã¼ã«ã¨ã¯è¦ãªããªããã¨ã«ããï¼ 472 473 (6) éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®è¨å® 474 475 éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®å 476 é çªå°ã¨ãµã¤ãºãæå®ããããã® 477 éçAPIãæ°è¨ããï¼ã¾ãï¼ãã®éçAPIã«ããï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ 478 ã¿ãã¯é åã®ãµã¤ãºã®ã¿ãæå®ãããã¨ãã§ããï¼ 479 480 DEF_ICS éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®å®ç¾© 481 482 âJSPã«ã¼ãã«ã«ãããå®è£ 483 å®ç¾©ï¼å®è£ 484 ä¾åè¦å®ããã®å¤æ´ 485 486 μITRON4.0ä»æ§ã§å®è£ 487 å®ç¾©ã¾ãã¯å®è£ 488 ä¾åã¨ããã¦ããä»æ§ã®ä¸ã§ï¼ä»¥ä¸ã®ã 489 ã®ã«ã¤ãã¦JSPã«ã¼ãã«ããå¤æ´ããï¼ 490 491 (1) ã¢ããªã±ã¼ã·ã§ã³åãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã®æ§æã®æ´ç 492 493 ã«ã¼ãã«ãå¼ã³åºãã¢ããªã±ã¼ã·ã§ã³ããã¯kernel.hãï¼SILãå¼ã³åºãã¢ã㪠494 ã±ã¼ã·ã§ã³ããã¯sil.hãã¤ã³ã¯ã«ã¼ãããã°ãããã®ã¨ãï¼t_services.h㨠495 s_services.hã¯å»æ¢ããï¼ 496 497 ã¾ãï¼kernel.hã¨sil.hã®å 498 ±éé¨åã¨ãã¦t_stddef.hãç¨æãï¼ã«ã¼ãã«ã¨SIL 499 ã®ããããå¼ã³åºããªãã¢ããªã±ã¼ã·ã§ã³ããã¯ï¼t_stddef.hãã¤ã³ã¯ã«ã¼ã 500 ããã°ãããã®ã¨ããï¼itron.hã¯ï¼Î¼ITRON4.0ä»æ§ã¨ã®äºææ§ãå¿ 501 è¦ãªå ´åã« 502 ã¤ã³ã¯ã«ã¼ããããã®ã¨ããï¼ 503 504 (2) å²è¾¼ã¿å¦çï¼ä¾å¤å¦çé¢é£ã®åã®å®ç¾©ã®å¤æ´ 505 506 å²è¾¼ã¿ãã³ãã©çªå·ã®åï¼INHNOï¼ï¼å²è¾¼ã¿çªå·ã®åï¼INTNOï¼ï¼CPUä¾å¤ãã³ã 507 ã©çªå·ã®åï¼EXCNOï¼ãï¼ã¿ã¼ã²ããéä¾åé¨ã§ï¼ããããuint_tåã«å®ç¾©ããï¼ 508 509 (3) å¦çåä½ã®å®è¡éå§ï¼ãªã¿ã¼ã³æã®ã·ã¹ãã ç¶æ 510 ã®è¦å® 511 512 å¦çåä½ã®å®è¡éå§ï¼ãªã¿ã¼ã³æã®ã·ã¹ãã ç¶æ 513 ã«ã¤ãã¦ï¼Î¼ITRON4.0ä»æ§ã« 514 ããã¦å®è£ 515 ä¾åã§ãã£ãç¹ãå³å¯ã«è¦å®ãï¼ã¿ã¼ã²ããã«ããéããçããªã 516 ããã«ããï¼ 517 518 (4) isig_timã®æ±ãã®å¤æ´ 519 520 ã·ã¹ãã æå»ãæ´æ°ããæ©æ§ãã«ã¼ãã«å 521 é¨ã«æã¤æ±ãã¨ãï¼ãµã¼ãã¹ã³ã¼ã« 522 ã¨ãã¦ã®isig_timã¯å»æ¢ããï¼ 523 524 (5) ã«ã¼ãã«ã®ç¨ããé åã®æå®æ¹æ³ 525 526 JSPã«ã¼ãã«ã§ã¯ï¼ã«ã¼ãã«ã®ç¨ããé åã¯ãã¹ã¦èªåå²ä»ãã§ãã£ããï¼ASP 527 ã«ã¼ãã«ã§ã¯ï¼ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã¨åºå®é·ã¡ã¢ãªãã¼ã«ã®åºå®é·ã¡ã¢ãªãã¼ 528 ã«é åã«ã¤ãã¦ã¯ï¼éçAPIã§å 529 é çªå°ãæå®ãããã¨ãã§ãããã®ã¨ããï¼èª 530 åå²ä»ãããµãã¼ãããï¼ï¼ 531 532 (6) ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®æ±ãã®è¦å® 533 534 JSPã«ã¼ãã«ã§ã¯ã¿ã¼ã²ããæ¯ã«å®ãã¦ããã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®æ±ããï¼ 535 ASPã«ã¼ãã«ã§ã¯ï¼TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã®è¦å®ã«æºæ ãã¦ï¼å¯è½ãªç¯ 536 å²ã§æ¨æºåããï¼ãã ãï¼NMI以å¤ã«ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãè¨ããããï¼ã© 537 ã®å²è¾¼ã¿åªå 538 度ããé«ããã®ãã«ã¼ãã«ç®¡çå¤ã¨ãããã¯ï¼ã¿ã¼ã²ããæ¯ã«å® 539 ããï¼ 540 541 âã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³å¦çã®è¦ç´ã 542 543 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³å¦çãå 544 ¨é¢çã«è¦ç´ãï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ 545 ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã«ãããCè¨èªã®ããªããã»ããµãã£ã¬ã¯ãã£ãã®æ±ã㨠546 éçAPIã®ãã©ã¡ã¼ã¿ã®åé¡ãå¤æ´ããï¼ 547 548 âæ¡å¼µããã±ã¼ã¸ã®ãµãã¼ã 549 550 ASPã«ã¼ãã«ã§ã¯ï¼ããã¤ãã®æ¡å¼µæ©è½ãå®è£ 551 ããããã«ï¼æ¬¡ã®æ¡å¼µããã±ã¼ã¸ 552 ããµãã¼ããã¦ããï¼ 553 554 ã»ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ï¼åªå 555 度ç¶æ¿ãã¥ã¼ããã¯ã¹ãé¤ãï¼ 556 ã»ã¡ãã»ã¼ã¸ãããã¡æ©è½æ¡å¼µããã±ã¼ã¸ 557 ã»ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ 558 ã»ã¿ã¹ã¯åªå 559 度æ¡å¼µããã±ã¼ã¸ 560 ã»å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ 561 ã»åççææ©è½æ¡å¼µããã±ã¼ã¸ 562 563 âTOPPERSçµè¾¼ã¿ã³ã³ãã¼ãã³ãã·ã¹ãã ï¼TECSï¼ã®å°å 564 ¥ 565 566 ããã¤ã¹ãã©ã¤ããã·ã¹ãã ãã°æ©è½ã¨ã®æ¥ç¶ã«TOPPERSçµè¾¼ã¿ã³ã³ãã¼ãã³ã 567 ã·ã¹ãã ï¼TECSï¼ãå°å 568 ¥ããï¼ã¾ãï¼ã«ã¼ãã«ãªãã¸ã§ã¯ããTECSã®ã³ã³ãã¼ 569 ãã³ãã¨ãã¦æ±ããããã«ããï¼ 570 571 ãªãï¼TECSã«å¯¾å¿ããããã®ä¿®æ£ã¯ï¼TECSã®é 572 å¸ããã±ã¼ã¸ã«å«ã¾ãã¦ããï¼ 573 ASPã«ã¼ãã«ã®é 574 å¸ããã±ã¼ã¸ã«ã¯å«ã¾ãã¦ããªãï¼ 575 576 ä»¥ä¸ 51 ○前提となる文書 52 53 [1] トロン協会: μITRON4.0仕様, Ver.4.02.00, 2004年. 54 55 [2] トロン協会: μITRON4.0仕様 保護機能拡張(μITRON4.0/PX仕様), 56 Ver.1.00.00, 2002年. 57 58 [3] TOPPERSプロジェクト: TOPPERS/JSPカーネル ユーザズマニュアル 59 Release 1.4.3対応, 最終更新: 2007年4月23日. 60 61 ○仕様の概略 62 63 TOPPERS/ASPカーネルの仕様は,μITRON4.0仕様のスタンダードプロファイルを 64 ベースに,次のような拡張・改良を加えたものである. 65 66 ・割込み処理機能については,TOPPERS標準割込み処理モデルに準拠させる. 67 ・μITRON4.0仕様のスタンダードプロファイル外の機能の一部を導入する. 68 ・一部の仕様について,μITRON4.0仕様に対して変更を加える. 69 ・JSPカーネルにおける独自の拡張機能を一部変更して実装する. 70 ・ASPカーネルにおける独自の拡張機能を新たに実装する. 71 ・システムコンフィギュレーション処理を全面的に見直す. 72 ・拡張機能を実装するための拡張パッケージをサポートする. 73 ・TOPPERS組込みコンポーネントシステム(TECS)を導入する. 74 75 そのためASPカーネルは,μITRON4.0仕様に完全に準拠しているわけではなく, 76 JSPカーネルの上位互換にもなっていない. 77 78 μITRON4.0仕様では,実装独自に用意する静的APIおよびサービスコールの名称 79 には,先頭にそれぞれ"V"および"v"の文字を付加するものとしているが,ASPカー 80 ネルではこの規定は採用しない. 81 82 以下では,μITRON4.0仕様のスタンダードプロファイルに対する拡張および変 83 更箇所について説明する. 84 85 ○スタンダードプロファイル外の機能の一部導入 86 87 μITRON4.0仕様には規定されているが,スタンダードプロファイルに含まれな 88 い(または,含まれるとは限らない)機能として,次の機能を実装する. 89 90 (1) イベントフラグの複数タスク待ち 91 92 イベントフラグに対する複数タスク待ちの機能(TA_WMUL属性のイベントフラグ) 93 を実装する. 94 95 これにより,イベントフラグのセット(set_flg,iset_flg)で複数のタスクが 96 起床される可能性が生じる.多くのタスクを同時に待ち解除した場合,カーネ 97 ル内での割込み禁止時間が長くなるため,使用にあたっては注意が必要である. 98 99 (2) アラームハンドラ 100 101 アラームハンドラの機能を実装する.アラームハンドラ機能のために実装する 102 静的APIおよびサービスコールは次の通りである. 103 104 CRE_ALM アラームハンドラの生成(静的API) 105 sta_alm アラームハンドラの動作開始 106 ista_alm アラームハンドラの動作開始(非タスクコンテキスト用) 107 stp_alm アラームハンドラの動作停止 108 istp_alm アラームハンドラの動作停止(非タスクコンテキスト用) 109 110 (3) 割込みサービスルーチン 111 112 スタンダードプロファイルでは,割込みハンドラと割込みサービスルーチンの 113 いずれかをサポートすればよいことになっている.JSPカーネルでは割込みハン 114 ドラのみを実装しているが,ASPカーネルではその両者を実装する. 115 116 割込みサービスルーチンの仕様については,TOPPERS標準割込み処理モデルの規 117 定に準拠する.割込みサービスルーチンを追加するサービスコールとして,次 118 の静的APIを実装する.この静的APIの仕様については,TOPPERS標準割込み処理 119 モデルにおいて,μITRON4.0仕様に対して拡張を加えている. 120 121 ATT_ISR 割込みサービスルーチンの追加(静的API) 122 123 (4) 割込み管理機能 124 125 スタンダードプロファイルに含まれない割込み管理機能として,次のサービス 126 コールを実装する.JSPカーネルでは,これらのサービスコールを実装するかど 127 うかはターゲット依存となっているが,ASPカーネルでは,TOPPERS標準割込み 128 処理モデルの規定に準拠して,ターゲット非依存に実装する. 129 130 dis_int 割込みの禁止 131 ena_int 割込みの許可 132 chg_ipm 割込み優先度マスクの変更 133 get_ipm 割込み優先度マスクの参照 134 135 (5) オブジェクトの状態参照機能 136 137 主にデバッグ時向けの機能として,オブジェクトの状態参照機能を実装する. 138 具体的には,次のサービスコールを実装する. 139 140 ref_tsk タスクの状態参照 141 ref_tex タスク例外処理の状態参照 142 ref_sem セマフォの状態参照 143 ref_flg イベントフラグの状態参照 144 ref_dtq データキューの状態参照 145 ref_mbx メールボックスの状態参照 146 ref_mpf 固定長メモリプールの状態参照 147 ref_cyc 周期ハンドラの状態参照 148 ref_alm アラームハンドラの状態参照 149 150 ○μITRON4.0仕様に対する変更 151 152 (1) ITRON標準データ型の見直し 153 154 サイズの決まった整数型(B,H, Wなど)などについて,C99に準拠した型の名 155 称(int8_t,int16_t,int32_tなど)やそれと相性が良い名称に変更する. 156 ITRON標準データ型(B,H, Wなど)を必要とするアプリケーションのために, 157 itron.hを用意する. 158 159 (2) 非タスクコンテキストからのext_tsk 160 161 非タスクコンテキストからext_tskが呼ばれた場合,E_CTXエラーを返すものと 162 する.これにともなって,ext_tskをリターンする可能性があるものとし,返り 163 値の型をERとする. 164 165 (3) CPU例外ハンドラで行える操作 166 167 CPU例外ハンドラで行える操作については,TOPPERS標準割込み処理モデルに準 168 拠することとし,JSPカーネルの仕様を踏襲せず,μITRON4.0仕様にも従わない. 169 そのためのサービスコールとして,次のサービスコールを実装する. 170 171 xsns_dpn CPU例外発生時のディスパッチ保留状態の参照 172 xsns_xpn CPU例外発生時のタスク例外処理保留状態の参照 173 174 (4) カーネルの用いる管理領域の分離 175 176 μITRON4.0/PX仕様において導入されたμITRON4.0仕様に対する変更として,カー 177 ネルの用いる管理領域の分離に関する仕様を一部採用する. 178 179 まず,固定長メモリプールの実装において,カーネルの用いる管理領域を分離 180 することに伴い,固定長メモリプールを生成する静的API(CRE_MPF)のパラメー 181 タに,固定長メモリプール管理領域の先頭番地(mpfmb)を追加する. 182 183 また,これにあわせて,データキューを生成する静的API(CRE_DTQ)の最後の 184 パラメータの名称を,データキュー管理領域の先頭番地(dtqmb)に変更する. 185 186 なお,メールボックスは,μITRON4.0仕様との互換性のために残している機能 187 と位置付け,カーネルの用いる管理領域の分離は行わない.そのため,メール 188 ボックスを生成する静的API(CRE_MBX)に対する変更はない. 189 190 (5) 処理単位とメモリ領域のデータ型の見直し 191 192 処理単位のエントリ番地のデータ型を,パラメータが反映されないFP型ではな 193 く,処理単位毎の専用のデータ型とする.例えば,タスクのエントリ番地のデー 194 タ型をTASK型,タスク例外処理ルーチンのデータ型をTEXRTN型とする. 195 196 また,スタック領域と固定長メモリプール領域のデータ型を,それぞれSTK_T型 197 とMPF_T型とする. 198 199 (6) 値が0の定数(オブジェクト属性等)の見直し 200 201 コーディングミスを防ぐために,値が0の定数の扱いを見直す.オブジェクト属 202 性(TA_TFIFO等)については,値が0のものはデフォルト扱いして廃止し,定義 203 をitron.hに移す.値が0のサービスコールの動作モード(TWF_ANDW)やオブジェ 204 クトの状態(TTEX_ENA等)については,値を変更する. 205 206 (7) 強制待ち要求ネストの廃止 207 208 強制待ち要求をネストする機能を廃止する.言い換えると,強制待ち要求ネス 209 ト数の最大値を1に固定する.これに伴い,frsm_tskは廃止し,itron.hにおい 210 てfrsm_tskをrsm_tskにマクロ定義する.また,TMAX_SUSCNTの定義をitron.hに 211 移す. 212 213 (8) システム時刻の設定機能の廃止 214 215 set_tim(システム時刻の設定)を廃止する. 216 217 (9) 周期ハンドラの仕様変更 218 219 sta_cycを呼び出した後,最初に周期ハンドラが起動される時刻を変更する. 220 μITRON4.0仕様では,sta_cycを呼び出してから周期ハンドラの起動周期で指定 221 した相対時間後としているが,ASPカーネルでは,起動位相で指定した相対時間 222 後とする. 223 224 (10) タスク例外処理ルーチンの実行開始条件の変更 225 226 割込み優先度マスク全解除状態でない場合には,タスク例外処理ルーチンの実 227 行が開始されないという仕様に変更した. 228 229 ○JSPカーネルにおける独自の拡張機能 230 231 JSPカーネルにおける独自の拡張機能の中で,以下の機能を実装する. 232 233 (1) 性能評価用システム時刻参照機能 234 235 性能評価用システム時刻参照機能とは,ASPカーネル上で動作するタスクやASP 236 カーネル自身の性能を計測するための,システム時刻をμ秒単位で読み出す機 237 能である.この機能のためのサービスコールは次の通りである(JSPカーネルと 238 は名称を変更した). 239 240 get_utm 性能評価用システム時刻の参照 241 242 JSPカーネルからの仕様変更として,get_utmは任意のコンテキストから呼び出 243 すことができるものする.また,性能評価用システム時刻の型(SYSUTM)を, 244 ターゲット非依存部でulong_tに定義する. 245 246 (2) 終了処理ルーチン機能 247 248 ASPカーネルでは,システムの終了時に呼び出される終了処理ルーチンを登録す 249 るための機能をサポートする.この機能のための静的APIは次の通りである. 250 251 ATT_TER 終了処理ルーチンの追加(静的API) 252 253 (3) カーネル動作状態の参照 254 255 カーネル上で動作するタスクから呼び出される関数が,カーネルの初期化完了 256 前や終了処理開始後にも呼び出される可能性がある場合には,その中でカーネ 257 ルのサービスコールを呼び出せるかを判別することが必要となる.この機能の 258 ためのサービスコールは次の通りである(JSPカーネルとは名称を変更した). 259 260 sns_ker カーネル非動作状態の参照 261 262 ○ASPカーネルにおける独自の拡張機能 263 264 (1) 割込み要求ラインの属性の設定 265 266 割込み要求ラインの属性を設定する機能として,TOPPERS標準割込み処理モデル 267 で規定された次の静的APIを実装する. 268 269 CFG_INT 割込み要求ラインの属性の設定(静的API) 270 271 (2) 同期・通信オブジェクトの再初期化機能 272 273 同期・通信オブジェクトを初期状態に戻すための機能として,次のサービスコー 274 ルを実装する. 275 276 ini_sem セマフォの再初期化 277 ini_flg イベントフラグの再初期化 278 ini_dtq データキューの再初期化 279 ini_mbx メールボックスの再初期化 280 ini_mpf 固定長メモリプールの再初期化 281 282 同期・通信オブジェクトの再初期化の際に,その同期・通信オブジェクトに対 283 して待ち状態となっていたタスクはすべて待ち解除される.待ち解除されたタ 284 スクに対しては,E_DLTを返す.E_DLTは,スタンダードプロファイルでは使用 285 していないエラーコードである. 286 287 そのため,これらのサービスコールにより,複数のタスクが起床される可能性 288 が生じる.多くのタスクを同時に待ち解除した場合,カーネル内での割込み禁 289 止時間が長くなるため,使用にあたっては注意が必要である. 290 291 同期・通信オブジェクトを再初期化する際に,アプリケーション側との整合性 292 を保つのはアプリケーションの責任である.具体的には,固定長メモリプール 293 を再初期化する際には,そこから獲得済みのメモリブロックをそれ以降使わな 294 いようにしなければならない.また,メールボックスを再初期化する際には, 295 メールボックスに送信されたメッセージ領域を回収しなければならない. 296 297 (3) 優先度データキューの新設 298 299 優先度付きのデータキューの機能を新設する.優先度付きデータキュー機能の 300 ために実装する静的APIおよびサービスコールは次の通りである. 301 302 CRE_PDQ 優先度データキューの生成 303 snd_pdq 優先度データキューへの送信 304 psnd_pdq 優先度データキューへの送信(ポーリング) 305 ipsnd_pdq 優先度データキューへの送信(ポーリング,非タスクコンテキスト) 306 tsnd_pdq 優先度データキューへの送信(タイムアウトあり) 307 rcv_pdq 優先度データキューからの受信 308 prcv_pdq 優先度データキューからの受信(ポーリング) 309 trcv_pdq 優先度データキューからの受信(タイムアウトあり) 310 ini_pdq 優先度データキューの再初期化 311 ref_pdq 優先度データキューの状態参照 312 313 ここで,優先度データキューに蓄積されたデータの数が多い場合,優先度デー 314 タキューへのデータの送信を行うサービスコール(snd_pdq,psnd_pdq, 315 ipsnd_pdq,tsnd_pdq)の処理時間が長くなり,カーネル内での割込み禁止時間 316 が長くなるため,使用にあたっては注意が必要である. 317 318 (4) 自タスクの拡張情報の参照 319 320 自タスクの拡張情報を参照するためのサービスコールを新設する.ライブラリ 321 等の中で用いることを想定している. 322 323 get_inf 自タスクの拡張情報の参照 324 325 (5) カーネルの終了 326 327 致命的なエラーが起こった場合などにカーネルを終了させるためのサービスコー 328 ルを新設する.この機能は,μITRON4.0仕様の機能分類では,システム構成管 329 理機能に分類する(JSPカーネルでは,kernel_exitという名称で,実質的にこ 330 の機能を用意していた). 331 332 ext_ker カーネルの終了 333 334 ASPカーネルでは,このサービスコールからリターンすることはないが,保護機 335 能を持ったカーネルではエラーリターンする可能性があるため,返り値の型を 336 ERとする. 337 338 これに伴って,JSPカーネルのkernel_startを,sta_kerに名称変更する.ただ 339 し,sta_kerはサービスコールとは見なさないことにする. 340 341 (6) 非タスクコンテキスト用のスタック領域の設定 342 343 非タスクコンテキスト用のスタック領域の先頭番地とサイズを指定するための 344 静的APIを新設する.また,この静的APIにより,非タスクコンテキスト用のス 345 タック領域のサイズのみを指定することもできる. 346 347 DEF_ICS 非タスクコンテキスト用のスタック領域の定義 348 349 ○JSPカーネルにおける実装定義/実装依存規定からの変更 350 351 μITRON4.0仕様で実装定義または実装依存とされている仕様の中で,以下のも 352 のについてJSPカーネルから変更する. 353 354 (1) アプリケーション向けのインクルードファイルの構成の整理 355 356 カーネルを呼び出すアプリケーションからはkernel.hを,SILを呼び出すアプリ 357 ケーションからはsil.hをインクルードすればよいものとし,t_services.hと 358 s_services.hは廃止する. 359 360 また,kernel.hとsil.hの共通部分としてt_stddef.hを用意し,カーネルとSIL 361 のいずれも呼び出さないアプリケーションからは,t_stddef.hをインクルード 362 すればよいものとする.itron.hは,μITRON4.0仕様との互換性が必要な場合に 363 インクルードするものとする. 364 365 (2) 割込み処理/例外処理関連の型の定義の変更 366 367 割込みハンドラ番号の型(INHNO),割込み番号の型(INTNO),CPU例外ハンド 368 ラ番号の型(EXCNO)を,ターゲット非依存部で,いずれもuint_t型に定義する. 369 370 (3) 処理単位の実行開始/リターン時のシステム状態の規定 371 372 処理単位の実行開始/リターン時のシステム状態について,μITRON4.0仕様に 373 おいて実装依存であった点を厳密に規定し,ターゲットによる違いが生じない 374 ようにする. 375 376 (4) isig_timの扱いの変更 377 378 システム時刻を更新する機構をカーネル内部に持つ扱いとし,サービスコール 379 としてのisig_timは廃止する. 380 381 (5) カーネルの用いる領域の指定方法 382 383 JSPカーネルでは,カーネルの用いる領域はすべて自動割付けであったが,ASP 384 カーネルでは,タスクのスタック領域と固定長メモリプールの固定長メモリプー 385 ル領域については,静的APIで先頭番地を指定することもできるものとする(自 386 動割付けもサポートする). 387 388 (6) カーネル管理外の割込みの扱いの規定 389 390 JSPカーネルではターゲット毎に定めていたカーネル管理外の割込みの扱いを, 391 ASPカーネルでは,TOPPERS標準割込み処理モデルの規定に準拠して,可能な範 392 囲で標準化する.ただし,NMI以外にカーネル管理外の割込みを設けるかや,ど 393 の割込み優先度より高いものをカーネル管理外とするかは,ターゲット毎に定 394 める. 395 396 ○システムコンフィギュレーション処理の見直し 397 398 システムコンフィギュレーション処理を全面的に見直し,システムコンフィギュ 399 レーションファイル中におけるC言語のプリプロセッサディレクティブの扱いと 400 静的APIのパラメータの分類を変更した. 401 402 ○拡張パッケージのサポート 403 404 ASPカーネルでは,いくつかの拡張機能を実装するために,次の拡張パッケージ 405 をサポートしている. 406 407 ・ミューテックス機能拡張パッケージ(優先度継承ミューテックスを除く) 408 ・メッセージバッファ機能拡張パッケージ 409 ・オーバランハンドラ機能拡張パッケージ 410 ・タスク優先度拡張パッケージ 411 ・制約タスク拡張パッケージ 412 ・動的生成機能拡張パッケージ 413 414 ○TOPPERS組込みコンポーネントシステム(TECS)の導入 415 416 デバイスドライバやシステムログ機能との接続にTOPPERS組込みコンポーネント 417 システム(TECS)を導入する.また,カーネルオブジェクトをTECSのコンポー 418 ネントとして扱えるようにする. 419 420 なお,TECSに対応するための修正は,TECSの配布パッケージに含まれており, 421 ASPカーネルの配布パッケージには含まれていない. 422 423 以上 -
Property svn:mime-type
changed from
-
rubycfg_asp/trunk/asp_dcre/doc/configurator.txt
-
Property svn:mime-type
changed from
text/plain
totext/plane; charset=UTF-8
r313 r315 1 1 2 TOPPERS/ASPã«ã¼ãã« 3 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ä»æ§ 4 5 対å¿ãã¼ã¸ã§ã³: Release 1.9.3 6 æçµæ´æ°: 2013å¹´12æ31æ¥ 7 8 ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASPã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãæ¨æºçã«ç 9 æãã¹ããã¡ã¤ã«ã®å 10 容ã«ã¤ãã¦è§£èª¬ãããã®ã§ããï¼ã¿ã¼ã²ããä¾åã«çæ 11 ããå 12 容ã«ã¤ãã¦ã¯ï¼ãã®ããã¥ã¡ã³ãã®ç¯å²å¤ã§ããï¼ 2 TOPPERS/ASPカーネル 3 コンフィギュレータ仕様 4 5 対応バージョン: Release 1.9.3 6 最終更新: 2013年12月31日 7 8 このドキュメントは,TOPPERS/ASPカーネルのコンフィギュレータが標準的に生 9 成すべきファイルの内容について解説したものである.ターゲット依存に生成 10 する内容については,このドキュメントの範囲外である. 13 11 14 12 ---------------------------------------------------------------------- … … 20 18 Graduate School of Information Science, Nagoya Univ., JAPAN 21 19 22 ä¸è¨èä½æ¨©è 23 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 24 ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 25 å¤ã»åé 26 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 27 (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 28 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 29 ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 30 (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 31 ç¨ã§ããå½¢ã§åé 32 å¸ããå ´åã«ã¯ï¼åé 33 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 34 è 35 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 36 ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 37 (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 38 ç¨ã§ããªãå½¢ã§åé 39 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 40 ã¨ï¼ 41 (a) åé 42 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 43 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 44 ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 45 (b) åé 46 å¸ã®å½¢æ 47 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 48 å ±åãããã¨ï¼ 49 (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 50 害ãããï¼ä¸è¨èä½æ¨©è 51 ããã³TOPPERSããã¸ã§ã¯ããå 52 責ãããã¨ï¼ 53 ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 54 ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 55 ããã³TOPPERSããã¸ã§ã¯ãã 56 å 57 責ãããã¨ï¼ 20 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 21 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 22 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 24 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 25 スコード中に含まれていること. 26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 27 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 28 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 29 の無保証規定を掲載すること. 30 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 31 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 32 と. 33 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 34 作権表示,この利用条件および下記の無保証規定を掲載すること. 35 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 36 報告すること. 37 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 38 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 39 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 40 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 41 免責すること. 58 42 59 æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 60 ã 61 ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 62 ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 63 ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 64 ã®è²¬ä»»ãè² ããªãï¼ 43 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 44 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 45 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 46 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 47 の責任を負わない. 65 48 66 49 $Id$ 67 50 ---------------------------------------------------------------------- 68 51 69 âç®æ¬¡ 70 71 ã»çæãããã¡ã¤ã«ã®ç¨®é¡ 72 ã»éçAPIä¸è¦§ 73 ã»ã«ã¼ãã«æ§æã»åæåããããã¡ã¤ã«ï¼kernel_cfg.hï¼ 74 (1) åºå®çæé¨å 75 (2) ãªãã¸ã§ã¯ãæ°ã®å®ç¾© 76 (3) ãªãã¸ã§ã¯ãã®IDçªå·ã®å®ç¾© 77 ã»ã«ã¼ãã«æ§æã»åæåãã¡ã¤ã«ï¼kernel_cfg.cï¼ 78 (1) åºå®çæé¨å 79 (2) ã«ã¼ãã«ã®ç¨®é¡ã®ãã§ã㯠80 (3) ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼ã®å¦ç 81 (4) ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾© 82 (5) ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°ã®å®ç¾© 83 (6) åã«ã¼ãã«ãªãã¸ã§ã¯ãã«é¢ããå®ç¾© 84 (7) å²è¾¼ã¿ã«é¢ããå®ç¾© 85 (8) CPUä¾å¤ã«é¢ããå®ç¾© 86 (9) éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã«é¢ããå®ç¾© 87 (10) ã¿ã¤ã ã¤ãã³ã管çã«é¢ããå®ç¾© 88 (11) åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°ã®å®ç¾© 89 (12) åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®å®ç¾© 90 (13) çµäºå¦çã«ã¼ãã³ã®å®è¡é¢æ°ã®å®ç¾© 91 92 93 âçæãããã¡ã¤ã«ã®ç¨®é¡ 94 95 ASPã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ 96 ã«ãå¦çãã¦ï¼ã«ã¼ãã«æ§æã»åæåãã¡ã¤ã«ï¼kernel_cfg.cï¼ã¨æ§æã»åæ 97 åããããã¡ã¤ã«ï¼kernel_cfg.hï¼ãçæããï¼ã¾ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã® 98 å¦çã®éä¸ã«ï¼å¿ 99 è¦ãªä¸éãã¡ã¤ã«ãçæããï¼ 100 101 102 âéçAPIä¸è¦§ 103 104 ASPã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãå¦çããéçAPIã¯æ¬¡ã®éãï¼ 105 106 (1) ã¿ã¹ã¯ç®¡çæ©è½ 52 ○目次 53 54 ・生成するファイルの種類 55 ・静的API一覧 56 ・カーネル構成・初期化ヘッダファイル(kernel_cfg.h) 57 (1) 固定生成部分 58 (2) オブジェクト数の定義 59 (3) オブジェクトのID番号の定義 60 ・カーネル構成・初期化ファイル(kernel_cfg.c) 61 (1) 固定生成部分 62 (2) カーネルの種類のチェック 63 (3) インクルードディレクティブ(#include)の処理 64 (4) トレースログマクロのデフォルト定義 65 (5) オブジェクトのID番号を保持する変数の定義 66 (6) 各カーネルオブジェクトに関する定義 67 (7) 割込みに関する定義 68 (8) CPU例外に関する定義 69 (9) 非タスクコンテキスト用のスタック領域に関する定義 70 (10) タイムイベント管理に関する定義 71 (11) 各モジュールの初期化関数の定義 72 (12) 初期化ルーチンの実行関数の定義 73 (13) 終了処理ルーチンの実行関数の定義 74 75 76 ○生成するファイルの種類 77 78 ASPカーネルのコンフィギュレータは,システムコンフィギュレーションファイ 79 ルを処理して,カーネル構成・初期化ファイル(kernel_cfg.c)と構成・初期 80 化ヘッダファイル(kernel_cfg.h)を生成する.また,コンフィギュレータの 81 処理の途中に,必要な中間ファイルを生成する. 82 83 84 ○静的API一覧 85 86 ASPカーネルのコンフィギュレータが処理する静的APIは次の通り. 87 88 (1) タスク管理機能 107 89 CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task, 108 90 PRI itskpri, SIZE stksz, STK_T *stk }) 109 91 110 (2) ã¿ã¹ã¯ä¾å¤å¦çæ©è½92 (2) タスク例外処理機能 111 93 DEF_TEX(ID tskid, { ATR texatr, TEXRTN texrtn }) 112 94 113 (3) åæã»éä¿¡æ©è½95 (3) 同期・通信機能 114 96 CRE_SEM(ID semid, { ATR sematr, uint_t isemcnt, uint_t maxsem }) 115 97 CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn }) … … 118 100 CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, void *mprihd }) 119 101 120 â» dtqmbï¼pdqmbï¼mprihdãNULLã§ãªãå ´åã¯ãµãã¼ãããªãï¼ 121 122 (4) ã¡ã¢ãªãã¼ã«ç®¡çæ©è½102 ※ dtqmb,pdqmb,mprihdがNULLでない場合はサポートしない. 103 104 (4) メモリプール管理機能 123 105 CRE_MPF(ID mpfid, { ATR mpfatr, uint_t blkcnt, uint_t blksz, 124 106 MPF_T *mpf, void *mpfmb }) 125 107 126 â» mpfmbãNULLã§ãªãå ´åã¯ãµãã¼ãããªãï¼ 127 128 (5) æé管çæ©è½108 ※ mpfmbがNULLでない場合はサポートしない. 109 110 (5) 時間管理機能 129 111 CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr, 130 112 RELTIM cyctim, RELTIM cycphs }) 131 113 CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr }) 132 114 133 (6) å²è¾¼ã¿ç®¡çæ©è½115 (6) 割込み管理機能 134 116 CFG_INT(INTNO intno, { ATR intatr, PRI intpri }) 135 117 ATT_ISR({ ATR isratr, intptr_t exinf, INTNO intno, ISR isr, PRI isrpri }) 136 118 DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr }) 137 119 138 (7) CPU ä¾å¤ç®¡çæ©è½120 (7) CPU例外管理機能 139 121 DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr }) 140 122 141 (8) ã·ã¹ãã æ§æ管çæ©è½123 (8) システム構成管理機能 142 124 DEF_ICS({ SIZE istksz, STK_T *istk }) 143 125 ATT_INI({ ATR iniatr, intptr_t exinf, INIRTN inirtn }) 144 126 ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn }) 145 127 146 ãããã®éçAPIã®ãã©ã¡ã¼ã¿ã®å 147 ï¼IDåã®ãã©ã¡ã¼ã¿ã¯ãªãã¸ã§ã¯ãèå¥åï¼ 148 ãã¤ã³ã¿åï¼void *ï¼TASKï¼TEXRTNï¼CYCHDRï¼ALMHDRï¼ISRï¼INTHDRï¼EXCHDRï¼ 149 INIRTNï¼TERRTNï¼STK_T *ï¼MPF_T *ï¼ããã³intptr_tåã®ãã©ã¡ã¼ã¿ã¯ä¸è¬å® 150 æ°å¼ãã©ã¡ã¼ã¿ã¨ããï¼ãã®ä»ã®ãã©ã¡ã¼ã¿ã¯ï¼æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿ã¨ããï¼ 151 152 153 âã«ã¼ãã«æ§æã»åæåããããã¡ã¤ã«ï¼kernel_cfg.hï¼ 154 155 ã«ã¼ãã«æ§æã»åæåããããã¡ã¤ã«ï¼kernel_cfg.hï¼ã«ã¯ï¼æ¬¡ã®å®ç¾©ãçæ 156 ããï¼ 157 158 (1) åºå®çæé¨å 159 160 kernel_cfg.hãè¤æ°åã¤ã³ã¯ã«ã¼ããããã®ãé²ãããã®è¨è¿°ãçæããï¼å 161 · 162 ä½çã«ã¯ï¼ãã¡ã¤ã«ã®å 163 é ã«æ¬¡ã®è¡ãçæããï¼ 128 これらの静的APIのパラメータの内,ID型のパラメータはオブジェクト識別名, 129 ポインタ型(void *,TASK,TEXRTN,CYCHDR,ALMHDR,ISR,INTHDR,EXCHDR, 130 INIRTN,TERRTN,STK_T *,MPF_T *)およびintptr_t型のパラメータは一般定 131 数式パラメータとする.その他のパラメータは,整数定数式パラメータとする. 132 133 134 ○カーネル構成・初期化ヘッダファイル(kernel_cfg.h) 135 136 カーネル構成・初期化ヘッダファイル(kernel_cfg.h)には,次の定義を生成 137 する. 138 139 (1) 固定生成部分 140 141 kernel_cfg.hが複数回インクルードされるのを防ぐための記述を生成する.具 142 体的には,ファイルの先頭に次の行を生成する. 164 143 165 144 #ifndef TOPPERS_KERNEL_CFG_H 166 145 #define TOPPERS_KERNEL_CFG_H 167 146 168 ã¾ãï¼ãã¡ã¤ã«ã®æ«å°¾ã«æ¬¡ã®è¡ãçæããï¼ 147 また,ファイルの末尾に次の行を生成する. 169 148 170 149 #endif /* TOPPERS_KERNEL_CFG_H */ 171 150 172 (2) ãªãã¸ã§ã¯ãæ°ã®å®ç¾© 173 174 ã«ã¼ãã«ããµãã¼ããããªãã¸ã§ã¯ãã®æ°ããã¯ãå®ç¾©ããããªããã»ããµã㣠175 ã¬ã¯ãã£ãï¼#defineï¼ãçæããï¼å 176 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¨è¿°ãçæããï¼ 177 178 #define TNUM_TSKID <ã¿ã¹ã¯ã®æ°> 179 #define TNUM_SEMID <ã»ããã©ã®æ°> 180 #define TNUM_FLGID <ã¤ãã³ããã©ã°ã®æ°> 181 #define TNUM_DTQID <ãã¼ã¿ãã¥ã¼ã®æ°> 182 #define TNUM_PDQID <åªå 183 度ãã¼ã¿ãã¥ã¼ã®æ°> 184 #define TNUM_MBXID <ã¡ã¼ã«ããã¯ã¹ã®æ°> 185 #define TNUM_MPFID <åºå®é·ã¡ã¢ãªãã¼ã«ã®æ°> 186 #define TNUM_CYCID <å¨æãã³ãã©ã®æ°> 187 #define TNUM_ALMID <ã¢ã©ã¼ã ãã³ãã©ã®æ°> 188 189 (3) ãªãã¸ã§ã¯ãã®IDçªå·ã®å®ç¾© 190 191 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãIDçªå·ãå²ãä»ãããªãã¸ã§ã¯ãã®ååãï¼å²ãä»ãã 192 IDçªå·ã«ãã¯ãå®ç¾©ããããªããã»ããµãã£ã¬ã¯ãã£ãï¼#defineï¼ãçæããï¼ 193 ä¾ãã°ï¼æ¬¡ã®ãããªè¨è¿°ãçæããï¼ 151 (2) オブジェクト数の定義 152 153 カーネルがサポートするオブジェクトの数をマクロ定義するプリプロセッサディ 154 レクティブ(#define)を生成する.具体的には,次のような記述を生成する. 155 156 #define TNUM_TSKID <タスクの数> 157 #define TNUM_SEMID <セマフォの数> 158 #define TNUM_FLGID <イベントフラグの数> 159 #define TNUM_DTQID <データキューの数> 160 #define TNUM_PDQID <優先度データキューの数> 161 #define TNUM_MBXID <メールボックスの数> 162 #define TNUM_MPFID <固定長メモリプールの数> 163 #define TNUM_CYCID <周期ハンドラの数> 164 #define TNUM_ALMID <アラームハンドラの数> 165 166 (3) オブジェクトのID番号の定義 167 168 コンフィギュレータがID番号を割り付けたオブジェクトの名前を,割り付けた 169 ID番号にマクロ定義するプリプロセッサディレクティブ(#define)を生成する. 170 例えば,次のような記述を生成する. 194 171 195 172 #define TASK1 1 … … 198 175 199 176 200 âã«ã¼ãã«æ§æã»åæåãã¡ã¤ã«ï¼kernel_cfg.cï¼ 201 202 (1) åºå®çæé¨å 203 204 kernel_cfg.cç¨ã®ããããã¡ã¤ã«ã¨IDèªåå²ä»ãçµæãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ã 205 ããããªããã»ããµãã£ã¬ã¯ãã£ãï¼#includeï¼ãçæããï¼å 206 ·ä½çã«ã¯ï¼æ¬¡ 207 ã®è¡ãçæããï¼ 177 ○カーネル構成・初期化ファイル(kernel_cfg.c) 178 179 (1) 固定生成部分 180 181 kernel_cfg.c用のヘッダファイルとID自動割付け結果ファイルをインクルード 182 するプリプロセッサディレクティブ(#include)を生成する.具体的には,次 183 の行を生成する. 208 184 209 185 #include "kernel/kernel_int.h" 210 186 #include "kernel_cfg.h" 211 187 212 (2) ã«ã¼ãã«ã®ç¨®é¡ã®ãã§ãã¯213 214 kernel_cfg.c ã¨ã«ã¼ãã«ã®ç¨®é¡ãä¸è´ãã¦ãããããã§ãã¯ããããã«ï¼æ¬¡ã®215 è¡ãçæããï¼ 188 (2) カーネルの種類のチェック 189 190 kernel_cfg.cとカーネルの種類が一致しているかをチェックするために,次の 191 行を生成する. 216 192 217 193 #if TKERNEL_PRID != 0x07u … … 219 195 #endif 220 196 221 (3) ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼ã®å¦ç222 223 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«å«ã¾ããCè¨èªããªããã»ããµã®ã¤ 224 ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼ã¨åä¸ã®ãã£ã¬ã¯ãã£ãï¼#includeï¼ 225 ãçæããï¼ä¾ãã°ï¼ 197 (3) インクルードディレクティブ(#include)の処理 198 199 システムコンフィギュレーションファイルに含まれるC言語プリプロセッサのイ 200 ンクルードディレクティブ(#include)と同一のディレクティブ(#include) 201 を生成する.例えば, 226 202 227 203 #include "sample1.h" 228 204 229 ã¨ããã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãã«å¯¾ãã¦ï¼ 205 というインクルードディレクティブに対して, 230 206 231 207 #include "sample1.h" 232 208 233 ã¨ãããã£ã¬ã¯ãã£ããçæããï¼çæãããã£ã¬ã¯ãã£ãã®é åºã¯ï¼ã·ã¹ã 234 ã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã§ã®ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãã®é åº 235 ã«ä¸è´ãããï¼ 236 237 (4) ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾© 238 239 kernel_cfg.cã®ä¸ã§ä½¿ç¨ãããã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©ãçæããï¼ 240 å 241 ·ä½çã«ã¯ï¼æ¬¡ã®è¡ãçæããï¼ 209 というディレクティブを生成する.生成するディレクティブの順序は,システ 210 ムコンフィギュレーションファイル中でのインクルードディレクティブの順序 211 に一致させる. 212 213 (4) トレースログマクロのデフォルト定義 214 215 kernel_cfg.cの中で使用するトレースログマクロのデフォルト定義を生成する. 216 具体的には,次の行を生成する. 242 217 243 218 #ifndef LOG_ISR_ENTER … … 249 224 #endif /* LOG_ISR_LEAVE */ 250 225 251 (5) ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°ã®å®ç¾©252 253 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾ãããªãã·ã§ã³æå®ï¼--external-idï¼ã«ããï¼ã³ã³ã㣠254 ã®ã¥ã¬ã¼ã¿ãID çªå·ãå²ãä»ãããªãã¸ã§ã¯ãã®ååã®æ«å°¾ã«"_id"ãä»å ã 255 ãååã®å¤æ°ãçæããï¼å¤æ°ã¯ï¼constå±æ§ãä»å ããIDåã®å¤æ°ã¨ãï¼å²ã 256 ä»ããIDçªå·ãå¤ã¨ããï¼ä¾ãã°ï¼æ¬¡ã®ãããªè¨è¿°ãçæããï¼ 226 (5) オブジェクトのID番号を保持する変数の定義 227 228 コンフィギュレータに対するオプション指定(--external-id)により,コンフィ 229 ギュレータがID 番号を割り付けたオブジェクトの名前の末尾に"_id"を付加し 230 た名前の変数を生成する.変数は,const属性を付加したID型の変数とし,割り 231 付けたID番号を値とする.例えば,次のような記述を生成する. 257 232 258 233 const ID TASK1_id = 1; … … 260 235 const ID SEM1_id = 1; 261 236 262 (6) åã«ã¼ãã«ãªãã¸ã§ã¯ãã«é¢ããå®ç¾© 263 264 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã«ï¼ãªãã¸ã§ã¯ããçæããéç 265 APIãCRE_XXXããå«ã¾ããåã«ã¼ãã«ãªãã¸ã§ã¯ãã«é¢ãã¦ï¼ãªãã¸ã§ã¯ãç 266 æã®ããã®å®ç¾©ãçæããï¼ 267 268 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¯ï¼åã種é¡ã®ãªãã¸ã§ã¯ããçæããéçAPIãéãï¼å 269 ãªãã¸ã§ã¯ãã«IDçªå·ãå²ãä»ããï¼IDçªå·ã¯ï¼ä»ã®ãªãã¸ã§ã¯ãã®IDçªå·ã¨ 270 éè¤ããªãï¼IDçªå·ãé£ç¶ããããã«å²ãä»ããï¼ 271 272 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾ãããªãã·ã§ã³æå®ï¼--id-input-fileï¼ã«ããï¼ã³ã³ 273 ãã£ã®ã¥ã¬ã¼ã¿ããªãã¸ã§ã¯ãã«å²ãä»ããIDçªå·ãæå®ãããã¨ãã§ããï¼ 274 åã種é¡ã®ç°ãªããªãã¸ã§ã¯ãã«å¯¾ãã¦åãIDçªå·ãæå®ãããï¼ã³ã³ãã£ã®ã¥ 275 ã¬ã¼ã¿ãIDçªå·ãã§ããéãé£ç¶ããããã«å²ãä»ããã¨ãã¦ãIDçªå·ãé£ç¶ 276 ããªãå ´åã«ã¯ï¼ASPã«ã¼ãã«ã¯ï¼ãªãã¸ã§ã¯ãã®IDçªå·ãé£ç¶ãã¦ãããã¨ã 277 ä»®å®ãã¦å®è£ 278 ãã¦ããï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¯ã¨ã©ã¼ãå ±åããï¼ 279 280 ã¾ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾ãããªãã·ã§ã³æå®ï¼--id-output-fileï¼ã«ã 281 ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãIDçªå·ãå²ãä»ãããªãã¸ã§ã¯ãã®ååã¨å²ãä»ã 282 ãIDçªå·ã®çµãï¼ãªãã·ã§ã³ã§æå®ãããã¡ã¤ã«ã«åºåããï¼ 283 284 åã«ã¼ãã«ãªãã¸ã§ã¯ãã«é¢ããå®ç¾©ã®æ¨æºçãªæ§æã¯ï¼æ¬¡ã®éãã§ããï¼ãª 285 ãã¸ã§ã¯ãã«ãã£ã¦ä¾å¤ãããå ´åã«ã¯ï¼ãªãã¸ã§ã¯ãæ¯ã®é 286 ã§èª¬æããï¼ 287 288 (a) æ大ã®ãªãã¸ã§ã¯ãIDã®å¤æ°ã®å®ç¾© 289 290 æ大ã®ãªãã¸ã§ã¯ãIDãæã¤å¤æ°ã®å®ç¾©ãçæããï¼å 291 ·ä½çã«ã¯ï¼ãªãã¸ã§ã¯ 292 ãã®çç¥è¨å·ããXXXï¼xxxãã¨ããã¨ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 237 (6) 各カーネルオブジェクトに関する定義 238 239 システムコンフィギュレーションファイル中に,オブジェクトを生成する静的 240 API「CRE_XXX」が含まれる各カーネルオブジェクトに関して,オブジェクト生 241 成のための定義を生成する. 242 243 コンフィギュレータは,同じ種類のオブジェクトを生成する静的APIを集め,各 244 オブジェクトにID番号を割り付ける.ID番号は,他のオブジェクトのID番号と 245 重複がなく,ID番号が連続するように割り付ける. 246 247 コンフィギュレータに対するオプション指定(--id-input-file)により,コン 248 フィギュレータがオブジェクトに割り付けるID番号を指定することができる. 249 同じ種類の異なるオブジェクトに対して同じID番号を指定したり,コンフィギュ 250 レータがID番号をできる限り連続するように割り付けたとしてもID番号が連続 251 しない場合には(ASPカーネルは,オブジェクトのID番号が連続していることを 252 仮定して実装してある),コンフィギュレータはエラーを報告する. 253 254 また,コンフィギュレータに対するオプション指定(--id-output-file)によ 255 り,コンフィギュレータがID番号を割り付けたオブジェクトの名前と割り付け 256 たID番号の組を,オプションで指定したファイルに出力する. 257 258 各カーネルオブジェクトに関する定義の標準的な構成は,次の通りである.オ 259 ブジェクトによって例外がある場合には,オブジェクト毎の項で説明する. 260 261 (a) 最大のオブジェクトIDの変数の定義 262 263 最大のオブジェクトIDを持つ変数の定義を生成する.具体的には,オブジェク 264 トの省略記号を「XXX/xxx」とすると,次のような行を生成する. 293 265 294 266 const ID _kernel_tmax_xxxid = (TMIN_XXXID + TNUM_XXXID - 1); 295 267 296 (b) ãªãã¸ã§ã¯ãã«å¿ 297 è¦ãªã¡ã¢ãªé åã®å®ç¾© 298 299 ãªãã¸ã§ã¯ãã«ãã£ã¦ã¯ï¼ãªãã¸ã§ã¯ãã«å¿ 300 è¦ãªã¡ã¢ãªé åã®å®ç¾©ãçæããï¼ 301 å 302 ·ä½çã«ã¯ï¼ãªãã¸ã§ã¯ãæ¯ã®é 303 ã§èª¬æããï¼ 304 305 (c) ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å®ç¾© 306 307 ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å®ç¾©ãçæããï¼å 308 ·ä½çã«ã¯ï¼ãªãã¸ã§ã¯ã 309 ã®çç¥è¨å·ããXXXï¼xxxãã¨ããã¨ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 268 (b) オブジェクトに必要なメモリ領域の定義 269 270 オブジェクトによっては,オブジェクトに必要なメモリ領域の定義を生成する. 271 具体的には,オブジェクト毎の項で説明する. 272 273 (c) オブジェクトの初期化ブロックの定義 274 275 オブジェクトの初期化ブロックの定義を生成する.具体的には,オブジェクト 276 の省略記号を「XXX/xxx」とすると,次のような行を生成する. 310 277 311 278 const XXXINIB _kernel_xxxinib_table[TNUM_XXXID] = { 312 <ãªãã¸ã§ã¯ãIDã1ã®ãªãã¸ã§ã¯ãã®åæåæ 313 å ±>, 314 <ãªãã¸ã§ã¯ãIDã2ã®ãªãã¸ã§ã¯ãã®åæåæ 315 å ±>, 316 â¦â¦ 317 <ãªãã¸ã§ã¯ãIDãTNUM_XXXIDã®ãªãã¸ã§ã¯ãã®åæåæ 318 å ±> 279 <オブジェクトIDが1のオブジェクトの初期化情報>, 280 <オブジェクトIDが2のオブジェクトの初期化情報>, 281 …… 282 <オブジェクトIDがTNUM_XXXIDのオブジェクトの初期化情報> 319 283 }; 320 284 321 ãªãã¸ã§ã¯ãã®åæåæ 322 å ±ã®å½¢å¼ã¯ï¼ãªãã¸ã§ã¯ãæ¯ã«ç°ãªãï¼å 323 ·ä½çã«ã¯ï¼ 324 ãªãã¸ã§ã¯ãæ¯ã®é 325 ã§èª¬æããï¼ 326 327 (d) ãªãã¸ã§ã¯ãã®ã³ã³ããã¼ã«ãããã¯ã®å®ç¾© 328 329 ãªãã¸ã§ã¯ãã®ã³ã³ããã¼ã«ãããã¯ã®å®ç¾©ãçæããï¼å 330 ·ä½çã«ã¯ï¼ãªãã¸ã§ 331 ã¯ãã®çç¥è¨å·ããXXXï¼xxxãã¨ããã¨ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 285 オブジェクトの初期化情報の形式は,オブジェクト毎に異なる.具体的には, 286 オブジェクト毎の項で説明する. 287 288 (d) オブジェクトのコントロールブロックの定義 289 290 オブジェクトのコントロールブロックの定義を生成する.具体的には,オブジェ 291 クトの省略記号を「XXX/xxx」とすると,次のような行を生成する. 332 292 333 293 XXXCB _kernel_xxxcb_table[TNUM_XXXID]; 334 294 335 (6-1) ã¿ã¹ã¯ã«é¢ããå®ç¾© 336 337 ASPã«ã¼ãã«ã¯ï¼ã¿ã¹ã¯ãä¸ã¤ããªãã±ã¼ã¹ã«å¯¾å¿ãã¦ããªãããï¼ã¿ã¹ã¯ã«é¢ 338 ããå®ç¾©ã¯å¿ 339 ãçæããªããã°ãªããªãï¼ 340 341 ã¿ã¹ã¯ã®çç¥è¨å·ã¯ãTSKããtskãã§ããï¼ãã ãï¼ã¿ã¹ã¯åæåãããã¯ã® 342 ãã¼ã¿åã¯TINIBï¼ãã®å¤æ°åã¯_kernel_tinib_tableï¼ã¿ã¹ã¯ã³ã³ããã¼ã«ã 343 ããã¯ã®ãã¼ã¿åã¯TCBï¼ãã®å¤æ°åã¯_kernel_tcb_table ã§ããï¼ãããã 344 ãTSKï¼tskãã«ä»£ãã¦ãTï¼tããç¨ãã¦ããï¼ï¼ 345 346 ã¿ã¹ã¯åæåãããã¯ã«ã¯ï¼ãCRE_TSKãéçAPIã§æå®ãããæ 347 å ±ã«å ãã¦ï¼ 348 ãDEF_TEXãéçAPIã§æå®ãããæ 349 å ±ãå«ããï¼ 350 351 以ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ã 352 ã¦ããæã«çæãã¹ãæ 353 å ±ã«ã¤ãã¦è¿°ã¹ãï¼ 295 (6-1) タスクに関する定義 296 297 ASPカーネルは,タスクが一つもないケースに対応していないため,タスクに関 298 する定義は必ず生成しなければならない. 299 300 タスクの省略記号は「TSK」「tsk」である.ただし,タスク初期化ブロックの 301 データ型はTINIB,その変数名は_kernel_tinib_table,タスクコントロールブ 302 ロックのデータ型はTCB,その変数名は_kernel_tcb_table である(いずれも 303 「TSK/tsk」に代えて「T/t」を用いている). 304 305 タスク初期化ブロックには,「CRE_TSK」静的APIで指定される情報に加えて, 306 「DEF_TEX」静的APIで指定される情報を含める. 307 308 以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ 309 ている時に生成すべき情報について述べる. 354 310 355 311 CRE_TSK(tskid, { tskatr, exinf, task, itskpri, stksz, stk }); 356 312 DEF_TEX(tskid, { texatr, texrtn }); 357 313 358 (6-1-1) ã¿ã¹ã¯ã«å¿ 359 è¦ãªã¡ã¢ãªé åã®å®ç¾© 360 361 ã¿ã¹ã¯ã«å¿ 362 è¦ãªã¡ã¢ãªé åã¨ãã¦ï¼ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åãããï¼stkãNULLã® 363 å ´åã«ã¯ï¼çæããã¿ã¹ã¯æ¯ã«ï¼æå®ããããµã¤ãºã®ã¹ã¿ãã¯é åã確ä¿ããï¼ 364 å 365 ·ä½çã«ã¯ï¼ä¸è¨ã®éçAPIã«å¯¾ãã¦ï¼æ¬¡ã®å®ç¾©ãçæããï¼ 366 367 ï¼stkãNULLã®å ´åã®ã¿çæ 368 static STK_T _kernel_stack_<ã¿ã¹ã¯å>[COUNT_STK_T(stksz)]; 369 370 (6-1-2) ã¿ã¹ã¯ã®åæåæ 371 å ± 372 373 ã¿ã¹ã¯åæåãããã¯ä¸ã«çæããã¿ã¹ã¯ã®åæåæ 374 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 314 (6-1-1) タスクに必要なメモリ領域の定義 315 316 タスクに必要なメモリ領域として,タスクのスタック領域がある.stkがNULLの 317 場合には,生成するタスク毎に,指定されたサイズのスタック領域を確保する. 318 具体的には,上記の静的APIに対して,次の定義を生成する. 319 320 *stkがNULLの場合のみ生成 321 static STK_T _kernel_stack_<タスク名>[COUNT_STK_T(stksz)]; 322 323 (6-1-2) タスクの初期化情報 324 325 タスク初期化ブロック中に生成するタスクの初期化情報は,次の形式とする. 375 326 376 327 { (tskatr), (intptr_t)(exinf), (task), INT_PRIORITY(itskpri), 377 328 (stksz), (stk), (texatr), (texrtn) } 378 329 379 ããã§ï¼stkãNULLã®å ´åã«ã¯ï¼(stksz)ã«ä»£ãã¦ROUND_STK_T(stksz)ãï¼ 380 (stk)ã«ä»£ãã¦(_kernel_stack_<ã¿ã¹ã¯å>)ãçæããï¼CRE_TSKã«å¯¾å¿ãã 381 DEF_TEXããªãå ´åã«ã¯ï¼texatrãTA_NULLï¼texrtnãNULLã¨ããï¼ 382 383 (6-1-3) ã¿ã¹ã¯çæé åºãã¼ãã«ã®å®ç¾© 384 385 ã¿ã¹ã¯ã«å¯¾ãã¦ã¯ï¼çæãããé åºï¼ã¿ã¹ã¯ãçæããéçAPIãè¨è¿°ããã 386 é åºï¼ããã¼ãã«ã«åºåããå¿ 387 è¦ãããï¼ããã¯ï¼ã¿ã¹ã¯ã®çæãããé åºã§ï¼ 388 ã¿ã¹ã¯ã®åæåï¼ããå 389 ·ä½çã«ã¯ï¼ã¿ã¹ã¯ã®èµ·åï¼ãè¡ãå¿ 390 è¦ãããããã§ã 391 ãï¼ 392 393 å 394 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 330 ここで,stkがNULLの場合には,(stksz)に代えてROUND_STK_T(stksz)を, 331 (stk)に代えて(_kernel_stack_<タスク名>)を生成する.CRE_TSKに対応する 332 DEF_TEXがない場合には,texatrをTA_NULL,texrtnをNULLとする. 333 334 (6-1-3) タスク生成順序テーブルの定義 335 336 タスクに対しては,生成された順序(タスクを生成する静的APIが記述された 337 順序)をテーブルに出力する必要がある.これは,タスクの生成された順序で, 338 タスクの初期化(より具体的には,タスクの起動)を行う必要があるためであ 339 る. 340 341 具体的には,次のような行を生成する. 395 342 396 343 const ID _kernel_torder_table[TNUM_TSKID] = { 397 < æåã«çæãããã¿ã¹ã¯ã®ã¿ã¹ã¯ID>,398 <2 çªç®ã«çæãããã¿ã¹ã¯ã®ã¿ã¹ã¯ID>,399 â¦â¦400 < æå¾ã«çæãããã¿ã¹ã¯ã®ã¿ã¹ã¯ID>344 <最初に生成されたタスクのタスクID>, 345 <2番目に生成されたタスクのタスクID>, 346 …… 347 <最後に生成されたタスクのタスクID> 401 348 }; 402 349 403 (6-1-4) ã¨ã©ã¼æ¡ä»¶ 404 405 ã¿ã¹ã¯ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 406 407 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 408 ã»åãtskidã«å¯¾ããCRE_TSKãè¤æ°ããå ´åï¼E_OBJï¼ 409 ã»DEF_TEXã«å¯¾å¿ããCRE_TSKããªãå ´åï¼E_NOEXSï¼ 410 ã»åãtskidã«å¯¾ããDEF_TEXãè¤æ°ããå ´åï¼E_OBJï¼ 411 412 ï¼ãã¹2ã§æ¤åºãããã® 413 ã»tskatrãï¼ï¼»TA_ACTï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 414 â» ã¿ã¼ã²ããä¾åé¨ã§ã¿ã¹ã¯å±æ§ã追å å¯ï¼TARGET_TSKATRï¼ 415 ã»(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)ã§ãªãå ´åï¼E_PARï¼ 416 ã»stkszã0以ä¸ãï¼ã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_STKSZï¼ãããå°ã 417 ããå ´åï¼E_PARï¼ 418 ã»stkszãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 419 - ã¿ã¼ã²ããä¾åã®å¤ï¼CHECK_STKSZ_ALIGNï¼ã®åæ°ã§ãªãå ´å 420 â» ãã®ã¨ã©ã¼ãã§ãã¯ã¯ï¼stkãNULLã§ãªãå ´åã«ã®ã¿è¡ã 421 ã»texatrãï¼TA_NULLï¼ã§ãªãå ´åï¼E_RSATRï¼ 422 423 ï¼ãã¹3ã§æ¤åºãããã® 424 ã»taskã¨texrtnãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 425 - ã¿ã¼ã²ããä¾åã®å¤ï¼CHECK_FUNC_ALIGNï¼ã®åæ°ã§ãªãå ´å 426 - NULLã®å ´åï¼ã¿ã¼ã²ããä¾åï¼CHECK_FUNC_NONNULLï¼ 427 ã»stkãã¹ã¿ãã¯é åã®å 428 é çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 429 - ã¿ã¼ã²ããä¾åã®å¤ï¼CHECK_STACK_ALIGNï¼ã®åæ°ã§ãªãå ´å 430 - NULLã®å ´åï¼ã¿ã¼ã²ããä¾åï¼CHECK_STACK_NONNULLï¼ 431 432 (6-2) ã»ããã©ã«é¢ããå®ç¾© 433 434 ã»ããã©ã®çç¥è¨å·ã¯ãSEMï¼semãã§ããï¼ä»¥ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ 435 ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ãã¦ããæã«çæãã¹ãæ 436 å ±ã«ã¤ãã¦è¿°ã¹ 437 ãï¼ãªãï¼ã»ããã©ã«å¿ 438 è¦ãªã¡ã¢ãªé åã¯ãªãï¼ 350 (6-1-4) エラー条件 351 352 タスクに関するエラー条件は次の通りである. 353 354 *コンフィギュレータ本体が検出するもの 355 ・同じtskidに対するCRE_TSKが複数ある場合(E_OBJ) 356 ・DEF_TEXに対応するCRE_TSKがない場合(E_NOEXS) 357 ・同じtskidに対するDEF_TEXが複数ある場合(E_OBJ) 358 359 *パス2で検出するもの 360 ・tskatrが([TA_ACT])でない場合(E_RSATR) 361 ※ ターゲット依存部でタスク属性を追加可(TARGET_TSKATR) 362 ・(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)でない場合(E_PAR) 363 ・stkszが0以下か,ターゲット定義の最小値(TARGET_MIN_STKSZ)よりも小さ 364 い場合(E_PAR) 365 ・stkszがスタック領域のサイズとして正しくない場合(E_PAR) 366 - ターゲット依存の値(CHECK_STKSZ_ALIGN)の倍数でない場合 367 ※ このエラーチェックは,stkがNULLでない場合にのみ行う 368 ・texatrが(TA_NULL)でない場合(E_RSATR) 369 370 *パス3で検出するもの 371 ・taskとtexrtnがプログラムの開始番地として正しくない場合(E_PAR) 372 - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合 373 - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL) 374 ・stkがスタック領域の先頭番地として正しくない場合(E_PAR) 375 - ターゲット依存の値(CHECK_STACK_ALIGN)の倍数でない場合 376 - NULLの場合(ターゲット依存,CHECK_STACK_NONNULL) 377 378 (6-2) セマフォに関する定義 379 380 セマフォの省略記号は「SEM/sem」である.以下では,システムコンフィギュレー 381 ションファイルに次の静的APIが含まれている時に生成すべき情報について述べ 382 る.なお,セマフォに必要なメモリ領域はない. 439 383 440 384 CRE_SEM(semid, { sematr, isemcnt, maxsem }); 441 385 442 (6-2-1) ã»ããã©ã®åæåæ 443 å ± 444 445 ã»ããã©åæåãããã¯ä¸ã«çæããã»ããã©ã®åæåæ 446 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ã 447 ãï¼ 386 (6-2-1) セマフォの初期化情報 387 388 セマフォ初期化ブロック中に生成するセマフォの初期化情報は,次の形式とす 389 る. 448 390 449 391 { (sematr), (isemcnt), (maxsem) } 450 392 451 (6-2-2) ã¨ã©ã¼æ¡ä»¶ 452 453 ã»ããã©ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 454 455 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 456 ã»åãsemidã«å¯¾ããCRE_SEMãè¤æ°ããå ´åï¼E_OBJï¼ 457 458 ï¼ãã¹2ã§æ¤åºãããã® 459 ã»sematrãï¼ï¼»TA_TPRIï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 460 ã»(0 <= isemcnt && isemcnt <= maxsem)ã§ãªãå ´åï¼E_PARï¼ 461 ã»(1 <= maxsem && maxsem <= TMAX_MAXSEM)ã§ãªãå ´åï¼E_PARï¼ 462 463 (6-3) ã¤ãã³ããã©ã°ã«é¢ããå®ç¾© 464 465 ã¤ãã³ããã©ã°ã®çç¥è¨å·ã¯ãFLGï¼flgãã§ããï¼ä»¥ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ã㣠466 ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ãã¦ããæã«çæãã¹ãæ 467 å ±ã«ã¤ 468 ãã¦è¿°ã¹ãï¼ãªãï¼ã¤ãã³ããã©ã°ã«å¿ 469 è¦ãªã¡ã¢ãªé åã¯ãªãï¼ 393 (6-2-2) エラー条件 394 395 セマフォに関するエラー条件は次の通りである. 396 397 *コンフィギュレータ本体が検出するもの 398 ・同じsemidに対するCRE_SEMが複数ある場合(E_OBJ) 399 400 *パス2で検出するもの 401 ・sematrが([TA_TPRI])でない場合(E_RSATR) 402 ・(0 <= isemcnt && isemcnt <= maxsem)でない場合(E_PAR) 403 ・(1 <= maxsem && maxsem <= TMAX_MAXSEM)でない場合(E_PAR) 404 405 (6-3) イベントフラグに関する定義 406 407 イベントフラグの省略記号は「FLG/flg」である.以下では,システムコンフィ 408 ギュレーションファイルに次の静的APIが含まれている時に生成すべき情報につ 409 いて述べる.なお,イベントフラグに必要なメモリ領域はない. 470 410 471 411 CRE_FLG(flgid, { flgatr, iflgptn }); 472 412 473 (6-3-1) ã¤ãã³ããã©ã°ã®åæåæ 474 å ± 475 476 ã¤ãã³ããã©ã°åæåãããã¯ä¸ã«çæããã¤ãã³ããã©ã°ã®åæåæ 477 å ±ã¯ï¼ 478 次ã®å½¢å¼ã¨ããï¼ 413 (6-3-1) イベントフラグの初期化情報 414 415 イベントフラグ初期化ブロック中に生成するイベントフラグの初期化情報は, 416 次の形式とする. 479 417 480 418 { (flgatr), (iflgptn) } 481 419 482 (6-3-2) ã¨ã©ã¼æ¡ä»¶ 483 484 ã¤ãã³ããã©ã°ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 485 486 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 487 ã»åãflgidã«å¯¾ããCRE_FLGãè¤æ°ããå ´åï¼E_OBJï¼ 488 489 ï¼ãã¹1ã§æ¤åºãããã® 490 ã»iflgptnãFLGPTNã«æ ¼ç´ã§ããªãå ´åï¼E_PARï¼ 491 â iflgptnãuint32_tã«æ ¼ç´ã§ããªãå ´åã¯ï¼cfg1_out.cã®ã³ã³ãã¤ã«æ 492 ã«ã¨ã©ã¼ã¨ãªãï¼ 493 494 ï¼ãã¹2ã§æ¤åºãããã® 495 ã»flgatrãï¼ï¼»TA_TPRIï¼½ï½ï¼»TA_WMULï¼½ï½ï¼»TA_CLRï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 496 ã»iflgptnãFLGPTNã«æ ¼ç´ã§ããªãå ´åï¼E_PARï¼ 497 â iflgptnãuint32_tã«ã¯æ ¼ç´ã§ãããï¼FLGPTNã«æ ¼ç´ã§ããªãå ´åã¯ï¼ 498 ãã¹2ã§ã¨ã©ã¼ãæ¤åºããï¼ 499 500 (6-4) ãã¼ã¿ãã¥ã¼ã«é¢ããå®ç¾© 501 502 ãã¼ã¿ãã¥ã¼ã®çç¥è¨å·ã¯ãDTQï¼dtqãã§ããï¼ä»¥ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ 503 ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ãã¦ããæã«çæãã¹ãæ 504 å ±ã«ã¤ã㦠505 è¿°ã¹ãï¼ 420 (6-3-2) エラー条件 421 422 イベントフラグに関するエラー条件は次の通りである. 423 424 *コンフィギュレータ本体が検出するもの 425 ・同じflgidに対するCRE_FLGが複数ある場合(E_OBJ) 426 427 *パス1で検出するもの 428 ・iflgptnがFLGPTNに格納できない場合(E_PAR) 429 → iflgptnがuint32_tに格納できない場合は,cfg1_out.cのコンパイル時 430 にエラーとなる. 431 432 *パス2で検出するもの 433 ・flgatrが([TA_TPRI]|[TA_WMUL]|[TA_CLR])でない場合(E_RSATR) 434 ・iflgptnがFLGPTNに格納できない場合(E_PAR) 435 → iflgptnがuint32_tには格納できるが,FLGPTNに格納できない場合は, 436 パス2でエラーを検出する. 437 438 (6-4) データキューに関する定義 439 440 データキューの省略記号は「DTQ/dtq」である.以下では,システムコンフィギュ 441 レーションファイルに次の静的APIが含まれている時に生成すべき情報について 442 述べる. 506 443 507 444 CRE_DTQ(dtqid, { dtqatr, dtqcnt, dtqmb }); 508 445 509 (6-4-1) ãã¼ã¿ãã¥ã¼ã«å¿ 510 è¦ãªã¡ã¢ãªé åã®å®ç¾© 511 512 ãã¼ã¿ãã¥ã¼ã«å¿ 513 è¦ãªã¡ã¢ãªé åã¨ãã¦ï¼ãã¼ã¿ãã¥ã¼ç®¡çé åãããï¼çæ 514 ãããã¼ã¿ãã¥ã¼æ¯ã«ï¼å¿ 515 è¦ãªãµã¤ãºã®ãã¼ã¿ãã¥ã¼ç®¡çé åãå®ç¾©ããï¼å 516 · 517 ä½çã«ã¯ï¼ä¸è¨ã®éçAPIã«å¯¾ãã¦ï¼æ¬¡ã®å®ç¾©ãçæããï¼ 518 519 ï¼dtqcntã0ã§ãªãå ´åã®ã¿çæ 520 static DTQMB _kernel_dtqmb_<ãã¼ã¿ãã¥ã¼å>[dtqcnt]; 521 522 (6-4-2) ãã¼ã¿ãã¥ã¼ã®åæåæ 523 å ± 524 525 ãã¼ã¿ãã¥ã¼åæåãããã¯ä¸ã«çæãããã¼ã¿ãã¥ã¼ã®åæåæ 526 å ±ã¯ï¼æ¬¡ã® 527 å½¢å¼ã¨ããï¼ 528 529 { (dtqatr), (dtqcnt), (_kernel_dtqmb_<ãã¼ã¿ãã¥ã¼å>) } 530 531 ããã§ï¼dtqcntã0ã®å ´åã«ã¯ï¼_kernel_dtqmb_<ãã¼ã¿ãã¥ã¼å>ã«ä»£ãã¦ï¼ 532 NULLãç¨ããï¼ 533 534 (6-4-3) ã¨ã©ã¼æ¡ä»¶ 535 536 ãã¼ã¿ãã¥ã¼ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 537 538 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 539 ã»åãdtqidã«å¯¾ããCRE_DTQãè¤æ°ããå ´åï¼E_OBJï¼ 540 541 ï¼ãã¹2ã§æ¤åºãããã® 542 ã»dtqatrãï¼ï¼»TA_TPRIï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 543 ã»dtqcntãè² ã®å¤ã®å ´åï¼E_PARï¼ 544 ã»dtqmbãNULLã§ãªãå ´åï¼E_NOSPTï¼ 545 546 (6-5) åªå 547 度ãã¼ã¿ãã¥ã¼ã«é¢ããå®ç¾© 548 549 åªå 550 度ãã¼ã¿ãã¥ã¼ã®çç¥è¨å·ã¯ãPDQï¼pdqãã§ããï¼ä»¥ä¸ã§ã¯ï¼ã·ã¹ãã ã³ 551 ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ãã¦ããæã«çæãã¹ãæ 552 553 å ±ã«ã¤ãã¦è¿°ã¹ãï¼ 446 (6-4-1) データキューに必要なメモリ領域の定義 447 448 データキューに必要なメモリ領域として,データキュー管理領域がある.生成 449 するデータキュー毎に,必要なサイズのデータキュー管理領域を定義する.具 450 体的には,上記の静的APIに対して,次の定義を生成する. 451 452 *dtqcntが0でない場合のみ生成 453 static DTQMB _kernel_dtqmb_<データキュー名>[dtqcnt]; 454 455 (6-4-2) データキューの初期化情報 456 457 データキュー初期化ブロック中に生成するデータキューの初期化情報は,次の 458 形式とする. 459 460 { (dtqatr), (dtqcnt), (_kernel_dtqmb_<データキュー名>) } 461 462 ここで,dtqcntが0の場合には,_kernel_dtqmb_<データキュー名>に代えて, 463 NULLを用いる. 464 465 (6-4-3) エラー条件 466 467 データキューに関するエラー条件は次の通りである. 468 469 *コンフィギュレータ本体が検出するもの 470 ・同じdtqidに対するCRE_DTQが複数ある場合(E_OBJ) 471 472 *パス2で検出するもの 473 ・dtqatrが([TA_TPRI])でない場合(E_RSATR) 474 ・dtqcntが負の値の場合(E_PAR) 475 ・dtqmbがNULLでない場合(E_NOSPT) 476 477 (6-5) 優先度データキューに関する定義 478 479 優先度データキューの省略記号は「PDQ/pdq」である.以下では,システムコ 480 ンフィギュレーションファイルに次の静的APIが含まれている時に生成すべき情 481 報について述べる. 554 482 555 483 CRE_PDQ(ID pdqid, { pdqatr, pdqcnt, maxdpri, pdqmb }); 556 484 557 (6-5-1) åªå 558 度ãã¼ã¿ãã¥ã¼ã«å¿ 559 è¦ãªã¡ã¢ãªé åã®å®ç¾© 560 561 åªå 562 度ãã¼ã¿ãã¥ã¼ã«å¿ 563 è¦ãªã¡ã¢ãªé åã¨ãã¦ï¼åªå 564 度ãã¼ã¿ãã¥ã¼ç®¡çé å 565 ãããï¼çæããåªå 566 度ãã¼ã¿ãã¥ã¼æ¯ã«ï¼å¿ 567 è¦ãªãµã¤ãºã®åªå 568 度ãã¼ã¿ãã¥ã¼ 569 管çé åãå®ç¾©ããï¼å 570 ·ä½çã«ã¯ï¼ä¸è¨ã®éçAPIã«å¯¾ãã¦ï¼æ¬¡ã®å®ç¾©ãçæã 571 ãï¼ 572 573 ï¼pdqcntã0ã§ãªãå ´åã®ã¿çæ 574 static PDQMB _kernel_pdqmb_<åªå 575 度ãã¼ã¿ãã¥ã¼å>[pdqcnt]; 576 577 (6-5-2) åªå 578 度ãã¼ã¿ãã¥ã¼ã®åæåæ 579 å ± 580 581 åªå 582 度ãã¼ã¿ãã¥ã¼åæåãããã¯ä¸ã«çæããåªå 583 度ãã¼ã¿ãã¥ã¼ã®åæå 584 æ 585 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 586 587 { (pdqatr), (pdqcnt), (maxdpri), (_kernel_pdqmb_<åªå 588 度ãã¼ã¿ãã¥ã¼å>) } 589 590 ããã§ï¼pdqcntã0ã®å ´åã«ã¯ï¼_kernel_pdqmb_<åªå 591 度ãã¼ã¿ãã¥ã¼å>ã«ä»£ã 592 ã¦ï¼NULLãç¨ããï¼ 593 594 (6-5-3) ã¨ã©ã¼æ¡ä»¶ 595 596 åªå 597 度ãã¼ã¿ãã¥ã¼ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 598 599 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 600 ã»åãpdqidã«å¯¾ããCRE_PDQãè¤æ°ããå ´åï¼E_OBJï¼ 601 602 ï¼ãã¹2ã§æ¤åºãããã® 603 ã»pdqatrãï¼ï¼»TA_TPRIï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 604 ã»pdqcntãè² ã®å¤ã®å ´åï¼E_PARï¼ 605 ã»(TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)ã§ãªãå ´åï¼E_PARï¼ 606 ã»pdqmbãNULLã§ãªãå ´åï¼E_NOSPTï¼ 607 608 (6-6) ã¡ã¼ã«ããã¯ã¹ã«é¢ããå®ç¾© 609 610 ã¡ã¼ã«ããã¯ã¹ã®çç¥è¨å·ã¯ãMBXï¼mbxãã§ããï¼ä»¥ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ã㣠611 ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ãã¦ããæã«çæãã¹ãæ 612 å ±ã«ã¤ 613 ãã¦è¿°ã¹ãï¼ãªãï¼ã¡ã¼ã«ããã¯ã¹ã«å¿ 614 è¦ãªã¡ã¢ãªé åã¯ãªãï¼ 485 (6-5-1) 優先度データキューに必要なメモリ領域の定義 486 487 優先度データキューに必要なメモリ領域として,優先度データキュー管理領域 488 がある.生成する優先度データキュー毎に,必要なサイズの優先度データキュー 489 管理領域を定義する.具体的には,上記の静的APIに対して,次の定義を生成す 490 る. 491 492 *pdqcntが0でない場合のみ生成 493 static PDQMB _kernel_pdqmb_<優先度データキュー名>[pdqcnt]; 494 495 (6-5-2) 優先度データキューの初期化情報 496 497 優先度データキュー初期化ブロック中に生成する優先度データキューの初期化 498 情報は,次の形式とする. 499 500 { (pdqatr), (pdqcnt), (maxdpri), (_kernel_pdqmb_<優先度データキュー名>) } 501 502 ここで,pdqcntが0の場合には,_kernel_pdqmb_<優先度データキュー名>に代え 503 て,NULLを用いる. 504 505 (6-5-3) エラー条件 506 507 優先度データキューに関するエラー条件は次の通りである. 508 509 *コンフィギュレータ本体が検出するもの 510 ・同じpdqidに対するCRE_PDQが複数ある場合(E_OBJ) 511 512 *パス2で検出するもの 513 ・pdqatrが([TA_TPRI])でない場合(E_RSATR) 514 ・pdqcntが負の値の場合(E_PAR) 515 ・(TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)でない場合(E_PAR) 516 ・pdqmbがNULLでない場合(E_NOSPT) 517 518 (6-6) メールボックスに関する定義 519 520 メールボックスの省略記号は「MBX/mbx」である.以下では,システムコンフィ 521 ギュレーションファイルに次の静的APIが含まれている時に生成すべき情報につ 522 いて述べる.なお,メールボックスに必要なメモリ領域はない. 615 523 616 524 CRE_MBX(mbxid, { mbxatr, maxmpri, mprihd }); 617 525 618 (6-6-1) ã¡ã¼ã«ããã¯ã¹ã®åæåæ 619 å ± 620 621 ã¡ã¼ã«ããã¯ã¹åæåãããã¯ä¸ã«çæããã¡ã¼ã«ããã¯ã¹ã®åæåæ 622 å ±ã¯ï¼ 623 次ã®å½¢å¼ã¨ããï¼ 526 (6-6-1) メールボックスの初期化情報 527 528 メールボックス初期化ブロック中に生成するメールボックスの初期化情報は, 529 次の形式とする. 624 530 625 531 { (mbxatr), (maxmpri) } 626 532 627 (6-6-2) ã¨ã©ã¼æ¡ä»¶ 628 629 ã¡ã¼ã«ããã¯ã¹ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 630 631 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 632 ã»åãmbxidã«å¯¾ããCRE_MBXãè¤æ°ããå ´åï¼E_OBJï¼ 633 634 ï¼ãã¹2ã§æ¤åºãããã® 635 ã»mbxatrãï¼ï¼»TA_TPRIï¼½ï½ï¼»TA_MPRIï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 636 ã»(TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)ã§ãªãå ´åï¼E_PARï¼ 637 ã»mprihdãNULLã§ãªãå ´åï¼E_NOSPTï¼ 638 639 (6-7) åºå®é·ã¡ã¢ãªãã¼ã«ã«é¢ããå®ç¾© 640 641 åºå®é·ã¡ã¢ãªãã¼ã«ã®çç¥è¨å·ã¯ãMPFï¼mpfãã§ããï¼ä»¥ä¸ã§ã¯ï¼ã·ã¹ãã ã³ 642 ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ãã¦ããæã«çæãã¹ãæ 643 644 å ±ã«ã¤ãã¦è¿°ã¹ãï¼ 533 (6-6-2) エラー条件 534 535 メールボックスに関するエラー条件は次の通りである. 536 537 *コンフィギュレータ本体が検出するもの 538 ・同じmbxidに対するCRE_MBXが複数ある場合(E_OBJ) 539 540 *パス2で検出するもの 541 ・mbxatrが([TA_TPRI]|[TA_MPRI])でない場合(E_RSATR) 542 ・(TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)でない場合(E_PAR) 543 ・mprihdがNULLでない場合(E_NOSPT) 544 545 (6-7) 固定長メモリプールに関する定義 546 547 固定長メモリプールの省略記号は「MPF/mpf」である.以下では,システムコ 548 ンフィギュレーションファイルに次の静的APIが含まれている時に生成すべき情 549 報について述べる. 645 550 646 551 CRE_MPF(mpfid, { mpfatr, blkcnt, blksz, mpf, mpfmb }); 647 552 648 (6-7-1) åºå®é·ã¡ã¢ãªãã¼ã«ã«å¿ 649 è¦ãªã¡ã¢ãªé åã®å®ç¾© 650 651 åºå®é·ã¡ã¢ãªãã¼ã«ã«å¿ 652 è¦ãªã¡ã¢ãªé åã¨ãã¦ï¼åºå®é·ã¡ã¢ãªãã¼ã«é åã¨åº 653 å®é·ã¡ã¢ãªãã¼ã«ç®¡çé åãããï¼çæããåºå®é·ã¡ã¢ãªãã¼ã«æ¯ã«ï¼å¿ 654 è¦ãª 655 ãµã¤ãºã®åºå®é·ã¡ã¢ãªãã¼ã«é åï¼mpfãNULLã®å ´åã®ã¿ï¼ã¨åºå®é·ã¡ã¢ãªãã¼ 656 ã«ç®¡çé åã確ä¿ããï¼å 657 ·ä½çã«ã¯ï¼ä¸è¨ã®éçAPIã«å¯¾ãã¦ï¼æ¬¡ã®å®ç¾©ãçæ 658 ããï¼ 659 660 ï¼mpfãNULLã®å ´åã®ã¿çæ 661 static MPF_T _kernel_mpf_<åºå®é·ã¡ã¢ãªãã¼ã«å>[(blkcnt) * COUNT_MPF_T(blksz)]; 553 (6-7-1) 固定長メモリプールに必要なメモリ領域の定義 554 555 固定長メモリプールに必要なメモリ領域として,固定長メモリプール領域と固 556 定長メモリプール管理領域がある.生成する固定長メモリプール毎に,必要な 557 サイズの固定長メモリプール領域(mpfがNULLの場合のみ)と固定長メモリプー 558 ル管理領域を確保する.具体的には,上記の静的APIに対して,次の定義を生成 559 する. 560 561 *mpfがNULLの場合のみ生成 562 static MPF_T _kernel_mpf_<固定長メモリプール名>[(blkcnt) * COUNT_MPF_T(blksz)]; 662 563 663 ï¼å¿ 664 ãçæ 665 static MPFMB _kernel_mpfmb_<åºå®é·ã¡ã¢ãªãã¼ã«å>[blkcnt]; 666 667 (6-7-2) åºå®é·ã¡ã¢ãªãã¼ã«ã®åæåæ 668 å ± 669 670 åºå®é·ã¡ã¢ãªãã¼ã«åæåãããã¯ä¸ã«çæããåºå®é·ã¡ã¢ãªãã¼ã«ã®åæå 671 æ 672 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 564 *必ず生成 565 static MPFMB _kernel_mpfmb_<固定長メモリプール名>[blkcnt]; 566 567 (6-7-2) 固定長メモリプールの初期化情報 568 569 固定長メモリプール初期化ブロック中に生成する固定長メモリプールの初期化 570 情報は,次の形式とする. 673 571 674 572 { (mpfatr), (blkcnt), ROUND_MPF_T(blksz), mpf, 675 (_kernel_mpfmb_<åºå®é·ã¡ã¢ãªãã¼ã«å>) } 676 677 ããã§ï¼mpfãNULLã®å ´åã«ã¯ï¼mpfã«ä»£ãã¦ï¼_kernel_mpf_<åºå®é·ã¡ã¢ãªãã¼ 678 ã«å>ãç¨ããï¼ 679 680 (6-7-3) ã¨ã©ã¼æ¡ä»¶ 681 682 åºå®é·ã¡ã¢ãªãã¼ã«ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 683 684 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 685 ã»åãmpfidã«å¯¾ããCRE_MPFãè¤æ°ããå ´åï¼E_OBJï¼ 686 687 ï¼ãã¹2ã§æ¤åºãããã® 688 ã»mpfatrãï¼ï¼»TA_TPRIï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 689 ã»blkcntã0以ä¸ã®å ´åï¼E_PARï¼ 690 ã»blkszã0以ä¸ã®å ´åï¼E_PARï¼ 691 ã»mpfmbãNULLã§ãªãå ´åï¼E_NOSPTï¼ 692 693 ï¼ãã¹3ã§æ¤åºãããã® 694 ã»mpfãåºå®é·ã¡ã¢ãªãã¼ã«é åã®å 695 é çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 696 - ã¿ã¼ã²ããä¾åã®å¤ï¼CHECK_MPF_ALIGNï¼ã®åæ°ã§ãªãå ´å 697 - NULLã®å ´åï¼ã¿ã¼ã²ããä¾åï¼CHECK_MPF_NONNULLï¼ 698 699 (6-8) å¨æãã³ãã©ã«é¢ããå®ç¾© 700 701 å¨æãã³ãã©ã®çç¥è¨å·ã¯ãCYCï¼cycãã§ããï¼ä»¥ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ã㣠702 ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ãã¦ããæã«çæãã¹ãæ 703 å ±ã«ã¤ 704 ãã¦è¿°ã¹ãï¼ãªãï¼å¨æãã³ãã©ã«å¿ 705 è¦ãªã¡ã¢ãªé åã¯ãªãï¼ 573 (_kernel_mpfmb_<固定長メモリプール名>) } 574 575 ここで,mpfがNULLの場合には,mpfに代えて,_kernel_mpf_<固定長メモリプー 576 ル名>を用いる. 577 578 (6-7-3) エラー条件 579 580 固定長メモリプールに関するエラー条件は次の通りである. 581 582 *コンフィギュレータ本体が検出するもの 583 ・同じmpfidに対するCRE_MPFが複数ある場合(E_OBJ) 584 585 *パス2で検出するもの 586 ・mpfatrが([TA_TPRI])でない場合(E_RSATR) 587 ・blkcntが0以下の場合(E_PAR) 588 ・blkszが0以下の場合(E_PAR) 589 ・mpfmbがNULLでない場合(E_NOSPT) 590 591 *パス3で検出するもの 592 ・mpfが固定長メモリプール領域の先頭番地として正しくない場合(E_PAR) 593 - ターゲット依存の値(CHECK_MPF_ALIGN)の倍数でない場合 594 - NULLの場合(ターゲット依存,CHECK_MPF_NONNULL) 595 596 (6-8) 周期ハンドラに関する定義 597 598 周期ハンドラの省略記号は「CYC/cyc」である.以下では,システムコンフィ 599 ギュレーションファイルに次の静的APIが含まれている時に生成すべき情報につ 600 いて述べる.なお,周期ハンドラに必要なメモリ領域はない. 706 601 707 602 CRE_CYC(cycid, { cycatr, exinf, cychdr, cyctim, cycphs }); 708 603 709 (6-8-1) å¨æãã³ãã©ã®åæåæ 710 å ± 711 712 å¨æãã³ãã©åæåãããã¯ä¸ã«çæããå¨æãã³ãã©ã®åæåæ 713 å ±ã¯ï¼æ¬¡ã® 714 å½¢å¼ã¨ããï¼ 604 (6-8-1) 周期ハンドラの初期化情報 605 606 周期ハンドラ初期化ブロック中に生成する周期ハンドラの初期化情報は,次の 607 形式とする. 715 608 716 609 { (cycatr), (intptr_t)(exinf), (cychdr), (cyctim), (cycphs) } 717 610 718 (6-8-2) ã¨ã©ã¼æ¡ä»¶ 719 720 å¨æãã³ãã©ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 721 722 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 723 ã»åãcycidã«å¯¾ããCRE_CYCãè¤æ°ããå ´åï¼E_OBJï¼ 724 725 ï¼ãã¹2ã§æ¤åºãããã® 726 ã»cycatrãï¼ï¼»TA_STAï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 727 ã»(0 < cyctim && cyctim <= TMAX_RELTIM)ã§ãªãå ´åï¼E_PARï¼ 728 ã»(0 <= cycphs && cycphs <= TMAX_RELTIM)ã§ãªãå ´åï¼E_PARï¼ 729 ã»è¦åï¼cycatrã«TA_STAãè¨å®ããã¦ãã¦ï¼(cycphs == 0)ã®å ´å 730 731 ï¼ãã¹3ã§æ¤åºãããã® 732 ã»cychdrãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 733 - ã¿ã¼ã²ããä¾åã®å¤ï¼CHECK_FUNC_ALIGNï¼ã®åæ°ã§ãªãå ´å 734 - NULLã®å ´åï¼ã¿ã¼ã²ããä¾åï¼CHECK_FUNC_NONNULLï¼ 735 736 (6-9) ã¢ã©ã¼ã ãã³ãã©ã«é¢ããå®ç¾© 737 738 ã¢ã©ã¼ã ãã³ãã©ã®çç¥è¨å·ã¯ãALMï¼almãã§ããï¼ä»¥ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ 739 ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ãã¦ããæã«çæãã¹ãæ 740 å ± 741 ã«ã¤ãã¦è¿°ã¹ãï¼ãªãï¼ã¢ã©ã¼ã ãã³ãã©ã«å¿ 742 è¦ãªã¡ã¢ãªé åã¯ãªãï¼ 611 (6-8-2) エラー条件 612 613 周期ハンドラに関するエラー条件は次の通りである. 614 615 *コンフィギュレータ本体が検出するもの 616 ・同じcycidに対するCRE_CYCが複数ある場合(E_OBJ) 617 618 *パス2で検出するもの 619 ・cycatrが([TA_STA])でない場合(E_RSATR) 620 ・(0 < cyctim && cyctim <= TMAX_RELTIM)でない場合(E_PAR) 621 ・(0 <= cycphs && cycphs <= TMAX_RELTIM)でない場合(E_PAR) 622 ・警告:cycatrにTA_STAが設定されていて,(cycphs == 0)の場合 623 624 *パス3で検出するもの 625 ・cychdrがプログラムの開始番地として正しくない場合(E_PAR) 626 - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合 627 - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL) 628 629 (6-9) アラームハンドラに関する定義 630 631 アラームハンドラの省略記号は「ALM/alm」である.以下では,システムコン 632 フィギュレーションファイルに次の静的APIが含まれている時に生成すべき情報 633 について述べる.なお,アラームハンドラに必要なメモリ領域はない. 743 634 744 635 CRE_ALM(ID almid, { almatr, (intptr_t)(exinf), almhdr }); 745 636 746 (6-9-1) ã¢ã©ã¼ã ãã³ãã©ã®åæåæ 747 å ± 748 749 ã¢ã©ã¼ã ãã³ãã©åæåãããã¯ä¸ã«çæããã¢ã©ã¼ã ãã³ãã©ã®åæåæ 750 å ± 751 ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 637 (6-9-1) アラームハンドラの初期化情報 638 639 アラームハンドラ初期化ブロック中に生成するアラームハンドラの初期化情報 640 は,次の形式とする. 752 641 753 642 { (almatr), (exinf), (almhdr) } 754 643 755 (6-9-2) ã¨ã©ã¼æ¡ä»¶ 756 757 ã¢ã©ã¼ã ãã³ãã©ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 758 759 ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿æ¬ä½ãæ¤åºãããã® 760 ã»åãalmidã«å¯¾ããCRE_ALMãè¤æ°ããå ´åï¼E_OBJï¼ 761 762 ï¼ãã¹2ã§æ¤åºãããã® 763 ã»almatrãï¼TA_NULLï¼ã§ãªãå ´åï¼E_RSATRï¼ 764 765 ï¼ãã¹3ã§æ¤åºãããã® 766 ã»almhdrãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 767 - ã¿ã¼ã²ããä¾åã®å¤ï¼CHECK_FUNC_ALIGNï¼ã®åæ°ã§ãªãå ´å 768 - NULLã®å ´åï¼ã¿ã¼ã²ããä¾åï¼CHECK_FUNC_NONNULLï¼ 769 770 (7) å²è¾¼ã¿ã«é¢ããå®ç¾© 771 772 å²è¾¼ã¿ã«é¢ãã¦çæããæ 773 å ±ã¯ï¼ã¿ã¼ã²ããæ¯ã«å®ãããã¨ãã§ããï¼ã¿ã¼ã²ã 774 ãæ¯ã«å®ããªãå ´åã«ã¯ï¼ä»¥ä¸ã§è¿°ã¹ãã¿ã¼ã²ããã«ä¾åããªãæ¨æºçãªæ 775 å ± 776 ãçæããï¼ã¿ã¼ã²ããæ¯ã«å®ããå ´åã«ã¯ï¼(7-1)ã¨(7-3)ã«è¿°ã¹ãæ 777 å ±ã¯ç 778 æããªãï¼(7-2)ã«è¿°ã¹ãæ 779 å ±ã¯çæããï¼ï¼ 780 781 (7-1) å²è¾¼ã¿è¦æ±ã©ã¤ã³ã«é¢ããå®ç¾© 782 783 å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ãè¨å®ããéçAPIãCFG_INTãã§è¨å®ããå²è¾¼ã¿è¦æ± 784 ã©ã¤ã³ã«é¢ããå®ç¾©ãçæããï¼å 785 ·ä½çã«ã¯æ¬¡ã®éãï¼ 786 787 以ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ã 788 ã¦ããæã«çæãã¹ãæ 789 å ±ã«ã¤ãã¦è¿°ã¹ãï¼ 644 (6-9-2) エラー条件 645 646 アラームハンドラに関するエラー条件は次の通りである. 647 648 *コンフィギュレータ本体が検出するもの 649 ・同じalmidに対するCRE_ALMが複数ある場合(E_OBJ) 650 651 *パス2で検出するもの 652 ・almatrが(TA_NULL)でない場合(E_RSATR) 653 654 *パス3で検出するもの 655 ・almhdrがプログラムの開始番地として正しくない場合(E_PAR) 656 - ターゲット依存の値(CHECK_FUNC_ALIGN)の倍数でない場合 657 - NULLの場合(ターゲット依存,CHECK_FUNC_NONNULL) 658 659 (7) 割込みに関する定義 660 661 割込みに関して生成する情報は,ターゲット毎に定めることができる.ターゲッ 662 ト毎に定めない場合には,以下で述べるターゲットに依存しない標準的な情報 663 を生成する.ターゲット毎に定める場合には,(7-1)と(7-3)に述べる情報は生 664 成しない((7-2)に述べる情報は生成する). 665 666 (7-1) 割込み要求ラインに関する定義 667 668 割込み要求ラインの属性を設定する静的API「CFG_INT」で設定した割込み要求 669 ラインに関する定義を生成する.具体的には次の通り. 670 671 以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ 672 ている時に生成すべき情報について述べる. 790 673 791 674 CFG_INT(INTNO intno, { intatr, intpri }); 792 675 793 (7-1-1) è¨å®ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®æ° 794 795 è¨å®ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®æ°ããã¯ãå®ç¾©ããããªããã»ããµãã£ã¬ã¯ã㣠796 ãï¼#defineï¼ãçæããï¼ã¾ãï¼ãã®å¤ãæã¤å¤æ°ã®å®ç¾©ãçæããï¼å 797 ·ä½ç 798 ã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 799 800 #define TNUM_INTNO <è¨å®ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®æ°> 676 (7-1-1) 設定する割込み要求ラインの数 677 678 設定する割込み要求ラインの数をマクロ定義するプリプロセッサディレクティ 679 ブ(#define)を生成する.また,その値を持つ変数の定義を生成する.具体的 680 には,次のような行を生成する. 681 682 #define TNUM_INTNO <設定する割込み要求ラインの数> 801 683 const uint_t _kernel_tnum_intno = TNUM_INTNO; 802 684 803 (7-1-2) å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãããã¯ã®å®ç¾© 804 805 å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãããã¯ãçæããï¼å 806 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãç 807 æããï¼ 685 (7-1-2) 割込み要求ライン初期化ブロックの定義 686 687 割込み要求ライン初期化ブロックを生成する.具体的には,次のような行を生 688 成する. 808 689 809 690 const INTINIB _kernel_intinib_table[TNUM_INTNO] = { 810 <å²è¾¼ã¿è¦æ±ã©ã¤ã³1ã®åæåæ 811 å ±>, 812 <å²è¾¼ã¿è¦æ±ã©ã¤ã³2ã®åæåæ 813 å ±>, 814 â¦â¦ 815 <å²è¾¼ã¿è¦æ±ã©ã¤ã³TNUM_INTNOã®åæåæ 816 å ±> 691 <割込み要求ライン1の初期化情報>, 692 <割込み要求ライン2の初期化情報>, 693 …… 694 <割込み要求ラインTNUM_INTNOの初期化情報> 817 695 }; 818 696 819 ãã®ä¸ã®å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®åæåæ 820 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 697 この中の割込み要求ラインの初期化情報は,次の形式とする. 821 698 822 699 { (intno), (intatr), (intpri) } 823 700 824 (7-1-3) ã¨ã©ã¼æ¡ä»¶ 825 826 å²è¾¼ã¿è¦æ±ã©ã¤ã³ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 827 828 ï¼ãã¹2ã§æ¤åºãããã® 829 ã»intnoãCFG_INTã«å¯¾ããå²è¾¼ã¿çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 830 ã»intnoãCFG_INTã«ãã£ã¦è¨å®æ¸ã¿ã®å ´åï¼E_OBJï¼ 831 ã»intatrãï¼ï¼»TA_ENAINTï¼½ï½ï¼»TA_EDGEï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼ 832 â» ã¿ã¼ã²ããä¾åé¨ã§å²è¾¼ã¿å±æ§ã追å å¯ï¼TARGET_INTATRï¼ 833 ã»ã«ã¼ãã«ç®¡çã«åºå®ããã¦ããintnoã«å¯¾ãã¦ï¼intpriã«TMIN_INTPRIããã 834 ãå°ããå¤ãæå®ãããå ´åï¼E_OBJï¼ 835 ã»ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããintnoã«å¯¾ãã¦ï¼intpriã«TMIN_INTPRIãã 836 ããå°ããå¤ãæå®ãããªãã£ãå ´åï¼E_OBJï¼ 837 ã»intpriãCFG_INTã«å¯¾ããå²è¾¼ã¿åªå 838 度ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 839 840 ï¼å¿ 841 è¦ã«å¿ãã¦ã¿ã¼ã²ããä¾åé¨ã§æ¤åºãããã® 842 ã»intatrãå²è¾¼ã¿å±æ§ã¨ãã¦è¨å®ã§ããªãå¤ã®å ´åï¼E_RSATRï¼ 843 ã»intpriãå²è¾¼ã¿åªå 844 度ã¨ãã¦è¨å®ã§ããªãå¤ã®å ´åï¼E_PARï¼ 845 ã»åä¸ã®å²è¾¼ã¿åªå 846 度ããè¨å®ã§ããªãå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦ï¼ç°ãªãå² 847 ãè¾¼ã¿åªå 848 度ãè¨å®ããå ´åï¼E_PARï¼ 849 850 (7-2) å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã«é¢ããå®ç¾© 851 852 (7-2-1) å²è¾¼ã¿ãã³ãã©ã®çæ 853 854 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã«å«ã¾ããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ã 855 ã³ã追å ããéçAPIãATT_ISRãã«å¯¾ãã¦ï¼åä¸ã®å²è¾¼ã¿çªå·ã«å¯¾ãã¦è¿½å ã 856 ããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ãé ã«å¼ã³åºãé¢æ°ãçæããï¼ 857 858 å 859 ·ä½çã«ã¯ï¼åä¸ã®å²è¾¼ã¿çªå·ã«å¯¾ãã¦å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã追å ãã 701 (7-1-3) エラー条件 702 703 割込み要求ラインに関するエラー条件は次の通りである. 704 705 *パス2で検出するもの 706 ・intnoがCFG_INTに対する割込み番号として正しくない場合(E_PAR) 707 ・intnoがCFG_INTによって設定済みの場合(E_OBJ) 708 ・intatrが([TA_ENAINT]|[TA_EDGE])でない場合(E_RSATR) 709 ※ ターゲット依存部で割込み属性を追加可(TARGET_INTATR) 710 ・カーネル管理に固定されているintnoに対して,intpriにTMIN_INTPRIよりも 711 小さい値が指定された場合(E_OBJ) 712 ・カーネル管理外に固定されているintnoに対して,intpriにTMIN_INTPRIより 713 も小さい値が指定されなかった場合(E_OBJ) 714 ・intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR) 715 716 *必要に応じてターゲット依存部で検出するもの 717 ・intatrが割込み属性として設定できない値の場合(E_RSATR) 718 ・intpriが割込み優先度として設定できない値の場合(E_PAR) 719 ・同一の割込み優先度しか設定できない割込み要求ラインに対して,異なる割 720 込み優先度を設定した場合(E_PAR) 721 722 (7-2) 割込みサービスルーチンに関する定義 723 724 (7-2-1) 割込みハンドラの生成 725 726 システムコンフィギュレーションファイル中に含まれる割込みサービスルーチ 727 ンを追加する静的API「ATT_ISR」に対して,同一の割込み番号に対して追加さ 728 れた割込みサービスルーチンを順に呼び出す関数を生成する. 729 730 具体的には,同一の割込み番号に対して割込みサービスルーチンを追加する 860 731 861 732 ATT_ISR({ isratr_1, exinf_1, intno, isr_1, isrpri_1 }); 862 733 ATT_ISR({ isratr_2, exinf_2, intno, isr_2, isrpri_2 }); 863 â¦â¦734 …… 864 735 ATT_ISR({ isratr_n, exinf_n, intno, isr_n, isrpri_n }); 865 736 866 ã¨ããéçAPIã«å¯¾ãã¦ï¼æ¬¡ã®ãããªé¢æ°ãçæããï¼ããã§ï¼isrpri_1ï¼ 867 isrpri_2 ï¼â¦â¦ï¼isrpri_nã¯ï¼å¤ã®å°ããé ã«ä¸¦ã¹æ¿ãããã¦ãããã®ã¨ããï¼868 å¤ãåããã®ã®éã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã§ã®éç 869 API ã®é åºã®éãã«ä¸¦ãã§ãããã®ã¨ããï¼737 という静的APIに対して,次のような関数を生成する.ここで,isrpri_1, 738 isrpri_2,……,isrpri_nは,値の小さい順に並べ替えられているものとする. 739 値が同じものの間では,システムコンフィギュレーションファイル中での静的 740 APIの順序の通りに並んでいるものとする. 870 741 871 742 static void … … 877 748 saved_ipm = i_get_ipm(); 878 749 879 LOG_ISR_ENTER(<intno>); /* ISR1 ã®å¼åºã*/750 LOG_ISR_ENTER(<intno>); /* ISR1の呼出し */ 880 751 isr_1((intptr_t)(exinf_1)); 881 752 LOG_ISR_LEAVE(intno); 882 753 883 if (i_sense_lock()) { /* ISRã®å¼åºãåã®ç¶æ 884 ã«æ»ã */ 754 if (i_sense_lock()) { /* ISRの呼出し前の状態に戻す */ 885 755 i_unlock_cpu(); 886 756 } 887 757 i_set_ipm(saved_ipm); 888 758 889 LOG_ISR_ENTER(<intno>); /* ISR2 ã®å¼åºã*/759 LOG_ISR_ENTER(<intno>); /* ISR2の呼出し */ 890 760 isr_2((intptr_t)(exinf_2)); 891 761 LOG_ISR_LEAVE(intno); 892 762 893 if (i_sense_lock()) { /* ISRã®å¼åºãåã®ç¶æ 894 ã«æ»ã */ 763 if (i_sense_lock()) { /* ISRの呼出し前の状態に戻す */ 895 764 i_unlock_cpu(); 896 765 } 897 766 i_set_ipm(saved_ipm); 898 767 899 â¦â¦900 901 LOG_ISR_ENTER(<intno>); /* ISRn ã®å¼åºã*/768 …… 769 770 LOG_ISR_ENTER(<intno>); /* ISRnの呼出し */ 902 771 isr_n((intptr_t)(exinf_n)); 903 772 LOG_ISR_LEAVE(intno); … … 906 775 } 907 776 908 ããã§ï¼ISRnã®å¼åºãã®å¾ã«å¼åºãåã®ç¶æ 909 ã«æ»ããªãã®ã¯ï¼å²è¾¼ã¿ãã³ãã© 910 ããã®ãªã¿ã¼ã³ã«ããï¼ã«ã¼ãã«ãå 911 ã®ç¶æ 912 ã«æ»ãããã§ããï¼ 913 914 åä¸ã®å²è¾¼ã¿çªå·ã«å¯¾ãã¦è¿½å ãããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã1ã¤ã®ã¿ã®å ´å 915 ã«ã¯ï¼æ¬¡ã®ãããªé¢æ°ãçæããï¼ 777 ここで,ISRnの呼出しの後に呼出し前の状態に戻さないのは,割込みハンドラ 778 からのリターンにより,カーネルが元の状態に戻すためである. 779 780 同一の割込み番号に対して追加された割込みサービスルーチンが1つのみの場合 781 には,次のような関数を生成する. 916 782 917 783 static void … … 925 791 } 926 792 927 ã課é¡ãããã§ï¼LOG_ISR_ENTERï¼LOG_ISR_LEAVEã®å¼æ°ãã©ããããã課é¡ã¨ 928 ãã¦æ®ã£ã¦ããï¼ATT_ISRã§ç»é²ãããISRã«å¯¾ãã¦ã¯ISR IDãä»ä¸ãããªãã 929 ãï¼IDã§ISRãåºå¥ãããã¨ãã§ããªãï¼ãããªãå²è¾¼ã¿çªå·ã渡ãã¦ãããï¼ 930 æ¡å¼µæ 931 å ±ï¼exinfï¼ã渡ãã¹ããããããªãï¼ 932 933 (7-2-2) å²è¾¼ã¿ãã³ãã©ã®å®ç¾©ã«ç¸å½ããå¦ç 934 935 ä¸ã®ããã«å²è¾¼ã¿ãã³ãã©ãçæããå ´åã«ã¯ï¼æ¬¡ã«èª¬æããå²è¾¼ã¿ãã³ãã© 936 ã«é¢ããå®ç¾©ã«ããã¦ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã«æ¬¡ã®é 937 çAPIãå«ã¾ãã¦ããã®ã¨åæ§ã«å¦çããï¼ 793 【課題】ここで,LOG_ISR_ENTER,LOG_ISR_LEAVEの引数をどうするかが課題と 794 して残っている.ATT_ISRで登録されたISRに対してはISR IDが付与されないた 795 め,IDでISRを区別することができない.やむなく割込み番号を渡しているが, 796 拡張情報(exinf)も渡すべきかもしれない. 797 798 (7-2-2) 割込みハンドラの定義に相当する処理 799 800 上のように割込みハンドラを生成した場合には,次に説明する割込みハンドラ 801 に関する定義において,システムコンフィギュレーションファイル中に次の静 802 的APIが含まれているのと同様に処理する. 938 803 939 804 DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> }); 940 805 941 ããã§inhnoã¯ï¼intnoã«å¯¾å¿ããå²è¾¼ã¿ãã³ãã©çªå·ã§ããï¼ 942 943 (7-2-3) ã¨ã©ã¼æ¡ä»¶ 944 945 å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 946 947 ï¼ãã¹2ã§æ¤åºãããã® 948 ã»isratrãï¼TA_NULLï¼ã§ãªãå ´åï¼E_RSATRï¼ 949 â» ã¿ã¼ã²ããä¾åé¨ã§å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å±æ§ã追å å¯ï¼TARGET_ISRATRï¼ 950 ã»intnoãATT_ISRã«å¯¾ããå²è¾¼ã¿çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 951 â» intnoã«å¯¾å¿ããinhnoããªãå ´åãå«ã 952 ã»(TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)ã§ãªãå ´åï¼E_PARï¼ 953 ã»intnoã«å¯¾å¿ããinhnoã«å¯¾ãã¦DEF_INHãããå ´åï¼E_OBJï¼ 954 ã»intnoã«å¯¾ããCFG_INTããªãå ´åï¼E_OBJï¼ 955 ã»intnoã«å¯¾ãã¦CFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 956 度ãTMIN_INTPRIãããå°ãã 957 ãå ´åï¼E_OBJï¼ 958 â» ã«ã¼ãã«ç®¡çå¤ã®ISRã¯ãµãã¼ãããªããã 959 960 ï¼å¯è½ã§ããã°ã¿ã¼ã²ããä¾åé¨ã§æ¤åºãããã® 961 ã»isrãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 962 963 (7-3) å²è¾¼ã¿ãã³ãã©ã«é¢ããå®ç¾© 964 965 å²è¾¼ã¿ãã³ãã©ãå®ç¾©ããéçAPIãDEF_INHãã§å®ç¾©ããå²è¾¼ã¿ãã³ãã©ï¼ä¸ 966 è¿°ã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®è¿½å ã«ããã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæããå²è¾¼ 967 ã¿ãã³ãã©ãå«ãï¼ã«é¢ããå®ç¾©ãçæããï¼å 968 ·ä½çã«ã¯æ¬¡ã®éãï¼ 969 970 以ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ã 971 ã¦ããæã«çæãã¹ãæ 972 å ±ã«ã¤ãã¦è¿°ã¹ãï¼ 806 ここでinhnoは,intnoに対応する割込みハンドラ番号である. 807 808 (7-2-3) エラー条件 809 810 割込みサービスルーチンに関するエラー条件は次の通りである. 811 812 *パス2で検出するもの 813 ・isratrが(TA_NULL)でない場合(E_RSATR) 814 ※ ターゲット依存部で割込みサービスルーチン属性を追加可(TARGET_ISRATR) 815 ・intnoがATT_ISRに対する割込み番号として正しくない場合(E_PAR) 816 ※ intnoに対応するinhnoがない場合を含む 817 ・(TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR) 818 ・intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ) 819 ・intnoに対するCFG_INTがない場合(E_OBJ) 820 ・intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小さい 821 場合(E_OBJ) 822 ※ カーネル管理外のISRはサポートしないため 823 824 *可能であればターゲット依存部で検出するもの 825 ・isrがプログラムの開始番地として正しくない場合(E_PAR) 826 827 (7-3) 割込みハンドラに関する定義 828 829 割込みハンドラを定義する静的API「DEF_INH」で定義した割込みハンドラ(上 830 述の割込みサービスルーチンの追加によりコンフィギュレータが生成した割込 831 みハンドラを含む)に関する定義を生成する.具体的には次の通り. 832 833 以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ 834 ている時に生成すべき情報について述べる. 973 835 974 836 DEF_INH(inhno, { inhatr, inthdr }); 975 837 976 (7-3-1) å®ç¾©ããå²è¾¼ã¿ãã³ãã©ã®æ° 977 978 å®ç¾©ããå²è¾¼ã¿ãã³ãã©ã®æ°ããã¯ãå®ç¾©ããããªããã»ããµãã£ã¬ã¯ãã£ã 979 ï¼#defineï¼ãçæããï¼ã¾ãï¼ãã®å¤ãæã¤å¤æ°ã®å®ç¾©ãçæããï¼å 980 ·ä½ç 981 ã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 982 983 #define TNUM_INHNO <å®ç¾©ããå²è¾¼ã¿ãã³ãã©ã®æ°> 838 (7-3-1) 定義する割込みハンドラの数 839 840 定義する割込みハンドラの数をマクロ定義するプリプロセッサディレクティブ 841 (#define)を生成する.また,その値を持つ変数の定義を生成する.具体的 842 には,次のような行を生成する. 843 844 #define TNUM_INHNO <定義する割込みハンドラの数> 984 845 const uint_t _kernel_tnum_inhno = TNUM_INHNO; 985 846 986 (7-3-2) å²è¾¼ã¿ãã³ãã©ã®åºå 987 ¥å£å¦ç 988 989 å®ç¾©ããå²è¾¼ã¿ãã³ãã©æ¯ã«ï¼å²è¾¼ã¿ãã³ãã©ã®åºå 990 ¥å£å¦çã«ã¼ãã³ãçæã 991 ãï¼å 992 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 847 (7-3-2) 割込みハンドラの出入口処理 848 849 定義する割込みハンドラ毎に,割込みハンドラの出入口処理ルーチンを生成す 850 る.具体的には,次のような行を生成する. 993 851 994 852 INTHDR_ENTRY(inhno, inhno_num, inthdr) 995 853 996 ããã§inhno_numã¯ï¼inhnoï¼å²è¾¼ã¿ãã³ãã©çªå·ï¼ãæ°å¤ã§è¡¨ç¾ãããã®ã§ï¼ 997 ã¢ã»ã³ããªè¨èªè¨è¿°ã«ä½¿ç¨ããããã®ãã®ã§ããï¼ 998 999 (7-3-3) å²è¾¼ã¿ãã³ãã©åæåãããã¯ã®å®ç¾© 1000 1001 å²è¾¼ã¿ãã³ãã©åæåãããã¯ãçæããï¼å 1002 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæ 1003 ããï¼ 854 ここでinhno_numは,inhno(割込みハンドラ番号)を数値で表現したもので, 855 アセンブリ言語記述に使用するためのものである. 856 857 (7-3-3) 割込みハンドラ初期化ブロックの定義 858 859 割込みハンドラ初期化ブロックを生成する.具体的には,次のような行を生成 860 する. 1004 861 1005 862 const INHINIB _kernel_inhinib_table[TNUM_INHNO] = { 1006 <å²è¾¼ã¿ãã³ãã©1ã®åæåæ 1007 å ±>, 1008 <å²è¾¼ã¿ãã³ãã©2ã®åæåæ 1009 å ±>, 1010 â¦â¦ 1011 <å²è¾¼ã¿ãã³ãã©TNUM_INHNOã®åæåæ 1012 å ±> 863 <割込みハンドラ1の初期化情報>, 864 <割込みハンドラ2の初期化情報>, 865 …… 866 <割込みハンドラTNUM_INHNOの初期化情報> 1013 867 }; 1014 868 1015 ãã®ä¸ã®å²è¾¼ã¿ãã³ãã©ã®åæåæ 1016 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 869 この中の割込みハンドラの初期化情報は,次の形式とする. 1017 870 1018 871 { (inhno), (inhatr), (FP)(INT_ENTRY(inhno, inthdr)) } 1019 872 1020 (7-3-4) ã¨ã©ã¼æ¡ä»¶ 1021 1022 å²è¾¼ã¿ãã³ãã©ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 1023 1024 ï¼ãã¹2ã§æ¤åºãããã® 1025 ã»inhnoãDEF_INHã«å¯¾ããå²è¾¼ã¿ãã³ãã©çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 1026 ã»inhnoãDEF_INHã«ãã£ã¦è¨å®æ¸ã¿ã®å ´åï¼E_OBJï¼ 1027 #ã»inhnoã«å¯¾å¿ããintnoã«å¯¾ãã¦ATT_ISRãããå ´åï¼E_OBJï¼ 1028 # â» inhnoã«å¯¾å¿ããintnoããªãå ´åã«ã¯ï¼ãã®ãã§ãã¯ãè¡ããªã 1029 # â ãã®ãã§ãã¯ã¯ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å´ã§è¡ã 1030 ã»inhatrãï¼TA_NULLï¼ã§ãªãå ´åï¼E_RSATRï¼ 1031 â» ã¿ã¼ã²ããä¾åé¨ã§å²è¾¼ã¿ãã³ãã©å±æ§ã追å å¯ï¼TARGET_INHATRï¼ 1032 â» TA_NONKERNELã使ãå ´åã«ã¯ï¼TARGET_INHATRã«è¨å®ãã 1033 ã»ã«ã¼ãã«ç®¡çã«åºå®ããã¦ããinhnoã«å¯¾ãã¦ï¼inhatrã«TA_NONKERNELãæå® 1034 ãããã¦ããå ´åï¼E_RSATRï¼ 1035 ã»ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããinhnoã«å¯¾ãã¦ï¼inhatrã«TA_NONKERNELãæ 1036 ãå®ããã¦ããªãå ´åï¼E_RSATRï¼ 1037 ã»inhnoã«å¯¾å¿ããintnoã«å¯¾ããCFG_INTããªãå ´åï¼E_OBJï¼ 1038 â» inhnoã«å¯¾å¿ããintnoããªãå ´åã«ã¯ï¼ãã®ãã§ãã¯ãè¡ããªã 1039 ã»inhatrã«TA_NONKERNELãæå®ããã¦ãããï¼inhnoã«å¯¾å¿ããintnoã«å¯¾ã㦠1040 ãCFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 1041 度ãTMIN_INTPRIãããå°ããå ´åï¼E_OBJï¼ 1042 â» inhnoã«å¯¾å¿ããintnoããªãå ´åã«ã¯ï¼ãã®ãã§ãã¯ãè¡ããªã 1043 ã»inhatrã«TA_NONKERNELãæå®ããã¦ããï¼inhnoã«å¯¾å¿ããintnoã«å¯¾ã㦠1044 ãCFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 1045 度ãTMIN_INTPRI以ä¸ã§ããå ´åï¼E_OBJï¼ 1046 â» inhnoã«å¯¾å¿ããintnoããªãå ´åã«ã¯ï¼ãã®ãã§ãã¯ãè¡ããªã 1047 1048 ï¼å¯è½ã§ããã°ã¿ã¼ã²ããä¾åé¨ã§æ¤åºãããã® 1049 ã»inthdrãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 1050 1051 (8) CPUä¾å¤ã«é¢ããå®ç¾© 1052 1053 CPUä¾å¤ã«é¢ãã¦çæããæ 1054 å ±ã¯ï¼ã¿ã¼ã²ããæ¯ã«å®ãããã¨ãã§ããï¼ã¿ã¼ã²ã 1055 ãæ¯ã«å®ããªãå ´åã«ã¯ï¼ä»¥ä¸ã§è¿°ã¹ãã¿ã¼ã²ããã«ä¾åããªãæ¨æºçãªæ 1056 å ± 1057 ãçæããï¼ã¿ã¼ã²ããæ¯ã«å®ããå ´åã«ã¯ï¼ãããã®æ 1058 å ±ã¯çæãããªãï¼ 1059 1060 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã«ï¼CPUä¾å¤ãã³ãã©ãå®ç¾©ãã 1061 éçAPIãDEF_EXCããå«ã¾ãã¦ããå ´åã«ï¼CPUä¾å¤ãã³ãã©ã«é¢ããå®ç¾©ã 1062 çæããï¼ 1063 1064 以ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ã 1065 ã¦ããæã«çæãã¹ãæ 1066 å ±ã«ã¤ãã¦è¿°ã¹ãï¼ 873 (7-3-4) エラー条件 874 875 割込みハンドラに関するエラー条件は次の通りである. 876 877 *パス2で検出するもの 878 ・inhnoがDEF_INHに対する割込みハンドラ番号として正しくない場合(E_PAR) 879 ・inhnoがDEF_INHによって設定済みの場合(E_OBJ) 880 #・inhnoに対応するintnoに対してATT_ISRがある場合(E_OBJ) 881 # ※ inhnoに対応するintnoがない場合には,このチェックを行わない 882 # → このチェックは,割込みサービスルーチン側で行う 883 ・inhatrが(TA_NULL)でない場合(E_RSATR) 884 ※ ターゲット依存部で割込みハンドラ属性を追加可(TARGET_INHATR) 885 ※ TA_NONKERNELを使う場合には,TARGET_INHATRに設定する 886 ・カーネル管理に固定されているinhnoに対して,inhatrにTA_NONKERNELが指定 887 されている場合(E_RSATR) 888 ・カーネル管理外に固定されているinhnoに対して,inhatrにTA_NONKERNELが指 889 定されていない場合(E_RSATR) 890 ・inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ) 891 ※ inhnoに対応するintnoがない場合には,このチェックを行わない 892 ・inhatrにTA_NONKERNELが指定されておらず,inhnoに対応するintnoに対して 893 CFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小さい場合(E_OBJ) 894 ※ inhnoに対応するintnoがない場合には,このチェックを行わない 895 ・inhatrにTA_NONKERNELが指定されており,inhnoに対応するintnoに対して 896 CFG_INTで設定された割込み優先度がTMIN_INTPRI以上である場合(E_OBJ) 897 ※ inhnoに対応するintnoがない場合には,このチェックを行わない 898 899 *可能であればターゲット依存部で検出するもの 900 ・inthdrがプログラムの開始番地として正しくない場合(E_PAR) 901 902 (8) CPU例外に関する定義 903 904 CPU例外に関して生成する情報は,ターゲット毎に定めることができる.ターゲッ 905 ト毎に定めない場合には,以下で述べるターゲットに依存しない標準的な情報 906 を生成する.ターゲット毎に定める場合には,これらの情報は生成されない. 907 908 システムコンフィギュレーションファイル中に,CPU例外ハンドラを定義する 909 静的API「DEF_EXC」が含まれている場合に,CPU例外ハンドラに関する定義を 910 生成する. 911 912 以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ 913 ている時に生成すべき情報について述べる. 1067 914 1068 915 DEF_EXC(excno, { excatr, exchdr }); 1069 916 1070 (8-1) å®ç¾©ããCPUä¾å¤ãã³ãã©ã®æ° 1071 1072 å®ç¾©ããCPUä¾å¤ãã³ãã©ã®æ°ããã¯ãå®ç¾©ããããªããã»ããµãã£ã¬ã¯ã㣠1073 ãï¼#defineï¼ãçæããï¼ã¾ãï¼ãã®å¤ãæã¤å¤æ°ã®å®ç¾©ãçæããï¼å 1074 ·ä½ 1075 çã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 1076 1077 #define TNUM_EXCNO <å®ç¾©ããCPUä¾å¤ãã³ãã©ã®æ°> 917 (8-1) 定義するCPU例外ハンドラの数 918 919 定義するCPU例外ハンドラの数をマクロ定義するプリプロセッサディレクティ 920 ブ(#define)を生成する.また,その値を持つ変数の定義を生成する.具体 921 的には,次のような行を生成する. 922 923 #define TNUM_EXCNO <定義するCPU例外ハンドラの数> 1078 924 const uint_t _kernel_tnum_excno = TNUM_EXCNO; 1079 925 1080 (8-2) CPUä¾å¤ãã³ãã©ã®åºå 1081 ¥å£å¦ç 1082 1083 å®ç¾©ããCPUä¾å¤ãã³ãã©æ¯ã«ï¼CPUä¾å¤ãã³ãã©ã®åºå 1084 ¥å£å¦çã«ã¼ãã³ãçæ 1085 ããï¼å 1086 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæããï¼ 926 (8-2) CPU例外ハンドラの出入口処理 927 928 定義するCPU例外ハンドラ毎に,CPU例外ハンドラの出入口処理ルーチンを生成 929 する.具体的には,次のような行を生成する. 1087 930 1088 931 EXCHDR_ENTRY(excno, excno_num, exchdr) 1089 932 1090 ããã§excno_numã¯ï¼excnoï¼CPUä¾å¤ãã³ãã©çªå·ï¼ãæ°å¤ã§è¡¨ç¾ãããã®ã§ï¼ 1091 ã¢ã»ã³ããªè¨èªè¨è¿°ã«ä½¿ç¨ããããã®ãã®ã§ããï¼ 1092 1093 (8-3) CPUä¾å¤ãã³ãã©åæåãããã¯ã®å®ç¾© 1094 1095 CPUä¾å¤ãã³ãã©åæåãããã¯ãçæããï¼å 1096 ·ä½çã«ã¯ï¼æ¬¡ã®ãããªè¡ãçæ 1097 ããï¼ 933 ここでexcno_numは,excno(CPU例外ハンドラ番号)を数値で表現したもので, 934 アセンブリ言語記述に使用するためのものである. 935 936 (8-3) CPU例外ハンドラ初期化ブロックの定義 937 938 CPU例外ハンドラ初期化ブロックを生成する.具体的には,次のような行を生成 939 する. 1098 940 1099 941 const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = { 1100 <CPUä¾å¤ãã³ãã©1ã®åæåæ 1101 å ±>, 1102 <CPUä¾å¤ãã³ãã©2ã®åæåæ 1103 å ±>, 1104 â¦â¦ 1105 <CPUä¾å¤ãã³ãã©TNUM_EXCNOã®åæåæ 1106 å ±> 942 <CPU例外ハンドラ1の初期化情報>, 943 <CPU例外ハンドラ2の初期化情報>, 944 …… 945 <CPU例外ハンドラTNUM_EXCNOの初期化情報> 1107 946 }; 1108 947 1109 ãã®ä¸ã®CPUä¾å¤ãã³ãã©ã®åæåæ 1110 å ±ã¯ï¼æ¬¡ã®å½¢å¼ã¨ããï¼ 948 この中のCPU例外ハンドラの初期化情報は,次の形式とする. 1111 949 1112 950 { (excno), (excatr), (FP)(EXC_ENTRY(excno, exchdr)) } 1113 951 1114 (8-4) ã¨ã©ã¼æ¡ä»¶ 1115 1116 CPUä¾å¤ãã³ãã©ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 1117 1118 ï¼ãã¹2ã§æ¤åºãããã® 1119 ã»excnoãDEF_EXCã«å¯¾ããCPUä¾å¤ãã³ãã©çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 1120 ã»excnoãDEF_EXCã«ãã£ã¦è¨å®æ¸ã¿ã®å ´åï¼E_OBJï¼ 1121 ã»excatrãï¼TA_NULLï¼ã§ãªãå ´åï¼E_RSATRï¼ 1122 â» ã¿ã¼ã²ããä¾åé¨ã§CPUä¾å¤ãã³ãã©å±æ§ã追å å¯ï¼TARGET_EXCATRï¼ 1123 1124 ï¼å¯è½ã§ããã°ã¿ã¼ã²ããä¾åé¨ã§æ¤åºãããã® 1125 ã»exchdrãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 1126 1127 (9) éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã«é¢ããå®ç¾© 1128 1129 éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã«é¢ããå®ç¾©ã¯ï¼å¿ 1130 ãçæããªããã° 1131 ãªããªãï¼ 1132 1133 (9-1) DEF_ICSããªãå ´å 1134 1135 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«ï¼éçAPIãDEF_ICSããå«ã¾ã㦠1136 ããªãå ´åã«ã¯ï¼æ¬¡ã®è¡ãçæããï¼ 952 (8-4) エラー条件 953 954 CPU例外ハンドラに関するエラー条件は次の通りである. 955 956 *パス2で検出するもの 957 ・excnoがDEF_EXCに対するCPU例外ハンドラ番号として正しくない場合(E_PAR) 958 ・excnoがDEF_EXCによって設定済みの場合(E_OBJ) 959 ・excatrが(TA_NULL)でない場合(E_RSATR) 960 ※ ターゲット依存部でCPU例外ハンドラ属性を追加可(TARGET_EXCATR) 961 962 *可能であればターゲット依存部で検出するもの 963 ・exchdrがプログラムの開始番地として正しくない場合(E_PAR) 964 965 (9) 非タスクコンテキスト用のスタック領域に関する定義 966 967 非タスクコンテキスト用のスタック領域に関する定義は,必ず生成しなければ 968 ならない. 969 970 (9-1) DEF_ICSがない場合 971 972 システムコンフィギュレーションファイルに,静的API「DEF_ICS」が含まれて 973 いない場合には,次の行を生成する. 1137 974 1138 975 #ifdef DEFAULT_ISTK … … 1149 986 #endif /* DEFAULT_ISTK */ 1150 987 1151 (9-2) DEF_ICSãããå ´å 1152 1153 以ä¸ã§ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®éçAPIãå«ã¾ã㦠1154 ããæã«çæãã¹ãæ 1155 å ±ã«ã¤ãã¦è¿°ã¹ãï¼ 988 (9-2) DEF_ICSがある場合 989 990 以下では,システムコンフィギュレーションファイルに次の静的APIが含まれて 991 いる時に生成すべき情報について述べる. 1156 992 1157 993 DEF_ICS({ istksz, istk }); 1158 994 1159 istkãNULLã®å ´åã«ã¯ï¼æå®ããããµã¤ãºã®éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ã 1160 ã¯é åã確ä¿ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®åæåæ 1161 å ±ãçæ 1162 ããï¼å 1163 ·ä½çã«ã¯ï¼ä¸è¨ã®éçAPIã«å¯¾ãã¦ï¼æ¬¡ã®è¡ãçæããï¼ 995 istkがNULLの場合には,指定されたサイズの非タスクコンテキスト用のスタッ 996 ク領域を確保し,非タスクコンテキスト用のスタック領域の初期化情報を生成 997 する.具体的には,上記の静的APIに対して,次の行を生成する. 1164 998 1165 999 static STK_T _kernel_istack[COUNT_STK_T(istksz)]; … … 1167 1001 #define TOPPERS_ISTK _kernel_istack 1168 1002 1169 istkãNULLã§ãªãå ´åã«ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®åæå 1170 æ 1171 å ±ãï¼æ¬¡ã®å½¢å¼ã§çæããï¼ 1003 istkがNULLでない場合には,非タスクコンテキスト用のスタック領域の初期化 1004 情報を,次の形式で生成する. 1172 1005 1173 1006 #define TOPPERS_ISTKSZ (istksz) 1174 1007 #define TOPPERS_ISTK (istk) 1175 1008 1176 (9-3) å¤æ°ã®çæ1177 1178 DEF_ICS ã®æç¡ã«ãããï¼æ¬¡ã®å®ç¾©ãçæããï¼1009 (9-3) 変数の生成 1010 1011 DEF_ICSの有無によらず,次の定義を生成する. 1179 1012 1180 1013 const SIZE _kernel_istksz = TOPPERS_ISTKSZ; … … 1185 1018 #endif /* TOPPERS_ISTKPT */ 1186 1019 1187 (9-4) ã¨ã©ã¼æ¡ä»¶ 1188 1189 éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 1190 1191 ï¼ãã¹2ã§æ¤åºãããã® 1192 ã»éçAPIãDEF_ICSããè¤æ°ããï¼E_OBJï¼ 1193 ã»istkszã0以ä¸ãï¼ã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_ISTKSZï¼ãããå° 1194 ãããå ´åï¼E_PARï¼ 1195 ã»istkszãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 1196 - ã¿ã¼ã²ããä¾åã®å¤ï¼CHECK_STKSZ_ALIGNï¼ã®åæ°ã§ãªãå ´å 1197 â» ãã®ã¨ã©ã¼ãã§ãã¯ã¯ï¼istkãNULLã§ãªãå ´åã«ã®ã¿è¡ã 1198 1199 ï¼ãã¹3ã§æ¤åºãããã® 1200 ã»istkãã¹ã¿ãã¯é åã®å 1201 é çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 1202 - ã¿ã¼ã²ããä¾åã®å¤ï¼CHECK_STACK_ALIGNï¼ã®åæ°ã§ãªãå ´å 1203 - NULLã®å ´åï¼ã¿ã¼ã²ããä¾åï¼CHECK_STACK_NONNULLï¼ 1204 1205 (10) ã¿ã¤ã ã¤ãã³ã管çã«é¢ããå®ç¾© 1206 1207 ã¿ã¤ã ã¤ãã³ã管çã«é¢é£ãã¦ï¼æ¬¡ã®å®ç¾©ãçæããï¼ 1020 (9-4) エラー条件 1021 1022 非タスクコンテキスト用のスタック領域に関するエラー条件は次の通りである. 1023 1024 *パス2で検出するもの 1025 ・静的API「DEF_ICS」が複数ある(E_OBJ) 1026 ・istkszが0以下か,ターゲット定義の最小値(TARGET_MIN_ISTKSZ)よりも小 1027 さい場合(E_PAR) 1028 ・istkszがスタック領域のサイズとして正しくない場合(E_PAR) 1029 - ターゲット依存の値(CHECK_STKSZ_ALIGN)の倍数でない場合 1030 ※ このエラーチェックは,istkがNULLでない場合にのみ行う 1031 1032 *パス3で検出するもの 1033 ・istkがスタック領域の先頭番地として正しくない場合(E_PAR) 1034 - ターゲット依存の値(CHECK_STACK_ALIGN)の倍数でない場合 1035 - NULLの場合(ターゲット依存,CHECK_STACK_NONNULL) 1036 1037 (10) タイムイベント管理に関する定義 1038 1039 タイムイベント管理に関連して,次の定義を生成する. 1208 1040 1209 1041 TMEVTN _kernel_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID]; 1210 1042 1211 (11) åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°ã®å®ç¾©1212 1213 åã«ã¼ãã«ãªãã¸ã§ã¯ãã®ç®¡çï¼å²è¾¼ã¿ç®¡çï¼CPUä¾å¤ãã³ãã©ç®¡çã®åæ©è½ã 1214 åæåé¢æ°ãé ã«å¼ã³åºãé¢æ°ï¼_kernel_initialize_objectï¼ãçæããï¼æ¬¡ 1215 ã®3ã¤ã®åæåé¢æ°ãé¤ãã¦ã¯ï¼ä½¿ç¨ããªãæ©è½ã®åæåé¢æ°ã¯å¼ã³åºããªãï¼ 1043 (11) 各モジュールの初期化関数の定義 1044 1045 各カーネルオブジェクトの管理,割込み管理,CPU例外ハンドラ管理の各機能を 1046 初期化関数を順に呼び出す関数(_kernel_initialize_object)を生成する.次 1047 の3つの初期化関数を除いては,使用しない機能の初期化関数は呼び出さない. 1216 1048 1217 1049 _kernel_initialize_task … … 1219 1051 _kernel_initialize_exception 1220 1052 1221 ãã¹ã¦ã®æ©è½ã使ã£ãå ´åã«çæãããé¢æ°ã¯æ¬¡ã®éãã§ããï¼ 1053 すべての機能を使った場合に生成される関数は次の通りである. 1222 1054 1223 1055 void … … 1237 1069 } 1238 1070 1239 (12) åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®å®ç¾© 1240 1241 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã«å«ã¾ããåæåã«ã¼ãã³ã追å 1242 ããéçAPIãATT_INIãã«å¯¾ãã¦ï¼è¿½å ããåæåã«ã¼ãã³ãé ã«å¼ã³åºãé¢ 1243 æ°ãçæããï¼å 1244 ·ä½çã«ã¯ï¼ 1071 (12) 初期化ルーチンの実行関数の定義 1072 1073 システムコンフィギュレーションファイル中に含まれる初期化ルーチンを追加 1074 する静的API「ATT_INI」に対して,追加した初期化ルーチンを順に呼び出す関 1075 数を生成する.具体的には, 1245 1076 1246 1077 ATT_INI({ iniatr, exinf, inirtn }); 1247 1078 1248 ã¨ããéçAPIã«å¯¾ãã¦ï¼ 1079 という静的APIに対して, 1249 1080 1250 1081 (inirtn)((intptr_t)(exinf)); 1251 1082 1252 ãå¼ã³åºãé¢æ°ãï¼_kernel_call_inirtnã¨ããååã§çæããï¼åæåã«ã¼ã 1253 ã³ãå¼ã³åºãé åºã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã§ã®éç 1254 API ã®é åºã«ä¸è´ãããï¼1255 1256 ä¾ãã°ï¼ 1083 を呼び出す関数を,_kernel_call_inirtnという名前で生成する.初期化ルーチ 1084 ンを呼び出す順序は,システムコンフィギュレーションファイル中での静的 1085 APIの順序に一致させる. 1086 1087 例えば, 1257 1088 1258 1089 ATT_INI({ TA_NULL, 0, timer_initialize }); 1259 1090 ATT_INI({ TA_NULL, CONSOLE_PORTID, serial_initialize }); 1260 1091 1261 ã¨ãã2ã¤ã®éçAPIããã®é åºã§è¨è¿°ãããæã«çæããé¢æ°ã¯æ¬¡ã®éãã§ã 1262 ãï¼ 1092 という2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ 1093 る. 1263 1094 1264 1095 void … … 1269 1100 } 1270 1101 1271 (12-1) ã¨ã©ã¼æ¡ä»¶ 1272 1273 åæåã«ã¼ãã³ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 1274 1275 ï¼ãã¹2ã§æ¤åºãããã® 1276 ã»iniatrãï¼TA_NULLï¼ã§ãªãå ´åï¼E_RSATRï¼ 1277 1278 ï¼å¯è½ã§ããã°ã¿ã¼ã²ããä¾åé¨ã§æ¤åºãããã® 1279 ã»inirtnãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 1280 1281 (13) çµäºå¦çã«ã¼ãã³ã®å®è¡é¢æ°ã®å®ç¾© 1282 1283 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã«å«ã¾ããçµäºå¦çã«ã¼ãã³ã追 1284 å ããéçAPIãATT_TERãã«å¯¾ãã¦ï¼è¿½å ããçµäºå¦çã«ã¼ãã³ãé ã«å¼ã³åº 1285 ãé¢æ°ãçæããï¼å 1286 ·ä½çã«ã¯ï¼ 1102 (12-1) エラー条件 1103 1104 初期化ルーチンに関するエラー条件は次の通りである. 1105 1106 *パス2で検出するもの 1107 ・iniatrが(TA_NULL)でない場合(E_RSATR) 1108 1109 *可能であればターゲット依存部で検出するもの 1110 ・inirtnがプログラムの開始番地として正しくない場合(E_PAR) 1111 1112 (13) 終了処理ルーチンの実行関数の定義 1113 1114 システムコンフィギュレーションファイル中に含まれる終了処理ルーチンを追 1115 加する静的API「ATT_TER」に対して,追加した終了処理ルーチンを順に呼び出 1116 す関数を生成する.具体的には, 1287 1117 1288 1118 ATT_TER({ teratr, exinf, terrtn }); 1289 1119 1290 ã¨ããéçAPIã«å¯¾ãã¦ï¼ 1120 という静的APIに対して, 1291 1121 1292 1122 (terrtn)((intptr_t)(exinf)); 1293 1123 1294 ãå¼ã³åºãé¢æ°ãï¼_kernel_call_terrtnã¨ããååã§çæããï¼çµäºå¦çã«ã¼ 1295 ãã³ãå¼ã³åºãé åºã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ä¸ã§ã®éç 1296 API ã®éé ã«ä¸è´ãããï¼1297 1298 ä¾ãã°ï¼ 1124 を呼び出す関数を,_kernel_call_terrtnという名前で生成する.終了処理ルー 1125 チンを呼び出す順序は,システムコンフィギュレーションファイル中での静的 1126 APIの逆順に一致させる. 1127 1128 例えば, 1299 1129 1300 1130 ATT_TER({ TA_NULL, 0, timer_terminate }); 1301 1131 ATT_TER({ TA_NULL, CONSOLE_PORTID, serial_terminate }); 1302 1132 1303 ã¨ãã2ã¤ã®éçAPIããã®é åºã§è¨è¿°ãããæã«çæããé¢æ°ã¯æ¬¡ã®éãã§ã 1304 ãï¼ 1133 という2つの静的APIがこの順序で記述された時に生成する関数は次の通りであ 1134 る. 1305 1135 1306 1136 void … … 1311 1141 } 1312 1142 1313 (13-1) ã¨ã©ã¼æ¡ä»¶1314 1315 çµäºå¦çã«ã¼ãã³ã«é¢ããã¨ã©ã¼æ¡ä»¶ã¯æ¬¡ã®éãã§ããï¼ 1316 1317 ï¼ãã¹2ã§æ¤åºãããã® 1318 ã»teratrãï¼TA_NULLï¼ã§ãªãå ´åï¼E_RSATRï¼ 1319 1320 ï¼å¯è½ã§ããã°ã¿ã¼ã²ããä¾åé¨ã§æ¤åºãããã® 1321 ã»terrtnãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 1322 1323 ä»¥ä¸ 1143 (13-1) エラー条件 1144 1145 終了処理ルーチンに関するエラー条件は次の通りである. 1146 1147 *パス2で検出するもの 1148 ・teratrが(TA_NULL)でない場合(E_RSATR) 1149 1150 *可能であればターゲット依存部で検出するもの 1151 ・terrtnがプログラムの開始番地として正しくない場合(E_PAR) 1152 1153 以上 -
Property svn:mime-type
changed from
-
rubycfg_asp/trunk/asp_dcre/doc/design.txt
-
Property svn:mime-type
changed from
text/plain
totext/plane; charset=UTF-8
r313 r315 1 1 2 TOPPERS/ASPã«ã¼ãã« 3 è¨è¨ã¡ã¢ 4 5 対å¿ãã¼ã¸ã§ã³: Release 1.9.3 6 æçµæ´æ°: 2014å¹´4æ15æ¥ï¼ä½æä¸ï¼ 7 8 ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASPã«ã¼ãã«ã®è¨è¨ã¡ã¢ã§ããï¼ä½æéä¸ã®ãã® 9 ã§ããï¼ç¶²ç¾ 10 çã§ã¯ãªãï¼ 2 TOPPERS/ASPカーネル 3 設計メモ 4 5 対応バージョン: Release 1.9.3 6 最終更新: 2014年4月15日(作成中) 7 8 このドキュメントは,TOPPERS/ASPカーネルの設計メモである.作成途中のもの 9 であり,網羅的ではない. 11 10 12 11 ---------------------------------------------------------------------- … … 18 17 Graduate School of Information Science, Nagoya Univ., JAPAN 19 18 20 ä¸è¨èä½æ¨©è 21 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 22 ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 23 å¤ã»åé 24 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 25 (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 26 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 27 ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 28 (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 29 ç¨ã§ããå½¢ã§åé 30 å¸ããå ´åã«ã¯ï¼åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 32 è 33 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 34 ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 35 (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 36 ç¨ã§ããªãå½¢ã§åé 37 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 38 ã¨ï¼ 39 (a) åé 40 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 41 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 42 ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 43 (b) åé 44 å¸ã®å½¢æ 45 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 46 å ±åãããã¨ï¼ 47 (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 48 害ãããï¼ä¸è¨èä½æ¨©è 49 ããã³TOPPERSããã¸ã§ã¯ããå 50 責ãããã¨ï¼ 51 ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 52 ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 53 ããã³TOPPERSããã¸ã§ã¯ãã 54 å 55 責ãããã¨ï¼ 19 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 23 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 24 スコード中に含まれていること. 25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 26 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 27 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 28 の無保証規定を掲載すること. 29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 30 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 31 と. 32 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 33 作権表示,この利用条件および下記の無保証規定を掲載すること. 34 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 35 報告すること. 36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 37 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 38 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 39 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 40 免責すること. 56 41 57 æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 58 ã 59 ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 60 ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 61 ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 62 ã®è²¬ä»»ãè² ããªãï¼ 42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 46 の責任を負わない. 63 47 64 48 $Id$ 65 49 ---------------------------------------------------------------------- 66 50 67 âç®æ¬¡ 68 69 ã»TOPPERS/ASPã«ã¼ãã«ã®å®è£ 70 è¨è¨æ¹é 71 ã»ã·ã¹ãã ç¶æ 72 ã¨ã³ã³ããã¹ãã®å®è£ 73 74 - ã«ã¼ãã«åä½ç¶æ 75 ã¨éåä½ç¶æ 76 77 - ã¿ã¹ã¯ã³ã³ããã¹ãã¨éã¿ã¹ã¯ã³ã³ããã¹ã 78 - å 79 ¨å²è¾¼ã¿ããã¯ç¶æ 80 ã¨å 81 ¨å²è¾¼ã¿ããã¯è§£é¤ç¶æ 82 83 - CPUããã¯ç¶æ 84 ã¨CPUããã¯è§£é¤ç¶æ 85 86 - å²è¾¼ã¿åªå 87 度ãã¹ã¯ 88 - ãã£ã¹ãããç¦æ¢ç¶æ 89 ã¨ãã£ã¹ããã許å¯ç¶æ 90 91 - ãã£ã¹ãããä¿çç¶æ 92 93 ã»ã¿ã¹ã¯ç¶æ 94 ã®ç®¡çã¨ã¹ã±ã¸ã¥ã¼ãªã³ã° 95 - ã¿ã¹ã¯ç¶æ 96 ã®ç®¡ç 97 - ã¿ã¹ã¯ã¹ã±ã¸ã¥ã¼ã© 98 ã»ã¿ã¹ã¯ãã£ã¹ãããå¦çã®å®è£ 99 100 - ã¿ã¹ã¯ãã£ã¹ãããå¦çã®å¿ 101 è¦ãªã¿ã¤ãã³ã° 102 - ã¿ã¹ã¯ãã£ã¹ãããã£ã®æ§é 103 - ã¿ã¹ã¯ã®çµäºæã®ã¿ã¹ã¯ãã£ã¹ããã 104 - reqflgã®å°å 105 ¥çç± 106 ã»ã¿ã¹ã¯ä¾å¤å¦çæ©è½ã®å®è£ 107 108 - ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§æ¡ä»¶ã¨ã·ã¹ãã ç¶æ 109 ï¼ä»æ§ã®ç¢ºèªï¼ 110 - ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å¼åºãå¦ç 111 - ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ãå¿ 112 è¦ãªã¿ã¤ãã³ã° 113 - ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§å¦ç 114 - call_texrtnããdispatchãå¼ã³åºãå¦çã«ã¤ã㦠115 ã»ã¨ã©ã¼ã®ãã§ãã¯é åº 116 - ã¨ã©ã¼ã®3åé¡ 117 - éçã¨ã©ã¼ã®ãã§ãã¯é åº 118 - æºéçã¨ã©ã¼ã®ãã§ãã¯é åº 119 ã»CHECKãã¯ãã¨gotoæã®ä½¿ç¨ 120 - CHECKãã¯ãã®å®ç¾©ã¨ãã®ä½¿ç¨æ³ 121 - è¨è¨æå³ 122 - CHECKãã¯ãã使ç¨ãã¦ããæ¡ä»¶ 123 - åé¡ãçãããã¨ããªãæ ¹æ 124 ã»ext_tskï¼ext_kerã®è¿ãå¤ 125 ã»ã«ã¼ãã«ã®ãã¼ã¿æ§é ã«å¯¾ããvolatile宣è¨ã«ã¤ã㦠126 ã»åãã£ã¹ãã«ä¼´ãè¦åã¡ãã»ã¼ã¸ 127 ã»æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»åç 128 §æ©è½ 129 - å¿ 130 è¦æ§ã¨ä½¿é 131 - APIä»æ§ 132 - å®è£ 133 134 ã»ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ãã©ã°ãenatexã§å®è£ 135 ãã¦ããçç± 136 137 138 âTOPPERS/ASPã«ã¼ãã«ã®å®è£ 139 è¨è¨æ¹é 140 141 TOPPERS/ASPã«ã¼ãã«ï¼ä»¥ä¸ï¼ASPã«ã¼ãã«ï¼ã¯ï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«ã®åºçº 142 ç¹ã¨ãªããªã¢ã«ã¿ã¤ã ã«ã¼ãã«ã§ããï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«ä»æ§ã®è¨è¨æ¹é 143 ã¨ï¼ASPã«ã¼ãã«ã®é©ç¨å¯¾è±¡é åã¨è¨è¨æ¹éã«ã¤ãã¦ã¯ï¼TOPPERSæ°ä¸ä»£ã«ã¼ã 144 ã«çµ±åä»æ§æ¸ã«è¿°ã¹ããã¦ããï¼ 145 146 以ä¸ã§ã¯ï¼ASPã«ã¼ãã«ã®å®è£ 147 è¨è¨æ¹éã«ã¤ãã¦è¿°ã¹ããï¼ä»æ§è¨è¨æ¹éã¨ãé¢ 148 é£ãã¦ããï¼æ確ã«åé¢ã§ããªãé¨åãããï¼ 149 150 TOPPERS/ASPã«ã¼ãã«ã®å®è£ 151 è¨è¨ãè¡ãã«ãããï¼æ¬¡ã®æ¹éãè¨å®ããï¼ 152 153 (1) ã½ã¼ã¹ã³ã¼ãã®èªã¿ãããã»æ¹é ãããããéè¦ãã 154 155 ã½ã¼ã¹ã³ã¼ããèªã¿ããããã¨ã¯ï¼ãªã¼ãã³ã½ã¼ã¹ã½ããã¦ã§ã¢ã®å質ãåä¸ 156 ãããä¸ã§æãéè¦ãªç¹æ§ã§ããï¼ã½ã¼ã¹ã³ã¼ããç解ãã¦ããæè¡è 157 ãå¢ã 158 ããã¨ã§ï¼åé¡ãæ©æã«çºè¦ãããã¨ãã§ãï¼ãµãã¼ãä½å¶ãå 159 160 å®ãããã㨠161 ãã§ããï¼ã¾ãï¼ã½ã¼ã¹ã³ã¼ããèªã¿ããããã¨ã¯ï¼ã·ã³ãã«ãªè¨è¨ããã㦠162 ãããã¨ãæå³ãã¦ããï¼ä¿¡é ¼æ§åä¸ã«ãã¤ãªããï¼ããã«ï¼æè¡è 163 æè²ã®ã 164 ãã®ææã¨ãã観ç¹ãããï¼ã½ã¼ã¹ã³ã¼ããèªã¿ããããã¨ã¯éè¦ã¨ãªãï¼ 165 166 æ¹é ãããããã¨ã¯ï¼ã·ã¹ãã æ¯ã®è¦æ±ã«ãããããã¥ã¼ãã³ã°ãè¡ãããã 167 ãã¨ãæå³ãã¦ããï¼æ¦ãåããåã®éçºãæ¯æ´ããæ§è³ªã§ããï¼ã¾ãï¼ASPã«ã¼ 168 ãã«ãåºç¤ã¨ãã¦TOPPERSæ°ä¸ä»£ã«ã¼ãã«ã·ãªã¼ãºãéçºãã¦ããä¸ã§ãï¼æ¹é 169 ãããããã¨ã¯å¿ 170 é ã®æ¡ä»¶ã§ããï¼ 171 172 (2) æ°ããã¿ã¼ã²ããã·ã¹ãã ã¸ã®ãã¼ãã£ã³ã°ã容æãªæ§é ã¨ãã 173 174 çµè¾¼ã¿ã·ã¹ãã ã«ã¯å¤æ§ãªãã¼ãã¦ã§ã¢ãç¨ããããããï¼ãããã«å®¹æã«ãã¼ 175 ãã£ã³ã°ã§ãããã¨ã¯éè¦ãªæ§è³ªã§ããï¼ãã®ããã«ï¼å®è¡æ§è½ã«é 176 æ 177 ®ãã¤ã¤ 178 ãã¼ãã¦ã§ã¢ãæ½è±¡åãï¼ã¿ã¼ã²ããã·ã¹ãã ã«ä¾åããé¨åï¼ã¿ã¼ã²ããä¾ 179 åé¨ï¼ã¨ä¾åããªãé¨åï¼ã¿ã¼ã²ããéä¾åé¨ï¼ãæ確ã«åé¢ããï¼ã¾ãï¼é 180 çºç°å¢ï¼ã³ã³ãã¤ã©ãªã©ï¼ã«ä¾åããé¨åãæ確ã«åé¢ããï¼ 181 182 (3) æ¤è¨¼ã容æãªæ§é ã¨ãã 183 184 ä¿¡é ¼æ§ã確ä¿ããããã«ï¼æ¤è¨¼ã容æãªæ§é ã¨ããï¼ 185 186 å 187 ·ä½çã«ã¯ï¼ãµã¼ãã¹ã³ã¼ã«ã®ã»ã¨ãã©å 188 ¨ä½ãå²è¾¼ã¿ç¦æ¢ã§å®è¡ãããã¨ã¨ãï¼ 189 ãµã¼ãã¹ã³ã¼ã«ã®å¦çéä¸ã§å²è¾¼ã¿ã許å¯ããªãï¼ãã®æ§é ã¯ï¼èªã¿ãããæ¹ 190 é ããããã½ã¼ã¹ã³ã¼ãã«ããããã«ãæå¹ã§ããï¼ããã«ããå²è¾¼ã¿å¿çæ§ 191 ãç ç²ã«ãªããï¼ããã«ãã£ã¦åé¡ãçããã¢ããªã±ã¼ã·ã§ã³ã¯å°æ°ã§ããï¼ 192 ãããããªããã®ã¨èããï¼ 193 194 ã¾ãï¼æ¡ä»¶ã³ã³ãã¤ã«çã«ããã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã§ããç®æãå¢ããã¨ï¼ 195 ç´°ããªæé©åãã§ããä¸æ¹ã§ï¼æ¤è¨¼ãã¹ãçµåããå¢ãããã¨ããï¼ã³ã³ã㣠196 ã®ã¥ã¬ã¼ã·ã§ã³ã§ããç®æã¯å¿ 197 è¦æä½éã¨ããï¼ 198 199 (4) å®è¡æ§è½ã¨ã¡ã¢ãªä½¿ç¨éã«é 200 æ 201 ®ãã 202 203 ä¸è¨ã®æ¹éãæºãããä¸ã§ï¼é«ãå®è¡æ§è½ã¨å°ããã¡ã¢ãªä½¿ç¨éãéæã§ãã 204 ãããªå®è£ 205 ãè¡ãï¼å®è¡æ§è½ãåä¸ãããéã«ã¯ï¼å¹³åæ§è½ã®åä¸ãããï¼æ 206 æªææ§è½ã®åä¸ãéè¦ããï¼ 207 208 ã½ã¼ã¹ã³ã¼ãã®èªã¿ããããéè¦ããã¨è¨ã£ã¦ãï¼å®è¡æ§è½ã®æªãã¢ã«ã´ãªãº 209 ã ãå®æã«æ¡ç¨ãããã¨ã¯ããï¼é«ãå®è¡æ§è½ãéæã§ããã¢ã«ã´ãªãºã ãç¨ 210 ããï¼ãã ãï¼æ°ããã¿ã¼ã²ããã·ã¹ãã ã¸ã®ãã¼ãã£ã³ã°ã容æã«ãããã 211 ã«å¤§é¨åãCè¨èªã§å®è£ 212 ãã¦ããï¼ãã¹ã¦ãã¢ã»ã³ããªè¨èªã§è¨è¿°ããå ´åã«æ¯ 213 ã¹ã¦å®è¡æ§è½ãè½ã¡ãã®ã¯ãããããªãï¼ 214 215 ã¡ã¢ãªä½¿ç¨éã«ã¤ãã¦ã¯ï¼RAMã®ä½¿ç¨éãåæ¸ãããã¨ã«éç¹ãç½®ããè¨è¨ãè¡ 216 ããï¼ä¸è¨ã®æ¹éããã³å®è¡æ§è½ã¨ã®ãã¬ã¼ããªããèæ 217 ®ãï¼ããããã¾ã§ã® 218 åæ¸ã¯è¡ããªãï¼ 219 220 (5) ã¹ã±ã¼ã©ããªãã£ã«é 221 æ 222 ®ãã 223 224 æ§ã 225 ãªè¦æ¨¡ã®ã·ã¹ãã ã«é©ç¨ã§ããã¹ã±ã¼ã©ããªãã£ããã£ãæ§é ã¨ããï¼ç¹ 226 ã«ï¼å°è¦æ¨¡ãªã·ã¹ãã ã«é©ç¨ããéã«ï¼ä½¿ç¨ããªãæ©è½ãã«ã¼ãã«ãæã£ã¦ã 227 ããã¨ã«ããã¡ã¢ãªä½¿ç¨éã®å¢å ãæå°éã«ãªãããã«é 228 æ 229 ®ããï¼ 230 231 å 232 ·ä½çã«ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ãã«ã1ã¤ã®ãã¼ãã¢ã¸ã¥ã¼ã«ã«ãªã³ã¯ã 233 ãæ¹æ³ï¼1ãªã³ã¯ã¢ãã«ï¼ãæ³å®ãï¼ã«ã¼ãã«ãé¢æ°åä½ã§ã©ã¤ãã©ãªåãã¦ï¼ 234 使ç¨ããé¢æ°ã®ã¿ããªã³ã¯ã§ããæ§é ã¨ããï¼ããã¯ä¸ç¨®ã®ã³ã³ãã£ã®ã¥ã¬ã¼ 235 ã·ã§ã³ã§ãããï¼ãã®æ¹æ³ã¯ï¼æ¡ä»¶ã³ã³ãã¤ã«ã«ããã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ 236 ã¨ã¯éãï¼æ¤è¨¼å·¥æ°ã«ä¸ããå½±é¿ãå°ããï¼ 237 238 ã¾ãï¼åºå®çã«ä½¿ç¨ããRAMé åãæ¸ããï¼ã¹ã¿ãã¯ã«ç½®ããæ 239 å ±ã¯ã§ããéã 240 ã¹ã¿ãã¯ä¸ã«ç½®ãï¼ 241 242 243 âã·ã¹ãã ç¶æ 244 ã¨ã³ã³ããã¹ãã®å®è£ 245 246 247 ãã®ç« ã§ã¯ï¼ãTOPPERSæ°ä¸ä»£ã«ã¼ãã«çµ±åä»æ§æ¸ãã®ã2.5 ã·ã¹ãã ç¶æ 248 ã¨ã³ 249 ã³ããã¹ããã®ç¯ã«è¦å®ããã¦ããã·ã¹ãã ç¶æ 250 ã¨ã³ã³ããã¹ãã®å®è£ 251 æ¹æ³ã« 252 ã¤ãã¦è¨è¿°ããï¼ 253 254 âã«ã¼ãã«åä½ç¶æ 255 ã¨éåä½ç¶æ 256 257 258 ã«ã¼ãã«ã®åä½ç¶æ 259 ã管çããããã«ï¼ã«ã¼ãã«åä½ç¶æ 260 ãã©ã°ï¼kerflgï¼ã 261 ç¨æããï¼kerflgã¯ï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã§falseï¼ï¼0ï¼ã«åæåããï¼ 262 ã¾ãï¼ã«ã¼ãã«åä½ã®éå§æã«trueã«ãï¼ã«ã¼ãã«åä½ã®çµäºæã«falseã«ããï¼ 51 ○目次 52 53 ・TOPPERS/ASPカーネルの実装設計方針 54 ・システム状態とコンテキストの実装 55 - カーネル動作状態と非動作状態 56 - タスクコンテキストと非タスクコンテキスト 57 - 全割込みロック状態と全割込みロック解除状態 58 - CPUロック状態とCPUロック解除状態 59 - 割込み優先度マスク 60 - ディスパッチ禁止状態とディスパッチ許可状態 61 - ディスパッチ保留状態 62 ・タスク状態の管理とスケジューリング 63 - タスク状態の管理 64 - タスクスケジューラ 65 ・タスクディスパッチ処理の実装 66 - タスクディスパッチ処理の必要なタイミング 67 - タスクディスパッチャの構造 68 - タスクの終了時のタスクディスパッチ 69 - reqflgの導入理由 70 ・タスク例外処理機能の実装 71 - タスク例外処理ルーチンの実行開始条件とシステム状態(仕様の確認) 72 - タスク例外処理ルーチンの呼出し処理 73 - タスク例外処理ルーチンの実行開始が必要なタイミング 74 - タスク例外処理ルーチンの実行開始処理 75 - call_texrtnからdispatchを呼び出す処理について 76 ・エラーのチェック順序 77 - エラーの3分類 78 - 静的エラーのチェック順序 79 - 準静的エラーのチェック順序 80 ・CHECKマクロとgoto文の使用 81 - CHECKマクロの定義とその使用法 82 - 設計意図 83 - CHECKマクロを使用してよい条件 84 - 問題を生じることがない根拠 85 ・ext_tsk,ext_kerの返り値 86 ・カーネルのデータ構造に対するvolatile宣言について 87 ・型キャストに伴う警告メッセージ 88 ・性能評価用システム時刻参照機能 89 - 必要性と使途 90 - API仕様 91 - 実装 92 ・タスク例外処理禁止フラグをenatexで実装している理由 93 94 95 ○TOPPERS/ASPカーネルの実装設計方針 96 97 TOPPERS/ASPカーネル(以下,ASPカーネル)は,TOPPERS新世代カーネルの出発 98 点となるリアルタイムカーネルである.TOPPERS新世代カーネル仕様の設計方針 99 と,ASPカーネルの適用対象領域と設計方針については,TOPPERS新世代カーネ 100 ル統合仕様書に述べられている. 101 102 以下では,ASPカーネルの実装設計方針について述べるが,仕様設計方針とも関 103 連しており,明確に分離できない部分もある. 104 105 TOPPERS/ASPカーネルの実装設計を行うにあたり,次の方針を設定する. 106 107 (1) ソースコードの読みやすさ・改造しやすさを重視する 108 109 ソースコードが読みやすいことは,オープンソースソフトウェアの品質を向上 110 させる上で最も重要な特性である.ソースコードを理解している技術者が増え 111 ることで,問題を早期に発見することができ,サポート体制も充実させること 112 ができる.また,ソースコードが読みやすいことは,シンプルな設計がされて 113 いることも意味しており,信頼性向上にもつながる.さらに,技術者教育のた 114 めの教材とする観点からも,ソースコードが読みやすいことは重要となる. 115 116 改造しやすいことは,システム毎の要求にあわせたチューニングが行いやすい 117 ことを意味しており,擦り合わせ型の開発を支援する性質である.また,ASPカー 118 ネルを基盤としてTOPPERS新世代カーネルシリーズを開発していく上でも,改造 119 しやすいことは必須の条件である. 120 121 (2) 新しいターゲットシステムへのポーティングが容易な構造とする 122 123 組込みシステムには多様なハードウェアが用いられるため,それらに容易にポー 124 ティングできることは重要な性質である.そのために,実行性能に配慮しつつ 125 ハードウェアを抽象化し,ターゲットシステムに依存する部分(ターゲット依 126 存部)と依存しない部分(ターゲット非依存部)を明確に分離する.また,開 127 発環境(コンパイラなど)に依存する部分も明確に分離する. 128 129 (3) 検証が容易な構造とする 130 131 信頼性を確保するために,検証が容易な構造とする. 132 133 具体的には,サービスコールのほとんど全体を割込み禁止で実行することとし, 134 サービスコールの処理途中で割込みを許可しない.この構造は,読みやすく改 135 造しやすいソースコードにするためにも有効である.これにより割込み応答性 136 が犠牲になるが,それによって問題を生じるアプリケーションは少数であり, 137 やむをえないものと考える. 138 139 また,条件コンパイル等によりコンフィギュレーションできる箇所を増やすと, 140 細かな最適化ができる一方で,検証すべき組合せが増えることから,コンフィ 141 ギュレーションできる箇所は必要最低限とする. 142 143 (4) 実行性能とメモリ使用量に配慮する 144 145 上記の方針を満たした上で,高い実行性能と小さいメモリ使用量を達成できる 146 ような実装を行う.実行性能を向上させる際には,平均性能の向上よりも,最 147 悪時性能の向上を重視する. 148 149 ソースコードの読みやすさを重視すると言っても,実行性能の悪いアルゴリズ 150 ムを安易に採用することはせず,高い実行性能を達成できるアルゴリズムを用 151 いる.ただし,新しいターゲットシステムへのポーティングを容易にするため 152 に大部分をC言語で実装しており,すべてをアセンブリ言語で記述した場合に比 153 べて実行性能が落ちるのはやむをえない. 154 155 メモリ使用量については,RAMの使用量を削減することに重点を置いた設計を行 156 うが,上記の方針および実行性能とのトレードオフを考慮し,ぎりぎりまでの 157 削減は行わない. 158 159 (5) スケーラビリティに配慮する 160 161 様々な規模のシステムに適用できるスケーラビリティをもった構造とする.特 162 に,小規模なシステムに適用する際に,使用しない機能をカーネルが持ってい 163 ることによるメモリ使用量の増加が最小限になるように配慮する. 164 165 具体的には,アプリケーションとカーネルを1つのロードモジュールにリンクす 166 る方法(1リンクモデル)を想定し,カーネルを関数単位でライブラリ化して, 167 使用する関数のみをリンクできる構造とする.これは一種のコンフィギュレー 168 ションであるが,この方法は,条件コンパイルによるコンフィギュレーション 169 とは違い,検証工数に与える影響が小さい. 170 171 また,固定的に使用するRAM領域を減らし,スタックに置ける情報はできる限り 172 スタック上に置く. 173 174 175 ○システム状態とコンテキストの実装 176 177 この章では,「TOPPERS新世代カーネル統合仕様書」の「2.5 システム状態とコ 178 ンテキスト」の節に規定されているシステム状態とコンテキストの実装方法に 179 ついて記述する. 180 181 ●カーネル動作状態と非動作状態 182 183 カーネルの動作状態を管理するために,カーネル動作状態フラグ(kerflg)を 184 用意する.kerflgは,スタートアップモジュールでfalse(=0)に初期化する. 185 また,カーネル動作の開始時にtrueにし,カーネル動作の終了時にfalseにする. 263 186 264 187 ---------------------------------------- … … 266 189 ---------------------------------------- 267 190 268 kerflgã¯ï¼sns_kerã§åç 269 §ããï¼ã«ã¼ãã«éåä½ç¶æ 270 ã§sns_ker以å¤ã®ãµã¼ãã¹ 271 ã³ã¼ã«ãå¼ã³åºããå ´åã®åä½ã¯ä¿è¨¼ããå¿ 272 è¦ããªãããï¼ä»ã®ãµã¼ãã¹ã³ã¼ 273 ã«ã§ã¯kerflgãåç 274 §ããªãï¼ 275 276 âã¿ã¹ã¯ã³ã³ããã¹ãã¨éã¿ã¹ã¯ã³ã³ããã¹ã 277 278 ã¿ã¹ã¯ã³ã³ããã¹ãã¨éã¿ã¹ã¯ã³ã³ããã¹ãã®åæãã¯ï¼ã¿ã¼ã²ãããã¼ãã¦ã§ 279 ã¢ããã³ã¿ã¼ã²ããä¾åé¨ã«å§ããï¼ã¾ãï¼ã©ã¡ãã®ã³ã³ããã¹ãã§å®è¡ä¸ã§ 280 ããããå¤å¥ããé¢æ°ï¼sense_contextï¼ãï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æããã㨠281 ã¨ããï¼ 282 283 âå 284 ¨å²è¾¼ã¿ããã¯ç¶æ 285 ã¨å 286 ¨å²è¾¼ã¿ããã¯è§£é¤ç¶æ 287 288 289 å 290 ¨å²è¾¼ã¿ããã¯ãã©ã°ã®ç®¡çã¯ã¿ã¼ã²ããä¾åé¨ã«å§ãï¼å 291 ¨å²è¾¼ã¿ããã¯ç¶æ 292 293 ã«é·ç§»ããããã¯ãï¼SIL_LOC_INTï¼ã¨ï¼å 294 ã®ç¶æ 295 ã«æ»ããã¯ãï¼SIL_UNL_INTï¼ 296 ã¯ï¼SILã®ã¿ã¼ã²ããä¾åé¨ã§ç¨æãããã¨ã¨ããï¼å 297 ¨å²è¾¼ã¿ããã¯ç¶æ 298 ã§ãã 299 ãå¦ããå¤å¥ããæ©è½ã¯ï¼å¿ 300 è¦ããªãããã«ç¨æãã¦ããªãï¼ 301 302 å 303 ¨å²è¾¼ã¿ããã¯ç¶æ 304 ã§sns_kerã¨ext_ker以å¤ã®ãµã¼ãã¹ã³ã¼ã«ãå¼ã³åºããå ´ 305 åã®åä½ã¯ä¿è¨¼ããå¿ 306 è¦ããªãããï¼ãµã¼ãã¹ã³ã¼ã«ä¸ã§å 307 ¨å²è¾¼ã¿ããã¯ç¶æ 308 309 ã§ãããã¨ãå¤å¥ããå¿ 310 è¦ã¯ãªãï¼ 311 312 âCPUããã¯ç¶æ 313 ã¨CPUããã¯è§£é¤ç¶æ 314 315 316 CPUããã¯ãã©ã°ã®ç®¡çã¯ã¿ã¼ã²ããä¾åé¨ã«å§ãï¼CPUããã¯ç¶æ 317 ã«é·ç§»ãã 318 ãé¢æ°ï¼t_lock_cpuï¼i_lock_cpuï¼x_lock_cpuï¼ã¨ï¼CPUããã¯è§£é¤ç¶æ 319 ã«é·ç§» 320 ãããé¢æ°ï¼t_unlock_cpuï¼i_unlock_cpuï¼x_unlock_cpuï¼ã¯ï¼ã¿ã¼ã²ããä¾ 321 åé¨ã§ç¨æãããã¨ã¨ããï¼ã¾ãï¼CPUããã¯ç¶æ 322 ã§ãããå¦ããå¤å¥ããé¢æ° 323 ï¼t_sense_lockï¼i_sense_lockï¼x_sense_lockï¼ãï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æ 324 ãããã¨ã¨ããï¼ 325 326 âå²è¾¼ã¿åªå 327 度ãã¹ã¯ 328 329 å²è¾¼ã¿åªå 330 度ãã¹ã¯ã®ç®¡çã¯ã¿ã¼ã²ããä¾åé¨ã«å§ãï¼å²è¾¼ã¿åªå 331 度ãã¹ã¯ã 332 è¨å®ããé¢æ°ï¼t_set_ipmï¼i_set_ipmï¼x_set_ipmï¼ã¨ï¼ãããåç 333 §ããé¢æ° 334 ï¼t_get_ipmï¼i_get_ipmï¼x_get_ipmï¼ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æãããã¨ã¨ 335 ããï¼ 336 337 ãã ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã®å®è¡ä¸ã«ï¼å²è¾¼ã¿åªå 338 度ãã¹ã¯å 339 ¨è§£é¤ç¶æ 340 ã§ã 341 ããã¨ãå¹ççã«å¤æããããã«ï¼å²è¾¼ã¿åªå 342 度ãã¹ã¯å 343 ¨è§£é¤ç¶æ 344 ã§ããã㨠345 ã示ããã©ã°ï¼ipmflgï¼ãç¨æããï¼ 346 347 ipmflgã¯ï¼ã«ã¼ãã«ã®åæåæã«falseã«åæåããï¼éã¿ã¹ã¯ã³ã³ããã¹ã㧠348 ã¯ï¼å²è¾¼ã¿åªå 349 度ãã¹ã¯å 350 ¨è§£é¤ç¶æ 351 ã«ãªããã¨ã¯ãªãããï¼ãã®ãã©ã°ãç¨ã 352 ãå¿ 353 è¦ã¯ãªãï¼ãã©ã°ã®æ´æ°ãè¡ããªãï¼ 191 kerflgは,sns_kerで参照する.カーネル非動作状態でsns_ker以外のサービス 192 コールを呼び出した場合の動作は保証する必要がないため,他のサービスコー 193 ルではkerflgを参照しない. 194 195 ●タスクコンテキストと非タスクコンテキスト 196 197 タスクコンテキストと非タスクコンテキストの切換えは,ターゲットハードウェ 198 アおよびターゲット依存部に委ねる.また,どちらのコンテキストで実行中で 199 あるかを判別する関数(sense_context)も,ターゲット依存部で用意すること 200 とする. 201 202 ●全割込みロック状態と全割込みロック解除状態 203 204 全割込みロックフラグの管理はターゲット依存部に委ね,全割込みロック状態 205 に遷移させるマクロ(SIL_LOC_INT)と,元の状態に戻すマクロ(SIL_UNL_INT) 206 は,SILのターゲット依存部で用意することとする.全割込みロック状態である 207 か否かを判別する機能は,必要がないために用意していない. 208 209 全割込みロック状態でsns_kerとext_ker以外のサービスコールを呼び出した場 210 合の動作は保証する必要がないため,サービスコール中で全割込みロック状態 211 であることを判別する必要はない. 212 213 ●CPUロック状態とCPUロック解除状態 214 215 CPUロックフラグの管理はターゲット依存部に委ね,CPUロック状態に遷移させ 216 る関数(t_lock_cpu/i_lock_cpu/x_lock_cpu)と,CPUロック解除状態に遷移 217 させる関数(t_unlock_cpu/i_unlock_cpu/x_unlock_cpu)は,ターゲット依 218 存部で用意することとする.また,CPUロック状態であるか否かを判別する関数 219 (t_sense_lock/i_sense_lock/x_sense_lock)も,ターゲット依存部で用意 220 することとする. 221 222 ●割込み優先度マスク 223 224 割込み優先度マスクの管理はターゲット依存部に委ね,割込み優先度マスクを 225 設定する関数(t_set_ipm/i_set_ipm/x_set_ipm)と,それを参照する関数 226 (t_get_ipm/i_get_ipm/x_get_ipm)は,ターゲット依存部で用意することと 227 する. 228 229 ただし,タスクコンテキストの実行中に,割込み優先度マスク全解除状態であ 230 ることを効率的に判断するために,割込み優先度マスク全解除状態であること 231 を示すフラグ(ipmflg)を用意する. 232 233 ipmflgは,カーネルの初期化時にfalseに初期化する.非タスクコンテキストで 234 は,割込み優先度マスク全解除状態になることはないため,このフラグを用い 235 る必要はなく,フラグの更新も行わない. 354 236 355 237 ---------------------------------------- … … 357 239 ---------------------------------------- 358 240 359 âãã£ã¹ãããç¦æ¢ç¶æ 360 ã¨ãã£ã¹ããã許å¯ç¶æ 361 362 363 ãã£ã¹ãããç¦æ¢ãã©ã°ã管çããããã«ï¼ãã©ã°ï¼disdspï¼ãç¨æããï¼ 364 disdspã¯ï¼ã«ã¼ãã«ã®åæåæã«falseã«åæåããï¼ 241 ●ディスパッチ禁止状態とディスパッチ許可状態 242 243 ディスパッチ禁止フラグを管理するために,フラグ(disdsp)を用意する. 244 disdspは,カーネルの初期化時にfalseに初期化する. 365 245 366 246 ---------------------------------------- … … 368 248 ---------------------------------------- 369 249 370 â» disdspã§ã¯ãªãï¼ãããè«çå転ããenadspãç¨æããæ¹ãï¼ipmflgã 371 dspflgã¨ã®æ´åæ§ã®è¦³ç¹ããã¯è¯ãã£ãï¼ 372 373 âãã£ã¹ãããä¿çç¶æ 374 375 376 ãã£ã¹ãããä¿çç¶æ 377 ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã®å®è¡ä¸ï¼CPUããã¯ç¶æ 378 ï¼å² 379 è¾¼ã¿åªå 380 度ãã¹ã¯ãå 381 ¨è§£é¤ã§ãªãç¶æ 382 ï¼ãã£ã¹ãããç¦æ¢ç¶æ 383 ã®ããããï¼ã¾ 384 ãã¯ï¼ããããéãªã£ãç¶æ 385 ï¼ã§ããï¼ 386 387 ã¿ã¹ã¯ã³ã³ããã¹ãã®å®è¡ä¸ã«ï¼ãã£ã¹ãããä¿çç¶æ 388 ã§ãªããã¨ï¼ã¤ã¾ãï¼ 389 ãã£ã¹ãããã§ããç¶æ 390 ã§ãããã¨ï¼ãå¹ççã«å¤å¥ããããã«ï¼å²è¾¼ã¿åªå 391 392 度ãã¹ã¯å 393 ¨è§£é¤ç¶æ 394 ã§ããï¼ãã£ã¹ããã許å¯ç¶æ 395 ã§ããï¼ãã£ã¹ãããç¦æ¢ 396 ç¶æ 397 ã§ãªãï¼ãã¨ã示ããã©ã°ï¼dspflgï¼ãç¨æããï¼ããªãã¡ï¼å¸¸ã« 398 ãdspflg == (ipmflg && !disdsp)ãã«è¨å®ããï¼ 399 400 dspflgã¯ï¼ã«ã¼ãã«ã®åæåæã«trueã«åæåããï¼ã¾ãï¼ã¿ã¹ã¯ã³ã³ããã¹ 401 ãã«ããã¦å²è¾¼ã¿åªå 402 度ãã¹ã¯ã®å¤ãå¤æ´ããããï¼å²è¾¼ã¿ç¦æ¢ãã©ã°ãå¤æ´ 403 ããã度ã«æ´æ°ããï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§ã¯ï¼å¸¸ã«ãã£ã¹ãããä¿çç¶æ 404 405 ã§ããããï¼ãã®ãã©ã°ãç¨ããå¿ 406 è¦ã¯ãªãï¼ãã©ã°ã®æ´æ°ãè¡ããªãï¼ 250 ※ disdspではなく,それを論理反転したenadspを用意した方が,ipmflgや 251 dspflgとの整合性の観点からは良かった. 252 253 ●ディスパッチ保留状態 254 255 ディスパッチ保留状態は,非タスクコンテキストの実行中,CPUロック状態,割 256 込み優先度マスクが全解除でない状態,ディスパッチ禁止状態のいずれか(ま 257 たは,それらが重なった状態)である. 258 259 タスクコンテキストの実行中に,ディスパッチ保留状態でないこと(つまり, 260 ディスパッチできる状態であること)を効率的に判別するために,割込み優先 261 度マスク全解除状態であり,ディスパッチ許可状態である(ディスパッチ禁止 262 状態でない)ことを示すフラグ(dspflg)を用意する.すなわち,常に 263 「dspflg == (ipmflg && !disdsp)」に設定する. 264 265 dspflgは,カーネルの初期化時にtrueに初期化する.また,タスクコンテキス 266 トにおいて割込み優先度マスクの値が変更されるか,割込み禁止フラグが変更 267 される度に更新する.非タスクコンテキストでは,常にディスパッチ保留状態 268 であるため,このフラグを用いる必要はなく,フラグの更新も行わない. 407 269 408 270 ---------------------------------------- … … 411 273 412 274 413 âã¿ã¹ã¯ç¶æ 414 ã®ç®¡çã¨ã¹ã±ã¸ã¥ã¼ãªã³ã° 275 ○タスク状態の管理とスケジューリング 415 276 416 âã¿ã¹ã¯ç¶æ 417 ã®ç®¡ç 418 419 ã¿ã¹ã¯ç®¡çãããã¯ï¼TCBï¼ä¸ã®ã¿ã¹ã¯ç¶æ 420 ã管çãããã£ã¼ã«ãï¼tstatï¼ã§ 421 ã¯ï¼ã¿ã¹ã¯ç¶æ 422 ã次ã®ãããã§ãããã管çããï¼ 423 424 ãã»å®è¡ã§ããç¶æ 425 426 ãã»ä¼æ¢ç¶æ 427 428 ãã»ï¼ç義ã®ï¼å¾ 429 ã¡ç¶æ 430 431 ãã»å¼·å¶å¾ 432 ã¡ç¶æ 433 434 ãã»äºéå¾ 435 ã¡ç¶æ 436 437 438 ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 439 ã®æã«ï¼å®è¡ç¶æ 440 ã§ãããå®è¡å¯è½ç¶æ 441 ã§ãããã¯ï¼ 442 ãã®ãã£ã¼ã«ãã§ã¯ç®¡çããï¼å®è¡ç¶æ 443 ã®ã¿ã¹ã¯ã®TCBãæããã¤ã³ã¿å¤æ° 444 ï¼p_runtskï¼ã«ãã£ã¦å¤å¥ããï¼å®è¡ç¶æ 445 ã®ã¿ã¹ã¯ããªãå ´åã¯ï¼p_runtsk㯠446 NULLã«ããï¼ 277 ●タスク状態の管理 278 279 タスク管理ブロック(TCB)中のタスク状態を管理するフィールド(tstat)で 280 は,タスク状態が次のいずれであるかを管理する. 281 282 ・実行できる状態 283 ・休止状態 284 ・(狭義の)待ち状態 285 ・強制待ち状態 286 ・二重待ち状態 287 288 タスクが実行できる状態の時に,実行状態であるか実行可能状態であるかは, 289 このフィールドでは管理せず,実行状態のタスクのTCBを指すポインタ変数 290 (p_runtsk)によって判別する.実行状態のタスクがない場合は,p_runtskは 291 NULLにする. 447 292 448 293 ---------------------------------------- … … 450 295 ---------------------------------------- 451 296 452 p_runtskã¯ï¼ã«ã¼ãã«ã®åæåæã«NULLã«åæåãï¼ãã£ã¹ãããã£ã«ãã㦠453 æ´æ°ããï¼ãµã¼ãã¹ã³ã¼ã«ã®å¦çã®ä¸ã§èªã¿ã¹ã¯ã«é¢ããæ 454 å ±ãåç 455 §ããå ´å 456 ã¯ï¼p_runtskãç¨ããï¼ 457 458 âã¿ã¹ã¯ã¹ã±ã¸ã¥ã¼ã© 459 460 ã¿ã¹ã¯ã¹ã±ã¸ã¥ã¼ã©ã¯ï¼å®è¡ã§ããç¶æ 461 ã®ã¿ã¹ã¯ã®ä¸ããï¼æãåªå 462 é ä½ãé« 463 ãã¿ã¹ã¯ï¼ãããï¼æé«åªå 464 é ä½ã®ã¿ã¹ã¯ã¨å¼ã¶ï¼ã決å®ãï¼ãã®ã¿ã¹ã¯ã® 465 TCBãæããã¤ã³ã¿å¤æ°ï¼p_schedtskï¼ãè¨å®ããï¼ 297 p_runtskは,カーネルの初期化時にNULLに初期化し,ディスパッチャにおいて 298 更新する.サービスコールの処理の中で自タスクに関する情報を参照する場合 299 は,p_runtskを用いる. 300 301 ●タスクスケジューラ 302 303 タスクスケジューラは,実行できる状態のタスクの中から,最も優先順位が高 304 いタスク(これを,最高優先順位のタスクと呼ぶ)を決定し,そのタスクの 305 TCBを指すポインタ変数(p_schedtsk)を設定する. 466 306 467 307 ---------------------------------------- … … 469 309 ---------------------------------------- 470 310 471 ã¿ã¹ã¯ã¹ã±ã¸ã¥ã¼ã©ã«å¯¾ãã¦ã¯ï¼ã©ã®ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 472 ã§ããããç¥ã 473 ããå¿ 474 è¦ãããï¼ãã®ããï¼ã¿ã¹ã¯ã¹ã±ã¸ã¥ã¼ã©ã¯ï¼æ¬¡ã®2ã¤ã®é¢æ°ãç¨æããï¼ 475 476 ãã»ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 477 ã«é·ç§»ãããã¨ãç¥ãããé¢æ°ï¼make_runnableï¼ 478 ãã»ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 479 ããä»ã®ç¶æ 480 ã¸é·ç§»ãããã¨ãç¥ãããé¢æ° 481 ï¼make_non_runnableï¼ 482 483 ã¾ãï¼å¦çã®å¹çåã®ããã«ï¼ä¸ã®2ã¤ã®é¢æ°ãç¨ããã«ã¬ãã£ãã¥ã¼ãç´æ¥æ 484 ä½ãã¦ã¿ã¹ã¯ã¹ã±ã¸ã¥ã¼ã«ãè¡ãé¢æ°ã¨ãã¦ï¼æ¬¡ã®2ã¤ã®é¢æ°ãç¨æããï¼ 485 486 ãã»ã¿ã¹ã¯ã®åªå 487 度ã®å¤æ´ï¼change_priorityï¼ 488 ãã»ã¬ãã£ãã¥ã¼ã®å転ï¼rotate_ready_queueï¼ 489 490 491 âã¿ã¹ã¯ãã£ã¹ãããå¦çã®å®è£ 492 493 494 âã¿ã¹ã¯ãã£ã¹ãããå¦çã®å¿ 495 è¦ãªã¿ã¤ãã³ã° 496 497 ã¿ã¹ã¯ãã£ã¹ãããã¯ï¼å®è¡ç¶æ 498 ã®ã¿ã¹ã¯ï¼p_runtskï¼ã¨æé«åªå 499 é ä½ã®ã¿ã¹ 500 ã¯ï¼p_schedtskï¼ãä¸è´ãã¦ãããï¼ãã£ã¹ãããä¿çç¶æ 501 ã§ãªãå ´åã«è¡ãï¼ 502 ãã®ãã¨ããï¼ã¿ã¹ã¯ãã£ã¹ãããå¦çãè¡ãå¿ 503 è¦ãããã®ã¯ï¼æ¬¡ã®3ã¤ã®å ´å 504 ã§ããï¼ 505 506 (1) å®è¡ç¶æ 507 ã®ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 508 ã§ãªããªã 509 510 èªã¿ã¹ã¯ãåºç¾©ã®å¾ 511 ã¡ç¶æ 512 ã«é·ç§»ããããµã¼ãã¹ã³ã¼ã«ãï¼èªã¿ã¹ã¯ãçµäºã 513 ãããµã¼ãã¹ã³ã¼ã«ã«ããã¦ï¼ã¿ã¹ã¯ãã£ã¹ãããå¦çãè¡ãå¿ 514 è¦ãããï¼ 515 516 (2) æé«åªå 517 é ä½ã®ã¿ã¹ã¯ãå¤åãã 518 519 ã¿ã¹ã¯ã®èµ·åï¼ã¿ã¹ã¯ã®å¾ 520 ã¡è§£é¤ï¼ã¿ã¹ã¯ã®å¼·å¶å¾ 521 ã¡ããã®åéï¼ã¿ã¹ã¯ã®åª 522 å 523 度ã®å¤æ´ï¼ã¿ã¹ã¯ã®åªå 524 é ä½ã®å転ãè¡ããµã¼ãã¹ã³ã¼ã«ã«ããã¦ï¼æé«åª 525 å 526 é ä½ã®ã¿ã¹ã¯ãå¤åãï¼ãã£ã¹ãããä¿çç¶æ 527 ã§ãªãå ´åã«ã¯ï¼ã¿ã¹ã¯ã㣠528 ã¹ãããå¦çãè¡ãå¿ 529 è¦ãããï¼ 530 531 (3) ãã£ã¹ãããä¿çç¶æ 532 ã解é¤ããã 533 534 ãã£ã¹ãããä¿çç¶æ 535 ã¨ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã®å®è¡ä¸ï¼CPUããã¯ç¶æ 536 ï¼ 537 å²è¾¼ã¿åªå 538 度ãã¹ã¯ãå 539 ¨è§£é¤ã§ãªãç¶æ 540 ï¼ãã£ã¹ãããç¦æ¢ç¶æ 541 ã®ç·ç§°ã§ãã 542 ããï¼ãããã®ç¶æ 543 ã®ãããããé·ç§»ããã¿ã¤ãã³ã°ã§ï¼ã¿ã¹ã¯ãã£ã¹ããã 544 å¦çãè¡ãå¿ 545 è¦ãããï¼å 546 ·ä½çã«ã¯ï¼æ¬¡ã®ã¿ã¤ãã³ã°ã該å½ããï¼ 547 548 (3-1) éã¿ã¹ã¯ã³ã³ããã¹ãããã¿ã¹ã¯ã³ã³ããã¹ãã«é·ç§»ãã 549 550 å²è¾¼ã¿ãã³ãã©ã¾ãã¯CPUä¾å¤ãã³ãã©ããã¿ã¹ã¯ã«ãªã¿ã¼ã³ããéã«ï¼ã¿ã¹ã¯ 551 ãã£ã¹ãããå¦çãè¡ãå¿ 552 è¦ãããï¼ 553 554 (3-2) CPUããã¯ç¶æ 555 ã解é¤ããã 556 557 CPUããã¯ç¶æ 558 ã«ããã¦ã¯ï¼ä¸è¨ã®(1)ã(2)ã®ç¶æ³ãä½ãåºããµã¼ãã¹ã³ã¼ã«ã 559 å¼ã³åºããã¨ãã§ããªãï¼ãã®ããï¼CPUããã¯ç¶æ 560 ã®è§£é¤æã«ã¯ï¼ã¿ã¹ã¯ã㣠561 ã¹ãããå¦çãè¡ãå¿ 562 è¦ããªãï¼ 563 564 (3-3) å²è¾¼ã¿åªå 565 度ãã¹ã¯ãå 566 ¨è§£é¤ããã 567 568 å²è¾¼ã¿åªå 569 度ãã¹ã¯ã®å¤æ´ï¼chg_ipmï¼ã«ããå²è¾¼ã¿åªå 570 度ãã¹ã¯ãå 571 ¨è§£é¤ãã 572 ãå ´åã«ï¼ã¿ã¹ã¯ãã£ã¹ãããå¦çãè¡ãå¿ 573 è¦ãããï¼ 574 575 ã¾ãï¼ã¿ã¹ã¯ã®çµäºï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ããã®ãªã¿ã¼ã³ï¼å²è¾¼ã¿ãã³ã 576 ã©ããã®ãªã¿ã¼ã³ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ããã®ãªã¿ã¼ã³ï¼ã¿ã¤ã ã¤ãã³ã 577 ãã³ãã©ããã®ãªã¿ã¼ã³ï¼CPUä¾å¤ãã³ãã©ããã®ãªã¿ã¼ã³ã«ãã£ã¦ï¼å²è¾¼ã¿åª 578 å 579 度ãã¹ã¯ãå 580 ¨è§£é¤ãããå ´åãããï¼ãã®å ´åã«ã¯ï¼ã¿ã¹ã¯ãã£ã¹ãããå¦ 581 çãè¡ãå¿ 582 è¦ãããï¼ãã ãï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ããã³ã¿ã¤ã ã¤ãã³ã 583 ãã³ãã©ããã®ãªã¿ã¼ã³ã«ã¤ãã¦ã¯ï¼ãªã¿ã¼ã³å¾ãéã¿ã¹ã¯ã³ã³ããã¹ãã§ã 584 ãï¼ã¿ã¹ã¯ãã£ã¹ãããä¿çç¶æ 585 ãç¶ç¶ãããã¨ããï¼ã¿ã¹ã¯ãã£ã¹ãããå¦ 586 çãè¡ãå¿ 587 è¦ããªãï¼ 588 589 (3-4) ãã£ã¹ããã許å¯ç¶æ 590 ã«ãªã 591 592 ãã£ã¹ãããã®è¨±å¯ï¼ena_dspï¼ã«ããã¦ï¼ã¿ã¹ã¯ãã£ã¹ãããå¦çãè¡ãå¿ 593 è¦ 594 ãããï¼ 595 596 ã¾ãï¼ã¿ã¹ã¯ã®çµäºã¨ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ããã®ãªã¿ã¼ã³ã«ãã£ã¦ï¼ã㣠597 ã¹ããã許å¯ç¶æ 598 ã«ãªãå ´åãããï¼ãã®å ´åã«ã¯ï¼ã¿ã¹ã¯ãã£ã¹ãããå¦ç 599 ãè¡ãå¿ 600 è¦ãããï¼ 601 602 以ä¸ã«å ãã¦ï¼ã«ã¼ãã«ã®åä½éå§æã«ãï¼ã¿ã¹ã¯ãã£ã¹ãããå¦çãå¼ã³åº 603 ãï¼ 604 605 âã¿ã¹ã¯ãã£ã¹ãããã£ã®æ§é 606 607 ã¿ã¹ã¯ãã£ã¹ãããã£ã®ä¸»ãªæ©è½ã¯ï¼åæãåã®ã¿ã¹ã¯ã®ã³ã³ããã¹ãï¼ãã 608 ã»ããµã®æ±ç¨ã¬ã¸ã¹ã¿çï¼ãã¡ã¢ãªä¸ã«ä¿åãï¼åæãå¾ã®ã¿ã¹ã¯ã®ã³ã³ãã 609 ã¹ããã¡ã¢ãªä¸ãã復帰ãããã¨ã§ããï¼ããã§ï¼ä¿åï¼å¾©å¸°ããªããã°ãªã 610 ãªãã¬ã¸ã¹ã¿ã¯ï¼ã¿ã¹ã¯ãã£ã¹ãããã£ãå®è¡ãããç¶æ³ã«ãã£ã¦ï¼æ¬¡ã®ãã 611 ãªéããããï¼ 612 613 ã»ã¿ã¹ã¯ãå²è¾¼ã¿ï¼ã¾ãã¯ï¼CPUä¾å¤ï¼ã«ããããªã¨ã³ãããããå ´åã«ã¯ï¼ã 614 ãã¹ã¦ã®ã¬ã¸ã¹ã¿ãä¿åããªããã°ãªããªãï¼ã¾ãï¼ãã®ç¶æ 615 ããå®è¡åéã 616 ããå ´åã«ã¯ï¼ãã¹ã¦ã®ã¬ã¸ã¹ã¿ã復帰ããªããã°ãªããªãï¼ 617 618 ã»ã¿ã¹ã¯ãèªçºçã«ã¿ã¹ã¯ãã£ã¹ãããã£ãå¼ã³åºãå ´åã«ã¯ï¼ã¹ã¯ã©ãã㬠619 ãã¸ã¹ã¿ï¼caller saved registerï¼ä»¥å¤ã®ã¬ã¸ã¹ã¿ãä¿åããã°ããï¼ã¾ãï¼ 620 ããã®ç¶æ 621 ããå®è¡åéããå ´åã«ã¯ï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ä»¥å¤ã®ã¬ã¸ã¹ã¿ã 622 ã復帰ããã°ããï¼ 623 624 ã»ã¿ã¹ã¯ãçµäºããå ´åã«ã¯ï¼ã©ã®ã¬ã¸ã¹ã¿ãä¿åããå¿ 625 è¦ããªãï¼ 626 627 ã»ã¿ã¹ã¯ãå®è¡éå§ããå ´åã«ã¯ï¼ã©ã®ã¬ã¸ã¹ã¿ã復帰ããå¿ 628 è¦ããªãï¼ 629 630 ããã§ï¼ããããã®ç¶æ³ã§å¿ 631 è¦æä½éã®ã¬ã¸ã¹ã¿ã®ã¿ãä¿åï¼å¾©å¸°ããããã«ï¼ 632 ã¿ã¹ã¯ãã£ã¹ãããå¦çãï¼(a) ã³ã³ããã¹ãã®ä¿åå¦çï¼(b) å®è¡ããã¿ã¹ 633 ã¯ã®é¸æå¦çï¼(c) ã³ã³ããã¹ãã®å¾©å¸°å¦çã®3ã¤ã®ã¹ãããã§æ§æãï¼(a)㨠634 (c)ã®ã¹ãããã«ã¤ãã¦ã¯ï¼ã¿ã¹ã¯ãã£ã¹ãããã£ãå®è¡ãããç¶æ³æ¯ã«ç¨æã 635 ãï¼å 636 ·ä½çã«ã¯ï¼æ¬¡ã®åå¦çãè¡ãã«ã¼ãã³ãç¨æããï¼ 637 638 (a) ã³ã³ããã¹ãã®ä¿åå¦ç 639 (a-1) ã¿ã¹ã¯ãèªçºçã«å¼ã³åºããå ´åã®ä¿åå¦çï¼dispatchï¼ 640 (a-2) å²è¾¼ã¿ãã³ãã©ã®åºå£ã§å¼ã³åºãããå ´åã®ä¿åå¦çï¼ret_intï¼ 641 (a-3) CPUä¾å¤ãã³ãã©ã®åºå£ã§å¼ã³åºãããå ´åã®ä¿åå¦çï¼ret_excï¼ 642 (a-4) ã¿ã¹ã¯ã®çµäºæã®å¦çï¼exit_and_dispatchï¼ 643 (a-5) ã«ã¼ãã«ã®åä½éå§æã®å¦çï¼start_dispatchï¼ 644 (b) å®è¡ããã¿ã¹ã¯ã®é¸æï¼ãã£ã¹ãããã£æ¬ä½ï¼dispatcherï¼ 645 (c) ã³ã³ããã¹ãã®å¾©å¸°å¦ç 646 (c-1) ã¿ã¹ã¯ãèªçºçã«å¼ã³åºããå ´åã®å¾©å¸°å¦çï¼dispatch_rï¼ 647 (c-2) å²è¾¼ã¿ãã³ãã©ã®åºå£ã§å¼ã³åºãããå ´åã®å¾©å¸°å¦çï¼ret_int_rï¼ 648 (c-3) CPUä¾å¤ãã³ãã©ã®åºå£ã§å¼ã³åºãããå ´åã®å¾©å¸°å¦çï¼ret_exc_rï¼ 649 (c-4) ã¿ã¹ã¯ã®å®è¡éå§æã®å¦çï¼start_rï¼ 650 651 âã¿ã¹ã¯ã®çµäºæã®ã¿ã¹ã¯ãã£ã¹ããã 652 653 ext_tskã«ããã¿ã¹ã¯ã®çµäºæã«ï¼èµ·åè¦æ±ããã¥ã¼ã¤ã³ã°ããã¦ããã¨ï¼åã 654 ã¿ã¹ã¯ãããã«èµ·åãããï¼ãã®å ´åï¼ã¿ã¹ã¯ãã£ã¹ãããã£ã«ã¨ã£ã¦ã¯ï¼å 655 ãã¿ã¹ã¯ã¸ã®åæãã«è¦ãï¼ã¿ã¹ã¯ãã£ã¹ãããå¦çãã¹ãããå¯è½ã«æãã 656 ãï¼å®éã«ã¯ï¼åãã¿ã¹ã¯ã®ç°ãªãã¤ã³ã¹ã¿ã³ã¹ã¸ã®åæãã§ããããï¼ã¿ã¹ 657 ã¯ãã£ã¹ãããå¦çãã¹ããããã¦ã¯ãªããªãï¼ 658 659 ä¸è¿°ã®ã¿ã¹ã¯ãã£ã¹ãããã£ã®æ§é ã«ããï¼ã¿ã¹ã¯ã®çµäºæã«ã¯ï¼ããå°ç¨ã® 660 å¦çï¼exit_and_dispatchï¼ãå¼ã³åºãï¼ãã®å¦çã§ã¯ï¼å®è¡ç¶æ 661 ã®ã¿ã¹ã¯ãå 662 ç 663 §ããï¼ã³ã³ããã¹ãã®ä¿åãè¡ããã«ï¼æ¬¡ã«äºé 664 ããã¿ã¹ã¯ã®é¸æå¦çãè¡ 665 ãããï¼ã¿ã¹ã¯ãã£ã¹ãããå¦çãã¹ãããããããã¨ã¯ãªãï¼ 666 667 ãªãï¼ter_tskã«ãã£ã¦å®è¡ç¶æ 668 ã®ã¿ã¹ã¯ãçµäºããããã¨ã¯ã§ããªãããï¼ 669 ter_tskã§ã¯ãã®ãããªç¶æ³ã¯èµ·ãããªãï¼ 670 671 âreqflgã®å°å 672 ¥çç± 673 674 å²è¾¼ã¿ãã³ãã©ï¼CPUä¾å¤ãã³ãã©ã®åºå£å¦çã«ï¼ã¿ã¹ã¯ãã£ã¹ãããã¾ãã¯ã¿ 675 ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ãè¦æ±ãããã¨ã示ããã©ã°ã¨ãã¦ï¼reqflg 676 ãç¨æãã¦ããï¼éã¿ã¹ã¯ã³ã³ããã¹ãã«ããã¦ï¼ã¿ã¹ã¯ãã£ã¹ããããå¿ 677 è¦ 678 ã«ãªã£ãå ´åãï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ãå¿ 679 è¦ã«ãªã£ãå ´åã«ã¯ï¼ 680 ãã®ãã©ã°ãã»ããããï¼ 681 682 reqflgãå°å 683 ¥ããçç±ã¯ï¼å²è¾¼ã¿ãã³ãã©ï¼CPUä¾å¤ãã³ãã©ã®åºå£å¦çã®å 684 ¸å 685 çãªã±ã¼ã¹ï¼ã¿ã¹ã¯ãã£ã¹ããããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ãå¿ 686 è¦ 687 ãªãå ´åï¼ãé«éåããããã§ããï¼ã¾ãï¼ãã£ã¹ãããã£æ¬ä½ï¼dispatcherï¼ 688 ã®ã¢ã¤ãã«å¦çãé«éåã§ããï¼ 689 690 ãããï¼å²è¾¼ã¿ãã³ãã©ï¼CPUä¾å¤ãã³ãã©ã®åºå£å¦çå 691 ¨ä½ã®ãªã¼ãããããè 692 ããã¨ï¼reqflgã«ããé«éåã®å¹æã¯ããã»ã©å¤§ãããªããã®ã¨æãããï¼ 693 694 695 âã¿ã¹ã¯ä¾å¤å¦çæ©è½ã®å®è£ 696 697 698 âã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§æ¡ä»¶ã¨ã·ã¹ãã ç¶æ 699 ï¼ä»æ§ã®ç¢ºèªï¼ 700 701 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã¯ï¼æ¬¡ã®6ã¤ã®æ¡ä»¶ãæã£ãå ´åã«å®è¡ãéå§ãããï¼ 702 703 ãã»ã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 704 ã§ãã 705 ãã»ä¿çä¾å¤è¦å ã0ã§ãªã 706 ãã»ã¿ã¹ã¯ãå®è¡ç¶æ 707 ã§ãã 708 ãã»ã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ããã¦ãã 709 ãã»å²è¾¼ã¿åªå 710 度ãã¹ã¯å 711 ¨è§£é¤ç¶æ 712 ã§ãã 713 ãã»CPUããã¯ç¶æ 714 ã§ãªã 715 716 ã¾ãï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ï¼ãªã¿ã¼ã³æã®ã·ã¹ãã ç¶æ 717 ã«é¢ã 718 ãä»æ§ã¯æ¬¡ã®éãã§ããï¼ 719 720 CPUãã㯠å²è¾¼ã¿åªå 721 度 ãã£ã¹ããã 722 ãã©ã° ãã¹ã¯ ç¦æ¢ãã©ã° 311 タスクスケジューラに対しては,どのタスクが実行できる状態であるかを知ら 312 せる必要がある.そのため,タスクスケジューラは,次の2つの関数を用意する. 313 314 ・タスクが実行できる状態に遷移したことを知らせる関数(make_runnable) 315 ・タスクが実行できる状態から他の状態へ遷移したことを知らせる関数 316 (make_non_runnable) 317 318 また,処理の効率化のために,上の2つの関数を用いずにレディキューを直接操 319 作してタスクスケジュールを行う関数として,次の2つの関数を用意する. 320 321 ・タスクの優先度の変更(change_priority) 322 ・レディキューの回転(rotate_ready_queue) 323 324 325 ○タスクディスパッチ処理の実装 326 327 ●タスクディスパッチ処理の必要なタイミング 328 329 タスクディスパッチは,実行状態のタスク(p_runtsk)と最高優先順位のタス 330 ク(p_schedtsk)が一致しておらず,ディスパッチ保留状態でない場合に行う. 331 このことから,タスクディスパッチ処理を行う必要があるのは,次の3つの場合 332 である. 333 334 (1) 実行状態のタスクが実行できる状態でなくなる 335 336 自タスクを広義の待ち状態に遷移させるサービスコールや,自タスクを終了さ 337 せるサービスコールにおいて,タスクディスパッチ処理を行う必要がある. 338 339 (2) 最高優先順位のタスクが変化する 340 341 タスクの起動,タスクの待ち解除,タスクの強制待ちからの再開,タスクの優 342 先度の変更,タスクの優先順位の回転を行うサービスコールにおいて,最高優 343 先順位のタスクが変化し,ディスパッチ保留状態でない場合には,タスクディ 344 スパッチ処理を行う必要がある. 345 346 (3) ディスパッチ保留状態が解除される 347 348 ディスパッチ保留状態とは,非タスクコンテキストの実行中,CPUロック状態, 349 割込み優先度マスクが全解除でない状態,ディスパッチ禁止状態の総称である 350 ため,これらの状態のいずれかが遷移するタイミングで,タスクディスパッチ 351 処理を行う必要がある.具体的には,次のタイミングが該当する. 352 353 (3-1) 非タスクコンテキストからタスクコンテキストに遷移する 354 355 割込みハンドラまたはCPU例外ハンドラからタスクにリターンする際に,タスク 356 ディスパッチ処理を行う必要がある. 357 358 (3-2) CPUロック状態が解除される 359 360 CPUロック状態においては,上記の(1)や(2)の状況を作り出すサービスコールを 361 呼び出すことができない.そのため,CPUロック状態の解除時には,タスクディ 362 スパッチ処理を行う必要がない. 363 364 (3-3) 割込み優先度マスクが全解除される 365 366 割込み優先度マスクの変更(chg_ipm)により割込み優先度マスクが全解除され 367 る場合に,タスクディスパッチ処理を行う必要がある. 368 369 また,タスクの終了,タスク例外処理ルーチンからのリターン,割込みハンド 370 ラからのリターン,割込みサービスルーチンからのリターン,タイムイベント 371 ハンドラからのリターン,CPU例外ハンドラからのリターンによって,割込み優 372 先度マスクが全解除される場合があり,その場合には,タスクディスパッチ処 373 理を行う必要がある.ただし,割込みサービスルーチンおよびタイムイベント 374 ハンドラからのリターンについては,リターン後も非タスクコンテキストであ 375 り,タスクディスパッチ保留状態が継続することから,タスクディスパッチ処 376 理を行う必要がない. 377 378 (3-4) ディスパッチ許可状態になる 379 380 ディスパッチの許可(ena_dsp)において,タスクディスパッチ処理を行う必要 381 がある. 382 383 また,タスクの終了とタスク例外処理ルーチンからのリターンによって,ディ 384 スパッチ許可状態になる場合があり,その場合には,タスクディスパッチ処理 385 を行う必要がある. 386 387 以上に加えて,カーネルの動作開始時にも,タスクディスパッチ処理を呼び出 388 す. 389 390 ●タスクディスパッチャの構造 391 392 タスクディスパッチャの主な機能は,切換え前のタスクのコンテキスト(プロ 393 セッサの汎用レジスタ等)をメモリ上に保存し,切換え後のタスクのコンテキ 394 ストをメモリ上から復帰することである.ここで,保存/復帰しなければなら 395 ないレジスタは,タスクディスパッチャが実行される状況によって,次のよう 396 な違いがある. 397 398 ・タスクが割込み(または,CPU例外)によりプリエンプトされる場合には,す 399 べてのレジスタを保存しなければならない.また,その状態から実行再開す 400 る場合には,すべてのレジスタを復帰しなければならない. 401 402 ・タスクが自発的にタスクディスパッチャを呼び出す場合には,スクラッチレ 403 ジスタ(caller saved register)以外のレジスタを保存すればよい.また, 404 その状態から実行再開する場合には,スクラッチレジスタ以外のレジスタを 405 復帰すればよい. 406 407 ・タスクが終了する場合には,どのレジスタも保存する必要がない. 408 409 ・タスクが実行開始する場合には,どのレジスタも復帰する必要がない. 410 411 そこで,それぞれの状況で必要最低限のレジスタのみを保存/復帰するために, 412 タスクディスパッチ処理を,(a) コンテキストの保存処理,(b) 実行するタス 413 クの選択処理,(c) コンテキストの復帰処理の3つのステップで構成し,(a)と 414 (c)のステップについては,タスクディスパッチャが実行される状況毎に用意す 415 る.具体的には,次の各処理を行うルーチンを用意する. 416 417 (a) コンテキストの保存処理 418 (a-1) タスクが自発的に呼び出した場合の保存処理(dispatch) 419 (a-2) 割込みハンドラの出口で呼び出された場合の保存処理(ret_int) 420 (a-3) CPU例外ハンドラの出口で呼び出された場合の保存処理(ret_exc) 421 (a-4) タスクの終了時の処理(exit_and_dispatch) 422 (a-5) カーネルの動作開始時の処理(start_dispatch) 423 (b) 実行するタスクの選択(ディスパッチャ本体,dispatcher) 424 (c) コンテキストの復帰処理 425 (c-1) タスクが自発的に呼び出した場合の復帰処理(dispatch_r) 426 (c-2) 割込みハンドラの出口で呼び出された場合の復帰処理(ret_int_r) 427 (c-3) CPU例外ハンドラの出口で呼び出された場合の復帰処理(ret_exc_r) 428 (c-4) タスクの実行開始時の処理(start_r) 429 430 ●タスクの終了時のタスクディスパッチ 431 432 ext_tskによるタスクの終了時に,起動要求がキューイングされていると,同じ 433 タスクがすぐに起動される.この場合,タスクディスパッチャにとっては,同 434 じタスクへの切換えに見え,タスクディスパッチ処理をスキップ可能に思える 435 が,実際には,同じタスクの異なるインスタンスへの切換えであるため,タス 436 クディスパッチ処理をスキップしてはならない. 437 438 上述のタスクディスパッチャの構造により,タスクの終了時には,それ専用の 439 処理(exit_and_dispatch)を呼び出す.この処理では,実行状態のタスクを参 440 照せず,コンテキストの保存も行わずに,次に事項するタスクの選択処理を行 441 うため,タスクディスパッチ処理がスキップされることはない. 442 443 なお,ter_tskによって実行状態のタスクを終了させることはできないため, 444 ter_tskではこのような状況は起こらない. 445 446 ●reqflgの導入理由 447 448 割込みハンドラ/CPU例外ハンドラの出口処理に,タスクディスパッチまたはタ 449 スク例外処理ルーチンの実行開始を要求することを示すフラグとして,reqflg 450 を用意している.非タスクコンテキストにおいて,タスクディスパッチが必要 451 になった場合や,タスク例外処理ルーチンの実行開始が必要になった場合には, 452 このフラグをセットする. 453 454 reqflgを導入した理由は,割込みハンドラ/CPU例外ハンドラの出口処理の典型 455 的なケース(タスクディスパッチもタスク例外処理ルーチンの実行開始も必要 456 ない場合)を高速化するためである.また,ディスパッチャ本体(dispatcher) 457 のアイドル処理も高速化できる. 458 459 しかし,割込みハンドラ/CPU例外ハンドラの出口処理全体のオーバヘッドを考 460 えると,reqflgによる高速化の効果はそれほど大きくないものと思われる. 461 462 463 ○タスク例外処理機能の実装 464 465 ●タスク例外処理ルーチンの実行開始条件とシステム状態(仕様の確認) 466 467 タスク例外処理ルーチンは,次の6つの条件が揃った場合に実行が開始される. 468 469 ・タスク例外処理許可状態である 470 ・保留例外要因が0でない 471 ・タスクが実行状態である 472 ・タスクコンテキストが実行されている 473 ・割込み優先度マスク全解除状態である 474 ・CPUロック状態でない 475 476 また,タスク例外処理ルーチンの実行開始/リターン時のシステム状態に関す 477 る仕様は次の通りである. 478 479 CPUロック 割込み優先度 ディスパッチ 480 フラグ マスク 禁止フラグ 723 481 ------------------------------------------------------------ 724 ãã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã 725 å®è¡éå§æ¡ä»¶ è§£é¤ å 726 ¨è§£é¤ ä»»æ 727 å®è¡éå§æå¦ç ãã®ã¾ã¾ ãã®ã¾ã¾ ãã®ã¾ã¾ 728 ãªã¿ã¼ã³å åå解é¤(*1) ååå 729 ¨è§£é¤(*1) å 730 ã«æ»ã 731 ãªã¿ã¼ã³æå¦ç 解é¤ãã å 732 ¨è§£é¤ãã å 733 ã«æ»ã(*4) 482 【タスク例外処理ルーチン】 483 実行開始条件 解除 全解除 任意 484 実行開始時処理 そのまま そのまま そのまま 485 リターン前 原則解除(*1) 原則全解除(*1) 元に戻す 486 リターン時処理 解除する 全解除する 元に戻す(*4) 734 487 ------------------------------------------------------------ 735 488 736 âã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å¼åºãå¦ç 737 738 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºãå¦çã¯ï¼æ¬¡ã®æµãã¨ãªãï¼ãã®é¢æ°ã¯ï¼ 739 CPUããã¯ç¶æ 740 ã§å¼ã³åºããã¨ãæ³å®ãã¦ããï¼ 489 ●タスク例外処理ルーチンの呼出し処理 490 491 タスク例外処理ルーチンを呼び出す処理は,次の流れとなる.この関数は, 492 CPUロック状態で呼び出すことを想定している. 741 493 742 494 ---------------------------------------- … … 749 501 p_runtsk->texptn = 0U; 750 502 751 ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 752 ã«ãã 753 ãã£ã¹ãããç¦æ¢ãã©ã°ãä¿åãã 754 755 CPUããã¯è§£é¤ç¶æ 756 ã«ãã 757 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºã 758 CPUããã¯ç¶æ 759 ã«ãã 760 761 å²è¾¼ã¿åªå 762 度ãã¹ã¯å 763 ¨è§£é¤ç¶æ 764 ã«ãã 765 ãã£ã¹ãããç¦æ¢ãã©ã°ãå 766 ã«æ»ã 767 ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 768 ã«ãã ⦠(*2) 769 770 å¿ 771 è¦ãªå ´åã«ã¯ãã£ã¹ããããè¡ã ⦠(*1) 772 773 ã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 774 ã«ãã 503 タスク例外処理禁止状態にする 504 ディスパッチ禁止フラグを保存する 505 506 CPUロック解除状態にする 507 タスク例外処理ルーチンを呼び出す 508 CPUロック状態にする 509 510 割込み優先度マスク全解除状態にする 511 ディスパッチ禁止フラグを元に戻す 512 タスク例外処理禁止状態にする … (*2) 513 514 必要な場合にはディスパッチを行う … (*1) 515 516 タスク例外処理許可状態にする 775 517 } 776 518 ---------------------------------------- 777 519 778 (*1)ã«ããã¦ï¼å¿ 779 è¦ãªå ´åã«ã¿ã¹ã¯åæããè¡ãã®ã¯ï¼å²è¾¼ã¿åªå 780 度ãã¹ã¯ã 781 å 782 ¨è§£é¤ã«ãï¼ãã£ã¹ãããç¦æ¢ãã©ã°ãå 783 ã«æ»ããçµæï¼ãã£ã¹ãããä¿çç¶ 784 æ 785 ã解é¤ããï¼ãã£ã¹ããããå¿ 786 è¦ã«ãªãå ´åãããããã§ããï¼ 787 788 ã¾ãï¼ãã£ã¹ããããè¡ãåã«ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 789 ã«ãã(*2)çç±ã«ã¤ã 790 ã¦ã¯ï¼ãcall_texrtnããdispatchãå¼ã³åºãå¦çã«ã¤ãã¦ãã®ç¯ãåç 791 §ããã 792 ã¨ï¼ 793 794 âã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ãå¿ 795 è¦ãªã¿ã¤ãã³ã° 796 797 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã¯ï¼åè¿°ã®6ã¤ã®æ¡ä»¶ãæã£ãå ´åã«å®è¡éå§ãã¹ã㧠798 ããããï¼6ã¤ã®æ¡ä»¶ã®ãããããæ°ãã«æºããããã«ãªãå¯è½æ§ã®ããã¿ã¤ã 799 ã³ã°ã§ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ãå¿ 800 è¦ã«ãªãï¼ 801 802 以ä¸ã§ã¯ï¼6ã¤ã®æ¡ä»¶ã®ãããããæ°ãã«æºããããã«ãªãã¿ã¤ãã³ã°ã«ã¤ã㦠803 æ¤è¨ããï¼ 804 805 (1) ã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 806 ã§ãã 807 808 ã¿ã¹ã¯ä¾å¤å¦çã®è¨±å¯ï¼ena_texï¼ã«ãã£ã¦ï¼ã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 809 ã«ãªãï¼ 810 ã¾ãï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ããã®ãªã¿ã¼ã³ã«ãã£ã¦ãï¼ã¿ã¹ã¯ä¾å¤å¦ç許 811 å¯ç¶æ 812 ã«ãªãï¼ 813 814 (2) ä¿çä¾å¤è¦å ã0ã§ãªã 815 816 ã¿ã¹ã¯ä¾å¤å¦çã®è¦æ±ï¼ras_texï¼iras_texï¼ã«ãã£ã¦ï¼ã¿ã¹ã¯ã®ä¿çä¾å¤è¦å 817 ã0ã§ãªããªãï¼ãã ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãããã®ã¿ã¹ã¯ä¾å¤å¦çã®è¦æ± 818 ï¼iras_texï¼ã§ã¯ï¼(4)ã®æ¡ä»¶ãæºããããªãããï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã® 819 å®è¡éå§ã¯å¿ 820 è¦ãªãï¼ 821 822 (3) ã¿ã¹ã¯ãå®è¡ç¶æ 823 ã§ãã 824 825 ã¿ã¹ã¯ãã£ã¹ãããã£ã«ããï¼åæãå¾ã®ã¿ã¹ã¯ãå®è¡ç¶æ 826 ã«ãªãï¼ 827 828 (4) ã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ããã¦ãã 829 830 å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ããã®ãªã¿ã¼ã³ã«ãã£ã¦ï¼ã¿ã¹ã¯ã³ã³ã 831 ãã¹ãã«æ»ãå ´åãããï¼ 832 833 (5) å²è¾¼ã¿åªå 834 度ãã¹ã¯å 835 ¨è§£é¤ç¶æ 836 ã§ãã 837 838 å²è¾¼ã¿åªå 839 度ãã¹ã¯ã®å¤æ´ï¼chg_ipmï¼ã«ãã£ã¦ï¼å²è¾¼ã¿åªå 840 度ãã¹ã¯ãå 841 ¨è§£é¤ 842 ã«ãªãï¼ 843 844 ã¾ãï¼ã¿ã¹ã¯ã®çµäºï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ããã®ãªã¿ã¼ã³ï¼å²è¾¼ã¿ãã³ã 845 ã©ããã®ãªã¿ã¼ã³ï¼CPUä¾å¤ãã³ãã©ããã®ãªã¿ã¼ã³ã«ãã£ã¦ãï¼å²è¾¼ã¿åªå 846 度 847 ãã¹ã¯ãå 848 ¨è§£é¤ãããå ´åãããï¼ 849 850 ãã ãï¼ã¿ã¹ã¯ã®çµäºæã«ã¤ãã¦ã¯ï¼ã¿ã¹ã¯ã®çµäºå¾ã¯å¥ã®ã¿ã¹ã¯ã¸åãæã 851 ãããï¼åãæãã£ãå¾ã®ã¿ã¹ã¯ã«å¯¾ããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ 852 ãï¼ã¿ã¹ã¯ãã£ã¹ãããå¾ã®å¦çã§è¡ãã°ããï¼ 853 854 (6) CPUããã¯ç¶æ 855 ã§ãªã 856 857 CPUããã¯ç¶æ 858 ã®è§£é¤ï¼unl_cpuï¼iunl_cpuï¼ã«ãã£ã¦ï¼CPUããã¯ç¶æ 859 ã§ãªã㪠860 ãï¼ãã ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§ã®CPUããã¯ç¶æ 861 ã®è§£é¤ï¼iunl_cpuï¼ã§ã¯ï¼ 862 (4)ã®æ¡ä»¶ãæºããããªãããï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ã¯å¿ 863 è¦ãªãï¼ 864 865 ã¾ãï¼ã¿ã¹ã¯ã®çµäºï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ããã®ãªã¿ã¼ã³ï¼å²è¾¼ã¿ãã³ã 866 ã©ããã®ãªã¿ã¼ã³ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ããã®ãªã¿ã¼ã³ï¼ã¿ã¤ã ã¤ãã³ã 867 ãã³ãã©ããã®ãªã¿ã¼ã³ï¼CPUä¾å¤ãã³ãã©ããã®ãªã¿ã¼ã³ã«ãã£ã¦ï¼CPUãã 868 ã¯ç¶æ 869 ã§ãªããªãå ´åãããï¼ 870 871 ãã ãï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ããã³ã¿ã¤ã ã¤ãã³ããã³ãã©ããã®ãªã¿ã¼ 872 ã³ã«ã¤ãã¦ã¯ï¼ãªã¿ã¼ã³å¾ãéã¿ã¹ã¯ã³ã³ããã¹ãã®å®è¡ãç¶ãï¼(4)ã®æ¡ä»¶ã 873 æºããããªãããï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ã¯å¿ 874 è¦ãªãï¼ 875 876 ã¿ã¹ã¯ã®çµäºæã«ã¤ãã¦ã¯ï¼ã¿ã¹ã¯ã®çµäºå¾ã¯å¥ã®ã¿ã¹ã¯ã¸åãæããããï¼ 877 åãæãã£ãå¾ã®ã¿ã¹ã¯ã«å¯¾ããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ãï¼ã¿ã¹ 878 ã¯ãã£ã¹ãããå¾ã®å¦çã§è¡ãã°ããï¼ 879 880 以ä¸ããï¼éè¤ããã±ã¼ã¹ãèæ 881 ®ããã¨ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ 882 ãå¿ 883 è¦ã«ãªãå¯è½æ§ãããã®ã¯ï¼ä»¥ä¸ã®å¦çã§ããï¼ 884 885 (a) ã¿ã¹ã¯ä¾å¤å¦çã®è¨±å¯ï¼ena_texï¼â¦ (1) 886 (b) ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®åºå£å¦ç ⦠(1)(5)(6) 887 (c) ã¿ã¹ã¯ä¾å¤å¦çã®è¦æ±ï¼ras_texï¼â¦ (2) 888 (d) ã¿ã¹ã¯ãã£ã¹ãããå¾ã®å¦ç ⦠(3)(5)(6) 520 (*1)において,必要な場合にタスク切換えを行うのは,割込み優先度マスクを 521 全解除にし,ディスパッチ禁止フラグを元に戻した結果,ディスパッチ保留状 522 態が解除され,ディスパッチが必要になる場合があるためである. 523 524 また,ディスパッチを行う前にタスク例外処理禁止状態にする(*2)理由につい 525 ては,「call_texrtnからdispatchを呼び出す処理について」の節を参照するこ 526 と. 527 528 ●タスク例外処理ルーチンの実行開始が必要なタイミング 529 530 タスク例外処理ルーチンは,前述の6つの条件が揃った場合に実行開始すべきで 531 あるため,6つの条件のいずれかを新たに満たすようになる可能性のあるタイミ 532 ングで,タスク例外処理ルーチンの実行開始が必要になる. 533 534 以下では,6つの条件のいずれかを新たに満たすようになるタイミングについて 535 検討する. 536 537 (1) タスク例外処理許可状態である 538 539 タスク例外処理の許可(ena_tex)によって,タスク例外処理許可状態になる. 540 また,タスク例外処理ルーチンからのリターンによっても,タスク例外処理許 541 可状態になる. 542 543 (2) 保留例外要因が0でない 544 545 タスク例外処理の要求(ras_tex,iras_tex)によって,タスクの保留例外要因 546 が0でなくなる.ただし,非タスクコンテキストからのタスク例外処理の要求 547 (iras_tex)では,(4)の条件が満たされないため,タスク例外処理ルーチンの 548 実行開始は必要ない. 549 550 (3) タスクが実行状態である 551 552 タスクディスパッチャにより,切換え後のタスクが実行状態になる. 553 554 (4) タスクコンテキストが実行されている 555 556 割込みハンドラおよびCPU例外ハンドラからのリターンによって,タスクコンテ 557 キストに戻る場合がある. 558 559 (5) 割込み優先度マスク全解除状態である 560 561 割込み優先度マスクの変更(chg_ipm)によって,割込み優先度マスクが全解除 562 になる. 563 564 また,タスクの終了,タスク例外処理ルーチンからのリターン,割込みハンド 565 ラからのリターン,CPU例外ハンドラからのリターンによっても,割込み優先度 566 マスクが全解除される場合もある. 567 568 ただし,タスクの終了時については,タスクの終了後は別のタスクへ切り換わ 569 るため,切り換わった後のタスクに対するタスク例外処理ルーチンの実行開始 570 を,タスクディスパッチ後の処理で行えばよい. 571 572 (6) CPUロック状態でない 573 574 CPUロック状態の解除(unl_cpu,iunl_cpu)によって,CPUロック状態でなくな 575 る.ただし,非タスクコンテキストでのCPUロック状態の解除(iunl_cpu)では, 576 (4)の条件が満たされないため,タスク例外処理ルーチンの実行開始は必要ない. 577 578 また,タスクの終了,タスク例外処理ルーチンからのリターン,割込みハンド 579 ラからのリターン,割込みサービスルーチンからのリターン,タイムイベント 580 ハンドラからのリターン,CPU例外ハンドラからのリターンによって,CPUロッ 581 ク状態でなくなる場合もある. 582 583 ただし,割込みサービスルーチンおよびタイムイベントハンドラからのリター 584 ンについては,リターン後も非タスクコンテキストの実行が続き,(4)の条件が 585 満たされないため,タスク例外処理ルーチンの実行開始は必要ない. 586 587 タスクの終了時については,タスクの終了後は別のタスクへ切り換わるため, 588 切り換わった後のタスクに対するタスク例外処理ルーチンの実行開始を,タス 589 クディスパッチ後の処理で行えばよい. 590 591 以上より,重複するケースを考慮すると,タスク例外処理ルーチンの実行開始 592 が必要になる可能性があるのは,以下の処理である. 593 594 (a) タスク例外処理の許可(ena_tex)… (1) 595 (b) タスク例外処理ルーチンの出口処理 … (1)(5)(6) 596 (c) タスク例外処理の要求(ras_tex)… (2) 597 (d) タスクディスパッチ後の処理 … (3)(5)(6) 889 598 (d-1) dispatch_r 890 599 (d-2) ret_int_r 891 600 (d-3) ret_exc_r 892 601 (d-4) start_r 893 (e) å²è¾¼ã¿ãã³ãã©ã®åºå£å¦ç ⦠(4)(5)(6) 894 (f) CPUä¾å¤ãã³ãã©ã®åºå£å¦ç ⦠(4)(5)(6) 895 (g) å²è¾¼ã¿åªå 896 度ãã¹ã¯ã®å¤æ´ï¼chg_ipmï¼â¦ (5) 897 (h) CPUããã¯ç¶æ 898 ã®è§£é¤ï¼unl_cpuï¼â¦ (6) 899 900 ãã®ä¸ã§(d-4)ã«é¢ãã¦ã¯ï¼ã¿ã¹ã¯ã®å®è¡éå§ç´å¾ã¯ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 901 㧠902 ããï¼èªã¿ã¹ã¯ãena_texããã¾ã§ã¯ï¼ã¿ã¹ã¯ä¾å¤ã許å¯ãããªãï¼ï¼(1)ã®æ¡ 903 件ãæºããããªãããï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ã¯å¿ 904 è¦ãªãï¼ 905 906 ã¾ã(h)ã«é¢ãã¦ã¯ï¼æ¬¡ã«è¿°ã¹ãçç±ã«ããï¼CPUããã¯ç¶æ 907 ãç¶ç¶ãã¦ããé 908 ã«ä»ã®5ã¤ã®æ¡ä»¶ãæ°ãã«æºãããããã¨ã¯ãªãããï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ 909 ã®å®è¡éå§ã¯å¿ 910 è¦ãªãï¼ 911 912 CPUããã¯ç¶æ 913 ã§ã¯ï¼ã¾ãï¼ã¿ã¹ã¯ä¾å¤å¦çã®è¨±å¯ï¼ena_texï¼ï¼ã¿ã¹ã¯ä¾å¤å¦ 914 çã®è¦æ±ï¼ras_texï¼iras_texï¼ï¼å²è¾¼ã¿åªå 915 度ãã¹ã¯ã®å¤æ´ï¼chg_ipmï¼ãè¡ 916 ããã¨ã¯ã§ããï¼ã¿ã¹ã¯ãã£ã¹ããããèµ·ãããªãï¼CPUããã¯ç¶æ 917 ã§ã¿ã¹ã¯ä¾ 918 å¤å¦çã«ã¼ãã³ãããªã¿ã¼ã³ãããã¨ã¯ã§ãããï¼ãã®å ´åã¯CPUããã¯ç¶æ 919 ã 920 解é¤ããï¼CPUããã¯ç¶æ 921 ãç¶ç¶ããªãï¼CPUããã¯ç¶æ 922 ã§å²è¾¼ã¿ãã³ãã©ãã 923 ãªã¿ã¼ã³ããå ´åãï¼ããã¨åæ§ã§ããï¼ 924 925 æå¾ã«ï¼CPUããã¯ç¶æ 926 ã§CPUä¾å¤ãã³ãã©ãããªã¿ã¼ã³ããå ´åãåé¡ã«ãªãï¼ 927 ããã«ã¤ãã¦ã¯ï¼CPUä¾å¤ãçºçããæã«ï¼CPUããã¯ç¶æ 928 ã§ãã£ãå ´åã¨ï¼ 929 CPUããã¯è§£é¤ç¶æ 930 ã§ãã£ãå ´åã«åãã¦èããï¼CPUããã¯è§£é¤ç¶æ 931 ã§ãã£ã 932 å ´åã«ã¯ï¼CPUä¾å¤ãã³ãã©ããã®ãªã¿ã¼ã³ã«ããï¼CPUããã¯ç¶æ 933 ã解é¤ãã 934 ãããï¼å²è¾¼ã¿ãã³ãã©ãããªã¿ã¼ã³ããå ´åã¨åæ§ã§ããï¼CPUããã¯ç¶æ 935 㧠936 ãã£ãå ´åã«ã¯ï¼èµ·åãããCPUä¾å¤ãã³ãã©ã¯ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ãã³ 937 ãã©ã§ããããï¼ãã®ä¸ã§(1)ï½(3)ã¨(5)ã®æ¡ä»¶ãæ°ãã«æºãããããã¨ã¯ãªãï¼ 938 CPUä¾å¤ãã³ãã©ã®å®è¡åå¾ã§(4)ã®æ¡ä»¶ã¯ä¿åããããã¨ããï¼CPUä¾å¤ãã³ã 939 ã©ããã®ãªã¿ã¼ã³ã«ãã£ã¦ï¼(1)ï½(5)ã®æ¡ä»¶ã¯CPUä¾å¤ã®çºçåã«æ»ãï¼æ°ãã« 940 æºãããããã¨ã¯ãªãï¼ 941 942 âã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§å¦ç 943 944 ããã§ã¯ï¼åã®ç¯ã§æ¤è¨ããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§ãå¿ 945 è¦ãªã¿ã¤ 946 ãã³ã°ã®ããããã«ã¤ãã¦ï¼å®è¡éå§å¦çã®å®è£ 947 æ¹æ³ã«ã¤ãã¦è¿°ã¹ãï¼ 948 949 (a) ã¿ã¹ã¯ä¾å¤å¦çã®è¨±å¯ï¼ena_texï¼ 950 951 ena_texãã¿ã¹ã¯ããå¼ã³åºãããå ´åã«ã¯ï¼èªã¿ã¹ã¯ã«å¯¾ãã¦ãã¿ã¹ã¯ãå®è¡ 952 ç¶æ 953 ã§ããããã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ããã¦ãããã®2æ¡ä»¶ã¯æºãããã¦ã 954 ãï¼ãã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 955 ã§ãããã®æ¡ä»¶ã¯ena_texã®å¦çã«ããæºããã 956 ãï¼ã¾ãï¼ãCPUããã¯ç¶æ 957 ã§ãªããã®æ¡ä»¶ã¯ena_texã®å 958 ¥å£ã§ãã§ãã¯ãã¦ã 959 ãï¼ãã®ããï¼ãä¿çä¾å¤è¦å ã0ã§ãªããã¨ãå²è¾¼ã¿åªå 960 度ãã¹ã¯å 961 ¨è§£é¤ç¶æ 962 963 ã§ãããã®2æ¡ä»¶ãæºãããã¦ããå ´åã«ã¯ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åº 964 ãï¼ 965 966 ena_texã®æ¬ä½ã®å¦çï¼ã¨ã©ã¼å¦çãé¤ãï¼ã¯æ¬¡ã®éãï¼ 602 (e) 割込みハンドラの出口処理 … (4)(5)(6) 603 (f) CPU例外ハンドラの出口処理 … (4)(5)(6) 604 (g) 割込み優先度マスクの変更(chg_ipm)… (5) 605 (h) CPUロック状態の解除(unl_cpu)… (6) 606 607 この中で(d-4)に関しては,タスクの実行開始直後はタスク例外処理禁止状態で 608 あり(自タスクがena_texするまでは,タスク例外が許可されない),(1)の条 609 件が満たされないため,タスク例外処理ルーチンの実行開始は必要ない. 610 611 また(h)に関しては,次に述べる理由により,CPUロック状態が継続している間 612 に他の5つの条件が新たに満たされることはないため,タスク例外処理ルーチン 613 の実行開始は必要ない. 614 615 CPUロック状態では,まず,タスク例外処理の許可(ena_tex),タスク例外処 616 理の要求(ras_tex,iras_tex),割込み優先度マスクの変更(chg_ipm)を行 617 うことはできず,タスクディスパッチも起こらない.CPUロック状態でタスク例 618 外処理ルーチンからリターンすることはできるが,この場合はCPUロック状態も 619 解除され,CPUロック状態が継続しない.CPUロック状態で割込みハンドラから 620 リターンした場合も,これと同様である. 621 622 最後に,CPUロック状態でCPU例外ハンドラからリターンした場合が問題になる. 623 これについては,CPU例外が発生した時に,CPUロック状態であった場合と, 624 CPUロック解除状態であった場合に分けて考える.CPUロック解除状態であった 625 場合には,CPU例外ハンドラからのリターンにより,CPUロック状態が解除され 626 るため,割込みハンドラからリターンした場合と同様である.CPUロック状態で 627 あった場合には,起動されるCPU例外ハンドラはカーネル管理外のCPU例外ハン 628 ドラであるため,その中で(1)~(3)と(5)の条件が新たに満たされることはない. 629 CPU例外ハンドラの実行前後で(4)の条件は保存されることから,CPU例外ハンド 630 ラからのリターンによって,(1)~(5)の条件はCPU例外の発生前に戻り,新たに 631 満たされることはない. 632 633 ●タスク例外処理ルーチンの実行開始処理 634 635 ここでは,前の節で検討したタスク例外処理ルーチンの実行開始が必要なタイ 636 ミングのそれぞれについて,実行開始処理の実装方法について述べる. 637 638 (a) タスク例外処理の許可(ena_tex) 639 640 ena_texがタスクから呼び出された場合には,自タスクに対して「タスクが実行 641 状態である」「タスクコンテキストが実行されている」の2条件は満たされてお 642 り,「タスク例外処理許可状態である」の条件はena_texの処理により満たされ 643 る.また,「CPUロック状態でない」の条件はena_texの入口でチェックしてい 644 る.そのため,「保留例外要因が0でない」と「割込み優先度マスク全解除状態 645 である」の2条件が満たされている場合には,タスク例外処理ルーチンを呼び出 646 す. 647 648 ena_texの本体の処理(エラー処理を除く)は次の通り. 967 649 968 650 ---------------------------------------- … … 973 655 ---------------------------------------- 974 656 975 (b) ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®åºå£å¦ç 976 977 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®åºå£å¦çï¼call_texrtnã®å¾åï¼ã§ã¯ï¼èªã¿ã¹ã¯ã«å¯¾ 978 ãã¦ãã¿ã¹ã¯ãå®è¡ç¶æ 979 ã§ããããã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ããã¦ãããã® 980 2æ¡ä»¶ã¯æºãããã¦ããï¼ãã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 981 ã§ããããå²è¾¼ã¿åªå 982 度ã 983 ã¹ã¯å 984 ¨è§£é¤ç¶æ 985 ã§ããããCPUããã¯ç¶æ 986 ã§ãªããã®3æ¡ä»¶ãåºå£å¦çã§æºãã 987 ããï¼ãã®ããï¼ãä¿çä¾å¤è¦å ã0ã§ãªãããæºãããã¦ããå ´åã«ã¯ï¼ã¿ã¹ 988 ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºãå¿ 989 è¦ãããï¼ 990 991 ãã ãï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®åºå£å¦çã§åç´ã«call_texrtnãå¼ã³åºãã¨ï¼ 992 call_texrtnã®ä¸ããcall_texrtnãå¼ã³åºããã¨ã«ãªãï¼ã¿ã¹ã¯ä¾å¤å¦çãç¹° 993 ãè¿ãè¦æ±ãããå ´åã«ï¼ã¹ã¿ãã¯ã®ä½¿ç¨éã«ä¸éããªããªãï¼ããã§ï¼ã¿ã¹ 994 ã¯ä¾å¤å¦çã«ã¼ãã³ã®åºå£å¦çã§ãä¿çä¾å¤è¦å ã0ã§ãªããå ´åã«ã¯ï¼ 995 call_texrtnã®ä¸ã§ã«ã¼ããããï¼ 996 997 ä¿®æ£ããcall_texrtnã®æµãã¯æ¬¡ã®éãï¼ 657 (b) タスク例外処理ルーチンの出口処理 658 659 タスク例外処理ルーチンの出口処理(call_texrtnの後半)では,自タスクに対 660 して「タスクが実行状態である」「タスクコンテキストが実行されている」の 661 2条件は満たされており,「タスク例外処理許可状態である」「割込み優先度マ 662 スク全解除状態である」「CPUロック状態でない」の3条件が出口処理で満たさ 663 れる.そのため,「保留例外要因が0でない」が満たされている場合には,タス 664 ク例外処理ルーチンを呼び出す必要がある. 665 666 ただし,タスク例外処理ルーチンの出口処理で単純にcall_texrtnを呼び出すと, 667 call_texrtnの中からcall_texrtnを呼び出すことになり,タスク例外処理が繰 668 り返し要求された場合に,スタックの使用量に上限がなくなる.そこで,タス 669 ク例外処理ルーチンの出口処理で「保留例外要因が0でない」場合には, 670 call_texrtnの中でループさせる. 671 672 修正したcall_texrtnの流れは次の通り. 998 673 999 674 ---------------------------------------- … … 1003 678 TEXPTN texptn; 1004 679 1005 ãã£ã¹ãããç¦æ¢ãã©ã°ãä¿åãã ⦠(*3) 1006 ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 1007 ã«ãã ⦠(*6) 680 ディスパッチ禁止フラグを保存する … (*3) 681 タスク例外処理禁止状態にする … (*6) 1008 682 1009 683 do { … … 1011 685 p_runtsk->texptn = 0U; 1012 686 1013 CPUããã¯è§£é¤ç¶æ 1014 ã«ãã 1015 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºã 1016 CPUããã¯ç¶æ 1017 ã«ãã 1018 1019 å²è¾¼ã¿åªå 1020 度ãã¹ã¯å 1021 ¨è§£é¤ç¶æ 1022 ã«ãã 1023 ãã£ã¹ãããç¦æ¢ãã©ã°ãå 1024 ã«æ»ã ⦠(*4) 1025 ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 1026 ã«ãã ⦠(*2) 1027 1028 å¿ 1029 è¦ãªå ´åã«ã¯ãã£ã¹ããããè¡ã ⦠(*1) 687 CPUロック解除状態にする 688 タスク例外処理ルーチンを呼び出す 689 CPUロック状態にする 690 691 割込み優先度マスク全解除状態にする 692 ディスパッチ禁止フラグを元に戻す … (*4) 693 タスク例外処理禁止状態にする … (*2) 694 695 必要な場合にはディスパッチを行う … (*1) 1030 696 } while (p_runtsk->texptn != 0U); 1031 697 1032 ã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 1033 ã«ãã ⦠(*5) 698 タスク例外処理許可状態にする … (*5) 1034 699 } 1035 700 ---------------------------------------- 1036 701 1037 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å¼åºãåã«ãã£ã¹ãããç¦æ¢ãã©ã°ãä¿åããå¦ç 1038 ã¯ï¼(*4)ã«ããã¦å 1039 ã®ç¶æ 1040 ã«æ»ããã¨ããï¼ã«ã¼ãã®å¤(*3)ã§è¡ãã®ãå¹çã 1041 ããï¼ 1042 1043 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å¼åºãåã«ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 1044 ã«ããå¦çã¯ï¼ 1045 (*2)ã«ããã¦ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 1046 ã«ãããã¨ããï¼ã«ã¼ãå¤(*6)ã§è¡ãã® 1047 ãå¹çãããï¼ã¾ãï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å¼åºãå¾ã«ã¿ã¹ã¯ä¾å¤å¦ç許 1048 å¯ç¶æ 1049 ã«ããå¦çãï¼ã«ã¼ãã®å¤(*5)ã§è¡ãæ¹ãå¹çãããï¼ 1050 1051 (c) ã¿ã¹ã¯ä¾å¤å¦çã®è¦æ±ï¼ras_texï¼ 1052 1053 ras_texãã¿ã¹ã¯ããå¼ã³åºãããå ´åã§ï¼å¯¾è±¡ã¿ã¹ã¯ãèªã¿ã¹ã¯ã®å ´åã«ã¯ï¼ 1054 èªã¿ã¹ã¯ã«å¯¾ãã¦ãã¿ã¹ã¯ãå®è¡ç¶æ 1055 ã§ããããã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ã 1056 ãã¦ãããã®2æ¡ä»¶ã¯æºãããã¦ããï¼ãä¿çä¾å¤è¦å ã0ã§ãªããã®æ¡ä»¶ã¯ 1057 ras_texã®å¦çã«ããæºããããï¼ras_texã®ãã©ã¡ã¼ã¿rasptnã0ã®å ´åã¯ã¨ã©ã¼ 1058 ã¨ãªãããï¼ï¼ã¾ãï¼ãCPUããã¯ç¶æ 1059 ã§ãªããã®æ¡ä»¶ã¯ras_texã®å 1060 ¥å£ã§ãã§ã 1061 ã¯ãã¦ããï¼ãã®ããï¼å¯¾è±¡ã¿ã¹ã¯ãèªã¿ã¹ã¯ã§ããï¼ãã¿ã¹ã¯ä¾å¤å¦çè¨±å¯ 1062 ç¶æ 1063 ã§ãããã¨ãå²è¾¼ã¿åªå 1064 度ãã¹ã¯å 1065 ¨è§£é¤ç¶æ 1066 ã§ãããã®2æ¡ä»¶ãæºããã㦠1067 ããå ´åã«ã¯ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºãï¼ 1068 1069 ras_texã®æ¬ä½ã®å¦çï¼ã¨ã©ã¼å¦çãé¤ãï¼ã¯æ¬¡ã®éãï¼ 702 タスク例外処理ルーチンの呼出し前にディスパッチ禁止フラグを保存する処理 703 は,(*4)において元の状態に戻すことから,ループの外(*3)で行うのが効率が 704 よい. 705 706 タスク例外処理ルーチンの呼出し前にタスク例外処理禁止状態にする処理は, 707 (*2)においてタスク例外処理禁止状態にすることから,ループ外(*6)で行うの 708 が効率がよい.また,タスク例外処理ルーチンの呼出し後にタスク例外処理許 709 可状態にする処理も,ループの外(*5)で行う方が効率がよい. 710 711 (c) タスク例外処理の要求(ras_tex) 712 713 ras_texがタスクから呼び出された場合で,対象タスクが自タスクの場合には, 714 自タスクに対して「タスクが実行状態である」「タスクコンテキストが実行さ 715 れている」の2条件は満たされており,「保留例外要因が0でない」の条件は 716 ras_texの処理により満たされる(ras_texのパラメータrasptnが0の場合はエラー 717 となるため).また,「CPUロック状態でない」の条件はras_texの入口でチェッ 718 クしている.そのため,対象タスクが自タスクであり,「タスク例外処理許可 719 状態である」と「割込み優先度マスク全解除状態である」の2条件が満たされて 720 いる場合には,タスク例外処理ルーチンを呼び出す. 721 722 ras_texの本体の処理(エラー処理を除く)は次の通り. 1070 723 1071 724 ---------------------------------------- … … 1078 731 (d-1) dispatch_r 1079 732 1080 dispatch_rã«ããã¦ã¯ï¼dispatch_rããã®ãªã¿ã¼ã³å 1081 ã®ã¿ã¹ã¯ã«å¯¾ãã¦ï¼ãã¿ 1082 ã¹ã¯ãå®è¡ç¶æ 1083 ã§ããããã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ããã¦ãããã®2æ¡ä»¶ã¯æº 1084 ãããã¦ããï¼ã¾ãï¼CPUããã¯ç¶æ 1085 ã§dispatch_rã«æ¥ããã¨ã¯ãªãããï¼ 1086 ãCPUããã¯ç¶æ 1087 ã§ãªããã®æ¡ä»¶ãæç«ãã¦ããï¼ãã®ããï¼ãã¿ã¹ã¯ä¾å¤å¦ç 1088 許å¯ç¶æ 1089 ã§ããããä¿çä¾å¤è¦å ã0ã§ãªãããå²è¾¼ã¿åªå 1090 度ãã¹ã¯å 1091 ¨è§£é¤ç¶æ 1092 1093 ã§ãããã®3æ¡ä»¶ãæºãããã¦ããå ´åã«ã¯ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åº 1094 ãå¿ 1095 è¦ãããï¼ 1096 1097 ãããå®ç¾ããããã«ï¼ã¿ã¹ã¯ã³ã³ããã¹ãããã®ãã£ã¹ãããå¦çã次ã®ã 1098 ãã«ä¿®æ£ããï¼ 733 dispatch_rにおいては,dispatch_rからのリターン先のタスクに対して,「タ 734 スクが実行状態である」「タスクコンテキストが実行されている」の2条件は満 735 たされている.また,CPUロック状態でdispatch_rに来ることはないため, 736 「CPUロック状態でない」の条件も成立している.そのため,「タスク例外処理 737 許可状態である」「保留例外要因が0でない」「割込み優先度マスク全解除状態 738 である」の3条件が満たされている場合には,タスク例外処理ルーチンを呼び出 739 す必要がある. 740 741 これを実現するために,タスクコンテキストからのディスパッチ処理を次のよ 742 うに修正する. 1099 743 1100 744 ---------------------------------------- … … 1102 746 dispatch(void) 1103 747 { 1104 â¦â¦â¦748 ……… 1105 749 1106 750 dispatch_r: 1107 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã751 スクラッチレジスタを除くすべてのレジスタをスタックから復帰する 1108 752 calltex(); 1109 753 } 1110 754 ---------------------------------------- 1111 755 1112 ããã§calltexã¯ï¼ãã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 1113 ã§ããããä¿çä¾å¤è¦å ã0ã§ãª 1114 ãããå²è¾¼ã¿åªå 1115 度ãã¹ã¯å 1116 ¨è§£é¤ç¶æ 1117 ã§ãããã®3æ¡ä»¶ãæºãããã¦ããå ´åã« 1118 call_texrtnãå¼ã³åºãé¢æ°ã§ããï¼ 756 ここでcalltexは,「タスク例外処理許可状態である」「保留例外要因が0でな 757 い」「割込み優先度マスク全解除状態である」の3条件が満たされている場合に 758 call_texrtnを呼び出す関数である. 1119 759 1120 760 ---------------------------------------- … … 1130 770 (d-2) ret_int_r 1131 771 1132 ret_int_rã¯ï¼å²è¾¼ã¿ãã³ãã©ã®åºå£å¦çã§ãã£ã¹ããããè¡ã£ãã¿ã¹ã¯ãï¼å® 1133 è¡ãåéããéã®å¦çã§ããï¼ãã®ããï¼ret_int_rããã®ãªã¿ã¼ã³å 1134 ã®ã¿ã¹ã¯ 1135 ã«å¯¾ãã¦ï¼ãã¿ã¹ã¯ãå®è¡ç¶æ 1136 ã§ããããã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ããã¦ã 1137 ããã®2æ¡ä»¶ã¯æºãããã¦ããï¼ã¾ãï¼CPUããã¯ç¶æ 1138 ã§ret_int_rã«æ¥ããã¨ã¯ 1139 ãªãããï¼ãCPUããã¯ç¶æ 1140 ã§ãªããã®æ¡ä»¶ãæç«ãã¦ããï¼ãã®ããï¼ãã¿ã¹ 1141 ã¯ä¾å¤å¦ç許å¯ç¶æ 1142 ã§ããããä¿çä¾å¤è¦å ã0ã§ãªãããï¼å²è¾¼ã¿ãã³ãã©ã 1143 ãã®ãªã¿ã¼ã³å¾ã«ï¼å²è¾¼ã¿åªå 1144 度ãã¹ã¯å 1145 ¨è§£é¤ç¶æ 1146 ã§ãããã®3æ¡ä»¶ãæºããã 1147 ã¦ããå ´åã«ã¯ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºãå¿ 1148 è¦ãããï¼ 1149 1150 ãããå®ç¾ããããã«ï¼å²è¾¼ã¿ãã³ãã©ã®åºå 1151 ¥å£å¦çã次ã®ããã«ä¿®æ£ããï¼ 772 ret_int_rは,割込みハンドラの出口処理でディスパッチを行ったタスクが,実 773 行を再開する際の処理である.そのため,ret_int_rからのリターン先のタスク 774 に対して,「タスクが実行状態である」「タスクコンテキストが実行されてい 775 る」の2条件は満たされている.また,CPUロック状態でret_int_rに来ることは 776 ないため,「CPUロック状態でない」の条件も成立している.そのため,「タス 777 ク例外処理許可状態である」「保留例外要因が0でない」「(割込みハンドラか 778 らのリターン後に)割込み優先度マスク全解除状態である」の3条件が満たされ 779 ている場合には,タスク例外処理ルーチンを呼び出す必要がある. 780 781 これを実現するために,割込みハンドラの出入口処理を次のように修正する. 1152 782 1153 783 ---------------------------------------- 1154 784 void 1155 <å²è¾¼ã¿ã®åºå 1156 ¥å£å¦ç>(void) 785 <割込みの出入口処理>(void) 1157 786 { 1158 â¦â¦â¦787 ……… 1159 788 1160 789 ret_int_r: 1161 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã790 スクラッチレジスタを除くすべてのレジスタをスタックから復帰する 1162 791 calltex(); 1163 792 } 1164 â¦â¦â¦793 ……… 1165 794 } 1166 795 ---------------------------------------- … … 1168 797 (d-3) ret_exc_r 1169 798 1170 ret_exc_rã¯ï¼CPUä¾å¤ãã³ãã©ã®åºå£å¦çã§ãã£ã¹ããããè¡ã£ãã¿ã¹ã¯ãï¼ 1171 å®è¡ãåéããéã®å¦çã§ããï¼ 1172 1173 ã«ã¼ãã«ç®¡çã®CPUä¾å¤ãã³ãã©ã®åºå£å¦çï¼ret_excï¼ã¯ï¼å²è¾¼ã¿ãã³ãã©ã® 1174 åºå£å¦çï¼ret_intï¼ã¨åæ§ã§ããï¼ããã¯ï¼CPUããã¯ç¶æ 1175 ã§CPUä¾å¤ãçºçã 1176 ãå ´åã«ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ãã³ãã©ã¨ãªãï¼CPUä¾å¤ãã³ãã©ã®åº 1177 å£å¦çã§ãã£ã¹ããããè¡ããã¨ã¯ãªãï¼ret_excã«ãæ¥ãªãããã§ããï¼ãã® 1178 ããï¼ret_exc_rããã®ãªã¿ã¼ã³å 1179 ã®ã¿ã¹ã¯ã«å¯¾ãã¦ï¼ãCPUããã¯ç¶æ 1180 ã§ãªãã 1181 ã®æ¡ä»¶ãæç«ãã¦ããï¼ 1182 1183 ãã®ãã¨ããï¼CPUä¾å¤ãã³ãã©ã®åºå 1184 ¥å£å¦çã«ã¤ãã¦ãï¼å²è¾¼ã¿ãã³ãã©ã®åº 1185 å 1186 ¥å£å¦çã¨åæ§ã«ï¼æ¬¡ã®ããã«ä¿®æ£ããã°ããï¼ 799 ret_exc_rは,CPU例外ハンドラの出口処理でディスパッチを行ったタスクが, 800 実行を再開する際の処理である. 801 802 カーネル管理のCPU例外ハンドラの出口処理(ret_exc)は,割込みハンドラの 803 出口処理(ret_int)と同様である.これは,CPUロック状態でCPU例外が発生し 804 た場合には,カーネル管理外のCPU例外ハンドラとなり,CPU例外ハンドラの出 805 口処理でディスパッチを行うことはなく,ret_excにも来ないためである.その 806 ため,ret_exc_rからのリターン先のタスクに対して,「CPUロック状態でない」 807 の条件が成立している. 808 809 このことから,CPU例外ハンドラの出入口処理についても,割込みハンドラの出 810 入口処理と同様に,次のように修正すればよい. 1187 811 1188 812 ---------------------------------------- 1189 813 void 1190 <CPUä¾å¤ã®åºå 1191 ¥å£å¦ç>(void) 814 <CPU例外の出入口処理>(void) 1192 815 { 1193 â¦â¦â¦816 ……… 1194 817 1195 818 ret_exc_r: 1196 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ã1197 ã¹ã¿ãã¯ãã復帰ãã819 スクラッチレジスタを除くすべてのレジスタを 820 スタックから復帰する 1198 821 calltex(); 1199 822 } 1200 â¦â¦â¦823 ……… 1201 824 } 1202 825 ---------------------------------------- 1203 826 1204 (e) å²è¾¼ã¿ãã³ãã©ã®åºå£å¦ç 1205 1206 å²è¾¼ã¿ãã³ãã©ããã¿ã¹ã¯ã¸ãªã¿ã¼ã³ããå ´åã«ã¯ï¼ãªã¿ã¼ã³å 1207 ã®ã¿ã¹ã¯ã«å¯¾ 1208 ãã¦ï¼ãã¿ã¹ã¯ãå®è¡ç¶æ 1209 ã§ããããã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ããã¦ããã 1210 ã®2æ¡ä»¶ã¯æºãããã¦ããï¼ã¾ãï¼CPUããã¯ç¶æ 1211 ã§å²è¾¼ã¿ãã³ãã©ãå®è¡ãã 1212 ããã¨ã¯ãªãããï¼ãCPUããã¯ç¶æ 1213 ã§ãªããã®æ¡ä»¶ãæç«ãã¦ããï¼ãã®ããï¼ 1214 ãã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 1215 ã§ããããä¿çä¾å¤è¦å ã0ã§ãªãããï¼å²è¾¼ã¿ãã³ 1216 ãã©ããã®ãªã¿ã¼ã³å¾ã«ï¼å²è¾¼ã¿åªå 1217 度ãã¹ã¯å 1218 ¨è§£é¤ç¶æ 1219 ã§ãããã®3æ¡ä»¶ãæº 1220 ãããã¦ããå ´åã«ã¯ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºãå¿ 1221 è¦ãããï¼ 1222 1223 å²è¾¼ã¿ãã³ãã©ã®å¼åºãåã¨å¼åºãå¾ã§ãããã®æ¡ä»¶ãå¤åããã®ã¯ï¼å®è¡ç¶ 1224 æ 1225 ã®ã¿ã¹ã¯ãå¤åããæã¨ï¼å²è¾¼ã¿ãã³ãã©ä¸ã§iras_texãå¼ã³åºãããå ´å 1226 ã§ããï¼å²è¾¼ã¿ãã³ãã©ããã¯ena_texã¨chg_ipmã¯å¼ã³åºããªãããï¼ãã¿ã¹ 1227 ã¯ä¾å¤å¦ç許å¯ç¶æ 1228 ã§ãããã¨ãï¼å²è¾¼ã¿ãã³ãã©ããã®ãªã¿ã¼ã³å¾ã«ï¼å²è¾¼ 1229 ã¿åªå 1230 度ãã¹ã¯å 1231 ¨è§£é¤ç¶æ 1232 ã§ãããã®2æ¡ä»¶ãå¤åãããã¨ã¯ãªãï¼ 1233 1234 ãã®2ã¤ã®ç¶æ³ã®å 1235 ï¼å®è¡ç¶æ 1236 ã®ã¿ã¹ã¯ãå¤åããã±ã¼ã¹ã¯ï¼ret_int_rã§èæ 1237 ® 1238 æ¸ã¿ã§ããï¼å²è¾¼ã¿ãã³ãã©ä¸ã§iras_texãå¼ã³åºãããå ´åã«ã¯ï¼reqflgã 1239 trueã«ãªãããï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§å¦çã¯ï¼reqflgãtrueã® 1240 æã«ã®ã¿è¡ãã°ããï¼ 1241 1242 ãããå®ç¾ããããã«ï¼ä¸ã§ä¿®æ£ããå²è¾¼ã¿ãã³ãã©ã®åºå 1243 ¥å£å¦çãï¼ããã« 1244 次ã®ããã«ä¿®æ£ããï¼ 827 (e) 割込みハンドラの出口処理 828 829 割込みハンドラからタスクへリターンする場合には,リターン先のタスクに対 830 して,「タスクが実行状態である」「タスクコンテキストが実行されている」 831 の2条件は満たされている.また,CPUロック状態で割込みハンドラが実行され 832 ることはないため,「CPUロック状態でない」の条件も成立している.そのため, 833 「タスク例外処理許可状態である」「保留例外要因が0でない」「(割込みハン 834 ドラからのリターン後に)割込み優先度マスク全解除状態である」の3条件が満 835 たされている場合には,タスク例外処理ルーチンを呼び出す必要がある. 836 837 割込みハンドラの呼出し前と呼出し後でこれらの条件が変化するのは,実行状 838 態のタスクが変化した時と,割込みハンドラ中でiras_texが呼び出された場合 839 である.割込みハンドラからはena_texとchg_ipmは呼び出せないため,「タス 840 ク例外処理許可状態である」と「(割込みハンドラからのリターン後に)割込 841 み優先度マスク全解除状態である」の2条件が変化することはない. 842 843 この2つの状況の内,実行状態のタスクが変化するケースは,ret_int_rで考慮 844 済みである.割込みハンドラ中でiras_texが呼び出された場合には,reqflgが 845 trueになるため,タスク例外処理ルーチンの実行開始処理は,reqflgがtrueの 846 時にのみ行えばよい. 847 848 これを実現するために,上で修正した割込みハンドラの出入口処理を,さらに 849 次のように修正する. 1245 850 1246 851 ---------------------------------------- 1247 852 void 1248 <å²è¾¼ã¿ã®åºå 1249 ¥å£å¦ç>(void) 853 <割込みの出入口処理>(void) 1250 854 { 1251 â¦â¦â¦1252 1253 if ( ã¿ã¹ã¯ã³ã³ããã¹ãã§å²è¾¼ã¿çºç) {1254 â¦â¦â¦855 ……… 856 857 if (タスクコンテキストで割込み発生) { 858 ……… 1255 859 if (reqflg) { 1256 â¦â¦â¦860 ……… 1257 861 1258 862 ret_int_r: 1259 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã863 スクラッチレジスタを除くすべてのレジスタをスタックから復帰する 1260 864 } 1261 865 calltex(); 1262 866 } 1263 867 } 1264 â¦â¦â¦868 ……… 1265 869 } 1266 870 ---------------------------------------- 1267 871 1268 (f) CPUä¾å¤ãã³ãã©ã®åºå£å¦ç 1269 1270 ã«ã¼ãã«ç®¡çã®CPUä¾å¤ãã³ãã©ã®åºå£å¦çã¯ï¼å²è¾¼ã¿ãã³ãã©ã®åºå£å¦çã¨å 1271 æ§ã§ããï¼ 1272 1273 ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ãã³ãã©ã®ä¸ã§ã¯ï¼å®è¡ç¶æ 1274 ã®ã¿ã¹ã¯ãå¤åããã㨠1275 ã¯ãªãï¼iras_texãena_texãå¼ã³åºããã¨ãã§ããªãããï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ 1276 ãã³ã®å®è¡éå§æ¡ä»¶ãæ°ãã«æºãããããã¨ã¯ãªãï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ 1277 ã®å®è¡éå§ã¯å¿ 1278 è¦ãªãï¼ 1279 1280 ãã®ãã¨ããï¼CPUä¾å¤ãã³ãã©ã®åºå 1281 ¥å£å¦çã«ã¤ãã¦ãï¼å²è¾¼ã¿ãã³ãã©ã®åº 1282 å 1283 ¥å£å¦çã¨åæ§ã«ï¼æ¬¡ã®ããã«ä¿®æ£ããã°ããï¼ 872 (f) CPU例外ハンドラの出口処理 873 874 カーネル管理のCPU例外ハンドラの出口処理は,割込みハンドラの出口処理と同 875 様である. 876 877 カーネル管理外のCPU例外ハンドラの中では,実行状態のタスクが変化すること 878 はなく,iras_texやena_texを呼び出すこともできないため,タスク例外処理ルー 879 チンの実行開始条件が新たに満たされることはなく,タスク例外処理ルーチン 880 の実行開始は必要ない. 881 882 このことから,CPU例外ハンドラの出入口処理についても,割込みハンドラの出 883 入口処理と同様に,次のように修正すればよい. 1284 884 1285 885 ---------------------------------------- 1286 886 void 1287 <CPUä¾å¤ã®åºå 1288 ¥å£å¦ç>(void) 887 <CPU例外の出入口処理>(void) 1289 888 { 1290 â¦â¦â¦1291 if ( ã¿ã¹ã¯ã³ã³ããã¹ãã§CPUä¾å¤çºç) {1292 â¦â¦â¦889 ……… 890 if (タスクコンテキストでCPU例外発生) { 891 ……… 1293 892 if (reqflg) { 1294 893 1295 894 ret_exc_r: 1296 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ã1297 ã¹ã¿ãã¯ãã復帰ãã895 スクラッチレジスタを除くすべてのレジスタを 896 スタックから復帰する 1298 897 } 1299 898 calltex(); 1300 899 } 1301 900 } 1302 â¦â¦â¦901 ……… 1303 902 } 1304 903 ---------------------------------------- 1305 904 1306 (g) å²è¾¼ã¿åªå 1307 度ãã¹ã¯ã®å¤æ´ 1308 1309 chg_ipmãã¿ã¹ã¯ããå¼ã³åºãããå ´åã«ã¯ï¼èªã¿ã¹ã¯ã«å¯¾ãã¦ãã¿ã¹ã¯ãå®è¡ 1310 ç¶æ 1311 ã§ããããã¿ã¹ã¯ã³ã³ããã¹ããå®è¡ããã¦ãããã®2æ¡ä»¶ã¯æºãããã¦ã 1312 ãï¼ã¾ãï¼ãCPUããã¯ç¶æ 1313 ã§ãªããã®æ¡ä»¶ã¯chg_ipmã®å 1314 ¥å£ã§ãã§ãã¯ãã¦ã 1315 ãï¼ãã®ããï¼ãã©ã¡ã¼ã¿intpriãTIPM_ENAALLã§ããï¼ãã¿ã¹ã¯ä¾å¤å¦çè¨±å¯ 1316 ç¶æ 1317 ã§ããããä¿çä¾å¤è¦å ã0ã§ãªããã®2æ¡ä»¶ãæºãããã¦ããå ´åã«ã¯ï¼ 1318 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºãï¼ 1319 1320 chg_ipmã®é¢é£é¨åã®å¦çã¯æ¬¡ã®éãï¼ 905 (g) 割込み優先度マスクの変更 906 907 chg_ipmがタスクから呼び出された場合には,自タスクに対して「タスクが実行 908 状態である」「タスクコンテキストが実行されている」の2条件は満たされてい 909 る.また,「CPUロック状態でない」の条件はchg_ipmの入口でチェックしてい 910 る.そのため,パラメータintpriがTIPM_ENAALLであり,「タスク例外処理許可 911 状態である」「保留例外要因が0でない」の2条件が満たされている場合には, 912 タスク例外処理ルーチンを呼び出す. 913 914 chg_ipmの関連部分の処理は次の通り. 1321 915 1322 916 ---------------------------------------- … … 1324 918 if (intpri == TIPM_ENAALL) { 1325 919 ipmflg = true; 1326 ããã«ã¿ã¹ã¯åæãå¦çãå 1327 ¥ã 920 ここにタスク切換え処理が入る 1328 921 if (p_runtsk->enatex && p_runtsk->texptn != 0U) { 1329 922 call_texrtn(); … … 1332 925 ---------------------------------------- 1333 926 1334 dispatchãå¼ã³åºãã¦ã¿ã¹ã¯åæããè¡ãå ´åã«ã¯ï¼dispatchã®åºå£ã§ã¿ã¹ã¯ 1335 ä¾å¤å¦çã«ã¼ãã³ãå¼ã³åºãããããã§å¼åºãå¦çãè¡ãå¿ 1336 è¦ã¯ãªããï¼ã³ã¼ 1337 ããè¤éã«ãªãããï¼dispatchãå¼ã³åºããå ´åãããã§ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ 1338 ãã³ã®å¼åºãå¦çãè¡ã£ã¦ããï¼ 1339 1340 âcall_texrtnããdispatchãå¼ã³åºãå¦çã«ã¤ã㦠1341 1342 dispatch_rããï¼ã¿ã¼ã²ããã«ãã£ã¦ã¯calltexãçµç±ãã¦ï¼call_texrtnãå¼ 1343 ã³åºãï¼call_texrtnããdispatchãå¼ã³åºãããï¼ãã®2ã¤ã®é¢æ°ã¯ç¸äºå帰 1344 å¼åºãããã¦ããï¼ããã§ã¯ï¼ãã®å®è£ 1345 ã§æ¯éã®ãªãçç±ã説æããï¼ 1346 1347 call_texrtnããdispatchãå¼ã³åºãã®ã¯ï¼ãã£ã¹ããããä¿çããã¦ããªãç¶ 1348 æ 1349 ã§å¼ã³åºãããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãï¼ãã®å®è¡ä¸ã«ãã£ã¹ãããä¿ç 1350 ç¶æ 1351 ã«é·ç§»ãï¼ããã«ã¿ã¹ã¯ãã£ã¹ããããå¿ 1352 è¦ã¨ããå¦çãè¡ãï¼ãã£ã¹ãã 1353 ãä¿çç¶æ 1354 ã解é¤ããªãã¾ã¾ãªã¿ã¼ã³ããå ´åã§ããï¼ãã®å ´åï¼call_texrtn 1355 ã®ä¸ã§ãã£ã¹ãããä¿çç¶æ 1356 ã解é¤ããå¾ã«ï¼dispatchãå¼ã³åºãã¦ã¿ã¹ã¯ã㣠1357 ã¹ããããè¡ãï¼ã¤ã¾ãï¼call_texrtnããdispatchãå¼ã³åºãå¦çã¯ï¼ã¿ã¹ã¯ 1358 ä¾å¤å¦çã«ã¼ãã³ã®ä¸ã§ãã£ã¹ãããä¿çç¶æ 1359 ã解é¤ãã¹ãã§ãã£ãã®ãï¼è§£ 1360 é¤ããã«ãªã¿ã¼ã³ããå ´åãææ¸ããããã®ãã®ã§ããï¼ä»¥ä¸ï¼ãã®æ¯èãã 1361 ãææ¸ã±ã¼ã¹ãã¨å¼ã¶ï¼ 1362 1363 ããã§ï¼æ¯è¼ã®ããã«ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®æå¾ã§ï¼æ£ãããã£ã¹ãã 1364 ãä¿çç¶æ 1365 ã解é¤ãã¦ãããªã¿ã¼ã³ããå ´åã®æ¯èããèããï¼ãã®å ´åã«ã¯ï¼ 1366 ãã£ã¹ãããä¿çç¶æ 1367 ã解é¤ãããµã¼ãã¹ã³ã¼ã«ï¼ena_dspï¼chg_ipmï¼ã®ä¸ã§ï¼ 1368 dispatchãå¼ã³åºããã¦ã¿ã¹ã¯ãã£ã¹ããããèµ·ããï¼ä»¥ä¸ï¼ãã®æ¯èãã 1369 ãæ£å¸¸ã±ã¼ã¹ãã¨å¼ã¶ï¼ 1370 1371 æ£å¸¸ã±ã¼ã¹ã¨ææ¸ã±ã¼ã¹ãæ¯è¼ããã¨ï¼call_texrtnâã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ 1372 âãµã¼ãã¹ã³ã¼ã«âdispatchã®é ã§dispatchãå¼ã³åºããããï¼call_texrtnã 1373 ãç´æ¥dispatchãå¼ã³åºããããã®éãã¨ãããã¨ã«ãªãï¼ææ¸ã±ã¼ã¹ã®æ¹ã 1374 ã¹ã¿ãã¯ã®ä½¿ç¨éã¯å°ãªãï¼ã¤ã¾ãï¼æ£å¸¸ã±ã¼ã¹ã®åããæ³å®ãã¦ã¹ã¿ãã¯é 1375 åãç¨æãã¦ããã°ï¼ææ¸ã±ã¼ã¹ã§ãåé¡ãªãåä½ãããã¨ã«ãªãï¼ 1376 1377 ããã§ï¼æ£å¸¸ã±ã¼ã¹ã¨ææ¸ã±ã¼ã¹ã§ï¼ä¸è¨ä»¥å¤ã«éãããªããã¨ãéè¦ã§ããï¼ 1378 å 1379 ·ä½çã«ã¯ï¼call_texrtnã®ä¸ã§ï¼ã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 1380 ã«ããï¼p_runtsk 1381 ->enatexãtrueã«ããï¼åã«ï¼dispatchãå¼ã³åºããã¨ãéè¦ã§ããï¼ã¿ã¹ã¯ 1382 ä¾å¤å¦ç許å¯ç¶æ 1383 ã«ããå¾ã«dispatchãå¼ã³åºãã¨ï¼åºå£ã®dispatch_rã§ï¼å 1384 ã³ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå®è¡ãã¦ãã¾ãå¯è½æ§ãããï¼ææ¸ã±ã¼ã¹ã®æ¹ã 1385 ã¹ã¿ãã¯ã®ä½¿ç¨éãå¢ãã¦ãã¾ãï¼ 1386 1387 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®ä¸ã§ï¼ã¿ã¹ã¯ä¾å¤å¦ç許å¯ç¶æ 1388 ã«ããã¾ã¾ãªã¿ã¼ã³ 1389 ããå ´åã«ã¯ï¼call_texrtnããå¼ã³åºããdispatchã®åºå£ã®dispatch_rã§åã³ 1390 ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ãå®è¡ãã¦ãã¾ãå¯è½æ§ãããï¼ãã®å ´åãï¼ã¿ã¹ã¯ 1391 ä¾å¤å¦çã«ã¼ãã³ã®æå¾ã§ï¼ãã£ã¹ãããä¿çç¶æ 1392 ã解é¤ãã¦ãããªã¿ã¼ã³ã 1393 ãå ´åããã¯ã¹ã¿ãã¯ã®ä½¿ç¨éãå°ãªããï¼ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ç¶æ 1394 ã«ããå¾ 1395 ã«ãã£ã¹ãããä¿çç¶æ 1396 ã解é¤ãã¦ãªã¿ã¼ã³ããå ´åããã¯ï¼ã¹ã¿ãã¯ã®ä½¿ç¨ 1397 éãå¢ããå ´åãããï¼ããã§ï¼ãã®ãããªç¶æ³ãèµ·ãããªãããã«ï¼ 1398 dispatchãå¼ã¶åã«p_runtsk->enatexãfalseã«ããï¼ 1399 1400 1401 âã¨ã©ã¼ã®ãã§ãã¯é åº 1402 1403 ãµã¼ãã¹ã³ã¼ã«å 1404 ã«ãããã¨ã©ã¼ãã§ãã¯ã¯ï¼ä»¥ä¸ã®é åºã§è¡ããã¨ãåå㨠1405 ããï¼ãªãï¼ãã®ç¯ã«ã¯ï¼ä¿è·æ©è½å¯¾å¿ã«ã¼ãã«ã«é¢ããè¨è¿°ãå«ã¾ãã¦ãã 1406 ãï¼ãããã®è¨è¿°ã¯å°æ¥çã«ã¯ããé©åãªããã¥ã¡ã³ãã«ç§»åããäºå®ã§ããï¼ 1407 1408 âã¨ã©ã¼ã®3åé¡ 1409 1410 ãµã¼ãã¹ã³ã¼ã«ã®ã¨ã©ã¼ã¯ï¼å¤§ãã以ä¸ã®3ã¤ã«åé¡ãããã¨ãã§ããï¼ 1411 1412 (a) éçã¨ã©ã¼ 1413 1414 対象ã®ã«ã¼ãã«ãªãã¸ã§ã¯ããç»é²ããã¦ãããå¦ããï¼ãã®ç¶æ 1415 ã«ä¾åãã 1416 ã«ï¼ãã§ãã¯ãããã¨ãã§ããã¨ã©ã¼ï¼ 1417 1418 (b) æºéçã¨ã©ã¼ 1419 1420 対象ã®ã«ã¼ãã«ãªãã¸ã§ã¯ããç»é²ããã¦ããã°ï¼ãã®ç¶æ 1421 ã«ä¾åããã«ãã§ã 1422 ã¯ãããã¨ãã§ããã¨ã©ã¼ï¼ 1423 1424 (c) åçã¨ã©ã¼ 1425 1426 対象ã®ã«ã¼ãã«ãªãã¸ã§ã¯ãã®ç¶æ 1427 ã«ä¾åããã¨ã©ã¼ï¼ 1428 1429 ASPã«ã¼ãã«ã«ããã¦ã¯ï¼(a)ã¨(b)ã®ã¨ã©ã¼ã¯ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®å¤å´ã§ï¼ 1430 ãã®é åºã§ãã§ãã¯ãï¼(c)ã®ã¨ã©ã¼ã¯ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®å 1431 å´ã§ãã§ã 1432 ã¯ããï¼ãã ãï¼åççææ©è½æ¡å¼µããã±ã¼ã¸ã§ã¯ï¼(b)ã®ã¨ã©ã¼ï¼ã®ä¸é¨ï¼ã¯ 1433 ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®å 1434 å´ã§å®æ½ããå¿ 1435 è¦ãããï¼ 1436 1437 âéçã¨ã©ã¼ã®ãã§ãã¯é åº 1438 1439 éçã¨ã©ã¼ã«ã¯ï¼å®è¡ã³ã³ããã¹ãã®ã¨ã©ã¼ï¼ãã£ã¹ãããä¿çç¶æ 1440 ããã®å¼ 1441 åºãã¨ã©ã¼ãå«ãï¼ï¼ãã©ã¡ã¼ã¿ã®ç¯å²çã®ã¨ã©ã¼ï¼å¯¾è±¡ã®ã«ã¼ãã«ãªãã¸ã§ 1442 ã¯ãã«ä¾åããã«ãã§ãã¯ã§ãããã®ï¼ãå«ã¾ããï¼ 1443 1444 ãµã¼ãã¹ã³ã¼ã«ä¸ã§ã¯ï¼æåã«å®è¡ã³ã³ããã¹ãã®ã¨ã©ã¼ããã§ãã¯ãï¼ãã® 1445 å¾ï¼ãã©ã¡ã¼ã¿ã®ä¸¦ã³é ã«ï¼ç¯å²çã®ã¨ã©ã¼ããã§ãã¯ããï¼ 1446 1447 ä¿è·æ©è½å¯¾å¿ã«ã¼ãã«ã§ã¯ï¼ãã©ã¡ã¼ã¿ããã¤ã³ã¿ã§ããå ´åã«ï¼ãã¤ã³ã¿ã® 1448 æãã¡ã¢ãªé åãã¢ã¯ã»ã¹å¯è½ã§ãããããã§ãã¯ããå¿ 1449 è¦ããããï¼ã¡ã¢ãª 1450 é åã®è¨å®ãéçã§ããå ´åã«ã¯ï¼ãã®ã¨ã©ã¼ãã§ãã¯ãããã§å®æ½ããï¼ã 1451 ã ãï¼ã¡ã¢ãªé åã®è¨å®ãéçã§ãªãå ´åã«ã¯ï¼ãã®ã¨ã©ã¼ãã§ãã¯ã¯ã¯ãªã㣠1452 ã«ã«ã»ã¯ã·ã§ã³ã®å 1453 å´ã§è¡ãå¿ 1454 è¦ãããï¼ 1455 1456 âåéçã¨ã©ã¼ã®ãã§ãã¯é åº 1457 1458 åéçã¨ã©ã¼ã®ãã§ãã¯ã®åã«ï¼å¯¾è±¡ã®ã«ã¼ãã«ãªãã¸ã§ã¯ãã®ç®¡çããã㯠1459 ã®å 1460 é çªå°ãï¼ãã¼ã«ã«å¤æ°ã«ä»£å 1461 ¥ããï¼ 1462 1463 ä¿è·æ©è½å¯¾å¿ã«ã¼ãã«ã§ã¯ï¼ãã®æ¬¡ã«ï¼å¯¾è±¡ã®ã«ã¼ãã«ãªãã¸ã§ã¯ããã¢ã¯ã» 1464 ã¹å¯è½ã§ãããããã§ãã¯ããå¦çãè¡ãï¼å½è©²ãµã¼ãã¹ã³ã¼ã«ã®å¼åºããï¼ 1465 ã·ã¹ãã ç¶æ 1466 ã«å¯¾ããã¢ã¯ã»ã¹è¨±å¯ãã¯ã¿ã§ä¿è·ããã¦ããå ´åã«ãï¼ãã®æ®µ 1467 éã§ãã§ãã¯ãå®æ½ããï¼ 1468 1469 ãã®å¾ã§ï¼ãã©ã¡ã¼ã¿ã®ç¯å²çã®ã¨ã©ã¼ã®ä¸ã§ï¼å¯¾è±¡ã®ã«ã¼ãã«ãªãã¸ã§ã¯ã 1470 ã®ç»é²æ 1471 å ±ï¼åæåãããã¯ã«å«ã¾ãã¦ããæ 1472 å ±ï¼ã«ä¾åãã¦ãã§ãã¯ãã¹ã 1473 ãã®ã®ãã§ãã¯ãï¼ãã©ã¡ã¼ã¿ã®ä¸¦ã³é ã§å®æ½ããï¼ 1474 1475 1476 âCHECKãã¯ãã¨gotoæã®ä½¿ç¨ 1477 1478 ASPã«ã¼ãã«ã®å®è£ 1479 ã«ããã¦ã¯ï¼ãµã¼ãã¹ã³ã¼ã«ã®éçãªã¨ã©ã¼ããã§ãã¯ãã 1480 ããã«ï¼å称ã"CHECK_"ã§å§ã¾ãä¸é£ã®ãã¯ãï¼ããããï¼CHECKãã¯ãã¨ç·ç§° 1481 ããï¼ãç¨ãã¦ããï¼ 1482 1483 CHECKãã¯ãã®å®ç¾©ä¸ã«ã¯gotoæãå«ãã§ãããï¼MISRA-Cãªã©ã®ã³ã¼ãã£ã³ã° 1484 ã«ã¼ã«ã§ã¯gotoæã®ä½¿ç¨ãç¦æ¢ãã¦ããï¼gotoæã使ãã¹ãã§ã¯ãªãã¨ããæ 1485 è¦ãå¤ãï¼ã¾ãï¼ãã¯ãã®å®ç¾©ä¸ã«gotoæã使ç¨ãããã¨ãåé¡ã§ããã¨ãã 1486 æè¦ãããï¼ 1487 1488 ããã§ã¯ï¼å®ç¾©ä¸ã«gotoæãå«ãCHECKãã¯ããç¨ããè¨è¨æå³ã¨ããã使ç¨ã 1489 ã¦ããæ¡ä»¶ï¼CHECKãã¯ãã®ä½¿ç¨ã«ããã½ããã¦ã§ã¢ã®ä¿¡é ¼æ§ã«åé¡ãçããã 1490 ã¨ããªããã¨ãè«è¨¼ããï¼ 1491 1492 ãªãï¼ASPã«ã¼ãã«ã®ã«ã¼ãã«æ¬ä½ã®å®è£ 1493 ã§ã¯ï¼CHECKãã¯ã以å¤ã«gotoæãç¨ 1494 ãã¦ããç®æã¯ãªãï¼ä¸é¨ã®ã·ã¹ãã ãµã¼ãã¹ã§ã¯ï¼ãã以å¤ã®æ¹æ³ã§gotoæ 1495 ãç¨ãã¦ããï¼ï¼ 1496 1497 âCHECKãã¯ãã®å®ç¾©ã¨ãã®ä½¿ç¨æ³ 1498 1499 kernel/check.hã«ã¯ï¼25åã®CHECKãã¯ããå®ç¾©ããã¦ãããï¼ãããã次ã®ã 1500 ã¿ã¼ã³ã§å®ç¾©ããã¦ããï¼ããã§XXXXXã«ã¯ï¼ãã§ãã¯ãããã¨ã©ã¼ã®ç¨®é¡ã表 1501 ãæååãå 1502 ¥ãï¼ 1503 1504 ---------------------------------------- 1505 #define CHECK_XXXXX(<â¦â¦>) { \ 1506 if (<ã¨ã©ã¼æ¡ä»¶>) { \ 1507 ercd = <ã¨ã©ã¼ã³ã¼ã>; \ 927 dispatchを呼び出してタスク切換えを行う場合には,dispatchの出口でタスク 928 例外処理ルーチンを呼び出すためここで呼出し処理を行う必要はないが,コー 929 ドが複雑になるため,dispatchを呼び出した場合もここでタスク例外処理ルー 930 チンの呼出し処理を行っている. 931 932 ●call_texrtnからdispatchを呼び出す処理について 933 934 dispatch_rから(ターゲットによってはcalltexを経由して)call_texrtnを呼 935 び出し,call_texrtnからdispatchを呼び出すため,この2つの関数は相互再帰 936 呼出しをしている.ここでは,この実装で支障のない理由を説明する. 937 938 call_texrtnからdispatchを呼び出すのは,ディスパッチが保留されていない状 939 態で呼び出されたタスク例外処理ルーチンが,その実行中にディスパッチ保留 940 状態に遷移し,さらにタスクディスパッチを必要とする処理を行い,ディスパッ 941 チ保留状態を解除しないままリターンした場合である.この場合,call_texrtn 942 の中でディスパッチ保留状態を解除した後に,dispatchを呼び出してタスクディ 943 スパッチを行う.つまり,call_texrtnからdispatchを呼び出す処理は,タスク 944 例外処理ルーチンの中でディスパッチ保留状態を解除すべきであったのを,解 945 除せずにリターンした場合を救済するためのものである.以下,この振舞いを 946 「救済ケース」と呼ぶ. 947 948 そこで,比較のために,タスク例外処理ルーチンの最後で,正しくディスパッ 949 チ保留状態を解除してからリターンした場合の振舞いを考える.この場合には, 950 ディスパッチ保留状態を解除するサービスコール(ena_dsp,chg_ipm)の中で, 951 dispatchが呼び出されてタスクディスパッチが起こる.以下,この振舞いを 952 「正常ケース」と呼ぶ. 953 954 正常ケースと救済ケースを比較すると,call_texrtn→タスク例外処理ルーチン 955 →サービスコール→dispatchの順でdispatchが呼び出されるか,call_texrtnか 956 ら直接dispatchが呼び出されるかの違いということになり,救済ケースの方が 957 スタックの使用量は少ない.つまり,正常ケースの動きを想定してスタック領 958 域が用意してあれば,救済ケースでも問題なく動作することになる. 959 960 ここで,正常ケースと救済ケースで,上記以外に違いがないことが重要である. 961 具体的には,call_texrtnの中で,タスク例外処理許可状態にする(p_runtsk 962 ->enatexをtrueにする)前に,dispatchを呼び出すことが重要である.タスク 963 例外処理許可状態にした後にdispatchを呼び出すと,出口のdispatch_rで,再 964 びタスク例外処理ルーチンを実行してしまう可能性があり,救済ケースの方が 965 スタックの使用量が増えてしまう. 966 967 タスク例外処理ルーチンの中で,タスク例外処理許可状態にしたままリターン 968 した場合には,call_texrtnから呼び出したdispatchの出口のdispatch_rで再び 969 タスク例外処理ルーチンを実行してしまう可能性がある.この場合も,タスク 970 例外処理ルーチンの最後で,ディスパッチ保留状態を解除してからリターンし 971 た場合よりはスタックの使用量が少ないが,タスク例外処理禁止状態にした後 972 にディスパッチ保留状態を解除してリターンした場合よりは,スタックの使用 973 量が増える場合がある.そこで,このような状況が起こらないように, 974 dispatchを呼ぶ前にp_runtsk->enatexをfalseにする. 975 976 977 ○エラーのチェック順序 978 979 サービスコール内におけるエラーチェックは,以下の順序で行うことを原則と 980 する.なお,この節には,保護機能対応カーネルに関する記述が含まれている 981 が,それらの記述は将来的にはより適切なドキュメントに移動する予定である. 982 983 ●エラーの3分類 984 985 サービスコールのエラーは,大きく以下の3つに分類することができる. 986 987 (a) 静的エラー 988 989 対象のカーネルオブジェクトが登録されているか否かや,その状態に依存せず 990 に,チェックすることができるエラー. 991 992 (b) 準静的エラー 993 994 対象のカーネルオブジェクトが登録されていれば,その状態に依存せずにチェッ 995 クすることができるエラー. 996 997 (c) 動的エラー 998 999 対象のカーネルオブジェクトの状態に依存するエラー. 1000 1001 ASPカーネルにおいては,(a)と(b)のエラーはクリティカルセクションの外側で, 1002 この順序でチェックし,(c)のエラーはクリティカルセクションの内側でチェッ 1003 クする.ただし,動的生成機能拡張パッケージでは,(b)のエラー(の一部)は 1004 クリティカルセクションの内側で実施する必要がある. 1005 1006 ●静的エラーのチェック順序 1007 1008 静的エラーには,実行コンテキストのエラー(ディスパッチ保留状態からの呼 1009 出しエラーも含む),パラメータの範囲等のエラー(対象のカーネルオブジェ 1010 クトに依存せずにチェックできるもの)が含まれる. 1011 1012 サービスコール中では,最初に実行コンテキストのエラーをチェックし,その 1013 後,パラメータの並び順に,範囲等のエラーをチェックする. 1014 1015 保護機能対応カーネルでは,パラメータがポインタである場合に,ポインタの 1016 指すメモリ領域がアクセス可能であるかをチェックする必要があるが,メモリ 1017 領域の設定が静的である場合には,このエラーチェックもここで実施する.た 1018 だし,メモリ領域の設定が静的でない場合には,このエラーチェックはクリティ 1019 カルセクションの内側で行う必要がある. 1020 1021 ●准静的エラーのチェック順序 1022 1023 准静的エラーのチェックの前に,対象のカーネルオブジェクトの管理ブロック 1024 の先頭番地を,ローカル変数に代入する. 1025 1026 保護機能対応カーネルでは,この次に,対象のカーネルオブジェクトがアクセ 1027 ス可能であるかをチェックする処理を行う.当該サービスコールの呼出しが, 1028 システム状態に対するアクセス許可ベクタで保護されている場合にも,この段 1029 階でチェックを実施する. 1030 1031 その後で,パラメータの範囲等のエラーの中で,対象のカーネルオブジェクト 1032 の登録情報(初期化ブロックに含まれている情報)に依存してチェックすべき 1033 もののチェックを,パラメータの並び順で実施する. 1034 1035 1036 ○CHECKマクロとgoto文の使用 1037 1038 ASPカーネルの実装においては,サービスコールの静的なエラーをチェックする 1039 ために,名称が"CHECK_"で始まる一連のマクロ(これらを,CHECKマクロと総称 1040 する)を用いている. 1041 1042 CHECKマクロの定義中にはgoto文を含んでいるが,MISRA-Cなどのコーディング 1043 ルールではgoto文の使用を禁止しており,goto文を使うべきではないという意 1044 見も多い.また,マクロの定義中にgoto文を使用することが問題であるという 1045 意見もある. 1046 1047 ここでは,定義中にgoto文を含むCHECKマクロを用いる設計意図とそれを使用し 1048 てよい条件,CHECKマクロの使用によりソフトウェアの信頼性に問題が生じるこ 1049 とがないことを論証する. 1050 1051 なお,ASPカーネルのカーネル本体の実装では,CHECKマクロ以外にgoto文を用 1052 いている箇所はない(一部のシステムサービスでは,これ以外の方法でgoto文 1053 を用いている). 1054 1055 ●CHECKマクロの定義とその使用法 1056 1057 kernel/check.hには,25個のCHECKマクロが定義されているが,いずれも次のパ 1058 ターンで定義されている.ここでXXXXXには,チェックしたいエラーの種類を表 1059 す文字列が入る. 1060 1061 ---------------------------------------- 1062 #define CHECK_XXXXX(<……>) { \ 1063 if (<エラー条件>) { \ 1064 ercd = <エラーコード>; \ 1508 1065 goto error_exit; \ 1509 1066 } \ … … 1511 1068 ---------------------------------------- 1512 1069 1513 ãããã®CHECKãã¯ãã¯ï¼å¤ãã®ãµã¼ãã¹ã³ã¼ã«ã®å¦çé¢æ°ä¸ã§ï¼æ¬¡ã®ããã«ä½¿ 1514 ç¨ããã¦ããï¼ 1070 これらのCHECKマクロは,多くのサービスコールの処理関数中で,次のように使 1071 用されている. 1515 1072 1516 1073 ---------------------------------------- 1517 1074 ER 1518 < ãµã¼ãã¹ã³ã¼ã«å>(â¦â¦)1075 <サービスコール名>(……) 1519 1076 { 1520 < ãã¼ã«ã«å¤æ°ã®å®£è¨>1077 <ローカル変数の宣言> 1521 1078 ER ercd; 1522 1079 1523 LOG_XXX_YYY_ENTER( â¦â¦);1524 CHECK_XXXXX( â¦â¦);1525 CHECK_YYYYY( â¦â¦);1526 1527 < ãµã¼ãã¹ã³ã¼ã«å¦çæ¬ä½>1080 LOG_XXX_YYY_ENTER(……); 1081 CHECK_XXXXX(……); 1082 CHECK_YYYYY(……); 1083 1084 <サービスコール処理本体> 1528 1085 1529 1086 error_exit: 1530 LOG_XXX_YYY_LEAVE( â¦â¦);1087 LOG_XXX_YYY_LEAVE(……); 1531 1088 return(ercd); 1532 1089 } 1533 1090 ---------------------------------------- 1534 1091 1535 ãã®ä¾ã§ã¯ï¼CHECKãã¯ãã2ã¤ä½¿ç¨ãã¦ãããï¼1ã¤ã®ã¿ä½¿ç¨ãã¦ããå ´åãã 1536 ãã°ï¼3ã¤ä»¥ä¸ä½¿ç¨ãã¦ããå ´åãããï¼ã¾ãï¼è¤æ°ã®CHECKãã¯ãã®éã«ï¼ãã¼ 1537 ã«ã«å¤æ°ã¸ã®ä»£å 1538 ¥æãå 1539 ¥ãå ´åãããï¼ä¾ãã°ï¼ter_tskã®å¦çé¢æ°ï¼ï¼ 1540 1541 âè¨è¨æå³ 1542 1543 CHECKãã¯ãã使ç¨ããæå³ã¯ï¼ã»ã¨ãã©ã®ãµã¼ãã¹ã³ã¼ã«ã§å¿ 1544 è¦ãªéçã¨ã©ã¼ 1545 ã®ãã§ãã¯ã³ã¼ãããã¿ã¼ã³åãï¼ã½ã¼ã¹ã³ã¼ãã®ç°¡æ½ããä¿ã¤ãã¨ã§èªã¿ã 1546 ãããåä¸ãããã¨ã¨ãã«ï¼è¨è¿°ãã¹ã®å¯è½æ§ãæ¸ãããã¨ã§ããï¼ 1547 1548 ã¡ãªã¿ã«ï¼CHECKãã¯ãã使ç¨ããªãå ´åï¼ä¸ã«ç¤ºãããµã¼ãã¹ã³ã¼ã«ã®å¦çé¢ 1549 æ°ã¯ï¼æ¬¡ã®ããã«è¨è¿°ãããã¨ã«ãªãï¼ 1092 この例では,CHECKマクロを2つ使用しているが,1つのみ使用している場合もあ 1093 れば,3つ以上使用している場合もある.また,複数のCHECKマクロの間に,ロー 1094 カル変数への代入文が入る場合もある(例えば,ter_tskの処理関数). 1095 1096 ●設計意図 1097 1098 CHECKマクロを使用する意図は,ほとんどのサービスコールで必要な静的エラー 1099 のチェックコードをパターン化し,ソースコードの簡潔さを保つことで読みや 1100 すさを向上させるとともに,記述ミスの可能性を減らすことである. 1101 1102 ちなみに,CHECKマクロを使用しない場合,上に示したサービスコールの処理関 1103 数は,次のように記述することになる. 1550 1104 1551 1105 ---------------------------------------- 1552 1106 ER 1553 < ãµã¼ãã¹ã³ã¼ã«å>(â¦â¦)1107 <サービスコール名>(……) 1554 1108 { 1555 < ãã¼ã«ã«å¤æ°ã®å®£è¨>1109 <ローカル変数の宣言> 1556 1110 ER ercd; 1557 1111 1558 LOG_XXX_YYY_ENTER( â¦â¦);1559 if (<XXXXX ã®ã¨ã©ã¼æ¡ä»¶>) {1560 ercd = <XXXXX ã®ã¨ã©ã¼ã³ã¼ã>;1112 LOG_XXX_YYY_ENTER(……); 1113 if (<XXXXXのエラー条件>) { 1114 ercd = <XXXXXのエラーコード>; 1561 1115 } 1562 1116 else { 1563 if (<YYYYY ã®ã¨ã©ã¼æ¡ä»¶>) {1564 ercd = <YYYYY ã®ã¨ã©ã¼ã³ã¼ã>;1117 if (<YYYYYのエラー条件>) { 1118 ercd = <YYYYYのエラーコード>; 1565 1119 } 1566 1120 else { 1567 1121 1568 < ãµã¼ãã¹ã³ã¼ã«å¦çæ¬ä½>1122 <サービスコール処理本体> 1569 1123 1570 1124 } 1571 1125 } 1572 LOG_XXX_YYY_LEAVE( â¦â¦);1126 LOG_XXX_YYY_LEAVE(……); 1573 1127 return(ercd); 1574 1128 } 1575 1129 ---------------------------------------- 1576 1130 1577 CHECKãã¯ãã®å 1578 容ãç¥ã£ã¦ããã¨ããåæã®ä¸ã§ã¯ï¼å 1579 ã®ã½ã¼ã¹ã³ã¼ãã®æ¹ã 1580 èªã¿ãããã®ã¯æããã§ããï¼ 1581 1582 ãªãï¼ãã®ãããªCHECKãã¯ãã®å®ç¾©ã«ã¯ï¼gotoæã®ä½¿ç¨ãä¸å¯é¿ã§ããï¼ 1583 1584 âCHECKãã¯ãã使ç¨ãã¦ããæ¡ä»¶ 1585 1586 CHECKãã¯ãã¯ï¼æ¬¡ã®æ¡ä»¶ãæºããããã«ä½¿ç¨ããªããã°ãªããªãï¼ 1587 1588 (1) CHECKãã¯ãã¯ï¼ãµã¼ãã¹ã³ã¼ã«å¦çé¢æ°ã®å 1589 é é¨åã§ï¼ãµã¼ãã¹ã³ã¼ã«å 1590 ¥ 1591 ããå£ã®ãã°ãåºããå¾ï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã«å 1592 ¥ãåã¾ã§ã«ï¼å¦çé¢æ° 1593 ããã®ãããã¬ãã«ã§ç¨ããï¼ 1594 1595 (2) ãµã¼ãã¹ã³ã¼ã«å¦çé¢æ°ã®æ«å°¾é¨åã§ï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãæãã 1596 ããå¾ï¼ãµã¼ãã¹ã³ã¼ã«åºå£ã®ãã°ãåºãåã«ï¼å¦çé¢æ°ã®ãããã¬ãã«ã«ï¼ 1597 ããerror_exitã©ãã«ãç½®ãï¼ 1598 1599 âåé¡ãçãããã¨ããªãæ ¹æ 1600 1601 ãã®ãããªæ¹æ³ã§gotoæã使ç¨ãã¦ãï¼ã½ããã¦ã§ã¢ã®ä¿¡é ¼æ§ã«åé¡ãçãã 1602 ãã¨ããªããã¨ã主張ããã«ã¯ï¼ããããï¼MISRA-Cãªã©ã®ã³ã¼ãã£ã³ã°ã«ã¼ã« 1603 ã§gotoæã®ä½¿ç¨ãç¦æ¢ãã¦ããæ ¹æ ï¼è¨ãæããã¨ï¼gotoæã®ä½¿ç¨ã«ããã½ã 1604 ãã¦ã§ã¢ã®ä¿¡é ¼æ§ã«åé¡ãçããå¯è½æ§ã®ããçç±ãæããã«ããå¿ 1605 è¦ãããï¼ 1606 1607 MISRA-Cã®ããã¥ã¡ã³ãã§ã¯ï¼gotoæã®ä½¿ç¨ãç¦æ¢ããæ ¹æ ã«ã¤ãã¦ãã¾ãæ確 1608 ã«ãªã£ã¦ãããï¼ããã§ã¯ãã®æ ¹æ ã次ã®ããã«æ¨æ¸¬ããï¼ 1609 1610 ã»å¦çã®æµããè¤éã«ãªãï¼ããã°ã©ã ã®æå³ãèªã¿ã«ãããªãï¼ããããï¼ 1611 ãã¹ãã²ããã£ããã°ã©ã ã«ãªãï¼ï¼ 1612 1613 CHECKãã¯ãã®å ´åã«ã¯ï¼gotoæãã¨ã©ã¼çºçæã®å¼·å¶è±åºã«ç¨ãã¦ããï¼ã©ã 1614 ã«ãerror_exitã¨ãããªã©ï¼ããã°ã©ã ã®æå³ã¯æããã§ããï¼ä¸æ¹ï¼ãã®ã 1615 ãã«gotoæãã¨ã©ã¼æã®å¼·å¶è±åºã«ç¨ããå ´åã«ã¯ï¼æ¬¡ã®ç¹ãgotoæã®ä½¿ç¨ã 1616 ç¦æ¢ããæ ¹æ ã«ãªãããï¼ 1617 1618 ã»gotoæã§å¼·å¶è±åºãããã¨ã«ããï¼è±åºæã«è¡ããªããã°ãªããªãå¾å¦çã 1619 ãé£ã°ãããããããããï¼ 1620 1621 ãã ããã®ç¹ã«ã¤ãã¦ãï¼CHECKãã¯ããä¸è¨ã®ä½¿ç¨æ¡ä»¶ãæºããã¦ä½¿ãéãã¯ï¼ 1622 è±åºæã«è¡ããªããã°ãªããªãå¾å¦çã¯ãªãï¼CHECKãã¯ãã®ä½¿ç¨ã«ããã½ãã 1623 ã¦ã§ã¢ã®ä¿¡é ¼æ§ã«åé¡ãçãããã¨ã¯ãªãï¼ 1624 1625 åé¡ãçãããã¨ããªããã¨ãè«è¨¼ãããã1ã¤æ¹æ³ã¯ï¼ã³ã¼ãã£ã³ã°ã«ã¼ã«ã« 1626 åè´ããªãããã°ã©ã ãï¼ã³ã¼ãã£ã³ã°ã«ã¼ã«ã«åè´ããããã°ã©ã ã¨ç価㧠1627 ãããã¨ã示ãæ¹æ³ã§ããï¼ 1628 1629 ãã§ã«ãè¨è¨æå³ãã®ç¯ã§è¿°ã¹ãããã«ï¼CHECKãã¯ãã使ç¨ããããã°ã©ã ã¯ï¼ 1630 gotoæã使ç¨ããªãç価ãªããã°ã©ã ã«æ¸ãæãããã¨ãã§ãããï¼ããä¸è¬ 1631 çã«ã¯ï¼æ¬¡ã®ãã¨ãè¨ããï¼ 1632 1633 elseé¨ãæããªãifæã®thené¨ã®æå¾ã«ï¼ifæããä¸ï¼åæ¹ï¼ã«ããï¼ifæ㨠1634 åããããã¯å 1635 ã®åãé層ã®ã©ãã«ã¸åå²ããgotoæãããå ´åã«ã¯ï¼ifæ㨠1636 ã©ãã«ã®éã®æãelseé¨ã«ãããã¨ã«ããï¼gotoæã使ããªãç価ãªããã°ã© 1637 ã ã«æ¸ãæãããã¨ãã§ããï¼ 1638 1639 ä¾ã¨ãã¦ï¼gotoæã使ã£ã次ã®ããã°ã©ã ãèããï¼ 1131 CHECKマクロの内容を知っているという前提の下では,元のソースコードの方が 1132 読みやすいのは明らかである. 1133 1134 なお,このようなCHECKマクロの定義には,goto文の使用が不可避である. 1135 1136 ●CHECKマクロを使用してよい条件 1137 1138 CHECKマクロは,次の条件を満たすように使用しなければならない. 1139 1140 (1) CHECKマクロは,サービスコール処理関数の先頭部分で,サービスコール入 1141 口のログを出した後,クリティカルセクションに入る前までに,処理関数 1142 のトップレベルで用いる. 1143 1144 (2) サービスコール処理関数の末尾部分で,クリティカルセクションを抜けた 1145 後,サービスコール出口のログを出す前に,処理関数のトップレベルに, 1146 error_exitラベルを置く. 1147 1148 ●問題を生じることがない根拠 1149 1150 このような方法でgoto文を使用しても,ソフトウェアの信頼性に問題が生じる 1151 ことがないことを主張するには,そもそも,MISRA-Cなどのコーディングルール 1152 でgoto文の使用を禁止している根拠,言い換えると,goto文の使用によりソフ 1153 トウェアの信頼性に問題が生じる可能性のある理由を明らかにする必要がある. 1154 1155 MISRA-Cのドキュメントでは,goto文の使用を禁止する根拠についてあまり明確 1156 になっておらず,ここではその根拠を次のように推測する. 1157 1158 ・処理の流れが複雑になり,プログラムの意図が読みにくくなる(いわゆる, 1159 スパゲッティプログラムになる). 1160 1161 CHECKマクロの場合には,goto文をエラー発生時の強制脱出に用いており,ラベ 1162 ルもerror_exitとするなど,プログラムの意図は明らかである.一方,このよ 1163 うにgoto文をエラー時の強制脱出に用いる場合には,次の点もgoto文の使用を 1164 禁止する根拠になりうる. 1165 1166 ・goto文で強制脱出することにより,脱出時に行わなければならない後処理が 1167 飛ばされるおそれがある. 1168 1169 ただしこの点についても,CHECKマクロを上記の使用条件を満たして使う限りは, 1170 脱出時に行わなければならない後処理はなく,CHECKマクロの使用によりソフト 1171 ウェアの信頼性に問題が生じることはない. 1172 1173 問題を生じることがないことを論証するもう1つ方法は,コーディングルールに 1174 合致しないプログラムが,コーディングルールに合致したプログラムと等価で 1175 あることを示す方法である. 1176 1177 すでに「設計意図」の節で述べたように,CHECKマクロを使用したプログラムは, 1178 goto文を使用しない等価なプログラムに書き換えることができるが,より一般 1179 的には,次のことが言える. 1180 1181 else部を持たないif文のthen部の最後に,if文より下(前方)にあり,if文と 1182 同じブロック内の同じ階層のラベルへ分岐するgoto文がある場合には,if文と 1183 ラベルの間の文をelse部にすることにより,goto文を使わない等価なプログラ 1184 ムに書き換えることができる. 1185 1186 例として,goto文を使った次のプログラムを考える. 1640 1187 1641 1188 ---------------------------------------- 1642 1189 { 1643 /* if æã®åã®æ*/1190 /* if文の前の文 */ 1644 1191 if (....) { 1645 /* then é¨ã®æ*/1646 goto < ã©ãã«>;1192 /* then部の文 */ 1193 goto <ラベル>; 1647 1194 } 1648 /* if æã¨ã©ãã«ã®éã®æ*/1649 < ã©ãã«>:1650 /* ã©ãã«ããå¾ãã®æ*/1195 /* if文とラベルの間の文 */ 1196 <ラベル>: 1197 /* ラベルより後ろの文 */ 1651 1198 } 1652 1199 ---------------------------------------- 1653 1200 1654 ãã®ããã°ã©ã ã¯ï¼gotoæã使ããªã次ã®ããã°ã©ã ã¨ç価ã§ããï¼ 1201 このプログラムは,goto文を使わない次のプログラムと等価である. 1655 1202 1656 1203 ---------------------------------------- 1657 1204 { 1658 /* if æã®åã®æ*/1205 /* if文の前の文 */ 1659 1206 if (....) { 1660 /* then é¨ã®æ*/1207 /* then部の文 */ 1661 1208 } 1662 1209 else { 1663 /* if æã¨ã©ãã«ã®éã®æ*/1210 /* if文とラベルの間の文 */ 1664 1211 } 1665 /* ã©ãã«ããå¾ãã®æ*/1212 /* ラベルより後ろの文 */ 1666 1213 } 1667 1214 ---------------------------------------- 1668 1215 1669 ãã®æ¡ä»¶ã«åè´ããgotoæãè¤æ°ããå ´åã«ã¯ï¼ä¸ã«ããgotoæããé ã«ä¸è¨ 1670 ã®æ¹æ³ã«ãã£ã¦æ¸ãæãããã¨ã§ï¼gotoæã使ããªãç価ãªããã°ã©ã ã«æ¸ã 1671 æãããã¨ãã§ããï¼ 1672 1673 CHECKãã¯ãã®ä½¿ç¨æ¹æ³ã¯ï¼ä¸è¨ã®gotoæã®ä½¿ç¨æ¹æ³ã«åè´ããããï¼gotoæã 1674 使ç¨ããªãç価ãªããã°ã©ã ã«æ¸ãæãããã¨ãã§ããï¼ãã£ã¦ï¼ãã®CHECKã 1675 ã¯ãã«ããåé¡ãçãããã¨ã¯ãªãï¼ 1676 1677 1678 âext_tskï¼ext_kerã®è¿ãå¤ 1679 1680 μITRON4.0ä»æ§ã§ã¯ï¼ext_tskã¯ãªã¿ã¼ã³ãããã¨ã®ãªããµã¼ãã¹ã³ã¼ã«ã¨ãªã£ 1681 ã¦ãããï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«ã«ããã¦ã¯ï¼ãã®ãµã¼ãã¹ã³ã¼ã«ã®è¿ãå¤ã 1682 ERåã«å¤æ´ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãããå¼ã°ããå ´åã«ã¯ï¼E_CTXã¨ã©ã¼ãè¿ 1683 ãå¤ã¨ãã¦ãªã¿ã¼ã³ãããã¨ã¨ããï¼ 1684 1685 ãã®ä»æ§ã«å¯¾ããããã¤ãã®å¯¾æ¡ãæ¤è¨ãããï¼ä»¥ä¸ã®çç±ã§æ¡ç¨ããªãï¼ 1686 1687 ã»JSPã«ã¼ãã«ã®ããã«ï¼å±éºã®å¯è½æ§ãæ¤åºããªããå®è¡ãç¶ç¶ããæ¹æ³ã¯ï¼ 1688 ãä¿¡é ¼æ§ã»å®å 1689 ¨æ§ãéè¦ããã·ã¹ãã ã§ã¯æã¾ãããªãï¼ä¿¡é ¼æ§ã»å®å 1690 ¨æ§ãé 1691 ãè¦ããã·ã¹ãã ã§ã¯ï¼å±éºã®å¯è½æ§ãæ¤åºãããï¼æ©æã«ãªã«ããªããã¹ã 1692 ãã§ããï¼ 1693 1694 ã»ASPã«ã¼ãã«ã®å½åæ¡ã®ã«ã¼ãã«ããã¦ã³ãããæ¹æ³ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³å´ 1695 ãã§å復ããä½å°ããªããã¨ããæå³ã§æã¾ãããªãï¼ 1696 1697 ã»éå»ã®äºææ§ãä¿ã¤ããã«ï¼åãvoidã¨ããã¾ã¾ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã 1698 ããå¼ã°ããå ´åã«ã¯ãªã¿ã¼ã³ããã¨ããæ¹æ³ã¯ï¼ã«ã¼ãã«ã®ä»æ§å¤æ´ã«æ°ã¥ 1699 ããã«ãããªãã¨ããæå³ã§æã¾ãããªãï¼ã¾ãï¼ä»ã®ã¨ã©ã¼ã³ã¼ãï¼ä¾ãã° 1700 ãE_NOSPTï¼ãè¿ãä½å°ããªããã¦ããï¼ 1701 1702 ã»ä¸ç¨®ã®CPUä¾å¤ãå¼ã³åºããã¨ã«ããæ¹æ³ã¯ï¼ã«ã¼ãã«ä»æ§å 1703 ¨ä½ã®æ´åæ§ãè 1704 ããã¦æ¡ç¨ããªãã£ãï¼ããã§ä¸ç¨®ã®CPUä¾å¤ãå°å 1705 ¥ãããããï¼ãµã¼ãã¹ã³ã¼ 1706 ãã«ãã¨ã©ã¼ãè¿ããå ´åã«å¼ã°ããOSEK/VDX OSä»æ§ã®ã¨ã©ã¼ããã¯ã«ç¸å½ã 1707 ããæ©è½ãå°å 1708 ¥ããæ¹ãæç¨æ§ãé«ãã¨æãããããã§ããï¼ 1709 1710 ãã®å¤æ´ã«ããï¼ããã«ï¼CPUããã¯ç¶æ 1711 ããã£ã¹ãããç¦æ¢ç¶æ 1712 ã§ext_tskã 1713 å¼ã°ããå ´åã«ãã¨ã©ã¼ãªã¿ã¼ã³ããæ¹æ³ãèãããããï¼ã¿ã¹ã¯ã®ã¡ã¤ã³ã«ã¼ 1714 ãã³ããã®ãªã¿ã¼ã³ã¨ext_tskãç価ã«ãªããªãããï¼æ¡ç¨ããªãï¼ã¾ãï¼ä»ã® 1715 å¦çåä½ããã®ãªã¿ã¼ã³æ¹æ³ã¨æ´åãããæå³ãããï¼ä¾ãã°ï¼å²è¾¼ã¿ãã³ã 1716 ã©ããCPUããã¯ç¶æ 1717 ã®ã¾ã¾ãªã¿ã¼ã³ããå ´åã®æ±ãï¼ï¼ 1718 1719 ããã«ãããã¦ï¼ext_kerã«ã¤ãã¦ãï¼è¿ãå¤ãERåã«å¤æ´ããï¼ASPã«ã¼ãã« 1720 ã§ã¯ï¼ext_kerãã¨ã©ã¼ãè¿ããã¨ã¯ãªããï¼HRPã«ã¼ãã«ã§ã¯ï¼E_OACVã¨ã©ã¼ 1721 ãè¿ãå ´åãããï¼ 1722 1723 ãªãï¼Î¼ITRON4.0ä»æ§ã§ã¯ï¼exd_tskããªã¿ã¼ã³ãããã¨ã®ãªããµã¼ãã¹ã³ã¼ã« 1724 ã¨ãªã£ã¦ãããï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«ã§ã¯ï¼exd_tskã¯ãµãã¼ããã¦ããªãï¼ 1725 1726 1727 âã«ã¼ãã«ã®ãã¼ã¿æ§é ã«å¯¾ããvolatile宣è¨ã«ã¤ãã¦ï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ 1728 ã³ã®åºå 1729 ¥å¦çã®å®ç¾ã«é¢ããå¶ç´ï¼ 1730 1731 ã«ã¼ãã«å 1732 ã®ãã¼ã¿æ§é ã¯ï¼ä¸¦è¡å®è¡ãããä»ã®å¦çåä½ï¼å²è¾¼ã¿ãã³ãã©ã 1733 ã¿ã¹ã¯ï¼ãããã¢ã¯ã»ã¹ãããå¯è½æ§ãããããï¼volatile宣è¨ãå¿ 1734 è¦ã§ã¯ãª 1735 ããã¨èããããï¼å®éï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³å 1736 ã§ã«ã¼ãã«å¤æ°ãèªãã³ã¼ 1737 ããï¼ã³ã³ãã¤ã©ã®æé©åã«ããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³å¤ã«ç§»åããï¼ãã 1738 ãåå ã¨ãªã£ãåé¡äºä¾ãå ±åããã¦ããï¼ 1739 1740 ã«ã¼ãã«å 1741 ã®ãã¹ã¦ã®ãã¼ã¿æ§é ã«volatile宣è¨ãã¤ããæ¹æ³ã¯ï¼å®å 1742 ¨ã§ã¯ã 1743 ããï¼æé©åãææ¢ãããããã«ï¼ã«ã¼ãã«ã®ãµã¤ãºãæ§è½ã«ã¯æªå½±é¿ãä¸ã 1744 ãï¼ããã§ASPã«ã¼ãã«ã§ã¯ï¼æ¬¡ã®æ¹æ³ã§volatile宣è¨ã®å¿ 1745 è¦æ§ããªãããã¨ã¨ 1746 ããï¼ 1747 1748 ASPã«ã¼ãã«ã«ããã¦ã¯ï¼ä¸¦è¡å®è¡ãããä»ã®å¦çåä½ããæ¸ãæããããå¯è½ 1749 æ§ã®ãããã¼ã¿æ§é ã¯ï¼ãã¹ã¦ï¼CPUããã¯ç¶æ 1750 ã¾ãã¯å 1751 ¨å²è¾¼ã¿ããã¯ç¶æ 1752 ã«ã 1753 ãã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³å 1754 ã§ã¢ã¯ã»ã¹ãã¦ããï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³å 1755 1756 ã§ã®ãã¼ã¿æ§é ã®ã¢ã¯ã»ã¹ãï¼ã³ã³ãã¤ã©ã®æé©åã«ããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ 1757 ã³å¤ã«ç§»åãããªãããã«ããã«ã¯ï¼ã³ã³ãã¤ã©ã«å¯¾ãã¦ï¼ã¯ãªãã£ã«ã«ã»ã¯ 1758 ã·ã§ã³ã®åºå 1759 ¥å¦çã«ããï¼ã¡ã¢ãªä¸ã®ãã¼ã¿æ§é ãæ¸ãå¤ããå¯è½æ§ãããã 1760 ã¨ãç¥ãããã°ããï¼ 1761 1762 å 1763 ·ä½çã«ã¯ï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1764 ¥å¦çãé¢æ°ã«ãã£ã¦å®ç¾ããã°ï¼ 1765 ãã®ãããªæé©åãææ¢ãããã¨ãã§ããï¼ãããï¼ASPã«ã¼ãã«ã®å¤ãã®ã¿ã¼ 1766 ã²ããä¾åé¨ã«ããã¦ï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1767 ¥å¦çã¯ãã¯ããã¤ã³ã© 1768 ã¤ã³é¢æ°ã«ããå®è£ 1769 ããã¦ããï¼ä¸ã®ãããªæé©åãææ¢ã§ããªãï¼ 1770 1771 ããã§ï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1772 ¥å¦çãå®ç¾ããå ´åã«ã¯ï¼ã¡ã¢ãªä¸ã® 1773 ãã¼ã¿æ§é ãæ¸ãå¤ããå¯è½æ§ããããã¨ãï¼ä½ããã®æ¹æ³ã§ã³ã³ãã¤ã©ã«ç¥ 1774 ãããªããã°ãªããªãã¨ããå¶ç´ãè¨ããï¼GNUéçºç°å¢ã§ã¯ï¼æ¬¡ã®ããããã® 1775 æ¹æ³ã§ãã®å¶ç´ãæºãããã¨ãã§ããï¼ 1776 1777 (a) ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1778 ¥å¦çã®å 1779 ¨ä½ã¾ãã¯åºå 1780 ¥å¦çã®æ¬è³ªçãªé¨å 1781 ï¼å 1782 ·ä½çã«ã¯ï¼å²è¾¼ã¿ç¦æ¢ï¼è¨±å¯ããå¦çï¼ãï¼ã¤ã³ã©ã¤ã³ã§ãªãï¼é常 1783 ã®é¢æ°ã«ããå®ç¾ããï¼ 1784 1785 (b) ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1786 ¥å¦çã®æ¬è³ªçãªé¨åãã¤ã³ã©ã¤ã³ã¢ã»ã³ã 1787 ã©ã«ãã£ã¦å®ç¾ãã¦ããå ´åã«ã¯ï¼ãã®ã¤ã³ã©ã¤ã³ã¢ã»ã³ãã©ã®clobberå¤ 1788 æ°ãªã¹ãã«"memory"ã追å ããï¼ 1789 1790 (c) ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1791 ¥å¦çã®æ¬è³ªçãªé¨åãï¼ãã¯ããã¤ã³ã©ã¤ 1792 ã³é¢æ°å¼åºãã§å®ç¾ãã¦ããå ´åã«ã¯ï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã«å 1793 ¥ãå¦ 1794 çã®æå¾ã¨åºãå¦çã®å 1795 é ã«ï¼Asm("":::"memory")ã¨ããè¨è¿°ãå 1796 ¥ããï¼ 1797 1798 ãªãï¼ãã®å¶ç´ãé©ç¨ãããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1799 ¥å¦çã¯ï¼ä»¥ä¸ã®ã 1800 ã®ã§ããï¼ 1216 この条件に合致するgoto文が複数ある場合には,下にあるgoto文から順に上記 1217 の方法によって書き換えることで,goto文を使わない等価なプログラムに書き 1218 換えることができる. 1219 1220 CHECKマクロの使用方法は,上記のgoto文の使用方法に合致するため,goto文を 1221 使用しない等価なプログラムに書き換えることができる.よって,このCHECKマ 1222 クロにより問題を生じることはない. 1223 1224 1225 ○ext_tsk,ext_kerの返り値 1226 1227 μITRON4.0仕様では,ext_tskはリターンすることのないサービスコールとなっ 1228 ているが,TOPPERS新世代カーネルにおいては,このサービスコールの返り値を 1229 ER型に変更し,非タスクコンテキストから呼ばれた場合には,E_CTXエラーを返 1230 り値としてリターンすることとする. 1231 1232 この仕様に対するいくつかの対案を検討したが,以下の理由で採用しない. 1233 1234 ・JSPカーネルのように,危険の可能性を検出しながら実行を継続する方法は, 1235 信頼性・安全性を重視するシステムでは望ましくない.信頼性・安全性を重 1236 視するシステムでは,危険の可能性を検出したら,早期にリカバリをすべき 1237 である. 1238 1239 ・ASPカーネルの当初案のカーネルをダウンさせる方法は,アプリケーション側 1240 で回復する余地をなくすという意味で望ましくない. 1241 1242 ・過去の互換性を保つために,型をvoidとしたまま,非タスクコンテキストか 1243 ら呼ばれた場合にはリターンするとする方法は,カーネルの仕様変更に気づ 1244 きにくくなるという意味で望ましくない.また,他のエラーコード(例えば 1245 E_NOSPT)を返す余地をなくしている. 1246 1247 ・一種のCPU例外を呼び出すことにする方法は,カーネル仕様全体の整合性を考 1248 えて採用しなかった.ここで一種のCPU例外を導入するよりも,サービスコー 1249 ルがエラーを返した場合に呼ばれるOSEK/VDX OS仕様のエラーフックに相当す 1250 る機能を導入した方が有用性が高いと思われるためである. 1251 1252 この変更により,さらに,CPUロック状態やディスパッチ禁止状態でext_tskが 1253 呼ばれた場合にもエラーリターンする方法が考えられるが,タスクのメインルー 1254 チンからのリターンとext_tskが等価にならないため,採用しない.また,他の 1255 処理単位からのリターン方法と整合させる意味もある(例えば,割込みハンド 1256 ラからCPUロック状態のままリターンした場合の扱い). 1257 1258 これにあわせて,ext_kerについても,返り値をER型に変更する.ASPカーネル 1259 では,ext_kerがエラーを返すことはないが,HRPカーネルでは,E_OACVエラー 1260 を返す場合がある. 1261 1262 なお,μITRON4.0仕様では,exd_tskもリターンすることのないサービスコール 1263 となっているが,TOPPERS新世代カーネルでは,exd_tskはサポートしていない. 1264 1265 1266 ○カーネルのデータ構造に対するvolatile宣言について(クリティカルセクショ 1267 ンの出入処理の実現に関する制約) 1268 1269 カーネル内のデータ構造は,並行実行される他の処理単位(割込みハンドラや 1270 タスク)からもアクセスされる可能性があるため,volatile宣言が必要ではな 1271 いかと考えられる.実際,クリティカルセクション内でカーネル変数を読むコー 1272 ドが,コンパイラの最適化によりクリティカルセクション外に移動され,それ 1273 が原因となった問題事例も報告されている. 1274 1275 カーネル内のすべてのデータ構造にvolatile宣言をつける方法は,安全ではあ 1276 るが,最適化が抑止されるために,カーネルのサイズや性能には悪影響を与え 1277 る.そこでASPカーネルでは,次の方法でvolatile宣言の必要性をなくすことと 1278 する. 1279 1280 ASPカーネルにおいては,並行実行される他の処理単位から書き換えられる可能 1281 性のあるデータ構造は,すべて,CPUロック状態または全割込みロック状態によ 1282 るクリティカルセクション内でアクセスしている.クリティカルセクション内 1283 でのデータ構造のアクセスが,コンパイラの最適化によりクリティカルセクショ 1284 ン外に移動されないようにするには,コンパイラに対して,クリティカルセク 1285 ションの出入処理により,メモリ上のデータ構造が書き変わる可能性があるこ 1286 とを知らせればよい. 1287 1288 具体的には,クリティカルセクションの出入処理を関数によって実現すれば, 1289 このような最適化を抑止することができる.しかし,ASPカーネルの多くのター 1290 ゲット依存部において,クリティカルセクションの出入処理はマクロやインラ 1291 イン関数により実装されており,上のような最適化を抑止できない. 1292 1293 そこで,クリティカルセクションの出入処理を実現する場合には,メモリ上の 1294 データ構造が書き変わる可能性があることを,何らかの方法でコンパイラに知 1295 らせなければならないという制約を設ける.GNU開発環境では,次のいずれかの 1296 方法でこの制約を満たすことができる. 1297 1298 (a) クリティカルセクションの出入処理の全体または出入処理の本質的な部分 1299 (具体的には,割込み禁止/許可する処理)を(インラインでない)通常 1300 の関数により実現する. 1301 1302 (b) クリティカルセクションの出入処理の本質的な部分をインラインアセンブ 1303 ラによって実現している場合には,そのインラインアセンブラのclobber変 1304 数リストに"memory"を追加する. 1305 1306 (c) クリティカルセクションの出入処理の本質的な部分が,マクロやインライ 1307 ン関数呼出しで実現している場合には,クリティカルセクションに入る処 1308 理の最後と出る処理の先頭に,Asm("":::"memory")という記述を入れる. 1309 1310 なお,この制約が適用されるクリティカルセクションの出入処理は,以下のも 1311 のである. 1801 1312 1802 1313 SIL_LOC_INT … … 1806 1317 1807 1318 1808 âåãã£ã¹ãã«ä¼´ãè¦åã¡ãã»ã¼ã¸ 1809 1810 GCC ã§-O2ãªãã·ã§ã³ãã¤ãã¦ã³ã³ãã¤ã«ããå ´åã«ï¼ã«ã¼ãã«ã®ã½ã¼ã¹ã³ã¼ã1811 ä¸ã®æ°ç®æã§ï¼æ¬¡ã®è¦åã¡ãã»ã¼ã¸ãåºãï¼GCCã®ãã¼ã¸ã§ã³ã«ãããï¼ï¼ 1319 ○型キャストに伴う警告メッセージ 1320 1321 GCCで-O2オプションをつけてコンパイルした場合に,カーネルのソースコード 1322 中の数箇所で,次の警告メッセージが出る(GCCのバージョンにもよる). 1812 1323 1813 1324 warning: dereferencing type-punned pointer will break strict-aliasing rules 1814 1325 1815 ããã¯ï¼GCCã«-O2ãªãã·ã§ã³ãã¤ããã¨ï¼ã³ã³ãã¤ã©ãCè¨èªã®strict 1816 aliasing ruleãåæã¨ããããã§ããï¼ã³ã³ãã¤ã©ã«strict aliasing ruleã 1817 é©ç¨ãããªãããã«ã¯ï¼GCCã®ãªãã·ã§ã³ã«-fno-strict-aliasingãæå®ããã° 1818 ããï¼ããã«ããï¼è¦åã¡ãã»ã¼ã¸ã¯ææ¢ããããï¼strict aliasing ruleã 1819 åæã¨ããæé©åã¯è¡ãããªããªãï¼ 1820 1821 ASPã«ã¼ãã«ã«å®è£ 1822 ã«ããã¦ã¯ï¼strict aliasing ruleãåæã¨ããæé©åãè¡ã£ 1823 ã¦ãããï¼ãã®è¦åã¡ãã»ã¼ã¸ãç¡è¦ãã¦ãå·®ãæ¯ããªãï¼ä»¥ä¸ã§ã¯ï¼ãã®è¦ 1824 åã¡ãã»ã¼ã¸ãç¡è¦ãã¦ãå·®ãæ¯ããªãçç±ãè¿°ã¹ãï¼ 1825 1826 è¦åã¡ãã»ã¼ã¸ãåºãä¾ã¨ãã¦ï¼semaphore.cä¸ã®æ¬¡ã®è¡ã«ã¤ãã¦æ¤è¨ããï¼ 1326 これは,GCCに-O2オプションをつけると,コンパイラがC言語のstrict 1327 aliasing ruleを前提とするためである.コンパイラにstrict aliasing ruleを 1328 適用させないためには,GCCのオプションに-fno-strict-aliasingを指定すれば 1329 よい.これにより,警告メッセージは抑止されるが,strict aliasing ruleを 1330 前提とした最適化は行われなくなる. 1331 1332 ASPカーネルに実装においては,strict aliasing ruleを前提とした最適化を行っ 1333 てもよく,この警告メッセージを無視しても差し支えない.以下では,この警 1334 告メッセージを無視しても差し支えない理由を述べる. 1335 1336 警告メッセージが出る例として,semaphore.c中の次の行について検討する. 1827 1337 1828 1338 wobj_make_wait((WOBJCB *) p_semcb, (WINFO_WOBJ *) &winfo_sem); 1829 1339 1830 ãã®è¦åã¡ãã»ã¼ã¸ã®åå ã¯ï¼ç´æ¥çã«ã¯ï¼&winfo_semã(WINFO_WOBJ *)ã«ã㣠1831 ã¹ããã¦ãããã¨ã§ãããï¼æ¬è³ªçãªåå ã¯ï¼ãã®ã³ã¼ããCè¨èªã®strict 1832 aliasing ruleã«å¾ããªã代å 1833 ¥æã®åå ã«ãªãå¯è½æ§ãããï¼ãã®ã«ã¼ã«ã«ä¾å 1834 ããæé©åã誤ã£ãçµæãå¼ãèµ·ããå¯è½æ§ããããã¨ã§ããï¼ 1835 1836 Cè¨èªã®strict aliasing ruleã¯ï¼äºææ§ã®ãªãç°ãªãåãéãã¦ï¼ãªã¼ãã©ã 1837 ãããã¡ã¢ãªé åãã¢ã¯ã»ã¹ãã代å 1838 ¥æã使ç¨ãã¦ã¯ãªããªãã¨ãããã®ã§ã 1839 ãï¼ä½¿ç¨ããå ´åã®æ¯èãã¯æªå®ç¾©ã«ãªãï¼ï¼ãã®ã±ã¼ã¹ã§ã¯ï¼(WINFO_SEM 1840 *)åã®ãã¤ã³ã¿çµç±ã¨(WINFO_WOBJ *)åã®ãã¤ã³ã¿çµç±ã§ï¼ãªã¼ãã©ãããã 1841 ã¡ã¢ãªé åãã¢ã¯ã»ã¹ãã代å 1842 ¥æã使ç¨ãã¦ã¯ãªããªããã¨ã«ãªãï¼ã¾ãï¼è¦ 1843 åã¡ãã»ã¼ã¸ã®åå ã«ãªã£ã¦ã¯ããªããï¼(SEMCB *)åã®ãã¤ã³ã¿çµç±ã¨ 1844 (WOBJCB *)åã®ãã¤ã³ã¿çµç±ã§ï¼ãªã¼ãã©ããããã¡ã¢ãªé åãã¢ã¯ã»ã¹ãã 1845 代å 1846 ¥æã使ç¨ãã¦ã¯ãªããªãï¼ 1847 1848 ASPã«ã¼ãã«ã®å®è£ 1849 ã«ããã¦ã¯ï¼semaphore.cä¸ã®é¢æ°ã«ããã¦ã¯ï¼(SEMCB *)å 1850 ããã³(WINFO_SEM *)åã®ãã¤ã³ã¿ã使ç¨ãã¦ããï¼(WOBJCB *)åããã³ 1851 (WINFO_WOBJ *)åã®ãã¤ã³ã¿çµç±ã§ã¡ã¢ãªé åãã¢ã¯ã»ã¹ãããã¨ã¯ãªãï¼ä¸ 1852 æ¹ï¼ããããå¼ã³åºãããwait.cä¸ã®é¢æ°ã«ããã¦ã¯ï¼(WOBJCB *)åããã³ 1853 (WINFO_WOBJ *)åã®ãã¤ã³ã¿ã使ç¨ãã¦ããï¼(SEMCB *)åããã³(WINFO_SEM 1854 *)åã®ãã¤ã³ã¿çµç±ã§ã¡ã¢ãªé åãã¢ã¯ã»ã¹ãããã¨ã¯ãªãï¼ 1855 1856 strict aliasing ruleã«å¾ããªã代å 1857 ¥æã®åé¡ç¹ã¯ï¼ãã®ã«ã¼ã«ã«ä¾åããæ 1858 é©åã誤ã£ãçµæãå¼ãèµ·ããå¯è½æ§ããããã¨ã§ãããï¼ç°ãªãã³ã³ãã¤ã« 1859 åä½ãã¾ããã§æé©åãè¡ããããã¨ã¯ãªãããï¼ããã«ããåé¡ãèµ·ããã 1860 ã¨ã¯ãªãã¨è¨ããã¨ãã§ããï¼ 1861 1862 åãè°è«ã¯ï¼ä»ã®ã½ã¼ã¹ãã¡ã¤ã«ï¼eventflag.cï¼dataqueue.cï¼pridataq.cï¼ 1863 mailbox.cï¼mempfix.cï¼ä¸ã®è¦åã¡ãã»ã¼ã¸ã«ã¤ãã¦ãï¼ãã®ã¾ã¾å½ã¦ã¯ã¾ãï¼ 1864 1865 1866 âæ§è½è©ä¾¡ç¨ã·ã¹ãã æå»åç 1867 §æ©è½ 1868 1869 âå¿ 1870 è¦æ§ã¨ä½¿é 1871 1872 ASPã«ã¼ãã«ã«ã¯ï¼ASPã«ã¼ãã«ä¸ã§åä½ããã¿ã¹ã¯ãASPã«ã¼ãã«èªèº«ã®æ§è½ã 1873 è¨æ¸¬ããããã«ï¼ã·ã¹ãã æå»ãã精度ã®é«ãæ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ãèªã¿ 1874 åºãæ©è½ããµãã¼ãããï¼æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã¯ï¼ãã¤ã¯ãç§åä½ã§è¡¨ç¾ 1875 ããããï¼å®éã®ç²¾åº¦ã¯ã¿ã¼ã²ããä¾åã§ããï¼ 1876 1877 ãã®æ©è½ãç¨ãã¦ããããã°ã©ã ã®å®è¡æéãè¨æ¸¬ããã«ã¯ï¼ãã®å®è¡ç´å㨠1878 å®è¡ç´å¾ã«æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ãèªã¿åºãï¼ãã®å·®ãæ±ããï¼ãã®ããï¼ 1879 æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã¯å¸¸ã«ç¸å¯¾å¤ã使ç¨ãï¼æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®çµ¶ 1880 対å¤ã使ç¨ãããã¨ã¯æ³å®ãã¦ããªãï¼ 1881 1882 âAPIä»æ§ 1883 1884 æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»åç 1885 §æ©è½ã§ã¯ï¼æ¬¡ã®ãã¼ã¿åãç¨ããï¼ 1886 1887 SYSUTM æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ï¼ç¬¦å·ç¡ãæ´æ°ï¼åä½ã¯ãã¤ã¯ãç§ï¼ 1888 32ããã以ä¸ï¼ 1889 1890 SYSUTMåã¯ï¼ã¿ã¼ã²ããéä¾åé¨ã«ããã¦ulong_tåï¼ããªãã¡ï¼unsigned 1891 longåï¼ã«å®ç¾©ããã¦ããï¼ãã®ãµã¤ãºã¯ï¼32ããã以ä¸ã§ï¼ã¿ã¼ã²ããå®ç¾© 1892 ã§ããï¼ 1893 1894 æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ãSYSUTMåã§è¡¨ç¾ã§ããç¯å²ãè¶ 1895 ããï¼ã¤ã¾ãï¼ãªã¼ 1896 ãããã¼ããï¼å ´åï¼æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã¯0ã«æ»ãï¼è©ä¾¡å¯¾è±¡ããã°ã©ã 1897 ã®å®è¡åå¾ã®æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®å·®ãæ±ããå ´åã«ã¯ï¼è¨æ¸¬ããæéã 1898 SYSUTMåã§è¡¨ç¾ã§ããç¯å²ã§ããéãï¼0ã«æ»ããã¨ãç¹å¥ã«èæ 1899 ®ããå¿ 1900 è¦ã¯ãª 1901 ãï¼ 1902 1903 SYSUTMåã32ãããã®å ´åï¼æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã¯ç´71åã§ãªã¼ãããã¼ 1904 ããï¼ãã®ããï¼ãã®æ©è½ã71åãè¶ããæéã®æ¸¬å®ã«ä½¿ã£ãå ´åã®åä½ã¯ä¿ 1905 証ãããªãï¼ 1906 1907 æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»åç 1908 §æ©è½ã®ããã®ãµã¼ãã¹ã³ã¼ã«ã®ä»æ§ã«ã¤ãã¦ã¯ï¼ 1909 ãTOPPERSæ°ä¸ä»£ã«ã¼ãã«çµ±åä»æ§æ¸ãã®ã4.6.1 ã·ã¹ãã æå»ç®¡çãã®ç¯ãå 1910 ç 1911 §ãããã¨ï¼ 1912 1913 âå®è£ 1914 1915 1916 æå»ããã¤ã¯ãç§åä½ã§åå¾ããããã«ï¼å¨æçãªã¿ã¤ã ãã£ãã¯ãä¾çµ¦ãã 1917 ã¿ã¤ãã®ç¾å¨å¤ï¼ã¿ã¤ãã¯ã«ã¦ã³ãã¢ãããããã®ã¨ä»®å®ããï¼ãèªã¿åºãï¼ 1918 ããããã¤ã¯ãç§åä½ã«æç®ããå¤ã«ï¼ç¾å¨ã®ã·ã¹ãã æå»ï¼ããªç§åä½ã§è¡¨ 1919 ç¾ãããï¼ã1000åããå¤ãå ãããã®ãæ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã¨ããï¼ç¾ 1920 å¨ã®ã·ã¹ãã æå»ã1000åããéã«ï¼ãªã¼ãããã¼ãçºçããå¯è½æ§ããããï¼ 1921 ç¡è¦ãã¦ãã¾ããªãï¼ 1922 1923 ãã ãï¼ã·ã¹ãã æå»ã®ç¾å¨å¤ã¨ã¿ã¤ãã®ç¾å¨å¤ãä¸è²«ããç¶æ 1924 ã§èªã¿åºãã® 1925 ã¯å®¹æã§ã¯ãªãï¼ä¸¡æ¹ã®å¤ãé ã«èªã¿åºãã¨ï¼èªåºãã®éã«ã¿ã¤ãããªã¼ãã 1926 ãã¼ãã¦å²è¾¼ã¿è¦æ±ãçºçããå ´åã«ï¼çæ¹ã¯ãªã¼ãããã¼åã®å¤ï¼ããçæ¹ 1927 ã¯ãªã¼ãããã¼å¾ã®å¤ãèªãã§ãã¾ãï¼èª¤ã£ãæ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ãåå¾ 1928 ãã¦ãã¾ãï¼ 1929 1930 ãã®åé¡ã解決ããæ¹æ³ã¯ããã¤ãèãããããï¼ã©ã®æ¹æ³ãæ¡ç¨ããã®æ±ºå® 1931 ã«ãããï¼æ¬¡ã®è¦æ±äºé 1932 ãè¨å®ããï¼ 1933 1934 (1) å¤ãã®ã¿ã¼ã²ããã·ã¹ãã ã§å®ç¾ã§ãããã¨ï¼ 1935 1936 (2) ãµã¼ãã¹ã³ã¼ã«ã®å®è¡æéãå¯è½ãªéãä¸å®ã¨ãªããã¨ï¼è¨ãæããã¨ï¼ 1937 æ¡ä»¶ã«ãã£ã¦ãµã¼ãã¹ã³ã¼ã«ã®å®è¡æéã大ããå¤åããªããã¨ï¼ 1938 1939 (3) ãµã¼ãã¹ã³ã¼ã«ä¸ã®å¯è½ãªéãåãã¿ã¤ãã³ã°ã®æå»ãè¿ããã¨ï¼è¨ãæ 1940 ããã¨ï¼æ¡ä»¶ã«ãã£ã¦æå»ãèªã¿åãã¿ã¤ãã³ã°ãå¤åããªããã¨ï¼ 1941 1942 (4) 調æ´ããå¿ 1943 è¦ã®ãããã©ã¡ã¼ã¿ãæå°éã¨ãããã¨ï¼ 1944 1945 ãããã®è¦æ±äºé 1946 ãæºããæ¹æ³ã¨ãã¦ï¼æ¬¡ã®æ¹æ³ãç¨ãããã¨ã«ããï¼ 1947 1948 ã¾ãï¼NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ãç¦æ¢ããç¶æ 1949 ã§ï¼ã·ã¹ãã æå»ã®ç¾å¨å¤ï¼ã¿ 1950 ã¤ãã®ç¾å¨å¤ï¼1åç®ï¼ï¼ã¿ã¤ãå²è¾¼ã¿è¦æ±ã®æç¡ï¼ã¿ã¤ãã®ç¾å¨å¤ï¼2åç®ï¼ 1951 ãï¼ãã®é ã§èªã¿åºãï¼å²è¾¼ã¿ãç¦æ¢ãã¦ããããï¼ãã®éã«ã·ã¹ãã æå»ã® 1952 ç¾å¨å¤ãå¤åãããã¨ã¯ãªãï¼ã·ã¹ãã æå»ã®ç¾å¨å¤ãèªã¿åºãé çªã¯ã©ã㧠1953 ãããï¼ã¾ãï¼ã¿ã¤ãã®ç¾å¨å¤ã®2åç®ã®èªåºãã¯ï¼ã¿ã¤ãå²è¾¼ã¿è¦æ±ããã£ã 1954 å ´åã«ã®ã¿å¿ 1955 è¦ã¨ãªããï¼(2)ã®è¦æ±ããï¼ã¿ã¤ãå²è¾¼ã¿è¦æ±ã®æç¡ã«ãããèª 1956 ã¿åºããã¨ã¨ããï¼ 1957 1958 ãããã®å¤ãèªã¿åºããå¾ï¼å²è¾¼ã¿ç¦æ¢ã解é¤ãï¼æ¬¡ã®å¦çãè¡ãï¼ã¾ãï¼ã¿ 1959 ã¤ãå²è¾¼ã¿è¦æ±ããªãã£ãå ´åã«ã¯ï¼ã·ã¹ãã æå»ã®ç¾å¨å¤ã¨ï¼1åç®ã«èªãã 1960 ã¿ã¤ãã®ç¾å¨å¤ã¯ä¸è²«ããå¤ã§ãããã¨ãä¿è¨¼ã§ããããï¼ãããã®å¤ããæ§ 1961 è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®ç¾å¨å¤ãæ±ããï¼ 1962 1963 次ã«ã¿ã¤ãå²è¾¼ã¿è¦æ±ããã£ãå ´åã«ã¯ï¼1åç®ã«èªãã ã¿ã¤ãã®ç¾å¨å¤ãï¼ã¿ 1964 ã¤ãå²è¾¼ã¿è¦æ±çºçåã®å¤ï¼ãªã¼ãããã¼åã®å¤ï¼ã§ããå ´åã¨ï¼çºçå¾ã®å¤ 1965 ï¼ãªã¼ãããã¼å¾ã®å¤ï¼ã§ããå ´åã®ä¸¡æ¹ã®å¯è½æ§ãèããããï¼ãã®ã©ã¡ã 1966 ã®å ´åã§ãã£ãããï¼2åç®ã«èªãã ã¿ã¤ãã®ç¾å¨å¤ã使ã£ã¦ï¼æ¬¡ã®ããã«æ±ºå® 1967 ããï¼2åç®ã®å¤ã¯ï¼ã¿ã¤ãå²è¾¼ã¿è¦æ±çºçå¾ã®å¤ï¼ãªã¼ãããã¼å¾ã®å¤ï¼ã§ã 1968 ããã¨ãä¿è¨¼ã§ããããï¼1åç®ã®å¤ã2åç®ã®å¤ããã大ããå ´åã«ã¯ï¼ãã® 1969 éã«ãªã¼ãããã¼ããã£ããã®ã¨æ¨æ¸¬ã§ããï¼ã¤ã¾ãï¼1åç®ã®å¤ã¯ãªã¼ãããã¼ 1970 åã®å¤ã¨ãããã¨ã«ãªãï¼ã·ã¹ãã æå»ã®ç¾å¨å¤ã¨ä¸è²«ããå¤ã§ããã¨ãã¦æ§ 1971 è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®ç¾å¨å¤ãæ±ããï¼éã«ï¼1åç®ã®å¤ã2åç®ã®å¤ã¨åã 1972 ãããããå°ããå ´åã«ã¯ï¼1åç®ã®å¤ã¯ãªã¼ãããã¼å¾ã®å¤ã§ããã¨æ¨æ¸¬ã§ã 1973 ãï¼ãã®å ´åã«ã¯ï¼æ¬¡ã®ã¿ã¤ã ãã£ãã¯ã®ã·ã¹ãã æå»ãæ±ãï¼ãã®å¤ã¨1åç® 1974 ã®å¤ãä¸è²«ããå¤ã§ããã¨ãã¦æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®ç¾å¨å¤ãæ±ããï¼ 1975 1976 ããã§ï¼ã¿ã¤ãå²è¾¼ã¿è¦æ±ããã£ãå ´åã«ã¯ï¼2åç®ã«èªãã ã¿ã¤ãã®ç¾å¨å¤ã 1977 ç¨ããæ¹æ³ãèãããããï¼(3)ã®è¦æ±ãæºãããªããªãããã«æ¡ç¨ããªãã£ãï¼ 1978 ã¾ãï¼JSPã«ã¼ãã«ã¨åæ§ã®æ¹æ³ã¯ï¼(4)ã®è¦æ±ãæºãããªãããã«æ¡ç¨ããªã㣠1979 ãï¼ 1980 1981 ä¸ã§ãæ¨æ¸¬ã§ãããã¨ããã®ã¯ï¼ãã®æ¨æ¸¬ãæãç«ããªããªãã±ã¼ã¹ãããã 1982 ãã§ããï¼ãã®æ¨æ¸¬ãæãç«ããªããªãã±ã¼ã¹ã¯ï¼æ¬¡ã®2ã¤ã®å ´åã«åãã¦åæ 1983 ãããã¨ãã§ããï¼ 1984 1985 (a) 1åç®ã®å¤ããªã¼ãããã¼å¾ã®å¤ã§ããã«ããããããï¼1åç®ã®å¤ã2åç® 1986 ã®å¤ããã大ãããªãå ´å 1987 1988 ãã®ãããªã±ã¼ã¹ã¯ï¼ã¿ã¤ãå²è¾¼ã¿ãè¦æ±ããã¦ããã«ãããããããµã¼ãã¹ 1989 ãããªãç¶æ 1990 ãé·æéç¶ããï¼ã¿ã¤ãã®ç¾å¨å¤ã1åç®ã«èªãã§ãã2åç®ã«èª 1991 ãã¾ã§ã®éã«é·ãæéãããã£ãçµæï¼ãã®éã«ï¼å度ï¼ãªã¼ãããã¼ãçºç 1992 ããå ´åã«èµ·ããï¼ã¤ã¾ãï¼ã¿ã¤ãå²è¾¼ã¿ããµã¼ãã¹ãããªãæéãï¼ã¿ã¤ã 1993 ãã£ãã¯ã®å¨æãããé·ããªã£ãå ´åã§ããï¼ãã®ãããªå ´åã«ã¯ï¼ã·ã¹ãã 1994 æå»ã®æ´æ°ãæ£ããè¡ãããªããªãï¼ 1995 1996 (b) 1åç®ã®å¤ããªã¼ãããã¼åã®å¤ã§ããã«ããããããï¼1åç®ã®å¤ã2åç® 1997 ã®å¤ã¨åãããããããå°ãããªãå ´å 1998 1999 ãã®ãããªã±ã¼ã¹ã¯ï¼ã¿ã¤ãã®ç¾å¨å¤ã1åç®ã«èªãã§ãã2åç®ã«èªãã¾ã§ã® 2000 éã«ï¼ã¿ã¤ããã»ã¼1å¨åã«ã¦ã³ãã¢ããããå ´åã«èµ·ããï¼ãã®å ´åãï¼ã¿ã¤ 2001 ãå²è¾¼ã¿ãç¦æ¢ããã¦ããæéãï¼ã¿ã¤ã ãã£ãã¯ã®å¨æãããé·ãã£ãã㨠2002 ã«ãªãï¼ã·ã¹ãã æå»ã®æ´æ°ãæ£ããè¡ããªããªãï¼ 2003 2004 ãããã®ã±ã¼ã¹ãï¼ã¿ã¤ãå²è¾¼ã¿ãé·æéç¦æ¢ããã¦ããï¼ã¿ã¤ãå²è¾¼ã¿ãã 2005 ãåªå 2006 度ã®é«ãå²è¾¼ã¿å¦çãé·æéç¶ãã¦å®è¡ãããï¼ã·ãã¥ã¬ã¼ã·ã§ã³ç°å¢ 2007 ã«ããã¦ã·ãã¥ã¬ã¼ã¿ã®ããã»ã¹ãé·æéã¹ã±ã¸ã¥ã¼ã«ãããªãã£ããªã©ã®ç 2008 ç±ã§ï¼ã·ã¹ãã æå»ã®æ´æ°ãæ£ããè¡ããªãç¶æ³ã«ç¸å½ããï¼ããã§ãã®ç¶æ³ 2009 ãï¼ãµã¼ãã¹ã³ã¼ã«ä½¿ç¨ä¸ã®æ³¨æäºé 2010 ã«çãè¾¼ãï¼ 2011 2012 å®éã®ã³ã¼ãã«ããã¦ã¯ï¼ã·ã¹ãã æå»ã®ç¾å¨å¤ã¯å¤æ°ã«ä¿æããã¦ããªãã 2013 ãï¼ä¸ä½æ¡ã¯current_timeã«ä¿æããã¦ãããï¼ä¸ä½æ¡ãä¿æããå¤æ°ã㪠2014 ãï¼ï¼æ¬¡ã®ã¿ã¤ã ãã£ãã¯ã®ã·ã¹ãã æå»ãç¨ãã¦è¨ç®ãã¦ããï¼ãã®ããï¼ 2015 ã¿ã¤ãã®ç¾å¨å¤ããªã¼ãããã¼å¾ã®å¤ã§ããã¨å¤æããå ´åãé¤ãã¦ã¯ï¼ã¿ã¤ 2016 ã ãã£ãã¯ã®å¨ææéãï¼æ±ããæ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ããæ¸ç®ããï¼ãã® 2017 å¦çã«ããï¼ãµã¼ãã¹ã³ã¼ã«ã®å®è¡æéãå¤åãããã¨ã«ãªããï¼ifæã®å 2018 容 2019 ãï¼ã³ã³ãã¤ã©ã®æé©åãä»®å®ããã¨ï¼å®æ°å¤ã®æ¸ç®1åãªã®ã§ï¼å¤åã¯ããã 2020 ã§ããï¼ 2021 2022 ãã®ãµã¼ãã¹ã³ã¼ã«ã¯ï¼ä»»æã®ç¶æ 2023 ããå¼ã³åºããã¨ãã§ããããï¼SILã®å 2024 ¨å² 2025 è¾¼ã¿ããã¯æ©è½ãç¨ãã¦ï¼ãµã¼ãã¹ã³ã¼ã«å 2026 é¨ã®ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãå® 2027 ç¾ããï¼ 2028 2029 2030 âã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ãã©ã°ãenatexã§å®è£ 2031 ãã¦ããçç± 2032 2033 ã¿ã¹ã¯ä¾å¤å¦çç¦æ¢ãã©ã°ã¯ï¼TCBä¸ã®enatexãã£ã¼ã«ãï¼ã¿ã¹ã¯ä¾å¤å¦çè¨±å¯ 2034 ç¶æ 2035 ã§ãããã¨ã示ãï¼ã®å½¢ã§ä¿æãã¦ããï¼ãã®ãã£ã¼ã«ããdistexã¨ãã 2036 enatexã¨ããã®ã¯ï¼JSPã«ã¼ãã«ã«ããã¦ã¿ã¹ã¯ãã£ã¹ãããç¦æ¢ãã©ã°ã 2037 enadspã®å½¢ã§ä¿æããã®ã¨æ´åãããããã§ããï¼ 2038 2039 ASPã«ã¼ãã«ã§ã¯ï¼enadspã¯disdspã«å¤æ´ã«ãªã£ããã¨ããï¼enatexãdistexã« 2040 å¤æ´ããæ¹ãè¯ãã£ãã¨æãããï¼ 2041 2042 ä»¥ä¸ 1340 この警告メッセージの原因は,直接的には,&winfo_semを(WINFO_WOBJ *)にキャ 1341 ストしていることであるが,本質的な原因は,このコードがC言語のstrict 1342 aliasing ruleに従わない代入文の原因になる可能性があり,このルールに依存 1343 した最適化が誤った結果を引き起こす可能性があることである. 1344 1345 C言語のstrict aliasing ruleは,互換性のない異なる型を通して,オーバラッ 1346 プするメモリ領域をアクセスする代入文を使用してはならないというものであ 1347 る(使用した場合の振舞いは未定義になる).このケースでは,(WINFO_SEM 1348 *)型のポインタ経由と(WINFO_WOBJ *)型のポインタ経由で,オーバラップする 1349 メモリ領域をアクセスする代入文を使用してはならないことになる.また,警 1350 告メッセージの原因になってはいないが,(SEMCB *)型のポインタ経由と 1351 (WOBJCB *)型のポインタ経由で,オーバラップするメモリ領域をアクセスする 1352 代入文を使用してはならない. 1353 1354 ASPカーネルの実装においては,semaphore.c中の関数においては,(SEMCB *)型 1355 および(WINFO_SEM *)型のポインタを使用しており,(WOBJCB *)型および 1356 (WINFO_WOBJ *)型のポインタ経由でメモリ領域をアクセスすることはない.一 1357 方,そこから呼び出されるwait.c中の関数においては,(WOBJCB *)型および 1358 (WINFO_WOBJ *)型のポインタを使用しており,(SEMCB *)型および(WINFO_SEM 1359 *)型のポインタ経由でメモリ領域をアクセスすることはない. 1360 1361 strict aliasing ruleに従わない代入文の問題点は,このルールに依存した最 1362 適化が誤った結果を引き起こす可能性があることであるが,異なるコンパイル 1363 単位をまたいで最適化が行われることはないため,これにより問題が起こるこ 1364 とはないと言うことができる. 1365 1366 同じ議論は,他のソースファイル(eventflag.c,dataqueue.c,pridataq.c, 1367 mailbox.c,mempfix.c)中の警告メッセージについても,そのまま当てはまる. 1368 1369 1370 ○性能評価用システム時刻参照機能 1371 1372 ●必要性と使途 1373 1374 ASPカーネルには,ASPカーネル上で動作するタスクやASPカーネル自身の性能を 1375 計測するために,システム時刻より精度の高い性能評価用システム時刻を読み 1376 出す機能をサポートする.性能評価用システム時刻は,マイクロ秒単位で表現 1377 されるが,実際の精度はターゲット依存である. 1378 1379 この機能を用いてあるプログラムの実行時間を計測するには,その実行直前と 1380 実行直後に性能評価用システム時刻を読み出し,その差を求める.そのため, 1381 性能評価用システム時刻は常に相対値を使用し,性能評価用システム時刻の絶 1382 対値を使用することは想定していない. 1383 1384 ●API仕様 1385 1386 性能評価用システム時刻参照機能では,次のデータ型を用いる. 1387 1388 SYSUTM 性能評価用システム時刻(符号無し整数,単位はマイクロ秒, 1389 32ビット以上) 1390 1391 SYSUTM型は,ターゲット非依存部においてulong_t型(すなわち,unsigned 1392 long型)に定義されており,そのサイズは,32ビット以上で,ターゲット定義 1393 である. 1394 1395 性能評価用システム時刻がSYSUTM型で表現できる範囲を超えた(つまり,オー 1396 バフローした)場合,性能評価用システム時刻は0に戻る.評価対象プログラム 1397 の実行前後の性能評価用システム時刻の差を求める場合には,計測する時間が 1398 SYSUTM型で表現できる範囲である限り,0に戻ることを特別に考慮する必要はな 1399 い. 1400 1401 SYSUTM型が32ビットの場合,性能評価用システム時刻は約71分でオーバフロー 1402 する.そのため,この機能を71分を越える時間の測定に使った場合の動作は保 1403 証されない. 1404 1405 性能評価用システム時刻参照機能のためのサービスコールの仕様については, 1406 「TOPPERS新世代カーネル統合仕様書」の「4.6.1 システム時刻管理」の節を参 1407 照すること. 1408 1409 ●実装 1410 1411 時刻をマイクロ秒単位で取得するために,周期的なタイムティックを供給する 1412 タイマの現在値(タイマはカウントアップするものと仮定する)を読み出し, 1413 それをマイクロ秒単位に換算した値に,現在のシステム時刻(ミリ秒単位で表 1414 現される)を1000倍した値を加えたものを性能評価用システム時刻とする.現 1415 在のシステム時刻を1000倍する際に,オーバフローが発生する可能性があるが, 1416 無視してかまわない. 1417 1418 ただし,システム時刻の現在値とタイマの現在値を一貫した状態で読み出すの 1419 は容易ではない.両方の値を順に読み出すと,読出しの間にタイマがオーバフ 1420 ローして割込み要求が発生した場合に,片方はオーバフロー前の値,もう片方 1421 はオーバフロー後の値を読んでしまい,誤った性能評価用システム時刻を取得 1422 してしまう. 1423 1424 この問題を解決する方法はいくつか考えられるが,どの方法を採用するの決定 1425 にあたり,次の要求事項を設定した. 1426 1427 (1) 多くのターゲットシステムで実現できること. 1428 1429 (2) サービスコールの実行時間が可能な限り一定となること.言い換えると, 1430 条件によってサービスコールの実行時間が大きく変動しないこと. 1431 1432 (3) サービスコール中の可能な限り同じタイミングの時刻を返すこと.言い換 1433 えると,条件によって時刻を読み取るタイミングが変動しないこと. 1434 1435 (4) 調整する必要のあるパラメータを最小限とすること. 1436 1437 これらの要求事項を満たす方法として,次の方法を用いることにした. 1438 1439 まず,NMIを除くすべての割込みを禁止した状態で,システム時刻の現在値,タ 1440 イマの現在値(1回目),タイマ割込み要求の有無,タイマの現在値(2回目) 1441 を,この順で読み出す.割込みを禁止しているため,この間にシステム時刻の 1442 現在値が変化することはなく,システム時刻の現在値を読み出す順番はどこで 1443 もよい.また,タイマの現在値の2回目の読出しは,タイマ割込み要求があった 1444 場合にのみ必要となるが,(2)の要求から,タイマ割込み要求の有無によらず読 1445 み出すこととする. 1446 1447 これらの値を読み出した後,割込み禁止を解除し,次の処理を行う.まず,タ 1448 イマ割込み要求がなかった場合には,システム時刻の現在値と,1回目に読んだ 1449 タイマの現在値は一貫した値であることが保証できるため,これらの値から性 1450 能評価用システム時刻の現在値を求める. 1451 1452 次にタイマ割込み要求があった場合には,1回目に読んだタイマの現在値が,タ 1453 イマ割込み要求発生前の値(オーバフロー前の値)である場合と,発生後の値 1454 (オーバフロー後の値)である場合の両方の可能性が考えられる.このどちら 1455 の場合であったかを,2回目に読んだタイマの現在値を使って,次のように決定 1456 する.2回目の値は,タイマ割込み要求発生後の値(オーバフロー後の値)であ 1457 ることが保証できるため,1回目の値が2回目の値よりも大きい場合には,その 1458 間にオーバフローがあったものと推測できる.つまり,1回目の値はオーバフロー 1459 前の値ということになり,システム時刻の現在値と一貫した値であるとして性 1460 能評価用システム時刻の現在値を求める.逆に,1回目の値が2回目の値と同じ 1461 かそれより小さい場合には,1回目の値はオーバフロー後の値であると推測でき 1462 る.この場合には,次のタイムティックのシステム時刻を求め,その値と1回目 1463 の値が一貫した値であるとして性能評価用システム時刻の現在値を求める. 1464 1465 ここで,タイマ割込み要求があった場合には,2回目に読んだタイマの現在値を 1466 用いる方法が考えられるが,(3)の要求を満たさなくなるために採用しなかった. 1467 また,JSPカーネルと同様の方法は,(4)の要求を満たさないために採用しなかっ 1468 た. 1469 1470 上で「推測できる」としたのは,この推測が成り立たなくなるケースがあるた 1471 めである.この推測が成り立たなくなるケースは,次の2つの場合に分けて分析 1472 することができる. 1473 1474 (a) 1回目の値がオーバフロー後の値であるにもかかわらず,1回目の値が2回目 1475 の値よりも大きくなる場合 1476 1477 このようなケースは,タイマ割込みが要求されているにもかかわらずサービス 1478 されない状態が長時間続くか,タイマの現在値を1回目に読んでから2回目に読 1479 むまでの間に長い時間がかかった結果,その間に(再度)オーバフローが発生 1480 した場合に起こる.つまり,タイマ割込みがサービスされない時間が,タイム 1481 ティックの周期よりも長くなった場合である.このような場合には,システム 1482 時刻の更新も正しく行われなくなる. 1483 1484 (b) 1回目の値がオーバフロー前の値であるにもかかわらず,1回目の値が2回目 1485 の値と同じかそれよりも小さくなる場合 1486 1487 このようなケースは,タイマの現在値を1回目に読んでから2回目に読むまでの 1488 間に,タイマがほぼ1周分カウントアップした場合に起こる.この場合も,タイ 1489 マ割込みが禁止されている時間が,タイムティックの周期よりも長かったこと 1490 になり,システム時刻の更新が正しく行えなくなる. 1491 1492 いずれのケースも,タイマ割込みが長時間禁止されている,タイマ割込みより 1493 も優先度の高い割込み処理が長時間続けて実行された,シミュレーション環境 1494 においてシミュレータのプロセスが長時間スケジュールされなかったなどの理 1495 由で,システム時刻の更新が正しく行えない状況に相当する.そこでこの状況 1496 を,サービスコール使用上の注意事項に盛り込む. 1497 1498 実際のコードにおいては,システム時刻の現在値は変数に保持されていないた 1499 め(上位桁はcurrent_timeに保持されているが,下位桁を保持する変数がな 1500 い),次のタイムティックのシステム時刻を用いて計算している.そのため, 1501 タイマの現在値がオーバフロー後の値であると判断した場合を除いては,タイ 1502 ムティックの周期時間を,求めた性能評価用システム時刻から減算する.この 1503 処理により,サービスコールの実行時間が変動することになるが,if文の内容 1504 が(コンパイラの最適化を仮定すると)定数値の減算1回なので,変動はわずか 1505 である. 1506 1507 このサービスコールは,任意の状態から呼び出すことができるため,SILの全割 1508 込みロック機能を用いて,サービスコール内部のクリティカルセクションを実 1509 現する. 1510 1511 1512 ○タスク例外処理禁止フラグをenatexで実装している理由 1513 1514 タスク例外処理禁止フラグは,TCB中のenatexフィールド(タスク例外処理許可 1515 状態であることを示す)の形で保持している.このフィールドをdistexとせず 1516 enatexとしたのは,JSPカーネルにおいてタスクディスパッチ禁止フラグを 1517 enadspの形で保持したのと整合させたためである. 1518 1519 ASPカーネルでは,enadspはdisdspに変更になったことから,enatexもdistexに 1520 変更した方が良かったと思われる. 1521 1522 以上 -
Property svn:mime-type
changed from
-
rubycfg_asp/trunk/asp_dcre/doc/extension.txt
-
Property svn:mime-type
changed from
text/plain
totext/plane; charset=UTF-8
r313 r315 1 1 2 TOPPERS/ASP ã«ã¼ãã«3 æ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ã¬ã¤ã4 5 対å¿ãã¼ã¸ã§ã³: Release 1.9.36 æçµæ´æ°: 2014å¹´1æ2æ¥7 8 ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASPã«ã¼ãã«ãï¼æ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ããã 9 ãã®æ¹æ³ï¼ã¾ãã¯ãã³ãï¼ã説æãããã®ã§ããï¼ 2 TOPPERS/ASPカーネル 3 機能拡張・チューニングガイド 4 5 対応バージョン: Release 1.9.3 6 最終更新: 2014年1月2日 7 8 このドキュメントは,TOPPERS/ASPカーネルを,機能拡張・チューニングするた 9 めの方法(またはヒント)を説明するものである. 10 10 11 11 ---------------------------------------------------------------------- … … 17 17 Graduate School of Information Science, Nagoya Univ., JAPAN 18 18 19 ä¸è¨èä½æ¨©è 20 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 21 ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 22 å¤ã»åé 23 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 24 (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 25 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 26 ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 27 (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 28 ç¨ã§ããå½¢ã§åé 29 å¸ããå ´åã«ã¯ï¼åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 31 è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 33 ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 35 ç¨ã§ããªãå½¢ã§åé 36 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 37 ã¨ï¼ 38 (a) åé 39 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 40 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 41 ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 42 (b) åé 43 å¸ã®å½¢æ 44 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 45 å ±åãããã¨ï¼ 46 (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 47 害ãããï¼ä¸è¨èä½æ¨©è 48 ããã³TOPPERSããã¸ã§ã¯ããå 49 責ãããã¨ï¼ 50 ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 51 ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 52 ããã³TOPPERSããã¸ã§ã¯ãã 53 å 54 責ãããã¨ï¼ 19 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 23 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 24 スコード中に含まれていること. 25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 26 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 27 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 28 の無保証規定を掲載すること. 29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 30 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 31 と. 32 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 33 作権表示,この利用条件および下記の無保証規定を掲載すること. 34 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 35 報告すること. 36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 37 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 38 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 39 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 40 免責すること. 55 41 56 æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 57 ã 58 ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 59 ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 60 ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 61 ã®è²¬ä»»ãè² ããªãï¼ 42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 46 の責任を負わない. 62 47 63 48 $Id$ 64 49 ---------------------------------------------------------------------- 65 50 66 âç®æ¬¡ 67 68 ã»ã¨ã©ã¼ãã§ãã¯ã®çç¥ 69 ã»ã¿ã¤ã ãã£ãã¯ã®å¨æã®å¤æ´ 70 ã»ç¹æ®ç®çã®ã¬ã¸ã¹ã¿ã®æ±ã 71 ã»æ¡å¼µããã±ã¼ã¸ã®ä½¿ãæ¹ 72 - ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ 73 - ã¡ãã»ã¼ã¸ãããã¡æ©è½æ¡å¼µããã±ã¼ã¸ 74 - ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ 75 - ã¿ã¹ã¯åªå 76 度æ¡å¼µããã±ã¼ã¸ 77 - å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ 78 - åççææ©è½æ¡å¼µããã±ã¼ã¸ 79 ã»CPUä¾å¤ãã³ãã©ã®ç´æ¥å¼åºã 80 - TA_DIRECTå±æ§ã®å°å 81 ¥ 82 - ã¿ã¼ã²ããä¾åé¨ã®ä¿®æ£ç®æ 83 84 85 âã¨ã©ã¼ãã§ãã¯ã®çç¥ 86 87 ãµã¼ãã¹ã³ã¼ã«ã®ãªã¼ãããããåæ¸ããããã«ï¼éçãªã¨ã©ã¼ã®ãã§ãã¯ã 88 çç¥ããå ´åãããï¼ASPã«ã¼ãã«ã«ããã¦ã¯ï¼éçãªã¨ã©ã¼ã®ãã§ãã¯ã¯ãã¹ 89 ã¦CHECKãã¯ããç¨ãã¦è¡ã£ã¦ããããï¼kernel/check.hä¸ã®CHECKãã¯ããç·¨ 90 éãããã¨ã§ï¼éçãªã¨ã©ã¼ã®ãã§ãã¯ãçç¥ãããã¨ãã§ããï¼ 91 92 ä¾ãã°ï¼ã¿ã¹ã¯IDã®ãã§ãã¯ãçç¥ãããå ´åã«ã¯ï¼CHECK_TSKIDãã¯ã㨠93 CHECK_TSKID_SELFãã¯ããï¼æ¬¡ã®ããã«ä¿®æ£ããã°ããï¼ 51 ○目次 52 53 ・エラーチェックの省略 54 ・タイムティックの周期の変更 55 ・特殊目的のレジスタの扱い 56 ・拡張パッケージの使い方 57 - ミューテックス機能拡張パッケージ 58 - メッセージバッファ機能拡張パッケージ 59 - オーバランハンドラ機能拡張パッケージ 60 - タスク優先度拡張パッケージ 61 - 制約タスク拡張パッケージ 62 - 動的生成機能拡張パッケージ 63 ・CPU例外ハンドラの直接呼出し 64 - TA_DIRECT属性の導入 65 - ターゲット依存部の修正箇所 66 67 68 ○エラーチェックの省略 69 70 サービスコールのオーバヘッドを削減するために,静的なエラーのチェックを 71 省略する場合がある.ASPカーネルにおいては,静的なエラーのチェックはすべ 72 てCHECKマクロを用いて行っているため,kernel/check.h中のCHECKマクロを編 73 集することで,静的なエラーのチェックを省略することができる. 74 75 例えば,タスクIDのチェックを省略したい場合には,CHECK_TSKIDマクロと 76 CHECK_TSKID_SELFマクロを,次のように修正すればよい. 94 77 95 78 #define CHECK_TSKID(tskid) ((void)(tskid)) 96 79 #define CHECK_TSKID_SELF(tskid) ((void)(tskid)) 97 80 98 ãããã®ãã¯ãã®å®ç¾©ã空ã«ããæ¹æ³ããããï¼ãã©ã¡ã¼ã¿ã«å¯ä½ç¨ã®ããå¼ 99 ãæ¸ããã¦ããå¯è½æ§ãèããã¨ï¼å¯ä½ç¨ã®ããå¼ã¯æ¸ãã¹ãã§ã¯ãªããï¼æ¸ 100 ããã¦ããã³ã¼ããå 101 ¥ã£ã¦ããå¯è½æ§ãå 102 ¨ããªãã¨ã¯è¨ããªãï¼ï¼ä¸ã®å®ç¾©ã® 103 æ¹ãå®å 104 ¨ã§ããï¼å¯ä½ç¨ã®ãªãå¼ã§ããã°ï¼æé©åã«ãã£ã¦åé¤ãããã¨ã㧠105 ããããï¼å®è¡æå¹çã«ã¯å½±é¿ããªãã¨æå¾ 106 ã§ããï¼ãã ãï¼æé©åã«ãã£ã¦ 107 åé¤ãããªãå ´åã«ã¯ï¼å¯ä½ç¨ã®ããå¼ãæ¸ããã¦ããªããã¨ã確èªããä¸ã§ï¼ 108 ãã¯ãã®å®ç¾©ã空ã«ãã¦ãããï¼ 109 110 111 âã¿ã¤ã ãã£ãã¯ã®å¨æã®å¤æ´ 112 113 ASPã«ã¼ãã«ã§ã¯ï¼ã«ã¼ãã«ã¸ã¿ã¤ã ãã£ãã¯ãä¾çµ¦ããå¨æã¯1ããªç§ãæ¨æº 114 ã¨ãªã£ã¦ãããï¼ä½éãªããã»ããµã§ã¯1ããªç§æ¯ã«å²è¾¼ã¿ãå¦çãããªã¼ããã 115 ããåé¡ã«ãªãå ´åãããï¼ããã§ï¼ã¢ããªã±ã¼ã·ã§ã³ãå¿ 116 è¦ã¨ããæé精度 117 ãç²ãå ´åã«ã¯ï¼ã¿ã¤ã ãã£ãã¯ã®å¨æãé·ããããã¨ã§ï¼ããã»ããµã®å¦ç 118 è² è·ãä½æ¸ããæ¹æ³ãããï¼ 119 120 ã¿ã¤ã ãã£ãã¯ã®å¨æã®ä¸ãæ¹ã¯ã¿ã¼ã²ããä¾åã§ããããï¼ãããå¤æ´ã§ã 121 ããã©ããã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®ã¿ã¤ããã©ã¤ãã®å®è£ 122 ã調ã¹ãå¿ 123 è¦ãããï¼ 124 æ¨æºçã«ã¯ï¼target_kernel.hï¼ã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ 125 ä¸ã«å®ç¾©ããã¦ããTIC_NUMEã¨TIC_DENOãæ¸ãæãããã¨ã§ï¼å¤æ´ã§ãããã 126 ã«å®è£ 127 ããã¦ããï¼ 128 129 130 âç¹æ®ç®çã®ã¬ã¸ã¹ã¿ã®æ±ã 131 132 FPUã¬ã¸ã¹ã¿ãDSPã¬ã¸ã¹ã¿ãªã©ã®ç¹æ®ç®çã®ã¬ã¸ã¹ã¿ï¼ä»¥ä¸ï¼ç¹æ®ã¬ã¸ã¹ã¿ï¼ 133 ãæã¤ããã»ããµã§ã¯ï¼ã¬ã¸ã¹ã¿ã®æ±ãã«ã¤ãã¦å¤§ãã次ã®3ã¤ã®æ¹æ³ãèãã 134 ããï¼ 135 136 (1) ç¹æ®ã¬ã¸ã¹ã¿ãã¿ã¹ã¯ã®ã³ã³ããã¹ãã«å«ããªã 137 138 1ã¤ã®ã¿ã¹ã¯ã®ã¿ãç¹æ®ã¬ã¸ã¹ã¿ã使ç¨ããå ´åã«ã¯ï¼ç¹æ®ã¬ã¸ã¹ã¿ãã¿ã¹ã¯ã® 139 ã³ã³ããã¹ãã«å«ããå¿ 140 è¦ããªãï¼ã«ã¼ãã«ã§ç®¡çããå¿ 141 è¦ããªãï¼ 142 143 (2) ç¹æ®ã¬ã¸ã¹ã¿ãã¿ã¹ã¯ã®ã³ã³ããã¹ãã«å«ãã 144 145 è¤æ°ã®ã¿ã¹ã¯ãç¹æ®ã¬ã¸ã¹ã¿ã使ç¨ããå ´åã«ã¯ï¼ç¹æ®ã¬ã¸ã¹ã¿ãã¿ã¹ã¯ã®ã³ 146 ã³ããã¹ãã«å«ããæ¹æ³ãæãåç´ã§ããï¼ãã®ããã«ã¯ï¼ã¿ã¹ã¯ãã£ã¹ãã 147 ãã£ã¨å²è¾¼ã¿ãã³ãã©/CPUä¾å¤ãã³ãã©ã®åºå 148 ¥å£ã§ï¼ç¹æ®ã¬ã¸ã¹ã¿ãä¿å/復帰 149 ããã³ã¼ãã追å ããå¿ 150 è¦ãããï¼å®éã®ä¿å/å¾©å¸°å ´æã¯ï¼ã¹ã¯ã©ããã¬ã¸ã¹ 151 ã¿ã¨ãã以å¤ã®ã¬ã¸ã¹ã¿ã§ç°ãªãããï¼æ³¨æãå¿ 152 è¦ã§ããï¼ 153 154 (3) ç¹æ®ã¬ã¸ã¹ã¿ãã³ã³ããã¹ãã«å«ãããã©ãããã¿ã¹ã¯æ¯ã«æå®ãã 155 156 ç¹æ®ã¬ã¸ã¹ã¿ã使ç¨ããã¿ã¹ã¯ã¨ä½¿ç¨ããªãã¿ã¹ã¯ãããå ´åã§ï¼ãã¹ã¦ã®ã¿ 157 ã¹ã¯ã®ã³ã³ããã¹ãã«ç¹æ®ã¬ã¸ã¹ã¿ãå«ããæ¹æ³ã§ã¯ãªã¼ãããããåé¡ã«ãª 158 ãå ´åã«ã¯ï¼ç¹æ®ã¬ã¸ã¹ã¿ãã³ã³ããã¹ãã«å«ãããã©ãããã¿ã¹ã¯æ¯ã«æå® 159 ããæ¹æ³ãæåã§ããï¼ãããå®ç¾ããæ¹æ³ã¯æ¬¡ã®éãã§ããï¼ 160 161 ã¾ãï¼ç¹æ®ã¬ã¸ã¹ã¿ãã³ã³ããã¹ãã«å«ãããã©ãããæå®ããã¿ã¹ã¯å±æ§ã 162 è¨ããï¼ä¾ãã°ï¼FPUã¬ã¸ã¹ã¿ã§ããã°ï¼ã¿ã¹ã¯å±æ§ã«TA_FPUãè¨ããï¼ã¿ã¹ã¯ 163 ãã£ã¹ãããã£ã§ã¯ï¼ã¿ã¹ã¯å±æ§ãè¦ã¦ï¼ãã®å±æ§ãè¨å®ããã¦ããã°ç¹æ®ã¬ 164 ã¸ã¹ã¿ãä¿å/復帰ããï¼ 165 166 ãã¼ãã¦ã§ã¢çã«ç¹æ®ã¬ã¸ã¹ã¿ããã£ã¹ã¨ã¼ãã«ã§ããå ´åã«ã¯ï¼ãã®å±æ§ã 167 è¨å®ããã¦ããªãã¿ã¹ã¯ã«åãæããæã«ç¹æ®ã¬ã¸ã¹ã¿ããã£ã¹ã¨ã¼ãã«ãã 168 ã¨ï¼èª¤ã£ã¦ç¹æ®ã¬ã¸ã¹ã¿ã使ã£ãå ´åãæ¤åºã§ããï¼ 169 170 ããã«ï¼å²è¾¼ã¿ãã³ãã©ï¼ISRï¼å¨æãã³ãã©ï¼ã¢ã©ã¼ã ãã³ãã©ãå«ãï¼ã 171 CPUä¾å¤ãã³ãã©ã§ç¹æ®ã¬ã¸ã¹ã¿ã使ç¨ããå ´åã«ã¯ï¼ãããã®å¦çåä½ã«ã 172 ç¹æ®ã¬ã¸ã¹ã¿ã使ç¨ãããã©ããã®å±æ§ãè¨ããæ¹æ³ãèããããï¼ 173 174 ããã§ï¼ã¿ã¹ã¯ï¼ã¾ãã¯ä»ã®å¦çåä½ï¼ãç¹æ®ã¬ã¸ã¹ã¿ã使ç¨ãããã©ããã¯ï¼ 175 ã³ã³ãã¤ã©ãã©ã¤ãã©ãªã«ä¾åããå ´åãããããï¼æ³¨æãå¿ 176 è¦ã§ããï¼ä¾ã 177 ã°ï¼æµ®åå°æ°ç¹æ¼ç®ãå«ã¾ãªãããã°ã©ã ã§ãã£ã¦ãï¼ã³ã³ãã¤ã©ããã®æ¹ã 178 æ§è½ãé«ãã¨å¤æããã°ï¼æµ®åå°æ°ç¹å½ä»¤ãçæããå ´åãããï¼ 179 180 181 âæ¡å¼µããã±ã¼ã¸ã®ä½¿ãæ¹ 182 183 ASPã«ã¼ãã«ã§ã¯ï¼ããã¤ãã®æ¡å¼µæ©è½ãå®è£ 184 ããããã«ï¼æ¡å¼µããã±ã¼ã¸ããµ 185 ãã¼ããã¦ããï¼æ¡å¼µããã±ã¼ã¸ã¯ï¼extensionãã£ã¬ã¯ããªã«ç½®ãã¦ããï¼ 186 187 æ¡å¼µããã±ã¼ã¸ã使ç¨ããå ´åã«ã¯ï¼UNIXã§ããã°ï¼ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ 188 ã¤ã«ã®ããããã£ã¬ã¯ããªã§ï¼ 189 190 % cp -r extension/<æ¡å¼µããã±ã¼ã¸ã®ãã£ã¬ã¯ããªå>/* . 191 192 ãå®è¡ããï¼ãã®æï¼å 193 ã®ï¼æ¡å¼µåã®ï¼ã½ã¼ã¹ãã¡ã¤ã«ã¯ä¸æ¸ãããã¦ãã¾ã 194 ããï¼æ¡å¼µããªãã«ã¼ãã«ã使ç¨ãããå ´åã«ã¯ï¼å¥ã®ãã£ã¬ã¯ããªã«ã½ã¼ã¹ 195 ãã¡ã¤ã«ãå±éãã¦ï¼ä¸ã®ã³ãã³ããå®è¡ãããã¨ï¼ 196 197 è¤æ°ã®æ¡å¼µããã±ã¼ã¸ã使ããã¨ã¯èæ 198 ®ãã¦ããªããï¼ä»¥ä¸ã«è¿°ã¹ãã±ã¼ã¹ã 199 é¤ãã¦ã¯ï¼æä½æ¥ã«ããè¤æ°ã®æ¡å¼µããã±ã¼ã¸ããã¼ã¸ãããã¨ã¯å¯è½ã§ããï¼ 200 ç¾æç¹ã§ã¯ï¼ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ã¨å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ 201 ããã¼ã¸ãããã¨ã¯ã§ããªãï¼ã¾ãï¼åççææ©è½æ¡å¼µããã±ã¼ã¸ãä»ã®æ¡å¼µ 202 ããã±ã¼ã¸ã¨ãã¼ã¸ãããã¨ã¯èæ 203 ®ãã¦ããªãï¼ 204 205 âãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ 206 207 ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ã¯ï¼ãã¥ã¼ããã¯ã¹æ©è½ã追å ããããã® 208 æ¡å¼µããã±ã¼ã¸ã§ããï¼ãã ãï¼åªå 209 度é転ãå¶å¾¡ããããã®ä»çµã¿ã¨ãã¦ï¼ 210 åªå 211 度ä¸éãã¥ã¼ããã¯ã¹ï¼TA_CEILINGå±æ§ã®ãã¥ã¼ããã¯ã¹ï¼ã®ã¿ããµãã¼ 212 ããï¼åªå 213 度ç¶æ¿ãã¥ã¼ããã¯ã¹ï¼TA_INHERITå±æ§ã®ãã¥ã¼ããã¯ã¹ï¼ã¯ãµãã¼ 214 ããã¦ããªãï¼ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ã¯ï¼extension/mutexãã£ã¬ 215 ã¯ããªã«ç½®ãã¦ããï¼ 216 217 ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ã§ã¯ï¼TOPPERS_SUPPORT_MUTEXãkernel.hä¸ 218 ã§å®ç¾©ããã¦ããã®ã§ï¼ãããç¨ãã¦ãã¥ã¼ããã¯ã¹æ©è½ã使ç¨ã§ãããã©ã 219 ããå¤å¥ãããã¨ãã§ããï¼ 220 221 âã¡ãã»ã¼ã¸ãããã¡æ©è½æ¡å¼µããã±ã¼ã¸ 222 223 ã¡ãã»ã¼ã¸ãããã¡æ©è½æ¡å¼µããã±ã¼ã¸ã¯ï¼ã¡ãã»ã¼ã¸ãããã¡æ©è½ã追å ã 224 ãããã®æ¡å¼µããã±ã¼ã¸ã§ããï¼ã¡ãã»ã¼ã¸ãããã¡æ©è½æ¡å¼µããã±ã¼ã¸ã¯ï¼ 225 extension/messagebufãã£ã¬ã¯ããªã«ç½®ãã¦ããï¼ 226 227 ã¡ãã»ã¼ã¸ãããã¡æ©è½æ¡å¼µããã±ã¼ã¸ã§ã¯ï¼TOPPERS_SUPPORT_MESSAGEBUFã 228 kernel.hä¸ã§å®ç¾©ããã¦ããã®ã§ï¼ãããç¨ãã¦ã¡ãã»ã¼ã¸ãããã¡æ©è½ã使 229 ç¨ã§ãããã©ãããå¤å¥ãããã¨ãã§ããï¼ 230 231 âãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ 232 233 ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ã¯ï¼ãªã¼ãã©ã³ãã³ãã©æ©è½ã追å ã 234 ãããã®æ¡å¼µããã±ã¼ã¸ã§ããï¼ãã ãï¼ãã®æ¡å¼µããã±ã¼ã¸ã使ãããã«ã¯ï¼ 235 ã¿ã¼ã²ããä¾åé¨ã対å¿ãã¦ããå¿ 236 è¦ãããï¼ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µãã 237 ã±ã¼ã¸ã¯ï¼extension/ovrhdrãã£ã¬ã¯ããªã«ç½®ãã¦ããï¼ 238 239 ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ã§ï¼ã¿ã¼ã²ããä¾åé¨ãæ¡å¼µããã±ã¼ 240 ã¸ã«å¯¾å¿ãã¦ããå ´åã«ã¯ï¼TOPPERS_SUPPORT_OVRHDRãkernel.hä¸ã§å®ç¾©ãã 241 ãã®ã§ï¼ãããç¨ãã¦ãªã¼ãã©ã³ã¿ã¤ãæ©è½ã使ç¨ã§ãããã©ãããå¤å¥ãã 242 ãã¨ãã§ããï¼ 243 244 âã¿ã¹ã¯åªå 245 度æ¡å¼µããã±ã¼ã¸ 246 247 ã¿ã¹ã¯åªå 248 度æ¡å¼µããã±ã¼ã¸ã¯ï¼ã¿ã¹ã¯åªå 249 度ãæ大256段éã«æ¡å¼µããããã® 250 æ¡å¼µããã±ã¼ã¸ã§ããï¼ãã®æ¡å¼µããã±ã¼ã¸ã¯ï¼ã¿ã¹ã¯åªå 251 度ã«å ãã¦ï¼ãã¼ 252 ã¿åªå 253 度ï¼ã¡ãã»ã¼ã¸åªå 254 度ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åªå 255 度ã256段éã«æ¡å¼µ 256 ããï¼ã¿ã¹ã¯åªå 257 度æ¡å¼µããã±ã¼ã¸ã¯ï¼extension/pri_levelãã£ã¬ã¯ããªã«ç½® 258 ãã¦ããï¼ 259 260 ã¿ã¹ã¯åªå 261 度æ¡å¼µããã±ã¼ã¸ã§ã¯ï¼TOPPERS_SUPPORT_PRI_LEVELãkernel.hä¸ã§ 262 å®ç¾©ããã¦ããã®ã§ï¼ãããç¨ãã¦ã¿ã¹ã¯åªå 263 度ã®ç¯å²ãæ¡å¼µããã¦ãããã© 264 ãããå¤å¥ãããã¨ãã§ããï¼ 265 266 âå¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ 267 268 å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ã¯ï¼å¶ç´ã¿ã¹ã¯ã®æ©è½ã追å ããããã®æ¡å¼µããã±ã¼ 269 ã¸ã§ããï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«çµ±åä»æ§æ¸ã«è¦å®ãããå¶ç´ã¿ã¹ã¯ã®æ©è½ã« 270 å ãã¦ï¼èªã¿ã¹ã¯ã®ãã¼ã¹åªå 271 度ãå¤æ´ãããµã¼ãã¹ã³ã¼ã«ras_priãå®è£ 272 ã㦠273 ããï¼å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ã¯ï¼extension/rstr_taskãã£ã¬ã¯ããªã«ç½®ã 274 ã¦ããï¼ 275 276 å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ã§ã¯ï¼TOPPERS_SUPPORT_RSTR_TASKãkernel.hä¸ã§å® 277 義ããã¦ããã®ã§ï¼ãããç¨ãã¦å¶ç´ã¿ã¹ã¯ã®æ©è½ã使ç¨ã§ãããã©ãããå¤ 278 å¥ãããã¨ãã§ããï¼ 279 280 ---------------------------------------------------------------------- 281 ras_pri èªã¿ã¹ã¯ã®ãã¼ã¹åªå 282 度ã®å¼ãä¸ããTã 283 284 ãCè¨èªAPIã 81 これらのマクロの定義を空にする方法もあるが,パラメータに副作用のある式 82 が書かれている可能性を考えると(副作用のある式は書くべきではないが,書 83 かれているコードが入ってくる可能性が全くないとは言えない),上の定義の 84 方が安全である.副作用のない式であれば,最適化によって削除することがで 85 きるため,実行時効率には影響がないと期待できる.ただし,最適化によって 86 削除されない場合には,副作用のある式が書かれていないことを確認した上で, 87 マクロの定義を空にしてもよい. 88 89 90 ○タイムティックの周期の変更 91 92 ASPカーネルでは,カーネルへタイムティックを供給する周期は1ミリ秒が標準 93 となっているが,低速なプロセッサでは1ミリ秒毎に割込みを処理するオーバヘッ 94 ドが問題になる場合がある.そこで,アプリケーションが必要とする時間精度 95 が粗い場合には,タイムティックの周期を長くすることで,プロセッサの処理 96 負荷を低減する方法がある. 97 98 タイムティックの周期の与え方はターゲット依存であるため,これが変更でき 99 るかどうかは,ターゲット依存部のタイマドライバの実装を調べる必要がある. 100 標準的には,target_kernel.h(またはそこからインクルードされるファイル) 101 中に定義されているTIC_NUMEとTIC_DENOを書き換えることで,変更できるよう 102 に実装されている. 103 104 105 ○特殊目的のレジスタの扱い 106 107 FPUレジスタやDSPレジスタなどの特殊目的のレジスタ(以下,特殊レジスタ) 108 を持つプロセッサでは,レジスタの扱いについて大きく次の3つの方法が考えら 109 れる. 110 111 (1) 特殊レジスタをタスクのコンテキストに含めない 112 113 1つのタスクのみが特殊レジスタを使用する場合には,特殊レジスタをタスクの 114 コンテキストに含める必要がなく,カーネルで管理する必要がない. 115 116 (2) 特殊レジスタをタスクのコンテキストに含める 117 118 複数のタスクが特殊レジスタを使用する場合には,特殊レジスタをタスクのコ 119 ンテキストに含める方法が最も単純である.そのためには,タスクディスパッ 120 チャと割込みハンドラ/CPU例外ハンドラの出入口で,特殊レジスタを保存/復帰 121 するコードを追加する必要がある.実際の保存/復帰場所は,スクラッチレジス 122 タとそれ以外のレジスタで異なるため,注意が必要である. 123 124 (3) 特殊レジスタをコンテキストに含めるかどうかをタスク毎に指定する 125 126 特殊レジスタを使用するタスクと使用しないタスクがある場合で,すべてのタ 127 スクのコンテキストに特殊レジスタを含める方法ではオーバヘッドが問題にな 128 る場合には,特殊レジスタをコンテキストに含めるかどうかをタスク毎に指定 129 する方法が有力である.これを実現する方法は次の通りである. 130 131 まず,特殊レジスタをコンテキストに含めるかどうかを指定するタスク属性を 132 設ける.例えば,FPUレジスタであれば,タスク属性にTA_FPUを設ける.タスク 133 ディスパッチャでは,タスク属性を見て,その属性が設定されていれば特殊レ 134 ジスタを保存/復帰する. 135 136 ハードウェア的に特殊レジスタがディスエーブルできる場合には,その属性が 137 設定されていないタスクに切り換える時に特殊レジスタをディスエーブルする 138 と,誤って特殊レジスタを使った場合を検出できる. 139 140 さらに,割込みハンドラ(ISR,周期ハンドラ,アラームハンドラを含む)や 141 CPU例外ハンドラで特殊レジスタを使用する場合には,これらの処理単位にも 142 特殊レジスタを使用するかどうかの属性を設ける方法が考えられる. 143 144 ここで,タスク(または他の処理単位)が特殊レジスタを使用するかどうかは, 145 コンパイラやライブラリに依存する場合があるため,注意が必要である.例え 146 ば,浮動小数点演算を含まないプログラムであっても,コンパイラがその方が 147 性能が高いと判断すれば,浮動小数点命令を生成する場合がある. 148 149 150 ○拡張パッケージの使い方 151 152 ASPカーネルでは,いくつかの拡張機能を実装するために,拡張パッケージをサ 153 ポートしている.拡張パッケージは,extensionディレクトリに置いてある. 154 155 拡張パッケージを使用する場合には,UNIXであれば,ASPカーネルのソースファ 156 イルのトップディレクトリで, 157 158 % cp -r extension/<拡張パッケージのディレクトリ名>/* . 159 160 を実行する.この時,元の(拡張前の)ソースファイルは上書きされてしまう 161 ため,拡張しないカーネルも使用したい場合には,別のディレクトリにソース 162 ファイルを展開して,上のコマンドを実行すること. 163 164 複数の拡張パッケージを使うことは考慮していないが,以下に述べるケースを 165 除いては,手作業により複数の拡張パッケージをマージすることは可能である. 166 現時点では,ミューテックス機能拡張パッケージと制約タスク拡張パッケージ 167 をマージすることはできない.また,動的生成機能拡張パッケージを他の拡張 168 パッケージとマージすることは考慮していない. 169 170 ●ミューテックス機能拡張パッケージ 171 172 ミューテックス機能拡張パッケージは,ミューテックス機能を追加するための 173 拡張パッケージである.ただし,優先度逆転を制御するための仕組みとして, 174 優先度上限ミューテックス(TA_CEILING属性のミューテックス)のみをサポー 175 トし,優先度継承ミューテックス(TA_INHERIT属性のミューテックス)はサポー 176 トしていない.ミューテックス機能拡張パッケージは,extension/mutexディレ 177 クトリに置いてある. 178 179 ミューテックス機能拡張パッケージでは,TOPPERS_SUPPORT_MUTEXがkernel.h中 180 で定義されているので,これを用いてミューテックス機能を使用できるかどう 181 かを判別することができる. 182 183 ●メッセージバッファ機能拡張パッケージ 184 185 メッセージバッファ機能拡張パッケージは,メッセージバッファ機能を追加す 186 るための拡張パッケージである.メッセージバッファ機能拡張パッケージは, 187 extension/messagebufディレクトリに置いてある. 188 189 メッセージバッファ機能拡張パッケージでは,TOPPERS_SUPPORT_MESSAGEBUFが 190 kernel.h中で定義されているので,これを用いてメッセージバッファ機能を使 191 用できるかどうかを判別することができる. 192 193 ●オーバランハンドラ機能拡張パッケージ 194 195 オーバランハンドラ機能拡張パッケージは,オーバランハンドラ機能を追加す 196 るための拡張パッケージである.ただし,この拡張パッケージを使うためには, 197 ターゲット依存部が対応している必要がある.オーバランハンドラ機能拡張パッ 198 ケージは,extension/ovrhdrディレクトリに置いてある. 199 200 オーバランハンドラ機能拡張パッケージで,ターゲット依存部が拡張パッケー 201 ジに対応している場合には,TOPPERS_SUPPORT_OVRHDRがkernel.h中で定義され 202 るので,これを用いてオーバランタイマ機能が使用できるかどうかを判別する 203 ことができる. 204 205 ●タスク優先度拡張パッケージ 206 207 タスク優先度拡張パッケージは,タスク優先度を最大256段階に拡張するための 208 拡張パッケージである.この拡張パッケージは,タスク優先度に加えて,デー 209 タ優先度,メッセージ優先度,割込みサービスルーチン優先度も256段階に拡張 210 する.タスク優先度拡張パッケージは,extension/pri_levelディレクトリに置 211 いてある. 212 213 タスク優先度拡張パッケージでは,TOPPERS_SUPPORT_PRI_LEVELがkernel.h中で 214 定義されているので,これを用いてタスク優先度の範囲が拡張されているかど 215 うかを判別することができる. 216 217 ●制約タスク拡張パッケージ 218 219 制約タスク拡張パッケージは,制約タスクの機能を追加するための拡張パッケー 220 ジである.TOPPERS新世代カーネル統合仕様書に規定された制約タスクの機能に 221 加えて,自タスクのベース優先度を変更するサービスコールras_priを実装して 222 いる.制約タスク拡張パッケージは,extension/rstr_taskディレクトリに置い 223 てある. 224 225 制約タスク拡張パッケージでは,TOPPERS_SUPPORT_RSTR_TASKがkernel.h中で定 226 義されているので,これを用いて制約タスクの機能が使用できるかどうかを判 227 別することができる. 228 229 ---------------------------------------------------------------------- 230 ras_pri 自タスクのベース優先度の引き上げ〔T〕 231 232 【C言語API】 285 233 ER ercd = ras_pri(PRI tskpri) 286 234 287 ããã©ã¡ã¼ã¿ã 288 PRI tskpri ãã¼ã¹åªå 289 度 290 291 ããªã¿ã¼ã³ãã©ã¡ã¼ã¿ã 292 ER ercd æ£å¸¸çµäºï¼E_OKï¼ã¾ãã¯ã¨ã©ã¼ã³ã¼ã 293 294 ãã¨ã©ã¼ã³ã¼ãã 295 E_CTX ã³ã³ããã¹ãã¨ã©ã¼ 296 ã»éã¿ã¹ã¯ã³ã³ããã¹ãããã®å¼åºã 297 ã»CPUããã¯ç¶æ 298 ããã®å¼åºã 299 E_PAR ãã©ã¡ã¼ã¿ã¨ã©ã¼ 300 ã»tskpriãæå¹ç¯å²å¤ 301 E_ILUSE ãµã¼ãã¹ã³ã¼ã«ä¸æ£ä½¿ç¨ 302 ã»æ¡ä»¶ã«ã¤ãã¦ã¯æ©è½ã®é 303 ãåç 304 § 305 306 ãæ©è½ã 307 308 èªã¿ã¹ã¯ã®ãã¼ã¹åªå 309 度ãï¼tskpriã§æå®ããåªå 310 度ã«å¤æ´ããï¼å 311 ·ä½çãªæ¯ 312 èãã¯ä»¥ä¸ã®éãï¼ 313 314 èªã¿ã¹ã¯ã®ãã¼ã¹åªå 315 度ãï¼tskpriã§æå®ããåªå 316 度ã«å¤æ´ãããï¼ããã«ä¼´ã£ 317 ã¦ï¼èªã¿ã¹ã¯ã®ç¾å¨åªå 318 度ãå¤æ´ãããï¼åãåªå 319 度ã®ã¿ã¹ã¯ã®ä¸ã§ã¯ï¼èªã¿ 320 ã¹ã¯ãæé«åªå 321 é ä½ã¨ãªãï¼ 322 323 tskpriã«TPRI_INIï¼ï¼0ï¼ãæå®ããã¨ï¼èªã¿ã¹ã¯ã®ãã¼ã¹åªå 324 度ãï¼èµ·åæåª 325 å 326 度ã«å¤æ´ãããï¼ 327 328 tskpriã¯ï¼èªã¿ã¹ã¯ã®èµ·åæåªå 329 度ã¨åãããããããé«ããªããã°ãªããªãï¼ 330 ããã§ãªãå ´åã«ã¯ï¼E_ILUSEã¨ã©ã¼ã¨ãªãï¼ 331 ---------------------------------------------------------------------- 332 333 âåççææ©è½æ¡å¼µããã±ã¼ã¸ 334 335 åççææ©è½æ¡å¼µããã±ã¼ã¸ã¯ï¼ãªãã¸ã§ã¯ãã®åççææ©è½ã追å ãããã 336 ã®æ¡å¼µããã±ã¼ã¸ã§ããï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«çµ±åä»æ§æ¸ã«è¦å®ãããä»¥ä¸ 337 ã®ãªãã¸ã§ã¯ãçæï¼åé¤ã®ããã®ãµã¼ãã¹ã³ã¼ã«ï¼å²ä»ãå¯è½ãªIDçªå·ã®æ° 338 ãæå®ããéçAPIã«å ãã¦ï¼ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åãè¨å®ããéç 339 API DEF_KMMãå®è£ 340 ãã¦ããï¼åççææ©è½æ¡å¼µããã±ã¼ã¸ã¯ï¼extension/dcre 341 ãã£ã¬ã¯ããªã«ç½®ãã¦ããï¼ 342 343 ãã ãï¼ã«ã¼ãã«å 344 ã§ã®åçã¡ã¢ãªç®¡çã«é¢ãã¦ã¯ï¼ã¿ã¼ã²ããéä¾åé¨ã§ã¯ï¼ 345 ã¡ã¢ãªé åãå 346 é ããé ã«å²ãå½ã¦ï¼è§£æ¾ãããã¡ã¢ãªé åãåå©ç¨ããªãã¡ 347 ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ã®ã¿ãå®è£ 348 ãã¦ããï¼æ¬æ ¼çãªåçã¡ã¢ãªç®¡çãè¡ããã 349 å ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã¾ãã¯ã¦ã¼ã¶å´ã§ï¼ãã®ããã®é¢æ°ãç¨æããå¿ 350 351 è¦ãããï¼ç¨æããé¢æ°çã«ã¤ãã¦ã¯ï¼ãTOPPERS/ASPã«ã¼ãã« ã¿ã¼ã²ããä¾ 352 åé¨ ãã¼ãã£ã³ã°ã¬ã¤ããã®ã6.15 åçã¡ã¢ãªç®¡çãã®ç¯ãåç 353 §ãããã¨ï¼ 354 355 åçæ©è½æ¡å¼µæ¡å¼µããã±ã¼ã¸ã§ã¯ï¼TOPPERS_SUPPORT_DYNAMIC_CREãkernel.hä¸ 356 ã§å®ç¾©ããã¦ããã®ã§ï¼ãããç¨ãã¦åççææ©è½ã使ç¨ã§ãããã©ãããå¤ 357 å¥ãããã¨ãã§ããï¼ 358 359 åççææ©è½æ¡å¼µããã±ã¼ã¸ã«ãã追å ããããµã¼ãã¹ã³ã¼ã« 235 【パラメータ】 236 PRI tskpri ベース優先度 237 238 【リターンパラメータ】 239 ER ercd 正常終了(E_OK)またはエラーコード 240 241 【エラーコード】 242 E_CTX コンテキストエラー 243 ・非タスクコンテキストからの呼出し 244 ・CPUロック状態からの呼出し 245 E_PAR パラメータエラー 246 ・tskpriが有効範囲外 247 E_ILUSE サービスコール不正使用 248 ・条件については機能の項を参照 249 250 【機能】 251 252 自タスクのベース優先度を,tskpriで指定した優先度に変更する.具体的な振 253 舞いは以下の通り. 254 255 自タスクのベース優先度が,tskpriで指定した優先度に変更される.それに伴っ 256 て,自タスクの現在優先度も変更される.同じ優先度のタスクの中では,自タ 257 スクが最高優先順位となる. 258 259 tskpriにTPRI_INI(=0)を指定すると,自タスクのベース優先度が,起動時優 260 先度に変更される. 261 262 tskpriは,自タスクの起動時優先度と同じかそれよりも高くなければならない. 263 そうでない場合には,E_ILUSEエラーとなる. 264 ---------------------------------------------------------------------- 265 266 ●動的生成機能拡張パッケージ 267 268 動的生成機能拡張パッケージは,オブジェクトの動的生成機能を追加するため 269 の拡張パッケージである.TOPPERS新世代カーネル統合仕様書に規定された以下 270 のオブジェクト生成/削除のためのサービスコール,割付け可能なID番号の数 271 を指定する静的APIに加えて,カーネルが割り付けるメモリ領域を設定する静的 272 API DEF_KMMを実装している.動的生成機能拡張パッケージは,extension/dcre 273 ディレクトリに置いてある. 274 275 ただし,カーネル内での動的メモリ管理に関しては,ターゲット非依存部では, 276 メモリ領域を先頭から順に割り当て,解放されたメモリ領域を再利用しないメ 277 モリ管理モジュールのみを実装している.本格的な動的メモリ管理を行いたい 278 場合には,ターゲット依存部またはユーザ側で,そのための関数を用意する必 279 要がある.用意する関数等については,「TOPPERS/ASPカーネル ターゲット依 280 存部 ポーティングガイド」の「6.15 動的メモリ管理」の節を参照すること. 281 282 動的機能拡張拡張パッケージでは,TOPPERS_SUPPORT_DYNAMIC_CREがkernel.h中 283 で定義されているので,これを用いて動的生成機能が使用できるかどうかを判 284 別することができる. 285 286 動的生成機能拡張パッケージにより追加されるサービスコール 360 287 361 288 ER_ID tskid = acre_tsk(const T_CTSK *pk_ctsk) … … 381 308 ER ercd = del_isr(ID isrid) 382 309 383 åççææ©è½æ¡å¼µããã±ã¼ã¸ã«ãã追å ãããéçAPI310 動的生成機能拡張パッケージにより追加される静的API 384 311 385 312 AID_TSK(uint_t notsk) … … 396 323 397 324 ---------------------------------------------------------------------- 398 DEF_KMM ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®è¨å®ãSDã399 400 ãéçAPIã 325 DEF_KMM カーネルが割り付けるメモリ領域の設定〔SD〕 326 327 【静的API】 401 328 DEF_KMM({ SIZE kmmsz, STK_T *kmm }) 402 329 403 ããã©ã¡ã¼ã¿ã 404 ãï¼ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®è¨å®æ 405 å ± 406 SIZE kmmsz ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãºï¼ãã¤ãæ°ï¼ 407 STK_T kmm ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®å 408 é çªå° 409 410 ãã¨ã©ã¼ã³ã¼ãã 411 E_PAR ãã©ã¡ã¼ã¿ã¨ã©ã¼ 412 ã»kmmszã0ä»¥ä¸ 413 ã»ãã®ä»ã®æ¡ä»¶ã«ã¤ãã¦ã¯æ©è½ã®é 414 ãåç 415 § 416 E_OBJ ãªãã¸ã§ã¯ãç¶æ 417 ã¨ã©ã¼ 418 ã»ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åãè¨å®æ¸ã¿ 419 420 ãæ©è½ã 421 422 åãã©ã¡ã¼ã¿ã§æå®ããã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®è¨å®æ 423 å ±ã«å¾ã£ã¦ï¼ 424 ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åãè¨å®ããï¼ 425 426 kmmszã¯æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿ï¼kmmã¯ä¸è¬å®æ°å¼ãã©ã¡ã¼ã¿ã§ããï¼ 427 428 kmmãNULLã¨ããå ´åï¼kmmszã§æå®ãããµã¤ãºã®ã¡ã¢ãªé åãï¼ã³ã³ãã£ã®ã¥ 429 ã¬ã¼ã¿ã確ä¿ããï¼kmmszã«ã¿ã¼ã²ããå®ç¾©ã®å¶ç´ã«åè´ããªããµã¤ãºãæå®ã 430 ãæã«ã¯ï¼ã¿ã¼ã²ããå®ç¾©ã®å¶ç´ã«åè´ããããã«ãµã¤ãºã大ããæ¹ã«ä¸¸ã㦠431 確ä¿ããï¼ 432 433 ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åãã¢ããªã±ã¼ã·ã§ã³ã§ç¢ºä¿ããå ´åã«ã¯ï¼ 434 kmmszã§æå®ãããµã¤ãºã®ã¡ã¢ãªé åã確ä¿ãï¼kmmã«ãã®å 435 é çªå°ãæå®ããï¼ 436 437 DEF_KMMã«ããã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åãè¨å®ããªãå ´åï¼ã«ã¼ãã«ã 438 å²ãä»ããã¡ã¢ãªé åã¯ç¢ºä¿ãããªãï¼ 439 440 kmmãkmmszã«ã¿ã¼ã²ããå®ç¾©ã®å¶ç´ã«åè´ããªãå 441 é çªå°ããµã¤ãºãæå®ãã 442 æã«ã¯ï¼E_PARã¨ã©ã¼ã¨ãªãï¼ 443 ---------------------------------------------------------------------- 444 445 446 âCPUä¾å¤ãã³ãã©ã®ç´æ¥å¼åºã 447 448 CPUä¾å¤ãã³ãã©ã®åºå 449 ¥å£å¦çã¯ï¼CPUä¾å¤ãçºçããªãããã«å®è£ 450 ããªããã° 451 ãªããªããï¼ãããé²ããªãã¿ã¼ã²ããã«ããã¦ã¯ï¼CPUä¾å¤ãã³ãã©ã®åºå 452 ¥å£ 453 å¦çãçµç±ããã«ï¼ã¢ããªã±ã¼ã·ã§ã³ãç¨æããCPUä¾å¤ãã³ãã©ãç´æ¥å®è¡ã 454 ãæ¹æ³ãç¨æããã®ãæã¾ããï¼ãããï¼CPUä¾å¤ãã³ãã©ã®ç´æ¥å¼åºãã¨å¼ã¶ï¼ 455 456 ããã§ã¯ï¼ãã¼ãã¦ã§ã¢ã§ãã¯ã¿ãã¼ãã«ãæã¤ããã»ããµã«ããã¦ï¼ã¿ã¼ã²ã 457 ãä¾åé¨ã®ã¿ã®ä¿®æ£ã«ããï¼CPUä¾å¤ãã³ãã©ã®ç´æ¥å¼åºãã®æ©è½ã追å ããæ¹ 458 æ³ã«ã¤ãã¦èª¬æããï¼ 459 460 âTA_DIRECTå±æ§ã®å°å 461 ¥ 462 463 CPUä¾å¤ãã³ãã©ã®ç´æ¥å¼åºããæå®ããããã«ï¼CPUä¾å¤ãã³ãã©å±æ§ã«ï¼ 464 TA_DIRECTå±æ§ãå°å 465 ¥ããï¼ 466 467 âã¿ã¼ã²ããä¾åé¨ã®ä¿®æ£ç®æ 468 469 TA_DIRECTã®å¤ãï¼target_kernel.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯ã«ã¼ãããããã¡ 470 ã¤ã«ï¼ã§å®ç¾©ãï¼ãã®å¤ãã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãåãåºããããã«ï¼ 471 target_def.csvï¼ã¾ãã¯ï¼ããã«ä»£ãããã¡ã¤ã«ï¼ã«æ¬¡ã®è¡ã追å ããï¼ 330 【パラメータ】 331 *カーネルが割り付けるメモリ領域の設定情報 332 SIZE kmmsz カーネルが割り付けるメモリ領域のサイズ(バイト数) 333 STK_T kmm カーネルが割り付けるメモリ領域の先頭番地 334 335 【エラーコード】 336 E_PAR パラメータエラー 337 ・kmmszが0以下 338 ・その他の条件については機能の項を参照 339 E_OBJ オブジェクト状態エラー 340 ・カーネルが割り付けるメモリ領域が設定済み 341 342 【機能】 343 344 各パラメータで指定したカーネルが割り付けるメモリ領域の設定情報に従って, 345 カーネルが割り付けるメモリ領域を設定する. 346 347 kmmszは整数定数式パラメータ,kmmは一般定数式パラメータである. 348 349 kmmをNULLとした場合,kmmszで指定したサイズのメモリ領域を,コンフィギュ 350 レータが確保する.kmmszにターゲット定義の制約に合致しないサイズを指定し 351 た時には,ターゲット定義の制約に合致するようにサイズを大きい方に丸めて 352 確保する. 353 354 カーネルが割り付けるメモリ領域をアプリケーションで確保する場合には, 355 kmmszで指定したサイズのメモリ領域を確保し,kmmにその先頭番地を指定する. 356 357 DEF_KMMによりカーネルが割り付けるメモリ領域を設定しない場合,カーネルが 358 割り付けるメモリ領域は確保されない. 359 360 kmmやkmmszにターゲット定義の制約に合致しない先頭番地やサイズを指定した 361 時には,E_PARエラーとなる. 362 ---------------------------------------------------------------------- 363 364 365 ○CPU例外ハンドラの直接呼出し 366 367 CPU例外ハンドラの出入口処理は,CPU例外が発生しないように実装しなければ 368 ならないが,これが防げないターゲットにおいては,CPU例外ハンドラの出入口 369 処理を経由せずに,アプリケーションが用意したCPU例外ハンドラを直接実行す 370 る方法を用意するのが望ましい.これを,CPU例外ハンドラの直接呼出しと呼ぶ. 371 372 ここでは,ハードウェアでベクタテーブルを持つプロセッサにおいて,ターゲッ 373 ト依存部のみの修正により,CPU例外ハンドラの直接呼出しの機能を追加する方 374 法について説明する. 375 376 ●TA_DIRECT属性の導入 377 378 CPU例外ハンドラの直接呼出しを指定するために,CPU例外ハンドラ属性に, 379 TA_DIRECT属性を導入する. 380 381 ●ターゲット依存部の修正箇所 382 383 TA_DIRECTの値を,target_kernel.h(または,そこからインクルードされるファ 384 イル)で定義し,その値をコンフィギュレータが取り出せるように, 385 target_def.csv(または,それに代わるファイル)に次の行を追加する. 472 386 473 387 TA_DIRECT,TA_DIRECT 474 388 475 次ã«ï¼target.tfï¼ã¾ãã¯ï¼ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã§ï¼ 476 TARGET_EXCATR ã«è¨å®ãããå¤ã«ï¼TA_DIRECTã追å ããï¼ä¾ãã°ï¼ä»ã®ã¿ã¼ã²ã477 ãä¾åã®CPUä¾å¤ãã³ãã©å±æ§ããªãå ´åã«ã¯ï¼æ¬¡ã®ããã«è¨å®ããï¼ 389 次に,target.tf(または,そこからインクルードされるファイル)で, 390 TARGET_EXCATRに設定される値に,TA_DIRECTを追加する.例えば,他のターゲッ 391 ト依存のCPU例外ハンドラ属性がない場合には,次のように設定する. 478 392 479 393 $TARGET_EXCATR = TA_DIRECT$ 480 394 481 次ã«ï¼OMIT_INITILIZE_EXCEPTIONãç¨ãã¦ï¼CPUä¾å¤ãã³ãã©ã®åºå 482 ¥å£å¦çãç 483 æããããã®è¨è¿°ã¨CPUä¾å¤ãã³ãã©åæåãããã¯ã®æ¨æºã®å®ç¾©ãçæããã 484 ã®ãææ¢ãï¼ããã«ãã£ã¦ææ¢ãããé¨åãtarget.tfã«ã³ãã¼ããä¸ã§ï¼ä»¥ä¸ 485 ã®ä¿®æ£ãå ããï¼ 486 487 CPUä¾å¤ãã³ãã©ã®åºå 488 ¥å£å¦çãçæããããã®è¨è¿°ï¼EXCHDR_ENTRYã®ãªã¹ãï¼ 489 ãçæããé¨åã¯ï¼æ¬¡ã®ããã«ä¿®æ£ããï¼ 395 次に,OMIT_INITILIZE_EXCEPTIONを用いて,CPU例外ハンドラの出入口処理を生 396 成するための記述とCPU例外ハンドラ初期化ブロックの標準の定義が生成される 397 のを抑止し,それによって抑止される部分をtarget.tfにコピーした上で,以下 398 の修正を加える. 399 400 CPU例外ハンドラの出入口処理を生成するための記述(EXCHDR_ENTRYのリスト) 401 を生成する部分は,次のように修正する. 490 402 491 403 $FOREACH excno EXC.ORDER_LIST$ … … 495 407 $END$ 496 408 497 ã¾ãï¼CPUä¾å¤ãã³ãã©åæåãããã¯ã®å®ç¾©ãçæããé¨åã¯ï¼æ¬¡ã®ããã«ä¿® 498 æ£ããï¼ 409 また,CPU例外ハンドラ初期化ブロックの定義を生成する部分は,次のように修 410 正する. 499 411 500 412 $IF LENGTH(EXC.ORDER_LIST)$ … … 512 424 $END$ 513 425 514 ä»¥ä¸ 426 以上 -
Property svn:mime-type
changed from
-
rubycfg_asp/trunk/asp_dcre/doc/porting.txt
-
Property svn:mime-type
changed from
text/plain
totext/plane; charset=UTF-8
r313 r315 1 1 2 TOPPERS/ASPã«ã¼ãã« 3 ã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ã 4 5 対å¿ãã¼ã¸ã§ã³: Release 1.9.3 6 æçµæ´æ°: 2014å¹´11æ17æ¥ 7 8 ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASPã«ã¼ãã«ãï¼æªãµãã¼ãã®ã¿ã¼ã²ããã·ã¹ã 9 ã ã«ãã¼ãã£ã³ã°ããããã«å¿ 10 è¦ã¨ãªãã¿ã¼ã²ããä¾åé¨ã®å®è£ 11 æ¹æ³ã説æã 12 ããã®ã§ããï¼ 2 TOPPERS/ASPカーネル 3 ターゲット依存部 ポーティングガイド 4 5 対応バージョン: Release 1.9.3 6 最終更新: 2014年11月17日 7 8 このドキュメントは,TOPPERS/ASPカーネルを,未サポートのターゲットシステ 9 ムにポーティングするために必要となるターゲット依存部の実装方法を説明す 10 るものである. 13 11 14 12 ---------------------------------------------------------------------- … … 20 18 Graduate School of Information Science, Nagoya Univ., JAPAN 21 19 22 ä¸è¨èä½æ¨©è 23 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 24 ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 25 å¤ã»åé 26 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 27 (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 28 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 29 ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 30 (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 31 ç¨ã§ããå½¢ã§åé 32 å¸ããå ´åã«ã¯ï¼åé 33 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 34 è 35 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 36 ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 37 (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 38 ç¨ã§ããªãå½¢ã§åé 39 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 40 ã¨ï¼ 41 (a) åé 42 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 43 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 44 ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 45 (b) åé 46 å¸ã®å½¢æ 47 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 48 å ±åãããã¨ï¼ 49 (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 50 害ãããï¼ä¸è¨èä½æ¨©è 51 ããã³TOPPERSããã¸ã§ã¯ããå 52 責ãããã¨ï¼ 53 ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 54 ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 55 ããã³TOPPERSããã¸ã§ã¯ãã 56 å 57 責ãããã¨ï¼ 20 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 21 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 22 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 24 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 25 スコード中に含まれていること. 26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 27 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 28 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 29 の無保証規定を掲載すること. 30 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 31 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 32 と. 33 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 34 作権表示,この利用条件および下記の無保証規定を掲載すること. 35 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 36 報告すること. 37 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 38 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 39 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 40 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 41 免責すること. 58 42 59 æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 60 ã 61 ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 62 ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 63 ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 64 ã®è²¬ä»»ãè² ããªãï¼ 43 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 44 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 45 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 46 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 47 の責任を負わない. 65 48 66 49 $Id$ 67 50 ---------------------------------------------------------------------- 68 51 69 âç®æ¬¡ 70 71 ï¼ï¼å 72 ±éäºé 73 74 1.1 ã¿ã¼ã²ããä¾åé¨ã®æ§æ 75 1.2 ååã®è¡çªã®é²æ¢ 76 1.3 å¤éã¤ã³ã¯ã«ã¼ãã®é²æ¢ 77 1.4 ã¢ã»ã³ããªè¨èªã¨ã®ããããã¡ã¤ã«ã®å 78 ±ç¨ 79 1.5 ã¤ã³ã¯ã«ã¼ãè¨è¿°ã®æ¹æ³ 80 1.6 ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 81 ¥å¦çã®å®ç¾ã«é¢ããå¶ç´ 82 ï¼ï¼ã·ã¹ãã æ§ç¯ç°å¢ã®ã¿ã¼ã²ããä¾åé¨ 83 2.1 ã¿ã¼ã²ããç¥ç§°ã¨ã¿ã¼ã²ããä¾åé¨ã®ãã£ã¬ã¯ã㪠84 2.2 Makefileã®ã¿ã¼ã²ããä¾åé¨ 85 2.3 éçºç°å¢åã¨ã³ãã³ãåã®è¨å® 86 2.4 ã³ã³ãã¤ã«ãªãã·ã§ã³ã¨ãªãã¸ã§ã¯ããã¡ã¤ã«ã®è¨å® 87 2.5 ãªãã»ãããã¡ã¤ã«ã®çææ¹æ³ 88 2.5.1 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãç¨ããæ¹æ³ 89 2.5.2 makeoffset.cã¨genoffsetãç¨ããæ¹æ³ 90 2.6 ãªã³ã¯æ¹æ³ã®è¨å® 91 2.7 ä¾åé¢ä¿ã®å®ç¾© 92 2.8 ãã®ä»ã®è¨å® 93 ï¼ï¼TOPPERSå 94 ±éå®ç¾©ã®ã¿ã¼ã²ããä¾åé¨ 95 3.1 ã¿ã¼ã²ããèå¥ãã¯ã 96 3.2 æ´æ°åã®æ大å¤ã»æå°å¤ã»ãããæ° 97 3.3 ãµã¤ãºã®æå®ãããæ´æ°åï¼ãã®æ大å¤ã»æå°å¤ï¼æ´æ°å®æ°ãä½ããã¯ã 98 3.4 ãµã¤ãºã®æå®ãããæµ®åå°æ°ç¹åï¼ãã®æ大å¤ã»æå°å¤ã®ãã¯ã 99 3.5 ã³ã³ãã¤ã©ã®æ¡å¼µæ©è½ã®ããã®ãã¯ãå®ç¾© 100 3.6 æ¨æºçãªå®ç¾©ã®ä¸æ¸ã 101 3.7 ã¢ãµã¼ã·ã§ã³ã®ããã®å®ç¾© 102 ï¼ï¼ã·ã¹ãã ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ã¤ï¼SILï¼ã®ã¿ã¼ã²ããä¾åé¨ 103 4.1 å 104 ¨å²è¾¼ã¿ããã¯ç¶æ 105 ã®ç®¡ç 106 4.2 å¾®å°æéå¾ 107 ã¡ 108 4.3 ããã»ããµã®ã¨ã³ãã£ã¢ã³ 109 4.4 ã¡ã¢ãªç©ºéã¢ã¯ã»ã¹é¢æ° 110 4.5 I/O空éã¢ã¯ã»ã¹é¢æ° 111 ï¼ï¼ã«ã¼ãã«APIã®ã¿ã¼ã²ããä¾åé¨ 112 5.1 ã¿ã¼ã²ããå®ç¾©ã§ãµãã¼ãããæ©è½ 113 5.2 å²è¾¼ã¿åªå 114 度ã®ç¯å² 115 5.3 ã¿ã¤ã ãã£ãã¯ã®å®ç¾© 116 5.4 ã¡ã¢ãªé å確ä¿ã®ããã®åå®ç¾© 117 5.5 ããããã¿ã¼ã³ã®ãããæ° 118 5.6 ã¡ã¢ãªé å確ä¿ã®ããã®ãã¯ã 119 5.7 ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã®ããã®å®ç¾©ï¼ãªãã·ã§ã³ï¼ 120 ï¼ï¼ã«ã¼ãã«å®è£ 121 ã®ã¿ã¼ã²ããä¾åé¨ 122 6.1 ã«ã¼ãã«å®è£ 123 ã®ã¿ã¼ã²ããä¾åé¨ã®å 124 ±éäºé 125 126 6.1.1 ã«ã¼ãã«å®è£ 127 ã®ã¿ã¼ã²ããä¾åé¨ã®æ§æè¦ç´ 128 6.1.2 ã¿ã¼ã²ããä¾åé¨ã®é¢æ°ã®å½åè¦å 129 6.2 ãã¬ã¼ã¹ãã°æ©è½ã¸ã®å¯¾å¿ 130 6.3 ã·ã¹ãã ç¶æ 131 ã®ç®¡ç 132 6.3.1 å 133 ¨å²è¾¼ã¿ããã¯ç¶æ 134 ã®ç®¡ç 135 6.3.2 ã³ã³ããã¹ãã®ç®¡ç 136 6.3.3 CPUããã¯ç¶æ 137 ã®ç®¡ç 138 6.4 å²è¾¼ã¿ã«é¢é£ããã·ã¹ãã ç¶æ 139 ã®ç®¡ç 140 6.4.1 å²è¾¼ã¿åªå 141 度ãã¹ã¯ã®ç®¡ç 142 6.4.2 å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ç®¡ç 143 6.4.3 å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ 144 6.4.4 å²è¾¼ã¿è¦æ±ã®ããã¼ã 145 6.4.5 å²è¾¼ã¿ãã³ãã©ã®å 146 é å¦çã¨æ«å°¾å¦ç 147 6.5 ã¿ã¹ã¯ãã£ã¹ããã㣠148 6.5.1 ã¿ã¹ã¯ã³ã³ããã¹ããããã¯ã¨ã¿ã¹ã¯åæåã³ã³ããã¹ãããã㯠149 6.5.2 ãã£ã¹ãããã£æ¬ä½ 150 6.5.3 ã¿ã¹ã¯ã³ã³ããã¹ãããã®ãã£ã¹ããã 151 6.5.4 ãã£ã¹ãããã£ã®åä½éå§ 152 6.5.5 ç¾å¨ã®ã³ã³ããã¹ããæ¨ã¦ã¦ãã£ã¹ããã 153 6.5.6 ã¿ã¹ã¯ã®èµ·åå¦ç 154 6.6 å²è¾¼ã¿ãã³ãã© 155 6.6.1 å²è¾¼ã¿ãã³ãã©ã®åºå 156 ¥å£å¦ç 157 6.6.2 å²è¾¼ã¿ãã³ãã©æ¯ã®åºå 158 ¥å£å¦çã®çæ 159 6.6.3 å²è¾¼ã¿ãã³ãã©ã®è¨å® 160 6.6.4 å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å® 161 6.6.5 å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çã®å¤æ´ 162 6.6.6 ããã©ã«ãã®å²è¾¼ã¿ãã³ãã© 163 6.6.7 ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ 164 6.6.8 å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®çæ 165 6.7 CPUä¾å¤ãã³ãã©ã¨CPUä¾å¤çºçæã®ã·ã¹ãã ç¶æ 166 ã®åç 167 § 168 6.7.1 CPUä¾å¤ãã³ãã©ã®åºå 169 ¥å£å¦ç 170 6.7.2 CPUä¾å¤ãã³ãã©ã®åºå 171 ¥å£å¦çã®çæ 172 6.7.3 CPUä¾å¤ãã³ãã©ã®è¨å® 173 6.7.4 CPUä¾å¤ç®¡çæ©è½ã®åæåå¦çã®å¤æ´ 174 6.7.5 ããã©ã«ãã®CPUä¾å¤ãã³ãã© 175 6.7.6 CPUä¾å¤çºçæã®ã·ã¹ãã ç¶æ 176 ã®åç 177 § 178 6.8 ã«ã¼ãã«ã®èµ·åã»çµäºã¨ã¹ã¿ãã¯é åãªã© 179 6.9 ã«ã¼ãã«å 180 é¨ã®ãã¥ã¼ãã³ã° 181 6.9.1 ãããããããµã¼ã 182 6.9.2 ããããã£ã¼ã«ã 183 6.10 ã«ã¼ãã«å®è£ 184 ã«é¢ãããã®ä»ã®å®ç¾© 185 6.10.1 ãªãã¸ã§ã¯ãå±æ§ã®æ¡å¼µ 186 6.10.2 ã¨ã©ã¼ãã§ãã¯æ¹æ³ã®æå® 187 6.10.3 éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é å 188 6.10.4 空ã©ãã«ã®å®ç¾© 189 6.11 ãã¬ã¼ã¹ãã°æ©è½ã«é¢ããè¨å® 190 6.11.1 åå¾ã§ãããã¬ã¼ã¹ãã°ã®ç¨®é¡ã¨ãã¯ã 191 6.11.2 ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ã 192 6.12 ã«ã¼ãã«å®è£ 193 ã®ã¿ã¼ã²ããä¾åé¨ã®ããã®ãªãã¼ã è¨è¿° 194 6.13 ã¿ã¤ããã©ã¤ã 195 6.13.1 ã¿ã¤ããã©ã¤ãã®ãã¡ã¤ã«æ§æ 196 6.13.2 ã¿ã¤ãã®åæåã»çµäºå¦çã»å²è¾¼ã¿å¦ç 197 6.13.3 æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®åç 198 §ã®ããã®æ©è½ 199 6.14 ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãï¼ãªãã·ã§ã³ï¼ 200 6.14.1 ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãã®ãã¡ã¤ã«æ§æ 201 6.14.2 ãªã¼ãã©ã³ã¿ã¤ãã®æä½ã¨å²è¾¼ã¿å¦ç 202 6.15 åçã¡ã¢ãªç®¡çï¼ãªãã·ã§ã³ï¼ 203 6.15.1 TLSFãç¨ããã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ã®ä¾ 204 ï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿è¨å®ãã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ 205 7.1 è¨å®ãã¡ã¤ã«ã¨ã¿ã¼ã²ããä¾åé¨ã®ä½ç½®ä»ã 206 7.2 ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ 207 7.2.1 ã¿ã¼ã²ããéä¾åé¨ãã¤ã³ã¯ã«ã¼ãããåã«å®ç¾©ãã¹ãå¤æ° 208 7.2.2 ã¿ã¼ã²ããéä¾åé¨ã§å®ç¾©ãããå¤æ° 209 7.3 ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ 210 7.3.1 ã¿ã¼ã²ããéä¾åé¨ãã¤ã³ã¯ã«ã¼ãããåã«å®ç¾©ãã¹ãå¤æ° 211 7.3.2 ã¿ã¼ã²ããä¾åé¨ã§è¡ãã¹ãã¨ã©ã¼ãã§ã㯠212 7.4 cfg1_out.cã®ãªã³ã¯ã«å¿ 213 è¦ãªã¹ã¿ãã®å®ç¾©ãã¡ã¤ã« 214 ï¼ï¼ã·ã¹ãã ãµã¼ãã¹çã®ã¿ã¼ã²ããä¾åé¨ 215 8.0 ã·ã¹ãã ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾åé¨ 216 8.1 ã·ã¹ãã ãã°æ©è½ã®ã¿ã¼ã²ããä¾åå®ç¾© 217 8.2 ãã°ã¿ã¹ã¯ã®ã¿ã¼ã²ããä¾åå®ç¾© 218 8.3 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾åé¨ 219 8.3.1 å¤æ°ï¼ãã¼ã¿åï¼ç®¡çé¢æ° 220 8.3.2 ããã¤ã¹ãµã¼ãã¹ã«ã¼ãã³ 221 8.3.3 ã³ã¼ã«ããã¯ã«ã¼ãã³ 222 8.4 ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåã®ã¿ã¼ã²ããä¾åå®ç¾© 223 8.5 ãµã³ãã«ããã°ã©ã ã¨ãã¹ãããã°ã©ã ã®ã¿ã¼ã²ããä¾åå®ç¾© 224 8.6 å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã®ã¿ã¼ã²ããä¾åå®ç¾© 225 ï¼ï¼ãã®ä» 226 9.1 ããã¥ã¡ã³ã 227 9.2 ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã« 228 ï¼ï¼ï¼ãªãã¡ã¬ã³ã¹ 229 10.1 ã¿ã¼ã²ããä¾åé¨ã®ãã¡ã¤ã«ä¸è¦§ 230 231 232 ï¼ï¼å 233 ±éäºé 234 235 236 1.1 ã¿ã¼ã²ããä¾åé¨ã®æ§æ 237 238 ã¿ã¼ã²ããä¾åé¨ã¯ï¼targetãã£ã¬ã¯ããªã®ä¸ã«ï¼ã¿ã¼ã²ãããã¼ãã¦ã§ã¢ã¨ 239 éçºç°å¢ã®çµã¿åããæ¯ã«ç¨æããï¼ãã ãï¼ã¿ã¼ã²ããä¾åé¨ã®åå©ç¨æ§ã 240 èæ 241 ®ãï¼ããã»ããµï¼ãããï¼éçºç°å¢ã®ã¿ã«ä¾åããé¨åãï¼ããã»ããµä¾ 242 åé¨ï¼ãããä¾åé¨ï¼éçºç°å¢ä¾åé¨ã¨ããå½¢ã§åãåãã¦ãããï¼åãåã 243 æ¹ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®å®è£ 244 ã«ä»»ããã¦ããï¼ããã»ããµä¾åé¨ï¼ãããä¾ 245 åé¨ï¼éçºç°å¢ä¾åé¨ã¯ï¼archãã£ã¬ã¯ããªã®ä¸ã«ç½®ãï¼ 246 247 ASPã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã¯ï¼ã·ã¹ãã æ§ç¯ç°å¢ï¼Makefileçï¼ã®ã¿ã¼ã²ã 248 ãä¾åé¨ï¼TOPPERSå 249 ±éå®ç¾©ï¼t_stddef.hï¼ã®ã¿ã¼ã²ããä¾åé¨ï¼ã·ã¹ãã ã¤ã³ 250 ã¿ãã§ã¼ã¹ã¬ã¤ã¤ï¼SILï¼sil.hï¼ã®ã¿ã¼ã²ããä¾åé¨ï¼ã«ã¼ãã«APIï¼kernel.hï¼ 251 ã®ã¿ã¼ã²ããä¾åé¨ï¼ã«ã¼ãã«å®è£ 252 ã®ã¿ã¼ã²ããä¾åé¨ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ 253 è¨å®ãã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ãå«ãï¼ï¼ã·ã¹ãã ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾ 254 åé¨ï¼ã¿ã¼ã²ããä¾åé¨ã«é¢ããããã¥ã¡ã³ãçã§æ§æãããï¼ 255 256 1.2 ååã®è¡çªã®é²æ¢ 257 258 TOPPERSããã¸ã§ã¯ããæä¾ããã½ããã¦ã§ã¢ã®ããã«ï¼TOPPERS_ã§å§ã¾ãã·ã³ 259 ãã«ãäºç´ãã¦ããï¼ããããã¡ã¤ã«ä¸ã«è¨è¿°ããï¼ã¢ããªã±ã¼ã·ã§ã³ããå 260 ç 261 §ã§ããå 262 é¨ã·ã³ãã«ã¯ï¼TOPPERS_ã§å§ã¾ãååã¨ããï¼ 263 264 ã¾ãï¼_kernel_ã§å§ã¾ãã·ã³ãã«ã¯ï¼ã«ã¼ãã«å 265 é¨ã®å¤æ°ãé¢æ°ã®ããã«äºç´ 266 ãã¦ããï¼ã«ã¼ãã«å 267 é¨ã®å¤æ°ãé¢æ°ã®ååã§ï¼ãªã³ã¯æã«ã¢ããªã±ã¼ã·ã§ã³ 268 ã®ååã¨è¡çªããå¯è½æ§ããããã®ã¯ï¼ãªãã¼ã è¨è¿°ã«ãªã¹ãã¢ããããã㨠269 ã§ï¼ã³ã³ãã¤ã«æã«_kernel_ã§å§ã¾ãååã«ç½®ãæãããã¨ã¨ãã¦ããï¼ 270 271 1.3 å¤éã¤ã³ã¯ã«ã¼ãã®é²æ¢ 272 273 ãã¹ã¦ã®ããããã¡ã¤ã«ã¯ï¼å¤éã«ã¤ã³ã¯ã«ã¼ããããã®ãé²æ¢ããããã®æ¡ 274 件ã³ã³ãã¤ã«è¨è¿°ãå 275 ¥ãããã¨ã¨ããï¼ä¾ãã°ï¼target_config.hã§ããã°ï¼ãã¡ 276 ã¤ã«ã®å 277 é ã« 52 ○目次 53 54 1.共通事項 55 1.1 ターゲット依存部の構成 56 1.2 名前の衝突の防止 57 1.3 多重インクルードの防止 58 1.4 アセンブリ言語とのヘッダファイルの共用 59 1.5 インクルード記述の方法 60 1.6 クリティカルセクションの出入処理の実現に関する制約 61 2.システム構築環境のターゲット依存部 62 2.1 ターゲット略称とターゲット依存部のディレクトリ 63 2.2 Makefileのターゲット依存部 64 2.3 開発環境名とコマンド名の設定 65 2.4 コンパイルオプションとオブジェクトファイルの設定 66 2.5 オフセットファイルの生成方法 67 2.5.1 コンフィギュレータを用いる方法 68 2.5.2 makeoffset.cとgenoffsetを用いる方法 69 2.6 リンク方法の設定 70 2.7 依存関係の定義 71 2.8 その他の設定 72 3.TOPPERS共通定義のターゲット依存部 73 3.1 ターゲット識別マクロ 74 3.2 整数型の最大値・最小値・ビット数 75 3.3 サイズの指定された整数型,その最大値・最小値,整数定数を作るマクロ 76 3.4 サイズの指定された浮動小数点型,その最大値・最小値のマクロ 77 3.5 コンパイラの拡張機能のためのマクロ定義 78 3.6 標準的な定義の上書き 79 3.7 アサーションのための定義 80 4.システムインタフェースレイヤ(SIL)のターゲット依存部 81 4.1 全割込みロック状態の管理 82 4.2 微少時間待ち 83 4.3 プロセッサのエンディアン 84 4.4 メモリ空間アクセス関数 85 4.5 I/O空間アクセス関数 86 5.カーネルAPIのターゲット依存部 87 5.1 ターゲット定義でサポートする機能 88 5.2 割込み優先度の範囲 89 5.3 タイムティックの定義 90 5.4 メモリ領域確保のための型定義 91 5.5 ビットパターンのビット数 92 5.6 メモリ領域確保のためのマクロ 93 5.7 オーバランハンドラ機能拡張のための定義(オプション) 94 6.カーネル実装のターゲット依存部 95 6.1 カーネル実装のターゲット依存部の共通事項 96 6.1.1 カーネル実装のターゲット依存部の構成要素 97 6.1.2 ターゲット依存部の関数の命名規則 98 6.2 トレースログ機能への対応 99 6.3 システム状態の管理 100 6.3.1 全割込みロック状態の管理 101 6.3.2 コンテキストの管理 102 6.3.3 CPUロック状態の管理 103 6.4 割込みに関連するシステム状態の管理 104 6.4.1 割込み優先度マスクの管理 105 6.4.2 割込み要求禁止フラグの管理 106 6.4.3 割込み要求のクリア 107 6.4.4 割込み要求のプローブ 108 6.4.5 割込みハンドラの先頭処理と末尾処理 109 6.5 タスクディスパッチャ 110 6.5.1 タスクコンテキストブロックとタスク初期化コンテキストブロック 111 6.5.2 ディスパッチャ本体 112 6.5.3 タスクコンテキストからのディスパッチ 113 6.5.4 ディスパッチャの動作開始 114 6.5.5 現在のコンテキストを捨ててディスパッチ 115 6.5.6 タスクの起動処理 116 6.6 割込みハンドラ 117 6.6.1 割込みハンドラの出入口処理 118 6.6.2 割込みハンドラ毎の出入口処理の生成 119 6.6.3 割込みハンドラの設定 120 6.6.4 割込み要求ラインの属性の設定 121 6.6.5 割込み管理機能の初期化処理の変更 122 6.6.6 デフォルトの割込みハンドラ 123 6.6.7 カーネル管理外の割込み 124 6.6.8 割込みサービスルーチンの生成 125 6.7 CPU例外ハンドラとCPU例外発生時のシステム状態の参照 126 6.7.1 CPU例外ハンドラの出入口処理 127 6.7.2 CPU例外ハンドラの出入口処理の生成 128 6.7.3 CPU例外ハンドラの設定 129 6.7.4 CPU例外管理機能の初期化処理の変更 130 6.7.5 デフォルトのCPU例外ハンドラ 131 6.7.6 CPU例外発生時のシステム状態の参照 132 6.8 カーネルの起動・終了とスタック領域など 133 6.9 カーネル内部のチューニング 134 6.9.1 ビットマップサーチ 135 6.9.2 ビットフィールド 136 6.10 カーネル実装に関するその他の定義 137 6.10.1 オブジェクト属性の拡張 138 6.10.2 エラーチェック方法の指定 139 6.10.3 非タスクコンテキスト用のスタック領域 140 6.10.4 空ラベルの定義 141 6.11 トレースログ機能に関する設定 142 6.11.1 取得できるトレースログの種類とマクロ 143 6.11.2 トレースログ記録のサンプルコード 144 6.12 カーネル実装のターゲット依存部のためのリネーム記述 145 6.13 タイマドライバ 146 6.13.1 タイマドライバのファイル構成 147 6.13.2 タイマの初期化・終了処理・割込み処理 148 6.13.3 性能評価用システム時刻の参照のための機能 149 6.14 オーバランタイマドライバ(オプション) 150 6.14.1 オーバランタイマドライバのファイル構成 151 6.14.2 オーバランタイマの操作と割込み処理 152 6.15 動的メモリ管理(オプション) 153 6.15.1 TLSFを用いたメモリ管理モジュールの例 154 7.コンフィギュレータ設定ファイルのターゲット依存部 155 7.1 設定ファイルとターゲット依存部の位置付け 156 7.2 パス2のテンプレートファイルのターゲット依存部 157 7.2.1 ターゲット非依存部をインクルードする前に定義すべき変数 158 7.2.2 ターゲット非依存部で定義される変数 159 7.3 パス3のテンプレートファイルのターゲット依存部 160 7.3.1 ターゲット非依存部をインクルードする前に定義すべき変数 161 7.3.2 ターゲット依存部で行うべきエラーチェック 162 7.4 cfg1_out.cのリンクに必要なスタブの定義ファイル 163 8.システムサービス等のターゲット依存部 164 8.0 システムサービスのターゲット依存部 165 8.1 システムログ機能のターゲット依存定義 166 8.2 ログタスクのターゲット依存定義 167 8.3 シリアルインタフェースドライバのターゲット依存部 168 8.3.1 変数,データ型,管理関数 169 8.3.2 デバイスサービスルーチン 170 8.3.3 コールバックルーチン 171 8.4 カーネル起動メッセージの出力のターゲット依存定義 172 8.5 サンプルプログラムとテストプログラムのターゲット依存定義 173 8.6 実行時間分布集計モジュールのターゲット依存定義 174 9.その他 175 9.1 ドキュメント 176 9.2 パッケージ記述ファイル 177 10.リファレンス 178 10.1 ターゲット依存部のファイル一覧 179 180 181 1.共通事項 182 183 1.1 ターゲット依存部の構成 184 185 ターゲット依存部は,targetディレクトリの下に,ターゲットハードウェアと 186 開発環境の組み合わせ毎に用意する.ただし,ターゲット依存部の再利用性を 187 考慮し,プロセッサ,チップ,開発環境のみに依存する部分を,プロセッサ依 188 存部,チップ依存部,開発環境依存部という形で切り分けてもよい.切り分け 189 方は,ターゲット依存部の実装に任されている.プロセッサ依存部,チップ依 190 存部,開発環境依存部は,archディレクトリの下に置く. 191 192 ASPカーネルのターゲット依存部は,システム構築環境(Makefile等)のターゲッ 193 ト依存部,TOPPERS共通定義(t_stddef.h)のターゲット依存部,システムイン 194 タフェースレイヤ(SIL,sil.h)のターゲット依存部,カーネルAPI(kernel.h) 195 のターゲット依存部,カーネル実装のターゲット依存部(コンフィギュレータ 196 設定ファイルのターゲット依存部を含む),システムサービスのターゲット依 197 存部,ターゲット依存部に関するドキュメント等で構成される. 198 199 1.2 名前の衝突の防止 200 201 TOPPERSプロジェクトが提供するソフトウェアのために,TOPPERS_で始まるシン 202 ボルを予約している.ヘッダファイル中に記述され,アプリケーションから参 203 照できる内部シンボルは,TOPPERS_で始まる名前とする. 204 205 また,_kernel_で始まるシンボルは,カーネル内部の変数や関数のために予約 206 している.カーネル内部の変数や関数の名前で,リンク時にアプリケーション 207 の名前と衝突する可能性があるものは,リネーム記述にリストアップすること 208 で,コンパイル時に_kernel_で始まる名前に置き換えることとしている. 209 210 1.3 多重インクルードの防止 211 212 すべてのヘッダファイルは,多重にインクルードされるのを防止するための条 213 件コンパイル記述を入れることとする.例えば,target_config.hであれば,ファ 214 イルの先頭に 278 215 279 216 #ifndef TOPPERS_TARGET_CONFIG_H 280 217 #define TOPPERS_TARGET_CONFIG_H 281 218 282 ãï¼ãã¡ã¤ã«ã®æ«å°¾ã« 219 を,ファイルの末尾に 283 220 284 221 #endif /* TOPPERS_TARGET_CONFIG_H */ 285 222 286 ãè¨è¿°ããï¼ 287 288 1.4 ã¢ã»ã³ããªè¨èªã¨ã®ããããã¡ã¤ã«ã®å 289 ±ç¨ 290 291 ASPã«ã¼ãã«ã®ããããã¡ã¤ã«ã®å¤ãã¯ï¼ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ãã 292 ãã¤ã³ã¯ã«ã¼ãã§ããããã«ããããã«ï¼æ¬¡ã®ã«ã¼ã«ã«å¾ã£ã¦è¨è¿°ãããã®ã¨ 293 ããï¼ 294 295 ã»TOPPERS_MACRO_ONLYããã¯ãå®ç¾©ããã¦ããå ´åã«ã¯ï¼ã¢ã»ã³ããªè¨èªã§ã¯ 296 ã解éã§ããªãè¨è¿°ï¼ãã¯ãå®ç¾©ä»¥å¤ã®è¨è¿°ï¼ãé¤ãããã«è¨è¿°ããï¼ 297 298 ã»ç¬¦å·ç¡ãæ´æ°åã®å®æ°å¤ã¯ï¼UINT_CãULONG_Cãªã©ã®æ´æ°å®æ°ãä½ãããã®ã 299 ãã¯ããç¨ãã¦è¨è¿°ããï¼ãã ãï¼ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ããã㤠300 ãã³ã¯ã«ã¼ãã§ãããã¡ã¤ã«ä¸ã§ãã£ã¦ãï¼Cè¨èªã®ã¿ã§ç¨ããå®æ°ããããã® 301 ããã¯ãã使ã£ã¦è¨è¿°ããå¿ 302 è¦ã¯ãªãï¼ 303 304 ã¾ãï¼ã«ã¼ãã«å®è£ 305 ã«ããã¦ã¯ï¼æ¬¡ã®ã«ã¼ã«ã«å¾ããã®ã¨ããï¼ 306 307 ã»ã¢ã»ã³ããªè¨èªãããç¨ããå®æ°ã®å®ç¾©ä¸ã«åãã£ã¹ããç¨ããå ´åã«ã¯ï¼ 308 ãCASTãã¯ããç¨ãã¦è¨è¿°ããï¼ 309 310 ã¢ã»ã³ããªè¨èªããããããã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããéã«ã¯ï¼å¿ 311 è¦ã«å¿ãã¦ï¼ 312 TOPPERS_MACRO_ONLYï¼UINC_Cï¼ULONG_Cï¼CASTããã¯ãå®ç¾©ãã¦ããï¼ã¤ã³ã¯ã«ã¼ 313 ãããªããã°ãªããªãï¼ 314 315 1.5 ã¤ã³ã¯ã«ã¼ãè¨è¿°ã®æ¹æ³ 316 317 éçºç°å¢ã§ç¨æããã¦ããæ¨æºããããã¡ã¤ã«ããã³includeãã£ã¬ã¯ããªä¸ã® 318 æ¨æºããããã¡ã¤ã«ã¯ï¼ã#include <...>ãã«ããã¤ã³ã¯ã«ã¼ãããï¼ 319 320 ãã®ä»ã®ããããã¡ã¤ã«ã¯ï¼ã#include "..."ãã«ããã¤ã³ã¯ã«ã¼ãããï¼ãã 321 ããã¡ã¤ã«ãï¼ã«ã¬ã³ããã£ã¬ã¯ããªãã¤ã³ã¯ã«ã¼ããããã¡ã¤ã«ã¨åãã㣠322 ã¬ã¯ããªä»¥å¤ã®ãã£ã¬ã¯ããªã«ç½®ããã¦ããå ´åã«ã¯ï¼æ¬¡ã®ããã«ãã¹æå®ã 323 è¡ãï¼ 324 325 ã»ã¿ã¼ã²ããä¾åé¨ï¼target/<ã¿ã¼ã²ããå>ï¼ã®ãã£ã¬ã¯ããªã«ç½®ããã¦ãã 326 ãå ´åã¯ï¼ãã¹æå®ãè¡ããï¼ãã¡ã¤ã«åã®ã¿ãè¨è¿°ããï¼ 327 ä¾ï¼#include "target_config.h" 328 329 ã»archãã£ã¬ã¯ããªä¸ã®ãã£ã¬ã¯ããªã«ç½®ããã¦ããå ´åã«ã¯ï¼archãã£ã¬ã¯ 330 ãããªããã®ç¸å¯¾ãã¹ã§è¨è¿°ããï¼ 331 ä¾ï¼#include "m68k_gcc/prc_config.h" 332 333 ã»ãã®ä»ã®å ´åã«ã¯ï¼ã½ã¼ã¹ããã°ã©ã ã®ã«ã¼ããã£ã¬ã¯ããªï¼configureãç½® 334 ãããã¦ãããã£ã¬ã¯ããªï¼ããã®ç¸å¯¾ãã¹ã§è¨è¿°ããï¼ 335 ä¾ï¼#include "pdic/upd72001/upd72001.h" 336 337 ã»ã«ã¼ãã«ãæ§æãããã¡ã¤ã«ããï¼kernelãã£ã¬ã¯ããªä¸ã®ããããã¡ã¤ã« 338 ããã¤ã³ã¯ã«ã¼ãããå ´åã¯ï¼ãã¹æå®ãè¡ããï¼ãã¡ã¤ã«åã®ã¿ãè¨è¿°ããï¼ 339 ä¾ï¼#include "kernel_impl.h" 340 341 1.6 ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 342 ¥å¦çã®å®ç¾ã«é¢ããå¶ç´ 343 344 ã«ã¼ãã«å 345 ã§ç¨ããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 346 ¥å¦çãå®ç¾ããå ´åã«ã¯ï¼ 347 次ã®2ã¤ã®æ¡ä»¶ãæºããããã«å®è£ 348 ããªããã°ãªããªãï¼ 349 350 (1-6-1) åºå 351 ¥å¦çããæããæç¹ã§ã¯ï¼å²è¾¼ã¿ã®ç¦æ¢ï¼è¨±å¯ãå®äºãã¦ããªã 352 ãã°ãªããªãï¼ä¾ãã°ï¼å²è¾¼ã¿ç¦æ¢ï¼è¨±å¯å½ä»¤ãå®è¡ãã¦ããå®éã«å²è¾¼ã¿ã 353 ç¦æ¢ï¼è¨±å¯ãããã¾ã§ä½å½ä»¤ãé 354 延ããããã»ããµã®å ´åã«ã¯ï¼åºå 355 ¥å¦çã®ä¸ 356 ã«NOPå½ä»¤ãå 357 ¥ãããªã©ã®æ¹æ³ã§ï¼åºå 358 ¥å¦çãæããæç¹ã§ã¯ï¼å²è¾¼ã¿ãç¦æ¢ï¼ 359 許å¯ãããç¶æ 360 ã«ãªã£ã¦ãããã¨ãä¿è¨¼ããªããã°ãªããªãï¼ 361 362 (1-6-2) ã¡ã¢ãªä¸ã®ãã¼ã¿æ§é ãæ¸ãå¤ããå¯è½æ§ããããã¨ãï¼ä½ããã®æ¹ 363 æ³ã§ã³ã³ãã¤ã©ã«ç¥ãããªããã°ãªããªãï¼GNUéçºç°å¢ã§ã¯ï¼æ¬¡ã®ããããã® 364 æ¹æ³ã§ãã®å¶ç´ãæºãããã¨ãã§ããï¼ 365 366 (a) ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 367 ¥å¦çã®å 368 ¨ä½ã¾ãã¯åºå 369 ¥å¦çã®æ¬è³ªçãªé¨å 370 ï¼å 371 ·ä½çã«ã¯ï¼å²è¾¼ã¿ç¦æ¢ï¼è¨±å¯ããå¦çï¼ãï¼ã¤ã³ã©ã¤ã³ã§ãªãï¼é常 372 ã®é¢æ°ã«ããå®ç¾ããï¼ 373 374 (b) ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 375 ¥å¦çã®æ¬è³ªçãªé¨åãã¤ã³ã©ã¤ã³ã¢ã»ã³ã 376 ã©ã«ãã£ã¦å®ç¾ãã¦ããå ´åã«ã¯ï¼ãã®ã¤ã³ã©ã¤ã³ã¢ã»ã³ãã©ã®clobberå¤ 377 æ°ãªã¹ãã«"memory"ã追å ããï¼ 378 379 (c) ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 380 ¥å¦çã®æ¬è³ªçãªé¨åãï¼ãã¯ããã¤ã³ã©ã¤ 381 ã³é¢æ°å¼åºãã§å®ç¾ãã¦ããå ´åã«ã¯ï¼ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã«å 382 ¥ãå¦ 383 çã®æå¾ã¨åºãå¦çã®å 384 é ã«ï¼Asm("":::"memory")ã¨ããè¨è¿°ãå 385 ¥ããï¼ 386 387 ãã®ãããªå¶ç´ãè¨ããçç±ã«ã¤ãã¦ã¯ï¼ãTOPPERS/ASPã«ã¼ãã« è¨è¨ã¡ã¢ã 388 ã®ãã«ã¼ãã«ã®ãã¼ã¿æ§é ã«å¯¾ããvolatile宣è¨ã«ã¤ãã¦ãã®ç¯ãåç 389 §ããã 390 ã¨ï¼ 391 392 393 ï¼ï¼ã·ã¹ãã æ§ç¯ç°å¢ã®ã¿ã¼ã²ããä¾åé¨ 394 395 ãã®ç« ã®èª¬æã¯ï¼GNUéçºç°å¢ï¼GCCï¼GASï¼BINUTILSï¼GNU Makeï¼ãç¨ããã㨠396 ãæ³å®ãã¦è¨è¿°ãã¦ããï¼ãã以å¤ã®éçºç°å¢ãç¨ããå ´åã«ã¯ï¼éçºç°å¢ã« 397 ãããã¦ä¿®æ£ããå¿ 398 è¦ãããï¼ 399 400 2.1 ã¿ã¼ã²ããç¥ç§°ã¨ã¿ã¼ã²ããä¾åé¨ã®ãã£ã¬ã¯ã㪠401 402 æ°ããã¿ã¼ã²ããä¾åé¨ãä½æããæã¯ï¼ã¾ãï¼ã¿ã¼ã²ããç¥ç§°ãå®ããï¼ã¿ã¼ 403 ã²ããç¥ç§°ã¯ï¼ã·ã¹ãã ç¥ç§°ã¨éçºç°å¢ç¥ç§°ã"_"ã§é£çµãããã®ã¨ããï¼ã·ã¹ 404 ãã ç¥ç§°ã«ç¨ããæåã¯è±å°æåã¨æ°åã¨"_"ã«ï¼éçºç°å¢ç¥ç§°ã«ç¨ããæå㯠405 è±å°æåã¨æ°åã«éå®ããï¼GNUéçºç°å¢ã®éçºç°å¢ç¥ç§°ã¯ï¼"gcc"ã¨ããï¼ä¾ 406 ãã°ï¼ã·ã¹ãã ç¥ç§°ã"dve68k"ã§ï¼GNUéçºç°å¢ãç¨ããå ´åã«ã¯ï¼ã¿ã¼ã²ãã 407 ç¥ç§°ã¯"dve68k_gcc"ã¨ãªãï¼ 408 409 ã¿ã¼ã²ããä¾åé¨ã®ãã¡ã¤ã«ãç½®ãããã«ï¼targetãã£ã¬ã¯ããªã®ä¸ã«ï¼ã¿ã¼ 410 ã²ããç¥ç§°ãå称ã¨ãããã£ã¬ã¯ããªãä½æããï¼ãããã¿ã¼ã²ããä¾åé¨ã㣠411 ã¬ã¯ããªã¨å¼ã¶ï¼ 412 413 ã¿ã¼ã²ããä¾åé¨ããããã»ããµä¾åé¨ããããä¾åé¨ãåãåããå ´åã«ã¯ï¼ 414 ä¾åé¨ç¥ç§°ãå®ããï¼ä¾åé¨ç¥ç§°ã¯ï¼ããã»ããµããããã®ç¥ç§°ã¨éçºç°å¢ç¥ 415 称ã"_"ã§é£çµãããã®ã¨ããï¼ããã»ããµããããã®ç¥ç§°ã«ç¨ããæåã¯ï¼è± 416 å°æåã¨æ°åã¨"_"ã«éå®ããï¼ä¾ãã°ï¼ããã»ããµç¥ç§°ã"m68k"ã§ï¼GNUéçº 417 ç°å¢ãç¨ããå ´åã«ã¯ï¼ä¾åé¨ç¥ç§°ã¯"m68k_gcc"ã¨ãªãï¼ 418 419 ã¾ãï¼ã¿ã¼ã²ããä¾åé¨ããéçºç°å¢ä¾åé¨ãåãåããå ´åã«ã¯ï¼éçºç°å¢ 420 ç¥ç§°ãä¾åé¨ç¥ç§°ã¨ããï¼ä¾ãã°ï¼GNUéçºç°å¢ä¾åé¨ã®ä¾åé¨ç¥ç§°ã¯ï¼"gcc" 421 ã¨ãªãï¼ 422 423 ãããã®ä¾åé¨ã®ãã¡ã¤ã«ãç½®ãããã«ï¼archãã£ã¬ã¯ããªã®ä¸ã«ï¼ä¾åé¨ç¥ 424 称ãå称ã¨ãããã£ã¬ã¯ããªãä½æããï¼ 425 426 ãªãï¼GNUéçºç°å¢ä»¥å¤ã®éçºç°å¢ãç¨ããå ´åã«ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ 427 ã¹ã¯ãªããï¼configureï¼ï¼ãµã³ãã«ã®Makefileï¼sample/Makefileï¼ï¼ä¸é¨ã® 428 ã¦ã¼ãã£ãªãã£ããã°ã©ã ï¼utils/makedepï¼ãï¼ãã®éçºç°å¢ç¨ã«ç¨æããå¿ 429 430 è¦ãããå ´åãããï¼ãã®å ´åã«ã¯ï¼ãããã®ãã¡ã¤ã«ãï¼ã¿ã¼ã²ããä¾åé¨ 431 ãã£ã¬ã¯ããªãéçºç°å¢ä¾åé¨ãã£ã¬ã¯ããªã«ç½®ããã®ã¨ããï¼ã¾ãï¼éçºç° 432 å¢ç¨ã®ããã¸ã§ã¯ããã¡ã¤ã«ãå¿ 433 è¦ãªå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ã 434 ãªã«ç½®ããã®ã¨ããï¼ 435 436 2.2 Makefileã®ã¿ã¼ã²ããä¾åé¨ 437 438 Makefileã®ã¿ã¼ã²ããä¾åé¨ã¯ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã«ç½®ãã 439 Makefile.targetã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ããã»ããµã»ãã 440 ãã»éçºç°å¢ä¾åé¨ã§ç¨æããããã¡ã¤ã«ãªã©ï¼ã«å«ããï¼ 441 442 2.3 éçºç°å¢åã¨ã³ãã³ãåã®è¨å® 443 444 éçºç°å¢åã¨ã³ãã³ãåãè¨å®ããããã«ï¼Makefileã®ã¿ã¼ã²ããä¾åé¨ã§æ¬¡ 445 ã®å¤æ°ãå®ç¾©ããï¼ 446 447 (2-3-1) TOOL éçºç°å¢å 448 449 éçºç°å¢åã«å®ç¾©ããï¼GNUéçºç°å¢ãç¨ããå ´åã«ã¯ï¼gccã«å®ç¾©ããï¼ 450 451 (2-3-2) GCC_TARGET GNUéçºç°å¢ã®ã¿ã¼ã²ããå 452 453 GNUéçºç°å¢ãç¨ããå ´åã«ï¼GNUéçºç°å¢ãconfigureããå ´åã«æå®ããã¿ã¼ 454 ã²ããåã«å®ç¾©ããï¼ããã§æå®ããã¿ã¼ã²ããåã¯ï¼éçºç°å¢ã®ã³ãã³ãå 455 ã®å 456 é ã«ä»ä¸ãããæååã¨ãªãï¼ä¾ãã°ï¼GCC_TARGETãm68k-unknown-elfã« 457 å®ç¾©ããå ´åã«ã¯ï¼ã³ã³ãã¤ã©ã¨ãã¦m68k-unknown-elf-gccã使ãããï¼ãã® 458 å¤æ°ãå®ç¾©ãããªãå ´åã«ã¯ï¼åãªãgccã使ãããï¼ 459 460 (2-3-3) CC Cã³ã³ãã¤ã©ãã©ã¤ãã®å称 461 (2-3-4) CXX C++ã³ã³ãã¤ã©ãã©ã¤ãã®å称 462 (2-3-5) AS ã¢ã»ã³ãã©ã®å称 463 (2-3-6) LD ãªã³ã«ã®å称 464 (2-3-7) AR ã¢ã¼ã«ã¤ãã®å称 465 (2-3-8) NM nmããã°ã©ã ã®å称 466 (2-3-9) RANLIB ranlibããã°ã©ã ã®å称 467 (2-3-10) OBJCOPY objcopyããã°ã©ã ã®å称 468 (2-3-11) OBJDUMP objdumpããã°ã©ã ã®å称 469 470 GNUéçºç°å¢ä»¥å¤ã®éçºç°å¢ãç¨ããå ´åã«ï¼ããããã®ã³ãã³ãã®å称ã«å®ç¾© 471 ããï¼å¯¾å¿ããã³ãã³ãããªãå ´åãï¼ã³ãã³ããã©ã¡ã¼ã¿ãç°ãªãå ´åã«ã¯ï¼ 472 Makefileä¸ã§ãã®ã³ãã³ããå¼ã³åºãã¦ããé¨åãå¤æ´ããå¿ 473 è¦ãããï¼ 474 475 GNUéçºç°å¢ã§ã¯ï¼ãããã¯GCC_TARGETãç¨ãã¦å®ç¾©ãããã®ã§ï¼å®ç¾©ããå¿ 476 è¦ 477 ã¯ãªãï¼ 478 479 2.4 ã³ã³ãã¤ã«ãªãã·ã§ã³ã¨ãªãã¸ã§ã¯ããã¡ã¤ã«ã®è¨å® 480 481 Makefileã®ã¿ã¼ã²ããä¾åé¨ã§ä»¥ä¸ã§èª¬æããå¤æ°ãå®ç¾©ããæã«ã¯ï¼":="ã 482 ç¨ãã¦ï¼ããã¾ã§ã®å®ç¾©ã«è¿½å ããå½¢ã§è¡ãï¼ä¾ãã°ï¼ã³ã³ãã¤ã©ã«å¯¾ããã 483 ã®ä»ã®ãªãã·ã§ã³ã¨ãã¦ã-Wall -g -O2ãã追å ãããå ´åã«ã¯ï¼ãCOPTS := 484 $(COPTS) -Wall -g -O2ãã¨ããè¨è¿°ãMakefileã®ã¿ã¼ã²ããä¾åé¨ã«å«ããï¼ 485 486 (2-4-1) COPTS ã³ã³ãã¤ã©ã«å¯¾ãããã®ä»ã®ãªãã·ã§ã³ 487 (2-4-2) CDEFS ãã¯ãå®ç¾©ãªãã·ã§ã³ï¼-Dãªãã·ã§ã³ï¼ 488 (2-4-3) INCLUDES ããããã¡ã¤ã«ã®ç½®ããããã£ã¬ã¯ããªæå®ãª 489 ãã·ã§ã³ï¼-Iãªãã·ã§ã³ï¼ 490 (2-4-4) LDFLAGS ãªã³ã«ã«å¯¾ãããã®ä»ã®ãªãã·ã§ã³ 491 (2-4-5) LIBS ã©ã¤ãã©ãªãªã³ã¯æå®ã®ããã®ãªãã·ã§ã³ 492 493 ã¿ã¼ã²ããã«ä¾åãã¦ï¼ãã¹ã¦ã®ã½ã¼ã¹ãã¡ã¤ã«ã«å 494 ±éããã³ã³ãã¤ã«ãªãã·ã§ 495 ã³ã®è¿½å ãå¿ 496 è¦ãªå ´åã«ã¯ï¼ãªãã·ã§ã³ã®ç¨®é¡æ¯ã«ä¸ã«ç¤ºããå¤æ°ã«å®ç¾©ããï¼ 497 498 ã»ã¨ãã©ã®å ´åã«ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã®Makefile.targetã«ã¯ï¼ä»¥ 499 ä¸ã®è¨è¿°ãå«ããå¿ 500 è¦ãããï¼ 223 を記述する. 224 225 1.4 アセンブリ言語とのヘッダファイルの共用 226 227 ASPカーネルのヘッダファイルの多くは,アセンブリ言語のソースファイルから 228 もインクルードできるようにするために,次のルールに従って記述するものと 229 する. 230 231 ・TOPPERS_MACRO_ONLYがマクロ定義されている場合には,アセンブリ言語では 232 解釈できない記述(マクロ定義以外の記述)を除くように記述する. 233 234 ・符号無し整数型の定数値は,UINT_CやULONG_Cなどの整数定数を作るためのマ 235 クロを用いて記述する.ただし,アセンブリ言語のソースファイルからもイ 236 ンクルードできるファイル中であっても,C言語のみで用いる定数をこれらの 237 マクロを使って記述する必要はない. 238 239 また,カーネル実装においては,次のルールに従うものとする. 240 241 ・アセンブリ言語からも用いる定数の定義中に型キャストを用いる場合には, 242 CASTマクロを用いて記述する. 243 244 アセンブリ言語からヘッダファイルをインクルードする際には,必要に応じて, 245 TOPPERS_MACRO_ONLY,UINC_C,ULONG_C,CASTをマクロ定義してから,インクルー 246 ドしなければならない. 247 248 1.5 インクルード記述の方法 249 250 開発環境で用意されている標準ヘッダファイルおよびincludeディレクトリ下の 251 標準ヘッダファイルは,「#include <...>」によりインクルードする. 252 253 その他のヘッダファイルは,「#include "..."」によりインクルードする.ヘッ 254 ダファイルが,カレントディレクトリやインクルードするファイルと同じディ 255 レクトリ以外のディレクトリに置かれている場合には,次のようにパス指定を 256 行う. 257 258 ・ターゲット依存部(target/<ターゲット名>)のディレクトリに置かれている 259 場合は,パス指定を行わず,ファイル名のみを記述する. 260 例)#include "target_config.h" 261 262 ・archディレクトリ下のディレクトリに置かれている場合には,archディレク 263 トリからの相対パスで記述する. 264 例)#include "m68k_gcc/prc_config.h" 265 266 ・その他の場合には,ソースプログラムのルートディレクトリ(configureが置 267 かれているディレクトリ)からの相対パスで記述する. 268 例)#include "pdic/upd72001/upd72001.h" 269 270 ・カーネルを構成するファイルから,kernelディレクトリ下のヘッダファイル 271 をインクルードする場合は,パス指定を行わず,ファイル名のみを記述する. 272 例)#include "kernel_impl.h" 273 274 1.6 クリティカルセクションの出入処理の実現に関する制約 275 276 カーネル内で用いるクリティカルセクションの出入処理を実現する場合には, 277 次の2つの条件を満たすように実装しなければならない. 278 279 (1-6-1) 出入処理から抜けた時点では,割込みの禁止/許可が完了していなけ 280 ればならない.例えば,割込み禁止/許可命令を実行してから実際に割込みが 281 禁止/許可されるまで何命令か遅延するプロセッサの場合には,出入処理の中 282 にNOP命令を入れるなどの方法で,出入処理を抜けた時点では,割込みが禁止/ 283 許可された状態になっていることを保証しなければならない. 284 285 (1-6-2) メモリ上のデータ構造が書き変わる可能性があることを,何らかの方 286 法でコンパイラに知らせなければならない.GNU開発環境では,次のいずれかの 287 方法でこの制約を満たすことができる. 288 289 (a) クリティカルセクションの出入処理の全体または出入処理の本質的な部分 290 (具体的には,割込み禁止/許可する処理)を(インラインでない)通常 291 の関数により実現する. 292 293 (b) クリティカルセクションの出入処理の本質的な部分をインラインアセンブ 294 ラによって実現している場合には,そのインラインアセンブラのclobber変 295 数リストに"memory"を追加する. 296 297 (c) クリティカルセクションの出入処理の本質的な部分が,マクロやインライ 298 ン関数呼出しで実現している場合には,クリティカルセクションに入る処 299 理の最後と出る処理の先頭に,Asm("":::"memory")という記述を入れる. 300 301 このような制約を設ける理由については,「TOPPERS/ASPカーネル 設計メモ」 302 の「カーネルのデータ構造に対するvolatile宣言について」の節を参照するこ 303 と. 304 305 306 2.システム構築環境のターゲット依存部 307 308 この章の説明は,GNU開発環境(GCC,GAS,BINUTILS,GNU Make)を用いること 309 を想定して記述してある.それ以外の開発環境を用いる場合には,開発環境に 310 あわせて修正する必要がある. 311 312 2.1 ターゲット略称とターゲット依存部のディレクトリ 313 314 新しいターゲット依存部を作成する時は,まず,ターゲット略称を定める.ター 315 ゲット略称は,システム略称と開発環境略称を"_"で連結したものとする.シス 316 テム略称に用いる文字は英小文字と数字と"_"に,開発環境略称に用いる文字は 317 英小文字と数字に限定する.GNU開発環境の開発環境略称は,"gcc"とする.例 318 えば,システム略称が"dve68k"で,GNU開発環境を用いる場合には,ターゲット 319 略称は"dve68k_gcc"となる. 320 321 ターゲット依存部のファイルを置くために,targetディレクトリの下に,ター 322 ゲット略称を名称とするディレクトリを作成する.これをターゲット依存部ディ 323 レクトリと呼ぶ. 324 325 ターゲット依存部からプロセッサ依存部やチップ依存部を切り分ける場合には, 326 依存部略称を定める.依存部略称は,プロセッサやチップの略称と開発環境略 327 称を"_"で連結したものとする.プロセッサやチップの略称に用いる文字は,英 328 小文字と数字と"_"に限定する.例えば,プロセッサ略称が"m68k"で,GNU開発 329 環境を用いる場合には,依存部略称は"m68k_gcc"となる. 330 331 また,ターゲット依存部から開発環境依存部を切り分ける場合には,開発環境 332 略称を依存部略称とする.例えば,GNU開発環境依存部の依存部略称は,"gcc" 333 となる. 334 335 これらの依存部のファイルを置くために,archディレクトリの下に,依存部略 336 称を名称とするディレクトリを作成する. 337 338 なお,GNU開発環境以外の開発環境を用いる場合には,コンフィギュレーション 339 スクリプト(configure),サンプルのMakefile(sample/Makefile),一部の 340 ユーティリティプログラム(utils/makedep)を,その開発環境用に用意する必 341 要がある場合がある.その場合には,これらのファイルを,ターゲット依存部 342 ディレクトリか開発環境依存部ディレクトリに置くものとする.また,開発環 343 境用のプロジェクトファイルが必要な場合には,ターゲット依存部ディレクト 344 リに置くものとする. 345 346 2.2 Makefileのターゲット依存部 347 348 Makefileのターゲット依存部は,ターゲット依存部ディレクトリに置いた 349 Makefile.targetまたはそこからインクルードされるファイル(プロセッサ・チッ 350 プ・開発環境依存部で用意されるファイルなど)に含める. 351 352 2.3 開発環境名とコマンド名の設定 353 354 開発環境名とコマンド名を設定するために,Makefileのターゲット依存部で次 355 の変数を定義する. 356 357 (2-3-1) TOOL 開発環境名 358 359 開発環境名に定義する.GNU開発環境を用いる場合には,gccに定義する. 360 361 (2-3-2) GCC_TARGET GNU開発環境のターゲット名 362 363 GNU開発環境を用いる場合に,GNU開発環境をconfigureする場合に指定するター 364 ゲット名に定義する.ここで指定したターゲット名は,開発環境のコマンド名 365 の先頭に付与される文字列となる.例えば,GCC_TARGETをm68k-unknown-elfに 366 定義した場合には,コンパイラとしてm68k-unknown-elf-gccが使われる.この 367 変数が定義されない場合には,単なるgccが使われる. 368 369 (2-3-3) CC Cコンパイラドライバの名称 370 (2-3-4) CXX C++コンパイラドライバの名称 371 (2-3-5) AS アセンブラの名称 372 (2-3-6) LD リンカの名称 373 (2-3-7) AR アーカイバの名称 374 (2-3-8) NM nmプログラムの名称 375 (2-3-9) RANLIB ranlibプログラムの名称 376 (2-3-10) OBJCOPY objcopyプログラムの名称 377 (2-3-11) OBJDUMP objdumpプログラムの名称 378 379 GNU開発環境以外の開発環境を用いる場合に,それぞれのコマンドの名称に定義 380 する.対応するコマンドがない場合や,コマンドパラメータが異なる場合には, 381 Makefile中でそのコマンドを呼び出している部分を変更する必要がある. 382 383 GNU開発環境では,これらはGCC_TARGETを用いて定義されるので,定義する必要 384 はない. 385 386 2.4 コンパイルオプションとオブジェクトファイルの設定 387 388 Makefileのターゲット依存部で以下で説明する変数を定義する時には,":="を 389 用いて,それまでの定義に追加する形で行う.例えば,コンパイラに対するそ 390 の他のオプションとして「-Wall -g -O2」を追加したい場合には,「COPTS := 391 $(COPTS) -Wall -g -O2」という記述をMakefileのターゲット依存部に含める. 392 393 (2-4-1) COPTS コンパイラに対するその他のオプション 394 (2-4-2) CDEFS マクロ定義オプション(-Dオプション) 395 (2-4-3) INCLUDES ヘッダファイルの置かれたディレクトリ指定オ 396 プション(-Iオプション) 397 (2-4-4) LDFLAGS リンカに対するその他のオプション 398 (2-4-5) LIBS ライブラリリンク指定のためのオプション 399 400 ターゲットに依存して,すべてのソースファイルに共通するコンパイルオプショ 401 ンの追加が必要な場合には,オプションの種類毎に上に示した変数に定義する. 402 403 ほとんどの場合に,ターゲット依存部ディレクトリのMakefile.targetには,以 404 下の記述を含める必要がある. 501 405 502 406 ---------------------------------------- … … 504 408 ---------------------------------------- 505 409 506 ããã§TARGETDIRã¯ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã«å®ç¾©ããã¦ããï¼ã¾ã 507 SRCDIR ã¯ï¼Makefileã«ããã¦ï¼ã½ã¼ã¹ããã°ã©ã ã®ã«ã¼ããã£ã¬ã¯ããª508 ï¼configureãç½®ããã¦ãããã£ã¬ã¯ããªï¼ã«å®ç¾©ããã¦ããï¼ 509 510 ã³ã³ãã¤ã©ã®åé¡çã§ï¼è¦åã¡ãã»ã¼ã¸ãåºããã¨ãé²ããªãç¶æ³ä»¥å¤ã§ã¯ï¼ 511 COPTS ã«-Werrorã追å ãããã¨ãæ¨å¥¨ããï¼410 ここでTARGETDIRは,ターゲット依存部ディレクトリに定義されている.また 411 SRCDIRは,Makefileにおいて,ソースプログラムのルートディレクトリ 412 (configureが置かれているディレクトリ)に定義されている. 413 414 コンパイラの問題等で,警告メッセージが出ることを防げない状況以外では, 415 COPTSに-Werrorを追加することを推奨する. 512 416 513 417 ---------------------------------------- … … 515 419 ---------------------------------------- 516 420 517 ã«ã¼ãã«ã®ã³ã³ãã¤ã«æã«ï¼dereferencing type-punned pointer will break 518 strict-aliasing rulesã¨ããè¦åãåºãå ´åã«ã¯ï¼ä»¥ä¸ã追å ããã¨ããï¼ã 519 ã®è¦åã¡ãã»ã¼ã¸ã«é¢ãã詳細ã¯ï¼ãTOPPERS/ASPã«ã¼ãã« è¨è¨ã¡ã¢ãã®ãå 520 ãã£ã¹ãã«ä¼´ãè¦åã¡ãã»ã¼ã¸ãã®ç¯ãåç 521 §ãããã¨ï¼ 421 カーネルのコンパイル時に,dereferencing type-punned pointer will break 422 strict-aliasing rulesという警告が出る場合には,以下を追加するとよい.こ 423 の警告メッセージに関する詳細は,「TOPPERS/ASPカーネル 設計メモ」の「型 424 キャストに伴う警告メッセージ」の節を参照すること. 522 425 523 426 ---------------------------------------- … … 525 428 ---------------------------------------- 526 429 527 ã¾ãï¼ã¢ã»ã³ããªè¨èªã¬ãã«ã®èå¥åãï¼Cè¨èªã¬ãã«ã®èå¥åã®å 528 é ã«"_"ã 529 ä»ãããã®ã«ãªãå ´åã«ã¯ï¼CDEFSã«-DTOPPERS_LABEL_ASMã追å ããï¼ 530 531 (2-4-6) SYSSVC_DIR ã·ã¹ãã ãµã¼ãã¹ã®ã½ã¼ã¹ãç½®ããããã£ã¬ã¯ã㪠532 (2-4-7) SYSSVC_ASMOBJS ã¢ã»ã³ããªè¨èªã§è¨è¿°ãããã·ã¹ãã ãµã¼ãã¹ã® 533 ãªãã¸ã§ã¯ã 534 (2-4-8) SYSSVC_COBJS Cè¨èªã§è¨è¿°ãããã·ã¹ãã ãµã¼ãã¹ã®ãªãã¸ã§ã¯ã 535 (2-4-9) SYSSVC_CFLAGS ã·ã¹ãã ãµã¼ãã¹ã«å¯¾ããã³ã³ãã¤ã«ãªãã·ã§ã³ 536 (2-4-10) SYSSVC_LIBS ã·ã¹ãã ãµã¼ãã¹ã«å¯¾ããã©ã¤ãã©ãªãªã³ã¯æå® 537 538 ã¿ã¼ã²ããã«ä¾åãã¦ï¼ã·ã¹ãã ãµã¼ãã¹ï¼ã·ã¹ãã ãã°ã¿ã¹ã¯ãããã¤ã¹ã 539 ã©ã¤ããªã©ï¼ã®ã½ã¼ã¹ãç½®ããããã£ã¬ã¯ããªï¼ã·ã¹ãã ãµã¼ãã¹ãæ§æãã 540 ãªãã¸ã§ã¯ããã¡ã¤ã«ã®ãªã¹ãï¼ããããã³ã³ãã¤ã«ããéã«é©ç¨ããã³ã³ã 541 ã¤ã«ãªãã·ã§ã³ï¼ãã®æ§æã«å¿ 542 è¦ãªã©ã¤ãã©ãªãªã³ã¯æå®ã追å ããå ´åã«ã¯ï¼ 543 ä¸ã«ç¤ºããå¤æ°ã«å®ç¾©ããï¼ 544 545 (2-4-11) KERNEL_DIR ã«ã¼ãã«ã®ã½ã¼ã¹ãç½®ããããã£ã¬ã¯ã㪠546 (2-4-12) KERNEL_ASMOBJS ã¢ã»ã³ããªè¨èªã§è¨è¿°ãããã«ã¼ãã«ã®ãªãã¸ã§ã¯ã 547 (2-4-13) KERNEL_COBJS Cè¨èªã§è¨è¿°ãããã«ã¼ãã«ã®ãªãã¸ã§ã¯ã 548 (2-4-14) KERNEL_CFLAGS ã«ã¼ãã«ã«å¯¾ããã³ã³ãã¤ã«ãªãã·ã§ã³ 549 550 ã¿ã¼ã²ããã«ä¾åãã¦ï¼ã«ã¼ãã«ã®ã½ã¼ã¹ãç½®ããããã£ã¬ã¯ããªï¼ã«ã¼ãã« 551 ãæ§æãããªãã¸ã§ã¯ããã¡ã¤ã«ã®ãªã¹ãï¼ããããã³ã³ãã¤ã«ããéã«é©ç¨ 552 ããã³ã³ãã¤ã«ãªãã·ã§ã³ã追å ããå ´åã«ã¯ï¼ä¸ã«ç¤ºããå¤æ°ã«å®ç¾©ããï¼ 553 554 ã»ã¨ãã©ã®å ´åã«ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã®Makefile.targetã«ã¯ï¼ä»¥ 555 ä¸ã®è¨è¿°ãå«ããå¿ 556 è¦ãããï¼ 430 また,アセンブリ言語レベルの識別名が,C言語レベルの識別名の先頭に"_"が 431 付いたものになる場合には,CDEFSに-DTOPPERS_LABEL_ASMを追加する. 432 433 (2-4-6) SYSSVC_DIR システムサービスのソースが置かれたディレクトリ 434 (2-4-7) SYSSVC_ASMOBJS アセンブリ言語で記述されたシステムサービスの 435 オブジェクト 436 (2-4-8) SYSSVC_COBJS C言語で記述されたシステムサービスのオブジェクト 437 (2-4-9) SYSSVC_CFLAGS システムサービスに対するコンパイルオプション 438 (2-4-10) SYSSVC_LIBS システムサービスに対するライブラリリンク指定 439 440 ターゲットに依存して,システムサービス(システムログタスクやデバイスド 441 ライバなど)のソースが置かれたディレクトリ,システムサービスを構成する 442 オブジェクトファイルのリスト,それらをコンパイルする際に適用するコンパ 443 イルオプション,その構成に必要なライブラリリンク指定を追加する場合には, 444 上に示した変数に定義する. 445 446 (2-4-11) KERNEL_DIR カーネルのソースが置かれたディレクトリ 447 (2-4-12) KERNEL_ASMOBJS アセンブリ言語で記述されたカーネルのオブジェクト 448 (2-4-13) KERNEL_COBJS C言語で記述されたカーネルのオブジェクト 449 (2-4-14) KERNEL_CFLAGS カーネルに対するコンパイルオプション 450 451 ターゲットに依存して,カーネルのソースが置かれたディレクトリ,カーネル 452 を構成するオブジェクトファイルのリスト,それらをコンパイルする際に適用 453 するコンパイルオプションを追加する場合には,上に示した変数に定義する. 454 455 ほとんどの場合に,ターゲット依存部ディレクトリのMakefile.targetには,以 456 下の記述を含める必要がある. 557 457 558 458 ---------------------------------------- … … 562 462 ---------------------------------------- 563 463 564 (2-4-15) CFG_TABS ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾ãããªãã·ã§ã³ 565 566 ã¿ã¼ã²ããã«ä¾åãã¦ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾ãããªãã·ã§ã³ã追å ããå ´ 567 åã«ã¯ï¼ä¸ã«ç¤ºããå¤æ°ã«å®ç¾©ããï¼å 568 ·ä½çã«ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®å¤å 569 å¾ã·ã³ãã«ãã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ï¼target_def.csvï¼ãããå ´åã«ã¯ï¼ 570 ãããæå®ãããªãã·ã§ã³ã追å ããå¿ 571 è¦ãããï¼ 572 573 ã»ã¨ãã©ã®å ´åã«ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã®Makefile.targetã«ã¯ï¼ä»¥ 574 ä¸ã®è¨è¿°ãå«ããå¿ 575 è¦ãããï¼ 464 (2-4-15) CFG_TABS コンフィギュレータに対するオプション 465 466 ターゲットに依存して,コンフィギュレータに対するオプションを追加する場 467 合には,上に示した変数に定義する.具体的には,コンフィギュレータの値取 468 得シンボルテーブルのターゲット依存部(target_def.csv)がある場合には, 469 それを指定するオプションを追加する必要がある. 470 471 ほとんどの場合に,ターゲット依存部ディレクトリのMakefile.targetには,以 472 下の記述を含める必要がある. 576 473 577 474 ---------------------------------------- … … 579 476 ---------------------------------------- 580 477 581 (2-4-16) CFG1_OUT_LDFLAGS cfg1_out.cã«å¯¾ãããªã³ã¯ãªãã·ã§ã³ 582 583 ã¿ã¼ã²ããã«ä¾åãã¦ï¼cfg1_out.cããªã³ã¯ããéã«é©ç¨ãããªãã·ã§ã³ã追 584 å ããå ´åã«ã¯ï¼ä¸ã«ç¤ºããå¤æ°ã«å®ç¾©ããï¼ 585 586 ãªãï¼LDFLAGSã¯ï¼cfg1_out.cããªã³ã¯ããéã«ã¯é©ç¨ãããªãããï¼LDFLAGS 587 ã«å®ç¾©ãããªãã·ã§ã³ã§ï¼cfg1_out.cããªã³ã¯ããéã«ãå¿ 588 è¦ãªãã®ã¯ï¼ 589 CFG1_OUT_LDFLAGSã«ãå®ç¾©ããå¿ 590 è¦ãããï¼ 591 592 (2-4-17) CFG_ASMOBJS ã¢ã»ã³ããªè¨èªã§è¨è¿°ãããã·ã¹ãã ã³ã³ã㣠593 ã®ã¥ã¬ã¼ã·ã§ã³ã®ããã®ãªãã¸ã§ã¯ã 594 (2-4-18) CFG_COBJS Cè¨èªã§è¨è¿°ãããã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ 595 ã·ã§ã³ã®ããã®ãªãã¸ã§ã¯ã 596 597 ã¿ã¼ã²ããã«ä¾åãã¦ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã®ããã®ãªãã¸ã§ã¯ 598 ããã¡ã¤ã«ãï¼kernel_cfg.o以å¤ã«ï¼è¿½å ããå ´åã«ã¯ï¼ä¸ã«ç¤ºããå¤æ°ã«å® 599 義ããï¼ãã®å ´åï¼è¿½å ãããªãã¸ã§ã¯ããã¡ã¤ã«ã®ä½æã«ã¼ã«ï¼ã³ã³ãã¤ã«ï¼ 600 ã¢ã»ã³ãã«ã«ã¼ã«ã¨ä¾åé¢ä¿ä½æã«ã¼ã«ï¼ãï¼Makefileã®ã¿ã¼ã²ããä¾åé¨ã« 601 è¨è¿°ããå¿ 602 è¦ãããï¼ 478 (2-4-16) CFG1_OUT_LDFLAGS cfg1_out.cに対するリンクオプション 479 480 ターゲットに依存して,cfg1_out.cをリンクする際に適用するオプションを追 481 加する場合には,上に示した変数に定義する. 482 483 なお,LDFLAGSは,cfg1_out.cをリンクする際には適用されないため,LDFLAGS 484 に定義したオプションで,cfg1_out.cをリンクする際にも必要なものは, 485 CFG1_OUT_LDFLAGSにも定義する必要がある. 486 487 (2-4-17) CFG_ASMOBJS アセンブリ言語で記述されたシステムコンフィ 488 ギュレーションのためのオブジェクト 489 (2-4-18) CFG_COBJS C言語で記述されたシステムコンフィギュレー 490 ションのためのオブジェクト 491 492 ターゲットに依存して,システムコンフィギュレーションのためのオブジェク 493 トファイルを(kernel_cfg.o以外に)追加する場合には,上に示した変数に定 494 義する.この場合,追加したオブジェクトファイルの作成ルール(コンパイル/ 495 アセンブルルールと依存関係作成ルール)を,Makefileのターゲット依存部に 496 記述する必要がある. 603 497 604 498 (2-4-19) CFG2_OUT_SRCS 605 499 606 ã¿ã¼ã²ããã«ä¾åãã¦ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã§kernel_cfg.c㨠607 kernel_cfg.h 以å¤ã®ãã¡ã¤ã«ãçæããå ´åã«ã¯ï¼ä¸ã«ç¤ºããå¤æ°ã«å®ç¾©ããï¼500 ターゲットに依存して,コンフィギュレータのパス2でkernel_cfg.cと 501 kernel_cfg.h以外のファイルを生成する場合には,上に示した変数に定義する. 608 502 609 503 (2-4-20) OMIT_WARNING_ALL 610 504 (2-4-21) OMIT_OPTIMIZATION 611 505 612 ãµã³ãã«ã®Makefileã§ã¯ï¼ã³ã³ãã¤ã©ã«å¯¾ãããªãã·ã§ã³ã«ã-Wall -g -O2ã 613 ã追å ããï¼-Wallã追å ããããªãå ´åã«ã¯ï¼Makefileã®ã¿ã¼ã²ããä¾åé¨ã§ 614 OMIT_WARNING_ALLã"true"ã«å®ç¾©ããï¼-O2ã追å ããããªãå ´åã«ã¯ï¼ 615 Makefileã®ã¿ã¼ã²ããä¾åé¨ã§OMIT_OPTIMIZATIONã"true"ã«å®ç¾©ããï¼ 616 617 2.5 ãªãã»ãããã¡ã¤ã«ã®çææ¹æ³ 618 619 ã¢ã»ã³ããªè¨èªã§è¨è¿°ãããããã°ã©ã ããï¼Cè¨èªã®æ§é ä½ã«ã¢ã¯ã»ã¹ããå ´ 620 åã«ã¯ï¼æ§é ä½ã®åãã£ã¼ã«ãã®ãªãã»ããå¤ãåç 621 §ãããã¨ãå¿ 622 è¦ã§ããï¼ 623 ASPã«ã¼ãã«ã§ã¯ï¼å¿ 624 è¦ãªãªãã»ããå¤ãæ±ãã¦ãã¡ã¤ã«ï¼æ¨æºã§ã¯offset.hï¼ 625 ã«çæããããã®ä»çµã¿ãç¨æãã¦ããï¼ 626 627 ãã®ä»çµã¿ãç¨ãããã¨ã§ï¼ä¾ãã°ï¼TCBä¸ã®texptnãã£ã¼ã«ãã®ãªãã»ããå¤ 628 ãTCB_texptnã«ãã¯ãå®ç¾©ãããã¨ãï¼TCBä¸ã®ã¿ã¹ã¯ã³ã³ããã¹ãããã㯠629 ï¼tskctxbï¼ã«å«ã¾ããpcãã£ã¼ã«ãã®ãªãã»ããå¤ãTCB_pcã«ãã¯ãå®ç¾©ãã 630 ãã¨ãã§ããï¼ã¾ãï¼TCBä¸ã®enatexãã£ã¼ã«ãã®ãªãã»ããå¤ï¼ãããä½ç½®ï¼ 631 ããããã¹ã¯ãï¼ããããTCB_enatexï¼TCB_enatex_bitï¼TCB_enatex_maskã«ã 632 ã¯ãå®ç¾©ãããã¨ãã§ããï¼ 633 634 offset.hãçæããããã®ä»çµã¿ã¨ãã¦ï¼ç¾æç¹ã§ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã 635 ç¨ããæ¹æ³ã¨ï¼makeoffset.cã¨genoffsetãç¨ããæ¹æ³ãç¨æãã¦ããï¼å¾è 636 ã® 637 æ¹æ³ã¯ï¼GNUéçºç°å¢ã«ãã対å¿ãã¦ããªããã¨ããï¼å°æ¥ã®ãã¼ã¸ã§ã³ã§ã¯ï¼ 638 å¾è 639 ã®æ¹æ³ã®ãµãã¼ãããããè¨ç»ã§ããï¼æ°ãã«ãã¼ãã£ã³ã°ããå ´åã«ã¯ï¼ 640 åè 641 ã®æ¹æ³ãç¨ãããã¨ãæ¨å¥¨ããï¼ 642 643 ãããã®ä»çµã¿ã§ãªãã»ãããã¡ã¤ã«ãçæã§ããªãæã«ã¯ï¼offset.hãã¿ã¼ 644 ã²ããä¾åé¨ã§ç¨æãï¼Makefileã®ã¿ã¼ã²ããä¾åé¨ã§OMIT_MAKEOFFSETã 645 "true"ã«å®ç¾©ããï¼ 646 647 æ¡å¼µããã±ã¼ã¸ã®ä¸ã«ã¯ï¼TCBã«ãã£ã¼ã«ãã追å ãããã®ãããããï¼TCBä¸ 648 ã®ãã£ã¼ã«ãã®ãªãã»ããå¤ã¯å¤åããï¼offset.hãçæããå ´åã§ãï¼ã¿ã¼ 649 ã²ããä¾åé¨ã§ç¨æããå ´åã§ãï¼æ¡å¼µããã±ã¼ã¸ã«å¯¾å¿ããããã«ã¯ï¼ãã® 650 ãã¨ãèæ 651 ®ããå¿ 652 è¦ãããï¼ 653 654 2.5.1 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãç¨ããæ¹æ³ 655 656 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹1ã§çæããcfg1_out.cãã³ã³ãã¤ã«ãã¦çæãã㪠657 ãã¸ã§ã¯ããã¡ã¤ã«ããï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«ãã£ã¦offset.hãçæããæ¹ 658 æ³ã§ããï¼ãã®æ¹æ³ãç¨ããããã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ãªãã»ãããã¡ã¤ 659 ã«çæç¨ãã³ãã¬ã¼ããã¡ã¤ã«ãç¨æãï¼target_cfg1_out.hï¼ã¾ãã¯ï¼ããã 660 ãã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã¨target_def.csvï¼ã¾ãã¯ï¼åçã®å½¹å²ãæ 661 ã¤ãã¡ã¤ã«ï¼ã«è¨è¿°ã追å ããå¿ 662 è¦ãããï¼ãªãï¼ãããã®ãã¡ã¤ã«ãæ°ãã« 663 ç¨æããéãä¿®æ£ããéã«ã¯ï¼offset.hã«å¦¥å½ãªå®ç¾©ãçæããã¦ãããã¨ã 664 確èªãã¹ãã§ããï¼ 665 666 ãªãã»ãããã¡ã¤ã«çæç¨ãã³ãã¬ã¼ããã¡ã¤ã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ï¼ 667 target_offset.tfï¼ã¾ãã¯ï¼ããã»ããµä¾åé¨ããããä¾åé¨ã§ç¨æãããã 668 ã«ä»£ãããã¡ã¤ã«ï¼ã«ç¨æããï¼ã¾ãï¼Makefileã®ã¿ã¼ã²ããä¾åé¨ã§ï¼æ¬¡ã® 669 ä¾ã®ããã«ï¼OFFSET_TFã«ãªãã»ãããã¡ã¤ã«çæç¨ãã³ãã¬ã¼ããã¡ã¤ã«ã®ãã¡ 670 ã¤ã«åãå®ç¾©ããï¼ 671 672 ---------------------------------------- 673 # ãªãã»ãããã¡ã¤ã«çæã®ããã®å®ç¾© 506 サンプルのMakefileでは,コンパイラに対するオプションに「-Wall -g -O2」 507 を追加する.-Wallを追加したくない場合には,Makefileのターゲット依存部で 508 OMIT_WARNING_ALLを"true"に定義する.-O2を追加したくない場合には, 509 Makefileのターゲット依存部でOMIT_OPTIMIZATIONを"true"に定義する. 510 511 2.5 オフセットファイルの生成方法 512 513 アセンブリ言語で記述されるプログラムから,C言語の構造体にアクセスする場 514 合には,構造体の各フィールドのオフセット値を参照することが必要である. 515 ASPカーネルでは,必要なオフセット値を求めてファイル(標準ではoffset.h) 516 に生成するための仕組みを用意している. 517 518 この仕組みを用いることで,例えば,TCB中のtexptnフィールドのオフセット値 519 をTCB_texptnにマクロ定義することや,TCB中のタスクコンテキストブロック 520 (tskctxb)に含まれるpcフィールドのオフセット値をTCB_pcにマクロ定義する 521 ことができる.また,TCB中のenatexフィールドのオフセット値,ビット位置, 522 ビットマスクを,それぞれTCB_enatex,TCB_enatex_bit,TCB_enatex_maskにマ 523 クロ定義することができる. 524 525 offset.hを生成するための仕組みとして,現時点では,コンフィギュレータを 526 用いる方法と,makeoffset.cとgenoffsetを用いる方法を用意している.後者の 527 方法は,GNU開発環境にしか対応していないことから,将来のバージョンでは, 528 後者の方法のサポートをやめる計画である.新たにポーティングする場合には, 529 前者の方法を用いることを推奨する. 530 531 これらの仕組みでオフセットファイルを生成できない時には,offset.hをター 532 ゲット依存部で用意し,Makefileのターゲット依存部でOMIT_MAKEOFFSETを 533 "true"に定義する. 534 535 拡張パッケージの中には,TCBにフィールドを追加するものがあるため,TCB中 536 のフィールドのオフセット値は変化する.offset.hを生成する場合でも,ター 537 ゲット依存部で用意する場合でも,拡張パッケージに対応するためには,この 538 ことを考慮する必要がある. 539 540 2.5.1 コンフィギュレータを用いる方法 541 542 コンフィギュレータのパス1で生成するcfg1_out.cをコンパイルして生成したオ 543 ブジェクトファイルから,コンフィギュレータによってoffset.hを生成する方 544 法である.この方法を用いるためには,ターゲット依存部でオフセットファイ 545 ル生成用テンプレートファイルを用意し,target_cfg1_out.h(または,そこか 546 らインクルードされるファイル)とtarget_def.csv(または,同等の役割を持 547 つファイル)に記述を追加する必要がある.なお,これらのファイルを新たに 548 用意した際や修正した際には,offset.hに妥当な定義が生成されていることを 549 確認すべきである. 550 551 オフセットファイル生成用テンプレートファイルは,ターゲット依存部で, 552 target_offset.tf(または,プロセッサ依存部やチップ依存部で用意するそれ 553 に代わるファイル)に用意する.また,Makefileのターゲット依存部で,次の 554 例のように,OFFSET_TFにオフセットファイル生成用テンプレートファイルのファ 555 イル名を定義する. 556 557 ---------------------------------------- 558 # オフセットファイル生成のための定義 674 559 OFFSET_TF = $(TARGETDIR)/target_offset.tf 675 560 ---------------------------------------- 676 561 677 ãªãã»ãããã¡ã¤ã«çæç¨ãã³ãã¬ã¼ããã¡ã¤ã«ã«ã¯ï¼ä»¥ä¸ã®å 678 容ãè¨è¿°ããï¼ 679 680 (1) æ¨æºãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã 681 682 ãªãã»ãããã¡ã¤ã«çæç¨ã®æ¨æºãã³ãã¬ã¼ããã¡ã¤ã«ï¼kernel/genoffset.tfï¼ 683 ãã¤ã³ã¯ã«ã¼ãããï¼æ¨æºãã³ãã¬ã¼ããã¡ã¤ã«ã«ã¯ï¼ä»¥ä¸ã§ç¨ããDEFINEé¢ 684 æ°ãDEFINE_BITé¢æ°ã®å®ç¾©ãªã©ãå«ã¾ãã¦ããï¼ 685 686 ---------------------------------------- 687 $ æ¨æºãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã 562 オフセットファイル生成用テンプレートファイルには,以下の内容を記述する. 563 564 (1) 標準テンプレートファイルのインクルード 565 566 オフセットファイル生成用の標準テンプレートファイル(kernel/genoffset.tf) 567 をインクルードする.標準テンプレートファイルには,以下で用いるDEFINE関 568 数やDEFINE_BIT関数の定義などが含まれている. 569 570 ---------------------------------------- 571 $ 標準テンプレートファイルのインクルード 688 572 $INCLUDE "kernel/genoffset.tf"$ 689 573 ---------------------------------------- 690 574 691 (2) ãªãã»ããå¤ã®ãã¯ãå®ç¾©ã®çæ692 693 DEFINE é¢æ°ãç¨ãã¦ï¼ãªãã»ããå¤ã®ãã¯ãå®ç¾©ãçæããï¼ä¾ãã°ï¼TCBä¸ã®694 ã¿ã¹ã¯ã³ã³ããã¹ããããã¯ï¼tskctxbï¼ã«å«ã¾ããpcãã£ã¼ã«ãã®ãªãã»ãã 695 å¤ãï¼TCB_pcã«ãã¯ãå®ç¾©ããå ´åã«ã¯ï¼æ¬¡ã®ããã«è¨è¿°ããï¼ 696 697 ---------------------------------------- 698 $ ãªãã»ããå¤ã®ãã¯ãå®ç¾©ã®çæ575 (2) オフセット値のマクロ定義の生成 576 577 DEFINE関数を用いて,オフセット値のマクロ定義を生成する.例えば,TCB中の 578 タスクコンテキストブロック(tskctxb)に含まれるpcフィールドのオフセット 579 値を,TCB_pcにマクロ定義する場合には,次のように記述する. 580 581 ---------------------------------------- 582 $ オフセット値のマクロ定義の生成 699 583 $DEFINE("TCB_pc", offsetof_TCB_pc)$ 700 584 ---------------------------------------- 701 585 702 ããã§ï¼DEFINEé¢æ°ã®ç¬¬1ãã©ã¡ã¼ã¿ã¯ãã¯ãå®ç¾©ããã·ã³ãã«ï¼ç¬¬2ãã©ã¡ã¼ 703 ã¿ã¯ï¼ãªãã»ããå¤ãä¿æããã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®å¤æ°ã§ããï¼ 704 705 ã¾ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãï¼ãªãã»ããå¤ãä¿æããå¤æ°ï¼ä¸ã®ä¾ã§ã¯ 706 offsetof_TCB_pc ï¼ã«å¤ãè¨å®ããããã«ï¼target_def.csvï¼ã¾ãã¯ï¼åçã®å½¹707 å²ãæã¤ãã¡ã¤ã«ï¼ã«æ¬¡ã®ä¾ã®ãããªè¡ã追å ããï¼ 586 ここで,DEFINE関数の第1パラメータはマクロ定義するシンボル,第2パラメー 587 タは,オフセット値を保持するコンフィギュレータの変数である. 588 589 また,コンフィギュレータが,オフセット値を保持する変数(上の例では 590 offsetof_TCB_pc)に値を設定するために,target_def.csv(または,同等の役 591 割を持つファイル)に次の例のような行を追加する. 708 592 709 593 ---------------------------------------- … … 711 595 ---------------------------------------- 712 596 713 ãã ãï¼åãªãã¸ã§ã¯ãã®åæåãããã¯ã®ã¿ã¼ã²ããéä¾åã®ãã£ã¼ã«ãã® 714 ãªãã»ããå¤ãåå¾ããããã®è¨è¿°ã¯ï¼kernel/kernel_def.csvã«å«ã¾ãã¦ããï¼ 715 kernel/kernel_def.csvã«å«ã¾ãã¦ããè¨è¿°ã¯ï¼target_def.csvï¼ã¾ãã¯ï¼åç 716 ã®å½¹å²ãæã¤ãã¡ã¤ã«ï¼ã«è¿½å ããå¿ 717 è¦ã¯ãªãï¼ 718 719 (3) ããããªãã»ããå¤çã®ãã¯ãå®ç¾©ã®çæ 720 721 DEFINE_BITé¢æ°ãç¨ãã¦ï¼ãããã®ãªãã»ããå¤ï¼ãããä½ç½®ï¼ããããã¹ã¯ 722 ã®ãã¯ãå®ç¾©ãçæããï¼ä¾ãã°ï¼TCBä¸ã®enatexãã£ã¼ã«ãã®ãªãã»ããå¤ï¼ 723 ãããä½ç½®ï¼ããããã¹ã¯ãï¼ããããTCB_enatexï¼TCB_enatex_bitï¼ 724 TCB_enatex_maskã«ãã¯ãå®ç¾©ããå ´åã«ã¯ï¼æ¬¡ã®ããã«è¨è¿°ããï¼ 597 ただし,各オブジェクトの初期化ブロックのターゲット非依存のフィールドの 598 オフセット値を取得するための記述は,kernel/kernel_def.csvに含まれている. 599 kernel/kernel_def.csvに含まれている記述は,target_def.csv(または,同等 600 の役割を持つファイル)に追加する必要はない. 601 602 (3) ビットオフセット値等のマクロ定義の生成 603 604 DEFINE_BIT関数を用いて,ビットのオフセット値,ビット位置,ビットマスク 605 のマクロ定義を生成する.例えば,TCB中のenatexフィールドのオフセット値, 606 ビット位置,ビットマスクを,それぞれTCB_enatex,TCB_enatex_bit, 607 TCB_enatex_maskにマクロ定義する場合には,次のように記述する. 725 608 726 609 ---------------------------------------- … … 728 611 ---------------------------------------- 729 612 730 ããã§ï¼DEFINE_BITé¢æ°ã®ç¬¬1ãã©ã¡ã¼ã¿ã¯ãã¯ãå®ç¾©ããã·ã³ãã«ï¼ã®å 731 é é¨ 732 åï¼ï¼ç¬¬2ãã©ã¡ã¼ã¿ã¯æ§é ä½ã®ãµã¤ãºã§ããï¼ç¬¬3ãã©ã¡ã¼ã¿ã«ã¯ï¼ãããã® 733 ãªãã»ããï¼ãããä½ç½®ï¼ããããã¹ã¯ãï¼8ãããåä½ï¼ãã¤ãåä½ï¼ã§æ±ã 734 ãå ´åã«ã¯"B"ãï¼16ãããåä½ã§æ±ããå ´åã«ã¯"H"ãï¼32ãããåä½ã§æ±ã 735 ãå ´åã«ã¯"W"ãæå®ããï¼ãªãï¼ãããä½ç½®ã¯ï¼LSBã0ã¨ããå¤ï¼ããããªã 736 ã«ã¨ã³ãã£ã¢ã³ãæ³å®ï¼ãæ±ããï¼ 737 738 ã¾ãï¼target_cfg1_out.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã«ï¼ 739 ããããªãã»ããå¤çãæ±ããããã®æ§é ä½ã®å¤æ°å®ç¾©ã追å ããï¼ãã®æ§é 740 ä½ã®å¤æ°ã¯ï¼å称ããã¯ãå®ç¾©ããã·ã³ãã«ï¼DEFINE_BITé¢æ°ã®ç¬¬1ãã©ã¡ã¼ã¿ï¼ 741 ã¨ãï¼å¯¾è±¡ã®ãããã®ã¿ã1ã§ï¼ä»ã®ãã¹ã¦ã®ãããã0ã«ãªãããã«åæåã 742 ãï¼ã¾ãï¼const修飾åãä»å ããï¼ä¾ãã°ï¼TCBä¸ã®enatexãã£ã¼ã«ãã®ãã 743 ããªãã»ããå¤çãæ±ããå ´åã«ã¯ï¼æ¬¡ã®ãããªå®ç¾©ã追å ããï¼tskctxbã®å 744 æå¤ã¯ï¼ã¿ã¼ã²ããä¾åãªã®ã§æ³¨æãããã¨ï¼ï¼ 613 ここで,DEFINE_BIT関数の第1パラメータはマクロ定義するシンボル(の先頭部 614 分),第2パラメータは構造体のサイズである.第3パラメータには,ビットの 615 オフセット,ビット位置,ビットマスクを,8ビット単位(バイト単位)で求め 616 る場合には"B"を,16ビット単位で求める場合には"H"を,32ビット単位で求め 617 る場合には"W"を指定する.なお,ビット位置は,LSBを0とした値(ビットリト 618 ルエンディアンを想定)を求める. 619 620 また,target_cfg1_out.h(または,そこからインクルードされるファイル)に, 621 ビットオフセット値等を求めるための構造体の変数定義を追加する.この構造 622 体の変数は,名称をマクロ定義するシンボル(DEFINE_BIT関数の第1パラメータ) 623 とし,対象のビットのみが1で,他のすべてのビットが0になるように初期化す 624 る.また,const修飾子を付加する.例えば,TCB中のenatexフィールドのビッ 625 トオフセット値等を求める場合には,次のような定義を追加する(tskctxbの初 626 期値は,ターゲット依存なので注意すること). 745 627 746 628 ---------------------------------------- … … 768 650 ---------------------------------------- 769 651 770 ããã«ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãï¼æ§é ä½ã®ãµã¤ãºï¼ä¸ã®ä¾ã§ã¯sizeof_TCBï¼ã« 771 å¤ãè¨å®ããããã«ï¼target_def.csvï¼ã¾ãã¯ï¼åçã®å½¹å²ãæã¤ãã¡ã¤ã«ï¼ 772 ã«æ¬¡ã®ä¾ã®ãããªè¡ã追å ããï¼ 652 さらに,コンフィギュレータが,構造体のサイズ(上の例ではsizeof_TCB)に 653 値を設定するために,target_def.csv(または,同等の役割を持つファイル) 654 に次の例のような行を追加する. 773 655 774 656 ---------------------------------------- … … 776 658 ---------------------------------------- 777 659 778 ãã ãï¼åè¿°ããéãï¼kernel/kernel_def.csvã«å«ã¾ãã¦ããè¨è¿°ã¯ï¼ 779 target_def.csvï¼ã¾ãã¯ï¼åçã®å½¹å²ãæã¤ãã¡ã¤ã«ï¼ã«è¿½å ããå¿ 780 è¦ã¯ãªãï¼ 781 782 æå¾ã«ï¼target_cfg1_out.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ 783 ã«ï¼offset.hãçæããä»çµã¿ãæ£ããåä½ãã¦ãããã¨ã確èªããããã®æ¬¡ 784 ã®è¨è¿°ã追å ããï¼ 660 ただし,前述した通り,kernel/kernel_def.csvに含まれている記述は, 661 target_def.csv(または,同等の役割を持つファイル)に追加する必要はない. 662 663 最後に,target_cfg1_out.h(または,そこからインクルードされるファイル) 664 に,offset.hを生成する仕組みが正しく動作していることを確認するための次 665 の記述を追加する. 785 666 786 667 ---------------------------------------- … … 790 671 ---------------------------------------- 791 672 792 2.5.2 makeoffset.cã¨genoffsetãç¨ããæ¹æ³ 793 794 makeoffset.cã¯ï¼ã©ã®ãªãã»ããå¤ãoffset.hã«çæããããæå®ãããã¡ã¤ 795 ã«ã§ï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æããï¼genoffsetã¯ï¼makeoffset.cãã³ã³ãã¤ã« 796 ãã¦å¾ãããã¢ã»ã³ããªã½ã¼ã¹ãã¡ã¤ã«ããï¼offset.hãçæããã¹ã¯ãªãã 797 ã§ããï¼genoffsetã¯ï¼GNUéçºç°å¢ã«ã®ã¿å¯¾å¿ãã¦ããï¼ 798 799 makeoffset.cãè¨è¿°ããå ´åã«ã¯ï¼æ¢åã®ã¿ã¼ã²ããä¾åé¨ã«å«ã¾ãã 800 makeoffset.cãä¿®æ£ããã®ãè¿éã§ããï¼æ¨æºçãªmakeoffset.cã¯ï¼ä»¥ä¸ã®6㤠801 ã®é¨åã§æ§æããã¦ããï¼ãªãï¼makeoffset.cãæ°ãã«è¨è¿°ããéã«ã¯ï¼ 802 offset.hã«å¦¥å½ãªå®ç¾©ãçæããã¦ãããã¨ã確èªãã¹ãã§ããï¼ 803 804 (1) å¿ 805 è¦ãªãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã 806 807 ãªãã»ããå¤ãæ±ããããã£ã¼ã«ããå«ãæ§é ä½ãå®ç¾©ããããããã¡ã¤ã«ã 808 ã¤ã³ã¯ã«ã¼ãããï¼TCBä¸ã®ãã£ã¼ã«ãã®ãªãã»ããå¤ãæ±ãããå ´åã«ã¯ï¼ä»¥ 809 ä¸ã®3è¡ãå«ããã°ããï¼ 673 2.5.2 makeoffset.cとgenoffsetを用いる方法 674 675 makeoffset.cは,どのオフセット値をoffset.hに生成するかを指定するファイ 676 ルで,ターゲット依存部で用意する.genoffsetは,makeoffset.cをコンパイル 677 して得られるアセンブリソースファイルから,offset.hを生成するスクリプト 678 である.genoffsetは,GNU開発環境にのみ対応している. 679 680 makeoffset.cを記述する場合には,既存のターゲット依存部に含まれる 681 makeoffset.cを修正するのが近道である.標準的なmakeoffset.cは,以下の6つ 682 の部分で構成されている.なお,makeoffset.cを新たに記述した際には, 683 offset.hに妥当な定義が生成されていることを確認すべきである. 684 685 (1) 必要なファイルのインクルード 686 687 オフセット値を求めたいフィールドを含む構造体を定義するヘッダファイルを 688 インクルードする.TCB中のフィールドのオフセット値を求めたい場合には,以 689 下の3行を含めればよい. 810 690 811 691 #include "kernel_impl.h" … … 813 693 #include "sil.h" 814 694 815 (2) ãªãã»ããå¤åºåç¨ãã¯ãã®å®ç¾© 816 817 æ§é ä½ä¸ã®ãã£ã¼ã«ãã®ãªãã»ããå¤ã®å®ç¾©ãçæããããã«ç¨ãããã¯ã 818 ï¼OFFSET_DEFã¨OFFSET_DEF2ï¼ã®å®ç¾©ï¼ãããã®ãã¯ãã®å®ç¾©ã¯ï¼ä¿®æ£ããå¿ 819 è¦ 820 ããªãï¼ 821 822 (3) ãªãã»ããå¤åºåç¨é¢æ°ã®å®ç¾© 823 824 æ§é ä½ä¸ã®ãã£ã¼ã«ãã®ãªãã»ããå¤ã®å®ç¾©ãçæããããã®é¢æ° 825 ï¼makeoffsetï¼ã®å®ç¾©ï¼ãªãã»ããå¤ã®ãã¯ãå®ç¾©ãçæããããã£ã¼ã«ãæ¯ 826 ã«ï¼æ¬¡ã®ããããã®ãã¯ããè¨è¿°ããï¼ 695 (2) オフセット値出力用マクロの定義 696 697 構造体中のフィールドのオフセット値の定義を生成するために用いるマクロ 698 (OFFSET_DEFとOFFSET_DEF2)の定義.これらのマクロの定義は,修正する必要 699 がない. 700 701 (3) オフセット値出力用関数の定義 702 703 構造体中のフィールドのオフセット値の定義を生成するための関数 704 (makeoffset)の定義.オフセット値のマクロ定義を生成したいフィールド毎 705 に,次のいずれかのマクロを記述する. 827 706 828 707 (2-5-2-1) OFFSET_DEF(TYPE, FIELD) 829 708 830 TYPE ã«æ§é ä½ã®ãã¼ã¿ååï¼FIELDã«ãã®æ§é ä½ä¸ã®ãã£ã¼ã«ããæå®ããã¨ï¼831 TYPE_FIELD ã¨ããååã®ã·ã³ãã«ã«ï¼ãã®ãã£ã¼ã«ãã®ãªãã»ããå¤ããã¯ã832 å®ç¾©ããè¨è¿°ãçæããï¼ 709 TYPEに構造体のデータ型名,FIELDにその構造体中のフィールドを指定すると, 710 TYPE_FIELDという名前のシンボルに,そのフィールドのオフセット値をマクロ 711 定義する記述を生成する. 833 712 834 713 (2-5-2-2) OFFSET_DEF2(TYPE, FIELD, FIELDNAME) 835 714 836 TYPEã«æ§é ä½ã®ãã¼ã¿ååï¼FIELDã«ãã®æ§é ä½ä¸ã®ãã£ã¼ã«ããæå®ããã¨ï¼ 837 TYPE_FIELDNAMEã¨ããååã®ã·ã³ãã«ã«ï¼ãã®ãã£ã¼ã«ãã®ãªãã»ããå¤ãã 838 ã¯ãå®ç¾©ããè¨è¿°ãçæããï¼æ§é ä½ã«å«ã¾ããæ§é ä½ä¸ã®ãã£ã¼ã«ãã®ãªã 839 ã»ããå¤ãæ±ãããå ´åã«ã¯ï¼ãã¡ãã®ãã¯ãã使ç¨ããï¼ 840 841 (4) ã¨ã³ãã£ã¢ã³ãåç 842 §ããããã®é¢æ°ã®å®ç¾© 843 844 SILã§å®ç¾©ãããã¨ã³ãã£ã¢ã³ãåç 845 §ããããã®é¢æ°ï¼sil_endianï¼ã®å®ç¾©ï¼ã 846 ã®é¢æ°ã®å®ç¾©ã¯ï¼ä¿®æ£ããå¿ 847 è¦ããªãï¼ 848 849 (5) ããããªãã»ããå¤åºåã®ããã®åç 850 §å®ç¾© 851 852 åæå¤ãæã£ãå¤æ°å®ç¾©ã«å¯¾ãã¦ï¼ã³ã³ãã¤ã©ãçæããã¢ã»ã³ããªå½ä»¤ãå 853 ç 854 §ããããã®å¤æ°ï¼BIT_REF_4ï¼BIT_REF_2ï¼BIT_REF_1ï¼ã®å®ç¾©ï¼ãããã®å®ç¾© 855 ã¯ï¼ã»ã¨ãã©ã®å ´åã«ä¿®æ£ããå¿ 856 è¦ããªãï¼ãã ãï¼uint8_tåã®ãµãã¼ããã 857 ã¦ããªãã¿ã¼ã²ããã§ã¯ï¼BIT_REF_1ã®å®ç¾©ã¯åé¤ããå¿ 858 è¦ãããï¼ã¾ãï¼ã㤠859 ã³ã¿ã64ãããã®ã¿ã¼ã²ããçã§ã¯ï¼BIT_REF_8ã®å®ç¾©ã追å ããªããã°ãªã㪠860 ãã¨æãããï¼ 861 862 (6) ããããªãã»ããå¤åºåç¨å¤æ°ã®å®ç¾© 863 864 ãããã®ãªãã»ããå¤ï¼ãããä½ç½®ï¼ããããã¹ã¯ã®å®ç¾©ãçæããããã®ãã¼ 865 ã¿åã®å®ç¾©ï¼ãããã®å®ç¾©ãçæãããããããã£ã¼ã«ãæ¯ã«ï¼ä»¥ä¸ã®èª¬æã 866 ãå¤æ°ãå®ç¾©ããï¼ 867 868 æ§é ä½ã®ãã¼ã¿ååãTYPEï¼ãã®æ§é ä½ä¸ã®ããããã£ã¼ã«ãåãFIELDã®å ´å 869 ã«ï¼ãã¼ã¿åãTYPEã§ï¼å¤æ°åãBIT_xy_TYPE_FIELDã®å¤æ°ãå®ç¾©ããï¼ã¾ãï¼ 870 ãã®å¤æ°ãï¼å¯¾è±¡ã®ãããã®ã¿ã1ã§ï¼ä»ã®ãã¹ã¦ã®ãããã0ã«ãªãããã«å 871 æåããï¼ããã§ï¼xã¯ã¨ã³ãã£ã¢ã³ãæå®ããæåã§ï¼Bï¼ããã°ã¨ã³ãã£ã¢ 872 ã³ï¼ã¾ãã¯Lï¼ãªãã«ã¨ã³ãã£ã¢ã³ï¼ãæå®ããï¼ã¾ãyã«ã¯ï¼ãããã®ãªãã»ã 873 ãï¼ãããä½ç½®ï¼ããããã¹ã¯ãï¼8ãããåä½ï¼ãã¤ãåä½ï¼ã§æ±ããå ´åã« 874 ã¯Bãï¼16ãããåä½ã§æ±ããå ´åã«ã¯Hãï¼32ãããåä½ã§æ±ããå ´åã«ã¯Wã 875 æå®ããï¼ 876 877 ããã«ããï¼TYPE_FIELDã¨ããååã®ã·ã³ãã«ã«ãã®ãããã®ãªãã»ããï¼ 878 TYPE_FIELD_bitã¨ããååã®ã·ã³ãã«ã«ãããä½ç½®ï¼TYPE_FIELD_maskã¨ããå 879 åã®ã·ã³ãã«ã«ããããã¹ã¯ããã¯ãå®ç¾©ããè¨è¿°ãçæããï¼ãªãï¼ããã 880 ä½ç½®ã¯ï¼LSBã0ã¨ããå¤ï¼ããããªãã«ã¨ã³ãã£ã¢ã³ãæ³å®ï¼ãæ±ããï¼ 881 882 2.6 ãªã³ã¯æ¹æ³ã®è¨å® 883 884 (2-6-1) LDSCRIPT ãªã³ã«ã¹ã¯ãªããã®ãã¡ã¤ã«å 885 886 éçºç°å¢ã«æ¨æºã®ãªã³ã«ã¹ã¯ãªããã使ç¨ã§ããªãå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾å 887 é¨ã§ãªã³ã«ã¹ã¯ãªãããç¨æãï¼ãã®ãã¡ã¤ã«åããã®å¤æ°ã«å®ç¾©ããï¼ 888 889 (2-6-2) TEXT_START_ADDRESS ããã¹ãã»ã¯ã·ã§ã³ã®å 890 é çªå° 891 (2-6-3) DATA_START_ADDRESS ãã¼ã¿ã»ã¯ã·ã§ã³ã®å 892 é çªå° 893 894 åã»ã¯ã·ã§ã³ã®å 895 é çªå°ã®æå®ãå¿ 896 è¦ãªå ´åã«ã¯ï¼ãããã®å¤æ°ã«å 897 é çªå°ã 898 å®ç¾©ããï¼ 899 900 (2-6-4) START_OBJS å 901 é ã«ãªã³ã¯ãã¹ãã¢ã¸ã¥ã¼ã«å 902 (2-6-5) END_OBJS æå¾ã«ãªã³ã¯ãã¹ãã¢ã¸ã¥ã¼ã«å 903 904 ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼ãã¼ãã¢ã¸ã¥ã¼ã«ã®å 905 é ã¨æå¾ã«ãªã³ã¯ãã¹ãã¢ã¸ã¥ã¼ 906 ã«ãï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æããå¿ 907 è¦ãããï¼å¤ãã®å ´åï¼ã¹ã¿ã¼ãã¢ãã 908 ã¢ã¸ã¥ã¼ã«ããã¼ãã¢ã¸ã¥ã¼ã«ã®å 909 é ã«ãªã³ã¯ããå¿ 910 è¦ãããï¼ 911 912 ãã¼ãã¢ã¸ã¥ã¼ã«ã®å 913 é ã«ãªã³ã¯ãã¹ãããã°ã©ã ãããå ´åã«ã¯ï¼Makefile 914 ã®ã¿ã¼ã²ããä¾åé¨ã«ããã¦ï¼ãã®ãªãã¸ã§ã¯ããã¡ã¤ã«åãSTART_OBJSã«å® 915 義ãï¼ããã«å¯¾ããã³ã³ãã¤ã«ã«ã¼ã«ã¨ä¾åé¢ä¿ä½æã«ã¼ã«ãå®ç¾©ããï¼ãã¼ 916 ãã¢ã¸ã¥ã¼ã«ã®æå¾ã«ãªã³ã¯ãã¹ãã¢ã¸ã¥ã¼ã«ãããå ´åã«ã¯ï¼ãã®ãªãã¸ã§ 917 ã¯ããã¡ã¤ã«åãEND_OBJSã«å®ç¾©ãï¼ããã«å¯¾ããã³ã³ãã¤ã«ã«ã¼ã«ã¨ä¾åé¢ 918 ä¿ä½æã«ã¼ã«ãå®ç¾©ããï¼ã¾ãï¼æ¨æºã®ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ï¼crt0.oï¼ 919 ããªã³ã¯ããªãããã«ï¼LDFLAGSã¨CFG1_OUT_LDFLAGSã«-nostdlibã追å ããå¿ 920 921 è¦ãããï¼ããã«ï¼-nostdlibãã¤ãããã¨ã§æ¨æºã©ã¤ãã©ãªããªã³ã¯ãããªã 922 ãªãããï¼LIBSã«-lgccã追å ããªããã°ãªããªãï¼ 923 924 ä¾ãã°ï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãstart.Sã®å ´åã«ã¯ï¼ 925 Makefileã®ã¿ã¼ã²ããä¾åé¨ã«æ¬¡ã®ãããªè¨è¿°ãå 926 ¥ããã¨ããï¼ 927 928 ---------------------------------------- 929 # ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ãªãã¸ã§ã¯ããã¡ã¤ã«å 715 TYPEに構造体のデータ型名,FIELDにその構造体中のフィールドを指定すると, 716 TYPE_FIELDNAMEという名前のシンボルに,そのフィールドのオフセット値をマ 717 クロ定義する記述を生成する.構造体に含まれる構造体中のフィールドのオフ 718 セット値を求めたい場合には,こちらのマクロを使用する. 719 720 (4) エンディアンを参照するための関数の定義 721 722 SILで定義されたエンディアンを参照するための関数(sil_endian)の定義.こ 723 の関数の定義は,修正する必要がない. 724 725 (5) ビットオフセット値出力のための参照定義 726 727 初期値を持った変数定義に対して,コンパイラが生成するアセンブリ命令を参 728 照するための変数(BIT_REF_4,BIT_REF_2,BIT_REF_1)の定義.これらの定義 729 は,ほとんどの場合に修正する必要がない.ただし,uint8_t型のサポートされ 730 ていないターゲットでは,BIT_REF_1の定義は削除する必要がある.また,ポイ 731 ンタが64ビットのターゲット等では,BIT_REF_8の定義を追加しなければならな 732 いと思われる. 733 734 (6) ビットオフセット値出力用変数の定義 735 736 ビットのオフセット値,ビット位置,ビットマスクの定義を生成するためのデー 737 タ型の定義.これらの定義を生成したいビットフィールド毎に,以下の説明す 738 る変数を定義する. 739 740 構造体のデータ型名がTYPE,その構造体中のビットフィールド名がFIELDの場合 741 に,データ型がTYPEで,変数名がBIT_xy_TYPE_FIELDの変数を定義する.また, 742 その変数を,対象のビットのみが1で,他のすべてのビットが0になるように初 743 期化する.ここで,xはエンディアンを指定する文字で,B(ビッグエンディア 744 ン)またはL(リトルエンディアン)を指定する.またyには,ビットのオフセッ 745 ト,ビット位置,ビットマスクを,8ビット単位(バイト単位)で求める場合に 746 はBを,16ビット単位で求める場合にはHを,32ビット単位で求める場合にはWを 747 指定する. 748 749 これにより,TYPE_FIELDという名前のシンボルにそのビットのオフセット, 750 TYPE_FIELD_bitという名前のシンボルにビット位置,TYPE_FIELD_maskという名 751 前のシンボルにビットマスクをマクロ定義する記述を生成する.なお,ビット 752 位置は,LSBを0とした値(ビットリトルエンディアンを想定)を求める. 753 754 2.6 リンク方法の設定 755 756 (2-6-1) LDSCRIPT リンカスクリプトのファイル名 757 758 開発環境に標準のリンカスクリプトが使用できない場合には,ターゲット依存 759 部でリンカスクリプトを用意し,そのファイル名をこの変数に定義する. 760 761 (2-6-2) TEXT_START_ADDRESS テキストセクションの先頭番地 762 (2-6-3) DATA_START_ADDRESS データセクションの先頭番地 763 764 各セクションの先頭番地の指定が必要な場合には,これらの変数に先頭番地を 765 定義する. 766 767 (2-6-4) START_OBJS 先頭にリンクすべきモジュール名 768 (2-6-5) END_OBJS 最後にリンクすべきモジュール名 769 770 ターゲットによっては,ロードモジュールの先頭と最後にリンクすべきモジュー 771 ルを,ターゲット依存部で用意する必要がある.多くの場合,スタートアップ 772 モジュールをロードモジュールの先頭にリンクする必要がある. 773 774 ロードモジュールの先頭にリンクすべきプログラムがある場合には,Makefile 775 のターゲット依存部において,そのオブジェクトファイル名をSTART_OBJSに定 776 義し,それに対するコンパイルルールと依存関係作成ルールを定義する.ロー 777 ドモジュールの最後にリンクすべきモジュールがある場合には,そのオブジェ 778 クトファイル名をEND_OBJSに定義し,それに対するコンパイルルールと依存関 779 係作成ルールを定義する.また,標準のスタートアップモジュール(crt0.o) 780 をリンクしないように,LDFLAGSとCFG1_OUT_LDFLAGSに-nostdlibを追加する必 781 要がある.さらに,-nostdlibをつけることで標準ライブラリがリンクされなく 782 なるため,LIBSに-lgccを追加しなければならない. 783 784 例えば,スタートアップモジュールのソースファイルがstart.Sの場合には, 785 Makefileのターゲット依存部に次のような記述を入れるとよい. 786 787 ---------------------------------------- 788 # スタートアップモジュールのオブジェクトファイル名 930 789 START_OBJS = start.o 931 790 932 # ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ã³ã³ãã¤ã«ã«ã¼ã«791 # スタートアップモジュールのコンパイルルール 933 792 $(START_OBJS): %.o: %.S 934 793 $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $< 935 794 936 # ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ä¾åé¢ä¿ä½æã«ã¼ã«795 # スタートアップモジュールの依存関係作成ルール 937 796 $(START_OBJS:.o=.d): %.d: %.S 938 797 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \ 939 798 -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend 940 799 941 # ãªã³ã«ã«å¯¾ãããªãã·ã§ã³800 # リンカに対するオプション 942 801 LDFLAGS := -nostdlib $(LDFLAGS) 943 802 CFG1_OUT_LDFLAGS := -nostdlib $(CFG1_OUT_LDFLAGS) … … 945 804 ---------------------------------------- 946 805 947 ã¾ãï¼GNUéçºç°å¢ã§ï¼ã³ã³ãã¤ã©ã«æ¨æºã®crtbegin.oã¨crtend.oãç¨ããå ´å 948 ã«ã¯ï¼Makefile ã®ã¿ã¼ã²ããä¾åé¨ã«æ¬¡ã®ãããªè¨è¿°ãå 949 ¥ããã¨ããï¼ 950 951 ---------------------------------------- 952 # ãªãã¸ã§ã¯ããã¡ã¤ã«å 806 また,GNU開発環境で,コンパイラに標準のcrtbegin.oとcrtend.oを用いる場合 807 には,Makefile のターゲット依存部に次のような記述を入れるとよい. 808 809 ---------------------------------------- 810 # オブジェクトファイル名 953 811 START_OBJS = $(shell $(CC) -print-file-name=crtbegin.o) 954 812 END_OBJS = $(shell $(CC) -print-file-name=crtend.o) 955 813 956 # ä¾åé¢ä¿ä½æã«ã¼ã«814 # 依存関係作成ルール 957 815 $(START_OBJS:.o=.d): %.d: 958 816 $(END_OBJS:.o=.d): %.d: 959 817 960 # ãªã³ã«ã«å¯¾ãããªãã·ã§ã³818 # リンカに対するオプション 961 819 LDFLAGS := -nostdlib $(LDFLAGS) 962 820 CFG1_OUT_LDFLAGS := -nostdlib $(CFG1_OUT_LDFLAGS) … … 964 822 ---------------------------------------- 965 823 966 ãã®å ´åï¼ãããã®ãã¡ã¤ã«ãã³ã³ãã¤ã«ãããã¨ã¯ãªãããï¼ã³ã³ãã¤ã«ã«ã¼ 967 ã«ã¯ä¸è¦ã§ããï¼ã¾ãï¼ä¾åé¢ä¿ä½æã«ã¼ã«ã¯ããã¼ã§ããï¼ä¾åé¢ä¿ä½æã«ã¼ 968 ã«ããªãã¨ã¨ã©ã¼ã«ãªãï¼ï¼ 969 970 (2-6-6) HIDDEN_OBJS æå®ããªãã¦ããªã³ã¯ãããã¢ã¸ã¥ã¼ã«å 971 972 ãã¼ãã¢ã¸ã¥ã¼ã«ã«ãªã³ã¯ãã¹ãã¢ã¸ã¥ã¼ã«ãï¼ãªã³ã«ã«å¯¾ãããã©ã¡ã¼ã¿ã§ 973 ã¯ãªãï¼ãªã³ã«ã¹ã¯ãªããä¸ã«ï¼ä¾ãã°ï¼GNUéçºç°å¢ã®ãªã³ã«ã¹ã¯ãªããã® 974 STARTUPã使ã£ã¦ï¼è¨è¿°ããå ´åã«ã¯ï¼ãã®ãªãã¸ã§ã¯ããã¡ã¤ã«åãï¼ 975 ï¼START_OBJSã¾ãã¯END_OBJSã§ã¯ãªãï¼HIDDEN_OBJSã«å®ç¾©ãï¼ããã«å¯¾ããã³ 976 ã³ãã¤ã«ã«ã¼ã«ã¨ä¾åé¢ä¿ä½æã«ã¼ã«ãå®ç¾©ããï¼HIDDEN_OBJSã«å®ç¾©ãã㢠977 ã¸ã¥ã¼ã«ã¯ï¼ãªã³ã«ã«å¯¾ãããã©ã¡ã¼ã¿ããã¯é¤å¤ãããï¼LDFLAGS㨠978 CFG1_OUT_LDFLAGSï¼LIBSã«ã¤ãã¦ã¯ï¼START_OBJSã¾ãã¯END_OBJSãç¨ããå ´å 979 ã¨åæ§ã§ããï¼ 980 981 ä¾ãã°ï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãstart.Sã§ï¼start.oã 982 ãªã³ã¯ãããã¨ããªã³ã«ã¹ã¯ãªããä¸ã«è¨è¿°ããå ´åã«ã¯ï¼Makefileã®ã¿ã¼ã²ã 983 ãä¾åé¨ã«æ¬¡ã®ãããªè¨è¿°ãå 984 ¥ããã¨ããï¼ 985 986 ---------------------------------------- 987 # ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ãªãã¸ã§ã¯ããã¡ã¤ã«å 824 この場合,これらのファイルをコンパイルすることはないため,コンパイルルー 825 ルは不要である.また,依存関係作成ルールはダミーでよい(依存関係作成ルー 826 ルがないとエラーになる). 827 828 (2-6-6) HIDDEN_OBJS 指定しなくてもリンクされるモジュール名 829 830 ロードモジュールにリンクすべきモジュールを,リンカに対するパラメータで 831 はなく,リンカスクリプト中に(例えば,GNU開発環境のリンカスクリプトの 832 STARTUPを使って)記述する場合には,そのオブジェクトファイル名を, 833 (START_OBJSまたはEND_OBJSではなく)HIDDEN_OBJSに定義し,それに対するコ 834 ンパイルルールと依存関係作成ルールを定義する.HIDDEN_OBJSに定義したモ 835 ジュールは,リンカに対するパラメータからは除外される.LDFLAGSと 836 CFG1_OUT_LDFLAGS,LIBSについては,START_OBJSまたはEND_OBJSを用いる場合 837 と同様である. 838 839 例えば,スタートアップモジュールのソースファイルがstart.Sで,start.oを 840 リンクすることをリンカスクリプト中に記述する場合には,Makefileのターゲッ 841 ト依存部に次のような記述を入れるとよい. 842 843 ---------------------------------------- 844 # スタートアップモジュールのオブジェクトファイル名 988 845 HIDDEN_OBJS = start.o 989 846 990 # ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ã³ã³ãã¤ã«ã«ã¼ã«847 # スタートアップモジュールのコンパイルルール 991 848 $(HIDDEN_OBJS): %.o: %.S 992 849 $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $< 993 850 994 # ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ä¾åé¢ä¿ä½æã«ã¼ã«851 # スタートアップモジュールの依存関係作成ルール 995 852 $(HIDDEN_OBJS:.o=.d): %.d: %.S 996 853 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \ 997 854 -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend 998 855 999 # ãªã³ã«ã«å¯¾ãããªãã·ã§ã³856 # リンカに対するオプション 1000 857 LDFLAGS := -nostdlib $(LDFLAGS) 1001 858 CFG1_OUT_LDFLAGS := -nostdlib $(CFG1_OUT_LDFLAGS) … … 1003 860 ---------------------------------------- 1004 861 1005 2.7 ä¾åé¢ä¿ã®å®ç¾© 1006 1007 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®åãã¹ã«å¯¾ãã¦ï¼ã¿ã¼ã²ããä¾åã®ãã¡ã¤ã«ã¸ã®ä¾åé¢ 1008 ä¿ãå®ç¾©ããï¼å 1009 ·ä½çã«ã¯ï¼ãã¹1ï¼ãã¹2ï¼ãã¹3ãä¾åãããã¡ã¤ã«ãï¼ãã 1010 ããcfg1_out.cï¼kernel_cfg.timestampï¼$(OBJFILE)ã«å¯¾ããä¾åé¢ä¿ã®å½¢ã§ 1011 è¨è¿°ããï¼ 1012 1013 ã»ã¨ãã©ã®å ´åã«ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã®Makefile.targetã«ã¯ï¼ä»¥ 1014 ä¸ã®è¨è¿°ãå«ããå¿ 1015 è¦ãããï¼ 862 2.7 依存関係の定義 863 864 コンフィギュレータの各パスに対して,ターゲット依存のファイルへの依存関 865 係を定義する.具体的には,パス1,パス2,パス3が依存するファイルを,それ 866 ぞれcfg1_out.c,kernel_cfg.timestamp,$(OBJFILE)に対する依存関係の形で 867 記述する. 868 869 ほとんどの場合に,ターゲット依存部ディレクトリのMakefile.targetには,以 870 下の記述を含める必要がある. 1016 871 1017 872 ---------------------------------------- … … 1021 876 ---------------------------------------- 1022 877 1023 2.8 ãã®ä»ã®è¨å® 1024 1025 (2-8-1) CLEAN_FILES cleanã«ããåé¤ãããã¡ã¤ã«å 1026 1027 cleanã«ããåé¤ãããã¡ã¤ã«ãã¿ã¼ã²ããä¾åé¨ã§è¿½å ãããå ´åã«ã¯ï¼ãã¡ 1028 ã¤ã«åããã®å¤æ°ã«è¿½å å®ç¾©ããï¼ 1029 1030 (2-8-2) REALCLEAN_FILES realcleanã«ããåé¤ãããã¡ã¤ã«å 1031 1032 realcleanã«ããåé¤ãããã¡ã¤ã«ãã¿ã¼ã²ããä¾åé¨ã§è¿½å ãããå ´åã«ã¯ï¼ 1033 ãã¡ã¤ã«åããã®å¤æ°ã«è¿½å å®ç¾©ããï¼ 1034 1035 1036 ï¼ï¼TOPPERSå 1037 ±éå®ç¾©ã®ã¿ã¼ã²ããä¾åé¨ 1038 1039 TOPPERSå 1040 ±éå®ç¾©ï¼t_stddef.hï¼ã®ã¿ã¼ã²ããä¾åé¨ã¯ï¼target_stddef.hã¾ã 1041 ã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ããã»ããµã»ãããã»éçºç°å¢ä¾å 1042 é¨ã§ç¨æãããããããã¡ã¤ã«ãªã©ï¼ã«å«ããï¼ 1043 1044 3.1 ã¿ã¼ã²ããèå¥ãã¯ã 1045 1046 ã¢ããªã±ã¼ã·ã§ã³ãã·ã¹ãã ãµã¼ãã¹ã§ã¿ã¼ã²ãããèå¥ããããã«ï¼ 1047 "TOPPERS_"ã«ã·ã¹ãã ç¥ç§°ã大æåã«ããæååãé£çµãããã®ï¼ä¾ãã°ï¼ 1048 "TOPPERS_DVE68K"ï¼ããã¯ãå®ç¾©ããï¼ 1049 1050 ã¾ãï¼ã¿ã¼ã²ããä¾åé¨ããããã»ããµä¾åé¨ããããä¾åé¨ãåãåããå ´ 1051 åã«ã¯ï¼"TOPPERS_"ã«ä¾åé¨ç¥ç§°ã大æåã«ããæååãé£çµãããã®ï¼ä¾ã 1052 ã°ï¼"TOPPERS_M68K"ï¼ããã¯ãå®ç¾©ããï¼ 1053 1054 3.2 æ´æ°åã®æ大å¤ã»æå°å¤ã»ãããæ° 1055 1056 (3-2-1) INT_MAX intã«æ ¼ç´ã§ããæ大å¤ï¼C90æºæ ï¼ 1057 (3-2-2) INT_MIN intã«æ ¼ç´ã§ããæå°å¤ï¼C90æºæ ï¼ 1058 (3-2-3) UINT_MAX unsigned intã«æ ¼ç´ã§ããæ大å¤ï¼C90æºæ ï¼ 1059 (3-2-4) LONG_MAX longã«æ ¼ç´ã§ããæ大å¤ï¼C90æºæ ï¼ 1060 (3-2-5) LONG_MIN longã«æ ¼ç´ã§ããæå°å¤ï¼C90æºæ ï¼ 1061 (3-2-6) ULONG_MAX unsigned longã«æ ¼ç´ã§ããæ大å¤ï¼C90æºæ ï¼ 1062 (3-2-7) CHAR_BIT charåã®ãããæ°ï¼C90æºæ ï¼ 1063 1064 æ´æ°åã®æ大å¤ã»æå°å¤ã»ãããæ°ãï¼ãããã®ã·ã³ãã«ã«ãã¯ãã«å®ç¾©ããï¼ 1065 1066 ãããã®ãã¯ãã¯ï¼C90ã«æºæ ãããã®ã§ããï¼éçºç°å¢ã«C90ã«æºæ ãã 1067 limits.hãç¨æããã¦ããå ´åã«ã¯ï¼ãããã®ãã¯ããå®ç¾©ãããã¨ã«ä»£ãã¦ï¼ 1068 limits.hãã¤ã³ã¯ã«ã¼ãããã°ããï¼ 1069 1070 3.3 ãµã¤ãºã®æå®ãããæ´æ°åï¼ãã®æ大å¤ã»æå°å¤ï¼æ´æ°å®æ°ãä½ããã¯ã 1071 1072 (3-3-1) int8_t 符å·ä»ã8ãããæ´æ°ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1073 (3-3-2) uint8_t 符å·ç¡ã8ãããæ´æ°ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1074 (3-3-3) int16_t 符å·ä»ã16ãããæ´æ°ï¼C99æºæ ï¼ 1075 (3-3-4) uint16_t 符å·ç¡ã16ãããæ´æ°ï¼C99æºæ ï¼ 1076 (3-3-5) int32_t 符å·ä»ã32ãããæ´æ°ï¼C99æºæ ï¼ 1077 (3-3-6) uint32_t 符å·ç¡ã32ãããæ´æ°ï¼C99æºæ ï¼ 1078 (3-3-7) int64_t 符å·ä»ã64ãããæ´æ°ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1079 (3-3-8) uint64_t 符å·ç¡ã64ãããæ´æ°ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1080 (3-3-9) int128_t 符å·ä»ã128ãããæ´æ°ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1081 (3-3-10) uint128_t 符å·ç¡ã128ãããæ´æ°ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1082 (3-3-11) int_least8_t 8ããã以ä¸ã®ç¬¦å·ä»ãæ´æ°ï¼C99æºæ ï¼ 1083 (3-3-12) uint_least8_t 8ããã以ä¸ã®ç¬¦å·ç¡ãæ´æ°ï¼C99æºæ ï¼ 1084 (3-3-13) intptr_t ãã¤ã³ã¿ãæ ¼ç´ã§ãããµã¤ãºã®ç¬¦å·ä»ãæ´æ°ï¼C99æºæ ï¼ 1085 (3-3-14) uintptr_t ãã¤ã³ã¿ãæ ¼ç´ã§ãããµã¤ãºã®ç¬¦å·ç¡ãæ´æ°ï¼C99æºæ ï¼ 1086 (3-3-15) INT8_MAX int8_tã«æ ¼ç´ã§ããæ大å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1087 (3-3-16) INT8_MIN int8_tã«æ ¼ç´ã§ããæå°å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1088 (3-3-17) UINT8_MAX uint8_tã«æ ¼ç´ã§ããæ大å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1089 (3-3-18) INT16_MAX int16_tã«æ ¼ç´ã§ããæ大å¤ï¼C99æºæ ï¼ 1090 (3-3-19) INT16_MIN int16_tã«æ ¼ç´ã§ããæå°å¤ï¼C99æºæ ï¼ 1091 (3-3-20) UINT16_MAX uint16_tã«æ ¼ç´ã§ããæ大å¤ï¼C99æºæ ï¼ 1092 (3-3-21) INT32_MAX int32_tã«æ ¼ç´ã§ããæ大å¤ï¼C99æºæ ï¼ 1093 (3-3-22) INT32_MIN int32_tã«æ ¼ç´ã§ããæå°å¤ï¼C99æºæ ï¼ 1094 (3-3-23) UINT32_MAX uint32_tã«æ ¼ç´ã§ããæ大å¤ï¼C99æºæ ï¼ 1095 (3-3-24) INT64_MAX int64_tã«æ ¼ç´ã§ããæ大å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1096 (3-3-25) INT64_MIN int64_tã«æ ¼ç´ã§ããæå°å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1097 (3-3-26) UINT64_MAX uint64_tã«æ ¼ç´ã§ããæ大å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1098 (3-3-27) INT128_MAX int128_tã«æ ¼ç´ã§ããæ大å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1099 (3-3-28) INT128_MIN int128_tã«æ ¼ç´ã§ããæå°å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1100 (3-3-29) UINT128_MAX uint128_tã«æ ¼ç´ã§ããæ大å¤ï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1101 (3-3-30) INT_LEAST8_MAX int_least8_tã«æ ¼ç´ã§ããæ大å¤ï¼C99æºæ ï¼ 1102 (3-3-31) INT_LEAST8_MIN int_least8_tã«æ ¼ç´ã§ããæå°å¤ï¼C99æºæ ï¼ 1103 (3-3-32) UINT_LEAST8_MAX uint_least8_tã«æ ¼ç´ã§ããæ大å¤ï¼C99æºæ ï¼ 1104 (3-3-33) INT8_C(val) int_least8_tåã®å®æ°ãä½ããã¯ãï¼C99æºæ ï¼ 1105 (3-3-34) UINT8_C(val) uint_least8_tåã®å®æ°ãä½ããã¯ãï¼C99æºæ ï¼ 1106 (3-3-35) INT16_C(val) int16_tåã®å®æ°ãä½ããã¯ãï¼C99æºæ ï¼ 1107 (3-3-36) UINT16_C(val) uint16_tåã®å®æ°ãä½ããã¯ãï¼C99æºæ ï¼ 1108 (3-3-37) INT32_C(val) int32_tåã®å®æ°ãä½ããã¯ãï¼C99æºæ ï¼ 1109 (3-3-38) UINT32_C(val) uint32_tåã®å®æ°ãä½ããã¯ãï¼C99æºæ ï¼ 1110 (3-3-39) INT64_C(val) int64_tåã®å®æ°ãä½ããã¯ãï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1111 (3-3-40) UINT64_C(val) uint64_tåã®å®æ°ãä½ããã¯ãï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1112 (3-3-41) INT128_C(val) int128_tåã®å®æ°ãä½ããã¯ãï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1113 (3-3-42) UINT128_C(val) uint128_tåã®å®æ°ãä½ããã¯ãï¼ãªãã·ã§ã³ï¼C99æºæ ï¼ 1114 1115 æå®ããããµã¤ãºã®æ´æ°åãï¼ãããã®ã·ã³ãã«ã«åå®ç¾©ããï¼ã¾ãï¼ãã¼ã¿ 1116 åã«æ ¼ç´ã§ããæ大å¤ã»æå°å¤ã¨ï¼æ´æ°å®æ°ãä½ããã¯ããï¼ãããã®ã·ã³ã 1117 ã«ã«ãã¯ãå®ç¾©ããï¼ 1118 1119 ãããã®ãã¼ã¿åããã³ãã¯ãã¯ï¼C99ã«æºæ ãããã®ã§ããï¼éçºç°å¢ã«C99 1120 ã«æºæ ããstdint.hãç¨æããã¦ããå ´åã«ã¯ï¼ãããã®ãã¼ã¿åããã³ã㯠1121 ããå®ç¾©ãããã¨ã«ä»£ãã¦ï¼stdint.hãã¤ã³ã¯ã«ã¼ãããã°ããï¼ 1122 1123 ä¸ã§ãªãã·ã§ã³ã¨è¨è¿°ãããã®ã¯ï¼è©²å½ãããã¼ã¿åãã³ã³ãã¤ã©ã§ãµãã¼ã 1124 ããã¦ããå ´åã«ã®ã¿å®ç¾©ãããã¨ã示ãï¼ 1125 1126 3.4 ãµã¤ãºã®æå®ãããæµ®åå°æ°ç¹åï¼ãã®æ大å¤ã»æå°å¤ã®ãã¯ã 1127 1128 (3-4-1) float32_t IEEE754æºæ ã®32ãããå精度浮åå°æ°ç¹æ°ï¼ãªã 1129 ã·ã§ã³ï¼ 1130 (3-4-2) double64_t IEEE754æºæ ã®64ãããå精度浮åå°æ°ç¹æ°ï¼ãªã 1131 ã·ã§ã³ï¼ 1132 (3-4-3) FLOAT32_MIN float32_tã«æ ¼ç´ã§ããæå°ã®æ£è¦åãããæ£ã®æµ® 1133 åå°æ°ç¹æ°ï¼ãªãã·ã§ã³ï¼ 1134 (3-4-4) FLOAT32_MAX float32_tã«æ ¼ç´ã§ãã表ç¾å¯è½ãªæ大ã®æéæµ®å 1135 å°æ°ç¹æ°ï¼ãªãã·ã§ã³ï¼ 1136 (3-4-5) DOUBLE64_MIN double64_tã«æ ¼ç´ã§ããæå°ã®æ£è¦åãããæ£ã®æµ® 1137 åå°æ°ç¹æ°ï¼ãªãã·ã§ã³ï¼ 1138 (3-4-6) DOUBLE64_MAX double64_tã«æ ¼ç´ã§ãã表ç¾å¯è½ãªæ大ã®æéæµ®å 1139 å°æ°ç¹æ°ï¼ãªãã·ã§ã³ï¼ 1140 1141 æå®ããããµã¤ãºã»è¡¨ç¾å½¢å¼ã®æµ®åå°æ°ç¹åãï¼ãããã®ã·ã³ãã«ã«åå®ç¾©ã 1142 ãï¼ã¾ãï¼ãã¼ã¿åã«æ ¼ç´ã§ããæ大å¤ã»æå°å¤ãï¼ãããã®ã·ã³ãã«ã«ã㯠1143 ãå®ç¾©ããï¼ 1144 1145 ããããï¼è©²å½ãããã¼ã¿åãã³ã³ãã¤ã©ã§ãµãã¼ãããã¦ããå ´åã«ã®ã¿å® 1146 義ããï¼ 1147 1148 3.5 ã³ã³ãã¤ã©ã®æ¡å¼µæ©è½ã®ããã®ãã¯ãå®ç¾© 1149 1150 ã³ã³ãã¤ã©ã®æ¡å¼µæ©è½ãç¨ããããã®ãã¯ãã¨ãã¦ï¼å¿ 1151 è¦ã«å¿ãã¦ï¼ä»¥ä¸ã®ã 1152 ã¯ãã®å®ç¾©ãå«ããï¼ 1153 1154 (3-5-1) inlineï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯æªå®ç¾©ï¼ 1155 (3-5-2) Inlineï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯static inlineï¼ 1156 1157 ã¤ã³ã©ã¤ã³é¢æ°ã§ãããã¨ã示ãæå®ï¼Inlineã¯ï¼ã³ã³ãã¤ã«åä½ã«ãã¼ã«ã« 1158 ãªã¤ã³ã©ã¤ã³é¢æ°ã§ãããã¨ã示ãï¼ 1159 1160 (3-5-3) asmï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯æªå®ç¾©ï¼ 1161 (3-5-4) Asmï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯æªå®ç¾©ï¼ 1162 1163 ã¤ã³ã©ã¤ã³ã¢ã»ã³ãã©ãè¨è¿°ããããã®æå®ï¼Asmã¯ï¼æé©åã«ããåé¤ãã¦ã¯ 1164 ãªããªããã¨ã示ãï¼ãããã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ã®ã¿ä½¿ããã¯ãã§ããã 1165 ãï¼ã¿ã¼ã²ããä¾åé¨ã§ä½¿ããªããªãå®ç¾©ããå¿ 1166 è¦ã¯ãªãï¼ 1167 1168 (3-5-5) offsetof(structure, field)ï¼ãªãã·ã§ã³ï¼ããã©ã«ãã®å®ç¾©ããï¼ 1169 1170 æ§é ä½structureã®ä¸ã§ã®ï¼ãã£ã¼ã«ãfieldã®ãªãã»ãããæ±ãããã¯ãï¼ 1171 1172 (3-5-6) alignof(type)ï¼ãªãã·ã§ã³ï¼ããã©ã«ãã®å®ç¾©ããï¼ 1173 1174 ãã¼ã¿åtypeã®ã¢ã©ã¤ã³ã¡ã³ãåä½ãæ±ãããã¯ãï¼ 1175 1176 (3-5-7) NoReturnï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯æªå®ç¾©ï¼ 1177 1178 ãªã¿ã¼ã³ãããã¨ã®ãªãé¢æ°ã§ãããã¨ã示ãæå®ï¼ããã¯ï¼ã¿ã¼ã²ããä¾å 1179 é¨ã®ã¿ä½¿ããã¯ãã§ããããï¼ã¿ã¼ã²ããä¾åé¨ã§ä½¿ããªããªãå®ç¾©ããå¿ 1180 è¦ 1181 ã¯ãªãï¼ 1182 1183 3.6 æ¨æºçãªå®ç¾©ã®ä¸æ¸ã 1184 1185 t_stddef.hã«å«ã¾ããTOPPERSå 1186 ±éå®ç¾©ã®æ¨æºçãªå®ç¾©ãä¸æ¸ãããå ´åã«ã¯ï¼ 1187 以ä¸ã®ãã¯ããå®ç¾©ããï¼ 1188 1189 (3-6-1) TOPPERS_boolï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯intï¼ 1190 (3-6-2) TOPPERS_sizeï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯uintptr_tï¼ 1191 (3-6-3) TOPPERS_fpï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯ä»ã¨äºææ§ã®ãªãé¢æ°ãã¤ã³ã¿ï¼ 1192 1193 ããããï¼bool_tï¼SIZEï¼FPã«åå®ç¾©ãã¹ããã¼ã¿åï¼ 1194 1195 (3-6-4) UINT_C(val)ï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯Uãä»å ï¼ 1196 (3-6-5) ULONG_C(val)ï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯ULãä»å ï¼ 1197 1198 ããããï¼unsigned uintåï¼unsigned longåã®å®æ°ãä½ãããã®ãã¯ãï¼ 1199 1200 (3-6-6) NULLï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯0ï¼ 1201 1202 C90æºæ ã®Cè¨èªç°å¢ã§ã¯ï¼NULLã®å®ç¾©ã¯stddef.hã«å«ã¾ãã¦ããããï¼ããã 1203 ã¤ã³ã¯ã«ã¼ããã¦ãããï¼ 1204 1205 (3-6-7) ERCD(mercd, sercd)ï¼ãªãã·ã§ã³ï¼ 1206 (3-6-8) MERCD(ercd)ï¼ãªãã·ã§ã³ï¼ 1207 (3-6-9) SERCD(ercd)ï¼ãªãã·ã§ã³ï¼ 1208 1209 ERCDï¼MERCDï¼SERCDã®æ¨æºã®å®ç¾©ã¯ï¼ç¬¦å·ä»ãæ´æ°ã2ã®è£æ°ã§è¡¨ç¾ããã¦ããï¼ 1210 å³ã·ããæ¼ç®åï¼>>ï¼ãç®è¡ã·ããããããã¨ãä»®å®ãã¦ããï¼å¤ãã®ã³ã³ã 1211 ã¤ã©ã§ãã®ä»®å®ãæãç«ã¤ãï¼ããã§ãªãå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ãã 1212 ãã®å®ç¾©ãä¸æ¸ãããå¿ 1213 è¦ãããï¼ 1214 1215 (3-6-10) ALIGN_TYPE(addr, type)ï¼ãªãã·ã§ã³ï¼ 1216 1217 ã¢ãã¬ã¹addrãï¼ãã¼ã¿åtypeã®ã¢ã©ã¤ã³ã¡ã³ãåä½ã«ã¢ã©ã¤ã³ãã¦ããã 1218 ãã§ãã¯ãããã¯ãï¼ 1219 1220 3.7 ã¢ãµã¼ã·ã§ã³ã®ããã®å®ç¾© 1221 1222 t_stddef.hã«ã¯ï¼assertã®å®ç¾©ãå«ã¾ããï¼assertã失æããå ´åï¼assertã® 1223 ãã©ã¡ã¼ã¿ãfalseã«ãªã£ãå ´åï¼ã®å¦çãï¼ã¿ã¼ã²ããä¾åã«ç¨æããå¿ 1224 è¦ã 1225 ããï¼ãããã®å®ç¾©ã¯ï¼assertãã¯ãã使ç¨ããåã§ããã°ï¼t_stddef.h以é 1226 ã«ã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ã«å«ã¾ãã¦ãã¦ãããï¼ãªãï¼assertãç¡å¹ã« 1227 ããï¼NDEBUGããã¯ãå®ç¾©ãã¦ã³ã³ãã¤ã«ããï¼å ´åã«ã¯ï¼ããããç¨æãã 1228 å¿ 1229 è¦ã¯ãªãï¼ 878 2.8 その他の設定 879 880 (2-8-1) CLEAN_FILES cleanにより削除するファイル名 881 882 cleanにより削除するファイルをターゲット依存部で追加したい場合には,ファ 883 イル名をこの変数に追加定義する. 884 885 (2-8-2) REALCLEAN_FILES realcleanにより削除するファイル名 886 887 realcleanにより削除するファイルをターゲット依存部で追加したい場合には, 888 ファイル名をこの変数に追加定義する. 889 890 891 3.TOPPERS共通定義のターゲット依存部 892 893 TOPPERS共通定義(t_stddef.h)のターゲット依存部は,target_stddef.hまた 894 はそこからインクルードされるファイル(プロセッサ・チップ・開発環境依存 895 部で用意されるヘッダファイルなど)に含める. 896 897 3.1 ターゲット識別マクロ 898 899 アプリケーションやシステムサービスでターゲットを識別するために, 900 "TOPPERS_"にシステム略称を大文字にした文字列を連結したもの(例えば, 901 "TOPPERS_DVE68K")をマクロ定義する. 902 903 また,ターゲット依存部からプロセッサ依存部やチップ依存部を切り分けた場 904 合には,"TOPPERS_"に依存部略称を大文字にした文字列を連結したもの(例え 905 ば,"TOPPERS_M68K")をマクロ定義する. 906 907 3.2 整数型の最大値・最小値・ビット数 908 909 (3-2-1) INT_MAX intに格納できる最大値(C90準拠) 910 (3-2-2) INT_MIN intに格納できる最小値(C90準拠) 911 (3-2-3) UINT_MAX unsigned intに格納できる最大値(C90準拠) 912 (3-2-4) LONG_MAX longに格納できる最大値(C90準拠) 913 (3-2-5) LONG_MIN longに格納できる最小値(C90準拠) 914 (3-2-6) ULONG_MAX unsigned longに格納できる最大値(C90準拠) 915 (3-2-7) CHAR_BIT char型のビット数(C90準拠) 916 917 整数型の最大値・最小値・ビット数を,これらのシンボルにマクロに定義する. 918 919 これらのマクロは,C90に準拠したものである.開発環境にC90に準拠した 920 limits.hが用意されている場合には,これらのマクロを定義することに代えて, 921 limits.hをインクルードすればよい. 922 923 3.3 サイズの指定された整数型,その最大値・最小値,整数定数を作るマクロ 924 925 (3-3-1) int8_t 符号付き8ビット整数(オプション,C99準拠) 926 (3-3-2) uint8_t 符号無し8ビット整数(オプション,C99準拠) 927 (3-3-3) int16_t 符号付き16ビット整数(C99準拠) 928 (3-3-4) uint16_t 符号無し16ビット整数(C99準拠) 929 (3-3-5) int32_t 符号付き32ビット整数(C99準拠) 930 (3-3-6) uint32_t 符号無し32ビット整数(C99準拠) 931 (3-3-7) int64_t 符号付き64ビット整数(オプション,C99準拠) 932 (3-3-8) uint64_t 符号無し64ビット整数(オプション,C99準拠) 933 (3-3-9) int128_t 符号付き128ビット整数(オプション,C99準拠) 934 (3-3-10) uint128_t 符号無し128ビット整数(オプション,C99準拠) 935 (3-3-11) int_least8_t 8ビット以上の符号付き整数(C99準拠) 936 (3-3-12) uint_least8_t 8ビット以上の符号無し整数(C99準拠) 937 (3-3-13) intptr_t ポインタを格納できるサイズの符号付き整数(C99準拠) 938 (3-3-14) uintptr_t ポインタを格納できるサイズの符号無し整数(C99準拠) 939 (3-3-15) INT8_MAX int8_tに格納できる最大値(オプション,C99準拠) 940 (3-3-16) INT8_MIN int8_tに格納できる最小値(オプション,C99準拠) 941 (3-3-17) UINT8_MAX uint8_tに格納できる最大値(オプション,C99準拠) 942 (3-3-18) INT16_MAX int16_tに格納できる最大値(C99準拠) 943 (3-3-19) INT16_MIN int16_tに格納できる最小値(C99準拠) 944 (3-3-20) UINT16_MAX uint16_tに格納できる最大値(C99準拠) 945 (3-3-21) INT32_MAX int32_tに格納できる最大値(C99準拠) 946 (3-3-22) INT32_MIN int32_tに格納できる最小値(C99準拠) 947 (3-3-23) UINT32_MAX uint32_tに格納できる最大値(C99準拠) 948 (3-3-24) INT64_MAX int64_tに格納できる最大値(オプション,C99準拠) 949 (3-3-25) INT64_MIN int64_tに格納できる最小値(オプション,C99準拠) 950 (3-3-26) UINT64_MAX uint64_tに格納できる最大値(オプション,C99準拠) 951 (3-3-27) INT128_MAX int128_tに格納できる最大値(オプション,C99準拠) 952 (3-3-28) INT128_MIN int128_tに格納できる最小値(オプション,C99準拠) 953 (3-3-29) UINT128_MAX uint128_tに格納できる最大値(オプション,C99準拠) 954 (3-3-30) INT_LEAST8_MAX int_least8_tに格納できる最大値(C99準拠) 955 (3-3-31) INT_LEAST8_MIN int_least8_tに格納できる最小値(C99準拠) 956 (3-3-32) UINT_LEAST8_MAX uint_least8_tに格納できる最大値(C99準拠) 957 (3-3-33) INT8_C(val) int_least8_t型の定数を作るマクロ(C99準拠) 958 (3-3-34) UINT8_C(val) uint_least8_t型の定数を作るマクロ(C99準拠) 959 (3-3-35) INT16_C(val) int16_t型の定数を作るマクロ(C99準拠) 960 (3-3-36) UINT16_C(val) uint16_t型の定数を作るマクロ(C99準拠) 961 (3-3-37) INT32_C(val) int32_t型の定数を作るマクロ(C99準拠) 962 (3-3-38) UINT32_C(val) uint32_t型の定数を作るマクロ(C99準拠) 963 (3-3-39) INT64_C(val) int64_t型の定数を作るマクロ(オプション,C99準拠) 964 (3-3-40) UINT64_C(val) uint64_t型の定数を作るマクロ(オプション,C99準拠) 965 (3-3-41) INT128_C(val) int128_t型の定数を作るマクロ(オプション,C99準拠) 966 (3-3-42) UINT128_C(val) uint128_t型の定数を作るマクロ(オプション,C99準拠) 967 968 指定されたサイズの整数型を,これらのシンボルに型定義する.また,データ 969 型に格納できる最大値・最小値と,整数定数を作るマクロを,これらのシンボ 970 ルにマクロ定義する. 971 972 これらのデータ型およびマクロは,C99に準拠したものである.開発環境にC99 973 に準拠したstdint.hが用意されている場合には,これらのデータ型およびマク 974 ロを定義することに代えて,stdint.hをインクルードすればよい. 975 976 上でオプションと記述したものは,該当するデータ型がコンパイラでサポート 977 されている場合にのみ定義することを示す. 978 979 3.4 サイズの指定された浮動小数点型,その最大値・最小値のマクロ 980 981 (3-4-1) float32_t IEEE754準拠の32ビット単精度浮動小数点数(オプ 982 ション) 983 (3-4-2) double64_t IEEE754準拠の64ビット倍精度浮動小数点数(オプ 984 ション) 985 (3-4-3) FLOAT32_MIN float32_tに格納できる最小の正規化された正の浮 986 動小数点数(オプション) 987 (3-4-4) FLOAT32_MAX float32_tに格納できる表現可能な最大の有限浮動 988 小数点数(オプション) 989 (3-4-5) DOUBLE64_MIN double64_tに格納できる最小の正規化された正の浮 990 動小数点数(オプション) 991 (3-4-6) DOUBLE64_MAX double64_tに格納できる表現可能な最大の有限浮動 992 小数点数(オプション) 993 994 指定されたサイズ・表現形式の浮動小数点型を,これらのシンボルに型定義す 995 る.また,データ型に格納できる最大値・最小値を,これらのシンボルにマク 996 ロ定義する. 997 998 いずれも,該当するデータ型がコンパイラでサポートされている場合にのみ定 999 義する. 1000 1001 3.5 コンパイラの拡張機能のためのマクロ定義 1002 1003 コンパイラの拡張機能を用いるためのマクロとして,必要に応じて,以下のマ 1004 クロの定義を含める. 1005 1006 (3-5-1) inline(オプション,デフォルトは未定義) 1007 (3-5-2) Inline(オプション,デフォルトはstatic inline) 1008 1009 インライン関数であることを示す指定.Inlineは,コンパイル単位にローカル 1010 なインライン関数であることを示す. 1011 1012 (3-5-3) asm(オプション,デフォルトは未定義) 1013 (3-5-4) Asm(オプション,デフォルトは未定義) 1014 1015 インラインアセンブラを記述するための指定.Asmは,最適化により削除しては 1016 ならないことを示す.これらは,ターゲット依存部でのみ使うマクロであるた 1017 め,ターゲット依存部で使わないなら定義する必要はない. 1018 1019 (3-5-5) offsetof(structure, field)(オプション,デフォルトの定義あり) 1020 1021 構造体structureの中での,フィールドfieldのオフセットを求めるマクロ. 1022 1023 (3-5-6) alignof(type)(オプション,デフォルトの定義あり) 1024 1025 データ型typeのアラインメント単位を求めるマクロ. 1026 1027 (3-5-7) NoReturn(オプション,デフォルトは未定義) 1028 1029 リターンすることのない関数であることを示す指定.これは,ターゲット依存 1030 部のみ使うマクロであるため,ターゲット依存部で使わないなら定義する必要 1031 はない. 1032 1033 3.6 標準的な定義の上書き 1034 1035 t_stddef.hに含まれるTOPPERS共通定義の標準的な定義を上書きする場合には, 1036 以下のマクロを定義する. 1037 1038 (3-6-1) TOPPERS_bool(オプション,デフォルトはint) 1039 (3-6-2) TOPPERS_size(オプション,デフォルトはuintptr_t) 1040 (3-6-3) TOPPERS_fp(オプション,デフォルトは他と互換性のない関数ポインタ) 1041 1042 それぞれ,bool_t,SIZE,FPに型定義すべきデータ型. 1043 1044 (3-6-4) UINT_C(val)(オプション,デフォルトはUを付加) 1045 (3-6-5) ULONG_C(val)(オプション,デフォルトはULを付加) 1046 1047 それぞれ,unsigned uint型,unsigned long型の定数を作るためのマクロ. 1048 1049 (3-6-6) NULL(オプション,デフォルトは0) 1050 1051 C90準拠のC言語環境では,NULLの定義はstddef.hに含まれているため,これを 1052 インクルードしてもよい. 1053 1054 (3-6-7) ERCD(mercd, sercd)(オプション) 1055 (3-6-8) MERCD(ercd)(オプション) 1056 (3-6-9) SERCD(ercd)(オプション) 1057 1058 ERCD,MERCD,SERCDの標準の定義は,符号付き整数が2の補数で表現されており, 1059 右シフト演算子(>>)が算術シフトされることを仮定している.多くのコンパ 1060 イラでこの仮定が成り立つが,そうでない場合には,ターゲット依存部でこれ 1061 らの定義を上書きする必要がある. 1062 1063 (3-6-10) ALIGN_TYPE(addr, type)(オプション) 1064 1065 アドレスaddrが,データ型typeのアラインメント単位にアラインしているか 1066 チェックするマクロ. 1067 1068 3.7 アサーションのための定義 1069 1070 t_stddef.hには,assertの定義が含まれる.assertが失敗した場合(assertの 1071 パラメータがfalseになった場合)の処理を,ターゲット依存に用意する必要が 1072 ある.これらの定義は,assertマクロを使用する前であれば,t_stddef.h以降 1073 にインクルードされるファイルに含まれていてもよい.なお,assertを無効に 1074 する(NDEBUGをマクロ定義してコンパイルする)場合には,これらを用意する 1075 必要はない. 1230 1076 1231 1077 (3-7-1) TOPPERS_assert_abort(void) 1232 1078 1233 assert ã失æããå ´åã«ï¼ããã°ã©ã ãåæ¢ãããé¢æ°ï¼ã·ã¹ãã éçºä¸ã¯ã1234 ããã¬ã«è½ã¨ãã®ãçæ³çã§ããï¼ã·ã¹ãã 稼åæã«ã¯ä¾å¤å¦çãè¡ãããã 1235 ã¨ã«ãªãï¼ 1079 assertが失敗した場合に,プログラムを停止させる関数.システム開発中はデ 1080 バッガに落とすのが理想的である.システム稼働時には例外処理を行わせるこ 1081 とになる. 1236 1082 1237 1083 (3-7-2) TOPPERS_assert_fail(exp, file, line) 1238 1084 1239 assertã失æããæã®æ 1240 å ±ã表示/è¨é²ããããã®ãã¯ãï¼ã·ã¹ãã ãã°æ©è½ã 1241 ç¨ããå ´åã«ã¯ï¼t_syslog.hã«ã·ã¹ãã ãã°æ©è½ã«è¨é²ããããã®å®ç¾©ãå«ã¾ 1242 ãã¦ããã®ã§ï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æããå¿ 1243 è¦ã¯ãªãï¼ 1244 1245 1246 ï¼ï¼ã·ã¹ãã ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ã¤ï¼SILï¼ã®ã¿ã¼ã²ããä¾åé¨ 1247 1248 ã·ã¹ãã ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ã¤ï¼SILï¼sil.hï¼ã®ã¿ã¼ã²ããä¾åé¨ã®å®ç¾©ã¯ï¼ 1249 target_sil.hã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ããã»ããµã»ãã 1250 ãã»éçºç°å¢ä¾åé¨ã§ç¨æãããããããã¡ã¤ã«ãªã©ï¼ã«å«ããï¼ 1251 1252 SILã®ãµã¼ãã¹ã³ã¼ã«ã¯ï¼ä»»æã®ã·ã¹ãã ç¶æ 1253 ã§å¼ã³åºããã¨ãã§ããï¼ãã®ã 1254 ãï¼SILã®ã¿ã¼ã²ããä¾åé¨ã®é¢æ°ã¯ï¼ä»»æã®ã·ã¹ãã ç¶æ 1255 ã§å¼ã³åºããããã« 1256 å®è£ 1257 ããªããã°ãªããªãï¼ 1258 1259 4.1 å 1260 ¨å²è¾¼ã¿ããã¯ç¶æ 1261 ã®ç®¡ç 1262 1263 SILã®ã¿ã¼ã²ããä¾åé¨ã§ã¯ï¼å 1264 ¨å²è¾¼ã¿ããã¯ç¶æ 1265 ã¸é·ç§»ããæ©è½ã¨ï¼å 1266 ã®ç¶æ 1267 1268 ã¸æ»ãæ©è½ï¼å 1269 ã®ç¶æ 1270 ãè¨æ¶ããããã«å¤æ°ã使ãï¼ãæä¾ããï¼å 1271 ¨å²è¾¼ã¿ãã 1272 ã¯ç¶æ 1273 ã§ããããå¤å¥ããæ©è½ã¯æä¾ããå¿ 1274 è¦ããªãï¼ 1275 1276 SILã®æ©è½ã¯ï¼ã«ã¼ãã«ã使ç¨ããªãå ´åã«ã使ç¨ã§ããå¿ 1277 è¦ãããï¼ãã®ããï¼ 1278 å 1279 ¨å²è¾¼ã¿ããã¯ç¶æ 1280 ã¸ã®é·ç§»ã¨å 1281 ã®ç¶æ 1282 ã¸ã®å¾©å¸°ã¯ï¼ã«ã¼ãã«ãç¨ããï¼ãã 1283 ã»ããµã®ãªã½ã¼ã¹ãç´æ¥æä½ãããã¨ã«ãã£ã¦å®ç¾ããï¼ã¾ãï¼å 1284 ¨å²è¾¼ã¿ãã 1285 ã¯ç¶æ 1286 ã¸ã®é·ç§»ã¨å 1287 ã®ç¶æ 1288 ã¸ã®å¾©å¸°ã¯ï¼å 1289 ¨å²è¾¼ã¿ããã¯ç¶æ 1290 ãCPUããã¯ç¶æ 1291 㧠1292 ãè¡ããå¿ 1293 è¦ãããï¼ 1294 1295 ä¿è·æ©è½ãæã£ãã«ã¼ãã«ã§ã¯ï¼ã¦ã¼ã¶ã¿ã¹ã¯ããããã»ããµã®ãªã½ã¼ã¹ãç´ 1296 æ¥æä½ãããã¨ãã§ããªãããï¼ã¦ã¼ã¶ã¿ã¹ã¯ããã¯ãããã®æ©è½ãç¨ããã 1297 ã¨ãã§ããªãï¼ç¨ããå ´åã®æ¯èãã¯ã¿ã¼ã²ããããã»ããµã«ä¾åãããï¼å 1298 ¸ 1299 åçã«ã¯ï¼ç¹æ¨©å½ä»¤éåãªã©ã®CPUä¾å¤ãçºçãããã¨ã«ãªãï¼ 1085 assertが失敗した時の情報を表示/記録するためのマクロ.システムログ機能を 1086 用いる場合には,t_syslog.hにシステムログ機能に記録するための定義が含ま 1087 れているので,ターゲット依存部で用意する必要はない. 1088 1089 1090 4.システムインタフェースレイヤ(SIL)のターゲット依存部 1091 1092 システムインタフェースレイヤ(SIL,sil.h)のターゲット依存部の定義は, 1093 target_sil.hまたはそこからインクルードされるファイル(プロセッサ・チッ 1094 プ・開発環境依存部で用意されるヘッダファイルなど)に含める. 1095 1096 SILのサービスコールは,任意のシステム状態で呼び出すことができる.そのた 1097 め,SILのターゲット依存部の関数は,任意のシステム状態で呼び出せるように 1098 実装しなければならない. 1099 1100 4.1 全割込みロック状態の管理 1101 1102 SILのターゲット依存部では,全割込みロック状態へ遷移する機能と,元の状態 1103 へ戻す機能(元の状態を記憶するために変数を使う)を提供する.全割込みロッ 1104 ク状態であるかを判別する機能は提供する必要がない. 1105 1106 SILの機能は,カーネルを使用しない場合にも使用できる必要がある.そのため, 1107 全割込みロック状態への遷移と元の状態への復帰は,カーネルを用いず,プロ 1108 セッサのリソースを直接操作することによって実現する.また,全割込みロッ 1109 ク状態への遷移と元の状態への復帰は,全割込みロック状態やCPUロック状態で 1110 も行える必要がある. 1111 1112 保護機能を持ったカーネルでは,ユーザタスクからプロセッサのリソースを直 1113 接操作することができないため,ユーザタスクからはこれらの機能を用いるこ 1114 とができない.用いた場合の振舞いはターゲットプロセッサに依存するが,典 1115 型的には,特権命令違反などのCPU例外が発生することになる. 1300 1116 1301 1117 (4-1-1) SIL_PRE_LOC 1302 1118 1303 å 1304 ¨å²è¾¼ã¿ããã¯ãã©ã°ã®ç¶æ 1305 ãä¿åããããã®å¤æ°ãå®ç¾©ãããã¯ãï¼ååã® 1306 å¾ã«ï¼å¤æ°åãç¶ãããã®ã«å®ç¾©ããï¼å¤æ°åã¯ï¼ä»ã®ååã¨è¡çªããªããã 1307 ã«ï¼"TOPPERS_"ã§å§ã¾ãååã«ããï¼ 1119 全割込みロックフラグの状態を保存するための変数を定義するマクロ.型名の 1120 後に,変数名を続けたものに定義する.変数名は,他の名前と衝突しないよう 1121 に,"TOPPERS_"で始まる名前にする. 1308 1122 1309 1123 (4-1-2) SIL_LOC_INT() 1310 1124 1311 ç¾å¨ã®å 1312 ¨å²è¾¼ã¿ããã¯ãã©ã°ã®ç¶æ 1313 ãSIL_PRE_LOCã§å®ç¾©ããå¤æ°ã«ä¿åãï¼å 1314 ¨ 1315 å²è¾¼ã¿ããã¯ç¶æ 1316 ã«é·ç§»ããããã¯ãï¼ãã®ãã¯ããå®ç¾ããéã«ã¯ï¼ã1.6 1317 ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1318 ¥å¦çã®å®ç¾ã«é¢ããå¶ç´ãã®ç¯ã«è¨è¿°ããã¦ã 1319 ãå¶ç´ã«å¾ããªããã°ãªããªãï¼ 1125 現在の全割込みロックフラグの状態をSIL_PRE_LOCで定義した変数に保存し,全 1126 割込みロック状態に遷移させるマクロ.このマクロを実現する際には,「1.6 1127 クリティカルセクションの出入処理の実現に関する制約」の節に記述されてい 1128 る制約に従わなければならない. 1320 1129 1321 1130 (4-1-3) SIL_UNL_INT() 1322 1131 1323 SIL_LOC_INT()ã«ãã£ã¦å¤æ°ã«ä¿åããç¶æ 1324 ã«æ»ããã¯ãï¼ãã®ãã¯ããå®ç¾ã 1325 ãéã«ã¯ï¼ã1.6 ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1326 ¥å¦çã®å®ç¾ã«é¢ããå¶ç´ãã® 1327 ç¯ã«è¨è¿°ããã¦ããå¶ç´ã«å¾ããªããã°ãªããªãï¼ 1328 1329 4.2 å¾®å°æéå¾ 1330 ã¡ 1132 SIL_LOC_INT()によって変数に保存した状態に戻すマクロ.このマクロを実現す 1133 る際には,「1.6 クリティカルセクションの出入処理の実現に関する制約」の 1134 節に記述されている制約に従わなければならない. 1135 1136 4.2 微少時間待ち 1331 1137 1332 1138 (4-2-1) void sil_dly_nse(ulong_t dlytim) 1333 1139 1334 dlytimã§æå®ããã以ä¸ã®æéï¼åä½ã¯ããç§ï¼ï¼ã«ã¼ããªã©ã«ãã£ã¦å¾ 1335 ã¤é¢ 1336 æ°ï¼ 1337 1338 以ä¸ã®é¢æ°ã¨ç価ãªå¦çãï¼ã¢ã»ã³ããªè¨èªã§è¨è¿°ããæ¹æ³ãï¼æ¨æºçãªå®è£ 1339 1340 æ¹æ³ã¨ããï¼ã¢ã»ã³ããªè¨èªã§è¨è¿°ããã®ã¯ï¼ã³ã³ãã¤ã©ã®æé©åã«ä¾åã㪠1341 ãããã«ããããã§ããï¼ã¾ããã®é¢æ°ã¯ï¼ãã£ãã·ã¥çã®å½±é¿ãåããªãã 1342 ãã«ï¼ã§ããéãã¡ã¢ãªã¢ã¯ã»ã¹ãè¡ããªãããã«å®è£ 1343 ãã¹ãã§ããï¼ 1140 dlytimで指定された以上の時間(単位はナノ秒),ループなどによって待つ関 1141 数. 1142 1143 以下の関数と等価な処理を,アセンブリ言語で記述する方法を,標準的な実装 1144 方法とする.アセンブリ言語で記述するのは,コンパイラの最適化に依存しな 1145 いようにするためである.またこの関数は,キャッシュ等の影響を受けないよ 1146 うに,できる限りメモリアクセスを行わないように実装すべきである. 1344 1147 1345 1148 void sil_dly_nse(ulong_t dlytim) 1346 1149 { 1347 1150 dlytim -= SIL_DLY_TIM1; 1348 if ( çµæã0ãã大ãã) {1151 if (結果が0より大きい) { 1349 1152 do { 1350 1153 dlytim -= SIL_DLY_TIM2; 1351 } while ( çµæã0ãã大ãã);1154 } while (結果が0より大きい); 1352 1155 } 1353 1156 } 1354 1157 1355 ãã®é¢æ°ã®åä½ã¯æ¬¡ã®éãã§ããï¼dlytimãSIL_DLY_TIM1以ä¸ã®å ´åã«ã¯ï¼æ 1356 åã®ifæã®æ¡ä»¶ãæç«ããï¼ããã«é¢æ°ããæããï¼dlytimãSIL_DLY_TIM1ã 1357 ã大ããï¼(SIL_DLY_TIM1+SIL_DLY_TIM2)以ä¸ã®å ´åã«ã¯ï¼æåã®ifæã®æ¡ä»¶ã¯ 1358 æç«ãããï¼doã«ã¼ãã¯1åãåããã«é¢æ°ããæããï¼dlytimã 1359 (SIL_DLY_TIM1+SIL_DLY_TIM2)ãã大ããï¼(SIL_DLY_TIM1+SIL_DLY_TIM2*2)以 1360 ä¸ã®å ´åã«ã¯ï¼doã«ã¼ãã1åã ãåã£ã¦é¢æ°ããæããï¼ãã®å¾ï¼dlytimã 1361 SIL_DLY_TIM2大ãããªã度ã«ï¼whileã«ã¼ããåãåæ°ã1åãã¤å¢ããï¼ 1362 1363 ãªãï¼ãã®é¢æ°ãã¢ã»ã³ããªè¨èªï¼ã¾ãã¯ï¼Cè¨èªï¼ã§è¨è¿°ããå ´åï¼ã©ã®ãã¡ 1364 ã¤ã«ã«è¨è¿°ããããåé¡ã«ãªãï¼SILã®ã¿ã¼ã²ããä¾åé¨ã«ã¯ï¼æ¨æºã§ã¯ï¼ã¢ã» 1365 ã³ããªè¨èªï¼ã¾ãã¯ï¼Cè¨èªï¼ã®é¢æ°å®ç¾©ãè¨è¿°ããããã®ãã¡ã¤ã«ãç¨æã㦠1366 ããªãï¼ã¿ã¼ã²ããä¾åã§ç¨æãã¦ããããï¼ä¾å¤çã«ï¼ã«ã¼ãã«å®è£ 1367 ã®ã¿ã¼ 1368 ã²ããä¾åã¢ã¸ã¥ã¼ã«ï¼target_support.Sã¾ãã¯target_config.cï¼ã«è¨è¿°ã㦠1369 ããããã¨ã«ããï¼ 1370 1371 (4-2-2) SIL_DLY_TIM1ï¼ãªãã·ã§ã³ï¼ 1372 (4-2-3) SIL_DLY_TIM2ï¼ãªãã·ã§ã³ï¼ 1373 1374 sil_dly_nseãä¸è¨ã®æ¨æºçãªæ¹æ³ã§å®ç¾ããå ´åï¼ãã®2ã¤ã®å®æ°ãã¿ã¼ã²ã 1375 ãä¾åé¨ã§ãã¯ãå®ç¾©ããï¼ 1376 1377 SIL_DLY_TIM2ã¯ï¼ä¸è¨ã®é¢æ°ã«ããã¦ï¼doã«ã¼ã1åã®å®è¡æéï¼åä½ã¯ããç§ï¼ 1378 ã«è¨å®ããï¼ã¿ã¼ã²ããããã»ããµã®å½ä»¤ã»ããã«ããããï¼ããããï¼æ¸ç® 1379 å½ä»¤ã¨æ¡ä»¶åå²å½ä»¤å1åã®å®è¡æéã«ãªãï¼SIL_DLY_TIM2ã決ã¾ãã°ï¼é¢æ°å¼ 1380 åºããå«ããå 1381 ¨ä½ã®æéãdlytimã§æå®ããã以ä¸ã®æéã«ãªãããã«ï¼ 1382 SIL_DLY_TIM1ã決ããï¼ 1383 1384 ãã®2ã¤ã®å®æ°å¤ã®æ±ºå®ãæ¯æ´ããããã°ã©ã ã¨ãã¦ï¼testãã£ã¬ã¯ããªã«ï¼ 1385 test_dlynseãç¨æãã¦ããï¼test_dlynseãå®è¡ããã¨ï¼æ¬¡ã®ãããªåºåãå¾ 1386 ãããï¼ 1158 この関数の動作は次の通りである.dlytimがSIL_DLY_TIM1以下の場合には,最 1159 初のif文の条件が成立せず,すぐに関数から抜ける.dlytimがSIL_DLY_TIM1よ 1160 り大きく,(SIL_DLY_TIM1+SIL_DLY_TIM2)以下の場合には,最初のif文の条件は 1161 成立するが,doループは1回も回らずに関数から抜ける.dlytimが 1162 (SIL_DLY_TIM1+SIL_DLY_TIM2)より大きく,(SIL_DLY_TIM1+SIL_DLY_TIM2*2)以 1163 下の場合には,doループを1回だけ回って関数から抜ける.その後,dlytimが 1164 SIL_DLY_TIM2大きくなる度に,whileループを回る回数が1回ずつ増える. 1165 1166 なお,この関数をアセンブリ言語(または,C言語)で記述する場合,どのファ 1167 イルに記述するかが問題になる.SILのターゲット依存部には,標準では,アセ 1168 ンブリ言語(または,C言語)の関数定義を記述するためのファイルを用意して 1169 いない.ターゲット依存で用意してもよいが,例外的に,カーネル実装のター 1170 ゲット依存モジュール(target_support.Sまたはtarget_config.c)に記述して 1171 もよいことにする. 1172 1173 (4-2-2) SIL_DLY_TIM1(オプション) 1174 (4-2-3) SIL_DLY_TIM2(オプション) 1175 1176 sil_dly_nseを上記の標準的な方法で実現した場合,この2つの定数をターゲッ 1177 ト依存部でマクロ定義する. 1178 1179 SIL_DLY_TIM2は,上記の関数において,doループ1回の実行時間(単位はナノ秒) 1180 に設定する.ターゲットプロセッサの命令セットにもよるが,おおよそ,減算 1181 命令と条件分岐命令各1回の実行時間になる.SIL_DLY_TIM2が決まれば,関数呼 1182 出しも含めた全体の時間がdlytimで指定された以上の時間になるように, 1183 SIL_DLY_TIM1を決める. 1184 1185 この2つの定数値の決定を支援するプログラムとして,testディレクトリに, 1186 test_dlynseを用意している.test_dlynseを実行すると,次のような出力が得 1187 られる. 1387 1188 1388 1189 -- for fitting parameters -- … … 1391 1192 sil_dly_nse(510): 520 OK 1392 1193 sil_dly_nse(600): 610 OK 1393 < ä¸ç¥>1194 <中略> 1394 1195 -- for checking boundary conditions -- 1395 1196 sil_dly_nse(421): 520 OK … … 1397 1198 sil_dly_nse(601): 700 OK 1398 1199 1399 "for fitting parameters"ã«ç¶ãåºåã¯ï¼sil_dly_nse(dlytim)ãå¼ã³åºããå ´ 1400 åã®å¾ 1401 ã¡æéã測å®ããçµæã§ããï¼ãã®ããã°ã©ã ãç¨ãã¦ï¼":"ã®å³å´ã®æ° 1402 å¤ãï¼dlytimããã大ããç¯å²ã§ãªãã¹ãè¿ãå¤ã«ãªãããã«ï¼2ã¤ã®å®æ°å¤ã 1403 調æ´ããï¼"for checking boundary conditions"ã«ç¶ãåºåã¯ï¼ããã°ã©ã ã® 1404 妥å½æ§ããã§ãã¯ããããã®ãã®ã§ï¼":"ã®å³å´ã®æ°å¤ãï¼dlytimããã大ãã 1405 ãã¨ã確èªããï¼è¿ãå¤ã«ãªãå¿ 1406 è¦ã¯ãªãï¼ï¼ 1407 1408 4.3 ããã»ããµã®ã¨ã³ãã£ã¢ã³ 1200 "for fitting parameters"に続く出力は,sil_dly_nse(dlytim)を呼び出した場 1201 合の待ち時間を測定した結果である.このプログラムを用いて,":"の右側の数 1202 値が,dlytimよりも大きい範囲でなるべく近い値になるように,2つの定数値を 1203 調整する."for checking boundary conditions"に続く出力は,プログラムの 1204 妥当性をチェックするためのもので,":"の右側の数値が,dlytimよりも大きい 1205 ことを確認する(近い値になる必要はない). 1206 1207 4.3 プロセッサのエンディアン 1409 1208 1410 1209 (4-3-1) SIL_ENDIAN_BIG 1411 1210 (4-3-2) SIL_ENDIAN_LITTLE 1412 1211 1413 ããã»ããµã®ã¨ã³ãã£ã¢ã³ã«ããï¼ããããçæ¹ã®ã·ã³ãã«ããã¯ãå®ç¾©ããï¼ 1414 1415 (4-3-3) TOPPERS_SIL_REV_ENDIAN_UINT16 ï¼ãªãã·ã§ã³ï¼1416 (4-3-4) TOPPERS_SIL_REV_ENDIAN_UINT32 ï¼ãªãã·ã§ã³ï¼1417 1418 ããããï¼16ãããï¼32ãããã®ç¬¦å·ç¡ãæ´æ°ã®ã¨ã³ãã£ã¢ã³ãå転ãããã 1419 ã¯ãï¼ããã»ããµãã¨ã³ãã£ã¢ã³å転ã®ããã®å½ä»¤ãæã¤å ´åã«ã¯ï¼ãã®å½ä»¤ 1420 ãç¨ãã¦å®ç¾ããï¼ãããã®ã·ã³ãã«ããã¯ãå®ç¾©ããªãå ´åã«ã¯ï¼ããã©ã« 1421 ãã®å®ç¾©ã使ãããï¼ 1422 1423 4.4 ã¡ã¢ãªç©ºéã¢ã¯ã»ã¹é¢æ°1212 プロセッサのエンディアンにより,いずれか片方のシンボルをマクロ定義する. 1213 1214 (4-3-3) TOPPERS_SIL_REV_ENDIAN_UINT16(オプション) 1215 (4-3-4) TOPPERS_SIL_REV_ENDIAN_UINT32(オプション) 1216 1217 それぞれ,16ビット,32ビットの符号無し整数のエンディアンを反転させるマ 1218 クロ.プロセッサがエンディアン反転のための命令を持つ場合には,その命令 1219 を用いて実現する.これらのシンボルをマクロ定義しない場合には,デフォル 1220 トの定義が使われる. 1221 1222 4.4 メモリ空間アクセス関数 1424 1223 1425 1224 (4-4-1) TOPPERS_OMIT_SIL_ACCESS 1426 1225 1427 æ¨æºã®ã¡ã¢ãªç©ºéã¢ã¯ã»ã¹é¢æ°ã使ç¨ããï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æããå ´å 1428 ã«ã¯ï¼ãã®ã·ã³ãã«ããã¯ãå®ç¾©ããï¼ 1226 標準のメモリ空間アクセス関数を使用せず,ターゲット依存部で用意する場合 1227 には,このシンボルをマクロ定義する. 1429 1228 1430 1229 (4-4-2) TOPPERS_OMIT_SIL_REH_LEM … … 1437 1236 (4-4-9) TOPPERS_OMIT_SIL_WRW_BEM 1438 1237 1439 ããããï¼æ¨æºã®sil_reh_lemï¼sil_wrh_lemï¼sil_reh_bemï¼sil_wrh_bemï¼ 1440 sil_rew_lemï¼sil_wrw_lemï¼sil_rew_bemï¼sil_wrw_bemã使ç¨ããï¼ã¿ã¼ã²ã 1441 ãä¾åé¨ã§ç¨æããå ´åã«ã¯ï¼ãããã®ã·ã³ãã«ããã¯ãå®ç¾©ããï¼ 1442 1443 4.5 I/O空éã¢ã¯ã»ã¹é¢æ° 1444 1445 ã¡ã¢ãªç©ºéã¨ã¯å¥ã«I/O空éãæã¤ããã»ããµã§ã¯ï¼I/O空éã«ããããã¤ã¹ã¬ 1446 ã¸ã¹ã¿ãã¢ã¯ã»ã¹ããããã®é¢æ°ã¨ãã¦ï¼sil_reb_iopï¼sil_wrb_iopï¼ 1447 sil_reh_iopï¼sil_wrh_iopï¼sil_reh_lepï¼sil_wrh_lepï¼sil_reh_bepï¼ 1448 sil_wrh_bepï¼sil_rew_iopï¼sil_wrw_iopï¼sil_rew_lepï¼sil_wrw_lepï¼ 1449 sil_rew_bepï¼sil_wrw_bepã®ä¸ã§å¿ 1450 è¦ãªãã®ãï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æããï¼ 1451 1452 1453 ï¼ï¼ã«ã¼ãã«APIã®ã¿ã¼ã²ããä¾åé¨ 1454 1455 ã«ã¼ãã«APIï¼kernel.hï¼ã®ã¿ã¼ã²ããä¾åé¨ã®å®ç¾©ã¯ï¼target_kernel.hã¾ã 1456 ã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ããã»ããµã»ãããã»éçºç°å¢ä¾å 1457 é¨ã§ç¨æãããããããã¡ã¤ã«ãªã©ï¼ã«å«ããï¼ 1458 1459 5.1 ã¿ã¼ã²ããå®ç¾©ã§ãµãã¼ãããæ©è½ 1460 1461 (5-1-1) TOPPERS_TARGET_SUPPORT_DIS_INT dis_intããµãã¼ããã 1462 (5-1-2) TOPPERS_TARGET_SUPPORT_ENA_INT ena_intããµãã¼ããã 1463 (5-1-3) TOPPERS_TARGET_SUPPORT_GET_UTM get_utmããµãã¼ããã 1464 1465 dis_intï¼ena_intï¼get_utmããµãã¼ãããå ´åã«ï¼ããããã®ã·ã³ãã«ãã㯠1466 ãå®ç¾©ããï¼ 1467 1468 5.2 å²è¾¼ã¿åªå 1469 度ã®ç¯å² 1470 1471 (5-2-1) TMIN_INTPRI å²è¾¼ã¿åªå 1472 度ã®æå°å¤ï¼æé«å¤ï¼ 1473 (5-2-2) TMAX_INTPRI å²è¾¼ã¿åªå 1474 度ã®æ大å¤ï¼æä½å¤ï¼ 1475 1476 ããããï¼ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿åªå 1477 度ã®æå°å¤ï¼ï¼åªå 1478 度ãæé«ï¼ï¼ã«ã¼ã 1479 ã«ç®¡çã®å²è¾¼ã¿åªå 1480 度ã®æ大å¤ï¼åªå 1481 度ãæä½ï¼ã«å®ç¾©ããï¼TMAX_INTPRIã¯-1 1482 ã«åºå®ããã¦ãããï¼å¯¾ç§°æ§ã®ããã«ï¼ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ãããã¨ã«ã 1483 ã¦ããï¼ 1484 1485 5.3 ã¿ã¤ã ãã£ãã¯ã®å®ç¾© 1486 1487 (5-3-1) TIC_NUME ã¿ã¤ã ãã£ãã¯ã®å¨æã®åå 1488 (5-3-2) TIC_DENO ã¿ã¤ã ãã£ãã¯ã®å¨æã®åæ¯ 1489 1490 ã¿ã¤ã ãã£ãã¯ã®å¨æï¼signal_timeãå¼ã³åºãå¨æï¼ãï¼ããªç§åä½ã§ï¼ 1491 TIC_NUME/TIC_DENOã«å®ç¾©ããï¼ä¾ãã°ï¼ã¿ã¤ã ãã£ãã¯ã®å¨æã1/30ç§ã®å ´å 1492 ã«ã¯ï¼TIC_NUMEã100ã«ï¼TIC_DENOã3ã«å®ç¾©ããã°ããï¼ 1493 1494 ã¿ã¤ã ãã£ãã¯ã®å¨æã¯ï¼1ããªç§ã¨ããï¼ã¤ã¾ãï¼TIC_NUMEï¼TIC_DENOã¨ã1 1495 ã«å®ç¾©ããï¼ãã¨ãæ¨å¥¨ãããï¼ã·ãã¥ã¬ã¼ã·ã§ã³ç°å¢ãæ§è½ã®ä½ãããã»ã 1496 ãµã§ãããé©åã§ãªãå ´åã«ã¯ï¼ãã以å¤ã®å¤ã¨ãã¦ãããï¼ãã®å ´åã§ãï¼ 1497 å¯è½ãªéãï¼1ããªç§ã®åæ°ã§ããï¼ã¤ã¾ãï¼TIC_DENOã1ã«å®ç¾©ããï¼ãã¨ã 1498 æã¾ããï¼ 1499 1500 TIC_NUMEã¨TIC_DENOã®å®ç¾©ãå¤æ´ãããã¨ã§ï¼ã¿ã¤ã ãã£ãã¯ã®å¨æãå¤æ´ã§ 1501 ããããã«ã¿ã¤ããã©ã¤ããå®è£ 1502 ããå ´åã«ã¯ï¼ãã®2ã¤ã®å®æ°ã®å®ç¾©ã¯ããã© 1503 ã«ãå¤ãä¸ãã¦ãããã¨ã«ãªãï¼ããã§ï¼ãããã®å®ç¾©ãã#ifndef TIC_NUMEã 1504 ã#endifãã§å²ãã§è¨è¿°ããï¼ 1505 1506 5.4 ã¡ã¢ãªé å確ä¿ã®ããã®åå®ç¾© 1507 1508 (5-4-1) TOPPERS_STK_T ã¹ã¿ãã¯é åã確ä¿ããããã®åï¼ãªãã·ã§ã³ï¼ 1509 (5-4-2) TOPPERS_MPF_T åºå®é·ã¡ã¢ãªãã¼ã«é åã確ä¿ããããã®åï¼ãªãã·ã§ã³ï¼ 1510 1511 ã¹ã¿ãã¯é åã¨åºå®é·ã¡ã¢ãªãã¼ã«é åã¯ï¼æ¨æºã§ã¯ï¼intptr_tåã®é 1512 åã¨ã 1513 ã¦ç¢ºä¿ãããï¼ãã大ããåä½ã§ã¢ã©ã¤ã³ãããããªã©ã®çç±ã§ï¼ãã以å¤ã® 1514 åã®é 1515 åã¨ãã¦ç¢ºä¿ããå ´åã«ã¯ï¼ããããTOPPERS_STK_Tã¨TOPPERS_MPF_Tãï¼ 1516 é 1517 åã®ãã¼ã¹ã¨ãªããã¼ã¿åã«ãã¯ãå®ç¾©ããï¼ 1518 1519 5.5 ããããã¿ã¼ã³ã®ãããæ° 1520 1521 (5-5-1) TBIT_TEXPTN ã¿ã¹ã¯ä¾å¤è¦å ã®ãããæ°ï¼ãªãã·ã§ã³ï¼ 1522 (5-5-2) TBIT_FLGPTN ã¤ãã³ããã©ã°ã®ãããæ°ï¼ãªãã·ã§ã³ï¼ 1523 1524 TBIT_TEXPTNï¼TBIT_FLGPTNã®æ¨æºã®å®ç¾©ã§ã¯ï¼æ´æ°åã®æå¹ãããæ°ãï¼ãã® 1525 åã®sizeofã«CHAR_BITãä¹ãããã®ã¨ä¸è´ãã¦ãããã¨ãä»®å®ãã¦ããï¼å¤ã 1526 ã®ã³ã³ãã¤ã©ã§ãã®ä»®å®ãæãç«ã¤ãï¼ããã§ãªãå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾å 1527 é¨ã§ãããã®å®ç¾©ãä¸æ¸ãããå¿ 1528 è¦ãããï¼ãã ãï¼ãããã®å¤ã¯16以ä¸ã§ãª 1529 ããã°ãªããªãï¼ 1530 1531 5.6 ã¡ã¢ãªé å確ä¿ã®ããã®ãã¯ã 1532 1533 (5-6-1) TOPPERS_ROUND_SZï¼ãªãã·ã§ã³ï¼ 1534 (5-6-2) TOPPERS_COUNT_SZï¼ãªãã·ã§ã³ï¼ 1535 1536 TOPPERS_COUNT_SZ(sz, unit)ã¯ï¼sz/unitãåãä¸ããå¤ãæ±ãããã¯ãã§ï¼ãµ 1537 ã¤ãºãszã®ã¡ã¢ãªé åããµã¤ãºãunitã®ãã¼ã¿åã®é 1538 åã§ç¢ºä¿ããå ´åã®è¦ç´ 1539 æ°ãæ±ããããã«ç¨ããï¼TOPPERS_ROUND_SZ(sz, unit)ã¯ï¼sz/unitãåãä¸ã 1540 ããã®ã«unitããããå¤ãæ±ãããã¯ãã§ï¼ãµã¤ãºãszã®ã¡ã¢ãªé åããµã¤ãº 1541 ãunitã®ãã¼ã¿åã®é 1542 åã§ç¢ºä¿ããå ´åã®ãã¼ã¿ã«ãµã¤ãºãæ±ããããã«ç¨ã 1543 ãï¼ 1544 1545 ããããï¼æ¨æºã®TOPPERS_ROUND_SZï¼TOPPERS_COUNT_SZãé©åã§ãªãï¼ã¿ã¼ã²ã 1546 ãä¾åé¨ã§ç¨æããå ´åã«ã¯ï¼ãããã®ã·ã³ãã«ãé©åãªå¤ã«ãã¯ãå®ç¾©ããï¼ 1547 1548 5.7 ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã®ããã®å®ç¾©ï¼ãªãã·ã§ã³ï¼ 1549 1550 ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ããµãã¼ãããï¼ä½¿ç¨ã§ããããã«ã 1551 ãï¼å ´åã«ã¯ï¼æ¬¡ã®3ã¤ãå®æ½ãããã¨ãå¿ 1552 è¦ã§ããï¼ 1553 1554 ã»ãã®ç¯ã§èª¬æããå®ç¾©ãè¡ãï¼ 1555 ã»ï¼ç« ã«ç¤ºãã³ã¼ãä¸ã§ï¼TOPPERS_SUPPORT_OVRHDRããã¯ãå®ç¾©ããã¦ããå ´ 1556 ãåã«ã®ã¿æå¹ã¨ãªãã³ã¼ããå®è£ 1557 ããï¼ 1558 ã»ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ããç¨æããï¼ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãã«ã¤ã㦠1559 ãã¯ï¼ã6.14 ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ããã®ç¯ãåç 1560 §ãããã¨ï¼ 1238 それぞれ,標準のsil_reh_lem,sil_wrh_lem,sil_reh_bem,sil_wrh_bem, 1239 sil_rew_lem,sil_wrw_lem,sil_rew_bem,sil_wrw_bemを使用せず,ターゲッ 1240 ト依存部で用意する場合には,これらのシンボルをマクロ定義する. 1241 1242 4.5 I/O空間アクセス関数 1243 1244 メモリ空間とは別にI/O空間を持つプロセッサでは,I/O空間にあるデバイスレ 1245 ジスタをアクセスするための関数として,sil_reb_iop,sil_wrb_iop, 1246 sil_reh_iop,sil_wrh_iop,sil_reh_lep,sil_wrh_lep,sil_reh_bep, 1247 sil_wrh_bep,sil_rew_iop,sil_wrw_iop,sil_rew_lep,sil_wrw_lep, 1248 sil_rew_bep,sil_wrw_bepの中で必要なものを,ターゲット依存部で用意する. 1249 1250 1251 5.カーネルAPIのターゲット依存部 1252 1253 カーネルAPI(kernel.h)のターゲット依存部の定義は,target_kernel.hまた 1254 はそこからインクルードされるファイル(プロセッサ・チップ・開発環境依存 1255 部で用意されるヘッダファイルなど)に含める. 1256 1257 5.1 ターゲット定義でサポートする機能 1258 1259 (5-1-1) TOPPERS_TARGET_SUPPORT_DIS_INT dis_intをサポートする 1260 (5-1-2) TOPPERS_TARGET_SUPPORT_ENA_INT ena_intをサポートする 1261 (5-1-3) TOPPERS_TARGET_SUPPORT_GET_UTM get_utmをサポートする 1262 1263 dis_int,ena_int,get_utmをサポートする場合に,それぞれのシンボルをマク 1264 ロ定義する. 1265 1266 5.2 割込み優先度の範囲 1267 1268 (5-2-1) TMIN_INTPRI 割込み優先度の最小値(最高値) 1269 (5-2-2) TMAX_INTPRI 割込み優先度の最大値(最低値) 1270 1271 それぞれ,カーネル管理の割込み優先度の最小値(=優先度が最高),カーネ 1272 ル管理の割込み優先度の最大値(優先度が最低)に定義する.TMAX_INTPRIは-1 1273 に固定されているが,対称性のために,ターゲット依存部で定義することにし 1274 ている. 1275 1276 5.3 タイムティックの定義 1277 1278 (5-3-1) TIC_NUME タイムティックの周期の分子 1279 (5-3-2) TIC_DENO タイムティックの周期の分母 1280 1281 タイムティックの周期(signal_timeを呼び出す周期)を,ミリ秒単位で, 1282 TIC_NUME/TIC_DENOに定義する.例えば,タイムティックの周期が1/30秒の場合 1283 には,TIC_NUMEを100に,TIC_DENOを3に定義すればよい. 1284 1285 タイムティックの周期は,1ミリ秒とする(つまり,TIC_NUME,TIC_DENOとも1 1286 に定義する)ことを推奨するが,シミュレーション環境や性能の低いプロセッ 1287 サでそれが適切でない場合には,それ以外の値としてもよい.その場合でも, 1288 可能な限り,1ミリ秒の倍数である(つまり,TIC_DENOを1に定義する)ことが 1289 望ましい. 1290 1291 TIC_NUMEとTIC_DENOの定義を変更することで,タイムティックの周期を変更で 1292 きるようにタイマドライバを実装する場合には,この2つの定数の定義はデフォ 1293 ルト値を与えていることになる.そこで,これらの定義を「#ifndef TIC_NUME」 1294 「#endif」で囲んで記述する. 1295 1296 5.4 メモリ領域確保のための型定義 1297 1298 (5-4-1) TOPPERS_STK_T スタック領域を確保するための型(オプション) 1299 (5-4-2) TOPPERS_MPF_T 固定長メモリプール領域を確保するための型(オプション) 1300 1301 スタック領域と固定長メモリプール領域は,標準では,intptr_t型の配列とし 1302 て確保するが,より大きい単位でアラインさせたいなどの理由で,それ以外の 1303 型の配列として確保する場合には,それぞれTOPPERS_STK_TとTOPPERS_MPF_Tを, 1304 配列のベースとなるデータ型にマクロ定義する. 1305 1306 5.5 ビットパターンのビット数 1307 1308 (5-5-1) TBIT_TEXPTN タスク例外要因のビット数(オプション) 1309 (5-5-2) TBIT_FLGPTN イベントフラグのビット数(オプション) 1310 1311 TBIT_TEXPTN,TBIT_FLGPTNの標準の定義では,整数型の有効ビット数が,その 1312 型のsizeofにCHAR_BITを乗じたものと一致していることを仮定している.多く 1313 のコンパイラでこの仮定が成り立つが,そうでない場合には,ターゲット依存 1314 部でこれらの定義を上書きする必要がある.ただし,これらの値は16以上でな 1315 ければならない. 1316 1317 5.6 メモリ領域確保のためのマクロ 1318 1319 (5-6-1) TOPPERS_ROUND_SZ(オプション) 1320 (5-6-2) TOPPERS_COUNT_SZ(オプション) 1321 1322 TOPPERS_COUNT_SZ(sz, unit)は,sz/unitを切り上げた値を求めるマクロで,サ 1323 イズがszのメモリ領域をサイズがunitのデータ型の配列で確保する場合の要素 1324 数を求めるために用いる.TOPPERS_ROUND_SZ(sz, unit)は,sz/unitを切り上げ 1325 たものにunitをかけた値を求めるマクロで,サイズがszのメモリ領域をサイズ 1326 がunitのデータ型の配列で確保する場合のトータルサイズを求めるために用い 1327 る. 1328 1329 それぞれ,標準のTOPPERS_ROUND_SZ,TOPPERS_COUNT_SZが適切でなく,ターゲッ 1330 ト依存部で用意する場合には,これらのシンボルを適切な値にマクロ定義する. 1331 1332 5.7 オーバランハンドラ機能拡張のための定義(オプション) 1333 1334 オーバランハンドラ機能拡張パッケージをサポートする(使用できるようにす 1335 る)場合には,次の3つを実施することが必要である. 1336 1337 ・この節で説明する定義を行う. 1338 ・6章に示すコード中で,TOPPERS_SUPPORT_OVRHDRがマクロ定義されている場 1339 合にのみ有効となるコードを実装する. 1340 ・オーバランタイマドライバを用意する.オーバランタイマドライバについて 1341 は,「6.14 オーバランタイマドライバ」の節を参照すること. 1561 1342 1562 1343 (5-7-1) TOPPERS_TARGET_SUPPORT_OVRHDR 1563 1344 1564 ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ããµãã¼ãããå ´åã«ã¯ï¼ãã®ã·ã³ã 1565 ã«ããã¯ãå®ç¾©ããï¼ 1566 1567 (5-7-2) TMAX_OVRTIMï¼ãªãã·ã§ã³ï¼ããã©ã«ãã¯ULONG_MAXï¼ 1568 1569 ããã»ããµæéã¨ãã¦ãªã¼ãã©ã³ã¿ã¤ãã«è¨å®ã§ããæ大å¤ï¼åä½ã¯ãã¤ã¯ã 1570 ç§ï¼ã«ãã¯ãå®ç¾©ããï¼ 1571 1572 1573 ï¼ï¼ã«ã¼ãã«å®è£ 1574 ã®ã¿ã¼ã²ããä¾åé¨ 1575 1576 6.1 ã«ã¼ãã«å®è£ 1577 ã®ã¿ã¼ã²ããä¾åé¨ã®å 1578 ±éäºé 1579 1580 1581 6.1.1 ã«ã¼ãã«å®è£ 1582 ã®ã¿ã¼ã²ããä¾åé¨ã®æ§æè¦ç´ 1583 1584 ã«ã¼ãã«å®è£ 1585 ã®ã¿ã¼ã²ããä¾åé¨ã¯ï¼ä»¥ä¸ã®è¦ç´ ã§æ§æãããï¼ 1586 1587 (a) ã«ã¼ãã«å®è£ 1588 ã®ã¿ã¼ã²ããä¾åã®å®ç¾© 1589 1590 ã«ã¼ãã«å®è£ 1591 ã®ã¿ã¼ã²ããéä¾åé¨ããåç 1592 §ãããã¿ã¼ã²ããä¾åã®å®ç¾©ã¯ï¼ 1593 target_config.hã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ããã»ããµã»ãã 1594 ãã»éçºç°å¢ä¾åé¨ã§ç¨æãããããããã¡ã¤ã«ãªã©ï¼ã«å«ããï¼ 1595 1596 ã¿ã¼ã²ããã®ãã¼ãã¦ã§ã¢è³æºï¼å²è¾¼ã¿ãã³ãã©çªå·ãCPUä¾å¤ãã³ãã©çªå·ï¼ 1597 ããã¤ã¹ã¬ã¸ã¹ã¿ã®çªå°ãªã©ï¼ã®å®ç¾©ã¯ï¼ã·ã¹ãã ãµã¼ãã¹ãã¢ããªã±ã¼ã·ã§ 1598 ã³ã«ãæç¨ã§ããããï¼ã«ã¼ãã«å®è£ 1599 ã®ã¿ã«æç¨ãªå®ç¾©ãå«ããã¡ã¤ã«ã¨ã¯å 1600 ãåãã¦ï¼ç¬ç«ããããããã¡ã¤ã«ã«å«ããï¼ãã®ããããã¡ã¤ã«ã®æ¨æºç㪠1601 å称ãï¼ã·ã¹ãã ç¥ç§°.hï¼ã¾ãã¯ï¼ãããç¥ç§°.hï¼ããã»ããµç¥ç§°.hï¼ã¨ããï¼ 1602 1603 (b) ã«ã¼ãã«å®è£ 1604 ã®ã¿ã¼ã²ããä¾åã¢ã¸ã¥ã¼ã« 1605 1606 ã«ã¼ãã«å®è£ 1607 ã®ã¿ã¼ã²ããä¾åã®å¤æ°å®ç¾©ãé¢æ°ãå«ãã¢ã¸ã¥ã¼ã«ï¼Cè¨èªã§è¨ 1608 è¿°ãããé¨åãtarget_config.cï¼ã¢ã»ã³ããªè¨èªã§è¨è¿°ãããé¨åã 1609 target_support.Sã«å«ããï¼ããã»ããµã»ãããã»éçºç°å¢ä¾åé¨ãåãåã 1610 ããã¨ãï¼ãã¡ã¤ã«ã大ãããªãå ´åã«è¤æ°ã®ãã¡ã¤ã«ã«åå²ãããã¨ãå¯è½ 1611 ã§ããï¼ 1612 1613 (c) ã«ã¼ãã«å®è£ 1614 ã®ã¿ã¼ã²ããä¾åé¨ã®ããã®ãªãã¼ã è¨è¿° 1615 1616 ã«ã¼ãã«å®è£ 1617 ã®ã¿ã¼ã²ããä¾åé¨ã®å¤æ°åãé¢æ°åãï¼å 1618 é ã«_kernel_ãä»ä¸ 1619 ããååã«ãªãã¼ã ããããã®ã¢ã¸ã¥ã¼ã«ï¼target_rename.defãç¨æãï¼ãã¼ 1620 ã«ï¼utils/genrenameï¼ã«ããï¼target_rename.hã¨target_unrename.hãçæã 1621 ãï¼ããã»ããµã»ãããã»éçºç°å¢ä¾åé¨ãåãåããå ´åã«ã¯ï¼ãªãã¼ã è¨ 1622 è¿°ãåãåããï¼ 1623 1624 (d) ã¿ã¤ããã©ã¤ã 1625 1626 ã«ã¼ãã«ã«ã¿ã¤ã ãã£ãã¯ãéç¥ããï¼signal_timeãå¨æçã«å¼ã³åºãï¼ãã 1627 ã®ã¿ã¤ããã©ã¤ãã®ããããã¡ã¤ã«ï¼å®è£ 1628 ãã¡ã¤ã«ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ 1629 ã·ã§ã³ãã¡ã¤ã«ãï¼ããããï¼target_timer.hï¼target_timer.cï¼ 1630 target_timer.cfgã«å«ããï¼ããã»ããµã»ãããã»éçºç°å¢ä¾åé¨ãåãåã 1631 ããã¨ãå¯è½ã§ããï¼ 1632 1633 ã¾ãï¼ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ããµãã¼ãããå ´åã«ã¯ï¼ãªã¼ 1634 ãã©ã³ãã³ãã©ãèµ·åããï¼call_ovrhdrãå¼ã³åºãï¼ããã®ãªã¼ãã©ã³ã¿ã¤ã 1635 ãã©ã¤ããï¼åããã¡ã¤ã«ã«å«ããï¼ 1636 1637 ãªãï¼ãã®ç« ã«ç¤ºãã³ã¼ãä¸ã§ï¼TOPPERS_SUPPORT_OVRHDRããã¯ãå®ç¾©ãã㦠1638 ããå ´åã«ã®ã¿æå¹ã¨ãªãã³ã¼ãã¯ï¼ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ 1639 ããµãã¼ãããªãå ´åã«ã¯ï¼å®è£ 1640 ããå¿ 1641 è¦ããªãï¼ 1642 1643 (e) ã³ã³ãã£ã®ã¥ã¬ã¼ã¿è¨å®ãã¡ã¤ã« 1644 1645 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è¨å®ãã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ãï¼target_def.csvï¼ 1646 target.tfï¼target_check.tfã«ç¨æããï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿è¨å®ãã¡ã¤ã«ã® 1647 è¨è¿°æ¹æ³ã«ã¤ãã¦ã¯ï¼ï¼ç« ã§èª¬æããï¼ 1648 1649 6.1.2 ã¿ã¼ã²ããä¾åé¨ã®é¢æ°ã®å½åè¦å 1650 1651 ã«ã¼ãã«å®è£ 1652 ã®ã¿ã¼ã²ããä¾åé¨ãæ§æããé¢æ°ã®ä¸ã§ï¼t_ã§å§ã¾ããã®ã¯ã¿ 1653 ã¹ã¯ã³ã³ããã¹ãå°ç¨ï¼i_ã§å§ã¾ããã®ã¯éã¿ã¹ã¯ã³ã³ããã¹ãå°ç¨ï¼x_ã§å§ 1654 ã¾ããã®ã¯ãããã®ã³ã³ããã¹ãããã§ãå¼ã³åºããã¨ãã§ããé¢æ°ã§ããï¼ 1655 1656 6.2 ãã¬ã¼ã¹ãã°æ©è½ã¸ã®å¯¾å¿ 1657 1658 ã«ã¼ãã«ã®ãã¬ã¼ã¹ãã°æ©è½ã®ä¸ã§ï¼ãã£ã¹ãããã£ï¼å²è¾¼ã¿ãã³ãã©ï¼CPUä¾ 1659 å¤ãã³ãã©ã®éå§ã»çµäºã®ãã¬ã¼ã¹ãã°åå¾ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§å®è£ 1660 ãã 1661 å¿ 1662 è¦ãããï¼ã»ã¨ãã©ã®ã¿ã¼ã²ããã·ã¹ãã ã«ããã¦ï¼ãããã®å¦çã¯ã¢ã»ã³ 1663 ããªè¨èªã§è¨è¿°ããã¦ããï¼ã¿ã¼ã²ããéä¾åé¨åãã®ãã¬ã¼ã¹ãã°ãã¯ã㨠1664 åãæ¹æ³ï¼ãã¬ã¼ã¹ãã°ãã¯ããï¼ãã¬ã¼ã¹ãã°åå¾å¦çã®Cè¨èªè¨è¿°ã«ãã¯ã 1665 å®ç¾©ããæ¹æ³ï¼ã¯ï¼ç¨ãããã¨ãã§ããªãï¼ 1666 1667 ããã§ï¼ã¢ã»ã³ããªè¨èªã§è¨è¿°ããã¦ããå¦çä¸ã«ãã¬ã¼ã¹ãã°åå¾ãåãè¾¼ 1668 ãå ´åã«ã¯ï¼ãã¬ã¼ã¹ãã°ãã¯ããå®ç¾©ããã¦ããã°ï¼ãããä½ã«å®ç¾©ãã㦠1669 ãããã¯ç¡è¦ãã¦ï¼æ¨æºçãªãã¬ã¼ã¹ãã°é¢æ°ãCè¨èªã§è¨è¿°ããã¦ããã¨æ³å® 1670 ãã¦ï¼ãããå¼ã³åºãããã«ã³ã¼ãã£ã³ã°ããï¼ 1671 1672 å 1673 ·ä½çã«ã¯ï¼ä¸ã®è¡¨ã®å·¦å´ã«ç¤ºãããã¬ã¼ã¹ãã°ãã¯ããå®ç¾©ããã¦ããã°ï¼ 1674 表ã®å³å´ã«ç¤ºããCè¨èªè¨è¿°ã¨åçã®å¦çãè¡ãããã«ã³ã¼ãã£ã³ã°ããï¼ 1675 1676 ãã¬ã¼ã¹ãã°ãã¯ã ãã¬ã¼ã¹ãã°åå¾å¦ç 1345 オーバランハンドラ機能拡張パッケージをサポートする場合には,このシンボ 1346 ルをマクロ定義する. 1347 1348 (5-7-2) TMAX_OVRTIM(オプション,デフォルトはULONG_MAX) 1349 1350 プロセッサ時間としてオーバランタイマに設定できる最大値(単位はマイクロ 1351 秒)にマクロ定義する. 1352 1353 1354 6.カーネル実装のターゲット依存部 1355 1356 6.1 カーネル実装のターゲット依存部の共通事項 1357 1358 6.1.1 カーネル実装のターゲット依存部の構成要素 1359 1360 カーネル実装のターゲット依存部は,以下の要素で構成される. 1361 1362 (a) カーネル実装のターゲット依存の定義 1363 1364 カーネル実装のターゲット非依存部から参照されるターゲット依存の定義は, 1365 target_config.hまたはそこからインクルードされるファイル(プロセッサ・チッ 1366 プ・開発環境依存部で用意されるヘッダファイルなど)に含める. 1367 1368 ターゲットのハードウェア資源(割込みハンドラ番号やCPU例外ハンドラ番号, 1369 デバイスレジスタの番地など)の定義は,システムサービスやアプリケーショ 1370 ンにも有用であるため,カーネル実装のみに有用な定義を含むファイルとは切 1371 り分けて,独立したヘッダファイルに含める.このヘッダファイルの標準的な 1372 名称を,システム略称.h(または,チップ略称.h,プロセッサ略称.h)とする. 1373 1374 (b) カーネル実装のターゲット依存モジュール 1375 1376 カーネル実装のターゲット依存の変数定義や関数を含むモジュール.C言語で記 1377 述される部分をtarget_config.c,アセンブリ言語で記述される部分を 1378 target_support.Sに含める.プロセッサ・チップ・開発環境依存部を切り分け 1379 ることや,ファイルが大きくなる場合に複数のファイルに分割することも可能 1380 である. 1381 1382 (c) カーネル実装のターゲット依存部のためのリネーム記述 1383 1384 カーネル実装のターゲット依存部の変数名や関数名を,先頭に_kernel_を付与 1385 した名前にリネームするためのモジュール.target_rename.defを用意し,ツー 1386 ル(utils/genrename)により,target_rename.hとtarget_unrename.hを生成す 1387 る.プロセッサ・チップ・開発環境依存部を切り分ける場合には,リネーム記 1388 述も切り分ける. 1389 1390 (d) タイマドライバ 1391 1392 カーネルにタイムティックを通知する(signal_timeを周期的に呼び出す)ため 1393 のタイマドライバのヘッダファイル,実装ファイル,システムコンフィギュレー 1394 ションファイルを,それぞれ,target_timer.h,target_timer.c, 1395 target_timer.cfgに含める.プロセッサ・チップ・開発環境依存部を切り分け 1396 ることも可能である. 1397 1398 また,オーバランハンドラ機能拡張パッケージをサポートする場合には,オー 1399 バランハンドラを起動する(call_ovrhdrを呼び出す)ためのオーバランタイマ 1400 ドライバも,同じファイルに含める. 1401 1402 なお,この章に示すコード中で,TOPPERS_SUPPORT_OVRHDRがマクロ定義されて 1403 いる場合にのみ有効となるコードは,オーバランハンドラ機能拡張パッケージ 1404 をサポートしない場合には,実装する必要がない. 1405 1406 (e) コンフィギュレータ設定ファイル 1407 1408 コンフィギュレータの設定ファイルのターゲット依存部を,target_def.csv, 1409 target.tf,target_check.tfに用意する.コンフィギュレータ設定ファイルの 1410 記述方法については,7章で説明する. 1411 1412 6.1.2 ターゲット依存部の関数の命名規則 1413 1414 カーネル実装のターゲット依存部を構成する関数の中で,t_で始まるものはタ 1415 スクコンテキスト専用,i_で始まるものは非タスクコンテキスト専用,x_で始 1416 まるものはいずれのコンテキストからでも呼び出すことができる関数である. 1417 1418 6.2 トレースログ機能への対応 1419 1420 カーネルのトレースログ機能の中で,ディスパッチャ,割込みハンドラ,CPU例 1421 外ハンドラの開始・終了のトレースログ取得は,ターゲット依存部で実装する 1422 必要がある.ほとんどのターゲットシステムにおいて,それらの処理はアセン 1423 ブリ言語で記述されており,ターゲット非依存部向けのトレースログマクロと 1424 同じ方法(トレースログマクロを,トレースログ取得処理のC言語記述にマクロ 1425 定義する方法)は,用いることができない. 1426 1427 そこで,アセンブリ言語で記述されている処理中にトレースログ取得を埋め込 1428 む場合には,トレースログマクロが定義されていれば,それが何に定義されて 1429 いるかは無視して,標準的なトレースログ関数がC言語で記述されていると想定 1430 して,それを呼び出すようにコーディングする. 1431 1432 具体的には,下の表の左側に示したトレースログマクロが定義されていれば, 1433 表の右側に示したC言語記述と同等の処理を行うようにコーディングする. 1434 1435 トレースログマクロ トレースログ取得処理 1677 1436 ----------------------------------------------- 1678 1437 LOG_DSP_ENTER log_dsp_enter(p_runtsk) … … 1683 1442 LOG_EXC_LEAVE log_exc_leave(excno) 1684 1443 1685 6.3 ã·ã¹ãã ç¶æ 1686 ã®ç®¡ç 1687 1688 ASPã«ã¼ãã«ãæ°ããªã¿ã¼ã²ããã·ã¹ãã ã«ãã¼ãã£ã³ã°ããéã«ï¼æãéè¦ãª 1689 ä½æ¥ã¯ï¼ã«ã¼ãã«ãå®ç¾©ããã·ã¹ãã ç¶æ 1690 ãï¼ãã¼ãã¦ã§ã¢ï¼ããã»ããµï¼ä¸ 1691 ã§ã©ã®ããã«å®ç¾ãããã§ããï¼ä»¥ä¸ã®èª¬æã¯ï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«ã«ãã 1692 ãã·ã¹ãã ç¶æ 1693 ã®å®ç¾©ã»æå³ãç¥ã£ã¦ãããã¨ãåæã«è¨è¿°ãã¦ããï¼ 1694 1695 6.3.1 å 1696 ¨å²è¾¼ã¿ããã¯ç¶æ 1697 ã®ç®¡ç 1698 1699 å 1700 ¨å²è¾¼ã¿ããã¯ç¶æ 1701 ã¯ï¼NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ããã¹ã¯ããç¶æ 1702 ã§ããï¼å 1703 ¨ 1704 å²è¾¼ã¿ããã¯ç¶æ 1705 ã管çããæ©è½ã¯ï¼ã·ã¹ãã ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ã¤ï¼SILï¼ã« 1706 ãã£ã¦æä¾ããï¼ã«ã¼ãã«ã¯å 1707 ¨å²è¾¼ã¿ããã¯ç¶æ 1708 ã管çããªãï¼ 1709 1710 å 1711 ¨å²è¾¼ã¿ããã¯ç¶æ 1712 ã§ã¯ï¼sns_kerã¨ext_ker以å¤ã®ã«ã¼ãã«ã®ãµã¼ãã¹ã³ã¼ã« 1713 ãå¼ã¶ãã¨ã¯ã§ããªããã®ã¨ãã¦ããï¼å¼ãã å ´åã«ã¯ä½ãèµ·ãããä¿è¨¼ã㦠1714 ããªãï¼sns_kerã¨ext_kerããå¼ã³åºãå¦çã¯ï¼ãã¬ã¼ã¹ãã°åå¾å¦çã¨SILã® 1715 ãµã¼ãã¹ã³ã¼ã«ãé¤ãã¨ï¼call_exit_kernelã®ã¿ã§ããï¼ãã®ããï¼ 1716 call_exit_kernelããå¼ã³åºããã®ãé¤ãã¦ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã® 1717 é¢æ°ãï¼å 1718 ¨å²è¾¼ã¿ããã¯ç¶æ 1719 ã§å¼ã³åºãããç¶æ³ã¯èããå¿ 1720 è¦ããªãï¼ 1721 1722 6.3.2 ã³ã³ããã¹ãã®ç®¡ç 1723 1724 å¦çåä½ãå®è¡ãããã³ã³ããã¹ãã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã¨éã¿ã¹ã¯ã³ã³ã 1725 ãã¹ãã«åé¡ãããï¼ 1726 1727 ã¿ã¼ã²ããä¾åé¨ã¯ï¼å®è¡ä¸ã®å¦çåä½ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã§å®è¡ãã㦠1728 ãããéã¿ã¹ã¯ã³ã³ããã¹ãã§å®è¡ããã¦ããããå¤å¥ããæ©è½ãæä¾ããï¼ 1729 ã¾ãï¼CPUä¾å¤ãçºçããã³ã³ããã¹ãã«ã¤ãã¦å¤å¥ããæ©è½ãæä¾ããï¼ 1730 1731 ã¿ã¼ã²ããä¾åé¨ã§ã¯ï¼å²è¾¼ã¿ãã³ãã©ã¨CPUä¾å¤ãã³ãã©ã®å 1732 ¥å£å¦çã§éã¿ã¹ 1733 ã¯ã³ã³ããã¹ãã«åãæãï¼ãããã®åºå£å¦çã§å 1734 ã®ã³ã³ããã¹ãã«æ»ãï¼ã¾ 1735 ãï¼ãã£ã¹ãããã£ã®å 1736 é¨ã§ä¸æçã«éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæããï¼ 1444 6.3 システム状態の管理 1445 1446 ASPカーネルを新たなターゲットシステムにポーティングする際に,最も重要な 1447 作業は,カーネルが定義するシステム状態を,ハードウェア(プロセッサ)上 1448 でどのように実現するかである.以下の説明は,TOPPERS新世代カーネルにおけ 1449 るシステム状態の定義・意味を知っていることを前提に記述している. 1450 1451 6.3.1 全割込みロック状態の管理 1452 1453 全割込みロック状態は,NMIを除くすべての割込みをマスクした状態である.全 1454 割込みロック状態を管理する機能は,システムインタフェースレイヤ(SIL)に 1455 よって提供され,カーネルは全割込みロック状態を管理しない. 1456 1457 全割込みロック状態では,sns_kerとext_ker以外のカーネルのサービスコール 1458 を呼ぶことはできないものとしており,呼んだ場合には何が起こるか保証して 1459 いない.sns_kerとext_kerから呼び出す処理は,トレースログ取得処理とSILの 1460 サービスコールを除くと,call_exit_kernelのみである.そのため, 1461 call_exit_kernelから呼び出すものを除いて,カーネルのターゲット依存部の 1462 関数が,全割込みロック状態で呼び出される状況は考える必要がない. 1463 1464 6.3.2 コンテキストの管理 1465 1466 処理単位が実行されるコンテキストは,タスクコンテキストと非タスクコンテ 1467 キストに分類される. 1468 1469 ターゲット依存部は,実行中の処理単位が,タスクコンテキストで実行されて 1470 いるか非タスクコンテキストで実行されているかを判別する機能を提供する. 1471 また,CPU例外が発生したコンテキストについて判別する機能を提供する. 1472 1473 ターゲット依存部では,割込みハンドラとCPU例外ハンドラの入口処理で非タス 1474 クコンテキストに切り換え,それらの出口処理で元のコンテキストに戻す.ま 1475 た,ディスパッチャの内部で一時的に非タスクコンテキストに切り換える. 1737 1476 1738 1477 (6-3-2-1) bool_t sense_context(void) 1739 1478 1740 å®è¡ä¸ã®å¦çåä½ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã§å®è¡ããã¦ããå ´åã«ã¯falseï¼é 1741 ã¿ã¹ã¯ã³ã³ããã¹ãã§å®è¡ããã¦ããå ´åã«ã¯trueãè¿ãé¢æ°ï¼ãã®é¢æ°ã¯ï¼ 1742 CPUããã¯ç¶æ 1743 ã§ãCPUããã¯è§£é¤ç¶æ 1744 ã§ãå¼ã³åºããããã«å®è£ 1745 ããªããã°ãª 1746 ããªãï¼ 1747 1748 6.3.3 CPUããã¯ç¶æ 1749 ã®ç®¡ç 1750 1751 ã¿ã¼ã²ããä¾åé¨ã¯ï¼CPUããã¯ç¶æ 1752 ã¸é·ç§»ããæ©è½ï¼CPUããã¯è§£é¤ç¶æ 1753 ã¸é· 1754 移ããæ©è½ï¼CPUããã¯ç¶æ 1755 ã§ããããå¤å¥ããæ©è½ãæä¾ããï¼ 1479 実行中の処理単位が,タスクコンテキストで実行されている場合にはfalse,非 1480 タスクコンテキストで実行されている場合にはtrueを返す関数.この関数は, 1481 CPUロック状態でもCPUロック解除状態でも呼び出せるように実装しなければな 1482 らない. 1483 1484 6.3.3 CPUロック状態の管理 1485 1486 ターゲット依存部は,CPUロック状態へ遷移する機能,CPUロック解除状態へ遷 1487 移する機能,CPUロック状態であるかを判別する機能を提供する. 1756 1488 1757 1489 (6-3-3-1) void t_lock_cpu(void) … … 1759 1491 (6-3-3-3) void x_lock_cpu(void) 1760 1492 1761 CPUããã¯è§£é¤ç¶æ 1762 ããï¼CPUããã¯ç¶æ 1763 ã¸é·ç§»ãããé¢æ°ï¼ãããã®é¢æ°ã¯ï¼ 1764 CPUããã¯ç¶æ 1765 ã§å¼ã³åºããããã¨ã¯ãªãï¼å¼ã³åºãããå ´åã®åä½ã¯ä¿è¨¼ãã 1766 å¿ 1767 è¦ããªãï¼ 1768 1769 ãããã®é¢æ°ãå®ç¾ããéã«ã¯ï¼ã1.6 ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1770 ¥å¦çã® 1771 å®ç¾ã«é¢ããå¶ç´ãã®ç¯ã«è¨è¿°ããã¦ããå¶ç´ã«å¾ããªããã°ãªããªãï¼ 1493 CPUロック解除状態から,CPUロック状態へ遷移させる関数.これらの関数は, 1494 CPUロック状態で呼び出されることはなく,呼び出された場合の動作は保証する 1495 必要がない. 1496 1497 これらの関数を実現する際には,「1.6 クリティカルセクションの出入処理の 1498 実現に関する制約」の節に記述されている制約に従わなければならない. 1772 1499 1773 1500 (6-3-3-4) void t_unlock_cpu(void) … … 1775 1502 (6-3-3-6) void x_unlock_cpu(void) 1776 1503 1777 CPUããã¯ç¶æ 1778 ããï¼CPUããã¯è§£é¤ç¶æ 1779 ã¸é·ç§»ãããé¢æ°ï¼ãããã®é¢æ°ã¯ï¼ 1780 CPUããã¯è§£é¤ç¶æ 1781 ã§å¼ã³åºããããã¨ã¯ãªãï¼å¼ã³åºãããå ´åã®åä½ã¯ä¿è¨¼ 1782 ããå¿ 1783 è¦ããªãï¼ 1784 1785 ã¿ã¹ã¯ã³ã³ããã¹ãã§CPUããã¯ç¶æ 1786 ã«é·ç§»ããå ´åã«ã¯ï¼CPUããã¯è§£é¤ç¶æ 1787 1788 ã«æ»ãã®ã¯ã¿ã¹ã¯ã³ã³ããã¹ãã«éããï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§CPUããã¯è§£ 1789 é¤ç¶æ 1790 ã«æ»ããã¨ã¯ãªãï¼è¨ãæããã¨ï¼t_unlock_cpuãå¼ã³åºãããã®ã¯ï¼ 1791 t_lock_cpuã«ãã£ã¦CPUããã¯ç¶æ 1792 ã«ãªã£ã¦ããæã§ããï¼i_lock_cpuã«ãã£ã¦ 1793 CPUããã¯ç¶æ 1794 ã«ãªã£ã¦ããæã«ã¯ï¼t_unlock_cpuãå¼ã³åºããããã¨ã¯ãªãï¼ 1795 1796 åæ§ã«ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§CPUããã¯ç¶æ 1797 ã«é·ç§»ããå ´åã«ã¯ï¼CPUãã 1798 ã¯è§£é¤ç¶æ 1799 ã«æ»ãã®ã¯éã¿ã¹ã¯ã³ã³ããã¹ãã«éããï¼ã¿ã¹ã¯ã³ã³ããã¹ã㧠1800 CPUããã¯è§£é¤ç¶æ 1801 ã«æ»ããã¨ã¯ãªãï¼è¨ãæããã¨ï¼i_unlock_cpuãå¼ã³åºã 1802 ããã®ã¯ï¼i_lock_cpuã«ãã£ã¦CPUããã¯ç¶æ 1803 ã«ãªã£ã¦ããæã§ããï¼ 1804 t_lock_cpuã«ãã£ã¦CPUããã¯ç¶æ 1805 ã«ãªã£ã¦ããæã«ã¯ï¼i_unlock_cpuãå¼ã³åº 1806 ããããã¨ã¯ãªãï¼ 1807 1808 ãããã®é¢æ°ãå®ç¾ããéã«ã¯ï¼ã1.6 ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®åºå 1809 ¥å¦çã® 1810 å®ç¾ã«é¢ããå¶ç´ãã®ç¯ã«è¨è¿°ããã¦ããå¶ç´ã«å¾ããªããã°ãªããªãï¼ 1504 CPUロック状態から,CPUロック解除状態へ遷移させる関数.これらの関数は, 1505 CPUロック解除状態で呼び出されることはなく,呼び出された場合の動作は保証 1506 する必要がない. 1507 1508 タスクコンテキストでCPUロック状態に遷移した場合には,CPUロック解除状態 1509 に戻るのはタスクコンテキストに限られ,非タスクコンテキストでCPUロック解 1510 除状態に戻ることはない.言い換えると,t_unlock_cpuが呼び出されるのは, 1511 t_lock_cpuによってCPUロック状態になっている時である.i_lock_cpuによって 1512 CPUロック状態になっている時には,t_unlock_cpuが呼び出されることはない. 1513 1514 同様に,非タスクコンテキストでCPUロック状態に遷移した場合には,CPUロッ 1515 ク解除状態に戻るのは非タスクコンテキストに限られ,タスクコンテキストで 1516 CPUロック解除状態に戻ることはない.言い換えると,i_unlock_cpuが呼び出さ 1517 れるのは,i_lock_cpuによってCPUロック状態になっている時である. 1518 t_lock_cpuによってCPUロック状態になっている時には,i_unlock_cpuが呼び出 1519 されることはない. 1520 1521 これらの関数を実現する際には,「1.6 クリティカルセクションの出入処理の 1522 実現に関する制約」の節に記述されている制約に従わなければならない. 1811 1523 1812 1524 (6-3-3-7) bool_t t_sense_lock(void) … … 1814 1526 (6-3-3-9) bool_t x_sense_lock(void) 1815 1527 1816 ç¾å¨ã®ã·ã¹ãã ç¶æ 1817 ãï¼CPUããã¯ç¶æ 1818 ã®å ´åã¯trueï¼CPUããã¯è§£é¤ç¶æ 1819 ã®å ´ 1820 åã«ã¯falseãè¿ãé¢æ°ï¼ 1821 1822 ãããã®é¢æ°ãå 1823 ¨å²è¾¼ã¿ããã¯ç¶æ 1824 ã§å¼ã³åºãããç¶æ³ã¯èããå¿ 1825 è¦ããªãã 1826 ã¨ããï¼å 1827 ¨å²è¾¼ã¿ããã¯ç¶æ 1828 ã¨CPUããã¯ç¶æ 1829 ãåºå¥ã§ããå¿ 1830 è¦ã¯ãªãï¼NMI以 1831 å¤ã«ã«ã¼ãã«ã®ç®¡çå¤ã®å²è¾¼ã¿ãè¨ããªãå ´åã«ã¯ï¼å 1832 ¨å²è¾¼ã¿ããã¯ç¶æ 1833 㨠1834 CPUããã¯ç¶æ 1835 ãå 1836 ¨ãåä¸ã®ç¶æ 1837 ã§ããã¾ããªãï¼ 1838 1839 6.4 å²è¾¼ã¿ã«é¢é£ããã·ã¹ãã ç¶æ 1840 ã®ç®¡ç 1841 1842 6.4.1 å²è¾¼ã¿åªå 1843 度ãã¹ã¯ã®ç®¡ç 1844 1845 ã¿ã¼ã²ããä¾åé¨ã¯ï¼å²è¾¼ã¿åªå 1846 度ãã¹ã¯ãè¨å®ããæ©è½ã¨ï¼å²è¾¼ã¿åªå 1847 度ã 1848 ã¹ã¯ãåç 1849 §ããæ©è½ãæä¾ããï¼ 1850 1851 (6-4-1-1) bool_t VALID_INTPRI_CHGIPM(PRI intpri)ï¼ãªãã·ã§ã³ï¼ 1852 1853 intpriãï¼chg_ipmã«å¯¾ããå²è¾¼ã¿åªå 1854 度ã¨ãã¦æå¹ãªå¤ã§ããå ´åã«trueï¼ã 1855 ãã§ãªãå ´åã«falseãè¿ããã¯ãï¼æ¨æºã§ã¯ï¼TMIN_INTPRI以ä¸ï¼TIPM_ENAALL 1856 ï¼ï¼0ï¼ä»¥ä¸ã®å¤ãchg_ipmã«å¯¾ããå²è¾¼ã¿åªå 1857 度ã¨ãã¦æå¹ã§ãããï¼ã¿ã¼ã²ã 1858 ãä¾åé¨ã§ãã®ãã¯ããå®ç¾©ãããã¨ã§ï¼TMIN_INTPRIãããå°ããå¤ãæå¹ã¨ 1859 ãããã¨ãã§ããï¼æå¹ãªå¤ã®ç¯å²ãçãã¦ã¯ãªããªãï¼ï¼ 1528 現在のシステム状態が,CPUロック状態の場合はtrue,CPUロック解除状態の場 1529 合にはfalseを返す関数. 1530 1531 これらの関数が全割込みロック状態で呼び出される状況は考える必要がないこ 1532 とから,全割込みロック状態とCPUロック状態を区別できる必要はない.NMI以 1533 外にカーネルの管理外の割込みを設けない場合には,全割込みロック状態と 1534 CPUロック状態が全く同一の状態でもかまわない. 1535 1536 6.4 割込みに関連するシステム状態の管理 1537 1538 6.4.1 割込み優先度マスクの管理 1539 1540 ターゲット依存部は,割込み優先度マスクを設定する機能と,割込み優先度マ 1541 スクを参照する機能を提供する. 1542 1543 (6-4-1-1) bool_t VALID_INTPRI_CHGIPM(PRI intpri)(オプション) 1544 1545 intpriが,chg_ipmに対する割込み優先度として有効な値である場合にtrue,そ 1546 うでない場合にfalseを返すマクロ.標準では,TMIN_INTPRI以上,TIPM_ENAALL 1547 (=0)以下の値がchg_ipmに対する割込み優先度として有効であるが,ターゲッ 1548 ト依存部でこのマクロを定義することで,TMIN_INTPRIよりも小さい値を有効と 1549 することができる(有効な値の範囲を狭めてはならない). 1860 1550 1861 1551 (6-4-1-2) void x_set_ipm(PRI intpri) … … 1863 1553 (6-4-1-4) void i_set_ipm(PRI intpri) 1864 1554 1865 å²è¾¼ã¿åªå 1866 度ãã¹ã¯ã®å¤ãintpriã«è¨å®ããé¢æ°ï¼ 1867 1868 ãããã®é¢æ°ã¯ï¼CPUããã¯ç¶æ 1869 ã§ãCPUããã¯è§£é¤ç¶æ 1870 ã§ãå¼ã³åºããããã« 1871 å®è£ 1872 ããã®ãæã¾ããï¼ãã ãï¼x_set_ipmã¨t_set_ipmã¯ï¼ã¿ã¼ã²ããéä¾å 1873 é¨ãCPUããã¯è§£é¤ç¶æ 1874 ã§å¼ã³åºããã¨ã¯ãªãããï¼CPUããã¯è§£é¤ç¶æ 1875 ã§å¼ã³ 1876 åºãããå ´åã®åä½ã¯ä¿è¨¼ããå¿ 1877 è¦ããªãï¼i_set_ipmã¯ï¼CPUããã¯ç¶æ 1878 ã§ã 1879 CPUããã¯è§£é¤ç¶æ 1880 ã§ãå¼ã³åºããããã«å®è£ 1881 ããªããã°ãªããªãï¼ 1882 1883 ã¾ãï¼ãããã®é¢æ°ã¯ï¼VALID_INTPRI_CHGIPM(intpri)ãtrueãè¿ãintpriã«å¯¾ 1884 ãã¦ã®ã¿å¼ã°ããï¼intpriã«ããã§ãªãå¤ã渡ãããå ´åã®åä½ã¯ä¿è¨¼ããå¿ 1885 1886 è¦ããªãï¼ 1555 割込み優先度マスクの値をintpriに設定する関数. 1556 1557 これらの関数は,CPUロック状態でもCPUロック解除状態でも呼び出せるように 1558 実装するのが望ましい.ただし,x_set_ipmとt_set_ipmは,ターゲット非依存 1559 部がCPUロック解除状態で呼び出すことはないため,CPUロック解除状態で呼び 1560 出された場合の動作は保証する必要がない.i_set_ipmは,CPUロック状態でも 1561 CPUロック解除状態でも呼び出せるように実装しなければならない. 1562 1563 また,これらの関数は,VALID_INTPRI_CHGIPM(intpri)がtrueを返すintpriに対 1564 してのみ呼ばれる.intpriにそうでない値が渡された場合の動作は保証する必 1565 要がない. 1887 1566 1888 1567 (6-4-1-5) PRI x_get_ipm(void) … … 1890 1569 (6-4-1-7) PRI i_get_ipm(void) 1891 1570 1892 å²è¾¼ã¿åªå 1893 度ãã¹ã¯ã®å¤ãåç 1894 §ãã¦è¿ãé¢æ°ï¼ 1895 1896 ãããã®é¢æ°ã¯ï¼CPUããã¯ç¶æ 1897 ã§ãCPUããã¯è§£é¤ç¶æ 1898 ã§ãå¼ã³åºããããã« 1899 å®è£ 1900 ããã®ãæã¾ããï¼ãã ãï¼x_get_ipmã¨t_get_ipmã¯ï¼ã¿ã¼ã²ããéä¾å 1901 é¨ãCPUããã¯è§£é¤ç¶æ 1902 ã§å¼ã³åºããã¨ã¯ãªãããï¼CPUããã¯è§£é¤ç¶æ 1903 ã§å¼ã³ 1904 åºãããå ´åã®åä½ã¯ä¿è¨¼ããå¿ 1905 è¦ããªãï¼i_get_ipmã¯ï¼CPUããã¯ç¶æ 1906 ã§ã 1907 CPUããã¯è§£é¤ç¶æ 1908 ã§ãå¼ã³åºããããã«å®è£ 1909 ããªããã°ãªããªãï¼ 1910 1911 å²è¾¼ã¿åªå 1912 度ãã¹ã¯ãç¨ãã¦ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ããã¹ã¦ãã¹ã¯ããç¶æ 1913 ã¯ï¼ 1914 CPUããã¯ç¶æ 1915 ã¨åºå¥ã§ãããã¨ãå¿ 1916 è¦ã§ããï¼å 1917 ·ä½çã«ã¯ï¼CPUããã¯è§£é¤ç¶ 1918 æ 1919 ã«ããã¦ï¼x_set_ipmãç¨ãã¦ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ããã¹ã¦ãã¹ã¯ããå ´å 1920 ã§ãï¼x_sense_lockã¯falseãè¿ãï¼ 1921 1922 ããã«å¯¾ãã¦ï¼å²è¾¼ã¿åªå 1923 度ãã¹ã¯ãç¨ãã¦NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ããã¹ã¯ 1924 ã§ããå ´åï¼ãã®ç¶æ 1925 ã¨å 1926 ¨å²è¾¼ã¿ããã¯ç¶æ 1927 ãåºå¥ã§ããå¿ 1928 è¦ã¯ãªãï¼å 1929 ¨ãå 1930 ä¸ã®ç¶æ 1931 ã§ããã¾ããªãï¼ 1932 1933 6.4.2 å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ç®¡ç 1934 1935 ã¿ã¼ã²ããä¾åé¨ã¯ï¼å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ãã»ããããæ©è½ã¨ã¯ãªã¢ããæ© 1936 è½ãæä¾ããï¼ 1571 割込み優先度マスクの値を参照して返す関数. 1572 1573 これらの関数は,CPUロック状態でもCPUロック解除状態でも呼び出せるように 1574 実装するのが望ましい.ただし,x_get_ipmとt_get_ipmは,ターゲット非依存 1575 部がCPUロック解除状態で呼び出すことはないため,CPUロック解除状態で呼び 1576 出された場合の動作は保証する必要がない.i_get_ipmは,CPUロック状態でも 1577 CPUロック解除状態でも呼び出せるように実装しなければならない. 1578 1579 割込み優先度マスクを用いてカーネル管理の割込みをすべてマスクした状態は, 1580 CPUロック状態と区別できることが必要である.具体的には,CPUロック解除状 1581 態において,x_set_ipmを用いてカーネル管理の割込みをすべてマスクした場合 1582 でも,x_sense_lockはfalseを返す. 1583 1584 それに対して,割込み優先度マスクを用いてNMIを除くすべての割込みをマスク 1585 できる場合,その状態と全割込みロック状態を区別できる必要はなく,全く同 1586 一の状態でもかまわない. 1587 1588 6.4.2 割込み要求禁止フラグの管理 1589 1590 ターゲット依存部は,割込み要求禁止フラグをセットする機能とクリアする機 1591 能を提供する. 1937 1592 1938 1593 (6-4-2-1) bool_t VALID_INTNO_DISINT(INTNO intno) 1939 1594 1940 intno ãï¼dis_intï¼ena_intã«å¯¾ããå²è¾¼ã¿çªå·ã¨ãã¦æå¹ãªå¤ã§ããå ´åã«1941 true ï¼ããã§ãªãå ´åã«falseãè¿ããã¯ãï¼å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ãã»ããï¼1942 ã¯ãªã¢ã§ããªãintnoã«å¯¾ãã¦ã¯ï¼ãã®ãã¯ããfalseãè¿ãããã«ããï¼ 1595 intnoが,dis_int/ena_intに対する割込み番号として有効な値である場合に 1596 true,そうでない場合にfalseを返すマクロ.割込み要求禁止フラグがセット/ 1597 クリアできないintnoに対しては,このマクロがfalseを返すようにする. 1943 1598 1944 1599 (6-4-2-2) bool_t x_disable_int(INTNO intno) … … 1946 1601 (6-4-2-4) bool_t i_disable_int(INTNO intno) 1947 1602 1948 intnoã§æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ããå²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ãã»ãããï¼ 1949 trueãè¿ãé¢æ°ï¼æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦ï¼å²è¾¼ã¿å±æ§ãè¨å®ã 1950 ãã¦ããªãå ´åã«ã¯ï¼falseãè¿ãï¼ 1951 1952 ãããã®é¢æ°ã¯ï¼ã¿ã¼ã²ããéä¾åé¨ãCPUããã¯è§£é¤ç¶æ 1953 ã§å¼ã³åºããã¨ã¯ãª 1954 ãããï¼CPUããã¯è§£é¤ç¶æ 1955 ã§å¼ã³åºãããå ´åã®åä½ã¯ä¿è¨¼ããå¿ 1956 è¦ããªãï¼ 1957 ãã ãï¼ã¿ã¼ã²ããä¾åé¨ããCPUããã¯è§£é¤ç¶æ 1958 ã§å¼ã³åºãå ´åã«ã¯ï¼ä¿è¨¼ã 1959 ãå¿ 1960 è¦ãããï¼ 1961 1962 ã¾ãï¼ãããã®é¢æ°ã¯ï¼VALID_INTNO_DISINT(intno)ãtrueã¨ãªãintnoã«å¯¾ã 1963 ã¦ã®ã¿å¼ã°ããï¼intnoã«ããã§ãªãå¤ã渡ãããå ´åã®åä½ã¯ä¿è¨¼ããå¿ 1964 è¦ã 1965 ãªãï¼ 1966 1967 dis_intãµã¼ãã¹ã³ã¼ã«ããµãã¼ãããå ´åï¼TOPPERS_SUPPORT_DIS_INTãã㯠1968 ãå®ç¾©ããå ´åï¼ã«ã¯ï¼t_disable_intãç¨æããã¦ããªããã°ãªããªãï¼ 1603 intnoで指定された割込み要求ラインに対する割込み要求禁止フラグをセットし, 1604 trueを返す関数.指定された割込み要求ラインに対して,割込み属性が設定さ 1605 れていない場合には,falseを返す. 1606 1607 これらの関数は,ターゲット非依存部がCPUロック解除状態で呼び出すことはな 1608 いため,CPUロック解除状態で呼び出された場合の動作は保証する必要がない. 1609 ただし,ターゲット依存部からCPUロック解除状態で呼び出す場合には,保証す 1610 る必要がある. 1611 1612 また,これらの関数は,VALID_INTNO_DISINT(intno)がtrueとなるintnoに対し 1613 てのみ呼ばれる.intnoにそうでない値が渡された場合の動作は保証する必要が 1614 ない. 1615 1616 dis_intサービスコールをサポートする場合(TOPPERS_SUPPORT_DIS_INTをマク 1617 ロ定義する場合)には,t_disable_intが用意されていなければならない. 1969 1618 1970 1619 (6-4-2-5) bool_t x_enable_int(INTNO intno) … … 1972 1621 (6-4-2-7) bool_t i_enable_int(INTNO intno) 1973 1622 1974 intnoã§æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ããå²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ãã¯ãªã¢ãï¼ 1975 trueãè¿ãé¢æ°ï¼æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦ï¼å²è¾¼ã¿å±æ§ãè¨å®ã 1976 ãã¦ããªãå ´åã«ã¯ï¼falseãè¿ãï¼ 1977 1978 ãããã®é¢æ°ã¯ï¼ã¿ã¼ã²ããéä¾åé¨ãCPUããã¯è§£é¤ç¶æ 1979 ã§å¼ã³åºããã¨ã¯ãª 1980 ãããï¼CPUããã¯è§£é¤ç¶æ 1981 ã§å¼ã³åºãããå ´åã®åä½ã¯ä¿è¨¼ããå¿ 1982 è¦ããªãï¼ 1983 ãã ãï¼ã¿ã¼ã²ããä¾åé¨ããCPUããã¯è§£é¤ç¶æ 1984 ã§å¼ã³åºãå ´åã«ã¯ï¼ä¿è¨¼ã 1985 ãå¿ 1986 è¦ãããï¼ 1987 1988 ã¾ãï¼ãããã®é¢æ°ã¯ï¼VALID_INTNO_DISINT(intno)ãtrueã¨ãªãintnoã«å¯¾ã 1989 ã¦ã®ã¿å¼ã°ããï¼intnoã«ããã§ãªãå¤ã渡ãããå ´åã®åä½ã¯ä¿è¨¼ããå¿ 1990 è¦ã 1991 ãªãï¼ 1992 1993 ena_intãµã¼ãã¹ã³ã¼ã«ããµãã¼ãããå ´åï¼TOPPERS_SUPPORT_ENA_INTãã㯠1994 ãå®ç¾©ããå ´åï¼ã«ã¯ï¼t_enable_intãç¨æããã¦ããªããã°ãªããªãï¼ 1995 1996 6.4.3 å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ 1623 intnoで指定された割込み要求ラインに対する割込み要求禁止フラグをクリアし, 1624 trueを返す関数.指定された割込み要求ラインに対して,割込み属性が設定さ 1625 れていない場合には,falseを返す. 1626 1627 これらの関数は,ターゲット非依存部がCPUロック解除状態で呼び出すことはな 1628 いため,CPUロック解除状態で呼び出された場合の動作は保証する必要がない. 1629 ただし,ターゲット依存部からCPUロック解除状態で呼び出す場合には,保証す 1630 る必要がある. 1631 1632 また,これらの関数は,VALID_INTNO_DISINT(intno)がtrueとなるintnoに対し 1633 てのみ呼ばれる.intnoにそうでない値が渡された場合の動作は保証する必要が 1634 ない. 1635 1636 ena_intサービスコールをサポートする場合(TOPPERS_SUPPORT_ENA_INTをマク 1637 ロ定義する場合)には,t_enable_intが用意されていなければならない. 1638 1639 6.4.3 割込み要求のクリア 1997 1640 1998 1641 (6-4-3-1) void x_clear_int(INTNO intno) … … 2000 1643 (6-4-3-3) void i_clear_int(INTNO intno) 2001 1644 2002 intnoã§æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ãã¨ãã¸ããªã¬ã§ããå ´åã«ï¼ããªã¬ãã 2003 ãå²è¾¼ã¿è¦æ±ãã¯ãªã¢ããé¢æ°ï¼intnoã§æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ãã¬ãã« 2004 ããªã¬ã§ããå ´åã«ã¯ä½ãããªãï¼ 2005 2006 ASPã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ã¯ï¼ãããã®é¢æ°ãå¼ã³åºãã¦ããªããï¼ 2007 ã¿ã¼ã²ããä¾åé¨ãã·ã¹ãã ãµã¼ãã¹ã§å¼ã³åºãå¯è½æ§ãé«ãããï¼ç¨æãã 2008 ãã¨ã¨ãã¦ããï¼ãã®ããï¼ãããã®é¢æ°ãã©ã®ãããªã·ã¹ãã ç¶æ 2009 ã§å¼ã³åº 2010 ãããã¯ï¼ã¿ã¼ã²ããä¾åé¨å 2011 ã§ä¸è²«ãã¦ããã°ããï¼ 2012 2013 6.4.4 å²è¾¼ã¿è¦æ±ã®ããã¼ã 1645 intnoで指定された割込み要求ラインがエッジトリガである場合に,トリガされ 1646 た割込み要求をクリアする関数.intnoで指定された割込み要求ラインがレベル 1647 トリガである場合には何もしない. 1648 1649 ASPカーネルのターゲット非依存部では,これらの関数を呼び出していないが, 1650 ターゲット依存部やシステムサービスで呼び出す可能性が高いため,用意する 1651 こととしている.そのため,これらの関数がどのようなシステム状態で呼び出 1652 せるかは,ターゲット依存部内で一貫していればよい. 1653 1654 6.4.4 割込み要求のプローブ 2014 1655 2015 1656 (6-4-4-1) bool_t x_probe_int(INTNO intno) … … 2017 1658 (6-4-4-3) bool_t i_probe_int(INTNO intno) 2018 1659 2019 intnoã§æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦ï¼å²è¾¼ã¿ãè¦æ±ããã¦ããå ´åã« 2020 trueï¼ããã§ãªãå ´åã«falseãè¿ãé¢æ°ï¼ 2021 2022 ASPã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ã¯ï¼ãããã®é¢æ°ãå¼ã³åºãã¦ããªããï¼ 2023 ã¿ã¼ã²ããä¾åé¨ãã·ã¹ãã ãµã¼ãã¹ã§å¼ã³åºãå¯è½æ§ãé«ãããï¼ç¨æãã 2024 ãã¨ã¨ãã¦ããï¼ãã®ããï¼ãããã®é¢æ°ãã©ã®ãããªã·ã¹ãã ç¶æ 2025 ã§å¼ã³åº 2026 ãããã¯ï¼ã¿ã¼ã²ããä¾åé¨å 2027 ã§ä¸è²«ãã¦ããã°ããï¼ 2028 2029 6.4.5 å²è¾¼ã¿ãã³ãã©ã®å 2030 é å¦çã¨æ«å°¾å¦ç 1660 intnoで指定された割込み要求ラインに対して,割込みが要求されている場合に 1661 true,そうでない場合にfalseを返す関数. 1662 1663 ASPカーネルのターゲット非依存部では,これらの関数を呼び出していないが, 1664 ターゲット依存部やシステムサービスで呼び出す可能性が高いため,用意する 1665 こととしている.そのため,これらの関数がどのようなシステム状態で呼び出 1666 せるかは,ターゲット依存部内で一貫していればよい. 1667 1668 6.4.5 割込みハンドラの先頭処理と末尾処理 2031 1669 2032 1670 (6-4-5-1) void i_begin_int(INTNO intno) 2033 1671 2034 intnoã§æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ããå²è¾¼ã¿ãã³ãã©ã®å 2035 é ã§è¡ãã¹ã 2036 å¦çãè¡ãé¢æ°ï¼ããã§è¡ãã¹ãå¦çã¨ãã¦ã¯ï¼å²è¾¼ã¿è¦æ±ã©ã¤ã³ãã¨ãã¸ã 2037 ãªã¬ã§ããå ´åã®ããªã¬ãããå²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ãæããããï¼ 2038 2039 intnoã«å¯¾ãã¦ç»é²ãããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ãå¼ã³åºãå²è¾¼ã¿ãã³ãã©ã® 2040 å 2041 é ã§å¼ã³åºãããï¼ãã®ãããã®é¢æ°ã¯ï¼å²è¾¼ã¿ãã³ãã©ã®å 2042 é ï¼é常㯠2043 CPUããã¯è§£é¤ç¶æ 2044 ï¼ã§å¼ã³åºããããã«å®è£ 2045 ããªããã°ãªããªãï¼ 1672 intnoで指定された割込み要求ラインに対する割込みハンドラの先頭で行うべき 1673 処理を行う関数.ここで行うべき処理としては,割込み要求ラインがエッジト 1674 リガである場合のトリガされた割込み要求のクリアが挙げられる. 1675 1676 intnoに対して登録された割込みサービスルーチンを呼び出す割込みハンドラの 1677 先頭で呼び出される.そのためこの関数は,割込みハンドラの先頭(通常は 1678 CPUロック解除状態)で呼び出せるように実装しなければならない. 2046 1679 2047 1680 (6-4-5-2) void i_end_int(INTNO intno) 2048 1681 2049 intnoã§æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ããå²è¾¼ã¿ãã³ãã©ã®æ«å°¾ã§è¡ãã¹ã 2050 å¦çãè¡ãé¢æ°ï¼ããã§è¡ãã¹ãå¦çã¨ãã¦ã¯ï¼å²è¾¼ã¿ã³ã³ããã¼ã©ï¼IRCï¼ã« 2051 対ããå²è¾¼ã¿å¦çã®çµäºéç¥ãæããããï¼ 2052 2053 intnoã«å¯¾ãã¦ç»é²ãããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ãå¼ã³åºãå²è¾¼ã¿ãã³ãã©ã® 2054 æ«å°¾ã§å¼ã³åºãããï¼ãã®ãããã®é¢æ°ã¯ï¼å²è¾¼ã¿ãã³ãã©ã®æ«å°¾ï¼é常㯠2055 CPUããã¯è§£é¤ç¶æ 2056 ï¼ã§å¼ã³åºããããã«å®è£ 2057 ããªããã°ãªããªãï¼ 2058 2059 ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼IRCã«å¯¾ããå²è¾¼ã¿å¦çã®çµäºéç¥ãè¡ãåã«ï¼ãã¹ã¦ 2060 ã®å²è¾¼ã¿ãç¦æ¢ããªããã°ãªããªãå ´åãããï¼ãã®å ´åã«ã¯ï¼ãã®é¢æ°ã®ä¸ 2061 ã§å²è¾¼ã¿ãç¦æ¢ãï¼ãã®ç¶æ 2062 ã®ã¾ã¾ï¼å²è¾¼ã¿ãã³ãã©ãããªã¿ã¼ã³ããï¼å²è¾¼ 2063 ã¿ãã³ãã©ããã®ãªã¿ã¼ã³åã«ã¯ï¼å²è¾¼ã¿ç¦æ¢ã解é¤ããã®ãååã§ãããï¼ 2064 å²è¾¼ã¿ãã³ãã©ã®åºå£å¦çã§å 2065 ã«æ»ãå¦çãè¡ãã®ã§å·®ãæ¯ããªãã¯ãã§ããï¼ 2066 å²è¾¼ã¿ãã³ãã©ã®åºå£å¦çãï¼ããã§å·®ãæ¯ããªãå®è£ 2067 ã«ãªã£ã¦ãããã¨ã確 2068 èªããã¹ãã§ããï¼ 2069 2070 6.5 ã¿ã¹ã¯ãã£ã¹ããã㣠2071 2072 6.5.1 ã¿ã¹ã¯ã³ã³ããã¹ããããã¯ã¨ã¿ã¹ã¯åæåã³ã³ããã¹ãããã㯠1682 intnoで指定された割込み要求ラインに対する割込みハンドラの末尾で行うべき 1683 処理を行う関数.ここで行うべき処理としては,割込みコントローラ(IRC)に 1684 対する割込み処理の終了通知が挙げられる. 1685 1686 intnoに対して登録された割込みサービスルーチンを呼び出す割込みハンドラの 1687 末尾で呼び出される.そのためこの関数は,割込みハンドラの末尾(通常は 1688 CPUロック解除状態)で呼び出せるように実装しなければならない. 1689 1690 ターゲットによっては,IRCに対する割込み処理の終了通知を行う前に,すべて 1691 の割込みを禁止しなければならない場合がある.この場合には,この関数の中 1692 で割込みを禁止し,その状態のまま,割込みハンドラからリターンする.割込 1693 みハンドラからのリターン前には,割込み禁止を解除するのが原則であるが, 1694 割込みハンドラの出口処理で元に戻す処理を行うので差し支えないはずである. 1695 割込みハンドラの出口処理が,これで差し支えない実装になっていることを確 1696 認するべきである. 1697 1698 6.5 タスクディスパッチャ 1699 1700 6.5.1 タスクコンテキストブロックとタスク初期化コンテキストブロック 2073 1701 2074 1702 (6-5-1-1) TSKCTXB 2075 1703 2076 ã¿ã¼ã²ããä¾åã®ã¿ã¹ã¯ã³ã³ããã¹ããä¿åããããã«ï¼TCBä¸ã«æã¤ãã¨ãå¿ 2077 2078 è¦ãªãã¼ã¿æ§é ã®åãï¼TSKCTXBã«å®ç¾©ããï¼æ¨æºçã«ã¯ï¼TSKCTXBã«ã¯ï¼ã¿ã¹ 2079 ã¯ã®ã¹ã¿ãã¯ãã¤ã³ã¿ã¨å®è¡åéçªå°ãæ ¼ç´ããï¼ 2080 2081 (6-5-1-2) USE_TSKINICTXBï¼ãªãã·ã§ã³ï¼ 2082 (6-5-1-3) TSKINICTXBï¼ãªãã·ã§ã³ï¼ 2083 2084 ã¿ã¼ã²ããä¾åã®æ 2085 å ±ãã¿ã¹ã¯åæåãããã¯ï¼TINIBï¼ã«å 2086 ¥ãããå ´åãï¼ 2087 TINIBä¸ã®ã¹ã¿ãã¯é åã®ãµã¤ãºã¨å 2088 é çªå°ã®æã¡æ¹ãã¿ã¼ã²ããä¾åã«å¤æ´ã 2089 ããå ´åã«ã¯ï¼USE_TSKINICTXBããã¯ãå®ç¾©ãï¼TINIBä¸ã«æã¤ãã¨ãå¿ 2090 è¦ãªãã¼ 2091 ã¿æ§é ã®åãï¼TSKINICTXBã«å®ç¾©ããï¼ 2092 2093 USE_TSKINICTXBããã¯ãå®ç¾©ããã¨ï¼TINIBä¸ã«ã¹ã¿ãã¯é åã¨ãµã¤ãºã¨å 2094 é çª 2095 å°ãå«ã¾ããªããªãããï¼ããã«ä»£ããæ 2096 å ±ãTSKINICTXBä¸ã«æã¤å¿ 2097 è¦ãããï¼ 2098 ã¾ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾å 2099 é¨ã§ï¼TSKINICTXBã®åæåæ 2100 å ±ãçæããããã®GENERATE_TSKINICTXBãï¼ãã¹ 2101 3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ï¼TINIBããã¹ã¿ãã¯é åã® 2102 å 2103 é çªå°ãåãåºãããã®GET_STK_TSKINICTXBãå®ç¾©ããå¿ 2104 è¦ãããï¼ 2105 2106 6.5.2 ãã£ã¹ãããã£æ¬ä½ 2107 2108 ãã£ã¹ãããã£æ¬ä½ï¼dispatcherï¼ã¯ï¼ã¿ã¼ã²ããéä¾åé¨ããç´æ¥å¼ã³åºã 2109 ãããã¨ã¯ãªãï¼ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã®å 2110 é¨ããã®ã¿å¼ã³åºãããï¼ 2111 dispatcherã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 2112 ã»å²è¾¼ã¿åªå 2113 度ãã¹ã¯å 2114 ¨è§£ 2115 é¤ç¶æ 2116 ã»ãã£ã¹ããã許å¯ç¶æ 2117 ã§å¼ã³åºãããï¼ 2118 2119 dispatcherã®å¦çå 2120 容ã¯æ¬¡ã®éãï¼ 1704 ターゲット依存のタスクコンテキストを保存するために,TCB中に持つことが必 1705 要なデータ構造の型を,TSKCTXBに定義する.標準的には,TSKCTXBには,タス 1706 クのスタックポインタと実行再開番地を格納する. 1707 1708 (6-5-1-2) USE_TSKINICTXB(オプション) 1709 (6-5-1-3) TSKINICTXB(オプション) 1710 1711 ターゲット依存の情報をタスク初期化ブロック(TINIB)に入れたい場合や, 1712 TINIB中のスタック領域のサイズと先頭番地の持ち方をターゲット依存に変更し 1713 たい場合には,USE_TSKINICTXBをマクロ定義し,TINIB中に持つことが必要なデー 1714 タ構造の型を,TSKINICTXBに定義する. 1715 1716 USE_TSKINICTXBをマクロ定義すると,TINIB中にスタック領域とサイズと先頭番 1717 地が含まれなくなるため,それに代わる情報をTSKINICTXB中に持つ必要がある. 1718 また,コンフィギュレータのパス2のテンプレートファイルのターゲット非依存 1719 部で,TSKINICTXBの初期化情報を生成するためのGENERATE_TSKINICTXBを,パス 1720 3のテンプレートファイルのターゲット非依存部で,TINIBからスタック領域の 1721 先頭番地を取り出すためのGET_STK_TSKINICTXBを定義する必要がある. 1722 1723 6.5.2 ディスパッチャ本体 1724 1725 ディスパッチャ本体(dispatcher)は,ターゲット非依存部から直接呼び出さ 1726 れることはなく,カーネルのターゲット依存部の内部からのみ呼び出される. 1727 dispatcherは,タスクコンテキスト・CPUロック状態・割込み優先度マスク全解 1728 除状態・ディスパッチ許可状態で呼び出される. 1729 1730 dispatcherの処理内容は次の通り. 2121 1731 2122 1732 ---------------------------------------- … … 2129 1739 dispatcher_0: 2130 1740 while ((p_runtsk = p_schedtsk) == NULL) { 2131 å²è¾¼ã¿ã許å¯ãããCPUããã¯è§£é¤ç¶æ 2132 ã«ãªãããæºåãã 2133 éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã ⦠(*1) 1741 割込みを許可したらCPUロック解除状態になるよう準備する 1742 非タスクコンテキストに切り換える … (*1) 2134 1743 do { 2135 å²è¾¼ã¿ããã¹ã¦è¨±å¯ãï¼å²è¾¼ã¿çºçãå¾ 2136 㤠⦠(*2) 2137 å²è¾¼ã¿è¨±å¯åã®ç¶æ 2138 ã«æ»ãï¼ï¼ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããï¼ 1744 割込みをすべて許可し,割込み発生を待つ … (*2) 1745 割込み許可前の状態に戻す(=カーネル管理の割込みを禁止する) 2139 1746 } while (!reqflg); 2140 1747 reqflg = false; 2141 ã¿ã¹ã¯ã³ã³ããã¹ãã«æ»ã ⦠(*1) 2142 CPUããã¯ç¶æ 2143 ã«æ»ã ... (*3) 1748 タスクコンテキストに戻す … (*1) 1749 CPUロック状態に戻す ... (*3) 2144 1750 } 2145 èªã¿ã¹ã¯ï¼p_runtskï¼ã®TCBããã¹ã¿ãã¯ãã¤ã³ã¿ã復帰ãã1751 自タスク(p_runtsk)のTCBからスタックポインタを復帰する 2146 1752 #ifdef LOG_DSP_LEAVE 2147 1753 log_dsp_leave(p_runtsk); 2148 1754 #endif /* LOG_DSP_LEAVE */ 2149 èªã¿ã¹ã¯ã®TCBããå®è¡åéçªå°ã復帰ãï¼ããã¸åå²ãã â¦(*a)1755 自タスクのTCBから実行再開番地を復帰し,そこへ分岐する … (*a) 2150 1756 } 2151 1757 ---------------------------------------- 2152 1758 2153 å²è¾¼ã¿çºçãå¾ 2154 ã¤éã«éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæããã®ã¯ï¼ãã®éã«å®è¡ 2155 ãããå²è¾¼ã¿ãã³ãã©å 2156 ã§ï¼ã¿ã¹ã¯ãã£ã¹ããããããªãããã«ããããã§ã 2157 ãï¼ãã®æï¼å²è¾¼ã¿ãã³ãã©ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã使ãã 2158 ãã«ããªããã°ãªããªãï¼é常ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæããéã«é 2159 ã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã«æ»ãéã« 2160 å 2161 ã®ã¹ã¿ãã¯ã«åãæããï¼ 2162 2163 ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼ç¹ã«ï¼ã·ãã¥ã¬ã¼ã·ã§ã³ç°å¢ã®å ´åï¼ï¼å¼·å¶çã«éã¿ 2164 ã¹ã¯ã³ã³ããã¹ãã«åãæãããã¨ãé£ããå ´åãããï¼ãã®å ´åã«ã¯ï¼ãã® 2165 éã«å®è¡ãããå²è¾¼ã¿ãã³ãã©å 2166 ã§ã¿ã¹ã¯ãã£ã¹ããããããªããããªä»çµã¿ 2167 ãå®è£ 2168 ãããã¨ã§ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã¸ã®åæããçç¥ãããã¨ãã§ããï¼ 2169 2170 (*1)ã®éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæããå¦çã¨ã¿ã¹ã¯ã³ã³ããã¹ãã«æ»ãå¦ 2171 çã¯ï¼doã«ã¼ãã®ä¸ã§è¡ã£ã¦ãããï¼ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼å²è¾¼ã¿ã®è¨±å¯ï¼ 2172 ç¦æ¢ã¨ã¾ã¨ãã¦å¦çããæ¹ãå¹çãè¯ãï¼ï¼ 2173 2174 (*2)ã«ããã¦ï¼å²è¾¼ã¿ã許å¯ããå¦çã¨ï¼å²è¾¼ã¿çºçãå¾ 2175 ã¤å¦çã¨ã¯ï¼ä¸å¯å 2176 ã«è¡ãªãå¿ 2177 è¦ãããï¼ãããä¸å¯åã«è¡ãªããªãå ´åï¼å²è¾¼ã¿ã許å¯ããç´å¾ 2178 ã«å²è¾¼ã¿ãå 2179 ¥ãï¼ãã®ä¸ã§ã¿ã¹ã¯ãå®è¡å¯è½ç¶æ 2180 ã«ãªãã¨ï¼å®è¡ãã¹ãã¿ã¹ã¯ 2181 ãããã«ããããããããã»ããµãå²è¾¼ã¿å¾ 2182 ã¡ã«ãªã£ã¦ãã¾ãï¼ 2183 2184 ã¾ãï¼(*2)ã«ããã¦ï¼å²è¾¼ã¿çºçãå¾ 2185 ã¤å½ä»¤ãç¨æããã¦ããªãå ´åãï¼ãã 2186 ãçºè¡ããã®ãä¸é½åãªå ´åã«ã¯ï¼å²è¾¼ã¿ããã¹ã¦è¨±å¯ãã¦å²è¾¼ã¿ãåãä»ã 2187 ãããç¶æ 2188 ã«ãªã£ãå¾ã«ï¼å²è¾¼ã¿çºçãå¾ 2189 ããã«æ¬¡ã«é²ãã§ãããï¼ãã®å ´åï¼ 2190 ãã®å¤å´ã®doã«ã¼ãã«ãã£ã¦ï¼å²è¾¼ã¿çºçãå¾ 2191 ã¤ãã¨ã«ãªãï¼ 2192 2193 CPUããã¯ã解é¤ããããã®æ 2194 å ±ï¼ä¾ãã°ï¼CPUããã¯åã®å²è¾¼ã¿åªå 2195 度ãã¹ã¯ï¼ 2196 ãå¤æ°ã«ä¿æãã¦ããå ´åã«ã¯ï¼(*3)ã§CPUããã¯ç¶æ 2197 ã«æ»ãéã«ï¼ãã®å¤æ°ã® 2198 å¤ãå 2199 ã«æ»ã£ã¦ããå¿ 2200 è¦ãããï¼ç¹ã«ï¼ãã®å¤æ°ãï¼å²è¾¼ã¿å¾ 2201 ã¡ã®éã«å®è¡ã 2202 ãå²è¾¼ã¿ãã³ãã©å 2203 ã§æ¸ãæããããå ´åã¯ï¼å 2204 ã®å¤ã«æ»ããã¨ãå¿ 2205 è¦ã§ããï¼ 2206 2207 å²è¾¼ã¿å¾ 2208 ã¡ã®éã¯ï¼p_runtskãNULLï¼ï¼0ï¼ã«è¨å®ããªããã°ãªããªãï¼ä¸ã®å¦ 2209 çå 2210 容ããã®ã¾ã¾å®è£ 2211 ããã°ãããªãï¼ï¼ãã®ããã«è¨å®ããªãã¨ï¼å²è¾¼ã¿ã 2212 ã³ãã©ããiget_tidãå¼ã³åºããéã®åä½ãä»æ§ã«åè´ããªããªãï¼ 2213 2214 dispatcherãã¢ã»ã³ããªè¨èªã§è¨è¿°ããå ´åã«ã¯ï¼ãã¬ã¼ã¹ãã°åå¾å¦çã¯ï¼ 2215 ã6.2 ãã¬ã¼ã¹ãã°æ©è½ã¸ã®å¯¾å¿ãã®ç¯ã§è¨è¿°ããæ¹æ³ã§ã³ã¼ãã£ã³ã°ããã 2216 ã¨ï¼ãªãï¼log_dsp_enterã¯åæãåã®ã¿ã¹ã¯ã®ã¹ã¿ãã¯ã§ï¼log_dsp_leave 㯠2217 åæãå¾ã®ã¿ã¹ã¯ã®ã¹ã¿ãã¯ã§å®è¡ããï¼ 2218 2219 6.5.3 ã¿ã¹ã¯ã³ã³ããã¹ãããã®ãã£ã¹ããã 1759 割込み発生を待つ間に非タスクコンテキストに切り換えるのは,この間に実行 1760 される割込みハンドラ内で,タスクディスパッチをしないようにするためであ 1761 る.この時,割込みハンドラが,非タスクコンテキスト用のスタックを使うよ 1762 うにしなければならない.通常は,非タスクコンテキストに切り換える際に非 1763 タスクコンテキスト用のスタックに切り換え,タスクコンテキストに戻す際に 1764 元のスタックに切り換える. 1765 1766 ターゲットによっては(特に,シミュレーション環境の場合),強制的に非タ 1767 スクコンテキストに切り換えることが難しい場合がある.その場合には,この 1768 間に実行される割込みハンドラ内でタスクディスパッチをしないような仕組み 1769 を実装することで,非タスクコンテキストへの切換えを省略することができる. 1770 1771 (*1)の非タスクコンテキストに切り換える処理とタスクコンテキストに戻す処 1772 理は,doループの中で行ってもよい(ターゲットによっては,割込みの許可/ 1773 禁止とまとめて処理した方が効率が良い). 1774 1775 (*2)において,割込みを許可する処理と,割込み発生を待つ処理とは,不可分 1776 に行なう必要がある.これを不可分に行なわない場合,割込みを許可した直後 1777 に割込みが入り,その中でタスクが実行可能状態になると,実行すべきタスク 1778 があるにもかかわらずプロセッサが割込み待ちになってしまう. 1779 1780 また,(*2)において,割込み発生を待つ命令が用意されていない場合や,それ 1781 を発行するのが不都合な場合には,割込みをすべて許可して割込みを受け付け 1782 られる状態になった後に,割込み発生を待たずに次に進んでもよい.この場合, 1783 その外側のdoループによって,割込み発生を待つことになる. 1784 1785 CPUロックを解除するための情報(例えば,CPUロック前の割込み優先度マスク) 1786 を変数に保持している場合には,(*3)でCPUロック状態に戻す際に,その変数の 1787 値も元に戻っている必要がある.特に,その変数が,割込み待ちの間に実行し 1788 た割込みハンドラ内で書き換えられる場合は,元の値に戻すことが必要である. 1789 1790 割込み待ちの間は,p_runtskをNULL(=0)に設定しなければならない(上の処 1791 理内容をそのまま実装すればこうなる).このように設定しないと,割込みハ 1792 ンドラからiget_tidを呼び出した際の動作が仕様に合致しなくなる. 1793 1794 dispatcherをアセンブリ言語で記述する場合には,トレースログ取得処理は, 1795 「6.2 トレースログ機能への対応」の節で記述した方法でコーディングするこ 1796 と.なお,log_dsp_enterは切換え前のタスクのスタックで,log_dsp_leave は 1797 切換え後のタスクのスタックで実行する. 1798 1799 6.5.3 タスクコンテキストからのディスパッチ 2220 1800 2221 1801 (6-5-3-1) void dispatch(void) 2222 (6-5-3-2) OMIT_CALLTEXï¼ãªãã·ã§ã³ï¼ 2223 2224 ã¿ã¹ã¯ã³ã³ããã¹ãããã®ãã£ã¹ãããï¼dispatchï¼ã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ã 2225 ç¨ã®ãµã¼ãã¹ã³ã¼ã«å¦çã«ããã¦ã¿ã¹ã¯åæããå¿ 2226 è¦ã«ãªã£ãå ´åã«ï¼ã¿ã¼ã²ã 2227 ãéä¾åé¨ã®ãµã¼ãã¹ã³ã¼ã«å¦çé¢æ°ããå¼ã³åºãããï¼ 2228 2229 dispatchã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 2230 ã»å²è¾¼ã¿åªå 2231 度ãã¹ã¯å 2232 ¨è§£é¤ 2233 ç¶æ 2234 ã»ãã£ã¹ããã許å¯ç¶æ 2235 ã§å¼ã³åºãããï¼ 2236 2237 dispatchã®å¦çå 2238 容ã¯æ¬¡ã®éãï¼ 1802 (6-5-3-2) OMIT_CALLTEX(オプション) 1803 1804 タスクコンテキストからのディスパッチ(dispatch)は,タスクコンテキスト 1805 用のサービスコール処理においてタスク切換えが必要になった場合に,ターゲッ 1806 ト非依存部のサービスコール処理関数から呼び出される. 1807 1808 dispatchは,タスクコンテキスト・CPUロック状態・割込み優先度マスク全解除 1809 状態・ディスパッチ許可状態で呼び出される. 1810 1811 dispatchの処理内容は次の通り. 2239 1812 2240 1813 ---------------------------------------- … … 2243 1816 { 2244 1817 #ifdef TOPPERS_SUPPORT_OVRHDR 2245 ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢*/1818 ovrtimer_stop(); /* オーバランタイマの停止 */ 2246 1819 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2247 ã¹ã¯ã©ããã¬ã¸ã¹ã¿(*)ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã2248 ã¹ã¿ãã¯ãã¤ã³ã¿ãèªã¿ã¹ã¯ï¼p_runtskï¼ã®TCBã«ä¿åãã2249 dispatch_r ãï¼å®è¡åéçªå°ã¨ãã¦èªã¿ã¹ã¯ã®TCBã«ä¿åãã â¦(*a)2250 dispatcher ã«åå²ãã1820 スクラッチレジスタ(*)を除くすべてのレジスタをスタックに保存する 1821 スタックポインタを自タスク(p_runtsk)のTCBに保存する 1822 dispatch_rを,実行再開番地として自タスクのTCBに保存する … (*a) 1823 dispatcherに分岐する 2251 1824 2252 1825 dispatch_r: 2253 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã1826 スクラッチレジスタを除くすべてのレジスタをスタックから復帰する 2254 1827 #ifdef TOPPERS_SUPPORT_OVRHDR 2255 ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§*/1828 ovrtimer_start(); /* オーバランタイマの動作開始 */ 2256 1829 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2257 calltex(); â¦(*b)1830 calltex(); … (*b) 2258 1831 } 2259 1832 ---------------------------------------- 2260 1833 2261 ããã§ã¹ã¯ã©ããã¬ã¸ã¹ã¿(*)ã¨ã¯ï¼é¢æ°å¼åºãã«ããä¿åãããªãã¬ã¸ã¹ã¿ã® 2262 ãã¨ã§ããï¼å¿ 2263 è¦ãªå ´åã«ã¯ï¼é¢æ°ãå¼ã³åºãå´ã§ä¿åããªããã°ãªããªãã 2264 ãï¼caller saved registerã¨å¼ã°ããå ´åãããï¼ 2265 2266 dispatchãå¼ã³åºããã¿ã¹ã¯ã次ã«å®è¡ãããæã«ã¯ï¼å®è¡åéçªå°ã¨ãã¦ç» 2267 é²ããdispatch_rã«æ»ã£ã¦ããï¼dispatch_rã«ã¯ï¼dispatcherã®ã¿ããåå²ãï¼ 2268 ãã®æã®ç¶æ 2269 ã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 2270 ã»å²è¾¼ã¿åªå 2271 度ãã¹ã¯å 2272 ¨ 2273 解é¤ç¶æ 2274 ã»ãã£ã¹ããã許å¯ç¶æ 2275 ã§ããï¼ 2276 2277 (*b)ã§calltexãå¼ã¶ä»£ããã«ï¼calltexã®å¦çå 2278 容ï¼p_runtsk->enatexãtrue 2279 ã§ï¼p_runtsk->texptnã0ã§ãªãï¼ipmflgãtrueã®å ´åã«ï¼call_texrtnãå¼ã¶ï¼ 2280 ãããã«ã¤ã³ã©ã¤ã³å±éããæ¹ãå¹çãããï¼ã¿ã¼ã²ããéä¾åé¨ã®calltexã 2281 使ããªãå ´åã«ã¯ï¼OMIT_CALLTEXããã¯ãå®ç¾©ãããã¨ã§ï¼ã¿ã¼ã²ããéä¾å 2282 é¨ããcalltexãåãé¤ããã¨ãã§ããï¼ 2283 2284 6.5.4 ãã£ã¹ãããã£ã®åä½éå§ 1834 ここでスクラッチレジスタ(*)とは,関数呼出しにより保存されないレジスタの 1835 ことである.必要な場合には,関数を呼び出す側で保存しなければならないた 1836 め,caller saved registerと呼ばれる場合もある. 1837 1838 dispatchを呼び出したタスクが次に実行される時には,実行再開番地として登 1839 録したdispatch_rに戻ってくる.dispatch_rには,dispatcherのみから分岐し, 1840 その時の状態は,タスクコンテキスト・CPUロック状態・割込み優先度マスク全 1841 解除状態・ディスパッチ許可状態である. 1842 1843 (*b)でcalltexを呼ぶ代わりに,calltexの処理内容(p_runtsk->enatexがtrue 1844 で,p_runtsk->texptnが0でなく,ipmflgがtrueの場合に,call_texrtnを呼ぶ) 1845 をここにインライン展開した方が効率がよい.ターゲット非依存部のcalltexを 1846 使わない場合には,OMIT_CALLTEXをマクロ定義することで,ターゲット非依存 1847 部からcalltexを取り除くことができる. 1848 1849 6.5.4 ディスパッチャの動作開始 2285 1850 2286 1851 (6-5-4-1) void start_dispatch(void) 2287 1852 2288 ãã£ã¹ãããã£ã®åä½éå§ï¼start_dispatchï¼ã¯ï¼ã«ã¼ãã«èµ·åæã«ï¼ã«ã¼ã 2289 ã«ã®åæåå¦çããå¼ã³åºãããï¼start_dispatchã¯ï¼ãªã¿ã¼ã³ãããã¨ã®ãª 2290 ãé¢æ°ã§ããï¼ 2291 2292 start_dispatchã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§ï¼NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ããã¹ 2293 ã¯ããç¶æ 2294 ï¼å 2295 ¨å²è¾¼ã¿ããã¯ç¶æ 2296 ã¨åçã®ç¶æ 2297 ï¼ã§å¼ã³åºãããï¼start_dispatch 2298 å 2299 ã§ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãï¼CPUããã¯ç¶æ 2300 ã»å²è¾¼ã¿åªå 2301 度ãã¹ã¯å 2302 ¨ 2303 解é¤ç¶æ 2304 ã«ããªããã°ãªããªãï¼ 2305 2306 start_dispatchã®å¦çå 2307 容ã¯æ¬¡ã®éãï¼ 1853 ディスパッチャの動作開始(start_dispatch)は,カーネル起動時に,カーネ 1854 ルの初期化処理から呼び出される.start_dispatchは,リターンすることのな 1855 い関数である. 1856 1857 start_dispatchは,非タスクコンテキストで,NMIを除くすべての割込みをマス 1858 クした状態(全割込みロック状態と同等の状態)で呼び出される.start_dispatch 1859 内で,タスクコンテキストに切り換え,CPUロック状態・割込み優先度マスク全 1860 解除状態にしなければならない. 1861 1862 start_dispatchの処理内容は次の通り. 2308 1863 2309 1864 ---------------------------------------- … … 2311 1866 start_dispatch(void) 2312 1867 { 2313 ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã 2314 CPUããã¯ç¶æ 2315 ã»å²è¾¼ã¿åªå 2316 度ãã¹ã¯å 2317 ¨è§£é¤ç¶æ 2318 ã«ãã 2319 dispatcher_0ã«åå²ãã 1868 タスクコンテキストに切り換える 1869 CPUロック状態・割込み優先度マスク全解除状態にする 1870 dispatcher_0に分岐する 2320 1871 } 2321 1872 ---------------------------------------- 2322 1873 2323 6.5.5 ç¾å¨ã®ã³ã³ããã¹ããæ¨ã¦ã¦ãã£ã¹ããã1874 6.5.5 現在のコンテキストを捨ててディスパッチ 2324 1875 2325 1876 (6-5-5-1) void exit_and_dispatch(void) 2326 1877 2327 ç¾å¨ã®ã³ã³ããã¹ããæ¨ã¦ã¦ãã£ã¹ãããï¼exit_and_dispatchï¼ã¯ï¼èªã¿ã¹ã¯ 2328 ãçµäºããããµã¼ãã¹ã³ã¼ã«å¦çé¢æ°ããå¼ã³åºãããï¼exit_and_dispatchã¯ï¼ 2329 ãªã¿ã¼ã³ãããã¨ã®ãªãé¢æ°ã§ããï¼ 2330 2331 exit_and_dispatchã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 2332 ã»å²è¾¼ã¿åªå 2333 度ã 2334 ã¹ã¯å 2335 ¨è§£é¤ç¶æ 2336 ã»ãã£ã¹ããã許å¯ç¶æ 2337 ã§å¼ã³åºãããï¼ 2338 2339 exit_and_dispatchã®å¦çå 2340 容ã¯æ¬¡ã®éãï¼ 1878 現在のコンテキストを捨ててディスパッチ(exit_and_dispatch)は,自タスク 1879 を終了させるサービスコール処理関数から呼び出される.exit_and_dispatchは, 1880 リターンすることのない関数である. 1881 1882 exit_and_dispatchは,タスクコンテキスト・CPUロック状態・割込み優先度マ 1883 スク全解除状態・ディスパッチ許可状態で呼び出される. 1884 1885 exit_and_dispatchの処理内容は次の通り. 2341 1886 2342 1887 ---------------------------------------- … … 2344 1889 exit_and_dispatch(void) 2345 1890 { 2346 dispatcher ã«åå²ãã1891 dispatcherに分岐する 2347 1892 } 2348 1893 ---------------------------------------- 2349 1894 2350 6.5.6 ã¿ã¹ã¯ã®èµ·åå¦ç1895 6.5.6 タスクの起動処理 2351 1896 2352 1897 (6-5-6-1) void activate_context(TCB *p_tcb) 2353 1898 2354 ã¿ã¹ã¯ã®èµ·åå¦çï¼activate_contextï¼ã¯ï¼ã¿ã¹ã¯ãä¼æ¢ç¶æ 2355 ããå®è¡ã§ãã 2356 ç¶æ 2357 ã«ããæã«å¼ã°ãï¼p_tcbã§æå®ãããã¿ã¹ã¯ï¼å¯¾è±¡ã¿ã¹ã¯ï¼ã®TCBä¸ã®ã¹ 2358 ã¿ãã¯ãã¤ã³ã¿ãåæåãï¼å®è¡åéçªå°ãã¿ã¹ã¯éå§æå¦çï¼start_rï¼ã«è¨ 2359 å®ããï¼ãã®æç¹ã§ã¯ï¼å¾è¿°ããçç±ã§ï¼å¯¾è±¡ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã使ã£ã¦ 2360 ã¯ãªããªãï¼ 2361 2362 対象ã¿ã¹ã¯ãæåã«å®è¡ãããæã«ã¯ï¼å¯¾è±¡ã¿ã¹ã¯ãèªã¿ã¹ã¯ã¨ãã¦ï¼å®è¡å 2363 éçªå°ã¨ãã¦ç»é²ããstart_rã«åå²ãã¦ããï¼start_rã«ã¯ï¼dispatcherã®ã¿ 2364 ããåå²ãï¼ãã®æã®ç¶æ 2365 ã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 2366 ã»å²è¾¼ã¿åª 2367 å 2368 度ãã¹ã¯å 2369 ¨è§£é¤ç¶æ 2370 ã»ãã£ã¹ããã許å¯ç¶æ 2371 ã§ããï¼ 2372 2373 start_rã¯ï¼CPUããã¯ç¶æ 2374 ã解é¤ããå¾ï¼ã¿ã¹ã¯ã®èµ·åçªå°ãå¼ã³åºãï¼ãã 2375 ã«ï¼ã¿ã¹ã¯ã®èµ·åçªå°ããæ»ã£ã¦ããå ´åã«ã¯ï¼ext_tskãå¼ã³åºãï¼ 2376 2377 activate_contextã¨start_rã®å¦çå 2378 容ã¯æ¬¡ã®éãï¼ 1899 タスクの起動処理(activate_context)は,タスクを休止状態から実行できる 1900 状態にする時に呼ばれ,p_tcbで指定されたタスク(対象タスク)のTCB中のス 1901 タックポインタを初期化し,実行再開番地をタスク開始時処理(start_r)に設 1902 定する.この時点では,後述する理由で,対象タスクのスタック領域を使って 1903 はならない. 1904 1905 対象タスクが最初に実行される時には,対象タスクを自タスクとして,実行再 1906 開番地として登録したstart_rに分岐してくる.start_rには,dispatcherのみ 1907 から分岐し,その時の状態は,タスクコンテキスト・CPUロック状態・割込み優 1908 先度マスク全解除状態・ディスパッチ許可状態である. 1909 1910 start_rは,CPUロック状態を解除した後,タスクの起動番地を呼び出す.さら 1911 に,タスクの起動番地から戻ってきた場合には,ext_tskを呼び出す. 1912 1913 activate_contextとstart_rの処理内容は次の通り. 2379 1914 2380 1915 ---------------------------------------- … … 2382 1917 activate_context(TCB *p_tcb) 2383 1918 { 2384 æå®ãããã¿ã¹ã¯ï¼p_tcbï¼ã®TCBä¸ã®ã¹ã¿ãã¯ãã¤ã³ã¿ãåæåãã2385 start_r ãï¼å®è¡åéçªå°ã¨ãã¦èªã¿ã¹ã¯ã®TCBã«ä¿åãã â¦(*a)1919 指定されたタスク(p_tcb)のTCB中のスタックポインタを初期化する 1920 start_rを,実行再開番地として自タスクのTCBに保存する … (*a) 2386 1921 return; 2387 1922 2388 1923 start_r: 2389 1924 #ifdef TOPPERS_SUPPORT_OVRHDR 2390 ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§*/1925 ovrtimer_start(); /* オーバランタイマの動作開始 */ 2391 1926 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2392 CPUããã¯è§£é¤ç¶æ 2393 ã«ãã 2394 èªã¿ã¹ã¯ï¼p_runtskï¼ã®èµ·åçªå°ãï¼æ¡å¼µæ 2395 å ±ããã©ã¡ã¼ã¿ã¨ãã¦å¼ã³åºã 2396 ext_tskã«åå²ãã ... (*c) 1927 CPUロック解除状態にする 1928 自タスク(p_runtsk)の起動番地を,拡張情報をパラメータとして呼び出す 1929 ext_tskに分岐する ... (*c) 2397 1930 } 2398 1931 ---------------------------------------- 2399 1932 2400 (*c)ã§ext_tskãå¼ã¶ä»£ããã«ï¼èªã¿ã¹ã¯ã®èµ·åçªå°ãå¼ã³åºãæã®è¿ãçªå°ã 2401 ext_tskã®çªå°ã¨ãã¦ããæ¹æ³ãããï¼ 2402 2403 ããã§ï¼ã¿ã¹ã¯ã®èµ·åå¦çã«ããã¦å¯¾è±¡ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã使ã£ã¦ã¯ãªã 2404 ãªãçç±ã¯ï¼æ¬¡ã®éãï¼å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ã«ããã¦ï¼è¤æ°ã®å¶ç´ã¿ã¹ 2405 ã¯ãã¹ã¿ãã¯é åãå 2406 ±æãã¦ããå ´åã«ï¼ã¿ã¹ã¯ã®èµ·åæç¹ã§ã¯ï¼ãã®ã¿ã¹ã¯ 2407 ã¨ã¹ã¿ãã¯é åãå 2408 ±æãã¦ããã¿ã¹ã¯ãï¼ã¹ã¿ãã¯é åã使ç¨ãã¦ããå¯è½æ§ 2409 ãããããã§ããï¼ 2410 2411 ãã®ãã¼ãã£ã³ã°ã¬ã¤ãã§ã¯ï¼ã¿ã¹ã¯ã®å®è¡åéçªå°ãTCBã«ä¿åãã¦ãã 2412 (*a)ããããã¹ã¿ãã¯ã«ä¿åããæ¹æ³ãèãããããï¼ã¿ã¹ã¯ã®èµ·åå¦çã§ã¹ 2413 ã¿ãã¯é åã使ããªããã¨ããï¼ã¿ã¹ã¯ã®èµ·åå¦çã ãã¯ä¾å¤æ±ãããªããã° 2414 ãªããªãï¼ä¾ãã°ï¼ã¿ã¹ã¯ã®èµ·åå¦çã«ããã¦ã¯TCBä¸ã®ã¹ã¿ãã¯ãã¤ã³ã¿ãç¹ 2415 æ®ãªå¤ï¼ä¾ãã°0ï¼ã«è¨å®ãã¦ããï¼ãã£ã¹ãããã£æ¬ä½ã§TCBä¸ã®ã¹ã¿ãã¯ã 2416 ã¤ã³ã¿ããã®å¤ã®å ´åã«ã¯start_rã«åå²ããï¼start_rã«ããã¦ã¹ã¿ãã¯ã㤠2417 ã³ã¿ãåæåããæ¹æ³ãèããããï¼ 2418 2419 6.6 å²è¾¼ã¿ãã³ãã© 2420 2421 6.6.1 å²è¾¼ã¿ãã³ãã©ã®åºå 2422 ¥å£å¦ç 2423 2424 ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ã®åºå 2425 ¥å£å¦çã®æ¹æ³ã¯ï¼ããã»ããµã«ãã£ã¦å¤§ããç°ãª 2426 ããï¼ããããã®å¦çå 2427 容ã¯æ¬¡ã®éãï¼ 1933 (*c)でext_tskを呼ぶ代わりに,自タスクの起動番地を呼び出す時の返り番地を 1934 ext_tskの番地としておく方法がある. 1935 1936 ここで,タスクの起動処理において対象タスクのスタック領域を使ってはなら 1937 ない理由は,次の通り.制約タスク拡張パッケージにおいて,複数の制約タス 1938 クがスタック領域を共有している場合に,タスクの起動時点では,そのタスク 1939 とスタック領域を共有しているタスクが,スタック領域を使用している可能性 1940 があるためである. 1941 1942 このポーティングガイドでは,タスクの実行再開番地をTCBに保存している 1943 (*a)。これをスタックに保存する方法も考えられるが,タスクの起動処理でス 1944 タック領域が使えないことから,タスクの起動処理だけは例外扱いしなければ 1945 ならない.例えば,タスクの起動処理においてはTCB中のスタックポインタを特 1946 殊な値(例えば0)に設定しておき,ディスパッチャ本体でTCB中のスタックポ 1947 インタがその値の場合にはstart_rに分岐させ,start_rにおいてスタックポイ 1948 ンタを初期化する方法が考えられる. 1949 1950 6.6 割込みハンドラ 1951 1952 6.6.1 割込みハンドラの出入口処理 1953 1954 カーネル管理の割込みの出入口処理の方法は,プロセッサによって大きく異な 1955 るが,おおよその処理内容は次の通り. 2428 1956 2429 1957 ---------------------------------------- 2430 1958 void 2431 <å²è¾¼ã¿ã®åºå 2432 ¥å£å¦ç>(void) 1959 <割込みの出入口処理>(void) 2433 1960 { 2434 å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ 2435 ã«ãã ⦠(*f) 2436 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã 2437 if (ã¿ã¹ã¯ã³ã³ããã¹ãã§å²è¾¼ã¿çºç) { 1961 少なくともカーネル管理の割込みを禁止した状態にする … (*f) 1962 スクラッチレジスタをスタックに保存する 1963 if (タスクコンテキストで割込み発生) { 2438 1964 #ifdef TOPPERS_SUPPORT_OVRHDR 2439 ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢*/1965 ovrtimer_stop(); /* オーバランタイマの停止 */ 2440 1966 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2441 ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼2442 éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã1967 スタックを非タスクコンテキスト用のスタックに切り換え, 1968 非タスクコンテキストに切り換える 2443 1969 } 2444 å²è¾¼ã¿åªå 2445 度ãã¹ã¯ãï¼åãä»ããå²è¾¼ã¿è¦æ±ã®å²è¾¼åªå 2446 度ã«è¨å®ãï¼ 2447 CPUããã¯è§£é¤ç¶æ 2448 ã«ããï¼åãä»ããå²è¾¼ã¿ããã 2449 åªå 2450 度ã®é«ãå²è¾¼ã¿ãåãä»ããããã«ããï¼â¦ (*i) 1970 割込み優先度マスクを,受け付けた割込み要求の割込優先度に設定し, 1971 CPUロック解除状態にする(受け付けた割込みよりも 1972 優先度の高い割込みを受け付けるようにする)… (*i) 2451 1973 2452 1974 2453 1975 #ifdef LOG_INH_ENTER 2454 log_inh_enter( å²è¾¼ã¿ãã³ãã©çªå·);1976 log_inh_enter(割込みハンドラ番号); 2455 1977 #endif /* LOG_INH_ENTER */ 2456 å²è¾¼ã¿ãã³ãã©ãå¼ã³åºã1978 割込みハンドラを呼び出す 2457 1979 #ifdef LOG_INH_LEAVE 2458 log_inh_leave( å²è¾¼ã¿ãã³ãã©çªå·);1980 log_inh_leave(割込みハンドラ番号); 2459 1981 #endif /* LOG_INH_LEAVE */ 2460 1982 2461 1983 ret_int: 2462 if (ã¿ã¹ã¯ã³ã³ããã¹ãã§å²è¾¼ã¿çºç) { 2463 ï¼å°ãªãã¨ãï¼ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ 2464 ã«ãã ⦠(*d) 2465 ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã 2466 ⦠(*g) 1984 if (タスクコンテキストで割込み発生) { 1985 (少なくとも)カーネル管理の割込みを禁止した状態にする … (*d) 1986 スタックをタスク用のスタックに戻し,タスクコンテキストに切り換える 1987 … (*g) 2467 1988 if (reqflg) { 2468 1989 reqflg = false; 2469 CPUããã¯ç¶æ 2470 ã«ãã ⦠(*e) 2471 å²è¾¼ã¿åªå 2472 度ãã¹ã¯ãï¼å 2473 ¨è§£é¤ç¶æ 2474 ï¼TIPM_ENAALLï¼ã«è¨å®ãã ⦠(*h) 1990 CPUロック状態にする … (*e) 1991 割込み優先度マスクを,全解除状態(TIPM_ENAALL)に設定する … (*h) 2475 1992 if (dspflg && p_runtsk != p_schedtsk) { 2476 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã2477 ã¹ã¿ãã¯ãã¤ã³ã¿ãèªã¿ã¹ã¯ï¼p_runtskï¼ã®TCBã«ä¿åãã2478 ret_int_r ãï¼å®è¡åéçªå°ã¨ãã¦èªã¿ã¹ã¯ã®TCBã«ä¿åãã â¦(*a)2479 dispatcher ã«åå²ãã1993 スクラッチレジスタを除くすべてのレジスタをスタックに保存する 1994 スタックポインタを自タスク(p_runtsk)のTCBに保存する 1995 ret_int_rを,実行再開番地として自タスクのTCBに保存する … (*a) 1996 dispatcherに分岐する 2480 1997 2481 1998 ret_int_r: 2482 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã1999 スクラッチレジスタを除くすべてのレジスタをスタックから復帰する 2483 2000 } 2484 2001 #ifdef TOPPERS_SUPPORT_OVRHDR 2485 ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§*/2002 ovrtimer_start(); /* オーバランタイマの動作開始 */ 2486 2003 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2487 calltex(); â¦(*b)2004 calltex(); … (*b) 2488 2005 } 2489 2006 #ifdef TOPPERS_SUPPORT_OVRHDR 2490 2007 else { 2491 ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§*/2008 ovrtimer_start(); /* オーバランタイマの動作開始 */ 2492 2009 } 2493 2010 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2494 2011 } 2495 å²è¾¼ã¿å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼å²è¾¼ã¿åªå 2496 度ãã¹ã¯ã 2497 å²è¾¼ã¿å¦çåã®å¤ã«æ»ãããã«æºåãã 2498 å²è¾¼ã¿å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUããã¯è§£é¤ç¶æ 2499 ã«æ»ãããã«æºåãã 2500 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã 2501 å²è¾¼ã¿å¦çããã®ãªã¿ã¼ã³ 2012 割込み処理からのリターン後に,割込み優先度マスクが 2013 割込み処理前の値に戻るように準備する 2014 割込み処理からのリターン後に,CPUロック解除状態に戻るように準備する 2015 スクラッチレジスタをスタックから復帰する 2016 割込み処理からのリターン 2502 2017 } 2503 2018 ---------------------------------------- 2504 2019 2505 å²è¾¼ã¿ã®åä»ãã«ããï¼ã¹ã¿ãã¯ãã¤ã³ã¿ãåãæãããï¼ãã¹ã¦ã®å²è¾¼ã¿ã 2506 ç¦æ¢ãããªãããã»ããµã§ã¯ï¼(*f)ã«ããã¦ï¼å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ 2507 ã¿ãç¦æ¢ããï¼ãã®çç±ã¯æ¬¡ã®éãã§ããï¼ 2508 2509 å²è¾¼ã¿ã®å 2510 ¥å£å¦çã«ããã¦ï¼ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã« 2511 åãæããåã«å¤éå²è¾¼ã¿ãçºçããã¨ï¼ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã使ç¨ãããï¼ 2512 ä¸è¨ã®ãããªããã»ããµã§ã¯ï¼ã¹ã¿ãã¯ã®åæãåã«ï¼æ大ã§å²è¾¼ã¿åªå 2513 度㮠2514 段æ°åã®å¤éå²è¾¼ã¿ãçºçãããã¨ãé²ããã¨ã¯ã§ããï¼åã¿ã¹ã¯ã®ã¹ã¿ã㯠2515 é åã確ä¿ããéã«ï¼ãã®åãè¦è¾¼ãã§ç¢ºä¿ããªããã°ãªããªãï¼åã¿ã¹ã¯ã® 2516 ã¹ã¿ãã¯é åããªãã¹ãå°ããããããã«ã¯ï¼ã¹ã¿ãã¯ããªãã¹ã使ç¨ããªã 2517 å 2518 ã«ï¼å¤éå²è¾¼ã¿ãç¦æ¢ããã®ãæã¾ããï¼ãã®ããï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã 2519 ã¹ã¿ãã¯ã«ä¿åããåã«ï¼å²è¾¼ã¿ãç¦æ¢ããï¼ãã ãï¼å²è¾¼ã¿ã®ç¦æ¢å¦çã«å¿ 2520 2521 è¦ãªæä½éã®ã¬ã¸ã¹ã¿ã«ã¤ãã¦ã¯ï¼å²è¾¼ã¿ã®ç¦æ¢ã«å 2522 ç«ã£ã¦ã¹ã¿ãã¯ã«ä¿åã 2523 ãå¿ 2524 è¦ãããï¼ 2525 2526 åæ§ã®ãã¨ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã«ãå½ã¦ã¯ã¾ãï¼ããªãã¡ï¼ã«ã¼ãã« 2527 管çå¤ã®å²è¾¼ã¿ã«ã¤ãã¦ãï¼ã¹ã¿ãã¯ããªãã¹ã使ç¨ããªãå 2528 ã«ç¦æ¢ããã®ã 2529 æã¾ããï¼ãã®ãã¨ããï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã使ç¨ããå ´åã«ã¯ï¼(*f) 2530 ã«ããã¦ï¼ãã¹ã¦ã®å²è¾¼ã¿ãç¦æ¢ããç¶æ 2531 ã«ããã®ãæã¾ãããã¨ã«ãªãï¼ä¸ 2532 æ¹ã§ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®ç¦æ¢æéãé·ããªãã¨ï¼ã«ã¼ãã«ç®¡çå¤ã®å² 2533 è¾¼ã¿ã®å¿çæ§ãä½ä¸ããããï¼ã¦ã¼ã¶ã«æ³¨æãä¿ãå¿ 2534 è¦ãããï¼ã¾ãï¼ã«ã¼ã 2535 ã«ç®¡çå¤ã®å²è¾¼ã¿å¦çã«ããã¦ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ï¼ã¾ã 2536 ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦çç¨ã®ã¹ã¿ãã¯ï¼ã«åãæãããã¨ãæã¾ãã 2537 ãï¼ããã¯ã«ã¼ãã«ã®ç®¡è½å¤ã§ããï¼ 2538 2539 (*i)ã«å«ã¾ããå²è¾¼ã¿åªå 2540 度ãã¹ã¯ãè¨å®ããå¦çã¯ï¼ããã»ããµããã¼ãã¦ã§ 2541 ã¢ã§å®ç¾ãã¦ããå ´åãå¤ãï¼ 2542 2543 (*d)ã«ããã¦ã¯ï¼ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããã ãã§ï¼CPUããã¯ç¶æ 2544 ã«ã 2545 ãå¿ 2546 è¦ã¯ãªãï¼ä¾ãã°ï¼CPUããã¯ç¶æ 2547 ã§ãããã¨ã示ãå¤æ°ãç¨æãã¦ããå ´ 2548 åã«ã¯ï¼(*d)ã®æç¹ã§ã¯ãã®å¤æ°ãCPUããã¯ç¶æ 2549 ã示ãå¤ã«å¤æ´ããå¿ 2550 è¦ã¯ãª 2551 ãï¼(*e)ã«ããã¦å¤æ´ããã°ããï¼ 2552 2553 (*g)ã«ããã¦ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæããå¦çã¯ï¼å²è¾¼ã¿å¦çããã®ãªã¿ã¼ 2554 ã³ã«ããã¹ã¿ãã¯ã¨ã³ã³ããã¹ããå 2555 ã«æ»ãããã»ããµã§ã¯ï¼reqflgãtrueã® 2556 å ´åã«ã®ã¿è¡ãã°ããï¼reqflgãfalseã®æã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã®ã¾ã¾å¦ 2557 çãç¶ãï¼å²è¾¼ã¿å¦çããã®ãªã¿ã¼ã³ã§ã¿ã¹ã¯ã³ã³ããã¹ãã«æ»ããã¨ã«ãªãï¼ 2558 2559 (*e)ã«ããã¦CPUããã¯ç¶æ 2560 ã«ããã®ã¯ï¼dispatcherã«åå²ããéã¨ï¼(*b)ã«ã 2561 ãã¦calltexï¼ã¾ãã¯ï¼ãããå±éããå ´åã«ã¯call_texrtnï¼ãå¼ã³åºãéã«ï¼ 2562 CPUããã¯ç¶æ 2563 ã«ãªã£ã¦ããå¿ 2564 è¦ãããããã§ããï¼ 2565 2566 (*h)ã®å¦çãå®è¡ãããã®ã¯ï¼å²è¾¼ã¿å¦çåã«å²è¾¼ã¿åªå 2567 度ãã¹ã¯ãå 2568 ¨è§£é¤ç¶ 2569 æ 2570 ï¼TIPM_ENAALLï¼ã§ãã£ãå ´åã«éããï¼ããã§å²è¾¼ã¿åªå 2571 度ãã¹ã¯ãå 2572 ¨è§£é¤ 2573 ç¶æ 2574 ã«è¨å®ããã®ã¯ï¼å²è¾¼ã¿å¦çåã®å¤ã«æ»ãã®ã¨ç価ã§ããï¼ããã§ãã®å¦ 2575 çãè¡ãã®ã¯ï¼dispatcherã«åå²ããéã¨ï¼(*b)ã«ããã¦calltexï¼ã¾ãã¯ï¼ã 2576 ããå±éããå ´åã«ã¯call_texrtnï¼ãå¼ã³åºãéã«ã¯ï¼å²è¾¼ã¿åªå 2577 度ãã¹ã¯å 2578 ¨ 2579 解é¤ç¶æ 2580 ã«ãªã£ã¦ããå¿ 2581 è¦ãããããã§ããï¼ 2582 2583 ã¿ã¹ã¯ã®å®è¡ä¸ã«å²è¾¼ã¿ãçºçãï¼ä¸ã®å¦çä¸ã§dispatcherã«åå²ããå ´åï¼ 2584 ãã®ã¿ã¹ã¯ã次ã«å®è¡ãããæã«ã¯ï¼å®è¡åéçªå°ã¨ãã¦ç»é²ããret_int_rã« 2585 æ»ã£ã¦ããï¼ret_int_rã«ã¯ï¼dispatcherã®ã¿ããåå²ãï¼ãã®æã®ç¶æ 2586 ã¯ï¼ã¿ 2587 ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 2588 ã»å²è¾¼ã¿åªå 2589 度ãã¹ã¯å 2590 ¨è§£é¤ç¶æ 2591 ã»ãã£ã¹ãã 2592 ã許å¯ç¶æ 2593 ã§ããï¼ 2594 2595 å²è¾¼ã¿ã®åºå 2596 ¥å£å¦çãã¢ã»ã³ããªè¨èªã§è¨è¿°ããå ´åã«ã¯ï¼ãã¬ã¼ã¹ãã°åå¾ 2597 å¦çã¯ï¼ã6.2 ãã¬ã¼ã¹ãã°æ©è½ã¸ã®å¯¾å¿ãã®ç¯ã§è¨è¿°ããæ¹æ³ã§ã³ã¼ãã£ã³ 2598 ã°ãããã¨ï¼ 2599 2600 6.6.2 å²è¾¼ã¿ãã³ãã©æ¯ã®åºå 2601 ¥å£å¦çã®çæ 2602 2603 å²è¾¼ã¿ãã¯ãã«ããã¼ãã¦ã§ã¢ã§å®ç¾ãã¦ããå ´åãªã©ï¼å²è¾¼ã¿ãã³ãã©æ¯ã« 2604 åºå 2605 ¥å£å¦çãç¨æããæ¹ãå¹çãè¯ãã¿ã¼ã²ããã®ããã«ï¼å²è¾¼ã¿ãã³ãã©æ¯ 2606 ã«åºå 2607 ¥å£å¦çãçæããæ©æ§ãç¨æãã¦ããï¼ 2608 2609 以ä¸ã®ãã¯ãã¯ï¼æ¨æºã®å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãç¨ããå ´åã®ã¿ï¼ã¿ã¼ 2610 ã²ããéä¾åé¨ã§ä½¿ãããï¼å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãã¿ã¼ã²ããä¾åé¨ 2611 ã§ç¨æãï¼ãã®ä¸ã§ãããã®ãã¯ãã使ããªãå ´åã«ã¯ï¼ãããã®ãã¯ããç¨ 2612 æããå¿ 2613 è¦ã¯ãªãï¼ 2020 割込みの受付けにより,スタックポインタが切り換わらず,すべての割込みが 2021 禁止されないプロセッサでは,(*f)において,少なくともカーネル管理の割込 2022 みを禁止する.この理由は次の通りである. 2023 2024 割込みの入口処理において,スタックを非タスクコンテキスト用のスタックに 2025 切り換える前に多重割込みが発生すると,タスクのスタック領域が使用される. 2026 上記のようなプロセッサでは,スタックの切換え前に,最大で割込み優先度の 2027 段数分の多重割込みが発生することを防ぐことはできず,各タスクのスタック 2028 領域を確保する際に,その分を見込んで確保しなければならない.各タスクの 2029 スタック領域をなるべく小さくするためには,スタックをなるべく使用しない 2030 内に,多重割込みを禁止するのが望ましい.そのため,スクラッチレジスタを 2031 スタックに保存する前に,割込みを禁止する.ただし,割込みの禁止処理に必 2032 要な最低限のレジスタについては,割込みの禁止に先立ってスタックに保存す 2033 る必要がある. 2034 2035 同様のことは,カーネル管理外の割込みにも当てはまる.すなわち,カーネル 2036 管理外の割込みについても,スタックをなるべく使用しない内に禁止するのが 2037 望ましい.このことから,カーネル管理外の割込みを使用する場合には,(*f) 2038 において,すべての割込みを禁止した状態にするのが望ましいことになる.一 2039 方で,カーネル管理外の割込みの禁止時間が長くなると,カーネル管理外の割 2040 込みの応答性が低下するため,ユーザに注意を促す必要がある.また,カーネ 2041 ル管理外の割込み処理においても,非タスクコンテキスト用のスタック(また 2042 は,カーネル管理外の割込み処理用のスタック)に切り換えることが望ましい 2043 が,これはカーネルの管轄外である. 2044 2045 (*i)に含まれる割込み優先度マスクを設定する処理は,プロセッサがハードウェ 2046 アで実現している場合も多い. 2047 2048 (*d)においては,カーネル管理の割込みを禁止するだけで,CPUロック状態にす 2049 る必要はない.例えば,CPUロック状態であることを示す変数を用意している場 2050 合には,(*d)の時点ではその変数をCPUロック状態を示す値に変更する必要はな 2051 く,(*e)において変更すればよい. 2052 2053 (*g)においてタスクコンテキストに切り換える処理は,割込み処理からのリター 2054 ンによりスタックとコンテキストが元に戻るプロセッサでは,reqflgがtrueの 2055 場合にのみ行えばよい.reqflgがfalseの時は,非タスクコンテキストのまま処 2056 理を続け,割込み処理からのリターンでタスクコンテキストに戻ることになる. 2057 2058 (*e)においてCPUロック状態にするのは,dispatcherに分岐する際と,(*b)にお 2059 いてcalltex(または,それを展開した場合にはcall_texrtn)を呼び出す際に, 2060 CPUロック状態になっている必要があるためである. 2061 2062 (*h)の処理が実行されるのは,割込み処理前に割込み優先度マスクが全解除状 2063 態(TIPM_ENAALL)であった場合に限られ,ここで割込み優先度マスクを全解除 2064 状態に設定するのは,割込み処理前の値に戻すのと等価である.ここでこの処 2065 理を行うのは,dispatcherに分岐する際と,(*b)においてcalltex(または,そ 2066 れを展開した場合にはcall_texrtn)を呼び出す際には,割込み優先度マスク全 2067 解除状態になっている必要があるためである. 2068 2069 タスクの実行中に割込みが発生し,上の処理中でdispatcherに分岐した場合, 2070 そのタスクが次に実行される時には,実行再開番地として登録したret_int_rに 2071 戻ってくる.ret_int_rには,dispatcherのみから分岐し,その時の状態は,タ 2072 スクコンテキスト・CPUロック状態・割込み優先度マスク全解除状態・ディスパッ 2073 チ許可状態である. 2074 2075 割込みの出入口処理をアセンブリ言語で記述する場合には,トレースログ取得 2076 処理は,「6.2 トレースログ機能への対応」の節で記述した方法でコーディン 2077 グすること. 2078 2079 6.6.2 割込みハンドラ毎の出入口処理の生成 2080 2081 割込みベクトルをハードウェアで実現している場合など,割込みハンドラ毎に 2082 出入口処理を用意した方が効率が良いターゲットのために,割込みハンドラ毎 2083 に出入口処理を生成する機構を用意している. 2084 2085 以下のマクロは,標準の割込み管理機能の初期化処理を用いた場合のみ,ター 2086 ゲット非依存部で使われる.割込み管理機能の初期化処理をターゲット依存部 2087 で用意し,その中でこれらのマクロを使わない場合には,これらのマクロを用 2088 意する必要はない. 2614 2089 2615 2090 (6-6-2-1) INT_ENTRY(inhno, inthdr) 2616 2091 2617 å²è¾¼ã¿ãã³ãã©çªå·ãinhnoï¼å²è¾¼ã¿ãã³ãã©ã®é¢æ°åãinthdrã§ããå²è¾¼ã¿ã 2618 ã³ãã©ã®åºå 2619 ¥å£å¦çã®ã©ãã«ãä½ããã¯ãï¼INTHDR_ENTRYãç¨ãã¦å²è¾¼ã¿ãã³ 2620 ãã©æ¯ã«åºå 2621 ¥å£å¦çãçæããå ´åã«ã¯ï¼æ¬¡ã®ããã«å®ç¾©ããï¼ 2092 割込みハンドラ番号がinhno,割込みハンドラの関数名がinthdrである割込みハ 2093 ンドラの出入口処理のラベルを作るマクロ.INTHDR_ENTRYを用いて割込みハン 2094 ドラ毎に出入口処理を生成する場合には,次のように定義する. 2622 2095 2623 2096 #define INT_ENTRY(inhno, inthdr) _kernel_##inthdr##_##inhno 2624 2097 2625 å²è¾¼ã¿ãã³ãã©æ¯ã«åºå 2626 ¥å£å¦çãä½ãå¿ 2627 è¦ããªãå ´åã«ã¯ï¼æ¬¡ã®ããã«å®ç¾©ã 2628 ã¦ï¼å²è¾¼ã¿ãã³ãã©ã®é¢æ°åããã®ã¾ã¾è¿ãï¼ 2098 割込みハンドラ毎に出入口処理を作る必要がない場合には,次のように定義し 2099 て,割込みハンドラの関数名をそのまま返す. 2629 2100 2630 2101 #define INT_ENTRY(inhno, inthdr) inthdr … … 2632 2103 (6-6-2-2) INTHDR_ENTRY(inhno, inhno_num, inthdr) 2633 2104 2634 å²è¾¼ã¿ãã³ãã©çªå·ãinhnoï¼å²è¾¼ã¿ãã³ãã©ã®é¢æ°åãinthdrã§ããå²è¾¼ã¿ã 2635 ã³ãã©ã®åºå 2636 ¥å£å¦çãçæãããã¯ãï¼inhno_numã«ã¯ï¼ã¢ã»ã³ããªè¨èªè¨è¿°ç¨ 2637 ã«ï¼å²è¾¼ã¿ãã³ãã©çªå·ãæ°å¤ã§æ¸¡ãããï¼å²è¾¼ã¿ãã³ãã©æ¯ã«åºå 2638 ¥å£å¦çã 2639 ä½ãå¿ 2640 è¦ããªãå ´åã«ã¯ï¼ç©ºã«å®ç¾©ããï¼ 2641 2642 6.6.3 å²è¾¼ã¿ãã³ãã©ã®è¨å® 2643 2644 (6-6-3-1) bool_t VALID_INHNO_DEFINH(INHNO inhno)ï¼ãªãã·ã§ã³ï¼ 2645 2646 inhnoãï¼DEF_INHã«å¯¾ããå²è¾¼ã¿ãã³ãã©çªå·ã¨ãã¦æå¹ãªå¤ã§ããå ´åã« 2647 trueï¼ããã§ãªãå ´åã«falseãè¿ããã¯ãï¼ 2648 2649 ASPã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ã¯ï¼ãã®ãã¯ãã¯ä½¿ããã¦ããªãããï¼ã¿ã¼ 2650 ã²ããä¾åé¨ã§ä½¿ããªããªãï¼ç¨æããå¿ 2651 è¦ããªãï¼ 2105 割込みハンドラ番号がinhno,割込みハンドラの関数名がinthdrである割込みハ 2106 ンドラの出入口処理を生成するマクロ.inhno_numには,アセンブリ言語記述用 2107 に,割込みハンドラ番号が数値で渡される.割込みハンドラ毎に出入口処理を 2108 作る必要がない場合には,空に定義する. 2109 2110 6.6.3 割込みハンドラの設定 2111 2112 (6-6-3-1) bool_t VALID_INHNO_DEFINH(INHNO inhno)(オプション) 2113 2114 inhnoが,DEF_INHに対する割込みハンドラ番号として有効な値である場合に 2115 true,そうでない場合にfalseを返すマクロ. 2116 2117 ASPカーネルのターゲット非依存部では,このマクロは使われていないため,ター 2118 ゲット依存部で使わないなら,用意する必要がない. 2652 2119 2653 2120 (6-6-3-2) void x_define_inh(INHNO inhno, FP int_entry) 2654 2121 2655 inhnoã§æå®ãããå²è¾¼ã¿ãã³ãã©ã®åºå 2656 ¥å£å¦çã®çªå°ãint_entryã«è¨å®ããï¼ 2657 2658 ãã®é¢æ°ã¯ï¼æ¨æºã®å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãç¨ããå ´åã®ã¿ï¼ã¿ã¼ã²ã 2659 ãéä¾åé¨ããå¼ã³åºãããï¼å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãã¿ã¼ã²ããä¾å 2660 é¨ã§ç¨æãï¼ãã®ä¸ã§ãã®é¢æ°ãå¼ã³åºããªãå ´åã«ã¯ï¼ãã®é¢æ°ãç¨æãã 2661 å¿ 2662 è¦ã¯ãªãï¼ 2663 2664 ãã®é¢æ°ã¯ï¼ã¿ã¼ã²ããéä¾åé¨ã®ã«ã¼ãã«åæåå¦çããå¼ã³åºãããããï¼ 2665 ã«ã¼ãã«ã®åæåå¦çï¼NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ããã¹ã¯ããã¦ããï¼ããå¼ 2666 ã³åºããããã«å®è£ 2667 ããã°ããï¼ 2668 2669 æå®ãããå²è¾¼ã¿ãã³ãã©çªå·ãDEF_INHã«å¯¾ãããã®ã¨ãã¦æå¹ãªå¤ã§ãªãå ´ 2670 åã®åä½ã¯ä¿è¨¼ããå¿ 2671 è¦ããªãï¼assertã§ã¨ã©ã¼ã¨ããã®ãæã¾ããï¼ï¼ãã 2672 ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãï¼ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ 2673 ã§å®ç¾©ããINHNO_DEFINH_VALIDãç¨ãã¦ã¨ã©ã¼ãæ¤åºããããã§ããï¼ 2674 2675 6.6.4 å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å® 2676 2677 (6-6-4-1) bool_t VALID_INTNO_CFGINT(INTNO intno)ï¼ãªãã·ã§ã³ï¼ 2678 2679 intnoãï¼å²è¾¼ã¿çªå·ã¨ãã¦æå¹ãªå¤ã§ããå ´åã«trueï¼ããã§ãªãå ´åã« 2680 falseãè¿ããã¯ãï¼CFG_INTã«ã¯ï¼ãã¹ã¦ã®å²è¾¼ã¿çªå·ãæå®ãããã¨ãã§ã 2681 ãããï¼ãã®ãã¯ãã¯ï¼intnoãæå¹ãªå¤ã®å ´åã«ã¯trueï¼intnoãç¡å¹ã®å¤ã® 2682 å ´åã«ã¯falseãè¿ãããã«ããï¼ 2683 2684 ASPã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ã¯ï¼ãã®ãã¯ãã¯ä½¿ããã¦ããªãããï¼ã¿ã¼ 2685 ã²ããä¾åé¨ã§ä½¿ããªããªãï¼ç¨æããå¿ 2686 è¦ããªãï¼ 2122 inhnoで指定された割込みハンドラの出入口処理の番地をint_entryに設定する. 2123 2124 この関数は,標準の割込み管理機能の初期化処理を用いた場合のみ,ターゲッ 2125 ト非依存部から呼び出される.割込み管理機能の初期化処理をターゲット依存 2126 部で用意し,その中でこの関数を呼び出さない場合には,この関数を用意する 2127 必要はない. 2128 2129 この関数は,ターゲット非依存部のカーネル初期化処理から呼び出されるため, 2130 カーネルの初期化処理(NMIを除くすべての割込みがマスクされている)から呼 2131 び出せるように実装すればよい. 2132 2133 指定された割込みハンドラ番号がDEF_INHに対するものとして有効な値でない場 2134 合の動作は保証する必要がない(assertでエラーとするのが望ましい).これ 2135 は,コンフィギュレータが,パス2のテンプレートファイルのターゲット依存部 2136 で定義するINHNO_DEFINH_VALIDを用いてエラーを検出するためである. 2137 2138 6.6.4 割込み要求ラインの属性の設定 2139 2140 (6-6-4-1) bool_t VALID_INTNO_CFGINT(INTNO intno)(オプション) 2141 2142 intnoが,割込み番号として有効な値である場合にtrue,そうでない場合に 2143 falseを返すマクロ.CFG_INTには,すべての割込み番号を指定することができ 2144 るため,このマクロは,intnoが有効な値の場合にはtrue,intnoが無効の値の 2145 場合にはfalseを返すようにする. 2146 2147 ASPカーネルのターゲット非依存部では,このマクロは使われていないため,ター 2148 ゲット依存部で使わないなら,用意する必要がない. 2687 2149 2688 2150 (6-6-4-2) void x_config_int(INTNO intno, ATR intatr, PRI intpri) 2689 2151 2690 intnoã§æå®ãããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å²è¾¼ã¿å±æ§ãï¼intatrã§æå®ãããéã 2691 ã«è¨å®ããï¼ã¾ãï¼å²è¾¼ã¿åªå 2692 度ãï¼intpriã§æå®ãããå¤ã«è¨å®ããï¼ 2693 2694 ãã®é¢æ°ã¯ï¼æ¨æºã®å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãç¨ããå ´åã®ã¿ï¼ã¿ã¼ã²ã 2695 ãéä¾åé¨ããå¼ã³åºãããï¼å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãã¿ã¼ã²ããä¾å 2696 é¨ã§ç¨æãï¼ãã®ä¸ã§ãã®é¢æ°ãå¼ã³åºããªãå ´åã«ã¯ï¼ãã®é¢æ°ãç¨æãã 2697 å¿ 2698 è¦ã¯ãªãï¼ 2699 2700 ãã®é¢æ°ã¯ï¼ã¿ã¼ã²ããéä¾åé¨ã®ã«ã¼ãã«åæåå¦çããå¼ã³åºãããããï¼ 2701 ã«ã¼ãã«ã®åæåå¦çï¼NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ããã¹ã¯ããã¦ããï¼ããå¼ 2702 ã³åºããããã«å®è£ 2703 ããã°ããï¼ 2704 2705 intatrã¨ãã¦è¨å®ã§ããå²è¾¼ã¿å±æ§ã¯æ¬¡ã®éãï¼ 2706 2707 TA_ENAINT 0x01 å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ãã¯ãªã¢ 2708 TA_EDGE 0x02 ã¨ãã¸ããªã¬ 2709 2710 ãã®ä»ã«ï¼ã¿ã¼ã²ããå®ç¾©ã§å²è¾¼ã¿å±æ§ã追å ãã¦ãããï¼ã¿ã¼ã²ããå®ç¾©ã§ 2711 追å ããããã«ï¼ä»¥ä¸ã®å±æ§åãäºç´ããã¦ããï¼ 2712 2713 TA_POSEDGE ãã¸ãã£ãã¨ãã¸ããªã¬ 2714 TA_NEGEDGE ãã¬ãã£ãã¨ãã¸ããªã¬ 2715 TA_BOTHEDGE 両ã¨ãã¸ããªã¬ 2716 TA_LOWLEVEL ãã¼ã¬ãã«ããªã¬ 2717 TA_HIGHLEVEL ãã¤ã¬ãã«ããªã¬ 2718 2719 ãããã®å±æ§åãã¿ã¼ã²ããå®ç¾©ã§è¿½å ããå ´åã«ã¯ï¼ãã®å±æ§å¤ã決å®ãï¼ 2720 å®ç¾©ãtarget_kernel.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã«å« 2721 ããï¼ã¾ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãã³ãã¬ã¼ããã¡ã¤ã«ããåç 2722 §ã§ããããã«ï¼ 2723 target_def.csvï¼ã¾ãã¯ï¼åçã®å½¹å²ãæã¤ãã¡ã¤ã«ï¼ã«å«ãï¼ã³ã³ãã£ã®ã¥ 2724 ã¬ã¼ã¿ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ã¨ã©ã¼ã¨ãªããªãããã«ï¼ 2725 target.tfï¼ã¾ãã¯ï¼ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã§TARGET_INTATR 2726 ã«è¨å®ããï¼ 2727 2728 æå®ãããå²è¾¼ã¿çªå·ãæå¹ãªå¤ã§ãªãå ´åãï¼ãã®å²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ã 2729 ã¦è¨å®ã§ããªãå±æ§ãæå®ããå ´åï¼è¨å®ã§ããªãå²è¾¼ã¿åªå 2730 度ãæå®ããå ´ 2731 åã®åä½ã¯ä¿è¨¼ããå¿ 2732 è¦ããªãï¼assertã§ã¨ã©ã¼ã¨ããã®ãæã¾ããï¼ï¼ãã® 2733 ãããªã±ã¼ã¹ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã§ã¨ã©ã¼ãæ¤åºãã¹ãã§ããï¼ã³ã³ã㣠2734 ã®ã¥ã¬ã¼ã¿ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ã¯ï¼ãã¹2ã®ãã³ãã¬ã¼ 2735 ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããINTNO_CFGINT_VALIDï¼ 2736 TARGET_INTATRï¼INTPRI_CFGINT_VALIDãç¨ãã¦ã¨ã©ã¼ãæ¤åºãããï¼æ¨æºã®å² 2737 è¾¼ã¿å±æ§ï¼TA_ENAINTï¼TA_EDGEï¼ãè¨å®ã§ããªãå ´åãï¼è¨å®ã§ããªãå±æ§ã 2738 å²è¾¼ã¿åªå 2739 度ãå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«ãã£ã¦ç°ãªãå ´åã«ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ 2740 ã¿ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ã§æ¤åºããªããã°ãªããªãï¼ 2741 2742 6.6.5 å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çã®å¤æ´ 2743 2744 (6-6-5-1) OMIT_INITIALIZE_INTERRUPTï¼ãªãã·ã§ã³ï¼ 2745 2746 å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãã¿ã¼ã²ããä¾åé¨ã§ç¨æãï¼ã¿ã¼ã²ããéä¾å 2747 é¨ã«å«ã¾ããæ¨æºã®å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãç¨ããªãå ´åã«ã¯ï¼ãã®ã· 2748 ã³ãã«ããã¯ãå®ç¾©ããï¼ 2749 2750 ãã®ã·ã³ãã«ããã¯ãå®ç¾©ããã¨ï¼INHINIBï¼INTINIBï¼initialize_interrupt 2751 ã®å®ç¾©ãï¼ã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ããåãé¤ãããï¼ã¾ãï¼ 2752 TNUM_INHNOï¼tnum_inhnoï¼inhinib_tableï¼TNUM_INTNOï¼tnum_intnoï¼ 2753 intinib_tableã®å®ç¾©ã¨ï¼å²è¾¼ã¿ãã³ãã©æ¯ã®åºå 2754 ¥å£å¦çãçæããããã®è¨è¿° 2755 ï¼INTHDR_ENTRYãã¯ãã®ãªã¹ãï¼ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®ãã³ãã¬ã¼ 2756 ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ã«ãã£ã¦kernel_cfg.cã«çæãããªããªãï¼ 2757 ãã ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾å 2758 é¨ã§ï¼USE_INHINIB_TABLEã¨USE_INTINIB_TABLEãè¨å®ãããã¨ã§ï¼ãã®ä¸é¨ 2759 åãkernel_cfg.cã«çæãããã¨ãå¯è½ã§ããï¼ 2760 2761 (6-6-5-2) void initialize_interrupt(void)ï¼ãªãã·ã§ã³ï¼ 2762 2763 OMIT_INITIALIZE_INTERRUPTããã¯ãå®ç¾©ããå ´åã«ã¯ï¼ãã®é¢æ°ãã¿ã¼ã²ãã 2764 ä¾åé¨ã§ç¨æããï¼OMIT_INITIALIZE_INTERRUPTããã¯ãå®ç¾©ãããã¨ã«ããå 2765 ãé¤ããããã®ä»ã®ãã¼ã¿åï¼å¤æ°ï¼ãã¯ãã¯ï¼ãã®é¢æ°ã§ä½¿ç¨ããå ´åã«ã® 2766 ã¿ç¨æããã°ããï¼ 2767 2768 6.6.6 ããã©ã«ãã®å²è¾¼ã¿ãã³ãã© 2769 2770 (6-6-6-1) void default_int_handler(void)ï¼ãªãã·ã§ã³ï¼ 2771 2772 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«ããå²è¾¼ã¿ãã³ãã©ã®ãã¼ãã«ãçæããå ´åãªã©ã«ã¯ï¼ 2773 å²è¾¼ã¿ãã³ãã©ãç»é²ããªãã£ãå²è¾¼ã¿ãã³ãã©çªå·ã«å¯¾ãã¦ï¼ããã©ã«ãã® 2774 å²è¾¼ã¿ãã³ãã©ã¨ãã¦ï¼default_int_handlerãç»é²ããï¼ 2775 2776 default_int_handlerã¯ï¼æ¨æºã®ãã®ãã¿ã¼ã²ããä¾åé¨ã§ç¨æãããï¼ã¦ã¼ã¶ 2777 ãç¨æãããã®ã§ç½®ãæããããããã«ï¼OMIT_DEFAULT_INT_HANDLERããã¯ã 2778 å®ç¾©ããå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããªãããã«ããï¼ãªãï¼ã¦ã¼ã¶ 2779 ãç¨æããå ´åã®å称ã¯ï¼_kernel_default_int_handlerã¨ãªãï¼ 2780 2781 6.6.7 ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ 2782 2783 ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©ã¯ï¼ã«ã¼ãã«å 2784 ã®å²è¾¼ã¿åºå 2785 ¥å£å¦çãçµç±ã 2786 ãã«å®è¡ããã®ãåºæ¬ã§ããï¼ 2787 2788 ãã ãï¼ãã¹ã¦ã®å²è¾¼ã¿ã§åãã¢ãã¬ã¹ã«åå²ããããã»ããµã§ã¯ï¼ã«ã¼ãã« 2789 å 2790 ã®å²è¾¼ã¿åºå 2791 ¥å£å¦çãå 2792 ¨ãçµç±ããã«ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©ãå® 2793 è¡ãããã¨ãã§ããªãããï¼å²è¾¼ã¿åºå 2794 ¥å£å¦çã®ãªãã¹ãæ©ãã¿ã¤ãã³ã°ã§ï¼ 2795 ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã§ããããå¤å¥ãï¼å¦çå 2796 容ãåããå¿ 2797 è¦ãããï¼å 2798 · 2799 ä½çã«ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®åºå 2800 ¥å£å¦çã§ã¯ï¼ãªã¼ãã©ã³ãã³ãã©ã® 2801 åæ¢ã¨åä½éå§ãè¡ã£ã¦ã¯ãªããªãï¼ã¾ãï¼reqflgããã§ãã¯ãï¼ã¿ã¹ã¯åæ 2802 ããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å¼åºããè¡ãå¿ 2803 è¦ããªãï¼ããã«ï¼NMIã®åºå 2804 ¥å£ 2805 å¦çã§ã¯ï¼ãã¬ã¼ã¹ãã°åå¾å¦çï¼log_inh_enterããã³log_inh_leaveï¼ãå¼ 2806 ã³åºãã¦ã¯ãªããªãï¼ 2807 2808 ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©ãå®è¡ããéã«ï¼ã«ã¼ãã«å 2809 ã®å²è¾¼ã¿åºå 2810 ¥å£ 2811 å¦çã®ä¸é¨åãçµç±ããå ´åã«ã¯ï¼CPUä¾å¤ãèµ·ããå¯è½æ§ã極åæ¸ããã¨ã¨ã 2812 ã«ï¼CPUä¾å¤ãèµ·ããå¯è½æ§ãããå ´åã«ã¯ï¼ãã®å¯è½æ§ãã¿ã¼ã²ããä¾åé¨ã® 2813 ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«è¨è¼ããªããã°ãªããªãï¼ 2814 2815 次ã«ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®è¨å®æ¹æ³ã«é¢ãã¦ï¼ãTOPPERSæ°ä¸ä»£ã«ã¼ãã« 2816 çµ±åä»æ§æ¸ãã®ã2.7.8 ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®è¨å®æ¹æ³ãã®ç¯ã®3ã¤ã®æ¹æ³ 2817 ã®ããããæ¡ç¨ãããã決å®ããï¼ 2818 2819 (a-1)ã¾ãã¯(a-2)ãæ¡ç¨ãï¼ã«ã¼ãã«ç®¡çå¤ã¨ããå²è¾¼ã¿ã«å¯¾ãã¦ï¼ã«ã¼ãã« 2820 ã®APIã«ããå²è¾¼ã¿ãã³ãã©ã®ç»é²ã¨å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å®ããµãã¼ã 2821 ããªãå ´åã«ã¯ï¼ããã«ä»£ããæ¹æ³ãã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ 2822 ã«ã«è¨è¿°ããï¼ 2823 2824 (a-1)ã¾ãã¯(a-2)ãæ¡ç¨ãã¦ã«ã¼ãã«ã®APIã«ããå²è¾¼ã¿ãã³ãã©ã®ç»é²ãå²è¾¼ 2825 ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å®ããµãã¼ãããå ´åãï¼(b)ãæ¡ç¨ããå ´åã«ã¯ï¼ã¿ã¼ 2826 ã²ããä¾åé¨ã«ããã¦ãããå®ç¾ããå¿ 2827 è¦ãããï¼ 2828 2829 ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã«å¯¾ãã¦ï¼DEF_INHã«ããå²è¾¼ã¿ãã³ãã©ã®ç»é²ããµãã¼ 2830 ãããã«ã¯ï¼æ¬¡ã®è¨å®ãå¿ 2831 è¦ã«ãªãï¼ 2832 2833 ã»TARGET_INHATRã«ï¼TA_NONKERNELãè¨å®ããï¼ 2834 2835 ã»(a-1)ã¾ãã¯(a-2)ãæ¡ç¨ããå ´åã«ã¯ï¼INHNO_DEFINH_VALIDã«ï¼ã«ã¼ãã«ç®¡ 2836 ãçå¤ã¨ããå²è¾¼ã¿ã«å¯¾å¿ããå²è¾¼ã¿ãã³ãã©çªå·ãå«ããï¼ã¾ãï¼ 2837 ãVALID_INHNO_DEFINHãï¼ã«ã¼ãã«ç®¡çå¤ã¨ããå²è¾¼ã¿ãã³ãã©çªå·ãæå¹ãª 2838 ãå¤ã¨å¤å®ããããã«ããï¼ 2839 2840 ã»(a-1)ã¾ãã¯(a-2)ãæ¡ç¨ããå ´åã«ã¯ï¼INHNO_FIX_KERNELã«ã«ã¼ãã«ç®¡ç㨠2841 ãããå²è¾¼ã¿ãã³ãã©çªå·ã®ãªã¹ããï¼INHNO_FIX_NONKERNELã«ã«ã¼ãã«ç®¡çå¤ 2842 ãã¨ããå²è¾¼ã¿ãã³ãã©çªå·ã®ãªã¹ãè¨å®ããï¼ 2843 2844 ã»DEF_INHãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã«å¯¾å¿ã§ããããã«ããï¼æ¨æºã®å²è¾¼ã¿ç®¡ 2845 ãçæ©è½ã®åæåå¦çãç¨ããå ´åã«ã¯ï¼x_define_inhãã«ã¼ãã«ç®¡çå¤ã®å² 2846 ãè¾¼ã¿ã«å¯¾å¿ãããï¼ 2847 2848 ã»å¿ 2849 è¦ãªå ´åã«ã¯ï¼TA_NONKERNELå±æ§ãè¨å®ãããå²è¾¼ã¿ãã³ãã©ãã«ã¼ãã« 2850 ã管çå¤ã¨æ±ãããã«ï¼ã«ã¼ãã«å 2851 ã®å²è¾¼ã¿åºå 2852 ¥å£å¦çãä¿®æ£ããï¼æ¨æºã®å² 2853 ãè¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãç¨ããå ´åï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã«å¯¾ã㦠2854 ãã¯ï¼ã«ã¼ãã«å 2855 ã®å²è¾¼ã¿åºå 2856 ¥å£å¦çãçæããï¼ã¢ããªã±ã¼ã·ã§ã³ãç»é²ã 2857 ããå²è¾¼ã¿ãã³ãã©ãç´æ¥å¼ã³åºãããã«ï¼ã¿ã¼ã²ããéä¾åé¨ã«ããè¨å®ã 2858 ãããããï¼ã¿ã¼ã²ããä¾åé¨ã§ã¯å¯¾å¿ããå¿ 2859 è¦ããªãï¼ 2860 2861 ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã«å¯¾ãã¦ï¼CFG_INTã«ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨ 2862 å®ããµãã¼ãããã«ã¯ï¼æ¬¡ã®è¨å®ãå¿ 2863 è¦ã«ãªãï¼ 2864 2865 ã»(a-1)ã¾ãã¯(a-2)ãæ¡ç¨ããå ´åã«ã¯ï¼INTNO_CFGINT_VALIDã«ï¼ã«ã¼ãã«ç®¡ 2866 ãçå¤ã¨ããå²è¾¼ã¿ã«å¯¾å¿ããå²è¾¼ã¿çªå·ãå«ããï¼ã¾ãï¼VALID_INTNO_CFGINT 2867 ããï¼ã«ã¼ãã«ç®¡çå¤ã¨ããå²è¾¼ã¿çªå·ãæå¹ãªå¤ã¨å¤å®ããããã«ããï¼ 2868 2869 ã»(a-1)ã¾ãã¯(a-2)ãæ¡ç¨ããå ´åã«ã¯ï¼INTNO_FIX_KERNELã«ã«ã¼ãã«ç®¡ç㨠2870 ãããå²è¾¼ã¿çªå·ã®ãªã¹ããï¼INTNO_FIX_NONKERNELã«ã«ã¼ãã«ç®¡çå¤ã¨ããå² 2871 ãè¾¼ã¿çªå·ã®ãªã¹ãè¨å®ããï¼ 2872 2873 ã»INTPRI_CFGINT_VALIDã«ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¨ãªãåªå 2874 度ãå«ããï¼ 2875 2876 ã»CFG_INTãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã«å¯¾å¿ã§ããããã«ããï¼æ¨æºã®å²è¾¼ã¿ç®¡ 2877 ãçæ©è½ã®åæåå¦çãç¨ããå ´åã«ã¯ï¼x_config_intãã«ã¼ãã«ç®¡çå¤ã®å² 2878 ãè¾¼ã¿ã«å¯¾å¿ãããï¼ 2879 2880 chg_ipmã«ããï¼ï¼NMI以å¤ã®ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ããã¹ã¯ã§ããããã« 2881 ããå ´åã«ã¯ï¼æ¬¡ã®è¨å®ãå¿ 2882 è¦ã«ãªãï¼ 2883 2884 ã»VALID_INTPRI_CHGIPMãï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¨ãªãåªå 2885 度ãæå¹ãªå¤ã¨ 2886 ãå¤å®ããããã«ããï¼ 2887 2888 ã»t_set_ipmãï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¨ãªãåªå 2889 度ãæ±ããããã«ããï¼ 2890 2891 6.6.8 å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®çæ 2152 intnoで指定された割込み要求ラインの割込み属性を,intatrで指定された通り 2153 に設定する.また,割込み優先度を,intpriで指定された値に設定する. 2154 2155 この関数は,標準の割込み管理機能の初期化処理を用いた場合のみ,ターゲッ 2156 ト非依存部から呼び出される.割込み管理機能の初期化処理をターゲット依存 2157 部で用意し,その中でこの関数を呼び出さない場合には,この関数を用意する 2158 必要はない. 2159 2160 この関数は,ターゲット非依存部のカーネル初期化処理から呼び出されるため, 2161 カーネルの初期化処理(NMIを除くすべての割込みがマスクされている)から呼 2162 び出せるように実装すればよい. 2163 2164 intatrとして設定できる割込み属性は次の通り. 2165 2166 TA_ENAINT 0x01 割込み要求禁止フラグをクリア 2167 TA_EDGE 0x02 エッジトリガ 2168 2169 この他に,ターゲット定義で割込み属性を追加してもよい.ターゲット定義で 2170 追加するために,以下の属性名が予約されている. 2171 2172 TA_POSEDGE ポジティブエッジトリガ 2173 TA_NEGEDGE ネガティブエッジトリガ 2174 TA_BOTHEDGE 両エッジトリガ 2175 TA_LOWLEVEL ローレベルトリガ 2176 TA_HIGHLEVEL ハイレベルトリガ 2177 2178 これらの属性名をターゲット定義で追加する場合には,その属性値を決定し, 2179 定義をtarget_kernel.h(または,そこからインクルードされるファイル)に含 2180 める.また,コンフィギュレータテンプレートファイルから参照できるように, 2181 target_def.csv(または,同等の役割を持つファイル)に含め,コンフィギュ 2182 レータテンプレートファイルのターゲット非依存部でエラーとならないように, 2183 target.tf(または,そこからインクルードされるファイル)でTARGET_INTATR 2184 に設定する. 2185 2186 指定された割込み番号が有効な値でない場合や,その割込み要求ラインに対し 2187 て設定できない属性を指定した場合,設定できない割込み優先度を指定した場 2188 合の動作は保証する必要がない(assertでエラーとするのが望ましい).この 2189 ようなケースは,コンフィギュレータでエラーを検出すべきである.コンフィ 2190 ギュレータテンプレートファイルのターゲット非依存部は,パス2のテンプレー 2191 トファイルのターゲット依存部で定義するINTNO_CFGINT_VALID, 2192 TARGET_INTATR,INTPRI_CFGINT_VALIDを用いてエラーを検出するが,標準の割 2193 込み属性(TA_ENAINT,TA_EDGE)が設定できない場合や,設定できない属性や 2194 割込み優先度が割込み要求ラインによって異なる場合には,コンフィギュレー 2195 タテンプレートファイルのターゲット依存部で検出しなければならない. 2196 2197 6.6.5 割込み管理機能の初期化処理の変更 2198 2199 (6-6-5-1) OMIT_INITIALIZE_INTERRUPT(オプション) 2200 2201 割込み管理機能の初期化処理をターゲット依存部で用意し,ターゲット非依存 2202 部に含まれる標準の割込み管理機能の初期化処理を用いない場合には,このシ 2203 ンボルをマクロ定義する. 2204 2205 このシンボルをマクロ定義すると,INHINIB,INTINIB,initialize_interrupt 2206 の定義が,カーネルのターゲット非依存部から取り除かれる.また, 2207 TNUM_INHNO,tnum_inhno,inhinib_table,TNUM_INTNO,tnum_intno, 2208 intinib_tableの定義と,割込みハンドラ毎の出入口処理を生成するための記述 2209 (INTHDR_ENTRYマクロのリスト)が,コンフィギュレータのパス2のテンプレー 2210 トファイルのターゲット非依存部によってkernel_cfg.cに生成されなくなる. 2211 ただし,コンフィギュレータのパス2のテンプレートファイルのターゲット依存 2212 部で,USE_INHINIB_TABLEとUSE_INTINIB_TABLEを設定することで,その一部 2213 分をkernel_cfg.cに生成することが可能である. 2214 2215 (6-6-5-2) void initialize_interrupt(void)(オプション) 2216 2217 OMIT_INITIALIZE_INTERRUPTをマクロ定義した場合には,この関数をターゲット 2218 依存部で用意する.OMIT_INITIALIZE_INTERRUPTをマクロ定義することにより取 2219 り除かれるその他のデータ型,変数,マクロは,この関数で使用する場合にの 2220 み用意すればよい. 2221 2222 6.6.6 デフォルトの割込みハンドラ 2223 2224 (6-6-6-1) void default_int_handler(void)(オプション) 2225 2226 コンフィギュレータにより割込みハンドラのテーブルを生成する場合などには, 2227 割込みハンドラを登録しなかった割込みハンドラ番号に対して,デフォルトの 2228 割込みハンドラとして,default_int_handlerを登録する. 2229 2230 default_int_handlerは,標準のものをターゲット依存部で用意するが,ユーザ 2231 が用意したもので置き換えられるように,OMIT_DEFAULT_INT_HANDLERをマクロ 2232 定義した場合には,ターゲット依存部で定義しないようにする.なお,ユーザ 2233 が用意する場合の名称は,_kernel_default_int_handlerとなる. 2234 2235 6.6.7 カーネル管理外の割込み 2236 2237 カーネル管理外の割込みハンドラは,カーネル内の割込み出入口処理を経由せ 2238 ずに実行するのが基本である. 2239 2240 ただし,すべての割込みで同じアドレスに分岐するプロセッサでは,カーネル 2241 内の割込み出入口処理を全く経由せずにカーネル管理外の割込みハンドラを実 2242 行することができないため,割込み出入口処理のなるべく早いタイミングで, 2243 カーネル管理外の割込みであるかを判別し,処理内容を分ける必要がある.具 2244 体的には,カーネル管理外の割込みの出入口処理では,オーバランハンドラの 2245 停止と動作開始を行ってはならない.また,reqflgをチェックし,タスク切換 2246 えやタスク例外処理ルーチンの呼出しを行う必要がない.さらに,NMIの出入口 2247 処理では,トレースログ取得処理(log_inh_enterおよびlog_inh_leave)を呼 2248 び出してはならない. 2249 2250 カーネル管理外の割込みハンドラを実行する際に,カーネル内の割込み出入口 2251 処理の一部分を経由する場合には,CPU例外が起こる可能性を極力減らすととも 2252 に,CPU例外を起こす可能性がある場合には,その可能性をターゲット依存部の 2253 ユーザーズマニュアルに記載しなければならない. 2254 2255 次に,カーネル管理外の割込みの設定方法に関して,「TOPPERS新世代カーネル 2256 統合仕様書」の「2.7.8 カーネル管理外の割込みの設定方法」の節の3つの方法 2257 のいずれを採用するかを決定する. 2258 2259 (a-1)または(a-2)を採用し,カーネル管理外とした割込みに対して,カーネル 2260 のAPIによる割込みハンドラの登録と割込み要求ラインの属性の設定をサポート 2261 しない場合には,それに代わる方法をターゲット依存部のユーザーズマニュア 2262 ルに記述する. 2263 2264 (a-1)または(a-2)を採用してカーネルのAPIによる割込みハンドラの登録や割込 2265 み要求ラインの属性の設定をサポートする場合や,(b)を採用した場合には,ター 2266 ゲット依存部においてそれを実現する必要がある. 2267 2268 カーネル管理外の割込みに対して,DEF_INHによる割込みハンドラの登録をサポー 2269 トするには,次の設定が必要になる. 2270 2271 ・TARGET_INHATRに,TA_NONKERNELを設定する. 2272 2273 ・(a-1)または(a-2)を採用した場合には,INHNO_DEFINH_VALIDに,カーネル管 2274 理外とした割込みに対応する割込みハンドラ番号を含める.また, 2275 VALID_INHNO_DEFINHを,カーネル管理外とした割込みハンドラ番号を有効な 2276 値と判定するようにする. 2277 2278 ・(a-1)または(a-2)を採用した場合には,INHNO_FIX_KERNELにカーネル管理と 2279 した割込みハンドラ番号のリストを,INHNO_FIX_NONKERNELにカーネル管理外 2280 とした割込みハンドラ番号のリスト設定する. 2281 2282 ・DEF_INHがカーネル管理外の割込みに対応できるようにする.標準の割込み管 2283 理機能の初期化処理を用いる場合には,x_define_inhをカーネル管理外の割 2284 込みに対応させる. 2285 2286 ・必要な場合には,TA_NONKERNEL属性が設定された割込みハンドラをカーネル 2287 管理外と扱うように,カーネル内の割込み出入口処理を修正する.標準の割 2288 込み管理機能の初期化処理を用いる場合,カーネル管理外の割込みに対して 2289 は,カーネル内の割込み出入口処理を生成せず,アプリケーションが登録し 2290 た割込みハンドラを直接呼び出すように,ターゲット非依存部により設定さ 2291 れるため,ターゲット依存部では対応する必要がない. 2292 2293 カーネル管理外の割込みに対して,CFG_INTによる割込み要求ラインの属性の設 2294 定をサポートするには,次の設定が必要になる. 2295 2296 ・(a-1)または(a-2)を採用した場合には,INTNO_CFGINT_VALIDに,カーネル管 2297 理外とした割込みに対応する割込み番号を含める.また,VALID_INTNO_CFGINT 2298 を,カーネル管理外とした割込み番号を有効な値と判定するようにする. 2299 2300 ・(a-1)または(a-2)を採用した場合には,INTNO_FIX_KERNELにカーネル管理と 2301 した割込み番号のリストを,INTNO_FIX_NONKERNELにカーネル管理外とした割 2302 込み番号のリスト設定する. 2303 2304 ・INTPRI_CFGINT_VALIDに,カーネル管理外の割込みとなる優先度を含める. 2305 2306 ・CFG_INTがカーネル管理外の割込みに対応できるようにする.標準の割込み管 2307 理機能の初期化処理を用いる場合には,x_config_intをカーネル管理外の割 2308 込みに対応させる. 2309 2310 chg_ipmにより,(NMI以外の)カーネル管理外の割込みをマスクできるように 2311 する場合には,次の設定が必要になる. 2312 2313 ・VALID_INTPRI_CHGIPMを,カーネル管理外の割込みとなる優先度を有効な値と 2314 判定するようにする. 2315 2316 ・t_set_ipmを,カーネル管理外の割込みとなる優先度を扱えるようにする. 2317 2318 6.6.8 割込みサービスルーチンの生成 2892 2319 2893 2320 (6-6-8-1) bool_t VALID_INTNO_CREISR(INTNO intno) 2894 2321 2895 intnoãï¼acre_isrã«å¯¾ããå²è¾¼ã¿çªå·ã¨ãã¦æå¹ãªå¤ã§ããå ´åã«trueï¼ãã 2896 ã§ãªãå ´åã«falseãè¿ããã¯ãï¼åççææ©è½æ¡å¼µããã±ã¼ã¸ã使ç¨ããªãå ´ 2897 åã«ã¯ï¼å®ç¾©ããå¿ 2898 è¦ããªãï¼ 2899 2900 6.7 CPUä¾å¤ãã³ãã©ã¨CPUä¾å¤çºçæã®ã·ã¹ãã ç¶æ 2901 ã®åç 2902 § 2903 2904 6.7.1 CPUä¾å¤ãã³ãã©ã®åºå 2905 ¥å£å¦ç 2906 2907 CPUä¾å¤ã®åºå 2908 ¥å£å¦çã®æ¹æ³ã¯ããã»ããµã«ãã£ã¦å¤§ããç°ãªããï¼ããããã® 2909 å¦çå 2910 容ã¯æ¬¡ã®éãï¼ 2322 intnoが,acre_isrに対する割込み番号として有効な値である場合にtrue,そう 2323 でない場合にfalseを返すマクロ.動的生成機能拡張パッケージを使用しない場 2324 合には,定義する必要がない. 2325 2326 6.7 CPU例外ハンドラとCPU例外発生時のシステム状態の参照 2327 2328 6.7.1 CPU例外ハンドラの出入口処理 2329 2330 CPU例外の出入口処理の方法はプロセッサによって大きく異なるが,おおよその 2331 処理内容は次の通り. 2911 2332 2912 2333 ---------------------------------------- 2913 2334 void 2914 <CPUä¾å¤ã®åºå 2915 ¥å£å¦ç>(void) 2335 <CPU例外の出入口処理>(void) 2916 2336 { 2917 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã2918 if ( ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤) {2919 if ( ã¿ã¹ã¯ã³ã³ããã¹ãã§CPUä¾å¤çºç) {2920 ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼2921 éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã â¦(*j)2337 スクラッチレジスタをスタックに保存する 2338 if (カーネル管理外のCPU例外) { 2339 if (タスクコンテキストでCPU例外発生) { 2340 スタックを非タスクコンテキスト用のスタックに切り換え, 2341 非タスクコンテキストに切り換える … (*j) 2922 2342 } 2923 ã·ã¹ãã ç¶æ 2924 ï¼ã³ã³ããã¹ãã¯é¤ãï¼ãï¼CPUä¾å¤çºçæã®ç¶æ 2925 ã«ãã 2926 CPUä¾å¤ãã³ãã©ãï¼CPUä¾å¤ã®æ 2927 å ±ãè¨æ¶ãã¦ããé åã®å 2928 é çªå°ã 2929 ãã©ã¡ã¼ã¿ï¼p_excinfï¼ã¨ãã¦å¼ã³åºã 2930 if (ã¿ã¹ã¯ã³ã³ããã¹ãã§CPUä¾å¤çºç) { 2931 ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼ 2932 ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã ⦠(*j) 2343 システム状態(コンテキストは除く)を,CPU例外発生時の状態にする 2344 CPU例外ハンドラを,CPU例外の情報を記憶している領域の先頭番地を 2345 パラメータ(p_excinf)として呼び出す 2346 if (タスクコンテキストでCPU例外発生) { 2347 スタックをタスク用のスタックに戻し, 2348 タスクコンテキストに切り換える … (*j) 2933 2349 } 2934 CPUä¾å¤å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUä¾å¤çºçæã®ã·ã¹ãã ç¶æ 2935 ã« 2936 æ»ãããã«æºåãã 2350 CPU例外処理からのリターン後に,CPU例外発生時のシステム状態に 2351 戻るように準備する 2937 2352 } 2938 2353 else { 2939 if (ã¿ã¹ã¯ã³ã³ããã¹ãã§CPUä¾å¤çºç) { 2940 ï¼å°ãªãã¨ãï¼ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ 2941 ã«ãã 2354 if (タスクコンテキストでCPU例外発生) { 2355 (少なくとも)カーネル管理の割込みを禁止した状態にする 2942 2356 #ifdef TOPPERS_SUPPORT_OVRHDR 2943 ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢*/2357 ovrtimer_stop(); /* オーバランタイマの停止 */ 2944 2358 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2945 ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼2946 éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã2359 スタックを非タスクコンテキスト用のスタックに切り換え, 2360 非タスクコンテキストに切り換える 2947 2361 } 2948 å²è¾¼ã¿åªå 2949 度ãã¹ã¯ãï¼CPUä¾å¤çºçæã®å¤ã«è¨å®ãï¼ 2950 CPUããã¯è§£é¤ç¶æ 2951 ã«ããï¼CPUä¾å¤çºçæã®å²è¾¼ã¿åªå 2952 度ãã¹ã¯ 2953 ãããåªå 2954 度ã®é«ãå²è¾¼ã¿ãåãä»ããããã«ããï¼ 2362 割込み優先度マスクを,CPU例外発生時の値に設定し, 2363 CPUロック解除状態にする(CPU例外発生時の割込み優先度マスク 2364 よりも優先度の高い割込みを受け付けるようにする) 2955 2365 2956 2366 #ifdef LOG_EXC_ENTER 2957 log_exc_enter(CPU ä¾å¤ãã³ãã©çªå·);2367 log_exc_enter(CPU例外ハンドラ番号); 2958 2368 #endif /* LOG_EXC_ENTER */ 2959 CPUä¾å¤ãã³ãã©ãï¼CPUä¾å¤ã®æ 2960 å ±ãè¨æ¶ãã¦ããé åã®å 2961 é çªå°ã 2962 ãã©ã¡ã¼ã¿ï¼p_excinfï¼ã¨ãã¦å¼ã³åºã 2369 CPU例外ハンドラを,CPU例外の情報を記憶している領域の先頭番地を 2370 パラメータ(p_excinf)として呼び出す 2963 2371 #ifdef LOG_EXC_LEAVE 2964 log_exc_leave(CPU ä¾å¤ãã³ãã©çªå·);2372 log_exc_leave(CPU例外ハンドラ番号); 2965 2373 #endif /* LOG_EXC_LEAVE */ 2966 2374 2967 2375 ret_exc: 2968 if (ã¿ã¹ã¯ã³ã³ããã¹ãã§CPUä¾å¤çºç) { 2969 ï¼å°ãªãã¨ãï¼ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ 2970 ã«ãã ⦠(*d) 2971 ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã 2972 ⦠(*g) 2376 if (タスクコンテキストでCPU例外発生) { 2377 (少なくとも)カーネル管理の割込みを禁止した状態にする … (*d) 2378 スタックをタスク用のスタックに戻し,タスクコンテキストに切り換える 2379 … (*g) 2973 2380 if (reqflg) { 2974 2381 reqflg = false; 2975 CPUããã¯ç¶æ 2976 ã«ãã ⦠(*e) 2382 CPUロック状態にする … (*e) 2977 2383 if (dspflg && p_runtsk != p_schedtsk) { 2978 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã2979 ã¹ã¿ãã¯ãã¤ã³ã¿ãèªã¿ã¹ã¯ï¼p_runtskï¼ã®TCBã«ä¿åãã2980 ret_exc_r ãï¼å®è¡åéçªå°ã¨ãã¦èªã¿ã¹ã¯ã®TCBã«ä¿åãã2981 â¦(*a)2982 dispatcher ã«åå²ãã2384 スクラッチレジスタを除くすべてのレジスタをスタックに保存する 2385 スタックポインタを自タスク(p_runtsk)のTCBに保存する 2386 ret_exc_rを,実行再開番地として自タスクのTCBに保存する 2387 … (*a) 2388 dispatcherに分岐する 2983 2389 2984 2390 ret_exc_r: 2985 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ã2986 ã¹ã¿ãã¯ãã復帰ãã2391 スクラッチレジスタを除くすべてのレジスタを 2392 スタックから復帰する 2987 2393 } 2988 2394 #ifdef TOPPERS_SUPPORT_OVRHDR 2989 ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§*/2395 ovrtimer_start(); /* オーバランタイマの動作開始 */ 2990 2396 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2991 calltex(); â¦(*b)2397 calltex(); … (*b) 2992 2398 } 2993 2399 #ifdef TOPPERS_SUPPORT_OVRHDR 2994 2400 else { 2995 ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§*/2401 ovrtimer_start(); /* オーバランタイマの動作開始 */ 2996 2402 } 2997 2403 #endif /* TOPPERS_SUPPORT_OVRHDR */ 2998 2404 } 2999 CPUä¾å¤å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUããã¯è§£é¤ç¶æ 3000 ã«æ»ãããã«æºåãã 2405 CPU例外処理からのリターン後に,CPUロック解除状態に戻るように準備する 3001 2406 } 3002 ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã3003 CPU ä¾å¤å¦çããã®ãªã¿ã¼ã³2407 スクラッチレジスタをスタックから復帰する 2408 CPU例外処理からのリターン 3004 2409 } 3005 2410 ---------------------------------------- 3006 2411 3007 CPUä¾å¤ãã³ãã©ã¯ï¼éã³ã³ããã¹ãã«åãæãããã¨ãé¤ãã¦ã¯ï¼CPUä¾å¤çº 3008 çæã¨åãã·ã¹ãã ç¶æ 3009 ã§å¼ã³åºããªããã°ãªããªãï¼ä¾ãã°ï¼CPUä¾å¤ãCPU 3010 ããã¯ç¶æ 3011 ã§çºçããå ´åã«ã¯CPUããã¯ç¶æ 3012 ï¼CPUããã¯è§£é¤ç¶æ 3013 ã§çºçãã 3014 å ´åã«ã¯CPUããã¯è§£é¤ç¶æ 3015 ã§ï¼CPUä¾å¤ãã³ãã©ãå¼ã³åºããªããã°ãªããªãï¼ 3016 CPUããã¯ç¶æ 3017 ã§çºçããCPUä¾å¤ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã¨ãªãããï¼ã«ã¼ 3018 ãã«ç®¡çã®CPUä¾å¤ãã³ãã©ã«ã¤ãã¦ã¯ï¼CPUããã¯è§£é¤ç¶æ 3019 ã§å¼ã³åºããã¨ã« 3020 ãªãï¼ 3021 3022 ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ãæ£ç¢ºã«å¤å®ããã®ãé£ãã 3023 å ´åãããï¼ãã®ãããªå ´åã«ã¯ï¼å²è¾¼ã¿åªå 3024 度ãã¹ã¯ãå 3025 ¨è§£é¤ã§ãªãç¶æ 3026 㧠3027 çºçããCPUä¾å¤ãï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã¨æ±ã£ã¦ãæ¯éããªãï¼ããã¯ï¼ 3028 å²è¾¼ã¿åªå 3029 度ãã¹ã¯ãå 3030 ¨è§£é¤ã§ãªãå ´åã«ã¯ï¼xsns_dpnï¼xsns_xpnã¨ãtrueã 3031 è¿ãããï¼ã¢ããªã±ã¼ã·ã§ã³ããã¯ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã¨åºå¥ã§ããªãã 3032 ãã§ããï¼ 3033 3034 å 3035 ·ä½çã«ã¯ï¼å 3036 ¨å²è¾¼ã¿ããã¯ï¼ã¾ãã¯CPUããã¯ï¼ãå°ãããªã¼ããããã§å®ç¾ 3037 ãããã¨ããã¨ï¼CPUä¾å¤ãã³ãã©ã®ä¸ã§ï¼å 3038 ¨å²è¾¼ã¿ããã¯ç¶æ 3039 ï¼ã¾ãã¯CPUãã 3040 ã¯ç¶æ 3041 ï¼ã¨å²è¾¼ã¿åªå 3042 度ãã¹ã¯ãé«ãã¬ãã«ã«è¨å®ããç¶æ 3043 ãåºå¥ã§ããªãå ´ 3044 åãããï¼ã¾ãï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦çä¸ãã«ã¼ãã«å®è¡ä¸ã§ããã㨠3045 ãæ£ç¢ºã«å¤æãããã¨ãé£ããå ´åãããï¼ 3046 3047 ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ãã³ãã©ãå¼ã¶æã«ï¼(*j)ã«ããã¦ï¼ã¹ã¿ãã¯ãéã¿ 3048 ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæã 3049 ã¦ãããï¼ãã®åæãã¯ã¿ã¼ã²ããå®ç¾©ã§çãã¦ãè¯ãï¼ããã¯ï¼ã«ã¼ãã«ç®¡ 3050 çå¤ã®CPUä¾å¤ã¯ï¼ã«ã¼ãã«å 3051 ã®ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ä¸ã§çºçããå¯è½æ§ã 3052 ããããï¼å®å 3053 ¨ã«åãæããããã¨ã¯éããªãããã§ããï¼ã¾ãï¼ã«ã¼ãã«ç®¡ 3054 çå¤ã®å²è¾¼ã¿ãã³ãã©ãå¼ã¶æã®ã³ã³ããã¹ããã¹ã¿ãã¯ã¯ã¿ã¼ã²ããä¾å㪠3055 ã®ã§ï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ãã³ãã©ãããã¨åæ§ã«æ±ã£ã¦è¯ãã¨èããã 3056 ãããã§ããï¼ 3057 3058 ä¸ã®ã³ã¼ãã§ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã«å¯¾ãã¦ï¼ãã¬ã¼ã¹ãã°åå¾å¦ç 3059 ï¼log_exc_enterããã³log_exc_leaveï¼ãå¼ã³åºãã¦ããªããï¼å 3060 ¨å²è¾¼ã¿ãã 3061 ã¯ç¶æ 3062 ãNMIã®å¦çä¸ã«CPUä¾å¤ãçºçããå ´åãé¤å¤ããã°ï¼å¼ã³åºãã¦ãã 3063 ã¾ããªãï¼å 3064 ¨å²è¾¼ã¿ããã¯ç¶æ 3065 ãNMIã®å¦çä¸ã«çºçããCPUä¾å¤ã®å ´åã«ã¯ï¼ 3066 ãã¬ã¼ã¹ãã°åå¾å¦çãå¼ã³åºãã¦ã¯ãªããªãï¼ 3067 3068 CPUä¾å¤ãã³ãã©ãå®è¡ããéã«çµç±ããé¨åã§ã¯ï¼CPUä¾å¤ãèµ·ããå¯è½æ§ã 3069 極åæ¸ããã¨ã¨ãã«ï¼CPUä¾å¤ãèµ·ããå¯è½æ§ãããå ´åï¼ä¾ãã°ï¼ã¹ã¯ã©ãã 3070 ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åããæã«ï¼ãã¹ã¨ã©ã¼ãªã©ã®CPUä¾å¤ãçºçããå¯è½ 3071 æ§ãèããããï¼ã«ã¯ï¼ãã®å¯è½æ§ãã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ 3072 ã«ã«è¨è¼ããªããã°ãªããªãï¼ 3073 3074 ret_exc以éã®å¦çã¯ï¼å²è¾¼ã¿ã®åºå 3075 ¥å£å¦çã®ret_int以éã®å¦çã¨ã»ã¼åã㧠3076 ããããï¼ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼å 3077 ±éã®ã«ã¼ãã³ãç¨ãããã¨ãã§ããå¯è½ 3078 æ§ãããï¼ 3079 3080 CPUä¾å¤ã®åºå 3081 ¥å£å¦çãã¢ã»ã³ããªè¨èªã§è¨è¿°ããå ´åã«ã¯ï¼ãã¬ã¼ã¹ãã°åå¾ 3082 å¦çã¯ï¼ã6.2 ãã¬ã¼ã¹ãã°æ©è½ã¸ã®å¯¾å¿ãã®ç¯ã§è¨è¿°ããæ¹æ³ã§ã³ã¼ãã£ã³ 3083 ã°ãããã¨ï¼ 3084 3085 6.7.2 CPUä¾å¤ãã³ãã©ã®åºå 3086 ¥å£å¦çã®çæ 3087 3088 CPUä¾å¤ãã¯ãã«ããã¼ãã¦ã§ã¢ã§å®ç¾ãã¦ããå ´åãªã©ï¼CPUä¾å¤ãã³ãã©æ¯ 3089 ã«åºå 3090 ¥å£å¦çãç¨æããæ¹ãå¹çãè¯ãã¿ã¼ã²ããã®ããã«ï¼CPUä¾å¤ãã³ãã© 3091 æ¯ã«åºå 3092 ¥å£å¦çãçæããæ©æ§ãç¨æãã¦ããï¼ 3093 3094 以ä¸ã®ãã¯ãã¯ï¼æ¨æºã®CPUä¾å¤ç®¡çæ©è½ã®åæåå¦çãç¨ããå ´åã®ã¿ï¼ã¿ã¼ 3095 ã²ããéä¾åé¨ã§ä½¿ãããï¼CPUä¾å¤ç®¡çæ©è½ã®åæåå¦çãã¿ã¼ã²ããä¾åé¨ 3096 ã§ç¨æãï¼ãã®ä¸ã§ãããã®ãã¯ãã使ããªãå ´åã«ã¯ï¼ãããã®ãã¯ããç¨ 3097 æããå¿ 3098 è¦ã¯ãªãï¼ 2412 CPU例外ハンドラは,非コンテキストに切り換えることを除いては,CPU例外発 2413 生時と同じシステム状態で呼び出さなければならない.例えば,CPU例外がCPU 2414 ロック状態で発生した場合にはCPUロック状態,CPUロック解除状態で発生した 2415 場合にはCPUロック解除状態で,CPU例外ハンドラを呼び出さなければならない. 2416 CPUロック状態で発生したCPU例外は,カーネル管理外のCPU例外となるため,カー 2417 ネル管理のCPU例外ハンドラについては,CPUロック解除状態で呼び出すことに 2418 なる. 2419 2420 ターゲットによっては,カーネル管理外のCPU例外を正確に判定するのが難しい 2421 場合がある.このような場合には,割込み優先度マスクが全解除でない状態で 2422 発生したCPU例外を,カーネル管理外のCPU例外と扱っても支障がない.これは, 2423 割込み優先度マスクが全解除でない場合には,xsns_dpn,xsns_xpnともtrueを 2424 返すため,アプリケーションからはカーネル管理外のCPU例外と区別できないた 2425 めである. 2426 2427 具体的には,全割込みロック(またはCPUロック)を小さいオーバヘッドで実現 2428 しようとすると,CPU例外ハンドラの中で,全割込みロック状態(またはCPUロッ 2429 ク状態)と割込み優先度マスクを高いレベルに設定した状態を区別できない場 2430 合がある.また,カーネル管理外の割込み処理中やカーネル実行中であること 2431 を正確に判断することも難しい場合がある. 2432 2433 カーネル管理外のCPU例外ハンドラを呼ぶ時に,(*j)において,スタックを非タ 2434 スクコンテキスト用のスタックに切り換え,非タスクコンテキストに切り換え 2435 ているが,この切換えはターゲット定義で省いても良い.これは,カーネル管 2436 理外のCPU例外は,カーネル内のクリティカルセクション中で発生する可能性が 2437 あるため,安全に切り換えられるとは限らないためである.また,カーネル管 2438 理外の割込みハンドラを呼ぶ時のコンテキストやスタックはターゲット依存な 2439 ので,カーネル管理外のCPU例外ハンドラもそれと同様に扱って良いと考えられ 2440 るためである. 2441 2442 上のコードでは,カーネル管理外のCPU例外に対して,トレースログ取得処理 2443 (log_exc_enterおよびlog_exc_leave)を呼び出していないが,全割込みロッ 2444 ク状態かNMIの処理中にCPU例外が発生した場合を除外すれば,呼び出してもか 2445 まわない.全割込みロック状態かNMIの処理中に発生したCPU例外の場合には, 2446 トレースログ取得処理を呼び出してはならない. 2447 2448 CPU例外ハンドラを実行する際に経由する部分では,CPU例外が起こる可能性を 2449 極力減らすとともに,CPU例外を起こす可能性がある場合(例えば,スクラッチ 2450 レジスタをスタックに保存する時に,バスエラーなどのCPU例外が発生する可能 2451 性が考えられる)には,その可能性をターゲット依存部のユーザーズマニュア 2452 ルに記載しなければならない. 2453 2454 ret_exc以降の処理は,割込みの出入口処理のret_int以降の処理とほぼ同じで 2455 あるため,ターゲットによっては,共通のルーチンを用いることができる可能 2456 性がある. 2457 2458 CPU例外の出入口処理をアセンブリ言語で記述する場合には,トレースログ取得 2459 処理は,「6.2 トレースログ機能への対応」の節で記述した方法でコーディン 2460 グすること. 2461 2462 6.7.2 CPU例外ハンドラの出入口処理の生成 2463 2464 CPU例外ベクトルをハードウェアで実現している場合など,CPU例外ハンドラ毎 2465 に出入口処理を用意した方が効率が良いターゲットのために,CPU例外ハンドラ 2466 毎に出入口処理を生成する機構を用意している. 2467 2468 以下のマクロは,標準のCPU例外管理機能の初期化処理を用いた場合のみ,ター 2469 ゲット非依存部で使われる.CPU例外管理機能の初期化処理をターゲット依存部 2470 で用意し,その中でこれらのマクロを使わない場合には,これらのマクロを用 2471 意する必要はない. 3099 2472 3100 2473 (6-7-2-1) EXC_ENTRY(excno, exchdr) 3101 2474 3102 CPUä¾å¤ãã³ãã©çªå·ãexcnoï¼CPUä¾å¤ãã³ãã©ã®é¢æ°åãexchdrã§ããCPUä¾ 3103 å¤ãã³ãã©ã®åºå 3104 ¥å£å¦çã®ã©ãã«ãä½ããã¯ãï¼EXCHDR_ENTRYãç¨ãã¦CPUä¾å¤ 3105 ãã³ãã©æ¯ã«åºå 3106 ¥å£å¦çãçæããå ´åã«ã¯ï¼æ¬¡ã®ããã«å®ç¾©ããï¼ 2475 CPU例外ハンドラ番号がexcno,CPU例外ハンドラの関数名がexchdrであるCPU例 2476 外ハンドラの出入口処理のラベルを作るマクロ.EXCHDR_ENTRYを用いてCPU例外 2477 ハンドラ毎に出入口処理を生成する場合には,次のように定義する. 3107 2478 3108 2479 #define EXC_ENTRY(excno, exchdr) _kernel_##exchdr##_##excno 3109 2480 3110 CPUä¾å¤ãã³ãã©æ¯ã«åºå 3111 ¥å£å¦çãä½ãå¿ 3112 è¦ããªãå ´åã«ã¯ï¼æ¬¡ã®ããã«å®ç¾©ã 3113 ã¦ï¼CPUä¾å¤ãã³ãã©ã®é¢æ°åããã®ã¾ã¾è¿ãï¼ 2481 CPU例外ハンドラ毎に出入口処理を作る必要がない場合には,次のように定義し 2482 て,CPU例外ハンドラの関数名をそのまま返す. 3114 2483 3115 2484 #define EXC_ENTRY(excno, exchdr) exchdr … … 3117 2486 (6-7-2-2) EXCHDR_ENTRY(excno, excno_num, exchdr) 3118 2487 3119 CPUä¾å¤ãã³ãã©çªå·ãexcnoï¼CPUä¾å¤ãã³ãã©ã®é¢æ°åãexchdrã§ããCPUä¾ 3120 å¤ãã³ãã©ã®åºå 3121 ¥å£å¦çãçæãããã¯ãï¼excno_numã«ã¯ï¼ã¢ã»ã³ããªè¨èªè¨ 3122 è¿°ç¨ã«ï¼CPUä¾å¤ãã³ãã©çªå·ãæ°å¤ã§æ¸¡ãããï¼CPUä¾å¤ãã³ãã©æ¯ã«åºå 3123 ¥å£ 3124 å¦çãä½ãå¿ 3125 è¦ããªãå ´åã«ã¯ï¼ç©ºã«å®ç¾©ããï¼ 3126 3127 6.7.3 CPUä¾å¤ãã³ãã©ã®è¨å® 3128 3129 (6-7-3-1) bool_t VALID_EXCNO_DEFEXC(EXCNO excno)ï¼ãªãã·ã§ã³ï¼ 3130 3131 excnoãï¼DEF_EXCã«å¯¾ããCPUä¾å¤ãã³ãã©çªå·ã¨ãã¦æå¹ãªå¤ã§ããå ´åã« 3132 trueï¼ããã§ãªãå ´åã«falseãè¿ããã¯ãï¼ 3133 3134 ASPã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ã¯ï¼ãã®ãã¯ãã¯ä½¿ããã¦ããªãããï¼ã¿ã¼ 3135 ã²ããä¾åé¨ã§ä½¿ããªããªãï¼ç¨æããå¿ 3136 è¦ããªãï¼ 2488 CPU例外ハンドラ番号がexcno,CPU例外ハンドラの関数名がexchdrであるCPU例 2489 外ハンドラの出入口処理を生成するマクロ.excno_numには,アセンブリ言語記 2490 述用に,CPU例外ハンドラ番号が数値で渡される.CPU例外ハンドラ毎に出入口 2491 処理を作る必要がない場合には,空に定義する. 2492 2493 6.7.3 CPU例外ハンドラの設定 2494 2495 (6-7-3-1) bool_t VALID_EXCNO_DEFEXC(EXCNO excno)(オプション) 2496 2497 excnoが,DEF_EXCに対するCPU例外ハンドラ番号として有効な値である場合に 2498 true,そうでない場合にfalseを返すマクロ. 2499 2500 ASPカーネルのターゲット非依存部では,このマクロは使われていないため,ター 2501 ゲット依存部で使わないなら,用意する必要がない. 3137 2502 3138 2503 (6-7-3-2) void x_define_exc(EXCNO excno, FP exc_entry) 3139 2504 3140 excnoã§æå®ãããCPUä¾å¤ãã³ãã©ã®åºå 3141 ¥å£å¦çã®çªå°ãexc_entryã«è¨å®ããï¼ 3142 3143 ãã®é¢æ°ã¯ï¼æ¨æºã®CPUä¾å¤ç®¡çæ©è½ã®åæåå¦çãç¨ããå ´åã®ã¿ï¼ã¿ã¼ã²ã 3144 ãéä¾åé¨ããå¼ã³åºãããï¼CPUä¾å¤ç®¡çæ©è½ã®åæåå¦çãã¿ã¼ã²ããä¾å 3145 é¨ã§ç¨æãï¼ãã®ä¸ã§ãã®é¢æ°ãå¼ã³åºããªãå ´åã«ã¯ï¼ãã®é¢æ°ãç¨æãã 3146 å¿ 3147 è¦ã¯ãªãï¼ 3148 3149 ãã®é¢æ°ã¯ï¼ã¿ã¼ã²ããéä¾åé¨ã®ã«ã¼ãã«åæåå¦çããå¼ã³åºãããããï¼ 3150 ã«ã¼ãã«ã®åæåå¦çï¼NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ããã¹ã¯ããã¦ããï¼ããå¼ 3151 ã³åºããããã«å®è£ 3152 ããã°ããï¼ 3153 3154 æå®ãããCPUä¾å¤ãã³ãã©çªå·ãDEF_EXCã«å¯¾ãããã®ã¨ãã¦æå¹ãªå¤ã§ãªã 3155 å ´åã®åä½ã¯ä¿è¨¼ããå¿ 3156 è¦ããªãï¼assertã§ã¨ã©ã¼ã¨ããã®ãæã¾ããï¼ï¼ã 3157 ãã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãï¼ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾å 3158 é¨ã§å®ç¾©ããEXCNO_DEFEXC_VALIDãç¨ãã¦ã¨ã©ã¼ãæ¤åºããããã§ããï¼ 3159 3160 6.7.4 CPUä¾å¤ç®¡çæ©è½ã®åæåå¦çã®å¤æ´ 3161 3162 (6-7-4-1) OMIT_INITIALIZE_EXCEPTIONï¼ãªãã·ã§ã³ï¼ 3163 3164 CPUä¾å¤ç®¡çæ©è½ã®åæåå¦çãã¿ã¼ã²ããä¾åé¨ã§ç¨æãï¼ã¿ã¼ã²ããéä¾å 3165 é¨ã«å«ã¾ããæ¨æºã®å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãç¨ããªãå ´åã«ã¯ï¼ãã®ã· 3166 ã³ãã«ããã¯ãå®ç¾©ããï¼ 3167 3168 ãã®ã·ã³ãã«ããã¯ãå®ç¾©ããã¨ï¼EXCINIBã¨initialize_exceptionã®å®ç¾©ãï¼ 3169 ã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ããåãé¤ãããï¼ã¾ãï¼TNUM_EXCNOï¼ 3170 tnum_excnoï¼excinib_tableã®å®ç¾©ã¨ï¼CPUä¾å¤ãã³ãã©æ¯ã®åºå 3171 ¥å£å¦çãçæ 3172 ããããã®è¨è¿°ï¼EXCHDR_ENTRYãã¯ãã®ãªã¹ãï¼ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ã 3173 ã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ã«ãã£ã¦kernel_cfg.cã«çæ 3174 ãããªããªãï¼ 3175 3176 (6-7-4-2) void initialize_exception(void)ï¼ãªãã·ã§ã³ï¼ 3177 3178 OMIT_INITIALIZE_EXCEPTIONããã¯ãå®ç¾©ããå ´åã«ã¯ï¼ãã®é¢æ°ãã¿ã¼ã²ãã 3179 ä¾åé¨ã§ç¨æããï¼OMIT_INITIALIZE_EXCEPTIONããã¯ãå®ç¾©ãããã¨ã«ããå 3180 ãé¤ããããã®ä»ã®ãã¼ã¿åï¼å¤æ°ï¼ãã¯ãã¯ï¼ãã®é¢æ°ã§ä½¿ç¨ããå ´åã«ã® 3181 ã¿ç¨æããã°ããï¼ 3182 3183 6.7.5 ããã©ã«ãã®CPUä¾å¤ãã³ãã© 3184 3185 (6-7-5-1) void default_exc_handler(void *p_excinf)ï¼ãªãã·ã§ã³ï¼ 3186 3187 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«ããCPUä¾å¤ãã³ãã©ã®ãã¼ãã«ãçæããå ´åãªã©ã«ã¯ï¼ 3188 CPUä¾å¤ãã³ãã©ãç»é²ããªãã£ãCPUä¾å¤ãã³ãã©çªå·ã«å¯¾ãã¦ï¼ããã©ã«ã 3189 ã®CPUä¾å¤ãã³ãã©ã¨ãã¦ï¼default_exc_handlerãç»é²ããï¼ 3190 3191 default_exc_handlerã¯ï¼æ¨æºã®ãã®ãã¿ã¼ã²ããä¾åé¨ã§ç¨æãããï¼ã¦ã¼ã¶ 3192 ãç¨æãããã®ã§ç½®ãæããããããã«ï¼OMIT_DEFAULT_EXC_HANDLERããã¯ã 3193 å®ç¾©ããå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããªãããã«ããï¼ãªãï¼ã¦ã¼ã¶ 3194 ãç¨æããå ´åã®å称ã¯ï¼_kernel_default_exc_handlerã¨ãªãï¼ 3195 3196 6.7.6 CPUä¾å¤çºçæã®ã·ã¹ãã ç¶æ 3197 ã®åç 3198 § 2505 excnoで指定されたCPU例外ハンドラの出入口処理の番地をexc_entryに設定する. 2506 2507 この関数は,標準のCPU例外管理機能の初期化処理を用いた場合のみ,ターゲッ 2508 ト非依存部から呼び出される.CPU例外管理機能の初期化処理をターゲット依存 2509 部で用意し,その中でこの関数を呼び出さない場合には,この関数を用意する 2510 必要はない. 2511 2512 この関数は,ターゲット非依存部のカーネル初期化処理から呼び出されるため, 2513 カーネルの初期化処理(NMIを除くすべての割込みがマスクされている)から呼 2514 び出せるように実装すればよい. 2515 2516 指定されたCPU例外ハンドラ番号がDEF_EXCに対するものとして有効な値でない 2517 場合の動作は保証する必要がない(assertでエラーとするのが望ましい).こ 2518 れは,コンフィギュレータが,パス2のテンプレートファイルのターゲット依存 2519 部で定義するEXCNO_DEFEXC_VALIDを用いてエラーを検出するためである. 2520 2521 6.7.4 CPU例外管理機能の初期化処理の変更 2522 2523 (6-7-4-1) OMIT_INITIALIZE_EXCEPTION(オプション) 2524 2525 CPU例外管理機能の初期化処理をターゲット依存部で用意し,ターゲット非依存 2526 部に含まれる標準の割込み管理機能の初期化処理を用いない場合には,このシ 2527 ンボルをマクロ定義する. 2528 2529 このシンボルをマクロ定義すると,EXCINIBとinitialize_exceptionの定義が, 2530 カーネルのターゲット非依存部から取り除かれる.また,TNUM_EXCNO, 2531 tnum_excno,excinib_tableの定義と,CPU例外ハンドラ毎の出入口処理を生成 2532 するための記述(EXCHDR_ENTRYマクロのリスト)を,コンフィギュレータのパ 2533 ス2のテンプレートファイルのターゲット非依存部によってkernel_cfg.cに生成 2534 されなくなる. 2535 2536 (6-7-4-2) void initialize_exception(void)(オプション) 2537 2538 OMIT_INITIALIZE_EXCEPTIONをマクロ定義した場合には,この関数をターゲット 2539 依存部で用意する.OMIT_INITIALIZE_EXCEPTIONをマクロ定義することにより取 2540 り除かれるその他のデータ型,変数,マクロは,この関数で使用する場合にの 2541 み用意すればよい. 2542 2543 6.7.5 デフォルトのCPU例外ハンドラ 2544 2545 (6-7-5-1) void default_exc_handler(void *p_excinf)(オプション) 2546 2547 コンフィギュレータによりCPU例外ハンドラのテーブルを生成する場合などには, 2548 CPU例外ハンドラを登録しなかったCPU例外ハンドラ番号に対して,デフォルト 2549 のCPU例外ハンドラとして,default_exc_handlerを登録する. 2550 2551 default_exc_handlerは,標準のものをターゲット依存部で用意するが,ユーザ 2552 が用意したもので置き換えられるように,OMIT_DEFAULT_EXC_HANDLERをマクロ 2553 定義した場合には,ターゲット依存部で定義しないようにする.なお,ユーザ 2554 が用意する場合の名称は,_kernel_default_exc_handlerとなる. 2555 2556 6.7.6 CPU例外発生時のシステム状態の参照 3199 2557 3200 2558 (6-7-6-1) bool_t exc_sense_intmask(void *p_excinf) 3201 2559 3202 CPUä¾å¤ã®çºçããæã®ã·ã¹ãã ç¶æ 3203 ãï¼ã«ã¼ãã«å®è¡ä¸ã§ãªãï¼ã¿ã¹ã¯ã³ã³ã 3204 ãã¹ãã§ããï¼å 3205 ¨å²è¾¼ã¿ããã¯ç¶æ 3206 ã§ãªãï¼CPUããã¯ç¶æ 3207 ã§ãªãï¼å²è¾¼ã¿åªå 3208 3209 度ãã¹ã¯å 3210 ¨è§£é¤ç¶æ 3211 ã§ããæã«trueï¼ããã§ãªãæã«falseãè¿ãé¢æ°ï¼ 3212 3213 p_excinfã«ã¯ï¼CPUä¾å¤ã®æ 3214 å ±ãè¨æ¶ãã¦ããé åã®å 3215 é çªå°ã渡ãããï¼ 3216 3217 CPUä¾å¤ãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦çä¸ã§çºçããå ´åã«ãfalseãè¿ããªã 3218 ãã°ãªããªããã¨ã«æ³¨æãããã¨ï¼ 3219 3220 6.8 ã«ã¼ãã«ã®èµ·åã»çµäºã¨ã¹ã¿ãã¯é åãªã© 3221 3222 (6-8-1) ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã« 3223 3224 ã«ã¼ãã«ã®ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã¯ï¼ã·ã¹ãã ã®ãªã»ããå¾ã«æåã«å®è¡ 3225 ãããããã°ã©ã ã§ããï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã¯ï¼æ¨æºçã«ã¯ï¼ããã»ã 3226 ãµä¾åé¨ã¾ãã¯ãããä¾åé¨ã§ç¨æã以ä¸ã®å¦çãè¡ããï¼ããã«ãã ããå¿ 3227 3228 è¦ã¯ãªãï¼å 3229 ·ä½çã«ã¯ï¼éçºç°å¢ã«ç¨æããã¦ããã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã« 3230 ãç¨ããæ¹æ³ï¼ãã®å ´åï¼ã¿ã¼ã²ããä¾åé¨ã§mainé¢æ°ãç¨æããå¿ 3231 è¦ãããï¼ 3232 ãï¼ã¢ããªã±ã¼ã·ã§ã³ã§ç¨æããå ´åãèããããï¼ 3233 3234 (a) ããã»ããµç¶æ 3235 ã®åæå 3236 3237 ããã»ããµã¢ã¼ãï¼ã¹ã¿ãã¯ãã¤ã³ã¿ï¼ãã¬ã¼ã ãã¤ã³ã¿çï¼ããã»ããµã®ç¶ 3238 æ 3239 ãåæåããï¼ã¾ãï¼NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ããã¹ã¯ããç¶æ 3240 ï¼å 3241 ¨å²è¾¼ã¿ 3242 ããã¯ç¶æ 3243 ã¨åçã®ç¶æ 3244 ï¼ã¨ããï¼DRAMã³ã³ããã¼ã©ã®åæåãªã©ï¼ã¡ã¢ãªã 3245 ã¢ã¯ã»ã¹ããããã«å¿ 3246 è¦ãªåæåå¦çãããã§è¡ã£ã¦ãããï¼æ¬¡ã® 3247 hardware_init_hookã§è¡ã£ã¦ãããï¼ï¼ 3248 3249 (b) hardware_init_hookãå¼ã³åºã 3250 3251 ã·ã¹ãã ã®ãªã»ããå¾ããã«è¡ãå¿ 3252 è¦ã®ããã¿ã¼ã²ããã·ã¹ãã ä¾åã®åæå 3253 å¦çãè¡ãããã«ï¼hardware_init_hookãå¼ã³åºãï¼hardware_init_hookãç¨ 3254 æããã¦ããªãå ´åã¯ï¼ä½ãããªãï¼GNUéçºç°å¢ã§ã¯ï¼ãªã³ã«ã¹ã¯ãªããä¸ã® 3255 weak definitionã«ããï¼hardware_init_hookãç¨æããã¦ããªãå ´åã®å¤ã0 3256 ã¨ãããã¨ã§ï¼ãããå®ç¾ã§ããï¼weak definitionã®æ©è½ãæããªãéçºç°å¢ 3257 ã§ã¯ï¼hardware_init_hookãå¿ 3258 ãå¼ã³åºããã¨ã«ããï¼ 3259 3260 hardware_init_hookã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æããã®ãæ¨æºã§ãããï¼ã·ã¹ 3261 ãã ã®ãªã»ããå¾ããã«è¡ãå¿ 3262 è¦ã®ããåæåå¦çã追å ããããã«ï¼ã¢ã㪠3263 ã±ã¼ã·ã§ã³ã§ç¨æãããã®ãç¨ããå ´åãããï¼ 3264 3265 ã¡ã¢ãªã¢ã¯ã»ã¹ã«å¿ 3266 è¦ãªåæåå¦çãhardware_init_hookã§è¡ãå ´åã«ã¯ï¼ã 3267 ããå¼ã³åºãæç¹ã§ã¡ã¢ãªã«ã¢ã¯ã»ã¹ãããã¨ãã§ããªãããï¼é¢æ°ï¼ãµãã«ã¼ 3268 ãã³ï¼ãå¼ã³åºãããã«ã¹ã¿ãã¯ã使ç¨ããããã»ããµã§ã¯ï¼æ»ãçªå°ãæ±ç¨ 3269 ã¬ã¸ã¹ã¿ã«å 3270 ¥ãã¦å¼ã³åºãã¨ãã£ã工夫ãå¿ 3271 è¦ã§ããï¼ãã®å ´åï¼ 3272 hardware_init_hookãCè¨èªã§è¨è¿°ãããã¨ã¯ã§ããªããªããï¼ãããããªãï¼ 3273 3274 (c) bssã»ã¯ã·ã§ã³ã¨dataã»ã¯ã·ã§ã³ã®åæå 3275 3276 bssã»ã¯ã·ã§ã³ãã¯ãªã¢ãï¼dataã»ã¯ã·ã§ã³ã«åæå¤ãè¨å®ããï¼ 3277 3278 ãã ãï¼ã«ã¼ãã«æ¬ä½ã¯ï¼kerflgãfalseï¼ï¼0ï¼ã«åæåããããã¨ä»¥å¤ã«ï¼ 3279 ãããã®ã»ã¯ã·ã§ã³ãåæåããããã¨ã«ä¾åãã¦ããªãããï¼ã¹ã¿ã¼ãã¢ã 3280 ãã¢ã¸ã¥ã¼ã«ãã¢ããªã±ã¼ã·ã§ã³ã§ç¨æããå ´åã§ï¼ã·ã¹ãã ãµã¼ãã¹ãã¢ã 3281 ãªã±ã¼ã·ã§ã³ããããã®ã»ã¯ã·ã§ã³ãåæåããããã¨ã«ä¾åãã¦ããªãå ´å 3282 ã«ã¯ï¼ã·ã¹ãã ã®èµ·åæéãç縮ããããã«ï¼kerflgãfalseã«åæåããã ã 3283 ã§ååã§ããï¼ 3284 3285 (d) software_init_hookãå¼ã³åºã 3286 3287 éçºç°å¢ï¼ç¹ã«ã©ã¤ãã©ãªï¼ã«ä¾åãã¦å¿ 3288 è¦ãªåæåå¦çãè¡ãããã«ï¼ 3289 software_init_hookãå¼ã³åºãï¼software_init_hookãç¨æããã¦ããªãå ´å 3290 ã¯ï¼ä½ãããªãï¼GNUéçºç°å¢ã§ã¯ï¼ãªã³ã«ã¹ã¯ãªããä¸ã®weak definitionã« 3291 ããï¼software_init_hookãç¨æããã¦ããªãå ´åã®å¤ã0ã¨ãããã¨ã§ï¼ãã 3292 ãå®ç¾ã§ããï¼weak definitionã®æ©è½ãæããªãéçºç°å¢ã§ã¯ï¼ 3293 software_init_hookãå¿ 3294 ãå¼ã³åºããã¨ã«ããï¼ 3295 3296 software_init_hookã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ç¨æããã®ãæ¨æºã§ããï¼ 3297 3298 (e) sta_kerã¸åå² 3299 3300 sta_kerãå¼ã³åºãï¼sta_kerã¯ï¼NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ããã¹ã¯ããç¶æ 3301 3302 ï¼å 3303 ¨å²è¾¼ã¿ããã¯ç¶æ 3304 ã¨åçã®ç¶æ 3305 ï¼ã§å¼ã³åºããªããã°ãªããªãï¼sta_kerã 3306 ãã¯ãªã¿ã¼ã³ãããã¨ããªãããï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã«æ»ã£ã¦ããã 3307 ã¨ã¯èããå¿ 3308 è¦ããªãï¼ 2560 CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコンテ 2561 キストであり,全割込みロック状態でなく,CPUロック状態でなく,割込み優先 2562 度マスク全解除状態である時にtrue,そうでない時にfalseを返す関数. 2563 2564 p_excinfには,CPU例外の情報を記憶している領域の先頭番地が渡される. 2565 2566 CPU例外がカーネル管理外の割込み処理中で発生した場合にもfalseを返さなけ 2567 ればならないことに注意すること. 2568 2569 6.8 カーネルの起動・終了とスタック領域など 2570 2571 (6-8-1) スタートアップモジュール 2572 2573 カーネルのスタートアップモジュールは,システムのリセット後に最初に実行 2574 されるプログラムである.スタートアップモジュールは,標準的には,プロセッ 2575 サ依存部またはチップ依存部で用意し以下の処理を行うが,それにこだわる必 2576 要はない.具体的には,開発環境に用意されているスタートアップモジュール 2577 を用いる方法(この場合,ターゲット依存部でmain関数を用意する必要がある) 2578 や,アプリケーションで用意する場合が考えられる. 2579 2580 (a) プロセッサ状態の初期化 2581 2582 プロセッサモード,スタックポインタ,フレームポインタ等,プロセッサの状 2583 態を初期化する.また,NMIを除くすべての割込みをマスクした状態(全割込み 2584 ロック状態と同等の状態)とする.DRAMコントローラの初期化など,メモリを 2585 アクセスするために必要な初期化処理をここで行ってもよい(次の 2586 hardware_init_hookで行ってもよい). 2587 2588 (b) hardware_init_hookを呼び出す 2589 2590 システムのリセット後すぐに行う必要のあるターゲットシステム依存の初期化 2591 処理を行うために,hardware_init_hookを呼び出す.hardware_init_hookが用 2592 意されていない場合は,何もしない.GNU開発環境では,リンカスクリプト中の 2593 weak definitionにより,hardware_init_hookが用意されていない場合の値を0 2594 とすることで,これを実現できる.weak definitionの機能を持たない開発環境 2595 では,hardware_init_hookを必ず呼び出すことにする. 2596 2597 hardware_init_hookは,ターゲット依存部で用意するのが標準であるが,シス 2598 テムのリセット後すぐに行う必要のある初期化処理を追加するために,アプリ 2599 ケーションで用意したものを用いる場合もある. 2600 2601 メモリアクセスに必要な初期化処理をhardware_init_hookで行う場合には,こ 2602 れを呼び出す時点でメモリにアクセスすることができないため,関数(サブルー 2603 チン)を呼び出すためにスタックを使用するプロセッサでは,戻り番地を汎用 2604 レジスタに入れて呼び出すといった工夫が必要である.この場合, 2605 hardware_init_hookをC言語で記述することはできなくなるが,やむをえない. 2606 2607 (c) bssセクションとdataセクションの初期化 2608 2609 bssセクションをクリアし,dataセクションに初期値を設定する. 2610 2611 ただし,カーネル本体は,kerflgがfalse(=0)に初期化されること以外に, 2612 これらのセクションが初期化されることに依存していないため,スタートアッ 2613 プモジュールをアプリケーションで用意する場合で,システムサービスやアプ 2614 リケーションがこれらのセクションが初期化されることに依存していない場合 2615 には,システムの起動時間を短縮するために,kerflgをfalseに初期化するだけ 2616 で十分である. 2617 2618 (d) software_init_hookを呼び出す 2619 2620 開発環境(特にライブラリ)に依存して必要な初期化処理を行うために, 2621 software_init_hookを呼び出す.software_init_hookが用意されていない場合 2622 は,何もしない.GNU開発環境では,リンカスクリプト中のweak definitionに 2623 より,software_init_hookが用意されていない場合の値を0とすることで,これ 2624 を実現できる.weak definitionの機能を持たない開発環境では, 2625 software_init_hookを必ず呼び出すことにする. 2626 2627 software_init_hookは,ターゲット依存部で用意するのが標準である. 2628 2629 (e) sta_kerへ分岐 2630 2631 sta_kerを呼び出す.sta_kerは,NMIを除くすべての割込みをマスクした状態 2632 (全割込みロック状態と同等の状態)で呼び出さなければならない.sta_kerか 2633 らはリターンすることがないため,スタートアップモジュールに戻ってくるこ 2634 とは考える必要がない. 3309 2635 3310 2636 (6-8-2) void target_initialize(void) 3311 2637 3312 ã¿ã¼ã²ããä¾åé¨ã®åæåãè¡ãé¢æ°ï¼sta_kerã®æåã§å¼ã³åºãããï¼ããã»ã 3313 ãµã»ãããã»éçºç°å¢ä¾åã®åæåå¦çãï¼ãããã®ä¾åé¨ã«åãåããã㨠3314 ãå¯è½ã§ããï¼ 3315 3316 ãã®é¢æ°ã¯ï¼ããã¾ã§ãã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã®åæåå¦çãè¡ããã 3317 ã®ãã®ã§ããï¼ã¢ããªã±ã¼ã·ã§ã³ã«å¿ 3318 è¦ãªåæåå¦çã¯ï¼åæåã«ã¼ãã³ã§è¡ 3319 ãã®ãåºæ¬ã§ãããï¼ã·ã¹ãã ã®ãªã»ããå¾ããã«è¡ãå¿ 3320 è¦ãããå ´åã«ã¯ï¼ 3321 hardware_init_hookãç¨ããï¼ 2638 ターゲット依存部の初期化を行う関数.sta_kerの最初で呼び出される.プロセッ 2639 サ・チップ・開発環境依存の初期化処理を,それらの依存部に切り分けること 2640 も可能である. 2641 2642 この関数は,あくまでもカーネルのターゲット依存部の初期化処理を行うため 2643 のものである.アプリケーションに必要な初期化処理は,初期化ルーチンで行 2644 うのが基本であるが,システムのリセット後すぐに行う必要がある場合には, 2645 hardware_init_hookを用いる. 3322 2646 3323 2647 (6-8-3) void call_exit_kernel(void) 3324 2648 3325 éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã¦ï¼exit_kernelã¸åå²ããé¢æ°ï¼ext_kerã 3326 ãå¼ã³åºãããï¼exit_kernelããã¯ãªã¿ã¼ã³ãããã¨ããªãããï¼ãã®é¢æ°ã« 3327 æ»ã£ã¦ãããã¨ã¯èããå¿ 3328 è¦ããªãï¼ 3329 3330 éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæããã®ã¯ï¼çµäºå¦çã«ã¼ãã³ãï¼éã¿ã¹ã¯ã³ã³ 3331 ããã¹ãç¨ã®ã¹ã¿ãã¯ã§å®è¡ããããã§ããï¼çµäºå¦çã«ã¼ãã³ãã¿ã¹ã¯ç¨ã® 3332 ã¹ã¿ãã¯ã§å®è¡ããã¨ï¼åã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®ãµã¤ãºã決å®ããéã«ï¼çµ 3333 äºå¦çã«ã¼ãã³ã使ç¨ããã¹ã¿ãã¯é åãèæ 3334 ®ããªããã°ãªããªãï¼ããã«ã¯ï¼ 3335 çµäºå¦çã«ã¼ãã³ã使ç¨ããã¹ã¿ãã¯é åã大ããå ´åã«åã¿ã¹ã¯ã®ã¹ã¿ã㯠3336 é åãç¡é§ã«å¤§ããããªããã°ãªããªããã¨ã«å ãã¦ï¼æå³ããªãã¹ã¿ãã¯ãªã¼ 3337 ãã¼ããã¼ãçºçããå¯è½æ§ãé«ããã¨ããåé¡ãããï¼ 3338 3339 ãã®é¢æ°ã¯ï¼å 3340 ¨å²è¾¼ã¿ããã¯ç¶æ 3341 ã§å¼ã°ããããï¼å 3342 ¨å²è¾¼ã¿ããã¯ç¶æ 3343 ããå¼ 3344 ã³åºããã¨ãã§ããªãé¢æ°ãå¼ã°ãªãããã«å®è£ 3345 ããªããã°ãªããªãï¼ 2649 非タスクコンテキストに切り換えて,exit_kernelへ分岐する関数.ext_kerか 2650 ら呼び出される.exit_kernelからはリターンすることがないため,この関数に 2651 戻ってくることは考える必要がない. 2652 2653 非タスクコンテキストに切り換えるのは,終了処理ルーチンを,非タスクコン 2654 テキスト用のスタックで実行するためである.終了処理ルーチンをタスク用の 2655 スタックで実行すると,各タスクのスタック領域のサイズを決定する際に,終 2656 了処理ルーチンが使用するスタック領域を考慮しなければならない.これには, 2657 終了処理ルーチンが使用するスタック領域が大きい場合に各タスクのスタック 2658 領域を無駄に大きくしなければならないことに加えて,意図しないスタックオー 2659 バーフローが発生する可能性を高めるという問題がある. 2660 2661 この関数は,全割込みロック状態で呼ばれるため,全割込みロック状態から呼 2662 び出すことができない関数を呼ばないように実装しなければならない. 3346 2663 3347 2664 (6-8-4) void target_exit(void) 3348 2665 3349 ã¿ã¼ã²ããä¾åé¨ã®çµäºå¦çãè¡ãé¢æ°ï¼ãã®é¢æ°ã¯ï¼ã«ã¼ãã«çµäºå¦çã®æ 3350 å¾ã«å¼ã³åºããï¼ãªã¿ã¼ã³ãã¦ã¯ãªããªãï¼ããã»ããµã»ãããã»éçºç°å¢ä¾ 3351 åã®çµäºå¦çãï¼ãããã®ä¾åé¨ã«åãåãããã¨ãå¯è½ã§ããï¼ 3352 3353 ãã®é¢æ°ã§ã¯ï¼æåã«ï¼atexitã«ãã£ã¦ç»é²ãããé¢æ°ã¨ãã¹ãã©ã¯ã¿ãå¼ã³ 3354 åºããã¨ãæå³ãã¦ããï¼æ¨æºçã«ã¯ï¼software_term_hookãå¼ã³åºãï¼ 3355 software_term_hookãç¨æããã¦ããªãå ´åã¯ï¼ä½ãããªãï¼GNUéçºç°å¢ã§ã¯ï¼ 3356 ãªã³ã«ã¹ã¯ãªããä¸ã®weak definitionã«ããï¼software_term_hookãç¨æãã 3357 ã¦ããªãå ´åã®å¤ã0ã¨ãããã¨ã§ï¼ãããå®ç¾ã§ããï¼weak definitionã®æ© 3358 è½ãæããªãéçºç°å¢ã§ã¯ï¼software_term_hookãå¿ 3359 ãå¼ã³åºããã¨ã«ããï¼ 3360 3361 ãã®é¢æ°ã¯ï¼å 3362 ¨å²è¾¼ã¿ããã¯ç¶æ 3363 ã§å¼ã°ããããï¼å 3364 ¨å²è¾¼ã¿ããã¯ç¶æ 3365 ããå¼ 3366 ã³åºããã¨ãã§ããªãé¢æ°ãå¼ã°ãªãããã«å®è£ 3367 ããªããã°ãªããªãï¼ 3368 3369 6.9 ã«ã¼ãã«å 3370 é¨ã®ãã¥ã¼ãã³ã° 3371 3372 6.9.1 ãããããããµã¼ã 3373 3374 (6-9-1-1) OMIT_BITMAP_SEARCHï¼ãªãã·ã§ã³ï¼ 3375 (6-9-1-2) uint_t bitmap_search(uint16_t bitmap)ï¼ãªãã·ã§ã³ï¼ 3376 3377 ã¿ã¼ã²ããéä¾åé¨ã§ï¼uint16_tåã®æ´æ°å¤ï¼bitmapï¼ä¸ã®1ã®ãããã®å 3378 ï¼æ 3379 ãä¸ä½ï¼å³ï¼ã®ãã®ããµã¼ããï¼ãã®ãããçªå·ãè¿ãé¢æ°bitmap_searchãç¨ 3380 æãã¦ããï¼ããã§ï¼ãããçªå·ã¯æä¸ä½ãããã0ã¨ãï¼bitmapã«0ãæå®ã 3381 ã¦ã¯ãªããªããã®ã¨ãã¦ããï¼ 3382 3383 ããããµã¼ãå½ä»¤ãæã¤ããã»ããµã§ã¯ï¼bitmap_searchãï¼ããããµã¼ãå½ä»¤ 3384 ã使ãããã«æ¸ãç´ããæ¹ãå¹çãè¯ãå ´åãããï¼ãã®ãããªå ´åã«ã¯ï¼ã¿ã¼ 3385 ã²ããä¾åé¨ã§ããããµã¼ãå½ä»¤ã使ã£ãbitmap_searchãå®ç¾©ãï¼ 3386 OMIT_BITMAP_SEARCHããã¯ãå®ç¾©ããï¼ 3387 3388 æ¨æºã©ã¤ãã©ãªã«ããããµã¼ãå½ä»¤ãç¨ããffsãããå ´åï¼bitmap_searchã 3389 (ffs(bitmap) - 1)ã«å®ç¾©ããã¨ããï¼ 3390 3391 (6-9-1-3) uint16_t PRIMAP_BIT(PRI pri)ï¼ãªãã·ã§ã³ï¼ 3392 3393 ããããµã¼ãå½ä»¤ã®ãµã¼ãæ¹åãéãªã©ã®çç±ã§ï¼åªå 3394 度ã¨ãããã¨ã®å¯¾å¿ã 3395 å¤æ´ãããå ´åã«ã¯ï¼PRIMAP_BITããã¯ãå®ç¾©ããï¼ 3396 3397 6.9.2 ããããã£ã¼ã«ã 3398 3399 (6-9-2-1) BIT_FIELD_UINTï¼ãªãã·ã§ã³ï¼ 3400 3401 8ããã以ä¸ã®å¹ 3402 ã®ããããã£ã¼ã«ãã§ï¼ç¬¦å·ç¡ãæ´æ°å¤ãä¿æãããå ´åã«ç¨ 3403 ããã¹ããã¼ã¿åï¼ããã©ã«ãã®å®ç¾©ã¯unsigned intã¨ãªã£ã¦ãããï¼ã¿ã¼ã²ã 3404 ãããã¼ã«ä¾åã§ï¼unsigned charã¾ãã¯unsigned shortã«å®ç¾©ããæ¹ãå¹çã 3405 è¯ãå ´åãããï¼ 3406 3407 (6-9-2-2) BIT_FIELD_BOOLï¼ãªãã·ã§ã³ï¼ 3408 3409 1ãããå¹ 3410 ã®ããããã£ã¼ã«ãã§ï¼ãã¼ã«å¤ãä¿æãããå ´åã«ç¨ããã¹ããã¼ 3411 ã¿åï¼ããã©ã«ãã§ã¯BIT_FIELD_UINTã¨åä¸ã«å®ç¾©ãã¦ãããï¼ãã¼ã«å¤ãä¿ 3412 æãããã¨ãæ示ããããã«å¥ã®ååã¨ãã¦ããï¼ 3413 3414 (6-9-2-3) TBIT_TCB_PRIORITYï¼ãªãã·ã§ã³ï¼ 3415 3416 ç¾å¨åªå 3417 度ï¼ããã³ï¼ãã¥ã¼ããã¯ã¹æ¡å¼µã«ããããã¼ã¹åªå 3418 度ï¼ãä¿æãã 3419 ããã®TCBä¸ã®ãã£ã¼ã«ãã®ãããæ°ï¼ããã©ã«ãã§ã¯8ãããã«å®ç¾©ãã¦ãã 3420 ãï¼ãã以å¤ã«å®ç¾©ãããå ´åã«ï¼ãããæ°ããã®ååã«ãã¯ãå®ç¾©ããï¼ 3421 3422 6.10 ã«ã¼ãã«å®è£ 3423 ã«é¢ãããã®ä»ã®å®ç¾© 3424 3425 6.10.1 ã¿ã¼ã²ããä¾åã®ãªãã¸ã§ã¯ãå±æ§ 3426 3427 (6-10-1-1) TARGET_TSKATRï¼ãªãã·ã§ã³ï¼ ã¿ã¼ã²ããå®ç¾©ã®ã¿ã¹ã¯å±æ§ 3428 (6-10-1-2) TARGET_ISRATRï¼ãªãã·ã§ã³ï¼ ã¿ã¼ã²ããå®ç¾©ã®ISRå±æ§ 3429 (6-10-1-3) TARGET_INHATRï¼ãªãã·ã§ã³ï¼ ã¿ã¼ã²ããå®ç¾©ã®å²è¾¼ã¿ãã³ãã©å±æ§ 3430 (6-10-1-4) TARGET_INTATRï¼ãªãã·ã§ã³ï¼ ã¿ã¼ã²ããå®ç¾©ã®å²è¾¼ã¿å±æ§ 3431 (6-10-1-5) TARGET_EXCATRï¼ãªãã·ã§ã³ï¼ ã¿ã¼ã²ããå®ç¾©ã®CPUä¾å¤ãã³ãã©å±æ§ 3432 3433 åãªãã¸ã§ã¯ãã®å±æ§ãï¼ã¿ã¼ã²ããå®ç¾©ã«æ¡å¼µããå ´åã«ï¼è©²å½ãããªãã¸ã§ 3434 ã¯ãå±æ§ã示ãå¤æ°ã«ï¼æ¡å¼µã«ä½¿ç¨ãããããã®è«çåãå®ç¾©ããï¼ããã«ã 3435 ãï¼æ¡å¼µã«ä½¿ç¨ããããããè¨å®ããã¦ããå ´åã«ï¼ã¨ã©ã¼ã«ãªãã®ãé²ãï¼ 3436 3437 ãªãï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«çµ±åä»æ§æ¸ã§ã¯ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ISRï¼ 3438 å±æ§ãã¿ã¼ã²ããå®ç¾©ã§æ¡å¼µã§ããä»æ§ã¨ã¯ãªã£ã¦ããªãï¼ 3439 3440 6.10.2 ã¨ã©ã¼ãã§ãã¯æ¹æ³ã®æå® 3441 3442 (6-10-2-1) TARGET_MIN_STKSZï¼ãªãã·ã§ã³ï¼ 3443 3444 ã¿ã¼ã²ããå®ç¾©ã§ï¼ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ãè¨å®ããå ´åã«ã¯ï¼ã 3445 ã®å¤æ°ãã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ã«å®ç¾©ããï¼ 3446 3447 (6-10-2-2) TARGET_MIN_ISTKSZï¼ãªãã·ã§ã³ï¼ 3448 3449 ã¿ã¼ã²ããå®ç¾©ã§ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã®ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ãè¨å®ã 3450 ãå ´åã«ã¯ï¼ãã®å¤æ°ãã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ã«å®ç¾©ããï¼ 3451 3452 (6-10-2-3) CHECK_STKSZ_ALIGNï¼ãªãã·ã§ã³ï¼ 3453 3454 ã¹ã¿ãã¯é åã®ãµã¤ãºãããå¤ï¼ã¢ã©ã¤ã³åä½ï¼ã®åæ°ã§ãªããã°ãªããªãå ´ 3455 åã«ï¼ãã®å¤æ°ãã¢ã©ã¤ã³åä½ã«å®ç¾©ããï¼ãã®å¤æ°ãå®ç¾©ãããã¨ã§ï¼ 3456 kernel.tfããã³acre_tskï¼åççææ©è½æ¡å¼µããã±ã¼ã¸ã®ã¿ï¼ã«ããã¦ï¼ã¹ã¿ã 3457 ã¯é åã®ãµã¤ãºãæ£ãããªãï¼ãã®å¤æ°ã«å®ç¾©ããå¤ã®åæ°ã§ãªãï¼å ´åã®ã¨ 3458 ã©ã¼ããã§ãã¯ããããã«ãªãï¼ãã§ãã¯ãå¿ 3459 è¦ãªãå ´åã«ã¯ï¼ãã®å¤æ°ãå® 3460 義ããªãï¼ 3461 3462 (6-10-2-4) CHECK_FUNC_ALIGNï¼ãªãã·ã§ã³ï¼ å¦çåä½ã®ã¢ã©ã¤ã³åä½ 3463 (6-10-2-5) CHECK_FUNC_NONNULLï¼ãªãã·ã§ã³ï¼ å¦çåä½ã®éNULLãã§ã㯠3464 (6-10-2-6) CHECK_STACK_ALIGNï¼ãªãã·ã§ã³ï¼ ã¹ã¿ãã¯é åã®ã¢ã©ã¤ã³åä½ 3465 (6-10-2-7) CHECK_STACK_NONNULLï¼ãªãã·ã§ã³ï¼ã¹ã¿ãã¯é åã®éNULLãã§ã㯠3466 (6-10-2-8) CHECK_MPF_ALIGNï¼ãªãã·ã§ã³ï¼ åºå®é·ã¡ã¢ãªãã¼ã«é åã®ã¢ã©ã¤ã³åä½ 3467 (6-10-2-9) CHECK_MPF_NONNULLï¼ãªãã·ã§ã³ï¼åºå®é·ã¡ã¢ãªãã¼ã«é åã®éNULLãã§ã㯠3468 3469 å¦çåä½ï¼ã¹ã¿ãã¯é åï¼åºå®é·ã¡ã¢ãªãã¼ã«é åã®å 3470 é çªå°ãããå¤ï¼ã¢ã© 3471 ã¤ã³åä½ï¼ã®åæ°ã§ãªããã°ãªããªãå ´åã«ï¼ããããï¼CHECK_FUNC_ALIGNï¼ 3472 CHECK_STACK_ALIGNï¼CHECK_MPF_ALIGNãã¢ã©ã¤ã³åä½ã«å®ç¾©ããï¼å¦çåä½ï¼ 3473 ã¹ã¿ãã¯é åï¼åºå®é·ã¡ã¢ãªãã¼ã«é åã®å 3474 é çªå°ãNULLã§ãªããã®ãã§ã㯠3475 ãè¡ãå ´åã«ã¯ï¼ããããCHECK_FUNC_NONNULLï¼CHECK_STACK_NONNULLï¼ 3476 CHECK_MPF_NONNULLãå®ç¾©ããï¼ 3477 3478 (6-10-2-10) CHECK_MB_ALIGNï¼ãªãã·ã§ã³ï¼ 管çé åã®ã¢ã©ã¤ã³åä½ 3479 3480 ã«ã¼ãã«å 3481 ã®ç®¡çé åï¼å 3482 ·ä½çã«ã¯ï¼ãã¼ã¿ãã¥ã¼ç®¡çé åï¼åªå 3483 度ãã¼ã¿ 3484 ãã¥ã¼ç®¡çé åï¼åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çé åï¼ã®å 3485 é çªå°ãããå¤ï¼ã¢ã©ã¤ 3486 ã³åä½ï¼ã®åæ°ã§ãªããã°ãªããªãå ´åã«ï¼ãã®å¤æ°ãã¢ã©ã¤ã³åä½ã«å®ç¾©ã 3487 ãï¼åççææ©è½æ¡å¼µããã±ã¼ã¸ã使ç¨ããªãå ´åã«ã¯ï¼å®ç¾©ããå¿ 3488 è¦ããªãï¼ 3489 3490 6.10.3 éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é å 2666 ターゲット依存部の終了処理を行う関数.この関数は,カーネル終了処理の最 2667 後に呼び出され,リターンしてはならない.プロセッサ・チップ・開発環境依 2668 存の終了処理を,それらの依存部に切り分けることも可能である. 2669 2670 この関数では,最初に,atexitによって登録された関数とデストラクタを呼び 2671 出すことを意図しており,標準的には,software_term_hookを呼び出す. 2672 software_term_hookが用意されていない場合は,何もしない.GNU開発環境では, 2673 リンカスクリプト中のweak definitionにより,software_term_hookが用意され 2674 ていない場合の値を0とすることで,これを実現できる.weak definitionの機 2675 能を持たない開発環境では,software_term_hookを必ず呼び出すことにする. 2676 2677 この関数は,全割込みロック状態で呼ばれるため,全割込みロック状態から呼 2678 び出すことができない関数を呼ばないように実装しなければならない. 2679 2680 6.9 カーネル内部のチューニング 2681 2682 6.9.1 ビットマップサーチ 2683 2684 (6-9-1-1) OMIT_BITMAP_SEARCH(オプション) 2685 (6-9-1-2) uint_t bitmap_search(uint16_t bitmap)(オプション) 2686 2687 ターゲット非依存部で,uint16_t型の整数値(bitmap)中の1のビットの内,最 2688 も下位(右)のものをサーチし,そのビット番号を返す関数bitmap_searchを用 2689 意している.ここで,ビット番号は最下位ビットを0とし,bitmapに0を指定し 2690 てはならないものとしている. 2691 2692 ビットサーチ命令を持つプロセッサでは,bitmap_searchを,ビットサーチ命令 2693 を使うように書き直した方が効率が良い場合がある.このような場合には,ター 2694 ゲット依存部でビットサーチ命令を使ったbitmap_searchを定義し, 2695 OMIT_BITMAP_SEARCHをマクロ定義する. 2696 2697 標準ライブラリにビットサーチ命令を用いたffsがある場合,bitmap_searchを 2698 (ffs(bitmap) - 1)に定義するとよい. 2699 2700 (6-9-1-3) uint16_t PRIMAP_BIT(PRI pri)(オプション) 2701 2702 ビットサーチ命令のサーチ方向が逆などの理由で,優先度とビットとの対応を 2703 変更したい場合には,PRIMAP_BITをマクロ定義する. 2704 2705 6.9.2 ビットフィールド 2706 2707 (6-9-2-1) BIT_FIELD_UINT(オプション) 2708 2709 8ビット以下の幅のビットフィールドで,符号無し整数値を保持したい場合に用 2710 いるべきデータ型.デフォルトの定義はunsigned intとなっているが,ターゲッ 2711 トやツール依存で,unsigned charまたはunsigned shortに定義した方が効率が 2712 良い場合がある. 2713 2714 (6-9-2-2) BIT_FIELD_BOOL(オプション) 2715 2716 1ビット幅のビットフィールドで,ブール値を保持したい場合に用いるべきデー 2717 タ型.デフォルトではBIT_FIELD_UINTと同一に定義しているが,ブール値を保 2718 持することを明示するために別の名前としている. 2719 2720 (6-9-2-3) TBIT_TCB_PRIORITY(オプション) 2721 2722 現在優先度(および,ミューテックス拡張におけるベース優先度)を保持する 2723 ためのTCB中のフィールドのビット数.デフォルトでは8ビットに定義している 2724 が,それ以外に定義したい場合に,ビット数をこの名前にマクロ定義する. 2725 2726 6.10 カーネル実装に関するその他の定義 2727 2728 6.10.1 ターゲット依存のオブジェクト属性 2729 2730 (6-10-1-1) TARGET_TSKATR(オプション) ターゲット定義のタスク属性 2731 (6-10-1-2) TARGET_ISRATR(オプション) ターゲット定義のISR属性 2732 (6-10-1-3) TARGET_INHATR(オプション) ターゲット定義の割込みハンドラ属性 2733 (6-10-1-4) TARGET_INTATR(オプション) ターゲット定義の割込み属性 2734 (6-10-1-5) TARGET_EXCATR(オプション) ターゲット定義のCPU例外ハンドラ属性 2735 2736 各オブジェクトの属性を,ターゲット定義に拡張する場合に,該当するオブジェ 2737 クト属性を示す変数に,拡張に使用するビットの論理和を定義する.これによ 2738 り,拡張に使用するビットが設定されている場合に,エラーになるのを防ぐ. 2739 2740 なお,TOPPERS新世代カーネル統合仕様書では,割込みサービスルーチン(ISR) 2741 属性をターゲット定義で拡張できる仕様とはなっていない. 2742 2743 6.10.2 エラーチェック方法の指定 2744 2745 (6-10-2-1) TARGET_MIN_STKSZ(オプション) 2746 2747 ターゲット定義で,タスクのスタックサイズの最小値を設定する場合には,こ 2748 の変数をスタックサイズの最小値に定義する. 2749 2750 (6-10-2-2) TARGET_MIN_ISTKSZ(オプション) 2751 2752 ターゲット定義で,非タスクコンテキストのスタックサイズの最小値を設定す 2753 る場合には,この変数をスタックサイズの最小値に定義する. 2754 2755 (6-10-2-3) CHECK_STKSZ_ALIGN(オプション) 2756 2757 スタック領域のサイズがある値(アライン単位)の倍数でなければならない場 2758 合に,この変数をアライン単位に定義する.この変数を定義することで, 2759 kernel.tfおよびacre_tsk(動的生成機能拡張パッケージのみ)において,スタッ 2760 ク領域のサイズが正しくない(この変数に定義した値の倍数でない)場合のエ 2761 ラーをチェックするようになる.チェックが必要ない場合には,この変数を定 2762 義しない. 2763 2764 (6-10-2-4) CHECK_FUNC_ALIGN(オプション) 処理単位のアライン単位 2765 (6-10-2-5) CHECK_FUNC_NONNULL(オプション) 処理単位の非NULLチェック 2766 (6-10-2-6) CHECK_STACK_ALIGN(オプション) スタック領域のアライン単位 2767 (6-10-2-7) CHECK_STACK_NONNULL(オプション)スタック領域の非NULLチェック 2768 (6-10-2-8) CHECK_MPF_ALIGN(オプション) 固定長メモリプール領域のアライン単位 2769 (6-10-2-9) CHECK_MPF_NONNULL(オプション)固定長メモリプール領域の非NULLチェック 2770 2771 処理単位/スタック領域/固定長メモリプール領域の先頭番地がある値(アラ 2772 イン単位)の倍数でなければならない場合に,それぞれ,CHECK_FUNC_ALIGN/ 2773 CHECK_STACK_ALIGN/CHECK_MPF_ALIGNをアライン単位に定義する.処理単位/ 2774 スタック領域/固定長メモリプール領域の先頭番地がNULLでないかのチェック 2775 を行う場合には,それぞれCHECK_FUNC_NONNULL/CHECK_STACK_NONNULL/ 2776 CHECK_MPF_NONNULLを定義する. 2777 2778 (6-10-2-10) CHECK_MB_ALIGN(オプション) 管理領域のアライン単位 2779 2780 カーネル内の管理領域(具体的には,データキュー管理領域,優先度データ 2781 キュー管理領域,固定長メモリプール管理領域)の先頭番地がある値(アライ 2782 ン単位)の倍数でなければならない場合に,この変数をアライン単位に定義す 2783 る.動的生成機能拡張パッケージを使用しない場合には,定義する必要がない. 2784 2785 6.10.3 非タスクコンテキスト用のスタック領域 3491 2786 3492 2787 (6-10-3-1) DEFAULT_ISTKSZ 3493 2788 3494 DEF_ICSã«ããéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åãæå®ãããªãå ´åã®ï¼ 3495 ããã©ã«ãã®ã¹ã¿ãã¯é åã®ãµã¤ãºï¼ 3496 3497 (6-10-3-2) DEFAULT_ISTKï¼ãªãã·ã§ã³ï¼ 3498 3499 DEF_ICSã«ããéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åãæå®ãããªãå ´åã®ï¼ 3500 ããã©ã«ãã®ã¹ã¿ãã¯é åã®å 3501 é çªå°ï¼ãã®ãã¯ããå®ç¾©ãããªãå ´åã«ã¯ï¼ 3502 ãµã¤ãºãDEFAULT_ISTKSZã®ã¹ã¿ãã¯é åãï¼é 3503 åã«ãã確ä¿ãããï¼ 3504 3505 (6-10-3-3) STK_T *TOPPERS_ISTKPT(STK_T *istk, SIZE istksz)ï¼ãªãã·ã§ã³ï¼ 3506 3507 éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå¤ãä¿æããå¤æ°ï¼istkptï¼ 3508 ãç¨ããå ´åã«ï¼ãã®ã·ã³ãã«ã«ï¼ã¹ã¿ãã¯é åã®å 3509 é çªå°ï¼istkï¼ã¨ã¹ã¿ã 3510 ã¯é åã®ãµã¤ãºï¼istkszï¼ããï¼ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå¤ãæ±ãããã¯ãã 3511 å®ç¾©ããï¼ 3512 3513 6.10.4 空ã©ãã«ã®å®ç¾© 3514 3515 (6-10-4-1) TOPPERS_EMPTY_LABEL(type, symbol)ï¼ãªãã·ã§ã³ï¼ 3516 3517 ãªã³ã¯ã¨ã©ã¼ãé²ãããã«ï¼ãã¼ã¿åtypeã®é 3518 åã§ããå¤æ°symbolã«å®ç¾©ãä¸ 3519 ããããã®ãã¯ãï¼ä¸ããå®ç¾©ãåç 3520 §ããããã¨ã¯ãªãããï¼ã©ã®ãããªå®ç¾© 3521 ãä¸ãã¦ãããï¼ 3522 3523 ããã©ã«ãã§ã¯ï¼symbolãï¼è¦ç´ åãtypeã§ãµã¤ãºã0ã®é 3524 åã«å®ç¾©ãã¦ããï¼ 3525 ãµã¤ãºã0ã®é 3526 åãã¨ã©ã¼ã¨ãªããªãã³ã³ãã¤ã©ï¼GCCã¯ããã«è©²å½ï¼ãç¨ãã 3527 å ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããå¿ 3528 è¦ã¯ãªãï¼ 3529 3530 6.11 ãã¬ã¼ã¹ãã°æ©è½ã«é¢ããè¨å® 3531 3532 ASPã«ã¼ãã«ã®ã½ã¼ã¹ã³ã¼ãã«ã¯ï¼ã«ã¼ãã«ã®å®è¡ãã¬ã¼ã¹ãã°ãåå¾ãããã 3533 ã®ãã¯ãçãåãè¾¼ãã§ããï¼ããã©ã«ãã§ã¯ï¼ãããã®ãã¯ãã¯ç©ºã«å®ç¾©ã 3534 ãã¦ãã¬ã¼ã¹ãã°ã®åå¾ã¯è¡ããªããï¼ãããã®ãã¯ããé©åã«å®ç¾©ããã㨠3535 ã§ãã¬ã¼ã¹ãã°ã®åå¾ãè¡ããã¨ãã§ããï¼ 3536 3537 6.11.1 åå¾ã§ãããã¬ã¼ã¹ãã°ã®ç¨®é¡ã¨ãã¯ã 3538 3539 åå¾ã§ãããã¬ã¼ã¹ãã°ã®ç¨®é¡ã¨ï¼ãããåå¾ããããã«å®ç¾©ãããã¯ãã¯æ¬¡ 3540 ã®éãã§ããï¼ 3541 3542 (a) ã«ã¼ãã«ã®åä½éå§ã¨çµäº 3543 3544 次ã®ãã¯ããå®ç¾©ãããã¨ã§ï¼ã«ã¼ãã«ã®åä½éå§æã¨çµäºæã®ãã¬ã¼ã¹ãã° 3545 ãåå¾ãããã¨ãã§ããï¼ 3546 3547 LOG_KER_ENTER ã«ã¼ãã«ãåä½ãéå§ããç´åï¼åæåã®å®äºå¾ï¼ 3548 LOG_KER_LEAVE ã«ã¼ãã«ã®çµäºï¼ext_kerï¼ãå¼ã°ããç´å¾ï¼çµäºå¦ 3549 çã®å®è¡åï¼ 3550 3551 (b) å¦çåä½ã®å®è¡éå§ã¨çµäº 3552 3553 次ã®ãã¯ããå®ç¾©ãããã¨ã§ï¼å²è¾¼ã¿ãã³ãã©ï¼INHï¼ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ã 3554 ã³ï¼ISRï¼ï¼å¨æãã³ãã©ï¼CYCï¼ï¼ã¢ã©ã¼ã ãã³ãã©ï¼ALMï¼ï¼CPUä¾å¤ãã³ã 3555 ã©ï¼EXCï¼ï¼ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ï¼TEXï¼ã®å®è¡éå§åã¨çµäºå¾ã®ãã¬ã¼ã¹ 3556 ãã°ãåå¾ãããã¨ãã§ããï¼ 3557 3558 LOG_<å¦çåä½ç¥å·>_ENTER å¦çåä½ã®å®è¡éå§ç´å 3559 LOG_<å¦çåä½ç¥å·>_LEAVE å¦çåä½ã®çµäºç´å¾ 3560 3561 å²è¾¼ã¿ãã³ãã©ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ãç»é²ãããã®ã®ã¿ã対象ã¨ãï¼å²è¾¼ã¿ 3562 ãµã¼ãã¹ã«ã¼ãã³ãå¼ã³åºãããã«ã«ã¼ãã«å 3563 ã«çæããããã®ã¯å¯¾è±¡ã¨ã㪠3564 ãï¼ã¿ã¹ã¯ã®å®è¡éå§ã¨çµäºã¯ï¼ä»ã®æ¹æ³ã§åå¾ã§ããããï¼ãã®æ¹æ³ã¯ç¨æ 3565 ãã¦ããªãï¼ 3566 3567 ãªãï¼å²è¾¼ã¿ãã³ãã©ã¨CPUä¾å¤ãã³ãã©ã®å®è¡éå§ã¨çµäºã®ãã¬ã¼ã¹ãã°åå¾ 3568 ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§å®è£ 3569 ããå¿ 3570 è¦ãããï¼è©³ããã¯ï¼ã6.2 ãã¬ã¼ã¹ãã° 3571 æ©è½ã¸ã®å¯¾å¿ãã6.6.1 å²è¾¼ã¿ãã³ãã©ã®åºå 3572 ¥å£å¦çãã6.7.1 CPUä¾å¤ãã³ã 3573 ã©ã®åºå 3574 ¥å£å¦çãã®ç¯ãåç 3575 §ãããã¨ï¼ 3576 3577 (c) ã¿ã¹ã¯ç¶æ 3578 ã®å¤å 3579 3580 次ã®ãã¯ããå®ç¾©ãããã¨ã§ï¼ã¿ã¹ã¯ç¶æ 3581 ãå¤åããæã®ãã¬ã¼ã¹ãã°ãåå¾ 3582 ãããã¨ãã§ããï¼ãã ãï¼å®è¡ç¶æ 3583 ã¨å®è¡å¯è½ç¶æ 3584 ã®éã®é·ç§»ã¯ï¼ä»ã®æ¹æ³ 3585 ã§åå¾ã§ããããï¼ãã®ãã¯ãã§ã¯åå¾ã§ããªãï¼ 3586 3587 LOG_TSKSTAT ã¿ã¹ã¯ç¶æ 3588 ã®å¤å 3589 3590 (d) ãã£ã¹ãããã£ã®å®è¡éå§ã¨çµäº 3591 3592 次ã®ãã¯ããå®ç¾©ãããã¨ã§ï¼ãã£ã¹ãããã£ãå®è¡éå§ããæã¨ï¼çµäºãã 3593 æã®ãã¬ã¼ã¹ãã°ãåå¾ãããã¨ãã§ããï¼ 3594 3595 LOG_DSP_ENTER ãã£ã¹ãããã£ã®å®è¡éå§ 3596 LOG_DSP_LEAVE ãã£ã¹ãããã£ã®çµäº 3597 3598 ãã£ã¹ãããã£ã®å®è¡éå§ã¯ï¼ã¿ã¹ã¯ãå®è¡ç¶æ 3599 ããå®è¡å¯è½ç¶æ 3600 ã«é·ç§»ãã 3601 ã¿ã¤ãã³ã°ã§ããããï¼å®è¡å¯è½ç¶æ 3602 ã¸é·ç§»ããã¿ã¹ã¯ã®TCBã¸ã®ãã¤ã³ã¿ãã 3603 ã©ã¡ã¼ã¿ã¨ããï¼éã«ï¼ãã£ã¹ãããã£ã®çµäºã¯ï¼ã¿ã¹ã¯ãå®è¡å¯è½ç¶æ 3604 ãã 3605 å®è¡ç¶æ 3606 ã«é·ç§»ããã¿ã¤ãã³ã°ã§ããããï¼å®è¡ç¶æ 3607 ã¸é·ç§»ããã¿ã¹ã¯ã®TCB㸠3608 ã®ãã¤ã³ã¿ããã©ã¡ã¼ã¿ã¨ããï¼ 3609 3610 ASPã«ã¼ãã«ã§ã¯ï¼å®è¡ã§ããã¿ã¹ã¯ããªãï¼ã«ã¼ãã«ãã¢ã¤ãã«ç¶æ 3611 ã«ãªãå ´ 3612 åã«ã¯ï¼ãã£ã¹ãããã£ã®ä¸ã«çã¾ãï¼ãã®ããï¼ã¢ã¤ãã«ç¶æ 3613 ã¸ã®é·ç§»ã¨ã¢ 3614 ã¤ãã«ç¶æ 3615 ããä»ã®ç¶æ 3616 ã¸ã®é·ç§»ã¯ï¼ãã®ãã¯ãã§ã¯åå¾ã§ããªãï¼ 3617 3618 ãªãï¼ãã£ã¹ãããã£ã®å®è¡éå§ã¨çµäºã®ãã¬ã¼ã¹ãã°åå¾ã¯ï¼ã¿ã¼ã²ããä¾ 3619 åé¨ã§å®è£ 3620 ããå¿ 3621 è¦ãããï¼è©³ããã¯ï¼ã6.2 ãã¬ã¼ã¹ãã°æ©è½ã¸ã®å¯¾å¿ã㨠3622 ã6.5.2 ãã£ã¹ãããã£æ¬ä½ãã®ç¯ãåç 3623 §ãããã¨ï¼ 3624 3625 (e) ãµã¼ãã¹ã³ã¼ã«ã®å 3626 ¥å£ã¨åºå£ 3627 3628 次ã®ãã¯ããå®ç¾©ãããã¨ã§ï¼åãµã¼ãã¹ã³ã¼ã«ã®å 3629 ¥å£ã¨åºå£ã®ãã¬ã¼ã¹ãã° 3630 ãåå¾ãããã¨ãã§ããï¼ 3631 3632 LOG_<ãµã¼ãã¹ã³ã¼ã«ã®å¤§æå表è¨>_ENTER ãµã¼ãã¹ã³ã¼ã«åã®å 3633 ¥å£ 3634 LOG_<ãµã¼ãã¹ã³ã¼ã«ã®å¤§æå表è¨>_LEAVE ãµã¼ãã¹ã³ã¼ã«åã®åºå£ 3635 3636 ããããã®ãã¯ãã®å称ããã©ã¡ã¼ã¿ã®è©³ç´°ã«ã¤ãã¦ã¯ï¼ã«ã¼ãã«ã®ã½ã¼ã¹ã³ã¼ 3637 ããåç 3638 §ãããã¨ï¼ 3639 3640 6.11.2 ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ã 3641 3642 ãã¬ã¼ã¹ãã°ãè¨é²ããæ¹æ³ã®ä¸ä¾ã¨ãã¦ï¼ã¡ã¢ãªä¸ã«ãã¬ã¼ã¹ãã°ãè¨é²ã 3643 ãããã®ãµã³ãã«ã³ã¼ããarch/logtraceãã£ã¬ã¯ããªã«ç¨æãã¦ããï¼ãã®ãµ 3644 ã³ãã«ã³ã¼ãã¯ï¼ã·ã¹ãã ãã°æ©è½ã¨åæ§ã®ãã¬ã¼ã¹ãã°æ©è½ãç¨æãï¼ãã¬ã¼ 3645 ã¹ãã°æ 3646 å ±ãã¡ã¢ãªä¸ã«è¨é²ããã¨ã¨ãã«ï¼ãããèªã¿åºãã¦è¡¨ç¤ºããæ©è½ã 3647 å®ç¾ãã¦ããï¼ 3648 3649 ãã®ãµã³ãã«ã³ã¼ããçµã¿è¾¼ãæ¹æ³ã¯æ¬¡ã®éãã§ããï¼ 3650 3651 (1) target_config.hããã³target_syssvc.hã«ï¼æ¬¡ã®è¨è¿°ã追å ããï¼ 2789 DEF_ICSにより非タスクコンテキスト用のスタック領域が指定されない場合の, 2790 デフォルトのスタック領域のサイズ. 2791 2792 (6-10-3-2) DEFAULT_ISTK(オプション) 2793 2794 DEF_ICSにより非タスクコンテキスト用のスタック領域が指定されない場合の, 2795 デフォルトのスタック領域の先頭番地.このマクロが定義されない場合には, 2796 サイズがDEFAULT_ISTKSZのスタック領域が,配列により確保される. 2797 2798 (6-10-3-3) STK_T *TOPPERS_ISTKPT(STK_T *istk, SIZE istksz)(オプション) 2799 2800 非タスクコンテキスト用のスタックポインタの初期値を保持する変数(istkpt) 2801 を用いる場合に,このシンボルに,スタック領域の先頭番地(istk)とスタッ 2802 ク領域のサイズ(istksz)から,スタックポインタの初期値を求めるマクロを 2803 定義する. 2804 2805 6.10.4 空ラベルの定義 2806 2807 (6-10-4-1) TOPPERS_EMPTY_LABEL(type, symbol)(オプション) 2808 2809 リンクエラーを防ぐために,データ型typeの配列である変数symbolに定義を与 2810 えるためのマクロ.与えた定義が参照されることはないため,どのような定義 2811 を与えてもよい. 2812 2813 デフォルトでは,symbolを,要素型がtypeでサイズが0の配列に定義している. 2814 サイズが0の配列がエラーとならないコンパイラ(GCCはこれに該当)を用いる 2815 場合には,ターゲット依存部で定義する必要はない. 2816 2817 6.11 トレースログ機能に関する設定 2818 2819 ASPカーネルのソースコードには,カーネルの実行トレースログを取得するため 2820 のマクロ等が埋め込んである.デフォルトでは,これらのマクロは空に定義さ 2821 れてトレースログの取得は行わないが,これらのマクロを適切に定義すること 2822 でトレースログの取得を行うことができる. 2823 2824 6.11.1 取得できるトレースログの種類とマクロ 2825 2826 取得できるトレースログの種類と,それを取得するために定義するマクロは次 2827 の通りである. 2828 2829 (a) カーネルの動作開始と終了 2830 2831 次のマクロを定義することで,カーネルの動作開始時と終了時のトレースログ 2832 を取得することができる. 2833 2834 LOG_KER_ENTER カーネルが動作を開始する直前(初期化の完了後) 2835 LOG_KER_LEAVE カーネルの終了(ext_ker)が呼ばれた直後(終了処 2836 理の実行前) 2837 2838 (b) 処理単位の実行開始と終了 2839 2840 次のマクロを定義することで,割込みハンドラ(INH),割込みサービスルーチ 2841 ン(ISR),周期ハンドラ(CYC),アラームハンドラ(ALM),CPU例外ハンド 2842 ラ(EXC),タスク例外処理ルーチン(TEX)の実行開始前と終了後のトレース 2843 ログを取得することができる. 2844 2845 LOG_<処理単位略号>_ENTER 処理単位の実行開始直前 2846 LOG_<処理単位略号>_LEAVE 処理単位の終了直後 2847 2848 割込みハンドラは,アプリケーションが登録したもののみを対象とし,割込み 2849 サービスルーチンを呼び出すためにカーネル内に生成されるものは対象としな 2850 い.タスクの実行開始と終了は,他の方法で取得できるため,この方法は用意 2851 していない. 2852 2853 なお,割込みハンドラとCPU例外ハンドラの実行開始と終了のトレースログ取得 2854 は,ターゲット依存部で実装する必要がある.詳しくは,「6.2 トレースログ 2855 機能への対応」「6.6.1 割込みハンドラの出入口処理」「6.7.1 CPU例外ハンド 2856 ラの出入口処理」の節を参照すること. 2857 2858 (c) タスク状態の変化 2859 2860 次のマクロを定義することで,タスク状態が変化した時のトレースログを取得 2861 することができる.ただし,実行状態と実行可能状態の間の遷移は,他の方法 2862 で取得できるため,このマクロでは取得できない. 2863 2864 LOG_TSKSTAT タスク状態の変化 2865 2866 (d) ディスパッチャの実行開始と終了 2867 2868 次のマクロを定義することで,ディスパッチャが実行開始する時と,終了する 2869 時のトレースログを取得することができる. 2870 2871 LOG_DSP_ENTER ディスパッチャの実行開始 2872 LOG_DSP_LEAVE ディスパッチャの終了 2873 2874 ディスパッチャの実行開始は,タスクが実行状態から実行可能状態に遷移する 2875 タイミングであるため,実行可能状態へ遷移するタスクのTCBへのポインタをパ 2876 ラメータとする.逆に,ディスパッチャの終了は,タスクが実行可能状態から 2877 実行状態に遷移するタイミングであるため,実行状態へ遷移するタスクのTCBへ 2878 のポインタをパラメータとする. 2879 2880 ASPカーネルでは,実行できるタスクがなく,カーネルがアイドル状態になる場 2881 合には,ディスパッチャの中に留まる.そのため,アイドル状態への遷移とア 2882 イドル状態から他の状態への遷移は,このマクロでは取得できない. 2883 2884 なお,ディスパッチャの実行開始と終了のトレースログ取得は,ターゲット依 2885 存部で実装する必要がある.詳しくは,「6.2 トレースログ機能への対応」と 2886 「6.5.2 ディスパッチャ本体」の節を参照すること. 2887 2888 (e) サービスコールの入口と出口 2889 2890 次のマクロを定義することで,各サービスコールの入口と出口のトレースログ 2891 を取得することができる. 2892 2893 LOG_<サービスコールの大文字表記>_ENTER サービスコール名の入口 2894 LOG_<サービスコールの大文字表記>_LEAVE サービスコール名の出口 2895 2896 それぞれのマクロの名称やパラメータの詳細については,カーネルのソースコー 2897 ドを参照すること. 2898 2899 6.11.2 トレースログ記録のサンプルコード 2900 2901 トレースログを記録する方法の一例として,メモリ上にトレースログを記録す 2902 るためのサンプルコードをarch/logtraceディレクトリに用意している.このサ 2903 ンプルコードは,システムログ機能と同様のトレースログ機能を用意し,トレー 2904 スログ情報をメモリ上に記録するとともに,それを読み出して表示する機能を 2905 実現している. 2906 2907 このサンプルコードを組み込む方法は次の通りである. 2908 2909 (1) target_config.hおよびtarget_syssvc.hに,次の記述を追加する. 3652 2910 3653 2911 #ifdef TOPPERS_ENABLE_TRACE … … 3655 2913 #endif /* TOPPERS_ENABLE_TRACE */ 3656 2914 3657 (2) Makefile.target ã«ï¼æ¬¡ã®è¨è¿°ã追å ããï¼2915 (2) Makefile.targetに,次の記述を追加する. 3658 2916 3659 2917 ifeq ($(ENABLE_TRACE),true) … … 3663 2921 endif 3664 2922 3665 (3) ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã§ï¼bssã»ã¯ã·ã§ã³ã®ã¯ãªã¢ãçç¥ãã¦ããå ´å 3666 ã«ã¯ï¼trace_modeãTRACE_STOPï¼ï¼0ï¼ã«åæåããã³ã¼ãã追å ããï¼ã 3667 ãã¯ï¼ãã¬ã¼ã¹ãã°æ©è½ãåæåãããåã«æ¸ãè¾¼ã¾ãããã¬ã¼ã¹ãã°ã 3668 ç¡è¦ããããã§ããï¼ 3669 3670 ãã®ãµã³ãã«ã³ã¼ããç¨ãã¦ï¼ãã¬ã¼ã¹ãã°ãè¨é²ã»ãã³ãããæ¹æ³ã®ä¾ã«ã¤ 3671 ãã¦ã¯ï¼ãTOPPERS/ASPã«ã¼ãã« ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ãã®ã11.6 ãã¬ã¼ã¹ã 3672 ã°è¨é²ã®ãµã³ãã«ã³ã¼ãã®ä½¿ç¨æ¹æ³ãã®ç¯ãåç 3673 §ãããã¨ï¼ 3674 3675 ãªãï¼ãã®ãµã³ãã«ã³ã¼ãã§ã¯ï¼ãã£ã¹ãããã£ã®åºå£ï¼ã¿ã¹ã¯ã®ç¶æ 3676 é·ç§»ï¼ 3677 ã·ã¹ãã ãã°ã®åºåã®3ã¤ã®ãã¬ã¼ã¹ãã°ã®ã¿ãè¨é²ãã¦ããï¼ä»ã®ãã¬ã¼ã¹ã 3678 ã°ãè¨é²ãããå ´åã«ã¯ï¼trace_config.hï¼ããã³trace_dump.cï¼ãä¿®æ£ãã 3679 å¿ 3680 è¦ãããï¼ãªãï¼ã«ã¼ãã«ã®ãã¬ã¼ã¹ãã°ãç¶²ç¾ 3681 çã«è¨é²ããããã®ã³ã¼ã 3682 ã¯ï¼TLVï¼TraceLogVisualizerï¼ã®é 3683 å¸ããã±ã¼ã¸ã«å«ã¾ãã¦ããï¼ 3684 3685 6.12 ã«ã¼ãã«å®è£ 3686 ã®ã¿ã¼ã²ããä¾åé¨ã®ããã®ãªãã¼ã è¨è¿° 3687 3688 ã«ã¼ãã«å 3689 é¨ã«éãã¦ä½¿ãããé¢æ°ãå¤æ°ãªã©ã®å称ã§ï¼ãªãã¸ã§ã¯ããã¡ã¤ 3690 ã«ã®ã·ã³ãã«è¡¨ã«ç»é²ããã¦å¤é¨ããåç 3691 §ã§ããå称ã¯ï¼Cè¨èªã¬ãã«ã§ï¼å 3692 é 3693 ã"_kernel_"ã¾ãã¯"_KERNEL_"ã§ããå称ã¨ããªããã°ãªããªããï¼ASPã«ã¼ã 3694 ã«ã§ã¯ï¼ã½ã¼ã¹ã³ã¼ããã³ã³ãã¯ãã«ä¿ã¡ã¤ã¤ãããå®ç¾ããããã«ï¼ãªãã¼ 3695 ã è¨è¿°ãã¡ã¤ã«ãå°å 3696 ¥ãã¦ããï¼ 3697 3698 å 3699 ·ä½çã«ã¯ï¼ãªãã¼ã ãã¹ãå称ããªã¹ãã¢ããããxxx_rename.defãç¨æãï¼ 3700 ãã®ãã¡ã¤ã«ãããã¼ã«ï¼utils/genrenameï¼ã«ããï¼å称ããªãã¼ã ãããã 3701 ã®ãã¯ãå®ç¾©ãå«ãxxx_rename.hã¨ï¼ãããã®ãã¯ãå®ç¾©ã解é¤ããããã® 3702 xxx_unrename.hãçæããï¼ãã¼ã«ã®èµ·åæ¹æ³ã¯æ¬¡ã®éãã§ããï¼ 2923 (3) スタートアップモジュールで,bssセクションのクリアを省略している場合 2924 には,trace_modeをTRACE_STOP(=0)に初期化するコードを追加する.こ 2925 れは,トレースログ機能が初期化される前に書き込まれるトレースログを 2926 無視するためである. 2927 2928 このサンプルコードを用いて,トレースログを記録・ダンプする方法の例につ 2929 いては,「TOPPERS/ASPカーネル ユーザーズマニュアル」の「11.6 トレースロ 2930 グ記録のサンプルコードの使用方法」の節を参照すること. 2931 2932 なお,このサンプルコードでは,ディスパッチャの出口,タスクの状態遷移, 2933 システムログの出力の3つのトレースログのみを記録している.他のトレースロ 2934 グを記録したい場合には,trace_config.h(およびtrace_dump.c)を修正する 2935 必要がある.なお,カーネルのトレースログを網羅的に記録するためのコード 2936 は,TLV(TraceLogVisualizer)の配布パッケージに含まれている. 2937 2938 6.12 カーネル実装のターゲット依存部のためのリネーム記述 2939 2940 カーネル内部に閉じて使われる関数や変数などの名称で,オブジェクトファイ 2941 ルのシンボル表に登録されて外部から参照できる名称は,C言語レベルで,先頭 2942 が"_kernel_"または"_KERNEL_"である名称としなければならないが,ASPカーネ 2943 ルでは,ソースコードをコンパクトに保ちつつこれを実現するために,リネー 2944 ム記述ファイルを導入している. 2945 2946 具体的には,リネームすべき名称をリストアップしたxxx_rename.defを用意し, 2947 このファイルからツール(utils/genrename)により,名称をリネームするため 2948 のマクロ定義を含むxxx_rename.hと,それらのマクロ定義を解除するための 2949 xxx_unrename.hを生成する.ツールの起動方法は次の通りである. 3703 2950 3704 2951 % genrename xxx 3705 2952 3706 xxx_rename.def ã«ã¯ï¼ãªãã¼ã ãã¹ãå称ã1è¡ã«1ã¤è¨è¿°ããï¼xxxxã¨ããå3707 称ãè¨è¿°ããã¦ããå ´åï¼xxx_rename.hã«ã¯æ¬¡ã®ãããªè¨è¿°ãçæãããï¼ 2953 xxx_rename.defには,リネームすべき名称を1行に1つ記述する.xxxxという名 2954 称が記述されている場合,xxx_rename.hには次のような記述が生成される. 3708 2955 3709 2956 #define xxxx _kernel_xxxx … … 3712 2959 #endif /* TOPPERS_LABEL_ASM */ 3713 2960 3714 ã¾ãï¼xxx_unrename.hã«ã¯æ¬¡ã®ãããªè¨è¿°ãçæãããï¼ 2961 また,xxx_unrename.hには次のような記述が生成される. 3715 2962 3716 2963 #undef xxxx … … 3719 2966 #endif /* TOPPERS_LABEL_ASM */ 3720 2967 3721 xxx_rename.defã®ä¸ã«ã¯ï¼ä»ã®ãªãã¼ã è¨è¿°ãåãè¾¼ãããã«ï¼ãINCLUDE 3722 "yyy"ãã¾ãã¯ãINCLUDE <yyy>ãã¨ããè¨è¿°ãå«ãããã¨ãã§ããï¼ãã®è¨è¿° 3723 ãããã¦ããå ´åï¼xxx_rename.hã«ã¯ã#include "yyy_rename.h"ãã¾ã㯠3724 ã#include <yyy_rename.h>ãã¨ããè¨è¿°ãï¼xxx_unrename.hã«ã¯ã#include 3725 "yyy_unrename.h"ãã¾ãã¯ã#include <yyy_unrename.h>ãã¨ããè¨è¿°ãçæã 3726 ããï¼ 3727 3728 xxx_rename.defã®ä¸ã®"#"ã§å§ã¾ãè¡ã¯ã³ã¡ã³ãã¨ãã¦èªã¿é£ã°ãããï¼ã¾ãï¼ 3729 空è¡ãç¡è¦ãããï¼ 3730 3731 ã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ä½¿ãããå称ããªãã¼ã ããããã«ï¼kernel 3732 ãã£ã¬ã¯ããªã«ï¼kernel_rename.defã¨ï¼ããããçæããkernel_rename.hã 3733 ãã³kernel_unrename.hãç¨æããã¦ããï¼kernel_rename.defã«ã¯ï¼ 3734 ãINCLUDE "target"ãã¨ããè¨è¿°ãå«ã¾ãã¦ããï¼ã¿ã¼ã²ããä¾åé¨ã®ãªãã¼ 3735 ã è¨è¿°ãåãè¾¼ãããã«ãªã£ã¦ããï¼ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ãï¼ã¿ã¼ã²ãã 3736 éä¾åé¨ã§åç 3737 §ãããå称ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®ãªãã¼ã è¨è¿°ã«å«ããï¼ 3738 3739 ã¿ã¼ã²ããä¾åé¨ã§ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ä½¿ãããå称ããªãã¼ã ãããã 3740 ã«ï¼target_rename.defã¨ï¼ããããçæããtarget_rename.hããã³ 3741 target_unrename.hãç¨æããï¼ã¿ã¼ã²ããä¾åé¨ããããã»ããµã»ãããã»é 3742 çºç°å¢ä¾åé¨ãåãåããå ´åã«ã¯ï¼target_rename.defã«INCLUDEè¨è¿°ãå 3743 ¥ãï¼ 3744 ããã»ããµã»ãããã»éçºç°å¢ä¾åé¨ã®ãªãã¼ã è¨è¿°ãåãè¾¼ãããã«ããï¼ 3745 3746 6.13 ã¿ã¤ããã©ã¤ã 3747 3748 ã¿ã¤ããã©ã¤ãã¯ï¼ã«ã¼ãã«ã«ã¿ã¤ã ãã£ãã¯ãéç¥ããããã®ã¿ã¤ããã©ã¤ 3749 ãã§ããï¼ 3750 3751 6.13.1 ã¿ã¤ããã©ã¤ãã®ãã¡ã¤ã«æ§æ 3752 3753 ã¿ã¤ããã©ã¤ããçµã¿è¾¼ãããã®éçAPIãè¨è¿°ããã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ 3754 ã·ã§ã³ãã¡ã¤ã«ãï¼target_timer.cfgã«ç¨æããï¼ãã®ãã¡ã¤ã«ã«ã¯ï¼ã¿ã¤ã 3755 ãã©ã¤ããåæåããããã®åæåã«ã¼ãã³ã®è¿½å ï¼ã¿ã¤ããã©ã¤ããçµäºã 3756 ããããã®çµäºå¦çã«ã¼ãã³ã®è¿½å ï¼ã¿ã¤ãå²è¾¼ã¿ã®ããã®å²è¾¼ã¿ãã³ãã©ã® 3757 å®ç¾©ï¼ã¾ãã¯ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®è¿½å ï¼ï¼ã¿ã¤ãå²è¾¼ã¿ã®ããã®å²è¾¼ 3758 ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å®ã®éçAPIãªã©ãå«ããã¨ã«ãªãï¼ 3759 3760 ã¿ã¤ããã©ã¤ããå¼ã³åºãããã«å¿ 3761 è¦ãªå®ç¾©ãå«ãããããã¡ã¤ã«ãï¼ 3762 target_timer.hã«ç¨æããï¼ã¾ãï¼ã¿ã¤ããã©ã¤ãã®å®è£ 3763 ãã¡ã¤ã«ã 3764 target_timer.cã«ç¨æããï¼ 3765 3766 ã¿ã¤ã ãã£ãã¯ã®éç¥ã«ããè¡ãå¦çã®å¤ãã¯ï¼ã¿ã¹ã¯ã®èµ·åãå¾ 3767 ã¡è§£é¤ãè¡ 3768 ããã®ã§ããããï¼ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿åªå 3769 度ã¯ï¼å²è¾¼ã¿ã®ä¸ã§æä½ã®åªå 3770 3771 度ã§ååã§ããï¼ãã ãï¼å¨æãã³ãã©ãã¢ã©ã¼ã ãã³ãã©ã®å®è¡éå§é 3772 ãã 3773 åé¡ã«ãªãå ´åã«ã¯ï¼ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿åªå 3774 度ãããé«ãå¤ã«è¨å®ãããï¼ 3775 ããã§ï¼ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿åªå 3776 度ãå¤æ´ããæ¹æ³ãï¼ã¿ã¼ã²ããä¾åé¨ã® 3777 ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«è¨è¼ãã¹ãã§ããï¼ 3778 3779 6.13.2 ã¿ã¤ãã®åæåã»çµäºå¦çã»å²è¾¼ã¿å¦ç 2968 xxx_rename.defの中には,他のリネーム記述を取り込むために,「INCLUDE 2969 "yyy"」または「INCLUDE <yyy>」という記述を含めることができる.この記述 2970 がされている場合,xxx_rename.hには「#include "yyy_rename.h"」または 2971 「#include <yyy_rename.h>」という記述が,xxx_unrename.hには「#include 2972 "yyy_unrename.h"」または「#include <yyy_unrename.h>」という記述が生成さ 2973 れる. 2974 2975 xxx_rename.defの中の"#"で始まる行はコメントとして読み飛ばされる.また, 2976 空行も無視される. 2977 2978 カーネルのターゲット非依存部で使われる名称をリネームするために,kernel 2979 ディレクトリに,kernel_rename.defと,そこから生成したkernel_rename.hお 2980 よびkernel_unrename.hが用意されている.kernel_rename.defには, 2981 「INCLUDE "target"」という記述が含まれており,ターゲット依存部のリネー 2982 ム記述を取り込むようになっている.ターゲット依存部で定義し,ターゲット 2983 非依存部で参照される名称は,ターゲット依存部のリネーム記述に含める. 2984 2985 ターゲット依存部では,ターゲット依存部で使われる名称をリネームするため 2986 に,target_rename.defと,そこから生成したtarget_rename.hおよび 2987 target_unrename.hを用意する.ターゲット依存部からプロセッサ・チップ・開 2988 発環境依存部を切り分ける場合には,target_rename.defにINCLUDE記述を入れ, 2989 プロセッサ・チップ・開発環境依存部のリネーム記述を取り込むようにする. 2990 2991 6.13 タイマドライバ 2992 2993 タイマドライバは,カーネルにタイムティックを通知するためのタイマドライ 2994 バである. 2995 2996 6.13.1 タイマドライバのファイル構成 2997 2998 タイマドライバを組み込むための静的APIを記述したシステムコンフィギュレー 2999 ションファイルを,target_timer.cfgに用意する.このファイルには,タイマ 3000 ドライバを初期化するための初期化ルーチンの追加,タイマドライバを終了さ 3001 せるための終了処理ルーチンの追加,タイマ割込みのための割込みハンドラの 3002 定義(または,割込みサービスルーチンの追加),タイマ割込みのための割込 3003 み要求ラインの属性の設定の静的APIなどを含むことになる. 3004 3005 タイマドライバを呼び出すために必要な定義を含むヘッダファイルを, 3006 target_timer.hに用意する.また,タイマドライバの実装ファイルを 3007 target_timer.cに用意する. 3008 3009 タイムティックの通知により行う処理の多くは,タスクの起動や待ち解除を行 3010 うものであるため,タイマ割込みの割込み優先度は,割込みの中で最低の優先 3011 度で十分である.ただし,周期ハンドラやアラームハンドラの実行開始遅れが 3012 問題になる場合には,タイマ割込みの割込み優先度をより高い値に設定したい. 3013 そこで,タイマ割込みの割込み優先度を変更する方法を,ターゲット依存部の 3014 ユーザーズマニュアルに記載すべきである. 3015 3016 6.13.2 タイマの初期化・終了処理・割込み処理 3780 3017 3781 3018 (6-13-2-1) void target_timer_initialize(intptr_t exinf) 3782 3019 3783 ã¿ã¤ããåæåãï¼ã¿ã¤ãå²è¾¼ã¿ãå¨æçã«çºçãããé¢æ°ï¼ã¿ã¤ãå²è¾¼ã¿ã® 3784 å¨æã¯ï¼TIC_NUMEã¨TIC_DENOã§æå®ãããæéã¨ä¸è´ãããï¼ã5.2 ã¿ã¤ã 3785 ãã£ãã¯ã®å®ç¾©ãã®ç¯ãåç 3786 §ï¼ï¼ 3787 3788 ãã®é¢æ°ã¯ï¼target_timer.cfgä¸ã«è¨è¿°ããéçAPIã«ããï¼åæåã«ã¼ãã³ã¨ 3789 ãã¦ã«ã¼ãã«ã«ç»é²ãããã¨ãæ³å®ãã¦ããï¼ 3020 タイマを初期化し,タイマ割込みを周期的に発生させる関数.タイマ割込みの 3021 周期は,TIC_NUMEとTIC_DENOで指定された時間と一致させる(「5.2 タイム 3022 ティックの定義」の節を参照). 3023 3024 この関数は,target_timer.cfg中に記述する静的APIにより,初期化ルーチンと 3025 してカーネルに登録することを想定している. 3790 3026 3791 3027 (6-13-2-2) void target_timer_terminate(intptr_t exinf) 3792 3028 3793 ã¿ã¤ãã®åä½ãåæ¢ããï¼ã¿ã¤ãå²è¾¼ã¿ãçºçããªãããã«ããé¢æ°ï¼ 3794 3795 ãã®é¢æ°ã¯ï¼target_timer.cfgä¸ã«è¨è¿°ããéçAPIã«ããï¼çµäºå¦çã«ã¼ãã³ 3796 ã¨ãã¦ã«ã¼ãã«ã«ç»é²ãããã¨ãæ³å®ãã¦ããï¼ 3029 タイマの動作を停止させ,タイマ割込みを発生しないようにする関数. 3030 3031 この関数は,target_timer.cfg中に記述する静的APIにより,終了処理ルーチン 3032 としてカーネルに登録することを想定している. 3797 3033 3798 3034 (6-13-2-3) void target_timer_handler(void) 3799 ã¾ãã¯void target_timer_isr(intptr_t exinf)3800 3801 ã¿ã¤ãå²è¾¼ã¿ã«ããèµ·åãããå²è¾¼ã¿å¦çããã°ã©ã ï¼å²è¾¼ã¿ãã³ãã©ã¨ã㦠3802 å®ç¾ããå ´åã«ã¯target_timer_handlerï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã¨ãã¦å®ç¾ 3803 ããå ´åã«ã¯target_timer_isrã®å称ã¨ããï¼ã¿ã¼ã²ããéä¾åé¨ã® 3804 signal_time ãå¼ã³åºãï¼3805 3806 target_timer_handler ã¯ï¼æ¨æºçã«ã¯æ¬¡ã®ããã«å®ç¾©ããï¼3035 または void target_timer_isr(intptr_t exinf) 3036 3037 タイマ割込みにより起動される割込み処理プログラム.割込みハンドラとして 3038 実現する場合にはtarget_timer_handler,割込みサービスルーチンとして実現 3039 する場合にはtarget_timer_isrの名称とする.ターゲット非依存部の 3040 signal_timeを呼び出す. 3041 3042 target_timer_handlerは,標準的には次のように定義する. 3807 3043 3808 3044 ---------------------------------------- … … 3810 3046 target_timer_handler(void) 3811 3047 { 3812 i_begin_int(< ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿çªå·>);3048 i_begin_int(<タイマ割込みの割込み番号>); 3813 3049 signal_time(); 3814 i_end_int(< ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿çªå·>);3050 i_end_int(<タイマ割込みの割込み番号>); 3815 3051 } 3816 3052 ---------------------------------------- 3817 3053 3818 ãã®é¢æ°ã¯ï¼target_timer.cfgä¸ã«è¨è¿°ããéçAPIã«ããï¼å²è¾¼ã¿ãã³ãã©ã¾ 3819 ãã¯å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã¨ãã¦ã«ã¼ãã«ã«ç»é²ãããã¨ãæ³å®ãã¦ããï¼ 3820 3821 6.13.3 æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®åç 3822 §ã®ããã®æ©è½ 3823 3824 æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®åç 3825 §æ©è½ï¼get_utmï¼ããµãã¼ãããå ´åã«ã¯ï¼ã¿ã¤ 3826 ããã©ã¤ãã§ï¼ä»¥ä¸ã®ãã¼ã¿åãé¢æ°ãªã©ãç¨æããï¼ 3827 3828 (6-13-3-1) OMIT_GET_UTMï¼ãªãã·ã§ã³ï¼ 3829 3830 ã¿ã¼ã²ããéä¾åé¨ã®get_utmã®å®è£ 3831 ã使ç¨ããï¼ã¿ã¼ã²ããä¾åé¨ã§get_utm 3832 ãç¨æããå ´åã«ã¯ï¼ãã®ã·ã³ãã«ããã¯ãå®ç¾©ããï¼ãã®ã·ã³ãã«ããã¯ã 3833 å®ç¾©ããå ´åï¼ä»¥ä¸ã®ãã¼ã¿åãé¢æ°ãªã©ãç¨æããå¿ 3834 è¦ã¯ãªãï¼ 3054 この関数は,target_timer.cfg中に記述する静的APIにより,割込みハンドラま 3055 たは割込みサービスルーチンとしてカーネルに登録することを想定している. 3056 3057 6.13.3 性能評価用システム時刻の参照のための機能 3058 3059 性能評価用システム時刻の参照機能(get_utm)をサポートする場合には,タイ 3060 マドライバで,以下のデータ型や関数などを用意する. 3061 3062 (6-13-3-1) OMIT_GET_UTM(オプション) 3063 3064 ターゲット非依存部のget_utmの実装を使用せず,ターゲット依存部でget_utm 3065 を用意する場合には,このシンボルをマクロ定義する.このシンボルをマクロ 3066 定義した場合,以下のデータ型や関数などを用意する必要はない. 3835 3067 3836 3068 (6-13-3-2) CLOCK 3837 3069 3838 ã¿ã¤ãå¤ã®å 3839 é¨è¡¨ç¾ã®ããã®ãã¼ã¿åï¼ 3070 タイマ値の内部表現のためのデータ型. 3840 3071 3841 3072 (6-13-3-3) CLOCK target_timer_get_current(void) 3842 3073 3843 ã¿ã¤ãã®ç¾å¨å¤ãèªã¿åºãï¼å 3844 é¨è¡¨ç¾ã§è¿ãé¢æ°ï¼ã¿ã¤ãå¤ã¯ï¼æéã®çµé㨠3845 ã¨ãã«å¢å ãããã¨ãæ³å®ãã¦ããï¼ãã¼ãã¦ã§ã¢ã®ã¿ã¤ããï¼ã¿ã¤ãå¤ãæ¸ 3846 å°ãããã®ã§ããå ´åã«ã¯ï¼ãã®é¢æ°å 3847 ã§å¢å ããå¤ã¨ãªãããã«å¤æããï¼ 3074 タイマの現在値を読み出し,内部表現で返す関数.タイマ値は,時間の経過と 3075 ともに増加することを想定している.ハードウェアのタイマが,タイマ値が減 3076 少するものである場合には,この関数内で増加する値となるように変換する. 3848 3077 3849 3078 (6-13-3-4) bool_t target_timer_probe_int(void) 3850 3079 3851 ã¿ã¤ãå²è¾¼ã¿è¦æ±ããã§ãã¯ããé¢æ°ï¼ã¿ã¤ãå²è¾¼ã¿ãè¦æ±ããã¦ããå ´åã« 3852 true ï¼è¦æ±ããã¦ããªãå ´åã«falseãè¿ãï¼3080 タイマ割込み要求をチェックする関数.タイマ割込みが要求されている場合に 3081 true,要求されていない場合にfalseを返す. 3853 3082 3854 3083 (6-13-3-5) TO_USEC(clock) 3855 3084 3856 ã¿ã¤ãå¤ã®å 3857 é¨è¡¨ç¾ãï¼1μç§åä½ã«å¤æããããã®ãã¯ãï¼ã¾ãã¯é¢æ°ï¼ï¼ 3858 targettimer_get_currentã§èªã¿åºããå¤ãï¼ã¿ã¤ãå²è¾¼ã¿çºçããã®çµéæé 3859 ï¼åä½: 1μç§ï¼ã«å¤æããããã«ç¨ããï¼ 3860 3861 6.14 ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãï¼ãªãã·ã§ã³ï¼ 3862 3863 ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãã¯ï¼ãªã¼ãã©ã³ãã³ãã©ãèµ·åããããã®ã¿ã¤ãã® 3864 ãã©ã¤ãã§ããï¼ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ããµãã¼ãããªãå ´ 3865 åã«ã¯ï¼ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ããç¨æããå¿ 3866 è¦ã¯ãªãï¼ 3867 3868 6.14.1 ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãã®ãã¡ã¤ã«æ§æ 3869 3870 ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãã¯ï¼ã¿ã¤ããã©ã¤ãã¨åããã¡ã¤ã«ã®ä¸ã«è¨è¿°ããï¼ 3871 ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãã®ããã®è¨è¿°ã¯ï¼TOPPERS_SUPPORT_OVRHDRããã¯ã 3872 å®ç¾©ããã¦ããå ´åã«ã®ã¿æå¹ã«ãªãããã«ããï¼ 3873 3874 ããªãã¡ï¼ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ããçµã¿è¾¼ãããã®éçAPI㯠3875 target_timer.cfgã®ä¸ã«è¨è¿°ããï¼ãã®ãã¡ã¤ã«ã«ã¯ï¼ãªã¼ãã©ã³ã¿ã¤ããã© 3876 ã¤ããåæåããããã®åæåã«ã¼ãã³ã®è¿½å ï¼ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãã 3877 çµäºãããããã®çµäºå¦çã«ã¼ãã³ã®è¿½å ï¼ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ã®ããã® 3878 å²è¾¼ã¿ãã³ãã©ã®å®ç¾©ï¼ã¾ãã¯ï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®è¿½å ï¼ï¼ãªã¼ãã© 3879 ã³ã¿ã¤ãå²è¾¼ã¿ã®ããã®å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å®ã®éçAPIãªã©ãå«ãã 3880 ã¨ã«ãªãï¼ 3881 3882 ã¾ãï¼ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ããå¼ã³åºãããã«å¿ 3883 è¦ãªå®ç¾©ã¯ 3884 target_timer.hã®ä¸ã«ï¼ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ãã®å®è£ 3885 ã¯target_timer.cã® 3886 ä¸ã«è¨è¿°ããï¼ 3887 3888 ãªã¼ãã©ã³ãã³ãã©ã¯ï¼ã¿ã¹ã¯ã®ãªã¼ãã©ã³ã«å¯¾ããå¦çãè¡ããã®ã§ããã 3889 ãï¼ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿åªå 3890 度ã¯ï¼å²è¾¼ã¿ã®ä¸ã§æä½ã®åªå 3891 度㧠3892 ååã§ããï¼ãã ãï¼ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿åªå 3893 度ãããé«ãå¤ã« 3894 è¨å®ãããå ´åããªãã¨ã¯è¨ããªãããï¼ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿åª 3895 å 3896 度ãå¤æ´ããæ¹æ³ãï¼ã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«è¨è¼ãã¹ 3897 ãã§ããï¼ 3898 3899 6.14.2 ãªã¼ãã©ã³ã¿ã¤ãã®æä½ã¨å²è¾¼ã¿å¦ç 3085 タイマ値の内部表現を,1μ秒単位に変換するためのマクロ(または関数). 3086 targettimer_get_currentで読み出した値を,タイマ割込み発生からの経過時間 3087 (単位: 1μ秒)に変換するために用いる. 3088 3089 6.14 オーバランタイマドライバ(オプション) 3090 3091 オーバランタイマドライバは,オーバランハンドラを起動するためのタイマの 3092 ドライバである.オーバランハンドラ機能拡張パッケージをサポートしない場 3093 合には,オーバランタイマドライバを用意する必要はない. 3094 3095 6.14.1 オーバランタイマドライバのファイル構成 3096 3097 オーバランタイマドライバは,タイマドライバと同じファイルの中に記述する. 3098 オーバランタイマドライバのための記述は,TOPPERS_SUPPORT_OVRHDRがマクロ 3099 定義されている場合にのみ有効になるようにする. 3100 3101 すなわち,オーバランタイマドライバを組み込むための静的APIは 3102 target_timer.cfgの中に記述する.このファイルには,オーバランタイマドラ 3103 イバを初期化するための初期化ルーチンの追加,オーバランタイマドライバを 3104 終了させるための終了処理ルーチンの追加,オーバランタイマ割込みのための 3105 割込みハンドラの定義(または,割込みサービスルーチンの追加),オーバラ 3106 ンタイマ割込みのための割込み要求ラインの属性の設定の静的APIなどを含むこ 3107 とになる. 3108 3109 また,オーバランタイマドライバを呼び出すために必要な定義は 3110 target_timer.hの中に,オーバランタイマドライバの実装はtarget_timer.cの 3111 中に記述する. 3112 3113 オーバランハンドラは,タスクのオーバランに対する処理を行うものであるた 3114 め,オーバランタイマ割込みの割込み優先度は,割込みの中で最低の優先度で 3115 十分である.ただし,オーバランタイマ割込みの割込み優先度をより高い値に 3116 設定したい場合もないとは言えないため,オーバランタイマ割込みの割込み優 3117 先度を変更する方法を,ターゲット依存部のユーザーズマニュアルに記載すべ 3118 きである. 3119 3120 6.14.2 オーバランタイマの操作と割込み処理 3900 3121 3901 3122 (6-14-2-1) void target_ovrtimer_initialize(intptr_t exinf) 3902 3123 3903 ãªã¼ãã©ã³ã¿ã¤ãã®åæåå¦çãè¡ãï¼ã¿ã¤ãã®åä½éå§ã¯è¡ããªãï¼ 3904 3905 ãã®é¢æ°ã¯ï¼target_timer.cfgä¸ã«è¨è¿°ããéçAPIã«ããï¼åæåã«ã¼ãã³ã¨ 3906 ãã¦ã«ã¼ãã«ã«ç»é²ãããã¨ãæ³å®ãã¦ããï¼ 3124 オーバランタイマの初期化処理を行う.タイマの動作開始は行わない. 3125 3126 この関数は,target_timer.cfg中に記述する静的APIにより,初期化ルーチンと 3127 してカーネルに登録することを想定している. 3907 3128 3908 3129 (6-14-2-2) void target_ovrtimer_terminate(intptr_t exinf) 3909 3130 3910 ãªã¼ãã©ã³ã¿ã¤ããåæ¢ããï¼ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãçºçããªãããã«ã 3911 ãï¼ 3912 3913 ãã®é¢æ°ã¯ï¼target_timer.cfgä¸ã«è¨è¿°ããéçAPIã«ããï¼çµäºå¦çã«ã¼ãã³ 3914 ã¨ãã¦ã«ã¼ãã«ã«ç»é²ãããã¨ãæ³å®ãã¦ããï¼ 3131 オーバランタイマを停止させ,オーバランタイマ割込みを発生しないようにす 3132 る. 3133 3134 この関数は,target_timer.cfg中に記述する静的APIにより,終了処理ルーチン 3135 としてカーネルに登録することを想定している. 3915 3136 3916 3137 (6-14-2-3) void target_ovrtimer_start(OVRTIM ovrtim) 3917 3138 3918 ãªã¼ãã©ã³ã¿ã¤ãã«ï¼æ®ãæéovrtimãè¨å®ãï¼åä½éå§ããï¼ovrtimã®åä½ 3919 ã¯ãã¤ã¯ãç§ã¨ããï¼ 3139 オーバランタイマに,残り時間ovrtimを設定し,動作開始する.ovrtimの単位 3140 はマイクロ秒とする. 3920 3141 3921 3142 (6-14-2-4) OVRTIM target_ovrtimer_stop(void) 3922 3143 3923 ãªã¼ãã©ã³ã¿ã¤ããåæ¢ãï¼ã¿ã¤ãã®æ®ãæéãèªã¿åºãï¼ããæ®ãæéã 3924 0 ï¼ã¾ãã¯ããæªæºï¼ã«ãªã£ã¦ããå ´åã«ã¯ï¼1ãè¿ãï¼ã¾ãï¼ãªã¼ãã©ã³ã¿ã¤3925 ãããã®å²è¾¼ã¿ãã¯ãªã¢ããï¼ 3144 オーバランタイマを停止し,タイマの残り時間を読み出す.もし残り時間が 3145 0(またはそれ未満)になっていた場合には,1を返す.また,オーバランタイ 3146 マからの割込みをクリアする. 3926 3147 3927 3148 (6-14-2-5) OVRTIM target_ovrtimer_get_current(void) 3928 3149 3929 ãªã¼ãã©ã³ã¿ã¤ãã®æ®ãæéãèªã¿åºãï¼ããæ®ãæéã0ï¼ã¾ãã¯ããæªæºï¼ 3930 ã«ãªã£ã¦ããå ´åã«ã¯ï¼0ãè¿ãï¼ãªã¼ãã©ã³ã¿ã¤ãããã®å²è¾¼ã¿ã¯ã¯ãªã¢ã㪠3931 ãï¼ 3150 オーバランタイマの残り時間を読み出す.もし残り時間が0(またはそれ未満) 3151 になっていた場合には,0を返す.オーバランタイマからの割込みはクリアしな 3152 い. 3932 3153 3933 3154 (6-14-2-6) void target_ovrtimer_handler(void) 3934 ã¾ãã¯void target_ovrtimer_isr(intptr_t exinf)3935 3936 ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ã«ããèµ·åãããå²è¾¼ã¿å¦çããã°ã©ã ï¼å²è¾¼ã¿ãã³ 3937 ãã©ã¨ãã¦å®ç¾ããå ´åã«ã¯target_ovrtimer_handlerï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ã 3938 ã³ã¨ãã¦å®ç¾ããå ´åã«ã¯target_ovrtimer_isrã®å称ã¨ããï¼ã¿ã¼ã²ããéä¾ 3939 åé¨ã®call_ovrhdrãå¼ã³åºãï¼ 3940 3941 target_timer_handler ã¯ï¼æ¨æºçã«ã¯æ¬¡ã®ããã«å®ç¾©ããï¼3155 または void target_ovrtimer_isr(intptr_t exinf) 3156 3157 オーバランタイマ割込みにより起動される割込み処理プログラム.割込みハン 3158 ドラとして実現する場合にはtarget_ovrtimer_handler,割込みサービスルーチ 3159 ンとして実現する場合にはtarget_ovrtimer_isrの名称とする.ターゲット非依 3160 存部のcall_ovrhdrを呼び出す. 3161 3162 target_timer_handlerは,標準的には次のように定義する. 3942 3163 3943 3164 ---------------------------------------- … … 3945 3166 target_ovrtimer_handler(void) 3946 3167 { 3947 i_begin_int(<ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿çªå·>); 3948 ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ï¼å¿ 3949 è¦ãªãï¼ 3168 i_begin_int(<オーバランタイマ割込みの割込み番号>); 3169 オーバランタイマ割込み要求のクリア(必要なら) 3950 3170 call_ovrhdr(); 3951 i_end_int(< ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿çªå·>);3171 i_end_int(<オーバランタイマ割込みの割込み番号>); 3952 3172 } 3953 3173 ---------------------------------------- 3954 3174 3955 ãã®é¢æ°ã¯ï¼target_timer.cfgä¸ã«è¨è¿°ããéçAPIã«ããï¼å²è¾¼ã¿ãã³ãã©ã¾ 3956 ãã¯å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã¨ãã¦ã«ã¼ãã«ã«ç»é²ãããã¨ãæ³å®ãã¦ããï¼ 3175 この関数は,target_timer.cfg中に記述する静的APIにより,割込みハンドラま 3176 たは割込みサービスルーチンとしてカーネルに登録することを想定している. 3957 3177 3958 3178 (6-14-2-7) OMIT_OVRTIMER_START 3959 3179 (6-14-2-8) OMIT_OVRTIMER_STOP 3960 3180 3961 ã¿ã¼ã²ããä¾åé¨ããå¼ã³åºãovrtimer_startã¨ovrtimer_stopãï¼ã¢ã»ã³ã㪠3962 è¨èªã®ã½ã¼ã¹ã³ã¼ãä¸ã«å±éãï¼Cè¨èªã®é¢æ°ãä¸è¦ã«ãªãå ´åã«ã¯ï¼ããããï¼ 3963 OMIT_OVRTIMER_STARTã¨OMIT_OVRTIMER_STOPããã¯ãå®ç¾©ããï¼ 3964 3965 6.15 åçã¡ã¢ãªç®¡çï¼ãªãã·ã§ã³ï¼ 3966 3967 åççææ©è½æ¡å¼µããã±ã¼ã¸ã使ç¨ããå ´åã«ã¯ï¼ã«ã¼ãã«å 3968 ã§ã®åçã¡ã¢ãª 3969 管çã®æ¹æ³ã決ããå¿ 3970 è¦ãããï¼ 3971 3972 åççææ©è½æ¡å¼µããã±ã¼ã¸ã®ã¿ã¼ã²ããéä¾åé¨ã§ã¯ï¼ã¡ã¢ãªé åãå 3973 é ã 3974 ãé ã«å²ãå½ã¦ï¼è§£æ¾ãããã¡ã¢ãªé åãåå©ç¨ããªãã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã« 3975 ã®ã¿ãå®è£ 3976 ãã¦ããï¼ããã©ã«ãã§ã¯ï¼ãã®ã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ã使ç¨ãã 3977 ãï¼ 3978 3979 æ¬æ ¼çãªåçã¡ã¢ãªç®¡çãè¡ãããå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã¾ãã¯ã¦ã¼ã¶ 3980 å´ã§ï¼ä»¥ä¸ã®é¢æ°ãå®ç¾©ããã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ãç¨æããå¿ 3981 è¦ãããï¼ 3982 3983 (6-15-1) OMIT_KMM_ALLOCONLYï¼ãªãã·ã§ã³ï¼ 3984 3985 ã¿ã¼ã²ããéä¾åé¨ã®ã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ã使ç¨ããï¼ã¿ã¼ã²ããä¾åé¨ã¾ 3986 ãã¯ã¦ã¼ã¶å´ã§ç¨æããå ´åã«ã¯ï¼ãã®ã·ã³ãã«ããã¯ãå®ç¾©ããï¼ 3987 3988 (6-15-2) void initialize_kmm(void)ï¼ãªãã·ã§ã³ï¼ 3989 3990 ã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ãåæåããé¢æ°ï¼ã«ã¼ãã«ã®å²ãä»ããã¡ã¢ãªé åã® 3991 ãµã¤ãºã¨å 3992 é çªå°ã¯ï¼ããããkmmszã¨kmmã«ãã£ã¦åç 3993 §ã§ããï¼ 3994 3995 (6-15-3) void *kernel_malloc(SIZE size)ï¼ãªãã·ã§ã³ï¼ 3996 3997 sizeã§æå®ããããµã¤ãºã®ã¡ã¢ãªé åãå²ãä»ãï¼ãã®å 3998 é çªå°ãè¿ãé¢æ°ï¼ 3999 å²ãä»ãããã¨ãã§ããªãå ´åã«ã¯ï¼NULLãè¿ãï¼ 4000 4001 (6-15-4) void kernel_free(void *ptr)ï¼ãªãã·ã§ã³ï¼ 4002 4003 ptrã§æå®ãããã¡ã¢ãªé åã解æ¾ããé¢æ°ï¼ 4004 4005 6.15.1 TLSFãç¨ããã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ã®ä¾ 4006 4007 ãªã¼ãã³ã½ã¼ã¹ã®ã¡ã¢ãªå²ä»ãã©ã¤ãã©ãªã§ããTLSFãç¨ãã¦åçã¡ã¢ãªç®¡ç 4008 ãå®ç¾ããã«ã¯ï¼OMIT_KMM_ALLOCONLYããã¯ãå®ç¾©ãï¼ä»¥ä¸ã®é¢æ°å®ç¾©çãCè¨ 4009 èªã½ã¼ã¹ãã¡ã¤ã«ã«å«ããã°ããï¼ 3181 ターゲット依存部から呼び出すovrtimer_startとovrtimer_stopを,アセンブリ 3182 言語のソースコード中に展開し,C言語の関数が不要になる場合には,それぞれ, 3183 OMIT_OVRTIMER_STARTとOMIT_OVRTIMER_STOPをマクロ定義する. 3184 3185 6.15 動的メモリ管理(オプション) 3186 3187 動的生成機能拡張パッケージを使用する場合には,カーネル内での動的メモリ 3188 管理の方法を決める必要がある. 3189 3190 動的生成機能拡張パッケージのターゲット非依存部では,メモリ領域を先頭か 3191 ら順に割り当て,解放されたメモリ領域を再利用しないメモリ管理モジュール 3192 のみを実装している.デフォルトでは,このメモリ管理モジュールが使用され 3193 る. 3194 3195 本格的な動的メモリ管理を行いたい場合には,ターゲット依存部またはユーザ 3196 側で,以下の関数を定義したメモリ管理モジュールを用意する必要がある. 3197 3198 (6-15-1) OMIT_KMM_ALLOCONLY(オプション) 3199 3200 ターゲット非依存部のメモリ管理モジュールを使用せず,ターゲット依存部ま 3201 たはユーザ側で用意する場合には,このシンボルをマクロ定義する. 3202 3203 (6-15-2) void initialize_kmm(void)(オプション) 3204 3205 メモリ管理モジュールを初期化する関数.カーネルの割り付けるメモリ領域の 3206 サイズと先頭番地は,それぞれkmmszとkmmによって参照できる. 3207 3208 (6-15-3) void *kernel_malloc(SIZE size)(オプション) 3209 3210 sizeで指定されたサイズのメモリ領域を割り付け,その先頭番地を返す関数. 3211 割り付けることができない場合には,NULLを返す. 3212 3213 (6-15-4) void kernel_free(void *ptr)(オプション) 3214 3215 ptrで指定されたメモリ領域を解放する関数. 3216 3217 6.15.1 TLSFを用いたメモリ管理モジュールの例 3218 3219 オープンソースのメモリ割付けライブラリであるTLSFを用いて動的メモリ管理 3220 を実現するには,OMIT_KMM_ALLOCONLYをマクロ定義し,以下の関数定義等をC言 3221 語ソースファイルに含めればよい. 4010 3222 4011 3223 ---------------------------------------- … … 4043 3255 4044 3256 4045 ï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿è¨å®ãã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ 4046 4047 7.1 è¨å®ãã¡ã¤ã«ã¨ã¿ã¼ã²ããä¾åé¨ã®ä½ç½®ä»ã 4048 4049 ASPã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¯ï¼è¨å®ãã¡ã¤ã«ã®è¨è¿°ã«å¾ã£ã¦ãã¡ã¤ã«ã® 4050 çæããã³ã¨ã©ã¼ãã§ãã¯ãè¡ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è¨å®ãã¡ã¤ã«ã«ã¯ï¼ 4051 以ä¸ã®4ã¤ãããï¼ 4052 4053 (a) éçAPIãã¼ãã« 4054 4055 éçAPIã®ä¸è¦§ã¨ï¼åéçAPIã®ãã©ã¡ã¼ã¿ã«ã¤ãã¦è¨è¿°ãããã¡ã¤ã«ï¼éç 4056 APIãæ¡å¼µããå ´å以å¤ã¯å¤æ´ããå¿ 4057 è¦ããªãããï¼ã¿ã¼ã²ããéä¾åé¨ã§ç¨æ 4058 ãã¦ããï¼kernel/kernel_api.csvï¼ï¼ 4059 4060 (b) å¤åå¾ã·ã³ãã«ãã¼ãã« 4061 4062 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹1ã«ããã¦ï¼ãã©ã¡ã¼ã¿è¨ç®ç¨Cè¨èªãã¡ã¤ã«ã«åºå 4063 ãï¼å¤ãæ±ãããã·ã³ãã«ï¼ä¸è¬ã«ã¯å¼ï¼ãè¨è¿°ããããã®ãã¡ã¤ã«ï¼ã¿ã¼ã²ã 4064 ãéä¾åé¨ã§ã¯ï¼ã¿ã¼ã²ããã«ä¾åããã«å¿ 4065 è¦ã¨ãªãã·ã³ãã«ãè¨è¿°ãããã¡ 4066 ã¤ã«ãç¨æãã¦ããï¼kernel/kernel_def.csvï¼ï¼ 4067 4068 ã¿ã¼ã²ããã«ä¾åãã¦å¿ 4069 è¦ã¨ãªãã·ã³ãã«ãããå ´åã«ã¯ï¼targetãã£ã¬ã¯ã 4070 ãªã«ç½®ãããtarget_def.csvä¸ã«è¨è¿°ããï¼target_def.csvä¸ã«è¨è¿°ãã¦å¤ã 4071 æ±ãããã¨ãã§ããã·ã³ãã«ã¯ï¼kernel/kernel_int.hããã³ããããã¤ã³ã¯ã«ã¼ 4072 ãããããã¡ã¤ã«ã§å®ç¾©ããã¦ããªããã°ãªããªãï¼kernel_int.hããã¯ï¼ 4073 target_stddef.hï¼target_kernel.hï¼target_config.hãï¼éæ¥çã«ï¼ã¤ã³ã¯ã«ã¼ 4074 ããã¦ããããï¼ãããã®ãã¡ã¤ã«ããã³ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ 4075 ã«ã§å®ç¾©ãããã¿ã¼ã²ããä¾åã®ã·ã³ãã«ã¯ï¼target_def.csvä¸ã«è¨è¿°ããã 4076 ã¨ãã§ããï¼ 4077 4078 ããã§å¤ãæ±ããã·ã³ãã«ã®å¤ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ããã³ãã¹3ã® 4079 ãã³ãã¬ã¼ããã¡ã¤ã«ä¸ã§åç 4080 §ãããã¨ãã§ããï¼ 4081 4082 (c) ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã« 4083 4084 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã¯ï¼ãã³ãã¬ã¼ããã¡ã¤ã«ã«å¾ã£ã¦ï¼ã«ã¼ãã«ã®æ§ 4085 æã»åæåãã¡ã¤ã«ï¼kernel_cfg.cï¼ï¼æ§æã»åæåããããã¡ã¤ã« 4086 ï¼kernel_cfg.hï¼ãªã©ãçæããï¼ãã®ãã³ãã¬ã¼ããã¡ã¤ã«ã¯ï¼ã¿ã¼ã²ãã 4087 éä¾åé¨ã¨ã¿ã¼ã²ããä¾åé¨ã«åãåãã¦ãããï¼ä»ã®ãã¡ã¤ã«ã®ã¿ã¼ã²ãã 4088 ä¾åé¨ã¨ã¯éã«ï¼ã¿ã¼ã²ããä¾åé¨ããã¿ã¼ã²ããéä¾åé¨ãã¤ã³ã¯ã«ã¼ãã 4089 ãå½¢ã«ãªã£ã¦ããï¼ 4090 4091 å 4092 ·ä½çã«ã¯ï¼targetãã£ã¬ã¯ããªã«ç½®ãããtarget.tfã§ï¼å¿ 4093 è¦ãªå¤æ°ãå®ç¾©ã 4094 ãå¾ï¼ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ï¼kernel/kernel.tfï¼ã㤠4095 ã³ã¯ã«ã¼ãããï¼kernel.tfã§ã¯ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã§ä½¿ç¨ããå¤ 4096 æ°å®ç¾©çãçæããï¼kernel.tfãã¤ã³ã¯ã«ã¼ãããå¾ï¼target.tfã§ã¯ï¼ã«ã¼ 4097 ãã«ã®ã¿ã¼ã²ããä¾åé¨ã§ä½¿ç¨ããå¤æ°å®ç¾©çãçæããï¼target.tfããï¼ã 4098 ãã»ããµä¾åé¨ï¼ãããä¾åé¨ãï¼éçºç°å¢ä¾åé¨ãåãåãã¦ãããï¼ 4099 4100 (d) ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã« 4101 4102 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹3ã¯ï¼ãã³ãã¬ã¼ããã¡ã¤ã«ã«å¾ã£ã¦ï¼éçAPIã®ä¸ 4103 è¬å®æ°å¼ãã©ã¡ã¼ã¿ã®ãã§ãã¯ãè¡ãï¼ãã®ãã³ãã¬ã¼ããã¡ã¤ã«ãï¼ã¿ã¼ã²ã 4104 ãéä¾åé¨ã¨ã¿ã¼ã²ããä¾åé¨ã«åãåãã¦ããï¼ã¿ã¼ã²ããä¾åé¨ããã¿ã¼ 4105 ã²ããéä¾åé¨ãã¤ã³ã¯ã«ã¼ãããå½¢ã«ãªã£ã¦ããï¼ 4106 4107 å 4108 ·ä½çã«ã¯ï¼targetãã£ã¬ã¯ããªã«ç½®ãããtarget_check.tfã§ï¼å¿ 4109 è¦ãªå¤æ°ã 4110 å®ç¾©ããå¾ï¼ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ 4111 ï¼kernel/kernel_check.tfï¼ãã¤ã³ã¯ã«ã¼ãããï¼kernel_check.tfã§ã¯ï¼ã«ã¼ 4112 ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã§åæåãããã¯ã«åºåããä¸è¬å®æ°å¼ãã©ã¡ã¼ã¿ 4113 ã®ãã§ãã¯ãè¡ãï¼kernel_check.tfãã¤ã³ã¯ã«ã¼ãããå¾ï¼target_check.tf 4114 ã§ã¯ï¼ã¿ã¼ã²ããã«ä¾åãããã§ãã¯ãè¡ãï¼target_check.tfããï¼ããã»ã 4115 ãµä¾åé¨ï¼ãããä¾åé¨ãï¼éçºç°å¢ä¾åé¨ãåãåãã¦ãããï¼ 4116 4117 ãªãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è©³ç´°ä»æ§ã¨è¨å®ãã¡ã¤ã«ã®è¨è¿°æ¹æ³ã«ã¤ãã¦ã¯ï¼ 4118 å¥éPDFãã¡ã¤ã«ã®å½¢ã§é 4119 å¸ãã¦ãããTOPPERSæ°ä¸ä»£ã«ã¼ãã«ç¨ã³ã³ãã£ã®ã¥ 4120 ã¬ã¼ã¿ä»æ§ãããã³ãTOPPERSæ°ä¸ä»£ã«ã¼ãã«ç¨ã³ã³ãã£ã®ã¥ã¬ã¼ã¿å 4121 èµãã¯ã 4122 ããã»ããµä»æ§ããåç 4123 §ãããã¨ï¼ 4124 4125 7.2 ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ 4126 4127 以ä¸ã§ã¯ï¼ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ãè¨è¿°ããä¸ã§å¿ 4128 4129 è¦ãªäºé 4130 ã«ã¤ãã¦èª¬æããï¼ 4131 4132 7.2.1 ã¿ã¼ã²ããéä¾åé¨ãã¤ã³ã¯ã«ã¼ãããåã«å®ç¾©ãã¹ãå¤æ° 4133 4134 target.tfããkernel.tfãã¤ã³ã¯ã«ã¼ãããåã«ï¼æ¬¡ã®å¤æ°ãå®ç¾©ãã¦ãã㪠4135 ããã°ãªããªãï¼ 4136 4137 (7-2-1-1) INTNO_ATTISR_VALID ATT_ISRã§ä½¿ç¨ã§ããå²è¾¼ã¿çªå· 4138 (7-2-1-2) INHNO_ATTISR_VALID INTNO_ATTISR_VALIDã«å¯¾å¿ããå²è¾¼ãã³ãã©çªå· 4139 (7-2-1-3) INHNO_DEFINH_VALID DEF_INTã§ä½¿ç¨ã§ããå²è¾¼ã¿ãã³ãã©çªå· 4140 (7-2-1-4) EXCNO_DEFEXC_VALID DEF_EXCã§ä½¿ç¨ã§ããCPUä¾å¤ãã³ãã©çªå· 4141 (7-2-1-5) INTNO_CFGINT_VALID CFG_INTã§ä½¿ç¨ã§ããå²è¾¼ã¿çªå· 4142 (7-2-1-6) INTPRI_CFGINT_VALID CFG_INTã§ä½¿ç¨ã§ããå²è¾¼ã¿åªå 4143 度 4144 4145 APIã§ä½¿ç¨ã§ããå²è¾¼ã¿çªå·ï¼å²è¾¼ã¿ãã³ãã©çªå·ï¼CPUä¾å¤ãã³ãã©çªå·ï¼å² 4146 è¾¼ã¿åªå 4147 度ã®ãªã¹ããï¼åå¤æ°ã«å®ç¾©ããï¼INHNO_ATTISR_VALIDã«ã¯ï¼ 4148 INTNO_ATTISR_VALIDã«ãªã¹ãã¢ããããå²è¾¼ã¿çªå·ã«å¯¾å¿ããå²è¾¼ã¿ãã³ãã© 4149 çªå·ã®ãªã¹ããå®ç¾©ããï¼CFG_INTã«ã¯ï¼ãã¹ã¦ã®å²è¾¼ã¿çªå·ãæå®ãããã¨ã 4150 ã§ããããï¼INTNO_CFGINT_VALIDã«ã¯ï¼æå¹ãªå²è¾¼ã¿çªå·ããã¹ã¦ãªã¹ãã¢ã 4151 ãããï¼ 4152 4153 (7-2-1-7) INTNO_FIX_KERNELï¼ãªãã·ã§ã³ï¼ ã«ã¼ãã«ç®¡çã«åºå®ããã¦ãã 4154 å²è¾¼ã¿çªå· 4155 (7-2-1-8) INHNO_FIX_KERNELï¼ãªãã·ã§ã³ï¼ ã«ã¼ãã«ç®¡çã«åºå®ããã¦ãã 4156 å²è¾¼ã¿ãã³ãã©çªå· 4157 (7-2-1-9) INHNO_FIX_NONKERNELï¼ãªãã·ã§ã³ï¼ ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ãã 4158 å²è¾¼ã¿çªå· 4159 (7-2-1-10) INHNO_FIX_NONKERNELï¼ãªãã·ã§ã³ï¼ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ãã 4160 å²è¾¼ã¿ãã³ãã©çªå· 4161 4162 ã«ã¼ãã«ç®¡çã¾ãã¯ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããå²è¾¼ã¿ãããå ´åã«ã¯ï¼ 4163 ãããã®å²è¾¼ã¿çªå·ã¨å²è¾¼ã¿ãã³ãã©çªå·ã®ãªã¹ããï¼åå¤æ°ã«å®ç¾©ããï¼ 4164 4165 (7-2-1-11) USE_INHINIB_TABLEï¼ãªãã·ã§ã³ï¼ 4166 4167 OMIT_INITIALIZE_INTERRUPTãå®ç¾©ãããï¼å²è¾¼ã¿ãã³ãã©ã®åæåã«å¿ 4168 è¦ãªæ 4169 4170 å ±ãkernel_cfg.cã«çæãããå ´åã«ã¯ï¼ãã®å¤æ°ã1ã«è¨å®ããï¼å 4171 ·ä½çã«ã¯ï¼ 4172 TNUM_INHNOï¼tnum_inhnoï¼inhinib_tableã®å®ç¾©ã¨ï¼å²è¾¼ã¿ãã³ãã©æ¯ã®åºå 4173 ¥å£ 4174 å¦çãçæããããã®è¨è¿°ï¼INTHDR_ENTRYãã¯ãã®ãªã¹ãï¼ãï¼ã¿ã¼ã²ããé 4175 ä¾åé¨ã«ãã£ã¦çæãããï¼ 4176 4177 (7-2-1-12) USE_INTINIB_TABLEï¼ãªãã·ã§ã³ï¼ 4178 4179 OMIT_INITIALIZE_INTERRUPTãå®ç¾©ãããï¼å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®åæåã«å¿ 4180 è¦ãª 4181 æ 4182 å ±ãkernel_cfg.cã«çæãããå ´åã«ã¯ï¼ãã®å¤æ°ã1ã«è¨å®ããï¼å 4183 ·ä½çã« 4184 ã¯ï¼TNUM_INTNOï¼tnum_intnoï¼intinib_tableã®å®ç¾©ãï¼ã¿ã¼ã²ããéä¾åé¨ã« 4185 ãã£ã¦çæãããï¼ 4186 4187 (7-2-1-13) GENERATE_TSKINICTXBï¼ãªãã·ã§ã³ï¼ 4188 4189 USE_TSKINICTXBããã¯ãå®ç¾©ããå ´åï¼TSKINICTXBã®åæåæ 4190 å ±ãçæããã 4191 ããã³ãã¬ã¼ããã¡ã¤ã«é¢æ°GENERATE_TSKINICTXBãå®ç¾©ããï¼ 4192 GENERATE_TSKINICTXBã«ã¯ï¼ã¿ã¹ã¯IDããã©ã¡ã¼ã¿ã¨ãã¦æ¸¡ãããï¼ 4193 4194 (7-2-1-14) ALLOC_STACKï¼ãªãã·ã§ã³ï¼ 4195 4196 ã¹ã¿ãã¯é åã®çææ¹æ³ãããã©ã«ãããå¤æ´ãããå ´åã«ã¯ï¼ã¹ã¿ãã¯é å 4197 ãçæããããã®ãã³ãã¬ã¼ããã¡ã¤ã«é¢æ°ALLOC_STACKãå®ç¾©ããï¼ 4198 ALLOC_STACKã«ã¯ï¼ã¹ã¿ãã¯é åã®å¤æ°åã¨ä¸¸ããåã®ãµã¤ãºããã©ã¡ã¼ã¿ã¨ã 4199 ã¦æ¸¡ãããã®ã§ï¼ã¹ã¿ãã¯é åãçæããã³ã¼ããçæãï¼å¤§ããæ¹ã«ä¸¸ãã 4200 ãµã¤ãºã表ãæååãè¿ãï¼ 4201 4202 7.2.2 ã¿ã¼ã²ããéä¾åé¨ã§å®ç¾©ãããå¤æ° 4203 4204 kernel.tfã®ä¸ã§ã¯æ¬¡ã®å¤æ°ãå®ç¾©ãããããï¼kernel.tfãã¤ã³ã¯ã«ã¼ããã 4205 å¾ï¼target.tfã®ä¸ã§ããããåç 4206 §ãããã¨ãã§ããï¼ 4207 4208 (7-2-2-1) INTNO[inhno] inhnoã対å¿ããintnoã«å¤æããããã®é£æ³é 4209 å 4210 (7-2-2-2) INHNO[intno] intnoã対å¿ããinhnoã«å¤æããããã®é£æ³é 4211 å 4212 4213 7.3 ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ 4214 4215 以ä¸ã§ã¯ï¼ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ãè¨è¿°ããä¸ã§å¿ 4216 4217 è¦ãªäºé 4218 ã«ã¤ãã¦èª¬æããï¼ 4219 4220 7.3.1 ã¿ã¼ã²ããéä¾åé¨ãã¤ã³ã¯ã«ã¼ãããåã«å®ç¾©ãã¹ãå¤æ° 4221 4222 target_check.tfããkernel_check.tfãã¤ã³ã¯ã«ã¼ãããåã«ï¼å¿ 4223 è¦ã«å¿ãã¦ï¼ 4224 次ã®å¤æ°ãå®ç¾©ãã¦ãããªããã°ãªããªãï¼ 4225 4226 (7-3-1-1) GET_STK_TSKINICTXBï¼ãªãã·ã§ã³ï¼ 4227 4228 USE_TSKINICTXBããã¯ãå®ç¾©ããå ´åï¼TINIBããã¹ã¿ãã¯é åã®å 4229 é çªå°ãå 4230 ãåºãããã®ãã³ãã¬ã¼ããã¡ã¤ã«é¢æ°GET_STK_TSKINICTXBãå®ç¾©ããï¼ 4231 GET_STK_TSKINICTXBã«ã¯ï¼ã¿ã¹ã¯åæåãããã¯ï¼TINIBï¼ã®å 4232 é çªå°ããã©ã¡ã¼ 4233 ã¿ã¨ãã¦æ¸¡ãããï¼CHECK_STACK_ALIGNï¼CHECK_STACK_NONNULLã¨ãå®ç¾©ããªã 4234 å ´åã«ã¯ï¼GET_STK_TSKINICTXBãå®ç¾©ããå¿ 4235 è¦ã¯ãªãï¼ 4236 4237 (7-3-1-2) LMA.ORDER_LISTï¼ãªãã·ã§ã³ï¼ 4238 (7-3-1-3) LMA.START_DATA[lmano]ï¼ãªãã·ã§ã³ï¼ 4239 (7-3-1-4) LMA.END_DATA[lmano]ï¼ãªãã·ã§ã³ï¼ 4240 (7-3-1-5) LMA.START_IDATA[lmano]ï¼ãªãã·ã§ã³ï¼ 4241 4242 ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããä¾åé¨ã§dataã»ã¯ã·ã§ã³ãããã¼ã¿ 4243 ãåå¾ããå ´åãï¼rodataã»ã¯ã·ã§ã³ãRAMã«ç½®ãå ´åï¼ã¦ã¼ã¶ã¼ãºããã¥ã¢ã« 4244 ã®ã11.8 rodataã»ã¯ã·ã§ã³ãRAMã«ç½®ãå ´åãã®ç¯ãåç 4245 §ï¼ã«ã¯ï¼ãããã®ã» 4246 ã¯ã·ã§ã³ã®å 4247 容ãï¼é 4248 ç½®ã¢ãã¬ã¹ï¼ROMå 4249 ã®ã¢ãã¬ã¹ï¼LMAã¨å¼ã¶ï¼ããã¢ã¯ã» 4250 ã¹ã¢ãã¬ã¹ï¼RAMå 4251 ã®ã¢ãã¬ã¹ï¼VMAã¨å¼ã¶ï¼ã«ã³ãã¼ããå¿ 4252 è¦ãããï¼ 4253 4254 ãã®ã³ãã¼ã¯ï¼LMA.ORDER_LISTã«ï¼ã³ãã¼ããã»ã¯ã·ã§ã³ã®çªå·ï¼lmanoï¼ã®ãª 4255 ã¹ãï¼çªå·ã¯ä»»æã«ä»ä¸ãã¦ããï¼ï¼LMA.START_DATA[lmano]ã«ã³ãã¼ããã»ã¯ 4256 ã·ã§ã³ã®ã¢ã¯ã»ã¹ã¢ãã¬ã¹ã®å 4257 é ã®ã©ãã«ï¼LMA.END_DATA[lmano]ã«æ«å°¾ã®ã©ã 4258 ã«ï¼LMA.START_IDATA[lmano]ã«ãã®é 4259 ç½®ã¢ãã¬ã¹ã®å 4260 é ã®ã©ãã«ãè¨å®ããã 4261 ã¨ã§ï¼ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ã§å®æ½ããï¼ 4262 4263 ä¾ãã°ï¼ã³ãã¼ããã»ã¯ã·ã§ã³ã®ã¢ã¯ã»ã¹ã¢ãã¬ã¹ã®å 4264 é ã®ã©ãã«ã 4265 "__data_start"ï¼æ«å°¾ã®ã©ãã«ã"__data_end"ï¼ãã®é 4266 ç½®ã¢ãã¬ã¹ã®å 4267 é ã®ã© 4268 ãã«ã"__idata_start"ã®å ´åã«ã¯ï¼ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ã 4269 ãä¾åé¨ã«ä»¥ä¸ã®è¨è¿°ãå«ããï¼ 3257 7.コンフィギュレータ設定ファイルのターゲット依存部 3258 3259 7.1 設定ファイルとターゲット依存部の位置付け 3260 3261 ASPカーネルのコンフィギュレータは,設定ファイルの記述に従ってファイルの 3262 生成およびエラーチェックを行う.コンフィギュレータの設定ファイルには, 3263 以下の4つがある. 3264 3265 (a) 静的APIテーブル 3266 3267 静的APIの一覧と,各静的APIのパラメータについて記述したファイル.静的 3268 APIを拡張する場合以外は変更する必要がないため,ターゲット非依存部で用意 3269 している(kernel/kernel_api.csv). 3270 3271 (b) 値取得シンボルテーブル 3272 3273 コンフィギュレータのパス1において,パラメータ計算用C言語ファイルに出力 3274 し,値を求めたいシンボル(一般には式)を記述するためのファイル.ターゲッ 3275 ト非依存部では,ターゲットに依存せずに必要となるシンボルを記述したファ 3276 イルを用意している(kernel/kernel_def.csv). 3277 3278 ターゲットに依存して必要となるシンボルがある場合には,targetディレクト 3279 リに置かれたtarget_def.csv中に記述する.target_def.csv中に記述して値を 3280 求めることができるシンボルは,kernel/kernel_int.hおよびそこからインクルー 3281 ドされるファイルで定義されていなければならない.kernel_int.hからは, 3282 target_stddef.h,target_kernel.h,target_config.hを(間接的に)インクルー 3283 ドしているため,これらのファイルおよびそこからインクルードされるファイ 3284 ルで定義されるターゲット依存のシンボルは,target_def.csv中に記述するこ 3285 とができる. 3286 3287 ここで値を求めたシンボルの値は,コンフィギュレータのパス2およびパス3の 3288 テンプレートファイル中で参照することができる. 3289 3290 (c) パス2のテンプレートファイル 3291 3292 コンフィギュレータのパス2は,テンプレートファイルに従って,カーネルの構 3293 成・初期化ファイル(kernel_cfg.c),構成・初期化ヘッダファイル 3294 (kernel_cfg.h)などを生成する.このテンプレートファイルは,ターゲット 3295 非依存部とターゲット依存部に切り分けてあるが,他のファイルのターゲット 3296 依存部とは逆に,ターゲット依存部からターゲット非依存部をインクルードす 3297 る形になっている. 3298 3299 具体的には,targetディレクトリに置かれたtarget.tfで,必要な変数を定義し 3300 た後,テンプレートファイルのターゲット非依存部(kernel/kernel.tf)をイ 3301 ンクルードする.kernel.tfでは,カーネルのターゲット非依存部で使用する変 3302 数定義等を生成する.kernel.tfをインクルードした後,target.tfでは,カー 3303 ネルのターゲット依存部で使用する変数定義等を生成する.target.tfから,プ 3304 ロセッサ依存部,チップ依存部を,開発環境依存部を切り分けてもよい. 3305 3306 (d) パス3のテンプレートファイル 3307 3308 コンフィギュレータのパス3は,テンプレートファイルに従って,静的APIの一 3309 般定数式パラメータのチェックを行う.このテンプレートファイルも,ターゲッ 3310 ト非依存部とターゲット依存部に切り分けてあり,ターゲット依存部からター 3311 ゲット非依存部をインクルードする形になっている. 3312 3313 具体的には,targetディレクトリに置かれたtarget_check.tfで,必要な変数を 3314 定義した後,テンプレートファイルのターゲット非依存部 3315 (kernel/kernel_check.tf)をインクルードする.kernel_check.tfでは,カー 3316 ネルのターゲット非依存部で初期化ブロックに出力した一般定数式パラメータ 3317 のチェックを行う.kernel_check.tfをインクルードした後,target_check.tf 3318 では,ターゲットに依存するチェックを行う.target_check.tfから,プロセッ 3319 サ依存部,チップ依存部を,開発環境依存部を切り分けてもよい. 3320 3321 なお,コンフィギュレータの詳細仕様と設定ファイルの記述方法については, 3322 別途PDFファイルの形で配布している「TOPPERS新世代カーネル用コンフィギュ 3323 レータ仕様」および「TOPPERS新世代カーネル用コンフィギュレータ内蔵マクロ 3324 プロセッサ仕様」を参照すること. 3325 3326 7.2 パス2のテンプレートファイルのターゲット依存部 3327 3328 以下では,パス2のテンプレートファイルのターゲット依存部を記述する上で必 3329 要な事項について説明する. 3330 3331 7.2.1 ターゲット非依存部をインクルードする前に定義すべき変数 3332 3333 target.tfからkernel.tfをインクルードする前に,次の変数を定義しておかな 3334 ければならない. 3335 3336 (7-2-1-1) INTNO_ATTISR_VALID ATT_ISRで使用できる割込み番号 3337 (7-2-1-2) INHNO_ATTISR_VALID INTNO_ATTISR_VALIDに対応する割込ハンドラ番号 3338 (7-2-1-3) INHNO_DEFINH_VALID DEF_INTで使用できる割込みハンドラ番号 3339 (7-2-1-4) EXCNO_DEFEXC_VALID DEF_EXCで使用できるCPU例外ハンドラ番号 3340 (7-2-1-5) INTNO_CFGINT_VALID CFG_INTで使用できる割込み番号 3341 (7-2-1-6) INTPRI_CFGINT_VALID CFG_INTで使用できる割込み優先度 3342 3343 APIで使用できる割込み番号/割込みハンドラ番号/CPU例外ハンドラ番号/割 3344 込み優先度のリストを,各変数に定義する.INHNO_ATTISR_VALIDには, 3345 INTNO_ATTISR_VALIDにリストアップした割込み番号に対応する割込みハンドラ 3346 番号のリストを定義する.CFG_INTには,すべての割込み番号を指定することが 3347 できるため,INTNO_CFGINT_VALIDには,有効な割込み番号をすべてリストアッ 3348 プする. 3349 3350 (7-2-1-7) INTNO_FIX_KERNEL(オプション) カーネル管理に固定されている 3351 割込み番号 3352 (7-2-1-8) INHNO_FIX_KERNEL(オプション) カーネル管理に固定されている 3353 割込みハンドラ番号 3354 (7-2-1-9) INHNO_FIX_NONKERNEL(オプション) カーネル管理外に固定されている 3355 割込み番号 3356 (7-2-1-10) INHNO_FIX_NONKERNEL(オプション)カーネル管理外に固定されている 3357 割込みハンドラ番号 3358 3359 カーネル管理またはカーネル管理外に固定されている割込みがある場合には, 3360 それらの割込み番号と割込みハンドラ番号のリストを,各変数に定義する. 3361 3362 (7-2-1-11) USE_INHINIB_TABLE(オプション) 3363 3364 OMIT_INITIALIZE_INTERRUPTを定義したが,割込みハンドラの初期化に必要な情 3365 報をkernel_cfg.cに生成したい場合には,この変数を1に設定する.具体的には, 3366 TNUM_INHNO,tnum_inhno,inhinib_tableの定義と,割込みハンドラ毎の出入口 3367 処理を生成するための記述(INTHDR_ENTRYマクロのリスト)が,ターゲット非 3368 依存部によって生成される. 3369 3370 (7-2-1-12) USE_INTINIB_TABLE(オプション) 3371 3372 OMIT_INITIALIZE_INTERRUPTを定義したが,割込み要求ラインの初期化に必要な 3373 情報をkernel_cfg.cに生成したい場合には,この変数を1に設定する.具体的に 3374 は,TNUM_INTNO,tnum_intno,intinib_tableの定義が,ターゲット非依存部に 3375 よって生成される. 3376 3377 (7-2-1-13) GENERATE_TSKINICTXB(オプション) 3378 3379 USE_TSKINICTXBをマクロ定義した場合,TSKINICTXBの初期化情報を生成するた 3380 めテンプレートファイル関数GENERATE_TSKINICTXBを定義する. 3381 GENERATE_TSKINICTXBには,タスクIDがパラメータとして渡される. 3382 3383 (7-2-1-14) ALLOC_STACK(オプション) 3384 3385 スタック領域の生成方法をデフォルトから変更したい場合には,スタック領域 3386 を生成するためのテンプレートファイル関数ALLOC_STACKを定義する. 3387 ALLOC_STACKには,スタック領域の変数名と丸める前のサイズがパラメータとし 3388 て渡されるので,スタック領域を生成するコードを生成し,大きい方に丸めた 3389 サイズを表す文字列を返す. 3390 3391 7.2.2 ターゲット非依存部で定義される変数 3392 3393 kernel.tfの中では次の変数が定義されるため,kernel.tfをインクルードした 3394 後,target.tfの中でこれらを参照することができる. 3395 3396 (7-2-2-1) INTNO[inhno] inhnoを対応するintnoに変換するための連想配列 3397 (7-2-2-2) INHNO[intno] intnoを対応するinhnoに変換するための連想配列 3398 3399 7.3 パス3のテンプレートファイルのターゲット依存部 3400 3401 以下では,パス3のテンプレートファイルのターゲット依存部を記述する上で必 3402 要な事項について説明する. 3403 3404 7.3.1 ターゲット非依存部をインクルードする前に定義すべき変数 3405 3406 target_check.tfからkernel_check.tfをインクルードする前に,必要に応じて, 3407 次の変数を定義しておかなければならない. 3408 3409 (7-3-1-1) GET_STK_TSKINICTXB(オプション) 3410 3411 USE_TSKINICTXBをマクロ定義した場合,TINIBからスタック領域の先頭番地を取 3412 り出すためのテンプレートファイル関数GET_STK_TSKINICTXBを定義する. 3413 GET_STK_TSKINICTXBには,タスク初期化ブロック(TINIB)の先頭番地がパラメー 3414 タとして渡される.CHECK_STACK_ALIGN,CHECK_STACK_NONNULLとも定義しない 3415 場合には,GET_STK_TSKINICTXBを定義する必要はない. 3416 3417 (7-3-1-2) LMA.ORDER_LIST(オプション) 3418 (7-3-1-3) LMA.START_DATA[lmano](オプション) 3419 (7-3-1-4) LMA.END_DATA[lmano](オプション) 3420 (7-3-1-5) LMA.START_IDATA[lmano](オプション) 3421 3422 パス3のテンプレートファイルのターゲット依存部でdataセクションからデータ 3423 を取得する場合や,rodataセクションをRAMに置く場合(ユーザーズマニュアル 3424 の「11.8 rodataセクションをRAMに置く場合」の節を参照)には,これらのセ 3425 クションの内容を,配置アドレス(ROM内のアドレス,LMAと呼ぶ)からアクセ 3426 スアドレス(RAM内のアドレス,VMAと呼ぶ)にコピーする必要がある. 3427 3428 このコピーは,LMA.ORDER_LISTに,コピーするセクションの番号(lmano)のリ 3429 スト(番号は任意に付与してよい),LMA.START_DATA[lmano]にコピーするセク 3430 ションのアクセスアドレスの先頭のラベル,LMA.END_DATA[lmano]に末尾のラベ 3431 ル,LMA.START_IDATA[lmano]にその配置アドレスの先頭のラベルを設定するこ 3432 とで,パス3のテンプレートファイルのターゲット非依存部で実施する. 3433 3434 例えば,コピーするセクションのアクセスアドレスの先頭のラベルが 3435 "__data_start",末尾のラベルが"__data_end",その配置アドレスの先頭のラ 3436 ベルが"__idata_start"の場合には,パス3のテンプレートファイルのターゲッ 3437 ト依存部に以下の記述を含める. 4270 3438 4271 3439 ---------------------------------------- … … 4277 3445 4278 3446 4279 7.3.2 ã¿ã¼ã²ããä¾åé¨ã§è¡ãã¹ãã¨ã©ã¼ãã§ã㯠4280 4281 以ä¸ã®å 4282 é çªå°ã¯ï¼ã¿ã¼ã²ããéä¾åé¨ã§çæãããã¼ãã«ã«åºåãããªãã 4283 ãï¼ãã¹3ã®ã¿ã¼ã²ããéä¾åé¨ï¼kernel_check.tfï¼ã§ã¯ï¼ããã°ã©ã ã®éå§ 4284 çªå°ã¨ãã¦æ£ãããªãå ´åã®ã¨ã©ã¼ããã§ãã¯ããªãï¼ãã®ããï¼ã¿ã¼ã²ãã 4285 ä¾åé¨ã§ã¨ã©ã¼ãã§ãã¯ãè¡ãå¿ 4286 è¦ãããï¼ 4287 4288 ã»å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å 4289 é çªå°ï¼ATT_ISRã®isrï¼ 4290 ã»å²è¾¼ã¿ãã³ãã©ã®å 4291 é çªå°ï¼DEF_INHã®inthdrï¼ 4292 ã»CPUä¾å¤ãã³ãã©ã®å 4293 é çªå°ï¼DEF_EXCã®exchdrï¼ 4294 ã»åæåã«ã¼ãã³ã®å 4295 é çªå°ï¼ATT_INIã®inirtnï¼ 4296 ã»çµäºå¦çã«ã¼ãã³ã®å 4297 é çªå°ï¼ATT_TERã®terrtnï¼ 4298 4299 ãã ãï¼ã¿ã¼ã²ããä¾åé¨ã«ããã¦ãï¼ãããã®ã¨ã©ã¼ãã§ãã¯ãè¡ããã¨ã¯ 4300 éããªãããï¼ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã®ã1.5 æ¢ç¥ã®åé¡ãã®ç¯ã«ã¯ï¼ã¿ã¼ã²ã 4301 ãä¾åã§ãããã®ã¨ã©ã¼ãæ¤åºãããªããã¨ãããæ¨ãè¨è¼ãã¦ããï¼ 4302 4303 7.4 cfg1_out.cã®ãªã³ã¯ã«å¿ 4304 è¦ãªã¹ã¿ãã®å®ç¾©ãã¡ã¤ã« 4305 4306 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«é¢ãã¦ã¿ã¼ã²ããä¾åã«ç¨æããå¿ 4307 è¦ããããã¡ã¤ã«ã¨ 4308 ãã¦ï¼è¨å®ãã¡ã¤ã«ä»¥å¤ã«ï¼cfg1_out.cããªã³ã¯ããããã«å¿ 4309 è¦ãªã¹ã¿ãã®å® 4310 義ãã¡ã¤ã«ãããï¼ 4311 4312 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹1ã§ã¯ï¼éçAPIã®æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿ã®å¤ãCã³ã³ 4313 ãã¤ã©ãç¨ãã¦æ±ããããã«ï¼cfg1_out.cãçæããï¼ãããã³ã³ãã¤ã«ï¼ãª 4314 ã³ã¯ãã¦ãªãã¸ã§ã¯ããã¡ã¤ã«ãçæããéã«ï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã 4315 ãåç 4316 §ãããã·ã³ãã«ã®å®ç¾©ãä¸ããå¿ 4317 è¦ãããï¼ 4318 4319 ãã®å®ç¾©ãä¸ããããã«ï¼cfg1_out.cããï¼ã¿ã¼ã²ããä¾åé¨ã® 4320 target_cfg1_out.hãã¤ã³ã¯ã«ã¼ããã¦ããï¼target_cfg1_out.hï¼ã¾ãã¯ï¼ã 4321 ãããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã«ã¯ï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ããå 4322 ç 4323 §ãããã·ã³ãã«ã®ã¹ã¿ãã®å®ç¾©ãå«ããï¼å 4324 ¸åçã«ã¯ï¼ä»¥ä¸ã®ãããªå®ç¾©ã 4325 å«ããå¿ 4326 è¦ãããï¼ 3447 7.3.2 ターゲット依存部で行うべきエラーチェック 3448 3449 以下の先頭番地は,ターゲット非依存部で生成するテーブルに出力されないた 3450 め,パス3のターゲット非依存部(kernel_check.tf)では,プログラムの開始 3451 番地として正しくない場合のエラーをチェックしない.そのため,ターゲット 3452 依存部でエラーチェックを行う必要がある. 3453 3454 ・割込みサービスルーチンの先頭番地(ATT_ISRのisr) 3455 ・割込みハンドラの先頭番地(DEF_INHのinthdr) 3456 ・CPU例外ハンドラの先頭番地(DEF_EXCのexchdr) 3457 ・初期化ルーチンの先頭番地(ATT_INIのinirtn) 3458 ・終了処理ルーチンの先頭番地(ATT_TERのterrtn) 3459 3460 ただし,ターゲット依存部においても,これらのエラーチェックを行えるとは 3461 限らないため,ユーザーズマニュアルの「1.5 既知の問題」の節には,ターゲッ 3462 ト依存でこれらのエラーが検出されないことがある旨を記載してある. 3463 3464 7.4 cfg1_out.cのリンクに必要なスタブの定義ファイル 3465 3466 コンフィギュレータに関してターゲット依存に用意する必要があるファイルと 3467 して,設定ファイル以外に,cfg1_out.cをリンクするために必要なスタブの定 3468 義ファイルがある. 3469 3470 コンフィギュレータのパス1では,静的APIの整数定数式パラメータの値をCコン 3471 パイラを用いて求めるために,cfg1_out.cを生成する.これをコンパイル,リ 3472 ンクしてオブジェクトファイルを生成する際に,スタートアップモジュールか 3473 ら参照されるシンボルの定義を与える必要がある. 3474 3475 この定義を与えるために,cfg1_out.cから,ターゲット依存部の 3476 target_cfg1_out.hをインクルードしている.target_cfg1_out.h(または,そ 3477 こからインクルードされるファイル)には,スタートアップモジュールから参 3478 照されるシンボルのスタブの定義を含める.典型的には,以下のような定義を 3479 含める必要がある. 4327 3480 4328 3481 ---------------------------------------- … … 4344 3497 ---------------------------------------- 4345 3498 4346 ã¾ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãç¨ãã¦ãªãã»ãããã¡ã¤ã«ï¼offset.hï¼ãçæã 4347 ãå ´åã«ã¯ï¼ãã®ããã®è¨è¿°ãtarget_cfg1_out.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯ã«ã¼ 4348 ãããããã¡ã¤ã«ï¼ã«è¿½å ããå¿ 4349 è¦ãããï¼è©³ããã¯ï¼ã2.5.1 ã³ã³ãã£ã®ã¥ 4350 ã¬ã¼ã¿ãç¨ããæ¹æ³ãã®ç¯ãåç 4351 §ãããã¨ï¼ 4352 4353 4354 ï¼ï¼ã·ã¹ãã ãµã¼ãã¹çã®ã¿ã¼ã²ããä¾åé¨ 4355 4356 8.0 ã·ã¹ãã ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾åé¨ 4357 4358 ã·ãªã¢ã«ãã¼ãæ°ãã·ã¹ãã ãã°ã¿ã¹ã¯é¢é£ã®å®æ°ãªã©ï¼ã·ã¹ãã ãµã¼ãã¹ã® 4359 æ§æã決å®ããããã®å®ç¾©ãtarget_syssvc.hã¾ãã¯ããããã¤ã³ã¯ã«ã¼ããã 4360 ããã¡ã¤ã«ï¼ããã»ããµã»ãããã»éçºç°å¢ä¾åé¨ã§ç¨æãããããããã¡ã¤ 4361 ã«ãªã©ï¼ã«å«ããï¼ 4362 4363 ãªãï¼TOPPERSçµè¾¼ã¿ã³ã³ãã¼ãã³ãã·ã¹ãã ãå°å 4364 ¥ãããã¨ï¼ãã®ãã¡ã¤ã«ã® 4365 å 4366 容ã¯ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«ã«è¨è¿°ããããã¨ã«ãªãï¼ãã®ãã¡ã¤ã«ã¯ 4367 ç¡ããªãï¼ã¾ãã¯ï¼å¤§å¹ 4368 ã«ç¸®å°ãããï¼è¦è¾¼ã¿ã§ããï¼ 4369 4370 8.1 ã·ã¹ãã ãã°æ©è½ã®ã¿ã¼ã²ããä¾åå®ç¾© 4371 4372 ã·ã¹ãã ãã°æ©è½ã使ç¨ããå ´åã§ï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã§bssã»ã¯ã·ã§ 4373 ã³ã®ã¯ãªã¢ãçç¥ãã¦ããå ´åã«ã¯ï¼syslog_logmaskã¨syslog_lowmask_notã 4374 0ã«åæåããã³ã¼ãã追å ããï¼ããã¯ï¼ã·ã¹ãã ãã°æ©è½ãåæåãããå 4375 ã«åºåããããã°æ 4376 å ±ãï¼ä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåããããã§ããï¼ 4377 4378 ã¿ã¼ã²ããä¾åé¨ã§æä¾ãã¹ãã·ã¹ãã ãã°æ©è½ã®ããã®å®ç¾©ã¯æ¬¡ã®éãã§ã 4379 ãï¼ 3499 また,コンフィギュレータを用いてオフセットファイル(offset.h)を生成す 3500 る場合には,そのための記述をtarget_cfg1_out.h(または,そこからインクルー 3501 ドされるファイル)に追加する必要がある.詳しくは,「2.5.1 コンフィギュ 3502 レータを用いる方法」の節を参照すること. 3503 3504 3505 8.システムサービス等のターゲット依存部 3506 3507 8.0 システムサービスのターゲット依存部 3508 3509 シリアルポート数やシステムログタスク関連の定数など,システムサービスの 3510 構成を決定するための定義をtarget_syssvc.hまたはそこからインクルードされ 3511 るファイル(プロセッサ・チップ・開発環境依存部で用意されるヘッダファイ 3512 ルなど)に含める. 3513 3514 なお,TOPPERS組込みコンポーネントシステムが導入されると,このファイルの 3515 内容はコンポーネント記述ファイルに記述されることになり,このファイルは 3516 無くなる(または,大幅に縮小される)見込みである. 3517 3518 8.1 システムログ機能のターゲット依存定義 3519 3520 システムログ機能を使用する場合で,スタートアップモジュールでbssセクショ 3521 ンのクリアを省略している場合には,syslog_logmaskとsyslog_lowmask_notを 3522 0に初期化するコードを追加する.これは,システムログ機能が初期化される前 3523 に出力されたログ情報を,低レベル出力機能を用いて出力するためである. 3524 3525 ターゲット依存部で提供すべきシステムログ機能のための定義は次の通りであ 3526 る. 4380 3527 4381 3528 (8-1-1) TCNT_SYSLOG_BUFFER 4382 3529 4383 ã·ã¹ãã ãã°æ©è½ã®ãã°ãããã¡ã®ãµã¤ãºãå®ç¾©ãããã¯ãï¼å®ç¾©ããªãå ´å 4384 ã®ããã©ã«ãå¤ã¯32ï¼ 3530 システムログ機能のログバッファのサイズを定義するマクロ.定義しない場合 3531 のデフォルト値は32. 4385 3532 4386 3533 (8-1-2) void target_fput_log(char c) 4387 3534 4388 ã·ã¹ãã ãã°ã®ä½ã¬ãã«åºåã®ããã®æååºåé¢æ°ï¼ã¿ã¼ã²ããä¾åã®æ¹æ³ã§ï¼ 4389 æåcã表示/åºå/ä¿åããï¼ 4390 4391 ãã®é¢æ°ã¯ï¼ãªã¨ã³ãã©ã³ãã«å®è£ 4392 ããªããã°ãªããªãï¼ãã®é¢æ°å 4393 ã§æä»å¶ 4394 御ãå¿ 4395 è¦ãªå ´åã«ã¯ï¼SILãç¨ãã¦å 4396 ¨å²è¾¼ã¿ããã¯ç¶æ 4397 ã«ãããã¨ï¼ã¾ãï¼å 4398 ¨å² 4399 è¾¼ã¿ããã¯ç¶æ 4400 ã§å¼ã°ããå ´åãããããï¼å 4401 ¨å²è¾¼ã¿ããã¯ç¶æ 4402 ããå¼ã³åºã 4403 ãã¨ãã§ããªãé¢æ°ãå¼ã°ãªãããã«å®è£ 4404 ããªããã°ãªããªãï¼ 4405 4406 ä½ã¬ãã«åºåãã·ãªã¢ã«ãã¼ãçµç±ã§è¡ãå ´åã§ï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ã 4407 ã©ã¤ãã¨ãã¼ããå 4408 ±ç¨ããªããã¨ãæã¾ãããï¼ãã¼ãæ°ã足ããªãããã«ã 4409 ããããå 4410 ±ç¨ããå ´åã«ã¯ï¼ä¸¡è 4411 ã競åããªãããã«æ³¨æãå¿ 4412 è¦ã§ããï¼å 4413 ·ä½ 4414 çã«ã¯ï¼ä¸¡è 4415 ãåãè¨å®ã§ã·ãªã¢ã«I/Oããã¤ã¹ã使ãããã«ãï¼ã·ãªã¢ã«ã¤ã³ 4416 ã¿ãã§ã¼ã¹ãã©ã¤ãã®åä½ä¸ã«ä½ã¬ãã«åºåãè¡ããã¦ãå·®ãæ¯ããªãããã« 4417 è¨è¨ããï¼ã¾ãï¼ä½ã¬ãã«åºåãåä½éå§å¾ã«ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ 4418 ããã·ãªã¢ã«I/Oããã¤ã¹ãåæåããã¨ï¼æååããèµ·ããå¯è½æ§ãããããï¼ 4419 å 4420 ±ç¨ãããã¼ãã¯ï¼ä½ã¬ãã«åºåæ©è½å´ã§åæåãï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ 4421 ãã©ã¤ãã§ã¯åæåããªãããã«ããã¨ããï¼ 4422 4423 ãªãï¼ãã®é¢æ°ã®æ¬ä½ãï¼ã©ã®ãã¡ã¤ã«ã«è¨è¿°ããããåé¡ã«ãªãï¼ã·ã¹ãã 4424 ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾åé¨ã«ã¯ï¼æ¨æºã§ã¯ï¼é¢æ°å®ç¾©ãè¨è¿°ããããã®ãã¡ 4425 ã¤ã«ãç¨æãã¦ããªãï¼ã¿ã¼ã²ããä¾åã§ç¨æãã¦ããããï¼ä¾å¤çã«ï¼ã«ã¼ 4426 ãã«å®è£ 4427 ã®ã¿ã¼ã²ããä¾åã¢ã¸ã¥ã¼ã«ï¼target_config.cï¼ã«è¨è¿°ãã¦ãããï¼ 4428 ãã®å ´åï¼target_fput_logãï¼ãªãã¼ã è¨è¿°ï¼target_rename.defãªã©ï¼ã«å« 4429 ãã¦ã¯ãªããªãï¼ 4430 4431 8.2 ãã°ã¿ã¹ã¯ã®ã¿ã¼ã²ããä¾åå®ç¾© 4432 4433 ã¿ã¼ã²ããä¾åé¨ã§æä¾ãã¹ããã°ã¿ã¹ã¯ã®ããã®å®ç¾©ã¯æ¬¡ã®éãã§ããï¼ã 4434 ããã®å®ç¾©ã¯ï¼target_syssvc.hã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ã« 4435 å«ããï¼ 4436 4437 (8-2-1) LOGTASK_PRIORITYï¼ãªãã·ã§ã³ï¼ 4438 4439 ãã°ã¿ã¹ã¯ã®åªå 4440 度ãå®ç¾©ãããã¯ãï¼å®ç¾©ããªãå ´åã®ããã©ã«ãå¤ã¯3ï¼ 4441 4442 (8-2-2) LOGTASK_STACK_SIZEï¼ãªãã·ã§ã³ï¼ 4443 4444 ãã°ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºãå®ç¾©ãããã¯ãï¼å®ç¾©ããªãå ´åã®ããã©ã«ã 4445 å¤ã¯1024ï¼ 4446 4447 (8-2-3) LOGTASK_PORTIDï¼ãªãã·ã§ã³ï¼ 4448 4449 ãã°ã¿ã¹ã¯ã®åºåå 4450 ã®ã·ãªã¢ã«ãã¼ãçªå·ï¼å®ç¾©ããªãå ´åã®ããã©ã«ãå¤ã¯1ï¼ 4451 4452 (8-2-4) LOGTASK_INTERVALï¼ãªãã·ã§ã³ï¼ 4453 4454 ãã°ã¿ã¹ã¯ã®åä½ééï¼åä½ã¯ããªç§ï¼ï¼å®ç¾©ããªãå ´åã®ããã©ã«ãå¤ã¯10ï¼ 4455 4456 (8-2-5) LOGTASK_FLUSH_WAITï¼ãªãã·ã§ã³ï¼ 4457 4458 ãã°åºåãå¾ 4459 ã¡åãããå¦çã«ããã¦ï¼ã¿ã¹ã¯ãå¾ 4460 ãããåä½ã¨ãªãæéï¼å 4461 ä½ã¯ããªç§ï¼ï¼å®ç¾©ããªãå ´åã®ããã©ã«ãå¤ã¯1ï¼ 4462 4463 8.3 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾åé¨ 4464 4465 ã¿ã¼ã²ããä¾åé¨ã§æä¾ãã¹ãã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ããã®å®ç¾© 4466 ã¯æ¬¡ã®éãã§ããï¼ãããã®å®ç¾©ã¯ï¼å¥ã«æå®ããªãéãï¼target_serial.hã¾ 4467 ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ã«å«ãï¼å¿ 4468 è¦ãªã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ 4469 ã³æ 4470 å ±ãtarget_serial.cfgã«è¨è¿°ããï¼é¢æ°ã®å®ä½ãå¿ 4471 è¦ãªå ´åã«ã¯ï¼ 4472 target_serial.cçã®ãã¡ã¤ã«ãç¨æããï¼ 4473 4474 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ä¸ã§ï¼ã¿ã¼ã²ããã®ã·ãªã¢ã«I/Oããã¤ã¹ã« 4475 ä¾åããé¨åãï¼ã·ãªã¢ã«I/Oããã¤ã¹ãã©ã¤ãã¨å¼ã¶ï¼ã·ãªã¢ã«I/Oããã¤ã¹ 4476 ãã©ã¤ãã¯ï¼ããããï¼ITRONããã¤ã¹ãã©ã¤ãè¨è¨ã¬ã¤ãã©ã¤ã³ã®PDICã«ç¸å½ 4477 ããï¼PDICã«ç¸å½ãããã¡ã¤ã«ã§ï¼ä»ã®ã·ã¹ãã ã«ãå 4478 ±éã«ä½¿ããå¯è½æ§ãã 4479 ãå ´åã«ã¯ï¼pdicãã£ã¬ã¯ããªã«ç½®ãï¼ 4480 4481 8.3.1 å¤æ°ï¼ãã¼ã¿åï¼ç®¡çé¢æ° 3535 システムログの低レベル出力のための文字出力関数.ターゲット依存の方法で, 3536 文字cを表示/出力/保存する. 3537 3538 この関数は,リエントラントに実装しなければならない.この関数内で排他制 3539 御が必要な場合には,SILを用いて全割込みロック状態にすること.また,全割 3540 込みロック状態で呼ばれる場合があるため,全割込みロック状態から呼び出す 3541 ことができない関数を呼ばないように実装しなければならない. 3542 3543 低レベル出力をシリアルポート経由で行う場合で,シリアルインタフェースド 3544 ライバとポートを共用しないことが望ましいが,ポート数が足りないためにや 3545 むをえず共用する場合には,両者が競合しないように注意が必要である.具体 3546 的には,両者が同じ設定でシリアルI/Oデバイスを使うようにし,シリアルイン 3547 タフェースドライバの動作中に低レベル出力が行われても差し支えないように 3548 設計する.また,低レベル出力が動作開始後にシリアルインタフェースドライ 3549 バがシリアルI/Oデバイスを初期化すると,文字化けが起こる可能性があるため, 3550 共用するポートは,低レベル出力機能側で初期化し,シリアルインタフェース 3551 ドライバでは初期化しないようにするとよい. 3552 3553 なお,この関数の本体を,どのファイルに記述するかが問題になる.システム 3554 サービスのターゲット依存部には,標準では,関数定義を記述するためのファ 3555 イルを用意していない.ターゲット依存で用意してもよいが,例外的に,カー 3556 ネル実装のターゲット依存モジュール(target_config.c)に記述してもよい. 3557 この場合,target_fput_logを,リネーム記述(target_rename.defなど)に含 3558 めてはならない. 3559 3560 8.2 ログタスクのターゲット依存定義 3561 3562 ターゲット依存部で提供すべきログタスクのための定義は次の通りである.こ 3563 れらの定義は,target_syssvc.hまたはそこからインクルードされるファイルに 3564 含める. 3565 3566 (8-2-1) LOGTASK_PRIORITY(オプション) 3567 3568 ログタスクの優先度を定義するマクロ.定義しない場合のデフォルト値は3. 3569 3570 (8-2-2) LOGTASK_STACK_SIZE(オプション) 3571 3572 ログタスクのスタックサイズを定義するマクロ.定義しない場合のデフォルト 3573 値は1024. 3574 3575 (8-2-3) LOGTASK_PORTID(オプション) 3576 3577 ログタスクの出力先のシリアルポート番号.定義しない場合のデフォルト値は1. 3578 3579 (8-2-4) LOGTASK_INTERVAL(オプション) 3580 3581 ログタスクの動作間隔(単位はミリ秒).定義しない場合のデフォルト値は10. 3582 3583 (8-2-5) LOGTASK_FLUSH_WAIT(オプション) 3584 3585 ログ出力を待ち合わせる処理において,タスクを待たせる単位となる時間(単 3586 位はミリ秒).定義しない場合のデフォルト値は1. 3587 3588 8.3 シリアルインタフェースドライバのターゲット依存部 3589 3590 ターゲット依存部で提供すべきシリアルインタフェースドライバのための定義 3591 は次の通りである.これらの定義は,別に指定がない限り,target_serial.hま 3592 たはそこからインクルードされるファイルに含め,必要なコンフィギュレーショ 3593 ン情報をtarget_serial.cfgに記述する.関数の実体が必要な場合には, 3594 target_serial.c等のファイルを用意する. 3595 3596 シリアルインタフェースドライバの中で,ターゲットのシリアルI/Oデバイスに 3597 依存する部分を,シリアルI/Oデバイスドライバと呼ぶ.シリアルI/Oデバイス 3598 ドライバは,おおよそ,ITRONデバイスドライバ設計ガイドラインのPDICに相当 3599 する.PDICに相当するファイルで,他のシステムにも共通に使える可能性があ 3600 る場合には,pdicディレクトリに置く. 3601 3602 8.3.1 変数,データ型,管理関数 4482 3603 4483 3604 (8-3-1-1) TNUM_PORT 4484 3605 4485 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãããµãã¼ãããã·ãªã¢ã«ãã¼ãæ°ãå®ç¾©ãã 4486 ãã¯ãï¼ãã®ãã¯ãã®å®ç¾©ã¯ï¼target_syssvc.hã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãã 4487 ãããã¡ã¤ã«ã«å«ããï¼ 4488 4489 (8-3-1-2) void sio_initialize(intptr_t exinf) ï¼ãªãã·ã§ã³ï¼4490 4491 ã·ãªã¢ã«I/Oããã¤ã¹ãã©ã¤ãã®åæåå¦çï¼target_serial.cfgã«ï¼ãã®é¢æ° 4492 ãåæåã«ã¼ãã³ã¨ãã¦ç»é²ããéçAPIãå«ããï¼ 4493 4494 (8-3-1-3) void sio_terminate(intptr_t exinf) ï¼ãªãã·ã§ã³ï¼4495 4496 ã·ãªã¢ã«I/Oããã¤ã¹ãã©ã¤ãã®çµäºå¦çï¼target_serial.cfgã«ï¼ãã®é¢æ°ã 4497 çµäºå¦çã«ã¼ãã³ã¨ãã¦ç»é²ããéçAPIãå«ããï¼ 3606 シリアルインタフェースドライバがサポートするシリアルポート数を定義する 3607 マクロ.このマクロの定義は,target_syssvc.hまたはそこからインクルードさ 3608 れるファイルに含める. 3609 3610 (8-3-1-2) void sio_initialize(intptr_t exinf)(オプション) 3611 3612 シリアルI/Oデバイスドライバの初期化処理.target_serial.cfgに,この関数 3613 を初期化ルーチンとして登録する静的APIを含める. 3614 3615 (8-3-1-3) void sio_terminate(intptr_t exinf)(オプション) 3616 3617 シリアルI/Oデバイスドライバの終了処理.target_serial.cfgに,この関数を 3618 終了処理ルーチンとして登録する静的APIを含める. 4498 3619 4499 3620 (8-3-1-4) void sio_isr(intptr_t exinf) 4500 3621 4501 ã·ãªã¢ã«I/Oããã¤ã¹ã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼target_serial.cfgã«ï¼ãã® 4502 é¢æ°ãå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã¨ãã¦ç»é²ããéçAPIãå«ããï¼ã¾ãï¼ãã®é 4503 çAPIã«å¿ 4504 è¦ãªã·ãªã¢ã«I/Oããã¤ã¹ã®å²è¾¼ã¿çªå·ãªã©ã¯ï¼target_serial.hã§ã 4505 ã¯ãå®ç¾©ããï¼å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã§ã¯ãªãï¼å²è¾¼ã¿ãã³ãã©ã¨ããã㨠4506 ãã§ããï¼ 3622 シリアルI/Oデバイスの割込みサービスルーチン.target_serial.cfgに,この 3623 関数を割込みサービスルーチンとして登録する静的APIを含める.また,その静 3624 的APIに必要なシリアルI/Oデバイスの割込み番号などは,target_serial.hでマ 3625 クロ定義する.割込みサービスルーチンではなく,割込みハンドラとすること 3626 もできる. 4507 3627 4508 3628 (8-3-1-5) SIOPCB 4509 3629 4510 ã·ãªã¢ã«I/Oãã¼ã管çãããã¯ã®ãã¼ã¿åï¼target_serial.hã«ã¯ï¼ãã¼ã¿å 4511 ã®å®£è¨ã ãå«ã¾ãã¦ããã°ããï¼ï¼ 4512 4513 (8-3-1-6) SIO_RDY_SNDã¨SIO_RDY_RCV 4514 4515 éä¿¡å¯è½ã³ã¼ã«ããã¯ã®èå¥çªå·ãSIO_RDY_SNDã«ï¼åä¿¡éç¥ã³ã¼ã«ããã¯ã®è 4516 å¥çªå·ãSIO_RDY_RCVã«ãã¯ãå®ç¾©ããï¼ã³ã¼ã«ããã¯ã®ç¦æ¢ï¼è¨±å¯ãè¡ãªããµã¼ 4517 ãã¹ã³ã¼ã«ï¼sio_ena_cbrã¨sio_dis_cbrï¼ã§ç¨ããï¼ 4518 4519 8.3.2 ããã¤ã¹ãµã¼ãã¹ã«ã¼ãã³ 4520 4521 以ä¸ã®ããã¤ã¹ãµã¼ãã«ã«ã¼ãã³ã¯ï¼ï¼å°ãªãã¨ãï¼ã·ãªã¢ã«I/Oãã¼ãããã® 4522 å²è¾¼ã¿ããã¹ã¯ãããç¶æ 4523 ã§å¼ã³åºãããï¼ã¾ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãï¼éã¿ 4524 ã¹ã¯ã³ã³ããã¹ãã®ãããã§å¼ã³åºãããå ´åãããï¼ãããã§å¼ã³åºãã㦠4525 ãåä½ããããã«ããªããã°ãªããªãï¼ï¼ 3630 シリアルI/Oポート管理ブロックのデータ型(target_serial.hには,データ型 3631 の宣言だけ含まれていればよい). 3632 3633 (8-3-1-6) SIO_RDY_SNDとSIO_RDY_RCV 3634 3635 送信可能コールバックの識別番号をSIO_RDY_SNDに,受信通知コールバックの識 3636 別番号をSIO_RDY_RCVにマクロ定義する.コールバックの禁止/許可を行なうサー 3637 ビスコール(sio_ena_cbrとsio_dis_cbr)で用いる. 3638 3639 8.3.2 デバイスサービスルーチン 3640 3641 以下のデバイスサービルルーチンは,(少なくとも)シリアルI/Oポートからの 3642 割込みがマスクされた状態で呼び出される.また,タスクコンテキスト,非タ 3643 スクコンテキストのいずれで呼び出される場合もある(いずれで呼び出されて 3644 も動作するようにしなければならない). 4526 3645 4527 3646 (8-3-2-1) SIOPCB *sio_opn_por(ID siopid, intptr_t exinf) 4528 3647 4529 siopidã§æå®ãããã·ãªã¢ã«I/Oãã¼ãããªã¼ãã³ããé¢æ°ï¼exinfã¯ã·ãªã¢ã« 4530 I/Oãã¼ãã«å¯¾ããæ¡å¼µæ 4531 å ±ã§ï¼ã³ã¼ã«ããã¯ãå¼ã¶æã«ãã¼ããåºå¥ããã 4532 ãã«æ¸¡ãï¼ 3648 siopidで指定されるシリアルI/Oポートをオープンする関数.exinfはシリアル 3649 I/Oポートに対する拡張情報で,コールバックを呼ぶ時にポートを区別するた 3650 めに渡す. 4533 3651 4534 3652 (8-3-2-2) void sio_cls_por(SIOPCB *siopcb) 4535 3653 4536 siopcb ã§æå®ãããã·ãªã¢ã«I/Oãã¼ããã¯ãã¼ãºããé¢æ°ï¼3654 siopcbで指定されるシリアルI/Oポートをクローズする関数. 4537 3655 4538 3656 (8-3-2-3) bool_t sio_snd_chr(SIOPCB *siopcb, char c) 4539 3657 4540 siopcbã§æå®ãããã·ãªã¢ã«I/Oãã¼ãã«ï¼cã§ç¤ºãããæåãéä¿¡ããé¢æ°ï¼ 4541 æåãéä¿¡ã¬ã¸ã¹ã¿ã«å 4542 ¥ããå ´åã«ã¯trueãï¼åã«éä¿¡ããæåã®éä¿¡ãçµã㣠4543 ã¦ããªãããã«ï¼æåãéä¿¡ã¬ã¸ã¹ã¿ã«å 4544 ¥ããããªãã£ãå ´åã«ã¯falseãè¿ãï¼ 3658 siopcbで指定されるシリアルI/Oポートに,cで示される文字を送信する関数. 3659 文字を送信レジスタに入れた場合にはtrueを,前に送信した文字の送信が終わっ 3660 ていないために,文字を送信レジスタに入れられなかった場合にはfalseを返す. 4545 3661 4546 3662 (8-3-2-4) int_t sio_rcv_chr(SIOPCB *siopcb) 4547 3663 4548 siopcb ã§æå®ãããã·ãªã¢ã«I/Oãã¼ãããæåãèªãé¢æ°ï¼æåãåä¿¡ãã¦ã4549 ãå ´åï¼èªãã æåã®ã³ã¼ãã¯æ£ã®å¤ã¨ãã¦è¿ãï¼æåãåä¿¡ãã¦ããªãå ´å 4550 ã«ã¯-1ãè¿ãï¼ 3664 siopcbで指定されるシリアルI/Oポートから文字を読む関数.文字を受信してい 3665 た場合,読んだ文字のコードは正の値として返し,文字を受信していない場合 3666 には-1を返す. 4551 3667 4552 3668 (8-3-2-5) void sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn) 4553 3669 4554 siopcb ã§æå®ãããã·ãªã¢ã«I/Oãã¼ãããã®ï¼cbrtnã§æå®ãããã³ã¼ã«ãã4555 ã¯ã許å¯ããï¼cbrtnã«ã¯ï¼SIO_RDY_SNDãSIO_RDY_RCVãæå®ã§ããï¼ 3670 siopcbで指定されるシリアルI/Oポートからの,cbrtnで指定されるコールバッ 3671 クを許可する.cbrtnには,SIO_RDY_SNDかSIO_RDY_RCVを指定できる. 4556 3672 4557 3673 (8-3-2-6) void sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn) 4558 3674 4559 siopcbã§æå®ãããã·ãªã¢ã«I/Oãã¼ãããã®ï¼cbrtnã§æå®ãããã³ã¼ã«ãã 4560 ã¯ãç¦æ¢ããï¼cbrtnã«ã¯ï¼SIO_RDY_SNDãSIO_RDY_RCVãæå®ã§ããï¼ 4561 4562 8.3.3 ã³ã¼ã«ããã¯ã«ã¼ãã³ 4563 4564 ã¿ã¼ã²ããä¾åé¨ã¯ï¼å¿ 4565 è¦ãªã¿ã¤ãã³ã°ã§ï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ã 4566 ã®ã¿ã¼ã²ããéä¾åé¨ã«å«ã¾ãã以ä¸ã®ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºã³ã ã 4567 ãªããã°ãªããªãï¼ãã ãï¼ããããã®ã³ã¼ã«ããã¯ãç¦æ¢ããã¦ããæã¯ï¼ 4568 ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºãã¦ã¯ãªããªãï¼ 4569 4570 ã³ã¼ã«ããã¯ã«ã¼ãã³ã¯ï¼ï¼å°ãªãã¨ãï¼ã·ãªã¢ã«I/Oãã¼ãããã®å²è¾¼ã¿ãç¦ 4571 æ¢ãããç¶æ 4572 ã§ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§å¼ã³åºãï¼exinfã«ã¯ï¼ã·ãªã¢ã«I/O 4573 ãã¼ãã®ãªã¼ãã³æã«æå®ãããæ¡å¼µæ 4574 å ±ã渡ãï¼ 3675 siopcbで指定されるシリアルI/Oポートからの,cbrtnで指定されるコールバッ 3676 クを禁止する.cbrtnには,SIO_RDY_SNDかSIO_RDY_RCVを指定できる. 3677 3678 8.3.3 コールバックルーチン 3679 3680 ターゲット依存部は,必要なタイミングで,シリアルインタフェースドライバ 3681 のターゲット非依存部に含まれる以下のコールバックルーチンを呼び出びださ 3682 なければならない.ただし,それぞれのコールバックが禁止されている時は, 3683 コールバックルーチンを呼び出してはならない. 3684 3685 コールバックルーチンは,(少なくとも)シリアルI/Oポートからの割込みが禁 3686 止された状態で,非タスクコンテキストで呼び出す.exinfには,シリアルI/O 3687 ポートのオープン時に指定された拡張情報を渡す. 4575 3688 4576 3689 (8-3-3-1) void sio_irdy_snd(intptr_t exinf) 4577 3690 4578 éä¿¡å¯è½ã³ã¼ã«ããã¯ã«ã¼ãã³ï¼ã·ãªã¢ã«I/Oãã¼ãã«å¯¾ãã¦æåãéä¿¡ã§ãã 4579 ç¶æ 4580 ã«ãªã£ãå ´åã«å¼ã³åºãï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¯ï¼ãã®ã³ã¼ 4581 ã«ããã¯ã«ã¼ãã³ã®ä¸ã§ï¼sio_snd_chrãå¼ã³åºãã¦æ¬¡ã®æåãéä¿¡ãããï¼é 4582 ä¿¡ãã¹ãæåããªãå ´åã«ã¯éä¿¡å¯è½ã³ã¼ã«ããã¯ãç¦æ¢ããï¼ 3691 送信可能コールバックルーチン.シリアルI/Oポートに対して文字が送信できる 3692 状態になった場合に呼び出す.シリアルインタフェースドライバは,このコー 3693 ルバックルーチンの中で,sio_snd_chrを呼び出して次の文字を送信するか,送 3694 信すべき文字がない場合には送信可能コールバックを禁止する. 4583 3695 4584 3696 (8-3-3-2) void sio_irdy_rcv(intptr_t exinf) 4585 3697 4586 åä¿¡éç¥ã³ã¼ã«ããã¯ã«ã¼ãã³ï¼ã·ãªã¢ã«I/Oãã¼ãããæåãåä¿¡ããå ´åã« 4587 å¼ã³åºãï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¯ï¼ãã®ã³ã¼ã«ããã¯ã«ã¼ãã³ã® 4588 ä¸ã§ï¼å¿ 4589 ãsio_rcv_chrãå¼ã³åºãã¦åä¿¡ããæåãåãåºãï¼ 4590 4591 8.4 ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåã®ã¿ã¼ã²ããä¾åå®ç¾© 4592 4593 ã¿ã¼ã²ããä¾åé¨ã§æä¾ãã¹ãã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåã®ããã®å®ç¾©ã¯ 4594 次ã®éãã§ããï¼ 3698 受信通知コールバックルーチン.シリアルI/Oポートから文字を受信した場合に 3699 呼び出す.シリアルインタフェースドライバは,このコールバックルーチンの 3700 中で,必ずsio_rcv_chrを呼び出して受信した文字を取り出す. 3701 3702 8.4 カーネル起動メッセージの出力のターゲット依存定義 3703 3704 ターゲット依存部で提供すべきカーネル起動メッセージの出力のための定義は 3705 次の通りである. 4595 3706 4596 3707 (8-4-1) TARGET_NAME 4597 3708 4598 ã¿ã¼ã²ããã®å称ã«å®ç¾©ããï¼ 4599 4600 (8-4-2) TARGET_COPYRIGHTï¼ãªãã·ã§ã³ï¼ 4601 4602 ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã«ï¼ã¿ã¼ã²ããä¾åé¨ã®èä½æ¨©è¡¨ç¤ºã追å ããããã® 4603 ãã¯ãï¼ããã©ã«ãã§ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®èä½æ¨©è¡¨ç¤ºã追å ããªãï¼ 4604 4605 8.5 ãµã³ãã«ããã°ã©ã ã¨ãã¹ãããã°ã©ã ã®ã¿ã¼ã²ããä¾åå®ç¾© 4606 4607 ã¿ã¼ã²ããä¾åé¨ã§æä¾ãã¹ããµã³ãã«ããã°ã©ã ããã³ãã¹ãããã°ã©ã ã® 4608 ããã®å®ç¾©ã¯æ¬¡ã®éãã§ããï¼ãããã®å®ç¾©ã¯ï¼target_test.hï¼ã¾ãã¯ããã 4609 ããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã«å«ããï¼ 4610 4611 (8-5-1) STACK_SIZEï¼ãªãã·ã§ã³ï¼ 4612 4613 ãµã³ãã«ããã°ã©ã ããã³ãã¹ãããã°ã©ã ã®ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºãå®ç¾© 4614 ãããã¯ãï¼å®ç¾©ããªãå ´åã®ããã©ã«ãå¤ã¯4096ï¼ããã©ã«ãè¨å®ã§ã¯ã¡ã¢ 4615 ãªãä¸è¶³ããå ´åãï¼ã·ãã¥ã¬ã¼ã·ã§ã³ç°å¢ãªã©ã§å¤§ããã¹ã¿ãã¯é åãå¿ 4616 è¦ 4617 ãªå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã§ãã®ãã¯ããè¨å®ããã¹ã¿ãã¯ãµã¤ãºã«å®ç¾© 4618 ããï¼ 4619 4620 (8-5-2) CPUEXC1ï¼ãªãã·ã§ã³ï¼ 4621 4622 ãµã³ãã«ããã°ã©ã ããã³ãã¹ãããã°ã©ã ã§ç¨ããCPUä¾å¤ã®CPUä¾å¤ãã³ã 4623 ã©çªå·ãå®ç¾©ãããã¯ãï¼ãã®ãã¯ããå®ç¾©ããªãå ´åï¼CPUä¾å¤ãã³ãã©ã使 4624 ãé¨åããµã³ãã«ããã°ã©ã ããé¤å¤ãããï¼CPUä¾å¤ãã³ãã©ã®ãã¹ãããã 4625 ãã¹ãããã°ã©ã ã¯ã³ã³ãã¤ã«ã§ããªãï¼ 4626 4627 (8-5-3) RAISE_CPU_EXCEPTIONï¼ãªãã·ã§ã³ï¼ 4628 4629 CPUEXC1ã«å®ç¾©ããCPUä¾å¤ãçºçãããCè¨èªã®ããã°ã©ã ãå®ç¾©ãããã¯ãï¼ 4630 CPUEXC1ãå®ç¾©ããå ´åã«ã¯å¿ 4631 ãå®ç¾©ããªããã°ãªããªãï¼ 4632 4633 (8-5-4) CANNOT_RETURN_CPUEXCï¼ãªãã·ã§ã³ï¼ 4634 4635 ã¿ã¼ã²ããã·ã¹ãã ã®å¶ç´ã«ããï¼CPUä¾å¤ãã³ãã©ãããªã¿ã¼ã³ããå¾ã«ï¼ã¿ 4636 ã¹ã¯ã®å®è¡ãç¶ç¶ã§ããªãå ´åã«å®ç¾©ãããã¯ãï¼ãã®ãã¯ããå®ç¾©ããã¨ï¼ 4637 CPUä¾å¤ãã³ãã©ã®ãã¹ãããããã¹ãããã°ã©ã ããï¼CPUä¾å¤ãã³ãã©ãã 4638 ãªã¿ã¼ã³ããå¾ã®å¦çãé¤å¤ãããï¼ãµã³ãã«ããã°ã©ã ã®è©²å½é¨åã¯æ£ãã 4639 åä½ããªãï¼ 4640 4641 (8-5-5) TASK_PORTIDï¼ãªãã·ã§ã³ï¼ 4642 4643 ãµã³ãã«ããã°ã©ã ã«ããã¦ï¼ã³ãã³ãæåãèªã¿è¾¼ãã·ãªã¢ã«ãã¼ãçªå·ã 4644 å®ç¾©ãããã¯ãï¼å®ç¾©ããªãå ´åã®ããã©ã«ãå¤ã¯1ï¼ 4645 4646 (8-5-6) LOOP_REFï¼ãªãã·ã§ã³ï¼ 4647 4648 ãµã³ãã«ããã°ã©ã ã«ããã¦ï¼ããã»ããµã®é度ãè¨æ¸¬ããããã®ã«ã¼ãåæ° 4649 ãå®ç¾©ãããã¯ãï¼å®ç¾©ããªãå ´åã®ããã©ã«ãå¤ã¯1000000ï¼ããã©ã«ãè¨å® 4650 ã§ã¯ï¼å¤ã大ãéãã¦è¨æ¸¬ã«æéãããããããå ´åãï¼å¤ãå°ãéãã¦è¨æ¸¬ 4651 çµæãå®å®ããªãå ´åã«ï¼ã¿ã¼ã²ããä¾åé¨ã§ãã®ãã¯ããè¨å®ããã«ã¼ãå 4652 æ°ã«å®ç¾©ããï¼ 4653 4654 (8-5-7) MEASURE_TWICEï¼ãªãã·ã§ã³ï¼ 4655 4656 ãµã³ãã«ããã°ã©ã ã«ããã¦ï¼ããã»ããµã®é度ã2度è¨æ¸¬ããå ´åã«å®ç¾©ãã 4657 ãã¯ãï¼ã·ãã¥ã¬ã¼ã·ã§ã³ç°å¢ãªã©ããã»ããµã®é度ãå¤åããç°å¢ã§ï¼1度㮠4658 è¨æ¸¬ã§ã¯è¨æ¸¬çµæãå®å®ããªãå ´åã«å®ç¾©ããï¼ 4659 4660 (8-5-8) TASK_LOOPï¼ãªãã·ã§ã³ï¼ 4661 4662 ãµã³ãã«ããã°ã©ã ã«ããã¦ï¼ããã»ããµã®é度ãè¨æ¸¬ããã«ï¼ã¿ã¹ã¯å 4663 ã§ã® 4664 ã«ã¼ãåæ°ãåºå®ããå ´åã«ï¼ã«ã¼ãåæ°ãå®ç¾©ãããã¯ãï¼ã«ã¼ãå 4665 ¨ä½ã®å® 4666 è¡æéã0.4ç§ç¨åº¦ã«ãªããããªã«ã¼ãåæ°ãï¼ãã®ãã¯ãã«å®ç¾©ããï¼ 4667 4668 8.6 å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã®ã¿ã¼ã²ããä¾åå®ç¾© 4669 4670 å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã®è¨å®ãã¿ã¼ã²ããä¾åé¨ã§å¤æ´ããå ´åã«ï¼ã¿ã¼ 4671 ã²ããä¾åé¨ã§æä¾ãã¹ãå®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã®ããã®å®ç¾©ã¯æ¬¡ã®é 4672 ãã§ããï¼ãããã®å®ç¾©ã¯ï¼target_test.hï¼ã¾ãã¯ããããã¤ã³ã¯ã«ã¼ããã 4673 ããã¡ã¤ã«ï¼ã«å«ããï¼ãã®ä»ã«ï¼ã¿ã¼ã²ããä¾åã§å¿ 4674 è¦ãªåæåå¦çããã 4675 å ´åã«ãï¼ã¿ã¼ã²ããä¾åé¨ã«å«ããï¼ 4676 4677 (8-6-1) HISTTIMï¼ãªãã·ã§ã³ï¼ 4678 4679 å®è¡æéè¨æ¸¬ç¨ã®æå»ã®ãã¼ã¿åãå®ç¾©ãããã¯ãï¼å®ç¾©ããªãå ´åã®ããã© 4680 ã«ãã¯SYSUTMï¼ 4681 4682 (8-6-2) void HIST_GET_TIM(HISTTIM *p_time)ï¼ãªãã·ã§ã³ï¼ 4683 4684 å®è¡æéè¨æ¸¬ç¨ã®ç¾å¨æå»ã*p_timeã«åå¾ããå¦çã«å®ç¾©ãããã¯ãï¼å®ç¾©ã 4685 ãªãå ´åã®ããã©ã«ãã¯get_utmï¼ 4686 4687 (8-6-3) uint_t HIST_CONV_TIM(HISTTIM time)ï¼ãªãã·ã§ã³ï¼ 4688 4689 å®è¡æéè¨æ¸¬ç¨ã®æå»ã®å·®ï¼æéï¼ãï¼å®è¡æéåå¸éè¨ç¨ã®å¤ã«å¤æããå¦ 4690 çã«å®ç¾©ãããã¯ãï¼æå»ãéå»ã«æ»ã£ãããªã¼ãããã¼ãããã®åºå¥ãã¤ã 4691 ãªãå ´åã«ã¯ï¼æä¸ä½ãããã1ã®å¤ï¼INT_MAXããã大ããå¤ï¼ãè¿ãï¼å®ç¾© 4692 ããªãå ´åã®ããã©ã«ãã¯ï¼timeãuint_tã«ãã£ã¹ãããå¦çï¼ 4693 4694 (8-6-4) void HIST_BM_HOOK(void)ï¼ãªãã·ã§ã³ï¼ 4695 4696 å®è¡æéè¨æ¸¬ç´åã«è¡ãã¹ãå¦çã«å®ç¾©ãããã¯ãï¼ãã£ãã·ã¥ã®ãã¼ã¸ãã㣠4697 ã«ï¼ã¡ã¢ãªããªã¢å¦ççãè¡ãããå ´åã«ã¯ï¼ãã®ãã¯ãã«å®ç¾©ããï¼å®ç¾©ã 4698 ãªãå ´åã®ããã©ã«ãã¯ï¼ç©ºã®å¦çã«ãªãï¼ 4699 4700 4701 ï¼ï¼ãã®ä» 4702 4703 9.1 ããã¥ã¡ã³ã 4704 4705 ã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ãï¼target_user.txtã«ç¨æããï¼ã 4706 ãã»ããµã»ãããã»éçºç°å¢ä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ãåãåãã¦ãã 4707 ããï¼ãã¡ã¤ã«ã大ãããªãå ´åã«ã¯è¤æ°ã®ãã¡ã¤ã«ã«åå²ãã¦ãããï¼ãã® 4708 å ´åã«ã¯ï¼target_user.txtä¸ã«ãããã®ãã¡ã¤ã«åãè¨è¿°ãããã¨ï¼ 4709 4710 ã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«ã¯ï¼å°ãªãã¨ã次ã®ãããªå 4711 容ã 4712 è¨è¿°ãããã¨ãæã¾ããï¼ 4713 4714 (1) 対å¿ãã¦ããã¿ã¼ã²ããã·ã¹ãã ã®ç¨®é¡ã»æ§æï¼ãã¼ã¸ã§ã³çªå· 4715 ã»ã¿ã¼ã²ãããã¼ãã¦ã§ã¢ï¼ãã¼ãçï¼ã®å称ã¨å¯¾å¿ãã¦ããæ§æ 4716 ã»ã¿ã¼ã²ããç¥ç§° 4717 ã»ã¿ã¼ã²ããéä¾åé¨ã®ãã¼ã¸ã§ã³çªå· 4718 ã»ããã»ããµï¼ãããï¼éçºç°å¢ä¾åé¨ã®æ§æã¨ãã¼ã¸ã§ã³çªå· 4719 ã»ä½¿ç¨ããPDICã¨ãã¼ã¸ã§ã³çªå· 4720 4721 (2) 使ç¨ããéçºç°å¢ã¨åä½æ¤è¨¼ããæ¡ä»¶ï¼ãã¼ã¸ã§ã³ï¼ãªãã·ã§ã³çï¼ 4722 ã»è¨èªå¦çç³»ï¼ã³ã³ãã¤ã©ï¼ã¢ã»ã³ãã©ï¼ãªã³ã«çï¼ 4723 ã»ãããã°ç°å¢ 4724 4725 (3) ã¿ã¼ã²ããå®ç¾©äºé 4726 ã®è¦å® 4727 4728 (3-1) ãã¼ã¿åã«é¢ããè¦å® 4729 ã»int_tåï¼long_tåã®ãµã¤ãº 4730 ã»charåï¼int_least8_tåï¼void *åï¼intptr_tåã®ãµã¤ãº 4731 ã»int8_tåï¼uint8_tåï¼int64_tåï¼uint64_tåï¼int128_tåï¼ 4732 ãuint128_tåï¼float32_tåï¼double64_tåã®ãµãã¼ãã®æç¡ 4733 4734 (3-2) å²è¾¼ã¿å¦çã«é¢ããè¦å® 4735 ã»å²è¾¼ã¿ãã³ãã©çªå·ã¨å²è¾¼ã¿çªå·ã®å²å½ã¦ï¼ä¸¡è 4736 ã®å¯¾å¿ 4737 ã»å²è¾¼ã¿åªå 4738 度ã®æ®µéæ°ï¼TMIN_INTPRIã®å¤ï¼ 4739 ã»dis_intã¨ena_intã®ãµãã¼ãã®æç¡ï¼ãã®å¶éäºé 4740 4741 ã»CFG_INTã®å¶éäºé 4742 ã¨æ¡å¼µï¼ã¿ã¼ã²ããå®ç¾©ã§ä½¿ç¨ã§ããå²è¾¼ã¿å±æ§ï¼ 4743 ã»TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ããã®ãã®ä»ã®é¸è± 4744 ã»ããã©ã«ãã®å²è¾¼ã¿ãã³ãã©ï¼default_int_handlerï¼ã®æç¡ã¨å¦çå 4745 容 4746 4747 (3-3) ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã«é¢ããè¦å® 4748 ã»TMIN_INTPRIã¯åºå®ãè¨å®ã§ãããï¼ãã®è¨å®æ¹æ³ 4749 ã»NMI以å¤ã«ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãè¨ãããï¼è¨ããããããã«ãããï¼ 4750 ã»ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®è¨å®æ¹æ³ 4751 ã»ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã«å¯¾ãã¦DEF_INHï¼CFG_INTããµãã¼ãããã 4752 ã»ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©ãå®è¡éå§ãããæã®ã·ã¹ãã ç¶æ 4753 㨠4754 ãã³ã³ããã¹ã 4755 ã»å²è¾¼ã¿ãã³ãã©ã®çµäºæã«è¡ãããå¦ç 4756 ã»ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©ã®è¨è¿°æ¹æ³ 4757 ã»ã«ã¼ãã«å 4758 ã®å²è¾¼ã¿åºå 4759 ¥å£å¦çã§èµ·ããå¯è½æ§ã®ããCPUä¾å¤ 4760 4761 (3-4) CPUä¾å¤å¦çã«é¢ããè¦å® 4762 ã»CPUä¾å¤ãã³ãã©çªå·ã®å²å½ã¦ 4763 ã»å²è¾¼ã¿åªå 4764 度ãã¹ã¯ãTMIN_INTPRIã¨åãããããããé«ãå¤ã«è¨å®ã㦠4765 ãããç¶æ 4766 ã§çºçããCPUä¾å¤ãï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã¨æ±ãã 4767 ã»ã«ã¼ãã«å 4768 ã®CPUä¾å¤åºå 4769 ¥å£å¦çã§èµ·ããå¯è½æ§ã®ããCPUä¾å¤ 4770 ã»ããã©ã«ãã®CPUä¾å¤ãã³ãã©ï¼default_exc_handlerï¼ã®æç¡ã¨å¦çå 4771 容 4772 4773 (3-5) æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®åç 4774 §ã«é¢ããè¦å® 4775 ã»get_utmã®ãµãã¼ãã®æç¡ï¼ãã®å¶éäºé 4776 4777 4778 (3-6) æ¡å¼µããã±ã¼ã¸ã«é¢ããè¦å® 4779 ã»åæ¡å¼µããã±ã¼ã¸ã®ãµãã¼ãã®æç¡ 4780 - ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ 4781 - ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ 4782 - ã¿ã¹ã¯åªå 4783 度æ¡å¼µããã±ã¼ã¸ 4784 - å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ 4785 - åççææ©è½æ¡å¼µããã±ã¼ã¸ 4786 ã»ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ããµãã¼ãããå ´åã«ï¼ããã»ã 4787 ããµæéã«æå®ã§ããå¤ã®æ大å¤ï¼TMAX_OVRTIMã®å¤ï¼ 4788 ã»åççææ©è½æ¡å¼µããã±ã¼ã¸ããµãã¼ãããå ´åã«ï¼åçã¡ã¢ãªç®¡çã® 4789 ãæ¹æ³ 4790 4791 (3-7) ãã®ä» 4792 ã»ãã®ä»ã®å¶éäºé 4793 4794 ã»ãã®ä»ã®æ¡å¼µæ©è½ 4795 4796 (4) ã«ã¼ãã«ã®èµ·åï¼çµäºå¦çã«é¢ããæ 4797 å ± 4798 ã»ç¨æãã¦ããã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®å¦çå 4799 容 4800 ã»ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ããhardware_init_hookãå¼ã³åºãã¦ããå ´ 4801 ãåã«ã¯ï¼hardware_init_hookãã¢ããªã±ã¼ã·ã§ã³ã§ç¨æããå ´åã®ä½æ 4802 ãæ¹æ³ãå¶éäºé 4803 ãªã© 4804 ã»ã«ã¼ãã«ãçµäºããå¾ã®æ¯èã 4805 4806 (5) ã¡ã¢ãªããã 4807 ã»ããã©ã«ãã®ã¡ã¢ãªãããï¼ãã®å¤æ´æ¹æ³ 4808 4809 (6) ã¿ã¤ããã©ã¤ãé¢é£ã®æ 4810 å ± 4811 ã»ã¿ã¤ã ãã£ãã¯ã®å¨æï¼ãã®å¤æ´æ¹æ³ 4812 ã»ä½¿ç¨ãããªã½ã¼ã¹ï¼ã¿ã¤ãï¼ 4813 ã»ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿åªå 4814 度ã®å¤æ´æ¹æ³ 4815 ã»ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿åªå 4816 度ã®å¤æ´æ¹æ³ 4817 4818 (7) ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®æ 4819 å ± 4820 ã»ä½¿ç¨ãããªã½ã¼ã¹ï¼SIOã³ã³ããã¼ã©ï¼ 4821 ã»éä¿¡ãã©ã¡ã¼ã¿ï¼ãã¼ã¬ã¼ãï¼ãããæ°ï¼ããªãã£ã®æç¡ï¼ã¹ããããããï¼ 4822 4823 (8) ã·ã¹ãã ãã°æ©è½ã®æ 4824 å ± 4825 ã»ã·ã¹ãã ãã°ã®ä½ã¬ãã«åºåã®å®ç¾æ¹æ³ 4826 ã»éä¿¡ãã©ã¡ã¼ã¿ï¼ãã¼ã¬ã¼ãï¼ãããæ°ï¼ããªãã£ã®æç¡ï¼ã¹ããããããï¼ 4827 4828 (9) ã·ã¹ãã æ§ç¯æé 4829 4830 (10) ã¿ã¼ã²ããã·ã¹ãã åºæã®æ³¨æäºé 4831 4832 ã»ã¿ã¹ã¯ã³ã³ããã¹ãã«å«ã¾ããã¬ã¸ã¹ã¿ï¼å«ã¾ããªãã¬ã¸ã¹ã¿ 4833 4834 (11) é¡ä¼¼ã®ã¿ã¼ã²ããã«ãã¼ãã£ã³ã°ããéçºè 4835 åãã®åèæ 4836 å ± 4837 4838 (12) ãã£ã¬ã¯ããªæ§æã»ãã¡ã¤ã«æ§æ 4839 4840 (13) ãã¼ã¸ã§ã³å±¥æ´ 4841 4842 ã¾ãï¼å¿ 4843 è¦ã«å¿ãã¦ï¼ã¿ã¼ã²ããä¾åé¨ã®è¨è¨ã¡ã¢ãï¼target_design.txtã«ç¨ 4844 æããï¼ããã»ããµã»ãããã»éçºç°å¢ä¾åé¨ã«é¢ããè¨è¨ã¡ã¢ãåãåã㦠4845 ããããï¼ãã¡ã¤ã«ã大ãããªãå ´åã«ã¯è¤æ°ã®ãã¡ã¤ã«ã«åå²ãã¦ããããï¼ 4846 ãã®å ´åã«ã¯ï¼target_design.txtä¸ã«ãããã®ãã¡ã¤ã«åãè¨è¿°ãããã¨ï¼ 4847 4848 9.2 ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã« 4849 4850 ãªãªã¼ã¹ããã±ã¼ã¸ï¼åå¥ããã±ã¼ã¸ããã³ç°¡æããã±ã¼ã¸ï¼ãä½æãããã 4851 ã«ï¼ããã±ã¼ã¸ã«å«ãããã¡ã¤ã«ãè¨è¿°ããããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ãç¨æã 4852 ãï¼ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ã®å称ã¯ï¼åå¥ããã±ã¼ã¸ç¨ãMANIFESTï¼ç°¡æãã 4853 ã±ã¼ã¸ç¨ãE_PACKAGEã¨ããï¼ 4854 4855 ä¾ãã°ï¼arch/arm_gccãã£ã¬ã¯ããªã«ç½®ãããMANIFESTãã¡ã¤ã«ãç¨ãã¦åå¥ 4856 ããã±ã¼ã¸ãä½æããå ´åã«ã¯ï¼æ¬¡ã®ã³ãã³ããå®è¡ããï¼ 3709 ターゲットの名称に定義する. 3710 3711 (8-4-2) TARGET_COPYRIGHT(オプション) 3712 3713 カーネル起動メッセージに,ターゲット依存部の著作権表示を追加するための 3714 マクロ.デフォルトでは,ターゲット依存部の著作権表示を追加しない. 3715 3716 8.5 サンプルプログラムとテストプログラムのターゲット依存定義 3717 3718 ターゲット依存部で提供すべきサンプルプログラムおよびテストプログラムの 3719 ための定義は次の通りである.これらの定義は,target_test.h(またはそれら 3720 からインクルードされるファイル)に含める. 3721 3722 (8-5-1) STACK_SIZE(オプション) 3723 3724 サンプルプログラムおよびテストプログラムのタスクのスタックサイズを定義 3725 するマクロ.定義しない場合のデフォルト値は4096.デフォルト設定ではメモ 3726 リが不足する場合や,シミュレーション環境などで大きいスタック領域が必要 3727 な場合には,ターゲット依存部でこのマクロを設定するスタックサイズに定義 3728 する. 3729 3730 (8-5-2) CPUEXC1(オプション) 3731 3732 サンプルプログラムおよびテストプログラムで用いるCPU例外のCPU例外ハンド 3733 ラ番号を定義するマクロ.このマクロを定義しない場合,CPU例外ハンドラを使 3734 う部分がサンプルプログラムから除外される.CPU例外ハンドラのテストをする 3735 テストプログラムはコンパイルできない. 3736 3737 (8-5-3) RAISE_CPU_EXCEPTION(オプション) 3738 3739 CPUEXC1に定義したCPU例外を発生させるC言語のプログラムを定義するマクロ. 3740 CPUEXC1を定義した場合には必ず定義しなければならない. 3741 3742 (8-5-4) CANNOT_RETURN_CPUEXC(オプション) 3743 3744 ターゲットシステムの制約により,CPU例外ハンドラからリターンした後に,タ 3745 スクの実行を継続できない場合に定義するマクロ.このマクロを定義すると, 3746 CPU例外ハンドラのテストをするテストプログラムから,CPU例外ハンドラから 3747 リターンした後の処理が除外される.サンプルプログラムの該当部分は正しく 3748 動作しない. 3749 3750 (8-5-5) TASK_PORTID(オプション) 3751 3752 サンプルプログラムにおいて,コマンド文字を読み込むシリアルポート番号を 3753 定義するマクロ.定義しない場合のデフォルト値は1. 3754 3755 (8-5-6) LOOP_REF(オプション) 3756 3757 サンプルプログラムにおいて,プロセッサの速度を計測するためのループ回数 3758 を定義するマクロ.定義しない場合のデフォルト値は1000000.デフォルト設定 3759 では,値が大き過ぎて計測に時間がかかりすぎる場合や,値が小さ過ぎて計測 3760 結果が安定しない場合に,ターゲット依存部でこのマクロを設定するループ回 3761 数に定義する. 3762 3763 (8-5-7) MEASURE_TWICE(オプション) 3764 3765 サンプルプログラムにおいて,プロセッサの速度を2度計測する場合に定義する 3766 マクロ.シミュレーション環境などプロセッサの速度が変動する環境で,1度の 3767 計測では計測結果が安定しない場合に定義する. 3768 3769 (8-5-8) TASK_LOOP(オプション) 3770 3771 サンプルプログラムにおいて,プロセッサの速度を計測せずに,タスク内での 3772 ループ回数を固定する場合に,ループ回数を定義するマクロ.ループ全体の実 3773 行時間が0.4秒程度になるようなループ回数を,このマクロに定義する. 3774 3775 8.6 実行時間分布集計モジュールのターゲット依存定義 3776 3777 実行時間分布集計モジュールの設定をターゲット依存部で変更する場合に,ター 3778 ゲット依存部で提供すべき実行時間分布集計モジュールのための定義は次の通 3779 りである.これらの定義は,target_test.h(またはそこからインクルードされ 3780 るファイル)に含める.この他に,ターゲット依存で必要な初期化処理がある 3781 場合にも,ターゲット依存部に含める. 3782 3783 (8-6-1) HISTTIM(オプション) 3784 3785 実行時間計測用の時刻のデータ型を定義するマクロ.定義しない場合のデフォ 3786 ルトはSYSUTM. 3787 3788 (8-6-2) void HIST_GET_TIM(HISTTIM *p_time)(オプション) 3789 3790 実行時間計測用の現在時刻を*p_timeに取得する処理に定義するマクロ.定義し 3791 ない場合のデフォルトはget_utm. 3792 3793 (8-6-3) uint_t HIST_CONV_TIM(HISTTIM time)(オプション) 3794 3795 実行時間計測用の時刻の差(時間)を,実行時間分布集計用の値に変換する処 3796 理に定義するマクロ.時刻が過去に戻ったかオーバフローしたかの区別がつか 3797 ない場合には,最上位ビットが1の値(INT_MAXよりも大きい値)を返す.定義 3798 しない場合のデフォルトは,timeをuint_tにキャストする処理. 3799 3800 (8-6-4) void HIST_BM_HOOK(void)(オプション) 3801 3802 実行時間計測直前に行うべき処理に定義するマクロ.キャッシュのパージやフィ 3803 ル,メモリバリア処理等を行いたい場合には,このマクロに定義する.定義し 3804 ない場合のデフォルトは,空の処理になる. 3805 3806 3807 9.その他 3808 3809 9.1 ドキュメント 3810 3811 ターゲット依存部のユーザーズマニュアルを,target_user.txtに用意する.プ 3812 ロセッサ・チップ・開発環境依存部のユーザーズマニュアルを切り分けてもよ 3813 いし,ファイルが大きくなる場合には複数のファイルに分割してよいが,その 3814 場合には,target_user.txt中にそれらのファイル名を記述すること. 3815 3816 ターゲット依存部のユーザーズマニュアルには,少なくとも次のような内容を 3817 記述することが望ましい. 3818 3819 (1) 対応しているターゲットシステムの種類・構成,バージョン番号 3820 ・ターゲットハードウェア(ボード等)の名称と対応している構成 3821 ・ターゲット略称 3822 ・ターゲット非依存部のバージョン番号 3823 ・プロセッサ,チップ,開発環境依存部の構成とバージョン番号 3824 ・使用するPDICとバージョン番号 3825 3826 (2) 使用する開発環境と動作検証した条件(バージョン,オプション等) 3827 ・言語処理系(コンパイラ,アセンブラ,リンカ等) 3828 ・デバッグ環境 3829 3830 (3) ターゲット定義事項の規定 3831 3832 (3-1) データ型に関する規定 3833 ・int_t型,long_t型のサイズ 3834 ・char型,int_least8_t型,void *型,intptr_t型のサイズ 3835 ・int8_t型,uint8_t型,int64_t型,uint64_t型,int128_t型, 3836 uint128_t型,float32_t型,double64_t型のサポートの有無 3837 3838 (3-2) 割込み処理に関する規定 3839 ・割込みハンドラ番号と割込み番号の割当て,両者の対応 3840 ・割込み優先度の段階数(TMIN_INTPRIの値) 3841 ・dis_intとena_intのサポートの有無,その制限事項 3842 ・CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性) 3843 ・TOPPERS標準割込み処理モデルからのその他の逸脱 3844 ・デフォルトの割込みハンドラ(default_int_handler)の有無と処理内容 3845 3846 (3-3) カーネル管理外の割込みに関する規定 3847 ・TMIN_INTPRIは固定か設定できるか,その設定方法 3848 ・NMI以外にカーネル管理外の割込みを設けるか(設けられるようにするか) 3849 ・カーネル管理外の割込みの設定方法 3850 ・カーネル管理外の割込みに対してDEF_INH,CFG_INTをサポートするか 3851 ・カーネル管理外の割込みハンドラが実行開始される時のシステム状態と 3852 コンテキスト 3853 ・割込みハンドラの終了時に行われる処理 3854 ・カーネル管理外の割込みハンドラの記述方法 3855 ・カーネル内の割込み出入口処理で起こる可能性のあるCPU例外 3856 3857 (3-4) CPU例外処理に関する規定 3858 ・CPU例外ハンドラ番号の割当て 3859 ・割込み優先度マスクをTMIN_INTPRIと同じかそれよりも高い値に設定して 3860 いる状態で発生したCPU例外を,カーネル管理外のCPU例外と扱うか 3861 ・カーネル内のCPU例外出入口処理で起こる可能性のあるCPU例外 3862 ・デフォルトのCPU例外ハンドラ(default_exc_handler)の有無と処理内容 3863 3864 (3-5) 性能評価用システム時刻の参照に関する規定 3865 ・get_utmのサポートの有無,その制限事項 3866 3867 (3-6) 拡張パッケージに関する規定 3868 ・各拡張パッケージのサポートの有無 3869 - ミューテックス機能拡張パッケージ 3870 - オーバランハンドラ機能拡張パッケージ 3871 - タスク優先度拡張パッケージ 3872 - 制約タスク拡張パッケージ 3873 - 動的生成機能拡張パッケージ 3874 ・オーバランハンドラ機能拡張パッケージをサポートする場合に,プロセッ 3875 サ時間に指定できる値の最大値(TMAX_OVRTIMの値) 3876 ・動的生成機能拡張パッケージをサポートする場合に,動的メモリ管理の 3877 方法 3878 3879 (3-7) その他 3880 ・その他の制限事項 3881 ・その他の拡張機能 3882 3883 (4) カーネルの起動/終了処理に関する情報 3884 ・用意しているスタートアップモジュールの処理内容 3885 ・スタートアップモジュールからhardware_init_hookを呼び出している場 3886 合には,hardware_init_hookをアプリケーションで用意する場合の作成 3887 方法や制限事項など 3888 ・カーネルを終了した後の振舞い 3889 3890 (5) メモリマップ 3891 ・デフォルトのメモリマップ,その変更方法 3892 3893 (6) タイマドライバ関連の情報 3894 ・タイムティックの周期,その変更方法 3895 ・使用するリソース(タイマ) 3896 ・タイマ割込みの割込み優先度の変更方法 3897 ・オーバランタイマ割込みの割込み優先度の変更方法 3898 3899 (7) シリアルインタフェースドライバの情報 3900 ・使用するリソース(SIOコントローラ) 3901 ・通信パラメータ(ボーレート,ビット数,パリティの有無,ストップビット) 3902 3903 (8) システムログ機能の情報 3904 ・システムログの低レベル出力の実現方法 3905 ・通信パラメータ(ボーレート,ビット数,パリティの有無,ストップビット) 3906 3907 (9) システム構築手順 3908 3909 (10) ターゲットシステム固有の注意事項 3910 ・タスクコンテキストに含まれるレジスタ,含まれないレジスタ 3911 3912 (11) 類似のターゲットにポーティングする開発者向けの参考情報 3913 3914 (12) ディレクトリ構成・ファイル構成 3915 3916 (13) バージョン履歴 3917 3918 また,必要に応じて,ターゲット依存部の設計メモを,target_design.txtに用 3919 意する.プロセッサ・チップ・開発環境依存部に関する設計メモを切り分けて 3920 もよいし,ファイルが大きくなる場合には複数のファイルに分割してもよいが, 3921 その場合には,target_design.txt中にそれらのファイル名を記述すること. 3922 3923 9.2 パッケージ記述ファイル 3924 3925 リリースパッケージ(個別パッケージおよび簡易パッケージ)を作成するため 3926 に,パッケージに含めるファイルを記述したパッケージ記述ファイルを用意す 3927 る.パッケージ記述ファイルの名称は,個別パッケージ用をMANIFEST,簡易パッ 3928 ケージ用をE_PACKAGEとする. 3929 3930 例えば,arch/arm_gccディレクトリに置かれたMANIFESTファイルを用いて個別 3931 パッケージを作成する場合には,次のコマンドを実行する. 4857 3932 4858 3933 % utils/makerelease arch/arm_gcc/MANIFEST 4859 3934 4860 ãã®ã³ãã³ãã«ããï¼RELEASE/asp_arch_arm_gcc-<ãã¼ã¸ã§ã³çªå·>.tar.gzã 4861 ä½æãããï¼ã¾ãï¼target/at91skyeye_gccãã£ã¬ã¯ããªã«ç½®ãããE_PACKAGE4862 ãã¡ã¤ã«ãç¨ãã¦ç°¡æããã±ã¼ã¸ãä½æããå ´åã«ã¯ï¼æ¬¡ã®ã³ãã³ããå®è¡ã 4863 ãï¼ 3935 このコマンドにより,RELEASE/asp_arch_arm_gcc-<バージョン番号>.tar.gzが 3936 作成される.また,target/at91skyeye_gccディレクトリに置かれたE_PACKAGE 3937 ファイルを用いて簡易パッケージを作成する場合には,次のコマンドを実行す 3938 る. 4864 3939 4865 3940 % utils/makerelease target/at91skyeye_gcc/E_PACKAGE 4866 3941 4867 ãã®ã³ãã³ãã«ããï¼RELEASE/asp_at91skyeye_gcc-<ãã¼ã¸ã§ã³çªå·>.tar.gz 4868 ãä½æãããï¼RELEASEãã£ã¬ã¯ããªããªãå ´åã«ã¯ï¼ãã£ã¬ã¯ããªãä½ãã 4869 ãï¼ï¼ 4870 4871 ãªãï¼makereleaseã¦ã¼ãã£ãªãã£ã¯ï¼ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãç½®ãã 4872 ããã£ã¬ã¯ããªãï¼aspã¨ããå称ã§ãããã¨ãä»®å®ãã¦ããï¼ç°ãªãå称ã®å ´ 4873 åã§ãããã±ã¼ã¸ã¯ä½æã§ãããï¼ããã±ã¼ã¸ãå±éããæã«å±éãããã㣠4874 ã¬ã¯ããªãaspã§ãªããªãï¼ï¼ã¾ãï¼æ¨æºã®tarã³ãã³ããGNU tarã§ããã㨠4875 ï¼æ£ç¢ºã«ã¯ï¼zãªãã·ã§ã³ã«å¯¾å¿ãã¦ãããã¨ï¼ãæ³å®ãã¦ããï¼ 4876 4877 ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ã«ã¯ï¼ããã±ã¼ã¸ã«å«ãããã¡ã¤ã«åãï¼ããã±ã¼ã¸ 4878 è¨è¿°ãã¡ã¤ã«ãç½®ããããã£ã¬ã¯ããªããã®ç¸å¯¾ãã¹åã§ï¼1è¡ã«1ã¤ãã¤è¨è¿° 4879 ããï¼ã¾ãï¼å¿ 4880 è¦ã«å¿ãã¦ï¼ä»¥ä¸ã®ãã£ã¬ã¯ãã£ããå«ããï¼ 4881 4882 (a) E_PACKAGE <ç°¡æããã±ã¼ã¸å> 4883 4884 ç°¡æããã±ã¼ã¸åãæå®ããï¼ç°¡æããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ï¼E_PACKAGEï¼ã®å 4885 4886 é ã«è¨è¿°ããï¼ç°¡æããã±ã¼ã¸åã¯ï¼asp_<ã¿ã¼ã²ããç¥ç§°>ã¨ããï¼ä¾ãã°ï¼ 4887 ã¿ã¼ã²ããç¥ç§°ãat91skyeye_gccã®å ´åã«ã¯ï¼asp_at91skyeye_gccã¨ãªãï¼å 4888 å¥ããã±ã¼ã¸ã¨åºå¥ããããã«ï¼ç°¡æããã±ã¼ã¸ã®ãã¡ã¤ã«åã«ã¯"target"ã 4889 å«ããªãï¼ 4890 4891 (b) PACKAGE <åå¥ããã±ã¼ã¸å> 4892 4893 åå¥ããã±ã¼ã¸åãæå®ããï¼åå¥ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ï¼MANIFESTï¼ã®å 4894 4895 é ã«è¨è¿°ããï¼ã¾ãï¼ããããã¤ã³ã¯ã«ã¼ããããåãã¡ã¤ã«ã®å 4896 é ã«ãè¨è¿° 4897 ãï¼ãããã¤ã³ã¯ã«ã¼ããã¦ããåå¥ããã±ã¼ã¸åãæå®ããï¼ã¿ã¼ã²ããä¾ 4898 åé¨ã®åå¥ããã±ã¼ã¸åã¯ï¼åå¥ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ãç½®ããããã£ã¬ã¯ 4899 ããªã®ç¸å¯¾ãã¹ä¸ã®"/"ã"_"ã«ç½®ãæããæååãï¼"asp_"ã®å¾ã«ã¤ãªããã 4900 ã®ã¨ããï¼ä¾ãã°ï¼åå¥ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ãarch/arm_gcc/MANIFESTã®å ´ 4901 åã«ã¯ï¼asp_arch_arm_gccã¨ãªãï¼ 4902 4903 (c) VERSION <ãã¼ã¸ã§ã³çªå·> 4904 4905 ããã±ã¼ã¸ã®ãã¼ã¸ã§ã³çªå·ãæå®ããï¼ç°¡æããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ããã³ 4906 åå¥ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ã®ä¸ã«è¨è¿°ããï¼ç°¡æããã±ã¼ã¸ã«ããã¦ï¼ãã¼ 4907 ã¸ã§ã³çªå·ãããã±ã¼ã¸åããæ¥ä»ã¨ããå ´åã«ã¯ï¼ããã±ã¼ã¸çªå·ã®ä»£ãã 4908 ã«%dateã¨è¨è¿°ããï¼ 4909 4910 ãã¼ã¸ã§ã³çªå·ã®ä»ä¸æ¹æ³ã«ã¤ãã¦ã¯ï¼ãTOPPERS/ASPã«ã¼ãã« ã¦ã¼ã¶ã¼ãºã 4911 ãã¥ã¢ã«ãã®ã2.2 ç°¡æããã±ã¼ã¸ãããã³ã2.3 åå¥ããã±ã¼ã¸ãã®ç¯ãå 4912 ç 4913 §ãããã¨ï¼ 4914 4915 (d) INCLUDE <ãã¡ã¤ã«å> 4916 4917 å¥ã®ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããï¼ç°¡æããã±ã¼ã¸è¨è¿°ãã¡ã¤ 4918 ã«ããã¯ï¼åå¥ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ã®ã¿ãã¤ã³ã¯ã«ã¼ãããã®ãååã¨ã 4919 ãï¼åå¥ããã±ã¼ã¸è¨è¿°ãã¡ã¤ã«ããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ä¸ã§æå®ã 4920 ããåå¥ããã±ã¼ã¸åã¯ï¼ãã¹ã¦ä¸è´ãã¦ããªããã°ãªããªãï¼ 4921 4922 4923 ï¼ï¼ï¼ãªãã¡ã¬ã³ã¹ 4924 4925 10.1 ã¿ã¼ã²ããä¾åé¨ã®ãã¡ã¤ã«ä¸è¦§ 4926 4927 æ¨æºçãªã¿ã¼ã²ããä¾åé¨ã®ãã¡ã¤ã«æ§æã¯æ¬¡ã®éãã§ããï¼ 4928 4929 Makefile.target Makefileã®ã¿ã¼ã²ããä¾åé¨ï¼ï¼ç« ï¼ï¼ 4930 target_offset.tf ãªãã»ãããã¡ã¤ã«çæç¨ãã³ãã¬ã¼ããã¡ã¤ã«ï¼2.5.1ç¯ï¼ 4931 ãªãã·ã§ã³ï¼ 4932 4933 target_stddef.h TOPPERSå 4934 ±éå®ç¾©ï¼t_stddef.hï¼ã®ã¿ã¼ã²ããä¾åé¨ï¼ï¼ 4935 ç« ï¼ï¼ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ãã«ã®ä¸¡æ¹ããã¤ã³ã¯ã«ã¼ 4936 ããããï¼ 4937 target_sil.h ã·ã¹ãã ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ã¤ï¼sil.hï¼ã®ã¿ã¼ã²ããä¾ 4938 åé¨ï¼ï¼ç« ï¼ï¼ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ãã«ã®ä¸¡æ¹ãã 4939 ã¤ã³ã¯ã«ã¼ããããï¼ 4940 target_kernel.h ã«ã¼ãã«APIï¼kernel.hï¼ã®ã¿ã¼ã²ããä¾åé¨ï¼ï¼ç« ï¼ï¼ 4941 ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ãã«ã®ä¸¡æ¹ããã¤ã³ã¯ã«ã¼ãã 4942 ããï¼ 4943 4944 target_config.h ã«ã¼ãã«å®è£ 4945 ã®ã¿ã¼ã²ããä¾åé¨ã®ããããã¡ã¤ã«ï¼ï¼ 4946 ç« ï¼ï¼ã«ã¼ãã«ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ 4947 target_config.c ã«ã¼ãã«å®è£ 4948 ã®ã¿ã¼ã²ããä¾åé¨ã®Cè¨èªã§è¨è¿°ããã 4949 é¨åï¼ï¼ç« ï¼ãªãã·ã§ã³ï¼ï¼ 4950 target_support.S ã«ã¼ãã«å®è£ 4951 ã®ã¿ã¼ã²ããä¾åé¨ã®ã¢ã»ã³ããªè¨èªã§è¨ 4952 è¿°ãããé¨åï¼ï¼ç« ï¼ãªãã·ã§ã³ï¼ï¼ 4953 target_rename.def ã«ã¼ãã«å®è£ 4954 ã®ã¿ã¼ã²ããä¾åé¨ã®ããã®ãªãã¼ã è¨è¿° 4955 ï¼6.12ç¯ï¼ï¼ 4956 target_rename.h target_rename.defããçæããããã¡ã¤ã«ï¼6.12ç¯ï¼ï¼ 4957 target_unrename.h target_rename.defããçæããããã¡ã¤ã«ï¼6.12ç¯ï¼ï¼ 4958 target_timer.cfg ã¿ã¤ããã©ã¤ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ 4959 ã¤ã«ï¼6.13ç¯ï¼ï¼ 4960 target_timer.h ã¿ã¤ããã©ã¤ãã®ããããã¡ã¤ã«ï¼6.13ç¯ï¼ï¼ã«ã¼ãã« 4961 ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ 4962 target_timer.c ã¿ã¤ããã©ã¤ãã®å®è£ 4963 ãã¡ã¤ã«ï¼6.13ç¯ï¼ãªãã·ã§ã³ï¼ï¼ 4964 ã·ã¹ãã ç¥ç§°.h ã¿ã¼ã²ããã®ãã¼ãã¦ã§ã¢è³æºï¼å²è¾¼ã¿ãã³ãã©çªå·ã 4965 CPUä¾å¤ãã³ãã©çªå·ï¼ããã¤ã¹ã¬ã¸ã¹ã¿ã®çªå°ãªã©ï¼ã® 4966 å®ç¾©ãå«ãããããã¡ã¤ã«ï¼ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ã 4967 ã«ã®ä¸¡æ¹ããã¤ã³ã¯ã«ã¼ããããï¼ï¼ç« ï¼ãªãã·ã§ã³ï¼ï¼ 4968 4969 target_def.csv ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®å¤åå¾ã·ã³ãã«ãã¼ãã«ã®ã¿ã¼ã²ã 4970 ãä¾åé¨ï¼ï¼ç« ï¼ãªãã·ã§ã³ï¼ï¼ 4971 target.tf ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã® 4972 ã¿ã¼ã²ããä¾åé¨ï¼7.2ç¯ï¼ï¼ 4973 target_check.tf ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ï¼7.3 4974 ç¯ï¼ï¼ 4975 target_cfg1_out.h cfg1_out.cã®ãªã³ã¯ã«å¿ 4976 è¦ãªã¹ã¿ãã®å®ç¾©ãã¡ã¤ã«ï¼7.4 4977 ç¯ï¼ï¼ 4978 4979 target_syssvc.h ã·ã¹ãã ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾åå®ç¾©ï¼8.0ç¯ï¼ï¼ 4980 target_serial.cfg ã·ãªã¢ã«ãã©ã¤ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ 4981 ã¤ã«ï¼8.3ç¯ï¼ï¼ 4982 target_serial.h ã·ãªã¢ã«ãã©ã¤ãã®ããããã¡ã¤ã«ï¼8.3ç¯ï¼ï¼ã·ãªã¢ã« 4983 ãã©ã¤ãã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ 4984 target_serial.c ã·ãªã¢ã«ãã©ã¤ãã®å®è£ 4985 ãã¡ã¤ã«ï¼8.3ç¯ï¼ãªãã·ã§ã³ï¼ï¼ 4986 target_test.h ãã¹ãããã°ã©ã ã®ã¿ã¼ã²ããä¾åå®ç¾©ï¼8.4ç¯ï¼ï¼ 4987 4988 target_user.txt ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ï¼9.1ç¯ï¼ 4989 target_design.txt è¨è¨ã¡ã¢ï¼9.1ç¯ï¼ãªãã·ã§ã³ï¼ 4990 MANIFEST åå¥ããã±ã¼ã¸ã«å«ãããã¡ã¤ã«ã®ãªã¹ãï¼9.2ç¯ï¼ãªã 4991 ã·ã§ã³ï¼ 4992 E_PACKAGE ç°¡æããã±ã¼ã¸ã«å«ãããã¡ã¤ã«ã®ãªã¹ãï¼9.2ç¯ï¼ãªã 4993 ã·ã§ã³ï¼ 4994 4995 ä»¥ä¸ 3942 このコマンドにより,RELEASE/asp_at91skyeye_gcc-<バージョン番号>.tar.gz 3943 が作成される(RELEASEディレクトリがない場合には,ディレクトリが作られ 3944 る). 3945 3946 なお,makereleaseユーティリティは,ASPカーネルのソースファイルが置かれ 3947 たディレクトリが,aspという名称であることを仮定している(異なる名称の場 3948 合でもパッケージは作成できるが,パッケージを展開した時に展開されるディ 3949 レクトリがaspでなくなる).また,標準のtarコマンドがGNU tarであること 3950 (正確には,zオプションに対応していること)を想定している. 3951 3952 パッケージ記述ファイルには,パッケージに含めるファイル名を,パッケージ 3953 記述ファイルが置かれたディレクトリからの相対パス名で,1行に1つずつ記述 3954 する.また,必要に応じて,以下のディレクティブを含める. 3955 3956 (a) E_PACKAGE <簡易パッケージ名> 3957 3958 簡易パッケージ名を指定する.簡易パッケージ記述ファイル(E_PACKAGE)の先 3959 頭に記述する.簡易パッケージ名は,asp_<ターゲット略称>とする.例えば, 3960 ターゲット略称がat91skyeye_gccの場合には,asp_at91skyeye_gccとなる.個 3961 別パッケージと区別するために,簡易パッケージのファイル名には"target"を 3962 含めない. 3963 3964 (b) PACKAGE <個別パッケージ名> 3965 3966 個別パッケージ名を指定する.個別パッケージ記述ファイル(MANIFEST)の先 3967 頭に記述する.また,そこからインクルードされる各ファイルの先頭にも記述 3968 し,それをインクルードしている個別パッケージ名を指定する.ターゲット依 3969 存部の個別パッケージ名は,個別パッケージ記述ファイルが置かれたディレク 3970 トリの相対パス中の"/"を"_"に置き換えた文字列を,"asp_"の後につなげたも 3971 のとする.例えば,個別パッケージ記述ファイルがarch/arm_gcc/MANIFESTの場 3972 合には,asp_arch_arm_gccとなる. 3973 3974 (c) VERSION <バージョン番号> 3975 3976 パッケージのバージョン番号を指定する.簡易パッケージ記述ファイルおよび 3977 個別パッケージ記述ファイルの中に記述する.簡易パッケージにおいて,バー 3978 ジョン番号をパッケージ化した日付とする場合には,パッケージ番号の代わり 3979 に%dateと記述する. 3980 3981 バージョン番号の付与方法については,「TOPPERS/ASPカーネル ユーザーズマ 3982 ニュアル」の「2.2 簡易パッケージ」および「2.3 個別パッケージ」の節を参 3983 照すること. 3984 3985 (d) INCLUDE <ファイル名> 3986 3987 別のパッケージ記述ファイルをインクルードする.簡易パッケージ記述ファイ 3988 ルからは,個別パッケージ記述ファイルのみをインクルードするのを原則とす 3989 る.個別パッケージ記述ファイルからインクルードされるファイル中で指定さ 3990 れる個別パッケージ名は,すべて一致していなければならない. 3991 3992 3993 10.リファレンス 3994 3995 10.1 ターゲット依存部のファイル一覧 3996 3997 標準的なターゲット依存部のファイル構成は次の通りである. 3998 3999 Makefile.target Makefileのターゲット依存部(2章). 4000 target_offset.tf オフセットファイル生成用テンプレートファイル(2.5.1節, 4001 オプション) 4002 4003 target_stddef.h TOPPERS共通定義(t_stddef.h)のターゲット依存部(3 4004 章).アプリケーションとカーネルの両方からインクルー 4005 ドされる. 4006 target_sil.h システムインタフェースレイヤ(sil.h)のターゲット依 4007 存部(4章).アプリケーションとカーネルの両方から 4008 インクルードされる. 4009 target_kernel.h カーネルAPI(kernel.h)のターゲット依存部(5章). 4010 アプリケーションとカーネルの両方からインクルードさ 4011 れる. 4012 4013 target_config.h カーネル実装のターゲット依存部のヘッダファイル(6 4014 章).カーネルのみからインクルードされる. 4015 target_config.c カーネル実装のターゲット依存部のC言語で記述される 4016 部分(6章,オプション). 4017 target_support.S カーネル実装のターゲット依存部のアセンブリ言語で記 4018 述される部分(6章,オプション). 4019 target_rename.def カーネル実装のターゲット依存部のためのリネーム記述 4020 (6.12節). 4021 target_rename.h target_rename.defから生成されるファイル(6.12節). 4022 target_unrename.h target_rename.defから生成されるファイル(6.12節). 4023 target_timer.cfg タイマドライバのシステムコンフィギュレーションファ 4024 イル(6.13節). 4025 target_timer.h タイマドライバのヘッダファイル(6.13節).カーネル 4026 のみからインクルードされる. 4027 target_timer.c タイマドライバの実装ファイル(6.13節,オプション). 4028 システム略称.h ターゲットのハードウェア資源(割込みハンドラ番号や 4029 CPU例外ハンドラ番号,デバイスレジスタの番地など)の 4030 定義を含むヘッダファイル.アプリケーションとカーネ 4031 ルの両方からインクルードされる(6章,オプション). 4032 4033 target_def.csv コンフィギュレータの値取得シンボルテーブルのターゲッ 4034 ト依存部(7章,オプション). 4035 target.tf コンフィギュレータのパス2のテンプレートファイルの 4036 ターゲット依存部(7.2節). 4037 target_check.tf コンフィギュレータのパス3のテンプレートファイル(7.3 4038 節). 4039 target_cfg1_out.h cfg1_out.cのリンクに必要なスタブの定義ファイル(7.4 4040 節). 4041 4042 target_syssvc.h システムサービスのターゲット依存定義(8.0節). 4043 target_serial.cfg シリアルドライバのシステムコンフィギュレーションファ 4044 イル(8.3節). 4045 target_serial.h シリアルドライバのヘッダファイル(8.3節).シリアル 4046 ドライバのみからインクルードされる. 4047 target_serial.c シリアルドライバの実装ファイル(8.3節,オプション). 4048 target_test.h テストプログラムのターゲット依存定義(8.4節). 4049 4050 target_user.txt ユーザーズマニュアル(9.1節) 4051 target_design.txt 設計メモ(9.1節,オプション) 4052 MANIFEST 個別パッケージに含めるファイルのリスト(9.2節,オプ 4053 ション) 4054 E_PACKAGE 簡易パッケージに含めるファイルのリスト(9.2節,オプ 4055 ション) 4056 4057 以上 -
Property svn:mime-type
changed from
-
rubycfg_asp/trunk/asp_dcre/doc/user.txt
-
Property svn:mime-type
changed from
text/plain
totext/plane; charset=UTF-8
r313 r315 1 1 2 TOPPERS/ASPã«ã¼ãã« 3 ã¦ã¼ã¶ã¼ãºããã¥ã¢ã« 4 5 対å¿ãã¼ã¸ã§ã³: Release 1.9.3 6 æçµæ´æ°: 2017å¹´4æ29æ¥ 7 8 ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASPã«ã¼ãã«ã使ç¨ããããã«å¿ 9 è¦ãªäºé 10 ã説æ 11 ãããã®ã§ããï¼ 2 TOPPERS/ASPカーネル 3 ユーザーズマニュアル 4 5 対応バージョン: Release 1.9.3 6 最終更新: 2017年4月29日 7 8 このドキュメントは,TOPPERS/ASPカーネルを使用するために必要な事項を説明 9 するものである. 12 10 13 11 ---------------------------------------------------------------------- … … 19 17 Graduate School of Information Science, Nagoya Univ., JAPAN 20 18 21 ä¸è¨èä½æ¨©è 22 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 23 ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 24 å¤ã»åé 25 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 26 (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 27 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 28 ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 29 (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 30 ç¨ã§ããå½¢ã§åé 31 å¸ããå ´åã«ã¯ï¼åé 32 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 33 è 34 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 35 ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 36 (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 37 ç¨ã§ããªãå½¢ã§åé 38 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 39 ã¨ï¼ 40 (a) åé 41 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 42 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 43 ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 44 (b) åé 45 å¸ã®å½¢æ 46 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 47 å ±åãããã¨ï¼ 48 (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 49 害ãããï¼ä¸è¨èä½æ¨©è 50 ããã³TOPPERSããã¸ã§ã¯ããå 51 責ãããã¨ï¼ 52 ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 53 ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 54 ããã³TOPPERSããã¸ã§ã¯ãã 55 å 56 責ãããã¨ï¼ 19 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 23 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 24 スコード中に含まれていること. 25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 26 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 27 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 28 の無保証規定を掲載すること. 29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 30 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 31 と. 32 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 33 作権表示,この利用条件および下記の無保証規定を掲載すること. 34 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 35 報告すること. 36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 37 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 38 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 39 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 40 免責すること. 57 41 58 æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 59 ã 60 ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 61 ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 62 ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 63 ã®è²¬ä»»ãè² ããªãï¼ 42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 46 の責任を負わない. 64 47 65 48 $Id$ 66 49 ---------------------------------------------------------------------- 67 50 68 âç®æ¬¡ 69 70 ï¼ï¼TOPPERS/ASPã«ã¼ãã«ã®æ¦è¦ 71 1.1 TOPPERS/ASPã«ã¼ãã«ã®ä½ç½®ä»ã 72 1.2 TOPPERS/ASPã«ã¼ãã«ã®ä»æ§ 73 1.3 ãã¤ã°ã¬ã¼ã·ã§ã³ã¬ã¤ã 74 1.4 æ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ã¬ã¤ã 75 1.5 æ¢ç¥ã®åé¡ 76 1.6 Cygwinç°å¢ã«ããã注æäºé 77 78 ï¼ï¼ã¿ã¼ã²ããä¾åé¨ 79 2.1 ã¿ã¼ã²ããä¾åé¨ã®æ¦è¦ 80 2.2 ç°¡æããã±ã¼ã¸ 81 2.3 åå¥ããã±ã¼ã¸ 82 ï¼ï¼ã¯ã¤ãã¯ã¹ã¿ã¼ãã¬ã¤ã 83 3.1 éçºç°å¢ã®æºå 84 3.2 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®æ§ç¯ 85 3.3 ãµã³ãã«ããã°ã©ã ã®æ§ç¯ã¨å®è¡ 86 3.4 ã«ã¼ãã«ãé¢æ°åä½ã§ã©ã¤ãã©ãªåããæ¹æ³ 87 3.5 ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ãã«ãå¥ã 88 ã«æ§ç¯ããæ¹æ³ 89 ï¼ï¼ãã£ã¬ã¯ããªæ§æã»ãã¡ã¤ã«æ§æ 90 4.1 é 91 å¸ããã±ã¼ã¸ã®ãã£ã¬ã¯ããªæ§æ 92 4.2 ã¿ã¼ã²ããéä¾åé¨ã®ãã¡ã¤ã«æ§æ 93 ï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã®ä½¿ãæ¹ 94 ï¼ï¼Makefileã®ä¿®æ£æ¹æ³ 95 6.1 Makefileã®å¤æ°å®ç¾© 96 6.2 ã³ã³ãã¤ã«ãªãã·ã§ã³ 97 ï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ä½¿ãæ¹ 98 ï¼ï¼ã·ã¹ãã ãµã¼ãã¹ 99 8.1 ã·ã¹ãã ãã°æ©è½ 100 8.1.1 ã·ã¹ãã ãã°æ©è½ã®ä½ç½®ä»ã 101 8.1.2 ãã°ãããã¡ã¸ã®è¨é²ã¨ä½ã¬ãã«åºå 102 8.1.3 ãã°æ 103 å ±ã®ç¨®å¥ 104 8.1.4 ãã°æ 105 å ±ã®éè¦åº¦ 106 8.1.5 ãã°æ 107 å ±ã®ãã¼ã¿æ§é 108 8.1.6 ã·ã¹ãã ãã°æ©è½ã®ãµã¼ãã¹ã³ã¼ã« 109 8.1.7 ã·ã¹ãã ãã°æ©è½ã®ããã®ã©ã¤ãã©ãªé¢æ°ã¨ãã¯ã 110 8.1.8 ã·ã¹ãã ãã°æ©è½ã®ãã®ä»ã®ãµã¼ãã¹ 111 8.2 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ã 112 8.2.1 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãµã¼ãã¹ã³ã¼ã« 113 8.2.2 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãã®ä»ã®ãµã¼ãã¹ 114 8.3 ã·ã¹ãã ãã°ã¿ã¹ã¯ 115 8.3.1 ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ãµã¼ãã¹ã³ã¼ã« 116 8.3.2 ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ãã®ä»ã®ãµã¼ãã¹ 117 8.4 ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºå 118 ï¼ï¼ãµãã¼ãã©ã¤ãã©ãª 119 9.1 åºæ¬çãªã©ã¤ãã©ãªé¢æ° 120 9.2 ãã¥ã¼æä½ã©ã¤ãã©ãªé¢æ° 121 9.3 ã·ã¹ãã ãã°åºåç¨ã©ã¤ãã©ãªé¢æ° 122 9.4 å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã« 123 ï¼ï¼ï¼ãã¹ãããã°ã©ã 124 10.1 ãã¹ãããã°ã©ã ç¨ã©ã¤ãã©ãª 125 10.2 ã«ã¼ãã«ã®æ´åæ§æ¤æ» 126 10.3 æ©è½ãã¹ãããã°ã©ã 127 10.4 æ§è½è©ä¾¡ããã°ã©ã 128 ï¼ï¼ï¼ä½¿ç¨ä¸ã®æ³¨æã¨ãã³ã 129 11.1 ã¿ã¤ããã©ã¤ãã®çµè¾¼ã¿ 130 11.2 assertãã¯ãã®å¦ç 131 11.3 ã·ã¹ãã ãã°æ©è½ã®æ±ã 132 11.4 ãªãã¸ã§ã¯ãIDã®ç®¡ç 133 11.5 ã«ã¼ãã«ã®å 134 é¨ã·ã³ãã«ã®ãªãã¼ã 135 11.6 ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ãã®ä½¿ç¨æ¹æ³ 136 11.7 ã·ã¹ãã ã®èµ·åæã®åæåå¦ç 137 11.8 rodataã»ã¯ã·ã§ã³ãRAMã«ç½®ãå ´å 138 ï¼ï¼ï¼åèæ 139 å ± 140 12.1 å©ç¨æ¡ä»¶ã¨å©ç¨å ±å 141 12.2 ä¿è¨¼ã»é©ç¨æ§ã»ãµãã¼ã 142 12.3 ãã°ã¬ãã¼ã 143 12.4 ã¦ã§ããµã¤ã 144 12.5 TOPPERSã¦ã¼ã¶ã¼ãºã¡ã¼ãªã³ã°ãªã¹ã 145 12.6 TOPPERSããã¸ã§ã¯ãã®ã¡ã³ãåãã®ãµã¼ãã¹ 146 12.7 TOPPERSããã¸ã§ã¯ãã¸ã®åå 147 ï¼ï¼ï¼ãªãã¡ã¬ã³ã¹ 148 13.1 ãµã¼ãã¹ã³ã¼ã«ä¸è¦§ 149 13.2 éçAPIä¸è¦§ 150 13.3 ãã¼ã¸ã§ã³å±¥æ´ 151 152 153 ï¼ï¼TOPPERS/ASPã«ã¼ãã«ã®æ¦è¦ 154 155 1.1 TOPPERS/ASPã«ã¼ãã«ã®ä½ç½®ä»ã 156 157 TOPPERS/ASPã«ã¼ãã«ï¼ä»¥ä¸ï¼ASPã«ã¼ãã«ï¼ã¯ï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«ã®åºç¤ 158 ã¨ãªããã®ã¨ãã¦ï¼TOPPERSããã¸ã§ã¯ãã«ããã¦éçºãããªã¢ã«ã¿ã¤ã ã«ã¼ã 159 ã«ã§ããï¼Î¼ITRON4.0ä»æ§ã®ã¹ã¿ã³ãã¼ããããã¡ã¤ã«æºæ ã®ãªã¢ã«ã¿ã¤ã ã«ã¼ 160 ãã«ã§ããTOPPERS/JSPã«ã¼ãã«ãæ¡å¼µã»æ¹è¯ããå½¢ã§éçºããï¼ 161 162 1.2 TOPPERS/ASPã«ã¼ãã«ã®ä»æ§ 163 164 ASPã«ã¼ãã«ã®ä»æ§ã®æ¦è¦ã«ã¤ãã¦ã¯ï¼ãTOPPERS/ASPã«ã¼ãã«ã®ä»æ§æ¦è¦ãã 165 åç 166 §ãããã¨ï¼ã¾ãï¼ASPã«ã¼ãã«ãå«ãTOPPERSæ°ä¸ä»£ã«ã¼ãã«ã®ä»æ§ã®è©³ç´° 167 ã«ã¤ãã¦ã¯ï¼å¥éPDFãã¡ã¤ã«ã®å½¢ã§é 168 å¸ãã¦ãããTOPPERSæ°ä¸ä»£ã«ã¼ãã«çµ± 169 åä»æ§æ¸ï¼Release 1.7.1ï¼ããåç 170 §ãããã¨ï¼ 171 172 1.3 ãã¤ã°ã¬ã¼ã·ã§ã³ã¬ã¤ã 173 174 å¾æ¥ã®TOPPERSã«ã¼ãã«ãä»ã®Î¼ITRON4.0ä»æ§æºæ ã®ã«ã¼ãã«ããï¼TOPPERSæ° 175 ä¸ä»£ã«ã¼ãã«ã«ç§»è¡ããããã®æ¹æ³ï¼ã¾ãã¯ãã³ãï¼ã説æãããTOPPERSæ°ä¸ 176 代ã«ã¼ãã«ã¸ã®ãã¤ã°ã¬ã¼ã·ã§ã³ã¬ã¤ãããï¼å¥éPDFãã¡ã¤ã«ã®å½¢ã§é 177 å¸ã㦠178 ããï¼å¿ 179 è¦ã«å¿ãã¦åç 180 §ãããã¨ï¼ 181 182 1.4 æ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ã¬ã¤ã 183 184 TOPPERS/ASPã«ã¼ãã«ãï¼æ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ããããã®æ¹æ³ï¼ã¾ãã¯ãã³ 185 ãï¼ã説æãããæ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ã¬ã¤ãããç¨æãã¦ããï¼æ¡å¼µãã 186 ã±ã¼ã¸ã®ä½¿ç¨æ¹æ³ã¯ï¼ãæ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ã¬ã¤ããã«å«ã¾ãã¦ããï¼å¿ 187 188 è¦ã«å¿ãã¦åç 189 §ãããã¨ï¼ 190 191 1.5 æ¢ç¥ã®åé¡ 192 193 å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å 194 é çªå°ï¼ATT_ISRã®isrï¼ï¼å²è¾¼ã¿ãã³ãã©ã®å 195 é 196 çªå°ï¼DEF_INHã®inthdrï¼ï¼CPUä¾å¤ãã³ãã©ã®å 197 é çªå°ï¼DEF_EXCã®exchdrï¼ï¼ 198 åæåã«ã¼ãã³ã®å 199 é çªå°ï¼ATT_INIã®inirtnï¼ï¼çµäºå¦çã«ã¼ãã³ã®å 200 é çªå° 201 ï¼ATT_TERã®terrtnï¼ãããã°ã©ã ã®éå§çªå°ã¨ãã¦æ£ãããªãå ´åã®ã¨ã©ã¼ã¯ï¼ 202 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«æ¤åºãããªãå ´åãããï¼ã¿ã¼ã²ããã«ä¾åï¼ï¼ 203 204 kernel_cfg.cï¼ããã³cfg1_out.cï¼ã¯ï¼ã«ã¼ãã«ï¼ã·ã¹ãã ãµã¼ãã¹ï¼ã¢ã㪠205 ã±ã¼ã·ã§ã³ã®ãããã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ããï¼ãããã®ã·ã³ 206 ãã«ãåç 207 §ããå¯è½æ§ãããï¼ãã®ããï¼ã«ã¼ãã«ï¼ã·ã¹ãã ãµã¼ãã¹ï¼ã¢ã 208 ãªã±ã¼ã·ã§ã³ã§ã·ã³ãã«çãè¡çªãã¦ããå ´åãï¼ã³ã³ãã¤ã«ãªãã·ã§ã³ãé£ 209 ãéã£ã¦ããå ´åã«ï¼kernel_cfg.cï¼ããã³cfg1_out.cï¼ãæ£ããã³ã³ãã¤ã« 210 ã§ããªããªãå ´åãèããããï¼ã«ã¼ãã«ã®ã·ã³ãã«ããªãã¼ã ãããªã©ã®æ¹ 211 æ³ã§è»½æ¸ããã¦ã¯ãããï¼åé¡ããªããªã£ã¦ããããã§ã¯ãªãï¼ 212 213 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ããï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾ãã 214 INCLUDEãã£ã¬ã¯ãã£ãã«ããä»ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ 215 ããã¦ããå ´åã«ï¼ãã®ä¸ã«å«ã¾ããCè¨èªããªããã»ããµã®ã¤ã³ã¯ã«ã¼ãã㣠216 ã¬ã¯ãã£ãï¼#includeï¼ã§ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ç½®ããã¦ãã 217 ãã£ã¬ã¯ããªãï¼ãã¡ã¤ã«ãæ¤ç´¢ãããã¹ã«ã¯ãããªãã¨ããåé¡ãããï¼ä¾ 218 ãã°ï¼syssvc/syslog.cfgã«ã#include "syslog.h"ãã¨è¨è¿°ã§ããªãã®ã¯ï¼ã 219 ã®åé¡ãããããã§ããï¼ 220 221 ç¾æç¹ã§ã¯ï¼ã¢ãã¬ã¹ã64ãããã®ç°å¢ã«ã¯å¯¾å¿ãã¦ããªãï¼64ãããã¢ã㬠222 ã¹ç°å¢ããµãã¼ãããããã®æ大ã®èª²é¡ã¯ï¼ã¢ããã¼ã©Sã¬ã³ã¼ããã©ã¼ããã 223 ã64ãããã¢ãã¬ã¹ã«å¯¾å¿ãã¦ããªããã¨ã§ããï¼ 224 225 1.6 Cygwinç°å¢ã«ããã注æäºé 226 227 228 Cygwinç°å¢ã«ããã¦ã¯ï¼ãã£ã¬ã¯ããªã®æå®ãç¸å¯¾ãã¹ã§è¡ããã¨ãæ¨å¥¨ããï¼ 229 ããã¯ï¼Cygwinç°å¢ã®çµ¶å¯¾ãã¹ã¯ï¼Windowsãã¤ãã£ãã§ãã«ãããããã¼ã«ã¯ 230 解éã§ããªãããã§ããï¼ 231 232 233 ï¼ï¼ã¿ã¼ã²ããä¾åé¨ 234 235 2.1 ã¿ã¼ã²ããä¾åé¨ã®æ¦è¦ 236 237 ASPã«ã¼ãã«ã®ã¿ã¼ã²ããéä¾åé¨ã¨ï¼å種ã®ã¿ã¼ã²ããã·ã¹ãã ã«å¯¾å¿ããã 238 ãã®ã¿ã¼ã²ããä¾åé¨ã¯ï¼å¥ã 239 ã«éçºããã¦ããï¼ãã®ããï¼ASPã«ã¼ãã«ã対 240 å¿ãã¦ãããã¹ã¦ã®ã¿ã¼ã²ããä¾åé¨ãï¼ãã¼ã¸ã§ã³ãæ´åããã¦ããã±ã¼ã¸ 241 åãããã¨ã¯å°é£ã§ããï¼ããã§ï¼ä¸»ã«åç´ã®ã¦ã¼ã¶ã対象ã«ããç°¡æããã±ã¼ 242 ã¸ã¨ï¼ä¸ç´ã®ã¦ã¼ã¶ãã«ã¼ãã«éçºè 243 ã対象ã«ããåå¥ããã±ã¼ã¸ãç¨æã㦠244 ããï¼ 245 246 ASPã«ã¼ãã«ãæªãµãã¼ãã®ã¿ã¼ã²ããã·ã¹ãã ã¸ãã¼ãã£ã³ã°ããããã«å¿ 247 è¦ 248 ãªä½æ¥ã¯ï¼éçºç°å¢ã®æ§ç¯ã¨æ¨æºã®éçºç°å¢ã¨ã®å·®ç°ã®å¸åï¼ã«ã¼ãã«èªèº«ã® 249 ãã¼ãã£ã³ã°ï¼ã·ã¹ãã ãµã¼ãã¹ã®ãã¼ãã£ã³ã°ãªã©ãããªãï¼è©³ããã¯ï¼ 250 ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãããåç 251 §ãããã¨ï¼ 252 253 2.2 ç°¡æããã±ã¼ã¸ 254 255 ç°¡æããã±ã¼ã¸ã¯ï¼ASPã«ã¼ãã«ã対å¿ãã¦ããã¿ã¼ã²ããã·ã¹ãã æ¯ã«ç¨æã 256 ãï¼ãã®ã¿ã¼ã²ããã·ã¹ãã ä¸ã§ASPã«ã¼ãã«ãåä½ãããããã«å¿ 257 è¦ãªãã¡ã¤ 258 ã«ä¸å¼ãããã±ã¼ã¸åãããã®ã§ããï¼ç°¡æããã±ã¼ã¸ã«å«ã¾ãããã¡ã¤ã«ã¯ï¼ 259 ãã¼ã¸ã§ã³ãæ´åãã¦ãããã¨ã確èªããã¦ããï¼ 260 261 ç°¡æããã±ã¼ã¸ã®ãã¼ã¸ã§ã³çªå·ã¯ï¼ããã±ã¼ã¸åããæ¥ä»ã¨ãããã¨ãåå 262 ã¨ãããï¼ã¿ã¼ã²ããã·ã¹ãã æ¯ã®äºæ 263 ã«ãããã®ååã«å¾ããªãå ´åãããï¼ 264 265 ç°¡æããã±ã¼ã¸ã¯ï¼åºæ¬çã«ã¯ï¼æ¬¡ã«èª¬æããåå¥ããã±ã¼ã¸ãè¤æ°ã¾ã¨ãã 266 ãã®ã§ããï¼ãã®ããï¼å¯¾è±¡ã¿ã¼ã²ããã·ã¹ãã ã«å¿ 267 è¦ã®ãªããã¡ã¤ã«ãå«ã¾ 268 ãã¦ããï¼ã¾ãï¼ç°¡æããã±ã¼ã¸ã«å«ã¾ãã¦ããåå¥ããã±ã¼ã¸ã®ãã¼ã¸ã§ã³ 269 ã¯ï¼åå¥ããã±ã¼ã¸ã®MANIFESTãã¡ã¤ã«ãåç 270 §ãããã¨ã§ç¥ããã¨ãã§ããï¼ 271 272 2.3 åå¥ããã±ã¼ã¸ 273 274 åå¥ããã±ã¼ã¸ã¯ï¼ASPã«ã¼ãã«ã®éçºåä½æ¯ã«ï¼ãã®éçºåä½ã§éçºãæ 275 å½ã 276 ã¦ãããã¡ã¤ã«ä¸å¼ãããã±ã¼ã¸åãããã®ã§ããï¼ASPã«ã¼ãã«ã®ã¿ã¼ã²ãã 277 éä¾åé¨ãï¼ä¸ã¤ã®åå¥ããã±ã¼ã¸ã¨ãã¦é 278 å¸ãããï¼ããåå¥ããã±ã¼ã¸ã 279 使ç¨ããããã«ã¯ï¼ä¸è¬ã«ã¯ï¼ä»ã®åå¥ããã±ã¼ã¸ãå¿ 280 è¦ã¨ãªãï¼ã¿ã¼ã²ãã 281 ä¾åé¨ã®åå¥ããã±ã¼ã¸ã使ç¨ããããã«å¿ 282 è¦ã¨ãªãåå¥ããã±ã¼ã¸ã¨ãã®ãã¼ 283 ã¸ã§ã³ã«ã¤ãã¦ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ãåç 284 §ãããã¨ï¼ 285 使ç¨ããåå¥ããã±ã¼ã¸ã®ãã¼ã¸ã§ã³ãæ´åããããã¨ã¯ï¼ã¦ã¼ã¶ã®è²¬ä»»ã§ã 286 ãï¼ 287 288 åå¥ããã±ã¼ã¸ã®ãã¼ã¸ã§ã³çªå·ã¯ï¼X.Y.Zã®å½¢ã§è¡¨ç¾ãããï¼ã¿ã¼ã²ããéä¾ 289 åé¨ã®ãã¼ã¸ã§ã³çªå·ãï¼ASPã«ã¼ãã«å 290 ¨ä½ã®ãªãªã¼ã¹çªå·ã¨ããï¼ã¿ã¼ã²ãã 291 ä¾åé¨ã®ãã¼ã¸ã§ã³çªå·ã¯ï¼Xã¨Yãï¼ãããä¾åããã¿ã¼ã²ããéä¾åé¨ã¨ä¸ 292 è´ãã¦ããï¼ããã«å¯¾ãã¦ï¼Zã¯ä¸è´ãã¦ããã¨ã¯éããªãï¼ä¾ãã°ï¼ã¿ã¼ã²ã 293 ãéä¾åé¨ã®ãã¼ã¸ã§ã³1.1.0ã«å¯¾å¿ããã¿ã¼ã²ããä¾åé¨ã¯ï¼ãã¼ã¸ã§ã³ 294 1.1.Zã®å½¢ã¨ãªãï¼ã¿ã¼ã²ããä¾åé¨ã®ã¿ããã¼ã¸ã§ã³ã¢ããããå ´åã«ã¯ï¼Z 295 ãå¤æ´ãããï¼ 296 297 使ç¨ããåå¥ããã±ã¼ã¸ã¯ï¼æ¬¡ã®ä¾ã®ããã«ï¼ã¿ã¼ã²ããéä¾åé¨ã®åå¥ãã 298 ã±ã¼ã¸ãå±éããã®ã¨åããã£ã¬ã¯ããªã§å±éããï¼ 51 ○目次 52 53 1.TOPPERS/ASPカーネルの概要 54 1.1 TOPPERS/ASPカーネルの位置付け 55 1.2 TOPPERS/ASPカーネルの仕様 56 1.3 マイグレーションガイド 57 1.4 機能拡張・チューニングガイド 58 1.5 既知の問題 59 1.6 Cygwin環境における注意事項 60 2.ターゲット依存部 61 2.1 ターゲット依存部の概要 62 2.2 簡易パッケージ 63 2.3 個別パッケージ 64 3.クイックスタートガイド 65 3.1 開発環境の準備 66 3.2 コンフィギュレータの構築 67 3.3 サンプルプログラムの構築と実行 68 3.4 カーネルを関数単位でライブラリ化する方法 69 3.5 アプリケーションとカーネルを別々に構築する方法 70 4.ディレクトリ構成・ファイル構成 71 4.1 配布パッケージのディレクトリ構成 72 4.2 ターゲット非依存部のファイル構成 73 5.コンフィギュレーションスクリプトの使い方 74 6.Makefileの修正方法 75 6.1 Makefileの変数定義 76 6.2 コンパイルオプション 77 7.コンフィギュレータの使い方 78 8.システムサービス 79 8.1 システムログ機能 80 8.1.1 システムログ機能の位置付け 81 8.1.2 ログバッファへの記録と低レベル出力 82 8.1.3 ログ情報の種別 83 8.1.4 ログ情報の重要度 84 8.1.5 ログ情報のデータ構造 85 8.1.6 システムログ機能のサービスコール 86 8.1.7 システムログ機能のためのライブラリ関数とマクロ 87 8.1.8 システムログ機能のその他のサービス 88 8.2 シリアルインタフェースドライバ 89 8.2.1 シリアルインタフェースドライバのサービスコール 90 8.2.2 シリアルインタフェースドライバのその他のサービス 91 8.3 システムログタスク 92 8.3.1 システムログタスクのサービスコール 93 8.3.2 システムログタスクのその他のサービス 94 8.4 カーネル起動メッセージの出力 95 9.サポートライブラリ 96 9.1 基本的なライブラリ関数 97 9.2 キュー操作ライブラリ関数 98 9.3 システムログ出力用ライブラリ関数 99 9.4 実行時間分布集計モジュール 100 10.テストプログラム 101 10.1 テストプログラム用ライブラリ 102 10.2 カーネルの整合性検査 103 10.3 機能テストプログラム 104 10.4 性能評価プログラム 105 11.使用上の注意とヒント 106 11.1 タイマドライバの組込み 107 11.2 assertマクロの処理 108 11.3 システムログ機能の扱い 109 11.4 オブジェクトIDの管理 110 11.5 カーネルの内部シンボルのリネーム 111 11.6 トレースログ記録のサンプルコードの使用方法 112 11.7 システムの起動時の初期化処理 113 11.8 rodataセクションをRAMに置く場合 114 12.参考情報 115 12.1 利用条件と利用報告 116 12.2 保証・適用性・サポート 117 12.3 バグレポート 118 12.4 ウェブサイト 119 12.5 TOPPERSユーザーズメーリングリスト 120 12.6 TOPPERSプロジェクトのメンバ向けのサービス 121 12.7 TOPPERSプロジェクトへの参加 122 13.リファレンス 123 13.1 サービスコール一覧 124 13.2 静的API一覧 125 13.3 バージョン履歴 126 127 128 1.TOPPERS/ASPカーネルの概要 129 130 1.1 TOPPERS/ASPカーネルの位置付け 131 132 TOPPERS/ASPカーネル(以下,ASPカーネル)は,TOPPERS新世代カーネルの基盤 133 となるものとして,TOPPERSプロジェクトにおいて開発したリアルタイムカーネ 134 ルである.μITRON4.0仕様のスタンダードプロファイル準拠のリアルタイムカー 135 ネルであるTOPPERS/JSPカーネルを拡張・改良する形で開発した. 136 137 1.2 TOPPERS/ASPカーネルの仕様 138 139 ASPカーネルの仕様の概要については,「TOPPERS/ASPカーネルの仕様概要」を 140 参照すること.また,ASPカーネルを含むTOPPERS新世代カーネルの仕様の詳細 141 については,別途PDFファイルの形で配布している「TOPPERS新世代カーネル統 142 合仕様書(Release 1.7.1)」を参照すること. 143 144 1.3 マイグレーションガイド 145 146 従来のTOPPERSカーネルや他のμITRON4.0仕様準拠のカーネルから,TOPPERS新 147 世代カーネルに移行するための方法(またはヒント)を説明した「TOPPERS新世 148 代カーネルへのマイグレーションガイド」を,別途PDFファイルの形で配布して 149 いる.必要に応じて参照すること. 150 151 1.4 機能拡張・チューニングガイド 152 153 TOPPERS/ASPカーネルを,機能拡張・チューニングするための方法(またはヒン 154 ト)を説明した「機能拡張・チューニングガイド」を用意している.拡張パッ 155 ケージの使用方法は,「機能拡張・チューニングガイド」に含まれている.必 156 要に応じて参照すること. 157 158 1.5 既知の問題 159 160 割込みサービスルーチンの先頭番地(ATT_ISRのisr),割込みハンドラの先頭 161 番地(DEF_INHのinthdr),CPU例外ハンドラの先頭番地(DEF_EXCのexchdr), 162 初期化ルーチンの先頭番地(ATT_INIのinirtn),終了処理ルーチンの先頭番地 163 (ATT_TERのterrtn)がプログラムの開始番地として正しくない場合のエラーは, 164 コンフィギュレータに検出されない場合がある(ターゲットに依存). 165 166 kernel_cfg.c(およびcfg1_out.c)は,カーネル,システムサービス,アプリ 167 ケーションのいずれのインクルードファイルもインクルードし,いずれのシン 168 ボルも参照する可能性がある.そのため,カーネル,システムサービス,アプ 169 リケーションでシンボル等が衝突している場合や,コンパイルオプションが食 170 い違っている場合に,kernel_cfg.c(およびcfg1_out.c)が正しくコンパイル 171 できなくなる場合が考えられる.カーネルのシンボルをリネームするなどの方 172 法で軽減されてはいるが,問題がなくなっているわけではない. 173 174 システムコンフィギュレーションファイルから,コンフィギュレータに対する 175 INCLUDEディレクティブにより他のコンフィギュレーションファイルをインクルー 176 ドしている場合に,その中に含まれるC言語プリプロセッサのインクルードディ 177 レクティブ(#include)で,コンフィギュレーションファイルの置かれている 178 ディレクトリが,ファイルを検索するパスにはいらないという問題がある.例 179 えば,syssvc/syslog.cfgに「#include "syslog.h"」と記述できないのは,こ 180 の問題があるためである. 181 182 現時点では,アドレスが64ビットの環境には対応していない.64ビットアドレ 183 ス環境をサポートするための最大の課題は,モトローラSレコードフォーマット 184 が64ビットアドレスに対応していないことである. 185 186 1.6 Cygwin環境における注意事項 187 188 Cygwin環境においては,ディレクトリの指定を相対パスで行うことを推奨する. 189 これは,Cygwin環境の絶対パスは,Windowsネイティブでビルドされたツールは 190 解釈できないためである. 191 192 193 2.ターゲット依存部 194 195 2.1 ターゲット依存部の概要 196 197 ASPカーネルのターゲット非依存部と,各種のターゲットシステムに対応するた 198 めのターゲット依存部は,別々に開発されている.そのため,ASPカーネルが対 199 応しているすべてのターゲット依存部を,バージョンを整合させてパッケージ 200 化することは困難である.そこで,主に初級のユーザを対象にした簡易パッケー 201 ジと,上級のユーザやカーネル開発者を対象にした個別パッケージを用意して 202 いる. 203 204 ASPカーネルを未サポートのターゲットシステムへポーティングするために必要 205 な作業は,開発環境の構築と標準の開発環境との差異の吸収,カーネル自身の 206 ポーティング,システムサービスのポーティングなどからなる.詳しくは, 207 「ターゲット依存部 ポーティングガイド」を参照すること. 208 209 2.2 簡易パッケージ 210 211 簡易パッケージは,ASPカーネルが対応しているターゲットシステム毎に用意さ 212 れ,そのターゲットシステム上でASPカーネルを動作させるために必要なファイ 213 ル一式をパッケージ化したものである.簡易パッケージに含まれるファイルは, 214 バージョンが整合していることが確認されている. 215 216 簡易パッケージのバージョン番号は,パッケージ化した日付とすることを原則 217 とするが,ターゲットシステム毎の事情によりこの原則に従わない場合がある. 218 219 簡易パッケージは,基本的には,次に説明する個別パッケージを複数まとめた 220 ものである.そのため,対象ターゲットシステムに必要のないファイルも含ま 221 れている.また,簡易パッケージに含まれている個別パッケージのバージョン 222 は,個別パッケージのMANIFESTファイルを参照することで知ることができる. 223 224 2.3 個別パッケージ 225 226 個別パッケージは,ASPカーネルの開発単位毎に,その開発単位で開発を担当し 227 ているファイル一式をパッケージ化したものである.ASPカーネルのターゲット 228 非依存部も,一つの個別パッケージとして配布される.ある個別パッケージを 229 使用するためには,一般には,他の個別パッケージが必要となる.ターゲット 230 依存部の個別パッケージを使用するために必要となる個別パッケージとそのバー 231 ジョンについては,ターゲット依存部のユーザーズマニュアルを参照すること. 232 使用する個別パッケージのバージョンを整合させることは,ユーザの責任であ 233 る. 234 235 個別パッケージのバージョン番号は,X.Y.Zの形で表現される.ターゲット非依 236 存部のバージョン番号を,ASPカーネル全体のリリース番号とする.ターゲット 237 依存部のバージョン番号は,XとYが,それが依存するターゲット非依存部と一 238 致している.それに対して,Zは一致しているとは限らない.例えば,ターゲッ 239 ト非依存部のバージョン1.1.0に対応するターゲット依存部は,バージョン 240 1.1.Zの形となる.ターゲット依存部のみがバージョンアップした場合には,Z 241 が変更される. 242 243 使用する個別パッケージは,次の例のように,ターゲット非依存部の個別パッ 244 ケージを展開したのと同じディレクトリで展開する. 299 245 300 246 % tar xvfz asp-1.1.0.tar.gz 301 247 % tar xvfz asp_arch_arm_gcc_1.1.2.tar.gz 302 248 303 ã¿ã¼ã²ããéä¾åé¨ã®åå¥ããã±ã¼ã¸ã«ã¯ï¼ä»¥ä¸ã®ã¿ã¼ã²ããä¾åé¨ãå«ã¾ã 304 ã¦ãããï¼ãããã¯ä»ã®ã¿ã¼ã²ããã·ã¹ãã ã«ãã¼ãã£ã³ã°ããéã®åèã«ã 305 ãããã«ç¨æãã¦ãããã®ã§ããï¼ãã®åä½ã«ã¤ãã¦ã¯æªæ¤è¨¼ã§ããï¼ 306 307 target/dve68k_gcc DVE-68K/40ï¼GNUéçºç°å¢ï¼ç¨ã¿ã¼ã²ããä¾åé¨ 308 arch/m68k_gcc M68040ï¼GNUéçºç°å¢ï¼ç¨ããã»ããµä¾åé¨ 309 pdic/upd72001 μPD72001ç¨ ç°¡æSIOãã©ã¤ã 310 311 312 ï¼ï¼ã¯ã¤ãã¯ã¹ã¿ã¼ãã¬ã¤ã 313 314 ããã§ã¯ï¼ã¿ã¼ã²ããä¾åé¨ãç¨æããã¦ããã¿ã¼ã²ããã·ã¹ãã ä¸ã§ï¼ASPã«ã¼ 315 ãã«ä¸ã§åä½ãããµã³ãã«ããã°ã©ã ãæ§ç¯ã»åä½ãããã¾ã§ã®æé ã示ãï¼ 316 317 3.1 éçºç°å¢ã®æºå 318 319 ASPã«ã¼ãã«ãç¨ããã·ã¹ãã æ§ç¯ã«ã¯ï¼ä»¥ä¸ã®ãã¼ã«ãå¿ 320 è¦ã§ããï¼ 321 322 ãã¹ãã·ã¹ãã ç¨ã®ãã¼ã« 323 perl åä½ç¢ºèªï¼5.10.0 324 GNU Make åä½ç¢ºèªï¼3.81 325 326 TOPPERSæ°ä¸ä»£ã«ã¼ãã«ç¨ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ 327 cfg åä½ç¢ºèªï¼1.9.4 328 â» 1.5以åã®ãã¼ã¸ã§ã³ã§ã¯åä½ããªãï¼ 329 330 ã¿ã¼ã²ããã·ã¹ãã ç¨ã®ãã¼ã«ï¼ã¯ãã¹éçºç°å¢ï¼ 331 æ¨æºè¦æ ¼ã«æºæ ããCã³ã³ãã¤ã© 332 ã¢ã»ã³ãã©ï¼ãªã³ã«ï¼ã©ã¤ãã©ãªã¢ã³ 333 ã·ã³ãã«ãã¡ã¤ã«åºåãã¼ã«ï¼ãããµãã¡ã¤ã«åºåãã¼ã« 334 æ¨æºCã©ã¤ãã©ãªï¼å¿ 335 é ã§ã¯ãªãï¼ 336 337 ã¿ã¼ã²ããã·ã¹ãã ç¨ã®ãã¼ã«ã«GNUéçºç°å¢ãç¨ããå ´åã«ã¯ï¼ä»¥ä¸ã®ãã¼ã« 338 ãå¿ 339 è¦ã§ããï¼ 340 341 ã¿ã¼ã²ããã·ã¹ãã ç¨ã®GNUéçºç°å¢ãã¼ã« 342 BINUTILSï¼asï¼ldï¼arï¼nmï¼ranlibï¼objcopyï¼objdumpï¼ 343 GCCã¾ãã¯GCC-COREï¼gccããã³ããããå¼ã³åºããããã¼ã«ï¼ 344 NEWLIBï¼æ¨æºCã©ã¤ãã©ãªï¼å¿ 345 é ã§ã¯ãªãï¼ 346 347 åä½ç¢ºèªããã¦ããã¿ã¼ã²ããã·ã¹ãã ç¨ã®ãã¼ã«ã«ã¤ãã¦ã¯ï¼ã¿ã¼ã²ããä¾ 348 åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ãåç 349 §ãããã¨ï¼ 350 351 ã¿ã¼ã²ããã·ã¹ãã ç¨ã®æ¨æºCã©ã¤ãã©ãªã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ãæ¨æºCã©ã¤ã 352 ã©ãªã使ç¨ããªãå ´åã«ã¯ï¼å¿ 353 è¦ãªãï¼ãã ãï¼ã³ã³ãã¤ã©ãæ¨æºCã©ã¤ãã©ãª 354 é¢æ°ï¼memcpyï¼memsetãªã©ï¼ãå¼ã³åºãã³ã¼ããçæããå ´åãããï¼ãã®å ´ 355 åã«ã¯æ¨æºCã©ã¤ãã©ãªãå¿ 356 è¦ã§ããï¼æ¨æºCã©ã¤ãã©ãªãç¨æãã代ããã«ï¼ 357 çæããã³ã¼ããå¼ã³åºãé¢æ°ã®ã¿ãèªåã§ç¨æãã¦ãããï¼ 358 359 以ä¸ã§ã¯ï¼ãããã®ãã¼ã«ãç¨æã§ãã¦ãããã¨ãåæã«ï¼UNIXãã·ã³ä¸ã§ã® 360 æ§ç¯æé ã説æããï¼ã¾ã以ä¸ã®èª¬æã§ã¯ï¼makeã³ãã³ããGNU Makeã§ããã 361 ã®ã¨ããï¼ASPã«ã¼ãã«ã®ãµã³ãã«ã®Makefileã¯ï¼GNU Makeã®æ¡å¼µæ©è½ãç¨ã㦠362 ããï¼ï¼ 363 364 3.2 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®æ§ç¯ 365 366 ã«ã¼ãã«ãæ§ç¯ããåã«ï¼ã¾ãï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«ç¨ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ 367 ãæ§ç¯ããå¿ 368 è¦ãããï¼ç°¡æããã±ã¼ã¸ã«å«ã¾ãã¦ããå ´åãªã©ï¼ã³ã³ãã£ã®ã¥ 369 ã¬ã¼ã¿ãå®è¡ãã¡ã¤ã«å½¢å¼ã§å 370 ¥æããå ´åã«ã¯ï¼ãã®ã¹ãããã¯å¿ 371 è¦ãªãï¼ 372 373 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®æ§ç¯ã«ã¯ï¼ä»¥ä¸ã®ãã¼ã«ãå¿ 374 è¦ã§ããï¼ 375 376 ãã¹ãã·ã¹ãã ç¨ã®ãã¼ã«ï¼ã»ã«ãéçºç°å¢ï¼ 377 C++ã³ã³ãã¤ã©ï¼C++ã©ã¤ãã©ãª 378 åä½ç¢ºèªï¼Mac OS Xç°å¢ï¼ï¼GNU C++ 4.2.1 379 Boost åä½ç¢ºèªï¼1.52.0 380 GNU Make åä½ç¢ºèªï¼3.81 381 382 æåã«ï¼ããã±ã¼ã¸ã«ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ã½ã¼ã¹ãã¡ã¤ã«ãå«ã¾ãã¦ããªã 383 å ´åã«ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ããã±ã¼ã¸ãï¼ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã« 384 ãå±éãããã£ã¬ã¯ããªã®ä¸ã«å±éããï¼ 249 ターゲット非依存部の個別パッケージには,以下のターゲット依存部が含まれ 250 ているが,これらは他のターゲットシステムにポーティングする際の参考にす 251 るために用意しているものであり,その動作については未検証である. 252 253 target/dve68k_gcc DVE-68K/40(GNU開発環境)用ターゲット依存部 254 arch/m68k_gcc M68040(GNU開発環境)用プロセッサ依存部 255 pdic/upd72001 μPD72001用 簡易SIOドライバ 256 257 258 3.クイックスタートガイド 259 260 ここでは,ターゲット依存部が用意されているターゲットシステム上で,ASPカー 261 ネル上で動作するサンプルプログラムを構築・動作させるまでの手順を示す. 262 263 3.1 開発環境の準備 264 265 ASPカーネルを用いたシステム構築には,以下のツールが必要である. 266 267 ホストシステム用のツール 268 perl 動作確認:5.10.0 269 GNU Make 動作確認:3.81 270 271 TOPPERS新世代カーネル用コンフィギュレータ 272 cfg 動作確認:1.9.4 273 ※ 1.5以前のバージョンでは動作しない. 274 275 ターゲットシステム用のツール(クロス開発環境) 276 標準規格に準拠したCコンパイラ 277 アセンブラ,リンカ,ライブラリアン 278 シンボルファイル出力ツール,ヘキサファイル出力ツール 279 標準Cライブラリ(必須ではない) 280 281 ターゲットシステム用のツールにGNU開発環境を用いる場合には,以下のツール 282 が必要である. 283 284 ターゲットシステム用のGNU開発環境ツール 285 BINUTILS(as,ld,ar,nm,ranlib,objcopy,objdump) 286 GCCまたはGCC-CORE(gccおよびそこから呼び出されるツール) 287 NEWLIB(標準Cライブラリ,必須ではない) 288 289 動作確認されているターゲットシステム用のツールについては,ターゲット依 290 存部のユーザーズマニュアルを参照すること. 291 292 ターゲットシステム用の標準Cライブラリは,アプリケーションが標準Cライブ 293 ラリを使用しない場合には,必要ない.ただし,コンパイラが標準Cライブラリ 294 関数(memcpy,memsetなど)を呼び出すコードを生成する場合があり,その場 295 合には標準Cライブラリが必要である.標準Cライブラリを用意する代わりに, 296 生成したコードが呼び出す関数のみを自分で用意してもよい. 297 298 以下では,これらのツールが用意できていることを前提に,UNIXマシン上での 299 構築手順を説明する.また以下の説明では,makeコマンドがGNU Makeであるも 300 のとする(ASPカーネルのサンプルのMakefileは,GNU Makeの拡張機能を用いて 301 いる). 302 303 3.2 コンフィギュレータの構築 304 305 カーネルを構築する前に,まず,TOPPERS新世代カーネル用コンフィギュレータ 306 を構築する必要がある.簡易パッケージに含まれていた場合など,コンフィギュ 307 レータを実行ファイル形式で入手した場合には,このステップは必要ない. 308 309 コンフィギュレータの構築には,以下のツールが必要である. 310 311 ホストシステム用のツール(セルフ開発環境) 312 C++コンパイラ,C++ライブラリ 313 動作確認(Mac OS X環境):GNU C++ 4.2.1 314 Boost 動作確認:1.52.0 315 GNU Make 動作確認:3.81 316 317 最初に,パッケージにコンフィギュレータのソースファイルが含まれていない 318 場合には,コンフィギュレータのパッケージを,ASPカーネルのソースファイル 319 を展開したディレクトリの下に展開する. 385 320 386 321 % cd asp 387 322 % tar xvfz cfg-1.9.4.tar.gz 388 323 389 ã¾ãã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ããã±ã¼ã¸ãä»ã®ãã£ã¬ã¯ããªã«å±éãï¼ASPã«ã¼ 390 ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãå±éãããã£ã¬ã¯ããªããã·ã³ããªãã¯ãªã³ã¯ãã¯ã£ 391 ã¦ãããï¼ 392 393 ã½ã¼ã¹ãã¡ã¤ã«ãå±éã§ããã¨ï¼cfgãã£ã¬ã¯ããªã«ç§»åãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ 394 ã·ã§ã³ã¹ã¯ãªããï¼configureï¼ã§Makefileã®ç°å¢ä¾åé¨ï¼Makefile.configï¼ 395 ãçæããå¾ï¼makeã³ãã³ãã«ããã³ã³ãã£ã®ã¥ã¬ã¼ã¿ï¼cfgããã°ã©ã ï¼ãæ§ 396 ç¯ã§ããï¼ 324 または,コンフィギュレータのパッケージを他のディレクトリに展開し,ASPカー 325 ネルのソースファイルを展開したディレクトリからシンボリックリンクをはっ 326 てもよい. 327 328 ソースファイルが展開できると,cfgディレクトリに移動し,コンフィギュレー 329 ションスクリプト(configure)でMakefileの環境依存部(Makefile.config) 330 を生成した後,makeコマンドによりコンフィギュレータ(cfgプログラム)が構 331 築できる. 397 332 398 333 % cd cfg … … 401 336 % make 402 337 403 ãã ãï¼Boostãã¤ã³ã¹ãã¼ã«ãããã£ã¬ã¯ããªããã³å称ãæ¨æºã§æ³å®ãã¦ã 404 ããã®ã¨ã¯éãå ´åã«ã¯ï¼configureã®--with-headersããã³--with-libraries 405 ãªãã·ã§ã³ã«ããï¼ããããã¡ã¤ã«ããã³ã©ã¤ãã©ãªã®ç½®ããããã£ã¬ã¯ã㪠406 ãæå®ããå¿ 407 è¦ãããï¼--without-xmlã¯ï¼AUTOSAR XMLãã¡ã¤ã«ã®èªã¿è¾¼ã¿æ© 408 è½ï¼ASPã«ã¼ãã«ç¨ã«ã¯å¿ 409 è¦ãªãï¼ãåãè¾¼ã¾ãªããã¨ãæå®ãããªãã·ã§ã³ã§ 410 ããï¼AUTOSAR XMLãã¡ã¤ã«ã®èªã¿è¾¼ã¿æ©è½ãåãè¾¼ãã«ã¯ï¼Xerces-C++ XML 411 Parserãå¿ 412 è¦ã«ãªãï¼ï¼ 413 414 ã¾ãï¼ãã¹ãã·ã¹ãã ã«ãã£ã¦ã¯ï¼æé©åã¬ãã«ãä¸ããã¨æ£ããã³ã³ãã¤ã« 415 ã§ããªããã¨ãç¥ããã¦ããï¼ãã®ãããªå ´åã«ã¯ï¼æé©åã¬ãã«ãä¸ãããï¼ 416 æé©åãææ¢ããããã«ï¼Makefileãä¿®æ£ããå¿ 417 è¦ãããï¼ 418 419 ãªãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ä½¿ç¨æ¹æ³ã«ã¤ãã¦ã¯ï¼ãï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ 420 ã®ä½¿ãæ¹ãã®ç« ã§èª¬æããï¼ 421 422 3.3 ãµã³ãã«ããã°ã©ã ã®æ§ç¯ã¨å®è¡ 423 424 次ã«ï¼ASPã«ã¼ãã«ä¸ã§åä½ãããµã³ãã«ããã°ã©ã ãæ§ç¯ããæ¹æ³ã説æããï¼ 425 426 ã¾ãï¼ãµã³ãã«ããã°ã©ã ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªãä½æ 427 ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªãããå®è¡ããï¼ä¾ãã°ï¼ãªãã¸ã§ã¯ããã¡ 428 ã¤ã«ãç½®ããã£ã¬ã¯ããªãï¼ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãå±éãããã£ã¬ 429 ã¯ããªã®ä¸ã®OBJã¨ããå称ã®ãã£ã¬ã¯ããªã«ããå ´åã«ã¯ï¼æ¬¡ã®ã³ãã³ãã 430 å®è¡ããï¼ãã£ã¬ã¯ããªã®å ´æã¨å称ã¯ä»»æã«æ±ºãã¦ããï¼ï¼ 338 ただし,Boostをインストールしたディレクトリおよび名称が標準で想定してい 339 るものとは違う場合には,configureの--with-headersおよび--with-libraries 340 オプションにより,ヘッダファイルおよびライブラリの置かれたディレクトリ 341 を指定する必要がある.--without-xmlは,AUTOSAR XMLファイルの読み込み機 342 能(ASPカーネル用には必要ない)を取り込まないことを指定するオプションで 343 ある(AUTOSAR XMLファイルの読み込み機能を取り込むには,Xerces-C++ XML 344 Parserが必要になる). 345 346 また,ホストシステムによっては,最適化レベルを上げると正しくコンパイル 347 できないことが知られている.そのような場合には,最適化レベルを下げるか, 348 最適化を抑止するように,Makefileを修正する必要がある. 349 350 なお,コンフィギュレータの使用方法については,「7.コンフィギュレータ 351 の使い方」の章で説明する. 352 353 3.3 サンプルプログラムの構築と実行 354 355 次に,ASPカーネル上で動作するサンプルプログラムを構築する方法を説明する. 356 357 まず,サンプルプログラムのオブジェクトファイルを置くディレクトリを作成 358 し,コンフィギュレーションスクリプトを実行する.例えば,オブジェクトファ 359 イルを置くディレクトリを,ASPカーネルのソースファイルを展開したディレ 360 クトリの下のOBJという名称のディレクトリにする場合には,次のコマンドを 361 実行する(ディレクトリの場所と名称は任意に決めてよい). 431 362 432 363 % cd asp 433 364 % mkdir OBJ 434 365 % cd OBJ 435 % perl ../configure -T <ã¿ã¼ã²ããç¥ç§°> 436 437 ããã§ï¼<ã¿ã¼ã²ããç¥ç§°>ã¯ï¼targetãã£ã¬ã¯ããªã®ä¸ã«ç½®ããã¦ããã¿ã¼ã²ã 438 ãä¾åé¨ãã£ã¬ã¯ããªã®å称ã§ããï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã®ãª 439 ãã·ã§ã³ã«ã¤ãã¦ã¯ï¼ãï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã®ä½¿ãæ¹ãã® 440 ç« ã§èª¬æããï¼ 441 442 ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã®å®è¡ã«ããï¼ã«ã¬ã³ããã£ã¬ã¯ããªã«ã¯ï¼ 443 ãµã³ãã«ããã°ã©ã ãæ§ç¯ããããã®Makefileï¼ãµã³ãã«ããã°ã©ã ç¨ã®ã³ã³ 444 ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ï¼sample1.cfgï¼ï¼ãµã³ãã«ããã°ã©ã æ¬ä½ 445 ï¼sample1.hããã³sample1.cï¼ãçæãããï¼ 446 447 ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã®å®è¡å¾ï¼å¿ 448 è¦ã§ããã°Makefileãä¿®æ£ã 449 ãï¼Makefileã®ä¿®æ£æ¹æ³ã«ã¤ãã¦ã¯ï¼ãï¼ï¼Makefileã®ä¿®æ£æ¹æ³ãã®ç« ã§èª¬æ 450 ããï¼ 451 452 ãã®å¾ï¼make dependã§ä¾åé¢ä¿ãã¡ã¤ã«ï¼Makefile.dependï¼ãçæããå¾ï¼ 453 makeã³ãã³ãã«ãããµã³ãã«ããã°ã©ã ã®ãã¼ãã¢ã¸ã¥ã¼ã«ï¼aspã¾ã㯠454 asp.exeï¼ãçæã§ããï¼ä¾åé¢ä¿ãã¡ã¤ã«ã®çæã«ã¯è¥å¹²æéããããï¼ 366 % perl ../configure -T <ターゲット略称> 367 368 ここで,<ターゲット略称>は,targetディレクトリの下に置かれているターゲッ 369 ト依存部ディレクトリの名称である.コンフィギュレーションスクリプトのオ 370 プションについては,「5.コンフィギュレーションスクリプトの使い方」の 371 章で説明する. 372 373 コンフィギュレーションスクリプトの実行により,カレントディレクトリには, 374 サンプルプログラムを構築するためのMakefile,サンプルプログラム用のコン 375 フィギュレーションファイル(sample1.cfg),サンプルプログラム本体 376 (sample1.hおよびsample1.c)が生成される. 377 378 コンフィギュレーションスクリプトの実行後,必要であればMakefileを修正す 379 る.Makefileの修正方法については,「6.Makefileの修正方法」の章で説明 380 する. 381 382 その後,make dependで依存関係ファイル(Makefile.depend)を生成した後, 383 makeコマンドによりサンプルプログラムのロードモジュール(aspまたは 384 asp.exe)が生成できる.依存関係ファイルの生成には若干時間がかかる. 455 385 456 386 % make depend 457 387 % make 458 388 459 ããã§æ§ç¯ãããµã³ãã«ããã°ã©ã ï¼sample1.hï¼sample1.cï¼sample1.cfgï¼ 460 ã¯ï¼ASPã«ã¼ãã«ã®åºæ¬çãªåä½ã確èªããããã®ãã®ã§ããï¼ãã®ããã°ã© 461 ã ã®æ¦è¦èª¬æã¯ï¼sample1.cã®å 462 é ã®ã³ã¡ã³ãã«ããï¼ 463 464 3.4 ã«ã¼ãã«ãé¢æ°åä½ã§ã©ã¤ãã©ãªåããæ¹æ³ 465 466 åç¯ã®æé ã§ã¯ï¼ã«ã¼ãã«ããã¡ã¤ã«åä½ã§ã³ã³ãã¤ã«ãï¼ã©ã¤ãã©ãªåã㦠467 ãããï¼ã«ã¼ãã«ã®ã³ã¼ããµã¤ãºã縮å°ããããã«ã¯ï¼ä½¿ç¨ããªããµã¼ãã¹ã³ã¼ 468 ã«ã¯ãªã³ã¯ããªãæ¹ãæã¾ããï¼ããã§ASPã«ã¼ãã«ã§ã¯ï¼ã«ã¼ãã«ãé¢æ°åä½ 469 ã§ã³ã³ãã¤ã«ãï¼ã©ã¤ãã©ãªåããæ¹æ³ãç¨æãã¦ããï¼ 470 471 ãã®æ¹æ³ã§ãµã³ãã«ããã°ã©ã ãæ§ç¯ããã«ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ 472 ãªããã«ï¼ãããæ示ãããªãã·ã§ã³ï¼-fï¼ãä»å ããã ãã§ããï¼ 389 ここで構築したサンプルプログラム(sample1.h,sample1.c,sample1.cfg) 390 は,ASPカーネルの基本的な動作を確認するためのものである.このプログラ 391 ムの概要説明は,sample1.cの先頭のコメントにある. 392 393 3.4 カーネルを関数単位でライブラリ化する方法 394 395 前節の手順では,カーネルをファイル単位でコンパイルし,ライブラリ化して 396 いたが,カーネルのコードサイズを縮小するためには,使用しないサービスコー 397 ルはリンクしない方が望ましい.そこでASPカーネルでは,カーネルを関数単位 398 でコンパイルし,ライブラリ化する方法を用意している. 399 400 この方法でサンプルプログラムを構築するには,コンフィギュレーションスク 401 リプトに,それを指示するオプション(-f)を付加するだけでよい. 473 402 474 403 % mkdir OBJ_LIB 475 404 % cd OBJ_LIB 476 % perl ../configure -T <ã¿ã¼ã²ããç¥ç§°> -f 477 478 ããã§ï¼OBJ_LIBã¨ãããã£ã¬ã¯ããªã®å ´æã¨å称ã¯ï¼ä»»æã«æ±ºãã¦ããï¼ãã 479 以éã®æé ã¯ï¼åç¯ã¨åãã§ããï¼ 480 481 3.5 ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ãã«ãå¥ã 482 ã«æ§ç¯ããæ¹æ³ 483 484 åç¯ã§èª¬æããæ¹æ³ã§ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ãã«ãåæã«çæããããï¼ 485 ãªãã¸ã§ã¯ããã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªã«é常ã«å¤ãã®ãã¡ã¤ã«ãä½æãã 486 ã¦ï¼æ±ãã«ãããªãï¼ããã§ï¼ã«ã¼ãã«ãä¿®æ£ããé »åº¦ãä½ãå ´åã«ã¯ï¼ã«ã¼ 487 ãã«ã¯äºåã«æ§ç¯ãã¦ããï¼å¾ã§ã¢ããªã±ã¼ã·ã§ã³ã ããæ§ç¯ããæ¹æ³ãç¨æ 488 ãã¦ããï¼ä»¥ä¸ã§ã¯ï¼ãµã³ãã«ããã°ã©ã ãæ§ç¯ãä¾ã«ï¼ãã®æé ã«ã¤ãã¦èª¬ 489 æããï¼ 490 491 ã¾ãï¼ã«ã¼ãã«ãæ§ç¯ãããã£ã¬ã¯ããªãä½æãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ 492 ã¯ãªãããå®è¡ããï¼ä¾ãã°ï¼ã«ã¼ãã«ãæ§ç¯ãããã£ã¬ã¯ããªãï¼ASPã«ã¼ 493 ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãå±éãããã£ã¬ã¯ããªã®ä¸ã®KERNEL_LIBã¨ããå称㮠494 ãã£ã¬ã¯ããªã«ããå ´åã«ã¯ï¼æ¬¡ã®ã³ãã³ããå®è¡ããï¼ãã£ã¬ã¯ããªã®å ´æ 495 ã¨å称ã¯ä»»æã«æ±ºãã¦ããï¼ï¼ 405 % perl ../configure -T <ターゲット略称> -f 406 407 ここで,OBJ_LIBというディレクトリの場所と名称は,任意に決めてよい.これ 408 以降の手順は,前節と同じである. 409 410 3.5 アプリケーションとカーネルを別々に構築する方法 411 412 前節で説明した方法では,アプリケーションとカーネルを同時に生成するため, 413 オブジェクトファイルを置くディレクトリに非常に多くのファイルが作成され 414 て,扱いにくくなる.そこで,カーネルを修正する頻度が低い場合には,カー 415 ネルは事前に構築しておき,後でアプリケーションだけを構築する方法を用意 416 している.以下では,サンプルプログラムを構築を例に,その手順について説 417 明する. 418 419 まず,カーネルを構築するディレクトリを作成し,コンフィギュレーションス 420 クリプトを実行する.例えば,カーネルを構築するディレクトリを,ASPカー 421 ネルのソースファイルを展開したディレクトリの下のKERNEL_LIBという名称の 422 ディレクトリにする場合には,次のコマンドを実行する(ディレクトリの場所 423 と名称は任意に決めてよい). 496 424 497 425 % mkdir KERNEL_LIB 498 426 % cd KERNEL_LIB 499 % perl ../configure -T < ã¿ã¼ã²ããç¥ç§°> -f500 501 ããã«ããï¼ã«ã¼ãã«ãæ§ç¯ãããã£ã¬ã¯ããªã«ï¼Makefileï¼sample1.cfgï¼ 502 sample1.h ï¼sample1.cãçæããããï¼Makefile以å¤ã¯å®è³ªçã«ã¯ä½¿ç¨ããªãï¼503 504 make depend ã§ä¾åé¢ä¿ãã¡ã¤ã«ï¼Makefile.dependï¼ãçæããå¾ï¼make505 libkernel.a ã«ããã«ã¼ãã«ã©ã¤ãã©ãªï¼libkernel.aï¼ãçæã§ããï¼427 % perl ../configure -T <ターゲット略称> -f 428 429 これにより,カーネルを構築するディレクトリに,Makefile,sample1.cfg, 430 sample1.h,sample1.cが生成されるが,Makefile以外は実質的には使用しない. 431 432 make dependで依存関係ファイル(Makefile.depend)を生成した後,make 433 libkernel.aによりカーネルライブラリ(libkernel.a)が生成できる. 506 434 507 435 % make depend 508 436 % make libkernel.a 509 437 510 次ã«ï¼ã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ãããã£ã¬ã¯ããªãä½æãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ 511 ã·ã§ã³ã¹ã¯ãªãããå®è¡ããï¼ä¾ãã°ï¼ã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ãããã£ã¬ã¯ 512 ããªãï¼ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãå±éãããã£ã¬ã¯ããªã®ä¸ã®APLã¨ã 513 ãå称ã®ãã£ã¬ã¯ããªã«ããå ´åã«ã¯ï¼æ¬¡ã®ã³ãã³ããå®è¡ããï¼ãã£ã¬ã¯ã 514 ãªã®å ´æã¨å称ã¯ä»»æã«æ±ºãã¦ããï¼ï¼ 438 次に,アプリケーションを構築するディレクトリを作成し,コンフィギュレー 439 ションスクリプトを実行する.例えば,アプリケーションを構築するディレク 440 トリを,ASPカーネルのソースファイルを展開したディレクトリの下のAPLとい 441 う名称のディレクトリにする場合には,次のコマンドを実行する(ディレクト 442 リの場所と名称は任意に決めてよい). 515 443 516 444 % cd .. 517 445 % mkdir APL 518 446 % cd APL 519 % perl ../configure -T < ã¿ã¼ã²ããç¥ç§°> -L ../KERNEL_LIB520 521 ããã§-Lãªãã·ã§ã³ã«ã¯ï¼ã«ã¼ãã«ãæ§ç¯ãããã£ã¬ã¯ããªã®ãã¹ãæå®ããï¼ 522 523 æå¾ã«ï¼make dependã§ä¾åé¢ä¿ãã¡ã¤ã«ï¼Makefile.dependï¼ãçæããå¾ï¼ 524 make ã³ãã³ãã«ãããµã³ãã«ããã°ã©ã ã®ãã¼ãã¢ã¸ã¥ã¼ã«ï¼aspã¾ãã¯525 asp.exe ï¼ãçæã§ããï¼447 % perl ../configure -T <ターゲット略称> -L ../KERNEL_LIB 448 449 ここで-Lオプションには,カーネルを構築したディレクトリのパスを指定する. 450 451 最後に,make dependで依存関係ファイル(Makefile.depend)を生成した後, 452 makeコマンドによりサンプルプログラムのロードモジュール(aspまたは 453 asp.exe)が生成できる. 526 454 527 455 % make depend 528 456 % make 529 457 530 ãã®æé ã§ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³æ§ç¯æã«ã¯ã«ã¼ãã«ã®åæ§ç¯ãå¿ 531 è¦ããã§ã 532 ã¯ããªãããï¼ã«ã¼ãã«ã®ã½ã¼ã¹ã³ã¼ããä¿®æ£ããå ´åã«ã¯ï¼ã«ã¼ãã«ãæ§ç¯ 533 ãããã£ã¬ã¯ããªã§make libkernel.aãåå®è¡ããå¿ 534 è¦ãããï¼ 535 536 以ä¸ã§ã¯ï¼ã«ã¼ãã«ã¨ã¢ããªã±ã¼ã·ã§ã³ãå¥ã 537 ã®ãã£ã¬ã¯ããªã§æ§ç¯ãããï¼ 538 -Lãªãã·ã§ã³ã«ã«ã¬ã³ããã£ã¬ã¯ããªï¼ãã ãï¼"."ã¨ããè¨è¿°ã§ã¯ä¸å¯ï¼ãæ 539 å®ãããã¨ã§ï¼ã«ã¼ãã«ã¨ã¢ããªã±ã¼ã·ã§ã³ãåããã£ã¬ã¯ããªã§å¥ã 540 ã«æ§ç¯ 541 ãããã¨ãã§ããï¼å 542 ·ä½çã«ã¯ï¼æ¬¡ã®æé ã¨ãªãï¼ 458 この手順では,アプリケーション構築時にはカーネルの再構築が必要かチェッ 459 クしないため,カーネルのソースコードを修正した場合には,カーネルを構築 460 したディレクトリでmake libkernel.aを再実行する必要がある. 461 462 以上では,カーネルとアプリケーションを別々のディレクトリで構築したが, 463 -Lオプションにカレントディレクトリ(ただし,"."という記述では不可)を指 464 定することで,カーネルとアプリケーションを同じディレクトリで別々に構築 465 することもできる.具体的には,次の手順となる. 543 466 544 467 % mkdir OBJ 545 468 % cd OBJ 546 % perl ../configure -T < ã¿ã¼ã²ããç¥ç§°> -L ../OBJ469 % perl ../configure -T <ターゲット略称> -L ../OBJ 547 470 % make depend 548 471 % make libkernel.a … … 550 473 % make 551 474 552 ããã§ï¼make cleankernelã¯ï¼ã«ã¼ãã«ã©ã¤ãã©ãªãçæããããã®ä¸éãã¡ 553 ã¤ã«ãåé¤ãããã®ã§ããï¼ãã®æé ã§ã¯ï¼make dependã«ããã«ã¼ãã«ã©ã¤ 554 ãã©ãªã«é¢ããä¾åé¢ä¿ãçæããªãããï¼ã«ã¼ãã«ã®ã½ã¼ã¹ã³ã¼ããä¿®æ£ã 555 ãå ´åã«ã¯ï¼å¿ 556 ãmake cleankernelï¼ã¾ãã¯ï¼make cleanï¼ãã¦ããï¼make 557 libkernel.aããå¿ 558 è¦ãããã®ã§æ³¨æãããã¨ï¼ 559 560 ãªãï¼make realcleanããã¨ï¼make dependã¨makeã«ããçæãããã¡ã¤ã«ãã 561 ã¹ã¦åé¤ããï¼ããã«å¯¾ãã¦ï¼make cleanã§ã¯ï¼make dependã«ããçæããä¾ 562 åé¢ä¿ãã¡ã¤ã«ã¯åé¤ããªãï¼ 563 564 565 ï¼ï¼ãã£ã¬ã¯ããªæ§æã»ãã¡ã¤ã«æ§æ 566 567 4.1 é 568 å¸ããã±ã¼ã¸ã®ãã£ã¬ã¯ããªæ§æ 569 570 include/ ã¢ããªã±ã¼ã·ã§ã³åãããããã¡ã¤ã« 571 kernel/ ã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã« 572 syssvc/ ã·ã¹ãã ãµã¼ãã¹ã®ããããã¡ã¤ã«ï¼ã½ã¼ã¹ãã¡ã¤ã« 573 library/ ãµãã¼ãã©ã¤ãã©ãªã®ã½ã¼ã¹ãã¡ã¤ã« 574 target/ ã¿ã¼ã²ããä¾åé¨ 575 arch/ ã¿ã¼ã²ããä¾åé¨ã®å 576 ±éé¨å 577 gcc/ GCCéçºç°å¢ä¾åé¨ 578 logtrace/ ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ã 579 pdic/ PDICï¼ããã¤ã¹ãã©ã¤ãã®OSéä¾åé¨åï¼ 580 utils/ ã¦ã¼ãã£ãªãã£ããã°ã©ã 581 sample/ ãµã³ãã«ããã°ã©ã ã¨Makefile 582 doc/ ããã¥ã¡ã³ã 583 test/ ãã¹ãããã°ã©ã 584 extension/ æ¡å¼µããã±ã¼ã¸ 585 586 4.2 ã¿ã¼ã²ããéä¾åé¨ã®ãã¡ã¤ã«æ§æ 587 588 ã¿ã¼ã²ããéä¾åé¨ï¼ãã¹ãããã°ã©ã ã¨æ¡å¼µããã±ã¼ã¸ã¯é¤ãï¼ã®åãã¡ã¤ 589 ã«ã®æ¦è¦ã¯æ¬¡ã®éãï¼ 590 591 README.txt TOPPERS/ASPã«ã¼ãã«ã®ç°¡åãªç´¹ä» 592 configure ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããï¼GNUéçºç°å¢ç¨ï¼ 593 MANIFEST åå¥ããã±ã¼ã¸ã®ãã¡ã¤ã«ãªã¹ã 475 ここで,make cleankernelは,カーネルライブラリを生成するための中間ファ 476 イルを削除するものである.この手順では,make dependによりカーネルライ 477 ブラリに関する依存関係を生成しないため,カーネルのソースコードを修正し 478 た場合には,必ずmake cleankernel(または,make clean)してから,make 479 libkernel.aする必要があるので注意すること. 480 481 なお,make realcleanすると,make dependとmakeにより生成したファイルをす 482 べて削除する.それに対して,make cleanでは,make dependにより生成した依 483 存関係ファイルは削除しない. 484 485 486 4.ディレクトリ構成・ファイル構成 487 488 4.1 配布パッケージのディレクトリ構成 489 490 include/ アプリケーション向けヘッダファイル 491 kernel/ カーネルのソースファイル 492 syssvc/ システムサービスのヘッダファイル,ソースファイル 493 library/ サポートライブラリのソースファイル 494 target/ ターゲット依存部 495 arch/ ターゲット依存部の共通部分 496 gcc/ GCC開発環境依存部 497 logtrace/ トレースログ記録のサンプルコード 498 pdic/ PDIC(デバイスドライバのOS非依存部分) 499 utils/ ユーティリティプログラム 500 sample/ サンプルプログラムとMakefile 501 doc/ ドキュメント 502 test/ テストプログラム 503 extension/ 拡張パッケージ 504 505 4.2 ターゲット非依存部のファイル構成 506 507 ターゲット非依存部(テストプログラムと拡張パッケージは除く)の各ファイ 508 ルの概要は次の通り. 509 510 README.txt TOPPERS/ASPカーネルの簡単な紹介 511 configure コンフィギュレーションスクリプト(GNU開発環境用) 512 MANIFEST 個別パッケージのファイルリスト 594 513 595 514 include/ 596 kernel.h ASPã«ã¼ãã«ã使ç¨ããããã®å®ç¾© 597 sil.h ã·ã¹ãã ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ã¤ã使ç¨ããããã®å®ç¾© 598 t_stddef.h TOPPERSå 599 ±éããããã¡ã¤ã« 600 itron.h ITRONä»æ§å 601 ±éè¦å®ã®ãã¼ã¿åã»å®æ°ã»ãã¯ã 602 t_syslog.h ã·ã¹ãã ãã°åºåãè¡ãããã®å®ç¾© 603 t_stdlib.h åºæ¬çãªã©ã¤ãã©ãªé¢æ°ã使ç¨ããããã®å®ç¾© 604 queue.h ãã¥ã¼æä½ã©ã¤ãã©ãªã使ç¨ããããã®å®ç¾© 605 test_lib.h ãã¹ãããã°ã©ã ç¨ã©ã¤ãã©ãªã使ç¨ããããã®å®ç¾© 606 histogram.h å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã使ç¨ããããã®å®ç¾© 607 log_output.h ã·ã¹ãã ãã°ã®ãã©ã¼ãããåºåã使ç¨ããããã®å®ç¾© 515 kernel.h ASPカーネルを使用するための定義 516 sil.h システムインタフェースレイヤを使用するための定義 517 t_stddef.h TOPPERS共通ヘッダファイル 518 itron.h ITRON仕様共通規定のデータ型・定数・マクロ 519 t_syslog.h システムログ出力を行うための定義 520 t_stdlib.h 基本的なライブラリ関数を使用するための定義 521 queue.h キュー操作ライブラリを使用するための定義 522 test_lib.h テストプログラム用ライブラリを使用するための定義 523 histogram.h 実行時間分布集計モジュールを使用するための定義 524 log_output.h システムログのフォーマット出力を使用するための定義 608 525 609 526 kernel/ 610 Makefile.kernel ã«ã¼ãã«ã®ãã¡ã¤ã«æ§æã®å®ç¾© 611 kernel_impl.h ã«ã¼ãã«å®è£ 612 ç¨æ¨æºããããã¡ã¤ã« 613 kernel_int.h kernel_cfg.cç¨ã®ããããã¡ã¤ã« 614 kernel_rename.def ã«ã¼ãã«ã®å 615 é¨èå¥åã®ãªãã¼ã å®ç¾© 616 kernel_rename.h ã«ã¼ãã«ã®å 617 é¨èå¥åã®ãªãã¼ã 618 kernel_unrename.h ã«ã¼ãã«ã®å 619 é¨èå¥åã®ãªãã¼ã è§£é¤ 620 kernel_api.csv ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®éçAPIãã¼ãã« 621 kernel_def.csv ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®å¤åå¾ã·ã³ãã«ãã¼ãã« 622 kernel.tf ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã« 623 kernel_check.tf ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã« 624 genoffset.tf ãªãã»ãããã¡ã¤ã«çæç¨ã®ãã³ãã¬ã¼ããã¡ã¤ã« 625 allfunc.h ãã¹ã¦ã®é¢æ°ãã³ã³ãã¤ã«ããããã®å®ç¾© 626 check.h ã¨ã©ã¼ãã§ãã¯ç¨ãã¯ã 627 startup.c ã«ã¼ãã«ã®åæåã¨çµäºå¦ç 628 task.h ã¿ã¹ã¯æä½ã«ã¼ãã³é¢é£ã®å®ç¾© 629 task.c ã¿ã¹ã¯æä½ã«ã¼ãã³ 630 wait.h å¾ 631 ã¡ç¶æ 632 æä½ã«ã¼ãã³é¢é£ã®å®ç¾© 633 wait.c å¾ 634 ã¡ç¶æ 635 æä½ã«ã¼ãã³ 636 time_event.h ã¿ã¤ã ã¤ãã³ã管çé¢é£ã®å®ç¾© 637 time_event.c ã¿ã¤ã ã¤ãã³ã管ç 638 task_manage.c ã¿ã¹ã¯ç®¡çæ©è½ 639 task_refer.c ã¿ã¹ã¯ç¶æ 640 åç 641 §æ©è½ 642 task_sync.c ã¿ã¹ã¯ä»å±åææ©è½ 643 task_except.c ã¿ã¹ã¯ä¾å¤å¦çæ©è½ 644 semaphore.h ã»ããã©æ©è½é¢é£ã®å®ç¾© 645 semaphore.c ã»ããã©æ©è½ 646 eventflag.h ã¤ãã³ããã©ã°æ©è½é¢é£ã®å®ç¾© 647 eventflag.c ã¤ãã³ããã©ã°æ©è½ 648 dataqueue.h ãã¼ã¿ãã¥ã¼æ©è½é¢é£ã®å®ç¾© 649 dataqueue.c ãã¼ã¿ãã¥ã¼æ©è½ 650 pridataq.h åªå 651 度ãã¼ã¿ãã¥ã¼æ©è½é¢é£ã®å®ç¾© 652 pridataq.c åªå 653 度ãã¼ã¿ãã¥ã¼æ©è½ 654 mailbox.h ã¡ã¼ã«ããã¯ã¹æ©è½é¢é£ã®å®ç¾© 655 mailbox.c ã¡ã¼ã«ããã¯ã¹æ©è½ 656 mempfix.h åºå®é·ã¡ã¢ãªãã¼ã«æ©è½é¢é£ã®å®ç¾© 657 mempfix.c åºå®é·ã¡ã¢ãªãã¼ã«æ©è½ 658 time_manage.c ã·ã¹ãã æå»ç®¡çæ©è½ 659 cyclic.h å¨æãã³ãã©æ©è½é¢é£ã®å®ç¾© 660 cyclic.c å¨æãã³ãã©æ©è½ 661 alarm.h ã¢ã©ã¼ã ãã³ãã©æ©è½é¢é£ã®å®ç¾© 662 alarm.c ã¢ã©ã¼ã ãã³ãã©æ©è½ 663 sys_manage.c ã·ã¹ãã ç¶æ 664 管çæ©è½ 665 interrupt.h å²è¾¼ã¿ç®¡çæ©è½é¢é£ã®å®ç¾© 666 interrupt.c å²è¾¼ã¿ç®¡çæ©è½ 667 exception.h CPUä¾å¤ç®¡çæ©è½é¢é£ã®å®ç¾© 668 exception.c CPUä¾å¤ç®¡çæ©è½ 527 Makefile.kernel カーネルのファイル構成の定義 528 kernel_impl.h カーネル実装用標準ヘッダファイル 529 kernel_int.h kernel_cfg.c用のヘッダファイル 530 kernel_rename.def カーネルの内部識別名のリネーム定義 531 kernel_rename.h カーネルの内部識別名のリネーム 532 kernel_unrename.h カーネルの内部識別名のリネーム解除 533 kernel_api.csv コンフィギュレータの静的APIテーブル 534 kernel_def.csv コンフィギュレータの値取得シンボルテーブル 535 kernel.tf コンフィギュレータのパス2のテンプレートファイル 536 kernel_check.tf コンフィギュレータのパス3のテンプレートファイル 537 genoffset.tf オフセットファイル生成用のテンプレートファイル 538 allfunc.h すべての関数をコンパイルするための定義 539 check.h エラーチェック用マクロ 540 startup.c カーネルの初期化と終了処理 541 task.h タスク操作ルーチン関連の定義 542 task.c タスク操作ルーチン 543 wait.h 待ち状態操作ルーチン関連の定義 544 wait.c 待ち状態操作ルーチン 545 time_event.h タイムイベント管理関連の定義 546 time_event.c タイムイベント管理 547 task_manage.c タスク管理機能 548 task_refer.c タスク状態参照機能 549 task_sync.c タスク付属同期機能 550 task_except.c タスク例外処理機能 551 semaphore.h セマフォ機能関連の定義 552 semaphore.c セマフォ機能 553 eventflag.h イベントフラグ機能関連の定義 554 eventflag.c イベントフラグ機能 555 dataqueue.h データキュー機能関連の定義 556 dataqueue.c データキュー機能 557 pridataq.h 優先度データキュー機能関連の定義 558 pridataq.c 優先度データキュー機能 559 mailbox.h メールボックス機能関連の定義 560 mailbox.c メールボックス機能 561 mempfix.h 固定長メモリプール機能関連の定義 562 mempfix.c 固定長メモリプール機能 563 time_manage.c システム時刻管理機能 564 cyclic.h 周期ハンドラ機能関連の定義 565 cyclic.c 周期ハンドラ機能 566 alarm.h アラームハンドラ機能関連の定義 567 alarm.c アラームハンドラ機能 568 sys_manage.c システム状態管理機能 569 interrupt.h 割込み管理機能関連の定義 570 interrupt.c 割込み管理機能 571 exception.h CPU例外管理機能関連の定義 572 exception.c CPU例外管理機能 669 573 670 574 syssvc/ 671 banner.h ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåã®ããã®å®ç¾©672 banner.c ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºå673 banner.cfg ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåã®ã³ã³ãã£ã®ã¥ã¬ã¼674 ã·ã§ã³ãã¡ã¤ã«675 logtask.h ã·ã¹ãã ãã°ã¿ã¹ã¯ã使ç¨ããããã®å®ç¾©676 logtask.c ã·ã¹ãã ãã°ã¿ã¹ã¯677 logtask.cfg ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«678 serial.h ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã使ç¨ããããã®å®ç¾©679 serial.c ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ã680 serial.cfg ã·ãªã¢ã«ãã©ã¤ãã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«681 syslog.h ã·ã¹ãã ãã°æ©è½ã使ç¨ããããã®å®ç¾©682 syslog.c ã·ã¹ãã ãã°æ©è½683 syslog.cfg ã·ã¹ãã ãã°æ©è½ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«575 banner.h カーネル起動メッセージの出力のための定義 576 banner.c カーネル起動メッセージの出力 577 banner.cfg カーネル起動メッセージの出力のコンフィギュレー 578 ションファイル 579 logtask.h システムログタスクを使用するための定義 580 logtask.c システムログタスク 581 logtask.cfg システムログタスクのコンフィギュレーションファイル 582 serial.h シリアルインタフェースドライバを使用するための定義 583 serial.c シリアルインタフェースドライバ 584 serial.cfg シリアルドライバのコンフィギュレーションファイル 585 syslog.h システムログ機能を使用するための定義 586 syslog.c システムログ機能 587 syslog.cfg システムログ機能のコンフィギュレーションファイル 684 588 685 589 library/ 686 histogram.c å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«687 log_output.c ã·ã¹ãã ãã°ã®ãã©ã¼ãããåºå688 strerror.c ã¨ã©ã¼ã¡ãã»ã¼ã¸æååãè¿ãé¢æ°689 t_perror.c ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®åºå690 test_lib.c ãã¹ãããã°ã©ã ç¨ã©ã¤ãã©ãª691 vasyslog.c å¯å¤æ°å¼æ°ã®ã·ã¹ãã ãã°ã©ã¤ãã©ãª590 histogram.c 実行時間分布集計モジュール 591 log_output.c システムログのフォーマット出力 592 strerror.c エラーメッセージ文字列を返す関数 593 t_perror.c エラーメッセージの出力 594 test_lib.c テストプログラム用ライブラリ 595 vasyslog.c 可変数引数のシステムログライブラリ 692 596 693 597 arch/gcc/ 694 MANIFEST åå¥ããã±ã¼ã¸ã®ãã¡ã¤ã«ãªã¹ã695 tool_stddef.h t_stddef.h ã®éçºç°å¢ä¾åé¨ï¼GCCç¨ï¼598 MANIFEST 個別パッケージのファイルリスト 599 tool_stddef.h t_stddef.hの開発環境依存部(GCC用) 696 600 697 601 arch/logtrace/ 698 MANIFEST åå¥ããã±ã¼ã¸ã®ãã¡ã¤ã«ãªã¹ã699 trace_config.h ãã¬ã¼ã¹ãã°ã«é¢ããè¨å®700 trace_config.c ãã¬ã¼ã¹ãã°æ©è½701 trace_dump.c ãã¬ã¼ã¹ãã°ã®ãã³ã602 MANIFEST 個別パッケージのファイルリスト 603 trace_config.h トレースログに関する設定 604 trace_config.c トレースログ機能 605 trace_dump.c トレースログのダンプ 702 606 703 607 utils/ 704 applyrename ãã¡ã¤ã«ã«ãªãã¼ã ãé©ç¨705 genoffset offset.h ã®çæï¼GNUéçºç°å¢ç¨ï¼706 genrename ãªãã¼ã ããããã¡ã¤ã«ã®çæ707 gentest ãã¹ãããã°ã©ã ã®çæ708 makedep ä¾åé¢ä¿ãªã¹ãã®çæï¼GNUéçºç°å¢ç¨ï¼709 makerelease ãªãªã¼ã¹ããã±ã¼ã¸ã®çæ608 applyrename ファイルにリネームを適用 609 genoffset offset.hの生成(GNU開発環境用) 610 genrename リネームヘッダファイルの生成 611 gentest テストプログラムの生成 612 makedep 依存関係リストの生成(GNU開発環境用) 613 makerelease リリースパッケージの生成 710 614 711 615 sample/ 712 Makefile ãµã³ãã«ã®Makefileï¼GNUéçºç°å¢ç¨ï¼713 sample1.h ãµã³ãã«ããã°ã©ã (1)ã«é¢ããå®ç¾©714 sample1.c ãµã³ãã«ããã°ã©ã(1)715 sample1.cfg ãµã³ãã«ããã°ã©ã (1)ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«616 Makefile サンプルのMakefile(GNU開発環境用) 617 sample1.h サンプルプログラム(1)に関する定義 618 sample1.c サンプルプログラム(1) 619 sample1.cfg サンプルプログラム(1)のコンフィギュレーションファイル 716 620 717 621 doc/ 718 user.txt ã¦ã¼ã¶ã¼ãºããã¥ã¢ã« 719 asp_spec.txt TOPPERS/ASPã«ã¼ãã«ã®ä»æ§æ¦è¦ 720 extension.txt æ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ã¬ã¤ã 721 porting.txt ã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ã 722 configurator.txt ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ä»æ§ 723 design.txt è¨è¨ã¡ã¢ 724 version.txt å¤æ´å±¥æ´ 725 726 727 ï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã®ä½¿ãæ¹ 728 729 ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããï¼configureï¼ã¯ï¼ASPã«ã¼ãã«ããã³ã¢ã 730 ãªã±ã¼ã·ã§ã³ããã°ã©ã ãæ§ç¯ããããã«å¿ 731 è¦ãªåºæ¬çãªã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ 732 ã³ãè¡ãããã®ããã°ã©ã ã§ããï¼ 733 734 ASPã«ã¼ãã«ãç¨ãã¦ã¢ããªã±ã¼ã·ã§ã³ãä½æããå ´åã«ã¯ï¼ã¾ããªãã¸ã§ã¯ã 735 ãã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªãä½æãï¼ãã®ãã£ã¬ã¯ããªã§ã³ã³ãã£ã®ã¥ã¬ã¼ 736 ã·ã§ã³ã¹ã¯ãªãããå®è¡ããï¼ãªãã¸ã§ã¯ããã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªã®å ´ 737 æã¨å称ã¯ï¼ä»»æã«æ±ºãã¦ããï¼ 738 739 ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«å¯¾ãããªãã·ã§ã³ã¯æ¬¡ã®éãï¼ 740 741 -T <ã¿ã¼ã²ããç¥ç§°> 742 ã¿ã¼ã²ããã·ã¹ãã ã®å称ãï¼targetãã£ã¬ã¯ããªã®ä¸ã«ç½®ããã¦ã 743 ãã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã®å称ã§æå®ããï¼å¿ 744 é ï¼ï¼ 745 746 -A <ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã å> 747 ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®å称ãæå®ããï¼çç¥ããå ´åã«ã¯ï¼ 748 ãµã³ãã«ããã°ã©ã ï¼sample1ï¼ã¨ãªãï¼ 749 750 -a <ã¢ããªã±ã¼ã·ã§ã³ã®ãã£ã¬ã¯ããªå> 751 ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®ã½ã¼ã¹ãã¡ã¤ã«ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ 752 ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ãé¤ãï¼ãç½®ãããã£ã¬ã¯ããªåãæå®ããï¼ç 753 ç¥ããå ´åã«ã¯ï¼ãªãã¸ã§ã¯ããã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªã«ç½®ãã 754 ã¦ãããã¨ãä»®å®ããï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã¯ï¼ 755 ãªãã¸ã§ã¯ããã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªã«ç½®ããã¨ï¼ 756 757 -U <ãªãã¸ã§ã¯ããã¡ã¤ã«å> 758 ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®ã¡ã¤ã³ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ï¼-A 759 ã§æå®ããã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã åã«".o"ãä»å ãããã®ï¼ä»¥ 760 å¤ã«ï¼ãªã³ã¯ãã¹ããªãã¸ã§ã¯ããã¡ã¤ã«ã®å称ãï¼".o"ãä»å ãã 761 å½¢ã§æå®ããï¼""ã§å²ããã¨ã«ãã£ã¦ï¼è¤æ°ã®ãã¡ã¤ã«ãæå®ããã 762 ã¨ãå¯è½ã§ããï¼-Uãªãã·ã§ã³ãè¤æ°ä½¿ã£ã¦ã¯ãªããªãï¼ï¼ 763 764 -L <ã«ã¼ãã«ã©ã¤ãã©ãªã®ãã£ã¬ã¯ããªå> 765 äºåã«æ§ç¯ããã«ã¼ãã«ã©ã¤ãã©ãªï¼libkernel.aï¼ãç¨ãã¦ï¼ã¢ã㪠766 ã±ã¼ã·ã§ã³ã®ã¿ãæ§ç¯ããå ´åã«ã¯ï¼ãã®ãªãã·ã§ã³ã«ã«ã¼ãã«ã©ã¤ 767 ãã©ãªã®ç½®ããããã£ã¬ã¯ããªåãæå®ããï¼ãã®ãªãã·ã§ã³ã®ä½¿ç¨ 768 ä¾ã«ã¤ãã¦ã¯ï¼ã3.5 ã¢ããªã±ã¼ã·ã§ã³ã¨ã«ã¼ãã«ãå¥ã 769 ã«æ§ç¯ãã 770 æ¹æ³ãã®ç¯ãåç 771 §ãããã¨ï¼ 622 user.txt ユーザーズマニュアル 623 asp_spec.txt TOPPERS/ASPカーネルの仕様概要 624 extension.txt 機能拡張・チューニングガイド 625 porting.txt ターゲット依存部 ポーティングガイド 626 configurator.txt コンフィギュレータ仕様 627 design.txt 設計メモ 628 version.txt 変更履歴 629 630 631 5.コンフィギュレーションスクリプトの使い方 632 633 コンフィギュレーションスクリプト(configure)は,ASPカーネルおよびアプ 634 リケーションプログラムを構築するために必要な基本的なコンフィギュレーショ 635 ンを行うためのプログラムである. 636 637 ASPカーネルを用いてアプリケーションを作成する場合には,まずオブジェクト 638 ファイルを置くディレクトリを作成し,そのディレクトリでコンフィギュレー 639 ションスクリプトを実行する.オブジェクトファイルを置くディレクトリの場 640 所と名称は,任意に決めてよい. 641 642 コンフィギュレーションスクリプトに対するオプションは次の通り. 643 644 -T <ターゲット略称> 645 ターゲットシステムの名称を,targetディレクトリの下に置かれてい 646 るターゲット依存部ディレクトリの名称で指定する(必須). 647 648 -A <アプリケーションプログラム名> 649 アプリケーションプログラムの名称を指定する.省略した場合には, 650 サンプルプログラム(sample1)となる. 651 652 -a <アプリケーションのディレクトリ名> 653 アプリケーションプログラムのソースファイル(システムコンフィギュ 654 レーションファイルを除く)を置いたディレクトリ名を指定する.省 655 略した場合には,オブジェクトファイルを置くディレクトリに置かれ 656 ていることを仮定する.システムコンフィギュレーションファイルは, 657 オブジェクトファイルを置くディレクトリに置くこと. 658 659 -U <オブジェクトファイル名> 660 アプリケーションプログラムのメインのオブジェクトファイル(-A 661 で指定したアプリケーションプログラム名に".o"を付加したもの)以 662 外に,リンクすべきオブジェクトファイルの名称を,".o"を付加した 663 形で指定する.""で囲むことによって,複数のファイルを指定するこ 664 とも可能である(-Uオプションを複数使ってはならない). 665 666 -L <カーネルライブラリのディレクトリ名> 667 事前に構築したカーネルライブラリ(libkernel.a)を用いて,アプリ 668 ケーションのみを構築する場合には,このオプションにカーネルライ 669 ブラリの置かれたディレクトリ名を指定する.このオプションの使用 670 例については,「3.5 アプリケーションとカーネルを別々に構築する 671 方法」の節を参照すること. 772 672 773 673 -f 774 ã«ã¼ãã«ãé¢æ°åä½ã§ã³ã³ãã¤ã«ãã©ã¤ãã©ãªåããå ´åã«ï¼ãã®ãª 775 ãã·ã§ã³ãæå®ããï¼ãã®ãªãã·ã§ã³ã®ä½¿ç¨ä¾ã«ã¤ãã¦ã¯ï¼ã3.4 ã«ã¼ 776 ãã«ãé¢æ°åä½ã§ã©ã¤ãã©ãªåããæ¹æ³ãã®ç¯ãåç 777 §ãããã¨ï¼ 778 779 -D <ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã£ã¬ã¯ããªå> 780 ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãç½®ãããã£ã¬ã¯ããªåãæå®ããï¼ç 781 ç¥ããå ´åã«ã¯ï¼configureã®ç½®ããã¦ãããã£ã¬ã¯ããªã¨ãªãï¼ 782 783 -l <ããã°ã©ãã³ã°è¨èª> 784 ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®ããã°ã©ãã³ã°è¨èªãæå®ããï¼ç¾æ 785 ç¹ã§ã¯ï¼cã¨c++ã®ã¿ããµãã¼ããã¦ããï¼ 786 787 -t <ãã³ãã¬ã¼ããã£ã¬ã¯ããªå> 788 Makefileããµã³ãã«ããã°ã©ã ã®ãã³ãã¬ã¼ãã®ç½®ããããã£ã¬ã¯ã 789 ãªåãæå®ããï¼çç¥ããå ´åã«ã¯ï¼ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ã 790 ç½®ãããã£ã¬ã¯ããªã®ä¸ã®sampleãã£ã¬ã¯ããªã¨ãªãï¼ 791 792 -m <ãã³ãã¬ã¼ãMakefileå> 793 Makefileã®ãã³ãã¬ã¼ãã¨ãããã¡ã¤ã«åãæå®ããï¼çç¥ããå ´å 794 ã«ã¯ï¼Makefileã¨ãªãï¼ 795 796 -d <å®è¡ç°å¢å> 797 ã¿ã¼ã²ããã·ã¹ãã ä¸ã§ã®ããã°ã©ã ã®å®è¡ç°å¢ï¼ãªããã¯ï¼ããã 798 ã°ç°å¢ï¼ã®å称ãæå®ããï¼ãã®ãªãã·ã§ã³ãæå®ããã¨ï¼å®è¡ç°å¢ 799 ãæå®ããã·ã³ãã«ï¼TOPPERS_<ãããã°ç°å¢å>ï¼ããã¯ãå®ç¾©ãã 800 ãï¼çç¥ããå ´åã«ã¯ï¼å®è¡ç°å¢ãæå®ããã·ã³ãã«ã¯ãã¯ãå®ç¾©ã 801 ããªãï¼ 674 カーネルを関数単位でコンパイルしライブラリ化する場合に,このオ 675 プションを指定する.このオプションの使用例については,「3.4 カー 676 ネルを関数単位でライブラリ化する方法」の節を参照すること. 677 678 -D <ASPカーネルのソースディレクトリ名> 679 ASPカーネルのソースファイルを置いたディレクトリ名を指定する.省 680 略した場合には,configureの置かれているディレクトリとなる. 681 682 -l <プログラミング言語> 683 アプリケーションプログラムのプログラミング言語を指定する.現時 684 点では,cとc++のみをサポートしている. 685 686 -t <テンプレートディレクトリ名> 687 Makefileやサンプルプログラムのテンプレートの置かれたディレクト 688 リ名を指定する.省略した場合には,ASPカーネルのソースファイルを 689 置いたディレクトリの下のsampleディレクトリとなる. 690 691 -m <テンプレートMakefile名> 692 Makefileのテンプレートとするファイル名を指定する.省略した場合 693 には,Makefileとなる. 694 695 -d <実行環境名> 696 ターゲットシステム上でのプログラムの実行環境(ないしは,デバッ 697 グ環境)の名称を指定する.このオプションを指定すると,実行環境 698 を指定するシンボル(TOPPERS_<デバッグ環境名>)がマクロ定義され 699 る.省略した場合には,実行環境を指定するシンボルはマクロ定義さ 700 れない. 802 701 803 702 -r 804 ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ããæå¹ã«ããå ´åã«ï¼ãã®ãªãã·ã§ 805 ã³ãæå®ããï¼ãã®ãªãã·ã§ã³ã®ä½¿ç¨ä¾ã«ã¤ãã¦ã¯ï¼ã11.6 ãã¬ã¼ã¹ 806 ãã°è¨é²ã®ãµã³ãã«ã³ã¼ãã®ä½¿ç¨æ¹æ³ãã®ç¯ãåç 807 §ãããã¨ï¼ 808 809 -p <perlã®ãã¹å> 810 perlã®ãã¹åãæå®ããï¼çç¥ããå ´åã«ã¯ï¼/usr/local/bin㨠811 /usr/binãæ¢ç´¢ãï¼perlã®ãã¹åã決å®ããï¼ 812 813 -g <ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹å> 814 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ï¼cfgï¼ã®ãã¹åãæå®ããï¼çç¥ããå ´åã«ã¯ï¼ 815 ããã©ã«ãã®ãã¹åï¼ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã£ã¬ã¯ããªã®ä¸ã® 816 cfg/cfg/cfgï¼ã¨ãªãï¼ 817 818 -o <ãªãã·ã§ã³æåå> 819 ã³ã³ãã¤ã©ã«ä¸ãããªãã·ã§ã³æååã§ï¼ã·ã³ãã«å®ç¾©ä»¥å¤ã®ãã®ï¼ 820 ã·ã³ãã«å®ç¾©ã®ãªãã·ã§ã³ã¯ï¼-Oãªãã·ã§ã³ã使ç¨ããï¼ãªãã·ã§ã³ 821 æååã«ã¹ãã¼ã¹ãå«ã¾ããå ´åã«ã¯ï¼"-O2 -Wall"ã®ããã«ï¼""ã§å² 822 ãã§è¨è¿°ããå¿ 823 è¦ãããï¼ 824 825 -O <ãªãã·ã§ã³æåå> 826 ã³ã³ãã¤ã©ã«ä¸ããã·ã³ãã«å®ç¾©ã®ããã®ãªãã·ã§ã³æååï¼ãªãã·ã§ 827 ã³æååã«ã¹ãã¼ã¹ãå«ã¾ããå ´åã«ã¯ï¼"-DTEST -DPERF"ã®ããã«ï¼ 828 ""ã§å²ãã§è¨è¿°ããå¿ 829 è¦ãããï¼ 830 831 -k <ãªãã·ã§ã³æåå> 832 ãªã³ã«ã«ä¸ãããªãã·ã§ã³æååï¼ãªãã·ã§ã³æååã«ã¹ãã¼ã¹ãå« 833 ã¾ããå ´åã«ã¯ï¼""ã§å²ãã§è¨è¿°ããå¿ 834 è¦ãããï¼ 835 836 ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªãããè¡ãå¦çã¯æ¬¡ã®éãã§ããï¼ 837 838 (1) Makefileã®çæ 839 840 ãã³ãã¬ã¼ããã£ã¬ã¯ããªï¼ããã©ã«ãã§ã¯ï¼sampleï¼ããé©åãªMakefileã 841 é¸æãï¼å¿ 842 è¦ãªç®æãæ¸ãæãã¦ï¼Makefileãçæããï¼ 843 844 (2) ãµã³ãã«ããã°ã©ã ã®çæ 845 846 æå®ããã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ããã³ãã¬ã¼ããã£ã¬ã¯ããªã«ããå ´åï¼ 847 é©åãªã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®ã½ã¼ã¹ãã¡ã¤ã«ãé¸æãï¼å¿ 848 è¦ãªç®æã 849 æ¸ãæãã¦ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®ã½ã¼ã¹ãã¡ã¤ã«ï¼ä¾ãã°ï¼ 850 sample1.hï¼sample1.cï¼sample1.cfgï¼ãçæããï¼ 851 852 (3) ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãç¨æã§ãã¦ãããã®ãã§ã㯠853 854 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ï¼cfgï¼ã®å®è¡ãã¡ã¤ã«ãããããã§ãã¯ãï¼ãã¡ã¤ã«ã㪠855 ãå ´åã«ã¯ï¼ãã®æ¨ãåºåããï¼ 856 857 858 ï¼ï¼Makefileã®ä¿®æ£æ¹æ³ 859 860 åã®ç« ã§èª¬æããããã«ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«ä¸ãããªãã·ã§ 861 ã³çããMakefileãçæããããï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã§å¯¾å¿ 862 ã§ããªãå ´åã«ã¯ï¼Makefileãç´æ¥ä¿®æ£ããå¿ 863 è¦ãããï¼ããã§ã¯ï¼Makefile 864 ã®ä¸ã§ï¼ä¿®æ£ãå¿ 865 è¦ã¨ãªãå¯è½æ§ã®é«ãç®æã«ã¤ãã¦èª¬æããï¼ 866 867 ãªãï¼Makefileãä¿®æ£ããå¾ã«ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªãããåå®è¡ã 868 ãã¨ï¼ä¿®æ£ããMakefileãä¸æ¸ãããã¦ãã¾ãã®ã§æ³¨æãããã¨ï¼å¤ããã®ã 869 Makefile.bakã«ä¿åãããï¼ï¼ 870 871 6.1 Makefileã®å¤æ°å®ç¾© 872 873 (A) ã¿ã¼ã²ããç¥ç§° 874 875 TARGETã«ã¯ï¼ã¿ã¼ã²ããã·ã¹ãã ã®å称ãï¼targetãã£ã¬ã¯ããªã®ä¸ã«ç½®ãã 876 ã¦ããã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã®å称ã§æå®ããï¼ãã®å®ç¾©ã¯ï¼é常ã¯ï¼ 877 ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«å¯¾ãã-Tãªãã·ã§ã³ã«ããè¡ãï¼ 878 879 (B) ãªãã¸ã§ã¯ããã¡ã¤ã«ã®æ¡å¼µå 880 881 Cygwinç°å¢ã§ã³ã³ãã¤ã«ããæã«ã¯ï¼OBJEXTã"exe"ã«å®ç¾©ããå¿ 882 è¦ãããï¼ã 883 ãã¯ï¼Cygwinç°å¢ã§ã¯ï¼ãã¼ãã¢ã¸ã¥ã¼ã«ã®ãã¡ã¤ã«åã«æ¡å¼µå".exe"ãä»å 884 ãããã®ã«å¯¾å¿ããããã®ãã®ã§ããï¼Cygwinç°å¢ã§ãããã¨ãå¤å®ã§ããã°ï¼ 885 ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããããã®å®ç¾©ãè¡ãï¼ 886 887 (C) å®è¡ç°å¢ï¼ã¿ã¼ã²ããä¾åï¼ 888 889 ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼å®è¡ç°å¢ã«å¯¾å¿ãã¦ã¿ã¼ã²ããä¾åé¨ã®ã³ã¼ããå·®ã 890 æããå ´åãããï¼ãããå¯è½ã«ããããã«ï¼å®è¡ç°å¢ã®å称ãDBGENVã«å®ç¾© 891 ãã¦ããï¼ãã®å®ç¾©ã¯ï¼é常ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«å¯¾ã 892 ã-Dãªãã·ã§ã³ã«ããè¡ãï¼ã©ã®ã¿ã¼ã²ãããã©ã®å®è¡ç°å¢ã«å¯¾å¿ãã¦ããã 893 ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ãåç 894 §ãããã¨ï¼ 895 896 (D) ã«ã¼ãã«ã©ã¤ãã©ãªã®ãã£ã¬ã¯ããªå 897 898 KERNEL_LIBã«ã¯ï¼ã«ã¼ãã«ã©ã¤ãã©ãªã®ç½®ããããã£ã¬ã¯ããªåãå®ç¾©ããï¼ 899 ãã®å®ç¾©ã¯ï¼é常ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«å¯¾ãã-Lãªãã·ã§ 900 ã³ã«ããè¡ãï¼ 901 902 (E) ã«ã¼ãã«ãé¢æ°åä½ã§ã³ã³ãã¤ã«ãããã©ãã 903 904 KERNEL_FUNCOBJSã¯ï¼ã«ã¼ãã«ãé¢æ°åä½ã§ã³ã³ãã¤ã«ããå ´åã«ã¯trueã«å®ç¾© 905 ãï¼ãã¡ã¤ã«åä½ã§ã³ã³ãã¤ã«ããå ´åã«ã¯æªå®ç¾©ã¨ããï¼ãã®å®ç¾©ã¯ï¼é常 906 ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«å¯¾ãã-fãªãã·ã§ã³ã«ããè¡ãï¼ 907 908 (F) å 909 ±éã³ã³ãã¤ã«ãªãã·ã§ã³ 910 911 ãã¹ã¦ã®ããã°ã©ã ã«å 912 ±éããã³ã³ãã¤ã«ãªãã·ã§ã³ã®è¿½å ãå¿ 913 è¦ãªå ´åã«ã¯ï¼ 914 ä¸ã®å¤æ°ã®å®ç¾©ãå¤æ´ããï¼ãã®ã³ã³ãã¤ã«ãªãã·ã§ã³ãï¼ç¹å®ã®ã¿ã¼ã²ãã 915 ã§å¸¸ã«å¿ 916 è¦ãªå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åã®å®ç¾©ãå 917 ¥ããMakefile.targetçãä¿® 918 æ£ãã¹ãã§ããï¼ 919 920 CDEFS ã³ã³ãã¤ã©ã«å¯¾ãã-Dãªãã·ã§ã³ãè¨è¿°ããï¼ 921 INCLUDES ã³ã³ãã¤ã©ã«å¯¾ãã-Iãªãã·ã§ã³ãè¨è¿°ããï¼ 922 COPTS ã³ã³ãã¤ã©ã«å¯¾ãããã®ä»ã®ãªãã·ã§ã³ãè¨è¿°ããï¼ 923 LDFLAGS ãªã³ã«ã«å¯¾ãããªãã·ã§ã³ãè¨è¿°ããï¼ 924 LIBS ã©ã¤ãã©ãªãªã³ã¯ã®ããã®ãªãã·ã§ã³ãè¨è¿°ããï¼ 925 926 追å ã®å¯è½æ§ã®ããã³ã³ãã¤ã«ãªãã·ã§ã³ã«ã¤ãã¦ã¯ï¼ã6.2 ã³ã³ãã¤ã«ãªã 927 ã·ã§ã³ãã®ç¯ãåç 928 §ã®ãã¨ï¼ 929 930 (G) ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã å 931 932 APPLNAMEã«ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã åãå®ç¾©ããï¼ã·ã¹ãã ã³ã³ã㣠933 ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«åã¯ï¼APPLNAMEã«å®ç¾©ããååã«æ¡å¼µå".cfg"ãä»å 934 ããååã¨ããï¼ã¾ãï¼ã¢ããªã±ã¼ã·ã§ã³ã®ã¡ã¤ã³ãã¡ã¤ã«ã¯ï¼APPLNAMEã«å® 935 義ããååã«æ¡å¼µå".c"ãä»å ããååã¨ããï¼ãã®å®ç¾©ã¯ï¼é常ã¯ï¼ã³ã³ã㣠936 ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«å¯¾ãã-Aãªãã·ã§ã³ã«ããè¡ãï¼ 937 938 (H) ã¢ããªã±ã¼ã·ã§ã³ã®ãã£ã¬ã¯ããªå 939 940 ã¢ããªã±ã¼ã·ã§ã³ã®ã½ã¼ã¹ãã¡ã¤ã«ãï¼ãªãã¸ã§ã¯ããã¡ã¤ã«ãç½®ãã®ã¨ã¯å¥ 941 ã®ãã£ã¬ã¯ããªã«ç½®ãå ´åã«ã¯ï¼APPLDIRã«ãã®ãã£ã¬ã¯ããªåãå®ç¾©ããï¼ã 942 ã®å®ç¾©ã¯ï¼é常ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«å¯¾ãã-aãªãã·ã§ã³ 943 ã«ããè¡ãï¼ã¢ããªã±ã¼ã·ã§ã³ã®ã½ã¼ã¹ãã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªãè¤æ°ã 944 ãå ´åã«ã¯ï¼APPL_DIRã®å®ç¾©ãå¤æ´ãããã¨ã§å¯¾å¿ããï¼ 945 946 (I) ã¢ããªã±ã¼ã·ã§ã³ã®ããã°ã©ã ãã¡ã¤ã«å 947 948 ã¢ããªã±ã¼ã·ã§ã³ãè¤æ°ã®ã½ã¼ã¹ãã¡ã¤ã«ã§æ§æãããå ´åã«ã¯ï¼ãã®ãªãã¸ã§ 949 ã¯ããã¡ã¤ã«åãï¼APPL_ASMOBJSï¼APPL_COBJSï¼APPL_CXXOBJSã«åæããï¼ 950 951 (J) ã¢ããªã±ã¼ã·ã§ã³ã®ã³ã³ãã¤ã«ãªãã·ã§ã³ 952 953 ã¢ããªã±ã¼ã·ã§ã³ã®ã³ã³ãã¤ã«ã«å¿ 954 è¦ãªã³ã³ãã¤ã«ãªãã·ã§ã³ãï¼ã¢ããªã±ã¼ 955 ã·ã§ã³ãã©ã¤ãã©ãªãå¿ 956 è¦ã¨ããå ´åã«ã¯ï¼APPL_CFLAGSããã³APPL_LIBSã«å® 957 義ããï¼ 958 959 (K) ãã¼ãã¢ã¸ã¥ã¼ã«ã®ãã¡ã¤ã«å 960 961 æ¨æºã®ãã¼ãã¢ã¸ã¥ã¼ã«ã®ãã¡ã¤ã«åãOBJNAMEã«å®ç¾©ããï¼ããã©ã«ãã¯asp 962 ã§ããï¼ 963 964 (L) ã¿ã¼ã²ãããã¡ã¤ã«ã®å®ç¾© 965 966 ã¿ã¼ã²ãã"all"ã®ä¾åãã¡ã¤ã«ã¨ãã¦ï¼ãã¼ãã¢ã¸ã¥ã¼ã«ã®å½¢å¼ãæå®ããï¼ 967 å 968 ·ä½çã«ã¯ï¼ELFå½¢å¼ã®æã¯$(OBJFILE)ï¼ãã¤ããªå½¢å¼ã®æã¯$(OBJNAME).binï¼ 969 ã¢ããã¼ã© Så½¢å¼ã®æã¯$(OBJNAME).srecãæå®ããï¼$(OBJFILE)ã¯ï¼Cygwin 970 ç°å¢ã§OBJEXTã"exe"ã«å®ç¾©ããæã«ã¯$(OBJNAME).exeï¼ããã§ãªãå ´åã«ã¯ 971 $(OBJNAME)ã¨ãªãï¼ 972 973 (M) makedepã®ãªãã·ã§ã³ã®å®ç¾© 974 975 Cygwinç°å¢ã§ã«ã¼ããã£ã¬ã¯ããªã"cygdrive"ã§ãªãå ´åã«ã¯ï¼makedepã®-R㪠976 ãã·ã§ã³ã§ã«ã¼ããã£ã¬ã¯ããªåãä¸ããå¿ 977 è¦ãããï¼ã¾ãï¼Makefileã®ã¿ã¼ 978 ã²ããé¨ï¼":"ã®å·¦å´ï¼ã«è¤æ°ã®ãã¡ã¤ã«åãè¨è¿°ããã¨ï¼ã«ã¼ãã«ãé¢æ°åä½ 979 ã§ã©ã¤ãã©ãªåããå ´åã«ï¼ãã®ãããªè¨è¿°ãçæãããï¼æ£ããåä½ããªã 980 å ´åã«ã¯ï¼Cygwinç°å¢ã®GNU Makeã§ãã®ãããªå¶éãããã¨ããå ±åãããï¼ï¼ 981 makedepã«-Sãªãã·ã§ã³ãä»ä¸ããå¿ 982 è¦ãããï¼ 983 984 makedepã®ãªãã·ã§ã³ã¯ï¼æ¬¡ã®ä¾ã®ããã«ï¼MAKEDEP_OPTSã«å®ç¾©ããï¼ 703 トレースログ記録のサンプルコードを有効にする場合に,このオプショ 704 ンを指定する.このオプションの使用例については,「11.6 トレース 705 ログ記録のサンプルコードの使用方法」の節を参照すること. 706 707 -p <perlのパス名> 708 perlのパス名を指定する.省略した場合には,/usr/local/binと 709 /usr/binを探索し,perlのパス名を決定する. 710 711 -g <コンフィギュレータのパス名> 712 コンフィギュレータ(cfg)のパス名を指定する.省略した場合には, 713 デフォルトのパス名(ASPカーネルのソースディレクトリの下の 714 cfg/cfg/cfg)となる. 715 716 -o <オプション文字列> 717 コンパイラに与えるオプション文字列で,シンボル定義以外のもの. 718 シンボル定義のオプションは,-Oオプションを使用する.オプション 719 文字列にスペースが含まれる場合には,"-O2 -Wall"のように,""で囲 720 んで記述する必要がある. 721 722 -O <オプション文字列> 723 コンパイラに与えるシンボル定義のためのオプション文字列.オプショ 724 ン文字列にスペースが含まれる場合には,"-DTEST -DPERF"のように, 725 ""で囲んで記述する必要がある. 726 727 -k <オプション文字列> 728 リンカに与えるオプション文字列.オプション文字列にスペースが含 729 まれる場合には,""で囲んで記述する必要がある. 730 731 コンフィギュレーションスクリプトが行う処理は次の通りである. 732 733 (1) Makefileの生成 734 735 テンプレートディレクトリ(デフォルトでは,sample)から適切なMakefileを 736 選択し,必要な箇所を書き換えて,Makefileを生成する. 737 738 (2) サンプルプログラムの生成 739 740 指定したアプリケーションプログラムがテンプレートディレクトリにある場合, 741 適切なアプリケーションプログラムのソースファイルを選択し,必要な箇所を 742 書き換えて,アプリケーションプログラムのソースファイル(例えば, 743 sample1.h,sample1.c,sample1.cfg)を生成する. 744 745 (3) コンフィギュレータが用意できているかのチェック 746 747 コンフィギュレータ(cfg)の実行ファイルがあるかチェックし,ファイルがな 748 い場合には,その旨を出力する. 749 750 751 6.Makefileの修正方法 752 753 前の章で説明したように,コンフィギュレーションスクリプトに与えるオプショ 754 ン等からMakefileが生成されるが,コンフィギュレーションスクリプトで対応 755 できない場合には,Makefileを直接修正する必要がある.ここでは,Makefile 756 の中で,修正が必要となる可能性の高い箇所について説明する. 757 758 なお,Makefileを修正した後にコンフィギュレーションスクリプトを再実行す 759 ると,修正したMakefileが上書きされてしまうので注意すること(古いものが 760 Makefile.bakに保存される). 761 762 6.1 Makefileの変数定義 763 764 (A) ターゲット略称 765 766 TARGETには,ターゲットシステムの名称を,targetディレクトリの下に置かれ 767 ているターゲット依存部ディレクトリの名称で指定する.この定義は,通常は, 768 コンフィギュレーションスクリプトに対する-Tオプションにより行う. 769 770 (B) オブジェクトファイルの拡張子 771 772 Cygwin環境でコンパイルする時には,OBJEXTを"exe"に定義する必要がある.こ 773 れは,Cygwin環境では,ロードモジュールのファイル名に拡張子".exe"が付加 774 されるのに対応するためのものである.Cygwin環境であることを判定できれば, 775 コンフィギュレーションスクリプトがこの定義を行う. 776 777 (C) 実行環境(ターゲット依存) 778 779 ターゲットによっては,実行環境に対応してターゲット依存部のコードを差し 780 換える場合がある.これを可能にするために,実行環境の名称をDBGENVに定義 781 している.この定義は,通常は,コンフィギュレーションスクリプトに対す 782 る-Dオプションにより行う.どのターゲットがどの実行環境に対応しているか 783 は,ターゲット依存部のユーザーズマニュアルを参照すること. 784 785 (D) カーネルライブラリのディレクトリ名 786 787 KERNEL_LIBには,カーネルライブラリの置かれたディレクトリ名を定義する. 788 この定義は,通常は,コンフィギュレーションスクリプトに対する-Lオプショ 789 ンにより行う. 790 791 (E) カーネルを関数単位でコンパイルするかどうか 792 793 KERNEL_FUNCOBJSは,カーネルを関数単位でコンパイルする場合にはtrueに定義 794 し,ファイル単位でコンパイルする場合には未定義とする.この定義は,通常 795 は,コンフィギュレーションスクリプトに対する-fオプションにより行う. 796 797 (F) 共通コンパイルオプション 798 799 すべてのプログラムに共通するコンパイルオプションの追加が必要な場合には, 800 下の変数の定義を変更する.そのコンパイルオプションが,特定のターゲット 801 で常に必要な場合には,ターゲット依存の定義を入れたMakefile.target等を修 802 正すべきである. 803 804 CDEFS コンパイラに対する-Dオプションを記述する. 805 INCLUDES コンパイラに対する-Iオプションを記述する. 806 COPTS コンパイラに対するその他のオプションを記述する. 807 LDFLAGS リンカに対するオプションを記述する. 808 LIBS ライブラリリンクのためのオプションを記述する. 809 810 追加の可能性のあるコンパイルオプションについては,「6.2 コンパイルオプ 811 ション」の節を参照のこと. 812 813 (G) アプリケーションプログラム名 814 815 APPLNAMEには,アプリケーションプログラム名を定義する.システムコンフィ 816 ギュレーションファイル名は,APPLNAMEに定義した名前に拡張子".cfg"を付加 817 した名前とする.また,アプリケーションのメインファイルは,APPLNAMEに定 818 義した名前に拡張子".c"を付加した名前とする.この定義は,通常は,コンフィ 819 ギュレーションスクリプトに対する-Aオプションにより行う. 820 821 (H) アプリケーションのディレクトリ名 822 823 アプリケーションのソースファイルを,オブジェクトファイルを置くのとは別 824 のディレクトリに置く場合には,APPLDIRにそのディレクトリ名を定義する.こ 825 の定義は,通常は,コンフィギュレーションスクリプトに対する-aオプション 826 により行う.アプリケーションのソースファイルを置くディレクトリが複数あ 827 る場合には,APPL_DIRの定義を変更することで対応する. 828 829 (I) アプリケーションのプログラムファイル名 830 831 アプリケーションが複数のソースファイルで構成される場合には,そのオブジェ 832 クトファイル名を,APPL_ASMOBJS,APPL_COBJS,APPL_CXXOBJSに列挙する. 833 834 (J) アプリケーションのコンパイルオプション 835 836 アプリケーションのコンパイルに必要なコンパイルオプションや,アプリケー 837 ションがライブラリを必要とする場合には,APPL_CFLAGSおよびAPPL_LIBSに定 838 義する. 839 840 (K) ロードモジュールのファイル名 841 842 標準のロードモジュールのファイル名をOBJNAMEに定義する.デフォルトはasp 843 である. 844 845 (L) ターゲットファイルの定義 846 847 ターゲット"all"の依存ファイルとして,ロードモジュールの形式を指定する. 848 具体的には,ELF形式の時は$(OBJFILE),バイナリ形式の時は$(OBJNAME).bin, 849 モトローラ S形式の時は$(OBJNAME).srecを指定する.$(OBJFILE)は,Cygwin 850 環境でOBJEXTを"exe"に定義した時には$(OBJNAME).exe,そうでない場合には 851 $(OBJNAME)となる. 852 853 (M) makedepのオプションの定義 854 855 Cygwin環境でルートディレクトリが"cygdrive"でない場合には,makedepの-Rオ 856 プションでルートディレクトリ名を与える必要がある.また,Makefileのター 857 ゲット部(":"の左側)に複数のファイル名を記述すると(カーネルを関数単位 858 でライブラリ化する場合に,このような記述が生成される)正しく動作しない 859 場合には(Cygwin環境のGNU Makeでこのような制限があるという報告がある), 860 makedepに-Sオプションを付与する必要がある. 861 862 makedepのオプションは,次の例のように,MAKEDEP_OPTSに定義する. 985 863 986 864 MAKEDEP_OPTS = -R cygdrive -S 987 865 988 6.2 ã³ã³ãã¤ã«ãªãã·ã§ã³ 989 990 ASPã«ã¼ãã«ã®ã³ã¼ãä¸ã«ã¯ï¼assertãã¯ãã使ããã¦ããï¼assertãã¯ãã¯ï¼ 991 NDEBUGãå®ç¾©ãããã¨ã§ï¼ãªãã¸ã§ã¯ãã³ã¼ãä¸ããæ¶ããã¨ãã§ããï¼ã«ã¼ 992 ãã«ã®ãããã°ãçµäºããã°ï¼-DNDEBUGãæå®ãã¦ã³ã³ãã¤ã«ããæ¹ãå¹çã 993 ãããªãï¼ 994 995 ã¿ã¼ã²ããä¾åé¨ã«ããã¦ï¼ã³ã³ãã¤ã«ãªãã·ã§ã³ã«-Werrorï¼è¦åãã¨ã©ã¼æ± 996 ãããï¼ãæå®ãã¦ããå ´åãããï¼ãã®ãããªã¿ã¼ã²ããã«ããã¦ï¼ã¢ã㪠997 ã±ã¼ã·ã§ã³ã§è¦åãé¿ããããªãå ´åã«ã¯ï¼ã¿ã¼ã²ããä¾åé¨ãä¿®æ£ãã¦ã³ã³ 998 ãã¤ã«ãªãã·ã§ã³ãåé¤ããå¿ 999 è¦ãããï¼ 1000 1001 ã¾ãï¼TOPPERS_OMIT_SYSLOGãå®ç¾©ãã¦ã³ã³ãã¤ã«ãããã¨ã§ï¼ã·ã¹ãã ãã°åº 1002 åãææ¢ãããã¨ãã§ããï¼ 1003 1004 1005 ï¼ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ä½¿ãæ¹ 1006 1007 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ï¼cfgï¼ã¯ï¼TOPPERSæ°ä¸ä»£ã«ã¼ãã«çµ±åä»æ§æ¸ã®2.12.5ç¯ 1008 ã®è¨è¿°ã®éãï¼3ã¤ã®ãã¹ã§æ§æãããï¼ 1009 1010 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«åããã©ã¡ã¼ 1011 ã¿ã«åãï¼ä»¥ä¸ã®ãªãã·ã§ã³ãæã¤ï¼éè¦ãªãã®ã®ã¿ï¼ï¼ 866 6.2 コンパイルオプション 867 868 ASPカーネルのコード中には,assertマクロが使われている.assertマクロは, 869 NDEBUGを定義することで,オブジェクトコード中から消すことができる.カー 870 ネルのデバッグが終了すれば,-DNDEBUGを指定してコンパイルした方が効率が 871 よくなる. 872 873 ターゲット依存部において,コンパイルオプションに-Werror(警告をエラー扱 874 いする)を指定している場合がある.そのようなターゲットにおいて,アプリ 875 ケーションで警告が避けられない場合には,ターゲット依存部を修正してコン 876 パイルオプションを削除する必要がある. 877 878 また,TOPPERS_OMIT_SYSLOGを定義してコンパイルすることで,システムログ出 879 力を抑止することができる. 880 881 882 7.コンフィギュレータの使い方 883 884 コンフィギュレータ(cfg)は,TOPPERS新世代カーネル統合仕様書の2.12.5節 885 の記述の通り,3つのパスで構成される. 886 887 コンフィギュレータは,システムコンフィギュレーションファイル名をパラメー 888 タに取り,以下のオプションを持つ(重要なもののみ). 1012 889 1013 890 --help 1014 ãªãã·ã§ã³ã®ãªã¹ãã¨èª¬æã表示ããï¼ 1015 1016 -vï¼»--versionï¼½ 1017 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¼ã¸ã§ã³ã表示ããï¼ 1018 1019 -kï¼»--kernelï¼½<ã«ã¼ãã«å> 1020 ã«ã¼ãã«ã®å称ãæå®ããï¼ããã©ã«ãã¯aspï¼ 1021 1022 -pï¼»--passï¼½<ãã¹çªå·> 1023 ãã¹çªå·ãæå®ããï¼1ï½3ã®ããããï¼ 1024 1025 -Iï¼»--include-pathï¼½<ã¤ã³ã¯ã«ã¼ããã¹å> 1026 INCLUDEãã£ã¬ã¯ãã£ãã«ããã¦ï¼ã¤ã³ã¯ã«ã¼ãããã³ã³ãã£ã®ã¥ã¬ã¼ 1027 ã·ã§ã³ãã¡ã¤ã«ãæ¢ããã¹åãæå®ããï¼ 1028 1029 -Tï¼»--template-fileï¼½<ãã³ãã¬ã¼ããã¡ã¤ã«å> 1030 ãã³ãã¬ã¼ããã¡ã¤ã«ã®å称ãæå®ããï¼ãã¹2ã¨ãã¹3ã§æå¹ï¼ 1031 1032 --api-table <éçAPIãã¼ãã«ãã¡ã¤ã«å> 1033 éçAPIãã¼ãã«ã®ãã¡ã¤ã«åãæå®ããï¼ 1034 1035 --cfg1-def-table <å¤åå¾ã·ã³ãã«ãã¼ãã«ãã¡ã¤ã«å> 1036 å¤åå¾ã·ã³ãã«ãã¼ãã«ã®ãã¡ã¤ã«åãæå®ããï¼ 1037 1038 -rï¼»--rom-imageï¼½<ãã¼ãã¢ã¸ã¥ã¼ã«å> 1039 ãã¼ãã¢ã¸ã¥ã¼ã«ãSã¬ã³ã¼ããã©ã¼ãããã®å½¢ã«å¤æãããã¡ã¤ã«ã® 1040 å称ãæå®ããï¼ãã¹3ã§ã®ã¿æå¹ï¼ 1041 1042 -s [--symbol-table] <ã·ã³ãã«ãã¡ã¤ã«å> 1043 ãã¼ãã¢ã¸ã¥ã¼ã«ä¸ã®åã·ã³ãã«ã¨ã¢ãã¬ã¹ã®å¯¾å¿è¡¨ãå«ãã·ã³ãã« 1044 ãã¡ã¤ã«ã®å称ãæå®ããï¼ãã¹3ã§ã®ã¿æå¹ï¼ 1045 1046 --id-output-file <IDçªå·åºåãã¡ã¤ã«å> 1047 ãªãã¸ã§ã¯ãã®IDçªå·ã®å²ä»ãçµæãï¼æå®ããååã®ãã¡ã¤ã«ã«æ¸ 1048 ãåºãï¼ãã¹2ã§ã®ã¿æå¹ï¼ 1049 1050 --id-input-file <IDçªå·å 1051 ¥åãã¡ã¤ã«å> 1052 ãªãã¸ã§ã¯ãã®IDçªå·ã®å²ä»ããï¼æå®ããååã®ãã¡ã¤ã«ããåã 1053 è¾¼ãï¼ãã¹2ã§ã®ã¿æå¹ï¼ 891 オプションのリストと説明を表示する. 892 893 -v[--version] 894 コンフィギュレータのバージョンを表示する. 895 896 -k[--kernel]<カーネル名> 897 カーネルの名称を指定する.デフォルトはasp. 898 899 -p[--pass]<パス番号> 900 パス番号を指定する.1~3のいずれか. 901 902 -I[--include-path]<インクルードパス名> 903 INCLUDEディレクティブにおいて,インクルードするコンフィギュレー 904 ションファイルを探すパス名を指定する. 905 906 -T[--template-file]<テンプレートファイル名> 907 テンプレートファイルの名称を指定する.パス2とパス3で有効. 908 909 --api-table <静的APIテーブルファイル名> 910 静的APIテーブルのファイル名を指定する. 911 912 --cfg1-def-table <値取得シンボルテーブルファイル名> 913 値取得シンボルテーブルのファイル名を指定する. 914 915 -r[--rom-image]<ロードモジュール名> 916 ロードモジュールをSレコードフォーマットの形に変換したファイルの 917 名称を指定する.パス3でのみ有効. 918 919 -s [--symbol-table] <シンボルファイル名> 920 ロードモジュール中の各シンボルとアドレスの対応表を含むシンボル 921 ファイルの名称を指定する.パス3でのみ有効. 922 923 --id-output-file <ID番号出力ファイル名> 924 オブジェクトのID番号の割付け結果を,指定した名前のファイルに書 925 き出す.パス2でのみ有効. 926 927 --id-input-file <ID番号入力ファイル名> 928 オブジェクトのID番号の割付けを,指定した名前のファイルから取り 929 込む.パス2でのみ有効. 1054 930 1055 931 --external-id 1056 ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°ã®å®ç¾©ãçæããï¼ãã¹2ã§ã®ã¿ 1057 æå¹ï¼ 1058 1059 -Mï¼»--print-dependenciesï¼½<ã¿ã¼ã²ããã·ã³ãã«> 1060 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ä¾åé¢ä¿ãåºåããï¼ 1061 Makefileä¸ã®ä¾åé¢ä¿ãçæããéã«ç¨ããï¼ 1062 1063 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è©³ç´°ä»æ§ã«ã¤ãã¦ã¯ï¼å¥éPDFãã¡ã¤ã«ã®å½¢ã§é 1064 å¸ãã¦ã 1065 ããTOPPERSæ°ä¸ä»£ã«ã¼ãã«ç¨ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ä»æ§ããåç 1066 §ãããã¨ï¼ 1067 1068 1069 ï¼ï¼ã·ã¹ãã ãµã¼ãã¹ 1070 1071 8.1 ã·ã¹ãã ãã°æ©è½ 1072 1073 ã·ã¹ãã ãã°æ©è½ã¯ï¼ã«ã¼ãã«å 1074 ã§çºçããç°å¸¸äºè±¡ãã«ã¼ãã«ã®ãã¬ã¼ã¹ã 1075 ã°ï¼ã·ã¹ãã ãµã¼ãã¹ãã¢ããªã±ã¼ã·ã§ã³ã§çºçããç°å¸¸äºè±¡ããã¬ã¼ã¹ãã° 1076 ãï¼ãã°æ 1077 å ±ã¨ãã¦è¨é²ããããã®æ©è½ã§ããï¼ã¾ãï¼è¨é²ãããã°æ 1078 å ±ãå 1079 ãåºãæ©è½ãæã¤ï¼ 1080 1081 ã·ã¹ãã ãã°æ©è½ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã§syslog.cfg 1082 ãã¤ã³ã¯ã«ã¼ããããã¨ã§ï¼ã·ã¹ãã ã«çµã¿è¾¼ããã¨ãã§ããï¼ã·ã¹ãã ãã° 1083 åºåãè¡ãã½ã¼ã¹ãã¡ã¤ã«ã§ã¯ï¼t_syslog.hãã¤ã³ã¯ã«ã¼ãããï¼ã¾ãï¼ã·ã¹ 1084 ãã ãã°æ©è½ã®ãã®ä»ã®ãµã¼ãã¹ã³ã¼ã«ãå¼ã³åºãã½ã¼ã¹ãã¡ã¤ã«ã§ã¯ï¼ 1085 syslog.hãã¤ã³ã¯ã«ã¼ãããï¼ 1086 1087 8.1.1 ã·ã¹ãã ãã°æ©è½ã®ä½ç½®ä»ã 1088 1089 ã·ã¹ãã ãã°æ©è½ã¯ï¼ã«ã¼ãã«å 1090 ãããå¼ã³åºããã¨ãã§ããããï¼ã«ã¼ãã« 1091 ããä¸ã®é層ã®ã¢ã¸ã¥ã¼ã«ã¨ä½ç½®ä»ãããã¨ãã§ããï¼ãã®æå³ã§ã¯ï¼ä»ã®ã· 1092 ã¹ãã ãµã¼ãã¹ã¨ã¯ä½ç½®ä»ããç°ãªãï¼ 1093 1094 ä¸æ¹ï¼ãã°æ 1095 å ±ãã·ã¹ãã å¤é¨ã«åºåããããã«ã¯ï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ 1096 ãã©ã¤ããªã©ï¼ã«ã¼ãã«ä¸ã§åä½ããã·ã¹ãã ãµã¼ãã¹ãç¨ããå¿ 1097 è¦ãããï¼ 1098 ããã§ï¼ãã°æ 1099 å ±ãã·ã¹ãã å¤é¨ã«åºåããããã®ãµã¼ãã¹ï¼ãããï¼ã·ã¹ã 1100 ã ãã°ã¿ã¹ã¯ã¨å¼ã¶ï¼ã¯ï¼ã·ã¹ãã ãã°æ©è½ã¨ã¯åé¢ãã¦å®è£ 1101 ãããã¨ã¨ãï¼ 1102 ã·ã¹ãã ãã°æ©è½ã¯ãã°æ 1103 å ±ã®è¨é²ã»ååºãã®ããã®æ©è½ã«çµã£ã¦ããï¼ 1104 1105 以ä¸ã®ããã«ï¼ã·ã¹ãã ãã°æ©è½ã¯ã«ã¼ãã«ããä¸ã®é層ã®ã¢ã¸ã¥ã¼ã«ã§ãã 1106 ãï¼ã·ã¹ãã ãã°æ©è½ã®ä¸ã§ãã°æå»ãåãåºãããã«ï¼ã«ã¼ãã«ã®æ©è½ãå¿ 1107 1108 è¦ã¨ããï¼å®è£ 1109 ä¸ã¯ï¼ã«ã¼ãã«ã®å 1110 é¨å¤æ°ãç´æ¥åç 1111 §ãã¦ããï¼ãã®ããï¼ã«ã¼ 1112 ãã«ã®å®è¡éå§åãçµäºå¾ã¯ï¼ãã°æå»ã¯æ£ããè¨é²ãããªãï¼ 1113 1114 8.1.2 ãã°ãããã¡ã¸ã®è¨é²ã¨ä½ã¬ãã«åºå 1115 1116 ä¸è¿°ããããã«ï¼ãã°æ 1117 å ±ãã·ã¹ãã ã®å¤é¨ã«åºåããããã«ã¯ï¼ã«ã¼ãã«ä¸ 1118 ã§åä½ããã·ã¹ãã ãµã¼ãã¹ãç¨ããå¿ 1119 è¦ãããããï¼ã«ã¼ãã«ã®åä½ãç¶ç¶ 1120 ã§ããªããããªé大ãªç°å¸¸äºè±¡ãèµ·ãã£ãå ´åã«ã¯ï¼ãã°æ 1121 å ±ãåºåã§ããªã 1122 ãªãï¼ã¾ãï¼ãããã®ã·ã¹ãã ãµã¼ãã¹èªèº«ããããã°ããå ´åã«ãï¼ãã°æ 1123 1124 å ±ã®åºåãã§ããªãï¼ 1125 1126 ããã§ï¼ã«ã¼ãã«ä¸ã§åä½ããã·ã¹ãã ãµã¼ãã¹ã使ããªãå ´åã«ã§ããã°æ 1127 1128 å ±ãåºåããããã«ï¼ä½ã¬ãã«åºåæ©è½ãç¨æããï¼ä½ã¬ãã«åºåæ©è½ã¯ï¼ã¿ã¼ 1129 ã²ããä¾åã«ç¨æããä½ã¬ãã«ã®æååºåé¢æ°ï¼target_fput_logï¼ãç¨ãã¦ã 1130 ã°æ 1131 å ±ãåºåããæ©è½ã§ããï¼ä½ã¬ãã«ã®æååºåé¢æ°ã¯ï¼ã¿ã¼ã²ããä¾åé¨ 1132 ã§ç¨æãããã¨ã¨ãã¦ãããï¼æçµè£½åã«çµã¿è¾¼ã¾ããå ´åãªã©ã§ã¯ï¼æåã 1133 åºåããæ¹æ³ããªãç¶æ³ãèããããï¼ãã®ãããªå ´åï¼ä½ã¬ãã«ã®æååºå 1134 é¢æ°ã«éãããæåã¯ï¼ã¡ã¢ãªä¸ã«æ®ãã¦ãããï¼æ¨ã¦ã¦ãã¾ããããªãï¼ 1135 1136 ãã°æ 1137 å ±ãï¼ãã°ãããã¡ã¸è¨é²ãããä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåããã 1138 ã®è¨å®ã¯ï¼ã·ã¹ãã ãã°æ©è½ã®ãµã¼ãã¹ã³ã¼ã«ï¼syslog_msk_logï¼ã«ãã£ã¦è¡ 1139 ããã¨ãã§ããï¼syslog_msk_logã®ä½¿ãæ¹ã«ã¤ãã¦ã¯å¾è¿°ããï¼ããã©ã«ã㧠1140 ã¯ï¼ã·ã¹ãã ãã°ã¿ã¹ã¯ãåä½ãããï¼syslog_msk_logãå¼ã³åºããªãå ´åï¼ï¼ 1141 ãã¹ã¦ã®ãã°æ 1142 å ±ãä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåãï¼ãã°ãããã¡ã«ã¯è¨é² 1143 ããªãï¼ 1144 1145 ä½ã¬ãã«åºåæ©è½ãç¨ããã¨ï¼ãã°ã¡ãã»ã¼ã¸ã®ä½æå¦çï¼printfç¸å½ã®å¦çï¼ 1146 ã¨ä½ã¬ãã«ã®æååºåå¦çãã«ã¼ãã«å 1147 ã§è¡ãããã«ï¼ã«ã¼ãã«ã®å¿çæ§ãæª 1148 ããªããã¨ã«æ³¨æããªããã°ãªããªãï¼ç¹ã«ï¼ä½ã¬ãã«ã®æååºåå¦çã¯ãã 1149 ã¤ã¹ããã¼ãªã³ã°ããå½¢ã§å®è£ 1150 ããã®ãé常ã§ï¼ãã®å ´åã«ã¯ï¼ã«ã¼ãã«ã®å¿ 1151 çæ§ã¯å®ç¨çã¨è¨ããªãç¨ã«æªããªãï¼ 1152 1153 8.1.3 ãã°æ 1154 å ±ã®ç¨®å¥ 1155 1156 ã·ã¹ãã ãã°æ©è½ã¯ï¼ãã°æ 1157 å ±ã«ä»¥ä¸ã®ç¨®å¥ãè¨ãã¦ããï¼ 1158 1159 LOG_TYPE_COMMENT ã³ã¡ã³ã 1160 LOG_TYPE_ASSERT ã¢ãµã¼ã·ã§ã³ã®å¤±æ 1161 LOG_TYPE_INH å²è¾¼ã¿ãã³ãã© 1162 LOG_TYPE_ISR å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ 1163 LOG_TYPE_CYC å¨æãã³ãã© 1164 LOG_TYPE_ALM ã¢ã©ã¼ã ãã³ãã© 1165 LOG_TYPE_OVR ãªã¼ãã©ã³ãã³ãã© 1166 LOG_TYPE_EXC CPUä¾å¤ãã³ãã© 1167 LOG_TYPE_TEX ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ 1168 LOG_TYPE_TSKSTAT ã¿ã¹ã¯ç¶æ 1169 å¤å 1170 LOG_TYPE_DSP ãã£ã¹ããã㣠1171 LOG_TYPE_SVC ãµã¼ãã¹ã³ã¼ã« 1172 1173 ãã°æ 1174 å ±ã®ç¨®å¥ã®ä¸ã§ï¼LOG_TYPE_COMMENTã¨LOG_TYPE_ASSERT以å¤ã¯ï¼ã«ã¼ãã« 1175 ã®ãã¬ã¼ã¹ãã°ã«ç¨ããããã®ãã®ã§ãããï¼ä½¿ç¨ãããã©ããã¯ã¿ã¼ã²ãã 1176 ä¾åé¨ã«ä»»ããã¦ããï¼ 1177 1178 8.1.4 ãã°æ 1179 å ±ã®éè¦åº¦ 1180 1181 ã·ã¹ãã ãã°æ©è½ã¯ï¼ãã°æ 1182 å ±ãåºåããéã«æå®ããéè¦åº¦ã«åºã¥ãã¦ï¼å® 1183 éã«åºåãããã°æ 1184 å ±ãåçã«è¨å®ãããã¨ãã§ããï¼ããã¯ï¼UNIXã®ã·ã¹ã 1185 ã ãã°æ©è½ãã¾ãããã®ã§ï¼ãã°ã®éè¦åº¦ã®ç¨®é¡ãæå®æ¹æ³ãUNIXã®APIãåè 1186 ã«ãã¦ããï¼ã¾ãï¼ä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåãããã°æ 1187 å ±ãï¼éè¦åº¦ã« 1188 åºã¥ãã¦åçã«è¨å®ãããã¨ãã§ããï¼ 1189 1190 å 1191 ·ä½çã«ã¯ï¼ãã°ã®éè¦åº¦ã¨ãã¦æ¬¡ã®8段éãç¨æãã¦ããï¼ 1192 1193 LOG_EMERG ã«ã¼ãã«ã®åä½ãç¶ç¶ã§ããªãã¨ã©ã¼ 932 オブジェクトのID番号を保持する変数の定義を生成する.パス2でのみ 933 有効. 934 935 -M[--print-dependencies]<ターゲットシンボル> 936 システムコンフィギュレーションファイルの依存関係を出力する. 937 Makefile中の依存関係を生成する際に用いる. 938 939 コンフィギュレータの詳細仕様については,別途PDFファイルの形で配布してい 940 る「TOPPERS新世代カーネル用コンフィギュレータ仕様」を参照すること. 941 942 943 8.システムサービス 944 945 8.1 システムログ機能 946 947 システムログ機能は,カーネル内で発生した異常事象やカーネルのトレースロ 948 グ,システムサービスやアプリケーションで発生した異常事象やトレースログ 949 を,ログ情報として記録するための機能である.また,記録したログ情報を取 950 り出す機能も持つ. 951 952 システムログ機能は,システムコンフィギュレーションファイルでsyslog.cfg 953 をインクルードすることで,システムに組み込むことができる.システムログ 954 出力を行うソースファイルでは,t_syslog.hをインクルードする.また,シス 955 テムログ機能のその他のサービスコールを呼び出すソースファイルでは, 956 syslog.hをインクルードする. 957 958 8.1.1 システムログ機能の位置付け 959 960 システムログ機能は,カーネル内からも呼び出すことができるため,カーネル 961 より下の階層のモジュールと位置付けることができる.この意味では,他のシ 962 ステムサービスとは位置付けが異なる. 963 964 一方,ログ情報をシステム外部に出力するためには,シリアルインタフェース 965 ドライバなど,カーネル上で動作するシステムサービスを用いる必要がある. 966 そこで,ログ情報をシステム外部に出力するためのサービス(これを,システ 967 ムログタスクと呼ぶ)は,システムログ機能とは分離して実装することとし, 968 システムログ機能はログ情報の記録・取出しのための機能に絞っている. 969 970 以上のように,システムログ機能はカーネルより下の階層のモジュールである 971 が,システムログ機能の中でログ時刻を取り出すために,カーネルの機能を必 972 要とする.実装上は,カーネルの内部変数を直接参照している.そのため,カー 973 ネルの実行開始前や終了後は,ログ時刻は正しく記録されない. 974 975 8.1.2 ログバッファへの記録と低レベル出力 976 977 上述したように,ログ情報をシステムの外部に出力するためには,カーネル上 978 で動作するシステムサービスを用いる必要があるため,カーネルの動作を継続 979 できないような重大な異常事象が起こった場合には,ログ情報を出力できなく 980 なる.また,これらのシステムサービス自身をデバッグする場合にも,ログ情 981 報の出力ができない. 982 983 そこで,カーネル上で動作するシステムサービスが使えない場合にでもログ情 984 報を出力するために,低レベル出力機能を用意する.低レベル出力機能は,ター 985 ゲット依存に用意する低レベルの文字出力関数(target_fput_log)を用いてロ 986 グ情報を出力する機能である.低レベルの文字出力関数は,ターゲット依存部 987 で用意することとしているが,最終製品に組み込まれる場合などでは,文字を 988 出力する方法がない状況も考えられる.そのような場合,低レベルの文字出力 989 関数に送られた文字は,メモリ上に残しておくか,捨ててしまうしかない. 990 991 ログ情報を,ログバッファへ記録するか低レベル出力機能を用いて出力するか 992 の設定は,システムログ機能のサービスコール(syslog_msk_log)によって行 993 うことができる.syslog_msk_logの使い方については後述する.デフォルトで 994 は(システムログタスクを動作させず,syslog_msk_logも呼び出さない場合), 995 すべてのログ情報を低レベル出力機能を用いて出力し,ログバッファには記録 996 しない. 997 998 低レベル出力機能を用いると,ログメッセージの作成処理(printf相当の処理) 999 と低レベルの文字出力処理をカーネル内で行うために,カーネルの応答性が悪 1000 くなることに注意しなければならない.特に,低レベルの文字出力処理はデバ 1001 イスをポーリングする形で実装するのが通常で,その場合には,カーネルの応 1002 答性は実用的と言えない程に悪くなる. 1003 1004 8.1.3 ログ情報の種別 1005 1006 システムログ機能は,ログ情報に以下の種別を設けている. 1007 1008 LOG_TYPE_COMMENT コメント 1009 LOG_TYPE_ASSERT アサーションの失敗 1010 LOG_TYPE_INH 割込みハンドラ 1011 LOG_TYPE_ISR 割込みサービスルーチン 1012 LOG_TYPE_CYC 周期ハンドラ 1013 LOG_TYPE_ALM アラームハンドラ 1014 LOG_TYPE_OVR オーバランハンドラ 1015 LOG_TYPE_EXC CPU例外ハンドラ 1016 LOG_TYPE_TEX タスク例外処理ルーチン 1017 LOG_TYPE_TSKSTAT タスク状態変化 1018 LOG_TYPE_DSP ディスパッチャ 1019 LOG_TYPE_SVC サービスコール 1020 1021 ログ情報の種別の中で,LOG_TYPE_COMMENTとLOG_TYPE_ASSERT以外は,カーネル 1022 のトレースログに用いるためのものであるが,使用するかどうかはターゲット 1023 依存部に任されている. 1024 1025 8.1.4 ログ情報の重要度 1026 1027 システムログ機能は,ログ情報を出力する際に指定する重要度に基づいて,実 1028 際に出力するログ情報を動的に設定することができる.これは,UNIXのシステ 1029 ムログ機能をまねたもので,ログの重要度の種類や指定方法もUNIXのAPIを参考 1030 にしている.また,低レベル出力機能を用いて出力するログ情報も,重要度に 1031 基づいて動的に設定することができる. 1032 1033 具体的には,ログの重要度として次の8段階を用意している. 1034 1035 LOG_EMERG カーネルの動作を継続できないエラー 1194 1036 LOG_ALERT 1195 1037 LOG_CRIT 1196 LOG_ERROR éè¦æ§ã®ä½ãã·ã¹ãã ã¨ã©ã¼ 1197 LOG_WARNING è¦åã¡ãã»ã¼ã¸ï¼ã·ã¹ãã ã¯å®å 1198 ¨ã«ç¶ç¶åä½ã§ãã 1038 LOG_ERROR 重要性の低いシステムエラー 1039 LOG_WARNING 警告メッセージ.システムは安全に継続動作できる 1199 1040 LOG_NOTICE 1200 1041 LOG_INFO 1201 LOG_DEBUG ãããã°ã®ããã®ã¡ãã»ã¼ã¸ 1202 1203 ã©ã®éè¦åº¦ã®ãã°æ 1204 å ±ããã°ãããã¡ã«è¨é²ãããã¨ï¼ã©ã®éè¦åº¦ã®ãã°æ 1205 å ± 1206 ãä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåãããã¯ï¼ã·ã¹ãã ãã°æ©è½ã®ãµã¼ãã¹ã³ã¼ 1207 ã«ï¼syslog_msk_logï¼ã«ãã£ã¦è¨å®ãããã¨ãã§ããï¼ 1208 1209 8.1.5 ãã°æ 1210 å ±ã®ãã¼ã¿æ§é 1211 1212 ãã°æ 1213 å ±ãæ ¼ç´ããããã®ãã¼ã¿åã¨ãã¦ï¼SYSLOGæ§é ä½ãç¨æãã¦ããï¼ 1214 SYSLOGæ§é ä½ã«ã¯ï¼ãã°æ 1215 å ±ã®ç¨®å¥ï¼logtypeãã£ã¼ã«ãï¼ï¼ãã°æå» 1216 ï¼logtimãã£ã¼ã«ãï¼ï¼ãã®ä»ã®ãã°æ 1217 å ±ï¼loginfoãã£ã¼ã«ãï¼ãå«ã¾ããï¼ 1218 1219 SYSLOGæ§é ä½ã«æ ¼ç´ããããã°æ 1220 å ±ãåºåããå ´åã«ã¯ï¼ãã°æå»ã¯åºåé¢æ° 1221 ï¼syslog_wri_logï¼ã«ãã£ã¦æ¸ãè¾¼ã¾ããããï¼åºåé¢æ°ãå¼ã¶å´ã§æ¸ãè¾¼ã 1222 å¿ 1223 è¦ã¯ãªãï¼ 1224 1225 8.1.6 ã·ã¹ãã ãã°æ©è½ã®ãµã¼ãã¹ã³ã¼ã« 1226 1227 ã·ã¹ãã ãã°æ©è½ã®æä¾ãããµã¼ãã¹ã³ã¼ã«ã¯æ¬¡ã®éãã§ããï¼ãããã®ãµã¼ 1228 ãã¹ã³ã¼ã«ãå¼ã³åºãã½ã¼ã¹ãã¡ã¤ã«ã§ã¯ï¼syslog.hãã¤ã³ã¯ã«ã¼ãããå¿ 1229 è¦ 1230 ãããï¼ 1042 LOG_DEBUG デバッグのためのメッセージ 1043 1044 どの重要度のログ情報をログバッファに記録するかと,どの重要度のログ情報 1045 を低レベル出力機能を用いて出力するかは,システムログ機能のサービスコー 1046 ル(syslog_msk_log)によって設定することができる. 1047 1048 8.1.5 ログ情報のデータ構造 1049 1050 ログ情報を格納するためのデータ型として,SYSLOG構造体を用意している. 1051 SYSLOG構造体には,ログ情報の種別(logtypeフィールド),ログ時刻 1052 (logtimフィールド),その他のログ情報(loginfoフィールド)が含まれる. 1053 1054 SYSLOG構造体に格納されたログ情報を出力する場合には,ログ時刻は出力関数 1055 (syslog_wri_log)によって書き込まれるため,出力関数を呼ぶ側で書き込む 1056 必要はない. 1057 1058 8.1.6 システムログ機能のサービスコール 1059 1060 システムログ機能の提供するサービスコールは次の通りである.これらのサー 1061 ビスコールを呼び出すソースファイルでは,syslog.hをインクルードする必要 1062 がある. 1231 1063 1232 1064 (1) ER syslog_wri_log(uint_t prio, const SYSLOG *p_syslog) 1233 1065 1234 ã·ã¹ãã ãã°æ©è½ã«ï¼p_syslogã§æå®ããããã°æ 1235 å ±ãï¼prioã§æå®ãããé 1236 è¦åº¦ã§åºåããï¼ãã°ãããã¡ã¸è¨é²ãããä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåã 1237 ãï¼ï¼ 1238 1239 ãããã¿ã¤ã宣è¨ã«ããã¦ï¼*p_syslogã«constæå®ãããã¦ãããï¼å®éã«ã¯ï¼ 1240 ãã®é¢æ°ã®ä¸ã§ï¼*p_syslogã®logtimãã£ã¼ã«ãã«ã·ã¹ãã æå»ãæ¸ãè¾¼ãã§ã 1241 ãï¼ 1066 システムログ機能に,p_syslogで指定されるログ情報を,prioで指定される重 1067 要度で出力する(ログバッファへ記録するか低レベル出力機能を用いて出力す 1068 る). 1069 1070 プロトタイプ宣言において,*p_syslogにconst指定がされているが,実際には, 1071 この関数の中で,*p_syslogのlogtimフィールドにシステム時刻を書き込んでい 1072 る. 1242 1073 1243 1074 (2) ER_UINT syslog_rea_log(SYSLOG *p_syslog) 1244 1075 1245 ãã°ãããã¡ãããã°æ 1246 å ±ã1ã¤åãåºãï¼ãã°ãããã¡ã空ã®æã¯E_OBJï¼ã 1247 ãã§ãªãå ´åã¯ï¼ãã°ãããã¡ã®ãªã¼ãããã¼ã«ãã失ããããã°æ 1248 å ±ã®æ° 1249 ï¼ãã°æ 1250 å ±ã失ããã¦ããªãå ´åã¯0ï¼ãè¿ãï¼ã·ã¹ãã ãã°ã¿ã¹ã¯ãç¨ããã 1251 ã¨ãæ³å®ãã¦ããï¼ 1076 ログバッファからログ情報を1つ取り出す.ログバッファが空の時はE_OBJ,そ 1077 うでない場合は,ログバッファのオーバフローにより失われたログ情報の数 1078 (ログ情報が失われていない場合は0)を返す.システムログタスクが用いるこ 1079 とを想定している. 1252 1080 1253 1081 (3) ER syslog_msk_log(uint_t logmask, uint_t lowmask) 1254 1082 1255 ãã°ãããã¡ã«è¨é²ãã¹ããã°æ 1256 å ±ã®éè¦åº¦ã®ç¤ºãããããããï¼logmaskï¼ã¨ï¼ 1257 ä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåãã¹ããã°æ 1258 å ±ã®éè¦åº¦ã示ããããããã 1259 ï¼lowmaskï¼ãè¨å®ããï¼ãããããããä½ãããã®ãã¯ãã¨ãã¦ï¼LOG_MASK㨠1260 LOG_UPTOãç¨æãã¦ããï¼ 1083 ログバッファに記録すべきログ情報の重要度の示すビットマップ(logmask)と, 1084 低レベル出力機能を用いて出力すべきログ情報の重要度を示すビットマップ 1085 (lowmask)を設定する.ビットマップを作るためのマクロとして,LOG_MASKと 1086 LOG_UPTOを用意している. 1261 1087 1262 1088 (4) ER syslog_ref_log(T_SYSLOG_RLOG *pk_rlog) 1263 1089 1264 ã·ã¹ãã ãã°æ©è½ã®ç¶æ 1265 ãåç 1266 §ããï¼å 1267 ·ä½çã«ã¯ï¼ãã°ãããã¡ã«è¨é²ãã㦠1268 ãããã°æ 1269 å ±ã®æ°ï¼T_SYSLOG_RLOGæ§é ä½ã®countãã£ã¼ã«ãï¼ï¼ãã°ãããã¡ 1270 ã®ãªã¼ãããã¼ã«ãã失ããããã°æ 1271 å ±ã®æ°ï¼lostãã£ã¼ã«ãï¼ï¼ãã°ãããã¡ 1272 ã«è¨é²ãã¹ããã°æ 1273 å ±ã®éè¦åº¦ã®ç¤ºãããããããï¼logmaskãã£ã¼ã«ãï¼ï¼ä½ 1274 ã¬ãã«åºåæ©è½ãç¨ãã¦åºåãã¹ããã°æ 1275 å ±ã®éè¦åº¦ã示ããããããã 1276 ï¼lowmaskãã£ã¼ã«ãï¼ãåç 1277 §ãããã¨ãã§ããï¼ 1278 1279 8.1.7 ã·ã¹ãã ãã°æ©è½ã®ããã®ã©ã¤ãã©ãªé¢æ°ã¨ãã¯ã 1280 1281 ã·ã¹ãã ãã°åºåã®ããã®ã©ã¤ãã©ãªé¢æ°ã¨ãã¯ãã¯æ¬¡ã®éãã§ããï¼ããã 1282 ã ããå¼ã³åºãã½ã¼ã¹ãã¡ã¤ã«ã§ã¯ï¼t_syslog.hãã¤ã³ã¯ã«ã¼ãããã°ããï¼ 1090 システムログ機能の状態を参照する.具体的には,ログバッファに記録されて 1091 いるログ情報の数(T_SYSLOG_RLOG構造体のcountフィールド),ログバッファ 1092 のオーバフローにより失われたログ情報の数(lostフィールド),ログバッファ 1093 に記録すべきログ情報の重要度の示すビットマップ(logmaskフィールド),低 1094 レベル出力機能を用いて出力すべきログ情報の重要度を示すビットマップ 1095 (lowmaskフィールド)を参照することができる. 1096 1097 8.1.7 システムログ機能のためのライブラリ関数とマクロ 1098 1099 システムログ出力のためのライブラリ関数とマクロは次の通りである.これら 1100 だけを呼び出すソースファイルでは,t_syslog.hをインクルードすればよい. 1283 1101 1284 1102 (1) void _syslog_n(uint_t prio, uint_t type, intptr_t arg1, ..., intptr_t argn) 1285 â» nã¯0ï½6ã®ããããï¼ 1286 1287 ãã°ç¨®å¥ãtypeï¼ãã©ã¡ã¼ã¿ãarg1ï½argnã®ãã°æ 1288 å ±ãï¼éè¦åº¦prioã§åºåã 1289 ãããã®é¢æ°ï¼ 1103 ※ nは0~6のいずれか. 1104 1105 ログ種別がtype,パラメータがarg1~argnのログ情報を,重要度prioで出力す 1106 るための関数. 1290 1107 1291 1108 (2) void syslog_n(uint_t prio, const char *format, arg1, ..., argn) 1292 â» nã¯0ï½5ã®ããããï¼ 1293 1294 formatæååããã³ããã«ç¶ãå¼æ°ããä½æãããã¡ãã»ã¼ã¸ãï¼ãã°ç¨®å¥ã 1295 LOG_TYPE_COMMENTã®ãã°æ 1296 å ±ã¨ãã¦ï¼éè¦åº¦prioã§åºåããããã®ãã¯ãï¼ 1297 1298 formatã¯ã¡ãã»ã¼ã¸ã®ãã©ã¼ãããè¨è¿°ï¼arg1ï½argnã¯ãã©ã¼ãããè¨è¿°ä¸ã§ 1299 åç 1300 §ãããå¤ã§ï¼printfã®ãã©ã¼ãããè¨è¿°ã®ãµãã»ããã¨ãªã£ã¦ããï¼arg1ï½ 1301 argnã¯ï¼ãã®ãã¯ãä¸ã§intptr_tåã«ãã£ã¹ããããããï¼intptr_tåã«åå¤ 1302 æã§ããä»»æã®åã渡ããã¨ãã§ãï¼åãã§ãã¯ã¯ãããªãï¼formatããã³ 1303 arg1ï½argnã«ã¯ï¼æ¬¡ã®å¶éãããï¼ 1304 1305 ã»formatã®ãã©ã¼ãããè¨è¿°ã¯ï¼å®æ°æååã渡ããã¨ãæ³å®ãã¦ããï¼ãã® 1306 ãã¯ãå¦çãçµããå¾ãå¤åãã¦ã¯ãªããªãï¼ 1307 1308 ã»formatä¸ã«ä½¿ãããã©ã¼ãããæå®ã¯æ¬¡ã®éãï¼ 1309 1310 %d å¼æ°ãint_tåã¨ã¿ãªãï¼10é²æ°ã§è¡¨ç¤º 1311 %u å¼æ°ãuint_tåã¨ã¿ãªãï¼10é²æ°ã§è¡¨ç¤º 1312 %x å¼æ°ãuint_tåã¨ã¿ãªãï¼16é²æ°ï¼è±æåã¯å°æåï¼ã§è¡¨ç¤º 1313 %X å¼æ°ãuint_tåã¨ã¿ãªãï¼16é²æ°ï¼è±æåã¯å¤§æåï¼ã§è¡¨ç¤º 1314 %p å¼æ°ããã¤ã³ã¿ã¨ã¿ãªãï¼16é²æ°ï¼è±æåã¯å°æåï¼ã§è¡¨ç¤º 1315 %c å¼æ°ãæåã³ã¼ãã¨ã¿ãªãï¼æåã表示 1316 %s å¼æ°ãæååã示ããã¤ã³ã¿ã¨ã¿ãªãï¼æååã表示 1317 %% '%'ã表示ï¼å¼æ°ã¯åããªãï¼ 1318 1319 %d, %u, %x, %Xã«ããã¦ã¯ï¼'%'ã®ç´å¾ã«è¡¨ç¤ºæ¡æ°ãæå®ãã10é²æ°å¤ãè¨è¿°ã 1320 ããã¨ãã§ããï¼ãã®å ´åï¼è¡¨ç¤ºãã¹ãæååãæå®ããæ¡æ°ã«æºããªãå ´å 1321 ã«ã¯ï¼æå®ããæ¡æ°å 1322 ã«å³è©°ãã§è¡¨ç¤ºããï¼10é²æ°å¤ã'0'ã§å§ã¾ãå ´åã«ã¯ï¼ 1323 ãã®éã«'0'ãåããï¼ 1324 1325 ã¾ãï¼intptr_tåã®ãµã¤ãºãlongåã®ãµã¤ãºä»¥ä¸ã§ããç°å¢ã«ããã¦ã¯ï¼æ¬¡ã® 1326 ãã©ã¼ãããæå®ã使ç¨ãããã¨ãã§ããï¼ãã®ä»ã®ãã©ã¼ãããæå®ã«'l' 1327 ãä»å ããå ´åã«ã¯ç¡è¦ããï¼%lcã¨%lsã«ã¯å¯¾å¿ãã¦ããªãï¼ï¼ 1328 1329 %ld å¼æ°ãlong_tåã¨ã¿ãªãï¼10é²æ°ã§è¡¨ç¤º 1330 %lu å¼æ°ãulong_tåã¨ã¿ãªãï¼10é²æ°ã§è¡¨ç¤º 1331 %lx å¼æ°ãulong_tåã¨ã¿ãªãï¼16é²æ°ï¼è±æåã¯å°æåï¼ã§è¡¨ç¤º 1332 %lX å¼æ°ãulong_tåã¨ã¿ãªãï¼16é²æ°ï¼è±æåã¯å¤§æåï¼ã§è¡¨ç¤º 1333 1334 ã»arg1ï½argnã«ãã¤ã³ã¿ã渡ãå ´åï¼%sã«å¯¾å¿ããå¼æ°ã®å ´åï¼ã«ï¼ãã¤ã³ã¿ 1335 ã®æããã¼ã¿ã¯ï¼ãã®ãã¯ãå¦çãçµããå¾ãå¤åãã¦ã¯ãªããªãï¼å®æ°æå 1336 åã渡ããã¨ãæ³å®ãã¦ããï¼ 1109 ※ nは0~5のいずれか. 1110 1111 format文字列およびそれに続く引数から作成されるメッセージを,ログ種別が 1112 LOG_TYPE_COMMENTのログ情報として,重要度prioで出力するためのマクロ. 1113 1114 formatはメッセージのフォーマット記述,arg1~argnはフォーマット記述中で 1115 参照される値で,printfのフォーマット記述のサブセットとなっている.arg1~ 1116 argnは,このマクロ中でintptr_t型にキャストされるため,intptr_t型に型変 1117 換できる任意の型を渡すことができ,型チェックはされない.formatおよび 1118 arg1~argnには,次の制限がある. 1119 1120 ・formatのフォーマット記述は,定数文字列を渡すことを想定しており,この 1121 マクロ処理を終えた後も変化してはならない. 1122 1123 ・format中に使えるフォーマット指定は次の通り. 1124 1125 %d 引数をint_t型とみなし,10進数で表示 1126 %u 引数をuint_t型とみなし,10進数で表示 1127 %x 引数をuint_t型とみなし,16進数(英文字は小文字)で表示 1128 %X 引数をuint_t型とみなし,16進数(英文字は大文字)で表示 1129 %p 引数をポインタとみなし,16進数(英文字は小文字)で表示 1130 %c 引数を文字コードとみなし,文字を表示 1131 %s 引数を文字列を示すポインタとみなし,文字列を表示 1132 %% '%'を表示(引数は取らない) 1133 1134 %d, %u, %x, %Xにおいては,'%'の直後に表示桁数を指定する10進数値を記述す 1135 ることができる.その場合,表示すべき文字列が指定した桁数に満たない場合 1136 には,指定した桁数内に右詰めで表示する.10進数値が'0'で始まる場合には, 1137 その間に'0'を埋める. 1138 1139 また,intptr_t型のサイズがlong型のサイズ以上である環境においては,次の 1140 フォーマット指定も使用することができる.この他のフォーマット指定に'l' 1141 を付加した場合には無視する(%lcと%lsには対応していない). 1142 1143 %ld 引数をlong_t型とみなし,10進数で表示 1144 %lu 引数をulong_t型とみなし,10進数で表示 1145 %lx 引数をulong_t型とみなし,16進数(英文字は小文字)で表示 1146 %lX 引数をulong_t型とみなし,16進数(英文字は大文字)で表示 1147 1148 ・arg1~argnにポインタを渡す場合(%sに対応する引数の場合)に,ポインタ 1149 の指すデータは,このマクロ処理を終えた後も変化してはならない.定数文字 1150 列を渡すことを想定している. 1337 1151 1338 1152 (3) void syslog(uint_t prio, const char *format, ...) 1339 1153 1340 formatæååããã³ããã«ç¶ãå¼æ°ããä½æãããã¡ãã»ã¼ã¸ãï¼ãã°ç¨®å¥ã 1341 LOG_TYPE_COMMENTã®ãã°æ 1342 å ±ã¨ãã¦ï¼éè¦åº¦prioã§åºåããããã®é¢æ°ã§ï¼å¼ 1343 æ°ã®æ°ãå¯å¤ã«ãããã®ï¼formatã«ç¶ãå¼æ°ã¯æ大5åã¾ã§ï¼formatããã³ãã 1344 ã«ç¶ãå¼æ°ã«ã¯ï¼syslog_nã¨åæ§ã®å¶éãããï¼ 1345 1346 ãã®ã©ã¤ãã©ãªé¢æ°ã¯ï¼å¯å¤æ°å¼æ°ãå¦çããããã«å 1347 é¨ã§æååãã¹ãã£ã³ 1348 ããï¼ãã®ããï¼å®è¡æéãé·ããªãå¯è½æ§ãããï¼å²è¾¼ã¿ç¦æ¢ç¶æ 1349 ã§å¼ã³åº 1350 ãã¹ãã§ã¯ãªãï¼ä¸»ã«ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ãç¨ãããã¨ãæ³å®ãã¦ã 1351 ãï¼ 1154 format文字列およびそれに続く引数から作成されるメッセージを,ログ種別が 1155 LOG_TYPE_COMMENTのログ情報として,重要度prioで出力するための関数で,引 1156 数の数を可変にしたもの.formatに続く引数は最大5個まで.formatおよびそれ 1157 に続く引数には,syslog_nと同様の制限がある. 1158 1159 このライブラリ関数は,可変数引数を処理するために内部で文字列をスキャン 1160 する.そのため,実行時間が長くなる可能性があり,割込み禁止状態で呼び出 1161 すべきではない.主にアプリケーションプログラムが用いることを想定してい 1162 る. 1352 1163 1353 1164 (4) UINT LOG_MASK(UINT prio) 1354 1165 1355 éè¦åº¦prioã®ã¿ã»ããããããããããããä½ããã¯ãï¼syslog_msk_logã«æ¸¡ 1356 ãå¼æ°ãä½ãããã«ç¨ããï¼ 1166 重要度prioのみセットされたビットマップを作るマクロ.syslog_msk_logに渡 1167 す引数を作るために用いる. 1357 1168 1358 1169 (5) UINT LOG_UPTO(UINT prio) 1359 1170 1360 éè¦åº¦prio以ä¸ã®éè¦åº¦ããã¹ã¦ã»ããããããããããããä½ããã¯ãï¼ 1361 syslog_msk_log ã«æ¸¡ãå¼æ°ãä½ãããã«ç¨ããï¼1362 1363 8.1.8 ã·ã¹ãã ãã°æ©è½ã®ãã®ä»ã®ãµã¼ãã¹1364 1365 ã·ã¹ãã ãã°æ©è½ã¯ï¼åè¨ã®ãµã¼ãã¹ã³ã¼ã«çã«å ãã¦ï¼åæåå¦çã®ããã® 1366 é¢æ°ãæã¤ï¼ 1171 重要度prio以上の重要度がすべてセットされたビットマップを作るマクロ. 1172 syslog_msk_logに渡す引数を作るために用いる. 1173 1174 8.1.8 システムログ機能のその他のサービス 1175 1176 システムログ機能は,前記のサービスコール等に加えて,初期化処理のための 1177 関数を持つ. 1367 1178 1368 1179 (1) void syslog_initialize(intptr_t exinf) 1369 1180 1370 ã·ã¹ãã ãã°æ©è½ãåæåããï¼ãã°ãããã¡ã«ãã°æ 1371 å ±ãè¨é²ããã¦ããå ´ 1372 åã«ã¯ï¼æ¶å»ãããï¼syslog.cfgã«ãã£ã¦ï¼ã«ã¼ãã«ã«åæåã«ã¼ãã³ã¨ã㦠1373 ç»é²ãããï¼exinfã¯ç¡è¦ãããï¼ 1374 1375 8.2 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ã 1376 1377 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¯ï¼ã·ãªã¢ã«ãã¼ããæ±ãããã®ãã©ã¤ã㧠1378 ããï¼ 1379 1380 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ 1381 ã«ã§serial.cfgãã¤ã³ã¯ã«ã¼ããããã¨ã§ï¼ã·ã¹ãã ã«çµã¿è¾¼ããã¨ãã§ããï¼ 1382 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ããå¼ã³åºãã½ã¼ã¹ãã¡ã¤ã«ã§ã¯ï¼serial.hã 1383 ã¤ã³ã¯ã«ã¼ãããï¼ 1384 1385 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¯ï¼ãã¼ãæ¯ã«ã»ããã©ã2åãã¤ä½¿ç¨ããï¼ 1386 ã»ããã©ãçæããéçAPIã¯ï¼serial.cfgã«å«ã¾ãã¦ããï¼ 1387 1388 8.2.1 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãµã¼ãã¹ã³ã¼ã« 1389 1390 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ããå¼ã³åºããµã¼ãã¹ã³ã¼ã«ã®ä»æ§ã¯æ¬¡ã®éã 1391 ã§ããï¼ãã®ä¸ã§ï¼ã·ãªã¢ã«ãã¼ãã®IDçªå·ï¼portidï¼ã®è§£éã¯ã¿ã¼ã²ããä¾ 1392 åã¨ãªãï¼ 1393 1394 ãããã®ãµã¼ãã¹ã³ã¼ã«ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãããå¼ã³åºããã¨ã¯ã§ã㪠1395 ãï¼ã¾ãï¼serial_rea_datã¨serial_wri_datã¯ï¼ãã£ã¹ãããä¿çç¶æ 1396 ã§å¼ã³ 1397 åºããã¨ã¯ã§ããªãï¼ããããï¼å¼ã³åºããå ´åã«ã¯E_CTXã¨ã©ã¼ã¨ãªãï¼ 1181 システムログ機能を初期化する.ログバッファにログ情報が記録されている場 1182 合には,消去される.syslog.cfgによって,カーネルに初期化ルーチンとして 1183 登録される.exinfは無視される. 1184 1185 8.2 シリアルインタフェースドライバ 1186 1187 シリアルインタフェースドライバは,シリアルポートを扱うためのドライバで 1188 ある. 1189 1190 シリアルインタフェースドライバは,システムコンフィギュレーションファイ 1191 ルでserial.cfgをインクルードすることで,システムに組み込むことができる. 1192 シリアルインタフェースドライバを呼び出すソースファイルでは,serial.hを 1193 インクルードする. 1194 1195 シリアルインタフェースドライバは,ポート毎にセマフォを2個ずつ使用する. 1196 セマフォを生成する静的APIは,serial.cfgに含まれている. 1197 1198 8.2.1 シリアルインタフェースドライバのサービスコール 1199 1200 シリアルインタフェースドライバを呼び出すサービスコールの仕様は次の通り 1201 である.この中で,シリアルポートのID番号(portid)の解釈はターゲット依 1202 存となる. 1203 1204 これらのサービスコールは,非タスクコンテキストから呼び出すことはできな 1205 い.また,serial_rea_datとserial_wri_datは,ディスパッチ保留状態で呼び 1206 出すことはできない.いずれも,呼び出した場合にはE_CTXエラーとなる. 1398 1207 1399 1208 (1) ER serial_opn_por(ID portid) 1400 1209 1401 portidã§æå®ãããã·ãªã¢ã«ãã¼ãããªã¼ãã³ãï¼åä¿¡ï¼éä¿¡ãå¯è½ãªç¶æ 1402 ã« 1403 ããï¼ 1210 portidで指定されたシリアルポートをオープンし,受信/送信が可能な状態に 1211 する. 1404 1212 1405 1213 (2) ER serial_cls_por(ID portid) 1406 1214 1407 portid ã§æå®ãããã·ãªã¢ã«ãã¼ããã¯ãã¼ãºããï¼1215 portidで指定されたシリアルポートをクローズする. 1408 1216 1409 1217 (3) ER_UINT serial_rea_dat(ID portid, char *buf, uint_t len) 1410 1218 1411 portidã§æå®ãããã·ãªã¢ã«ãã¼ãããï¼lenãã¤ãã®æååãåä¿¡ãï¼bufã 1412 ãã®é åã«å 1413 ¥ããï¼lenãã¤ãåä¿¡ããã¾ã§ï¼å¾ 1414 ã¡ç¶æ 1415 ã¨ãªãï¼åä¿¡ããæåæ° 1416 ã¾ãã¯ã¨ã©ã¼ã³ã¼ããè¿ãï¼ 1219 portidで指定されたシリアルポートから,lenバイトの文字列を受信し,bufか 1220 らの領域に入れる.lenバイト受信するまで,待ち状態となる.受信した文字数 1221 またはエラーコードを返す. 1417 1222 1418 1223 (4) ER_UINT serial_wri_dat(ID portid, const char *buf, uint_t len) 1419 1224 1420 portidã§æå®ãããã·ãªã¢ã«ãã¼ãã«ï¼bufããã®lenãã¤ãã®æååãéä¿¡ã 1421 ãï¼lenãã¤ãéä¿¡ãããã¡ã«å 1422 ¥ããã¾ã§ï¼å¾ 1423 ã¡ç¶æ 1424 ã¨ãªãï¼éä¿¡ããæåæ°ã¾ 1425 ãã¯ã¨ã©ã¼ã³ã¼ããè¿ãï¼ 1225 portidで指定されたシリアルポートに,bufからのlenバイトの文字列を送信す 1226 る.lenバイト送信バッファに入れるまで,待ち状態となる.送信した文字数ま 1227 たはエラーコードを返す. 1426 1228 1427 1229 (5) ER serial_ctl_por(ID portid, uint_t ioctl) 1428 1230 1429 portidã§æå®ãããã·ãªã¢ã«ãã¼ãã®å¶å¾¡æ 1430 å ±ãï¼ioctlã§ç¤ºãããå¤ã«è¨å®ã 1431 ãï¼ 1432 1433 ioctlã«ã¯ï¼ä»¥ä¸ã®å¶å¾¡æ 1434 å ±ã表ãå®æ°ãï¼ãããæ¯ã«è«çåãã¨ã£ããã®ã 1435 æå®ããï¼ 1436 1437 IOCTL_ECHOï¼ã¨ã³ã¼ããã¯ã¢ã¼ãï¼ 1438 ãã®ããããè¨å®ããã¨ï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ããã¨ã³ã¼ 1439 ããã¯ãè¡ãï¼å 1440 ·ä½çã«ã¯ï¼ãããã¡ããæåãåãåºã度ã«ï¼ãã® 1441 æåãæ¸ãåºãï¼ 1442 1443 IOCTL_CRLFï¼æ¹è¡ã¢ã¼ãï¼ 1444 LFï¼line feedï¼ãæ¸ãåºãã¨ï¼CRï¼carriage returnï¼ï¼LFã«å¤æã 1445 ã¦æ¸ãåºãï¼ 1446 1447 IOCTL_FCSNDï¼éä¿¡ããã¼å¶å¾¡ï¼ 1448 æåãéä¿¡ããå¦çã«å¯¾ãã¦ï¼XON/XOFFã«ããããã¼å¶å¾¡ãè¡ãï¼ 1449 ããªãã¡ï¼STOPï¼ã³ã³ããã¼ã«-Sï¼ãåä¿¡ããã¨éä¿¡ãåæ¢ãï¼ 1450 STARTï¼ã³ã³ããã¼ã«-Qï¼ãåä¿¡ããã¨éä¿¡ãåéããï¼ 1451 1452 IOCTL_FCANYï¼éä¿¡ããã¼å¶å¾¡ã§ä»»æã®æåã§éä¿¡åéï¼ 1453 IOCTL_FCSNDãæå®ãã¦ããæã«ï¼éä¿¡åæ¢ä¸ã«åä¿¡ããä»»æã®æå 1454 ã§éä¿¡ãåéããï¼ 1455 1456 IOCTL_FCRCVï¼åä¿¡ããã¼å¶å¾¡ï¼ 1457 æåãåä¿¡ããå¦çã«å¯¾ãã¦ï¼XON/XOFFã«ããããã¼å¶å¾¡ãè¡ãï¼ 1458 ããªãã¡ï¼åä¿¡ãããã¡ã®æ®ãé åãå°ãªããªãã¨STOPï¼ã³ã³ããã¼ 1459 ã«-Sï¼ãéåºãï¼æ®ãé åãå¢ããã°STARTï¼ã³ã³ããã¼ã«-Qï¼ãé 1460 åºããï¼ 1461 1462 ãªãï¼ãªã¼ãã³ç´å¾ã®ããã©ã«ãã®è¨å®å¤ã¯(IOCTL_ECHO | IOCTL_CRLF | 1463 IOCTL_FCSND | IOCTL_FCRCV)ã§ããï¼ 1231 portidで指定されたシリアルポートの制御情報を,ioctlで示される値に設定す 1232 る. 1233 1234 ioctlには,以下の制御情報を表す定数を,ビット毎に論理和をとったものを 1235 指定する. 1236 1237 IOCTL_ECHO(エコーバックモード) 1238 このビットを設定すると,シリアルインタフェースドライバがエコー 1239 バックを行う.具体的には,バッファから文字を取り出す度に,その 1240 文字を書き出す. 1241 1242 IOCTL_CRLF(改行モード) 1243 LF(line feed)を書き出すと,CR(carriage return)+LFに変換し 1244 て書き出す. 1245 1246 IOCTL_FCSND(送信フロー制御) 1247 文字を送信する処理に対して,XON/XOFFによるフロー制御を行う. 1248 すなわち,STOP(コントロール-S)を受信すると送信を停止し, 1249 START(コントロール-Q)を受信すると送信を再開する. 1250 1251 IOCTL_FCANY(送信フロー制御で任意の文字で送信再開) 1252 IOCTL_FCSNDを指定している時に,送信停止中に受信した任意の文字 1253 で送信を再開する. 1254 1255 IOCTL_FCRCV(受信フロー制御) 1256 文字を受信する処理に対して,XON/XOFFによるフロー制御を行う. 1257 すなわち,受信バッファの残り領域が少なくなるとSTOP(コントロー 1258 ル-S)を送出し,残り領域が増えればSTART(コントロール-Q)を送 1259 出する. 1260 1261 なお,オープン直後のデフォルトの設定値は(IOCTL_ECHO | IOCTL_CRLF | 1262 IOCTL_FCSND | IOCTL_FCRCV)である. 1464 1263 1465 1264 (6) ER serial_ref_por(ID portid, T_SERIAL_RPOR *pk_rpor) 1466 1265 1467 portidã§æå®ãããã·ãªã¢ã«ãã¼ãã®ç¶æ 1468 ãåç 1469 §ãï¼pk_rporã§æå®ããããã±ã 1470 ãã«è¿ãï¼ãã±ããä¸ã®reacntã«ã¯åä¿¡ãããã¡ä¸ã®æåæ°ãï¼wricntã«ã¯é 1471 ä¿¡ãããã¡ä¸ã®æåæ°ãè¿ãï¼ 1472 1473 8.2.2 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãã®ä»ã®ãµã¼ãã¹ 1474 1475 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¯ï¼åè¨ã®ãµã¼ãã¹ã³ã¼ã«ã«å ãã¦ï¼åæå 1476 å¦çã¨æªéä¿¡æåã®ååºãå¦çãæã¤ï¼åæåå¦çã¯ï¼ã«ã¼ãã«ã«åæåã«ã¼ 1477 ãã³ã¨ãã¦ç»é²ããï¼ã¾ãï¼ã¿ã¼ã²ããä¾åã§ï¼åæåå¦çï¼çµäºå¦çï¼å²è¾¼ 1478 ã¿ãµã¼ãã¹ã«ã¼ãã³ãæã¤ï¼ãããã®ç»é²å¦çã¯serial.cfgã«å«ã¾ããï¼ 1266 portidで指定されたシリアルポートの状態を参照し,pk_rporで指定されるパケッ 1267 トに返す.パケット中のreacntには受信バッファ中の文字数を,wricntには送 1268 信バッファ中の文字数を返す. 1269 1270 8.2.2 シリアルインタフェースドライバのその他のサービス 1271 1272 シリアルインタフェースドライバは,前記のサービスコールに加えて,初期化 1273 処理と未送信文字の取出し処理を持つ.初期化処理は,カーネルに初期化ルー 1274 チンとして登録する.また,ターゲット依存で,初期化処理,終了処理,割込 1275 みサービスルーチンを持つ.これらの登録処理はserial.cfgに含まれる. 1479 1276 1480 1277 (1) void serial_initialize(intptr_t exinf) 1481 1278 1482 ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ããåæåããï¼ã«ã¼ãã«ã«åæåã«ã¼ãã³ã¨ 1483 ãã¦ç»é²ããï¼exinfã¯ç¡è¦ããï¼ 1279 シリアルインタフェースドライバを初期化する.カーネルに初期化ルーチンと 1280 して登録する.exinfは無視する. 1484 1281 1485 1282 (2) bool_t serial_get_chr(ID portid, char *p_c) 1486 1283 1487 portidã§æå®ãããã·ãªã¢ã«ãã¼ãã®éä¿¡ãããã¡ä¸ã®æåãï¼p_cã®æãçªå° 1488 ã«åãåºãï¼trueãè¿ãé¢æ°ï¼æåããªãã£ãæã«ã¯ï¼falseãè¿ãï¼çµäºå¦ç 1489 ã«ã¼ãã³ä¸ã§å¼ã³åºããã¨ãæ³å®ãã¦ããï¼ 1490 1491 8.3 ã·ã¹ãã ãã°ã¿ã¹ã¯ 1492 1493 ã·ã¹ãã ãã°ã¿ã¹ã¯ã¯ï¼ã·ã¹ãã ãã°æ©è½ãããã°æ 1494 å ±ãåãåºãï¼ãããã· 1495 ã¹ãã ã®å¤é¨ã«åºåããããã®ãµã¼ãã¹ã§ããï¼ 1496 1497 ASPã«ã¼ãã«ã®ãªãªã¼ã¹ããã±ã¼ã¸ã«å«ã¾ããã·ã¹ãã ãã°ã¿ã¹ã¯ã¯ï¼ã·ãªã¢ã« 1498 ãã¼ãã«ãã°æ 1499 å ±ãæååã®å½¢ã§åºåãããã®ã§ï¼ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ä¸ä¾ 1500 ã¨ããä½ç½®ä»ãã§æä¾ãã¦ããï¼ 1501 1502 ãã®ã·ã¹ãã ãã°ã¿ã¹ã¯ã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã§ 1503 logtask.cfgãã¤ã³ã¯ã«ã¼ããããã¨ã§ï¼ã·ã¹ãã ã«çµã¿è¾¼ããã¨ãã§ããï¼ã· 1504 ã¹ãã ãã°ã¿ã¹ã¯ã®ãµã¼ãã¹ãå¼ã³åºãã½ã¼ã¹ãã¡ã¤ã«ã§ã¯ï¼logtask.hãã¤ã³ 1505 ã¯ã«ã¼ãããï¼ 1506 1507 ã·ã¹ãã ãã°ã¿ã¹ã¯ãå®è¡éå§ãããã¨ï¼éè¦åº¦ãLOG_EMERGã®ãã°æ 1508 å ±ãä½ã¬ 1509 ãã«åºåæ©è½ãç¨ãã¦åºåãï¼éè¦åº¦ãLOG_NOTICEãããããé«ããã°æ 1510 å ±ã 1511 ãã°ãããã¡ã«è¨é²ããããã«ï¼ã·ã¹ãã ãã°æ©è½ã®è¨å®ãå¤æ´ãããï¼ 1512 1513 8.3.1 ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ãµã¼ãã¹ã³ã¼ã« 1514 1515 ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ãµã¼ãã¹ãå¼ã³åºããµã¼ãã¹ã³ã¼ã«ã®ä»æ§ã¯æ¬¡ã®éã㧠1516 ããï¼ 1284 portidで指定されたシリアルポートの送信バッファ中の文字を,p_cの指す番地 1285 に取り出し,trueを返す関数.文字がなかった時には,falseを返す.終了処理 1286 ルーチン中で呼び出すことを想定している. 1287 1288 8.3 システムログタスク 1289 1290 システムログタスクは,システムログ機能からログ情報を取り出し,それをシ 1291 ステムの外部に出力するためのサービスである. 1292 1293 ASPカーネルのリリースパッケージに含まれるシステムログタスクは,シリアル 1294 ポートにログ情報を文字列の形で出力するもので,システムログタスクの一例 1295 という位置付けで提供している. 1296 1297 このシステムログタスクは,システムコンフィギュレーションファイルで 1298 logtask.cfgをインクルードすることで,システムに組み込むことができる.シ 1299 ステムログタスクのサービスを呼び出すソースファイルでは,logtask.hをイン 1300 クルードする. 1301 1302 システムログタスクが実行開始されると,重要度がLOG_EMERGのログ情報を低レ 1303 ベル出力機能を用いて出力し,重要度がLOG_NOTICEかそれより高いログ情報を 1304 ログバッファに記録するように,システムログ機能の設定が変更される. 1305 1306 8.3.1 システムログタスクのサービスコール 1307 1308 システムログタスクのサービスを呼び出すサービスコールの仕様は次の通りで 1309 ある. 1517 1310 1518 1311 (1) ER logtask_flush(uint_t count) 1519 1312 1520 ã·ã¹ãã ãã°æ©è½ã®ãã°ãããã¡ä¸ã®ãã°æ 1521 å ±ã®æ°ãcount以ä¸ã«ãªãã¾ã§å¾ 1522 ã¤ï¼ 1523 countã0ã®å ´åã«ã¯ï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®éä¿¡ãããã¡ã空㫠1524 ãªãã®ãå¾ 1525 ã¤ï¼ 1526 1527 8.3.2 ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ãã®ä»ã®ãµã¼ãã¹ 1528 1529 ã·ã¹ãã ãã°ã¿ã¹ã¯ã¯ï¼åè¨ã®ãµã¼ãã¹ã³ã¼ã«ã«å ãã¦ï¼ã¡ã¤ã³å¦çã¨çµäºå¦ 1530 çãæã¤ï¼ã¡ã¤ã³å¦çã¯ã¿ã¹ã¯ã¨ãã¦ï¼çµäºå¦çã¯çµäºå¦çã«ã¼ãã³ã¨ãã¦ç» 1531 é²ããï¼ãããã®ç»é²å¦çã¯logtask.cfgã«å«ã¾ããï¼ 1313 システムログ機能のログバッファ中のログ情報の数がcount以下になるまで待つ. 1314 countが0の場合には,シリアルインタフェースドライバの送信バッファが空に 1315 なるのも待つ. 1316 1317 8.3.2 システムログタスクのその他のサービス 1318 1319 システムログタスクは,前記のサービスコールに加えて,メイン処理と終了処 1320 理を持つ.メイン処理はタスクとして,終了処理は終了処理ルーチンとして登 1321 録する.これらの登録処理はlogtask.cfgに含まれる. 1532 1322 1533 1323 (1) void logtask_main(intptr_t exinf) 1534 1324 1535 ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ã¡ã¤ã³å¦çï¼exinfã«ã¯ï¼ãã°æ 1536 å ±ãåºåããã·ãªã¢ã«ãã¼ 1537 ãã®IDçªå·ã渡ãï¼ 1325 システムログタスクのメイン処理.exinfには,ログ情報を出力するシリアルポー 1326 トのID番号を渡す. 1538 1327 1539 1328 (2) void logtask_terminate(intptr_t exinf) 1540 1329 1541 ã·ã¹ãã ãã°ã¿ã¹ã¯ã®çµäºå¦çï¼ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®éä¿¡ãã 1542 ãã¡ã«èç©ããããã¼ã¿ã¨ï¼ãã°ãããã¡ã«è¨é²ããããã°æ 1543 å ±ãï¼ä½ã¬ãã« 1544 åºåæ©è½ãç¨ãã¦åºåããï¼åºåãã¹ããã°æ 1545 å ±ãããå ´åã«ã¯ï¼ãããåºå 1546 ããåã«ï¼"-- buffered messages --"ã¨ããæååãåºåããï¼exinfã¯ç¡è¦ 1547 ããï¼ 1548 1549 ãã®é¢æ°ãçµäºå¦çã«ã¼ãã³ã¨ãã¦ç»é²ãããã¨ã§ï¼ã«ã¼ãã«çµäºæç¹ã§æªåº 1550 åã®ãã°æ 1551 å ±ã®ã»ã¨ãã©ãåºåãããã¨ãã§ããï¼ãã ãï¼æªåºåã®ãã°æ 1552 å ± 1553 ã®å 1554 ï¼ã·ã¹ãã ãã°ã¿ã¹ã¯ã®ã¡ã¤ã³å¦çãï¼ãã°ãããã¡ããåãåºãããï¼ 1555 ã¾ã ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã«éä¿¡ãã¦ããªãæ 1556 å ±ã¯ï¼ãã®é¢æ°ã§ã¯ 1557 åºåã§ããªãï¼ 1558 1559 8.4 ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºå 1560 1561 ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåã¯ï¼ã«ã¼ãã«ã®èµ·åæã«ï¼ã«ã¼ãã«ã®å称ããã¼ 1562 ã¸ã§ã³çªå·ï¼èä½æ¨©è¡¨ç¤ºãªã©ãåºåããããã®æ©è½ã§ããï¼ 1563 1564 ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåã¯ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã« 1565 ã§banner.cfgãã¤ã³ã¯ã«ã¼ããããã¨ã§ï¼ã·ã¹ãã ã«çµã¿è¾¼ããã¨ãã§ããï¼ 1566 1567 ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåã¯ï¼æ¬¡ã®é¢æ°ã§æ§æãããï¼ 1330 システムログタスクの終了処理.シリアルインタフェースドライバの送信バッ 1331 ファに蓄積されたデータと,ログバッファに記録されたログ情報を,低レベル 1332 出力機能を用いて出力する.出力すべきログ情報がある場合には,それを出力 1333 する前に,"-- buffered messages --"という文字列を出力する.exinfは無視 1334 する. 1335 1336 この関数を終了処理ルーチンとして登録することで,カーネル終了時点で未出 1337 力のログ情報のほとんどを出力することができる.ただし,未出力のログ情報 1338 の内,システムログタスクのメイン処理が,ログバッファから取り出したが, 1339 まだシリアルインタフェースドライバに送信していない情報は,この関数では 1340 出力できない. 1341 1342 8.4 カーネル起動メッセージの出力 1343 1344 カーネル起動メッセージの出力は,カーネルの起動時に,カーネルの名称やバー 1345 ジョン番号,著作権表示などを出力するための機能である. 1346 1347 カーネル起動メッセージの出力は,システムコンフィギュレーションファイル 1348 でbanner.cfgをインクルードすることで,システムに組み込むことができる. 1349 1350 カーネル起動メッセージの出力は,次の関数で構成される. 1568 1351 1569 1352 (1) void print_banner(intptr_t exinf) 1570 1353 1571 ã·ã¹ãã ãã°æ©è½ãç¨ãã¦ï¼ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ãåºåããï¼banner.cfg 1572 ã«ãã£ã¦ï¼ã«ã¼ãã«ã«åæåã«ã¼ãã³ã¨ãã¦ç»é²ãããï¼exinfã¯ç¡è¦ãããï¼ 1573 1574 1575 ï¼ï¼ãµãã¼ãã©ã¤ãã©ãª 1576 1577 ãµãã¼ãã©ã¤ãã©ãªã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ãã·ã¹ãã ãµã¼ãã¹ãä½æãããã 1578 ã«å©ç¨ã§ããã©ã¤ãã©ãªé¢æ°ç¾¤ã§ããï¼ 1579 1580 9.1 åºæ¬çãªã©ã¤ãã©ãªé¢æ° 1581 1582 åºæ¬çãªã©ã¤ãã©ãªé¢æ°ãç¨ããå ´åã«ã¯ï¼t_stdlib.hãã¤ã³ã¯ã«ã¼ããï¼å¿ 1583 1584 è¦ã«å¿ãã¦strerror.cã¨t_perror.cãã³ã³ãã¤ã«ã»ãªã³ã¯ããï¼ 1354 システムログ機能を用いて,カーネル起動メッセージを出力する.banner.cfg 1355 によって,カーネルに初期化ルーチンとして登録される.exinfは無視される. 1356 1357 1358 9.サポートライブラリ 1359 1360 サポートライブラリは,アプリケーションやシステムサービスを作成するため 1361 に利用できるライブラリ関数群である. 1362 1363 9.1 基本的なライブラリ関数 1364 1365 基本的なライブラリ関数を用いる場合には,t_stdlib.hをインクルードし,必 1366 要に応じてstrerror.cとt_perror.cをコンパイル・リンクする. 1585 1367 1586 1368 (1) const char *itron_strerror(ER ercd) 1587 1369 1588 ercd ã§ç¤ºãããã¨ã©ã¼ã³ã¼ãã«å¯¾å¿ããã¡ã¤ã³ã¨ã©ã¼ã³ã¼ãã®æååãè¿ãï¼1370 ercdで示されるエラーコードに対応するメインエラーコードの文字列を返す. 1589 1371 1590 1372 (2) void t_perror(uint_t prio, const char *file, int_t line, 1591 1373 const char *expr, ER ercd); 1592 1374 1593 ãµã¼ãã¹ã³ã¼ã«ãã¨ã©ã¼ãè¿ããå ´åã«ç¨ãããã¨ãæ³å®ããé¢æ°ã§ï¼ãã¡ã¤ 1594 ã«åï¼è¡çªå·ï¼ã¡ã¤ã³ã¨ã©ã¼ã³ã¼ãçãï¼éè¦åº¦prioã§ï¼ã·ã¹ãã ãã°æ©è½ã 1595 ç¨ãã¦åºåããï¼ 1596 1597 9.2 ãã¥ã¼æä½ã©ã¤ãã©ãªé¢æ° 1598 1599 ãã¥ã¼æä½ã©ã¤ãã©ãªã¯ï¼ãã¥ã¼ããããå«ããªã³ã°æ§é ã®ããã«ãªã³ã¯ãã¥ã¼ 1600 ãæ±ãã©ã¤ãã©ãªã§ããï¼ãã¥ã¼ãããã®æ¬¡ã¨ã³ããªã¯ãã¥ã¼ã®å 1601 é ã®ã¨ã³ã 1602 ãªï¼åã¨ã³ããªã¯ãã¥ã¼ã®æ«å°¾ã®ã¨ã³ããªã¨ããï¼ã¾ãï¼ãã¥ã¼ã®å 1603 é ã®ã¨ã³ 1604 ããªã®åã¨ã³ããªã¨ï¼ãã¥ã¼ã®æ«å°¾ã®ã¨ã³ããªã®æ¬¡ã¨ã³ããªã¯ï¼ãã¥ã¼ããã 1605 ã¨ããï¼ç©ºã®ãã¥ã¼ã¯ï¼æ¬¡ã¨ã³ããªï¼åã¨ã³ããªã¨ãèªåèªèº«ãæããã¥ã¼ãã 1606 ãã§ããããï¼ 1607 1608 ãã¥ã¼æä½ã©ã¤ãã©ãªé¢æ°ãç¨ããå ´åã«ã¯ï¼queue.hãã¤ã³ã¯ã«ã¼ãããï¼ 1609 1610 ãã¥ã¼ãããã¨ã¨ã³ããªã®ããã®ãã¼ã¿æ§é ã¨ãã¦ï¼QUEUEæ§é ä½ãç¨ããï¼ 1611 QUEUEæ§é ä½ã®å®ç¾©ã¯æ¬¡ã®éãï¼ 1375 サービスコールがエラーを返した場合に用いることを想定した関数で,ファイ 1376 ル名,行番号,メインエラーコード等を,重要度prioで,システムログ機能を 1377 用いて出力する. 1378 1379 9.2 キュー操作ライブラリ関数 1380 1381 キュー操作ライブラリは,キューヘッダを含むリング構造のダブルリンクキュー 1382 を扱うライブラリである.キューヘッダの次エントリはキューの先頭のエント 1383 リ,前エントリはキューの末尾のエントリとする.また,キューの先頭のエン 1384 トリの前エントリと,キューの末尾のエントリの次エントリは,キューヘッダ 1385 とする.空のキューは,次エントリ,前エントリとも自分自身を指すキューヘッ 1386 ダであらわす. 1387 1388 キュー操作ライブラリ関数を用いる場合には,queue.hをインクルードする. 1389 1390 キューヘッダとエントリのためのデータ構造として,QUEUE構造体を用いる. 1391 QUEUE構造体の定義は次の通り. 1612 1392 1613 1393 typedef struct queue { 1614 struct queue *p_next; /* 次ã¨ã³ããªã¸ã®ãã¤ã³ã¿*/1615 struct queue *p_prev; /* åã¨ã³ããªã¸ã®ãã¤ã³ã¿*/1394 struct queue *p_next; /* 次エントリへのポインタ */ 1395 struct queue *p_prev; /* 前エントリへのポインタ */ 1616 1396 } QUEUE; 1617 1397 1618 ãã¥ã¼æä½ã®ããã«ç¨æãã¦ããé¢æ°ã¯æ¬¡ã®éãï¼ 1398 キュー操作のために用意している関数は次の通り. 1619 1399 1620 1400 (1) void queue_initialize(QUEUE *p_queue); 1621 1401 1622 ãã¥ã¼ãåæåããï¼p_queueã«ã¯ãã¥ã¼ããããæå®ããï¼ 1402 キューを初期化する.p_queueにはキューヘッダを指定する. 1623 1403 1624 1404 (2) void queue_insert_prev(QUEUE *p_queue, QUEUE *p_entry); 1625 1405 1626 p_queueã§æå®ããã¨ã³ããªã®åã«ï¼p_entryã§æå®ããã¨ã³ããªãæ¿å 1627 ¥ããï¼ 1628 p_queueã«ãã¥ã¼ããããæå®ããå ´åã«ã¯ï¼ãã¥ã¼ã®æ«å°¾ã«p_entryã§æå®ã 1629 ãã¨ã³ããªãæ¿å 1630 ¥ãããã¨ã«ãªãï¼ 1406 p_queueで指定するエントリの前に,p_entryで指定するエントリを挿入する. 1407 p_queueにキューヘッダを指定した場合には,キューの末尾にp_entryで指定す 1408 るエントリを挿入することになる. 1631 1409 1632 1410 (3) void queue_insert_next(QUEUE *p_queue, QUEUE *p_entry); 1633 1411 1634 p_queueã§æå®ããã¨ã³ããªã®æ¬¡ã«ï¼p_entryã§æå®ããã¨ã³ããªãæ¿å 1635 ¥ããï¼ 1636 p_queueã«ãã¥ã¼ããããæå®ããå ´åã«ã¯ï¼ãã¥ã¼ã®å 1637 é ã«p_entryã§æå®ã 1638 ãã¨ã³ããªãæ¿å 1639 ¥ãããã¨ã«ãªãï¼ 1412 p_queueで指定するエントリの次に,p_entryで指定するエントリを挿入する. 1413 p_queueにキューヘッダを指定した場合には,キューの先頭にp_entryで指定す 1414 るエントリを挿入することになる. 1640 1415 1641 1416 (4) void queue_delete(QUEUE *p_entry); 1642 1417 1643 p_entry ã§æå®ããã¨ã³ããªãï¼ãã¥ã¼ããåé¤ããï¼1418 p_entryで指定するエントリを,キューから削除する. 1644 1419 1645 1420 (5) QUEUE *queue_delete_next(QUEUE *p_queue); 1646 1421 1647 p_queueã§æå®ããã¨ã³ããªã®æ¬¡ã®ã¨ã³ããªããã¥ã¼ããåé¤ãï¼åé¤ããã¨ã³ 1648 ããªãè¿ãï¼p_queueã«ãã¥ã¼ããããæå®ããå ´åã«ã¯ï¼ãã¥ã¼ã®å 1649 é ã®ã¨ã³ 1650 ããªãåãåºããã¨ã«ãªãï¼p_queueã«ç©ºã®ãã¥ã¼ãæå®ãã¦å¼ã³åºãã¦ã¯ãªã 1651 ãªãï¼ 1422 p_queueで指定するエントリの次のエントリをキューから削除し,削除したエン 1423 トリを返す.p_queueにキューヘッダを指定した場合には,キューの先頭のエン 1424 トリを取り出すことになる.p_queueに空のキューを指定して呼び出してはなら 1425 ない. 1652 1426 1653 1427 (6) bool_t queue_empty(QUEUE *p_queue); 1654 1428 1655 ãã¥ã¼ã空ã®å ´åã«ã¯trueï¼ããã§ãªãå ´åã«ã¯falseãè¿ãï¼p_queueã«ã¯ 1656 ãã¥ã¼ããããæå®ããï¼ 1657 1658 9.3 ã·ã¹ãã ãã°åºåç¨ã©ã¤ãã©ãªé¢æ° 1659 1660 ã·ã¹ãã ãã°åºåç¨ã©ã¤ãã©ãªé¢æ°ã¯ï¼ãã°æ 1661 å ±ããã©ã¼ãããåºåãããã 1662 ã«ï¼ã·ã¹ãã ãã°ã¿ã¹ã¯ããã³ã·ã¹ãã ãã°æ©è½ã§ç¨ããããã®é¢æ°ç¾¤ã§ããï¼ 1663 1664 ã·ã¹ãã ãã°åºåç¨ã©ã¤ãã©ãªé¢æ°ãç¨ããå ´åã«ã¯ï¼log_output.hãã¤ã³ã¯ 1665 ã«ã¼ããï¼log_output.cãã³ã³ãã¤ã«ã»ãªã³ã¯ããï¼ 1429 キューが空の場合にはtrue,そうでない場合にはfalseを返す.p_queueには 1430 キューヘッダを指定する. 1431 1432 9.3 システムログ出力用ライブラリ関数 1433 1434 システムログ出力用ライブラリ関数は,ログ情報をフォーマット出力するため 1435 に,システムログタスクおよびシステムログ機能で用いるための関数群である. 1436 1437 システムログ出力用ライブラリ関数を用いる場合には,log_output.hをインク 1438 ルードし,log_output.cをコンパイル・リンクする. 1666 1439 1667 1440 (1) void syslog_printf(const char *format, const intptr_t *p_args, 1668 1441 void (*putc)(char)) 1669 1442 1670 format ã§æå®ããããã©ã¼ãããè¨è¿°ã¨p_argsã§æå®ãããå¼æ°åããä½æã1671 ãã¡ãã»ã¼ã¸ãï¼1æååºåé¢æ°putcãç¨ãã¦åºåããï¼ 1443 formatで指定されるフォーマット記述とp_argsで指定される引数列から作成し 1444 たメッセージを,1文字出力関数putcを用いて出力する. 1672 1445 1673 1446 (2) void syslog_print(const SYSLOG *p_syslog, void (*putc)(char)) 1674 1447 1675 p_syslogã§æå®ããããã°æ 1676 å ±ãæååã«ç´ãï¼1æååºåé¢æ°putcãç¨ãã¦åº 1677 åããï¼ 1448 p_syslogで指定されるログ情報を文字列に直し,1文字出力関数putcを用いて出 1449 力する. 1678 1450 1679 1451 (3) void syslog_lostmsg(uint_t lost, void (*putc)(char)) 1680 1452 1681 loståã®ãã°æ 1682 å ±ã失ãããæ¨ã®ã¡ãã»ã¼ã¸ãï¼1æååºåé¢æ°putcãç¨ãã¦åº 1683 åããï¼ 1684 1685 9.4 å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã« 1686 1687 å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã¯ï¼ã·ã¹ãã ã®ãªã¢ã«ã¿ã¤ã æ§è½ãè©ä¾¡ãããã 1688 ã«ï¼ããã°ã©ã åºéã®å®è¡æéãè¨æ¸¬ãï¼ãã®åå¸ãéè¨ã»è¡¨ç¤ºããããã®ã© 1689 ã¤ãã©ãªé¢æ°ç¾¤ã§ããï¼ 1690 1691 å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ãç¨ããå ´åã«ã¯ï¼histogram.hãã¤ã³ã¯ã«ã¼ããï¼ 1692 histogram.cãã³ã³ãã¤ã«ã»ãªã³ã¯ããï¼ 1693 1694 å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã¯ï¼è¤æ°ã®ããã°ã©ã åºéã®å®è¡æéãè¨æ¸¬ã»é 1695 è¨ã»è¡¨ç¤ºãããã¨ãã§ããï¼ããã°ã©ã åºéæ¯ã«ï¼å®è¡æéåå¸ãè¨é²ããã 1696 ãã®ãã¼ã¿æ§é ãæã¤ï¼ã©ã®ãã¼ã¿æ§é ãç¨ããããï¼IDçªå·ï¼histidï¼ã§æ 1697 å®ããï¼ä½¿ç¨ã§ãããã¼ã¿æ§é ã®æ°ã¯ï¼TNUM_HISTã§å®ç¾©ãããï¼ããªãã¡ï¼ 1698 IDçªå·ã¨ãã¦ï¼1ï½TNUM_HISTãæå®ãããã¨ãã§ããï¼TNUM_HISTã¯ï¼ããã©ã« 1699 ãå¤ãhistgram.cã®ä¸ã§å®ç¾©ããã¦ããï¼ã³ã³ãã¤ã«ãªãã·ã§ã³ãã¿ã¼ã²ãã 1700 ä¾åé¨ï¼target_test.hã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã«ããå¤ 1701 æ´ãããã¨ãã§ããï¼ 1702 1703 ã¿ã¼ã²ããä¾åé¨ã§è¨å®ãå¤æ´ãã¦ããªãå ´åï¼å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã« 1704 ã¯ï¼ã«ã¼ãã«ã®æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ãåç 1705 §ããæ©è½ï¼get_utmï¼ãç¨ãã¦å® 1706 è¡æéãè¨æ¸¬ããï¼ãã®ããï¼å®è¡æéã¯ãã¤ã¯ãç§åä½ã§è¨é²ãããï¼ç²¾åº¦ 1707 ã¯ã¿ã¼ã²ããä¾åï¼ï¼ã¾ãï¼è¨é²ãããæéã«ã¯ï¼è¨æ¸¬ã®ããã®ãªã¼ãããã 1708 ï¼get_utmã®å®è¡æéï¼Î±ï¼ãå«ã¾ããï¼ 1709 1710 ã¿ã¼ã²ããä¾åé¨ã§è¨å®ãå¤æ´ãã¦ããå ´åã®ä»æ§ã«ã¤ãã¦ã¯ï¼ã¿ã¼ã²ããä¾ 1711 åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ãåç 1712 §ãããã¨ï¼ 1453 lost個のログ情報が失われた旨のメッセージを,1文字出力関数putcを用いて出 1454 力する. 1455 1456 9.4 実行時間分布集計モジュール 1457 1458 実行時間分布集計モジュールは,システムのリアルタイム性能を評価するため 1459 に,プログラム区間の実行時間を計測し,その分布を集計・表示するためのラ 1460 イブラリ関数群である. 1461 1462 実行時間分布集計モジュールを用いる場合には,histogram.hをインクルードし, 1463 histogram.cをコンパイル・リンクする. 1464 1465 実行時間分布集計モジュールは,複数のプログラム区間の実行時間を計測・集 1466 計・表示することができる.プログラム区間毎に,実行時間分布を記録するた 1467 めのデータ構造を持つ.どのデータ構造を用いるかを,ID番号(histid)で指 1468 定する.使用できるデータ構造の数は,TNUM_HISTで定義される.すなわち, 1469 ID番号として,1~TNUM_HISTを指定することができる.TNUM_HISTは,デフォル 1470 ト値がhistgram.cの中で定義されており,コンパイルオプションやターゲット 1471 依存部(target_test.hまたはそこからインクルードされるファイル)により変 1472 更することができる. 1473 1474 ターゲット依存部で設定を変更していない場合,実行時間分布集計モジュール 1475 は,カーネルの性能評価用システム時刻を参照する機能(get_utm)を用いて実 1476 行時間を計測する.そのため,実行時間はマイクロ秒単位で記録される(精度 1477 はターゲット依存).また,記録される時間には,計測のためのオーバヘッド 1478 (get_utmの実行時間+α)が含まれる. 1479 1480 ターゲット依存部で設定を変更している場合の仕様については,ターゲット依 1481 存部のユーザーズマニュアルを参照すること. 1713 1482 1714 1483 (1) void init_hist(ID histid, uint_t maxval, uint_t histarea[]) 1715 1484 1716 histidã§æå®ããããã¼ã¿æ§é ãåæåããï¼maxvalã«ã¯è¨é²ããæ大æéãï¼ 1717 histareaã«ã¯è¨é²é åã®å 1718 é çªå°ãæå®ããï¼histareaã§å§ã¾ãè¨æ¶é åã¯ï¼ 1719 è¦ç´ æ°ãmaxvalã«æå®ããå¤+1ã®uint_tåã®é 1720 åã¨ãã¦ç¢ºä¿ããï¼ä¾ãã°ï¼ 1721 maxvalã«1000ãæå®ããå ´åã«ã¯ï¼histareaã«ã¯è¦ç´ æ°ã1001ã®uint_tåã®é 1722 1723 åã®å 1724 é çªå°ã渡ãï¼ 1485 histidで指定されたデータ構造を初期化する.maxvalには記録する最大時間を, 1486 histareaには記録領域の先頭番地を指定する.histareaで始まる記憶領域は, 1487 要素数がmaxvalに指定した値+1のuint_t型の配列として確保する.例えば, 1488 maxvalに1000を指定する場合には,histareaには要素数が1001のuint_t型の配 1489 列の先頭番地を渡す. 1725 1490 1726 1491 (2) void begin_measure(ID histid) 1727 1492 1728 å®è¡æéãè¨æ¸¬ããããã°ã©ã åºéã®ç´åã«å¼ã³åºãé¢æ°ï¼histidã§æå®ãã 1729 ããã¼ã¿æ§é ã«ï¼ç¾å¨ã®ã·ã¹ãã æå»ãè¨é²ããï¼ 1493 実行時間を計測するプログラム区間の直前に呼び出す関数.histidで指定され 1494 たデータ構造に,現在のシステム時刻を記録する. 1730 1495 1731 1496 (3) void end_measure(ID histid) 1732 1497 1733 å®è¡æéãè¨æ¸¬ããããã°ã©ã åºéã®ç´å¾ã«å¼ã³åºãé¢æ°ï¼ç¾å¨ã®ã·ã¹ãã æ 1734 å»ã¨ï¼histidã§æå®ããããã¼ã¿æ§é ã«è¨é²ãããéå§æå»ããï¼ããã°ã©ã 1735 åºéã®å®è¡æéãæ±ãï¼ãã®çµæãè¨é²ããï¼ 1498 実行時間を計測するプログラム区間の直後に呼び出す関数.現在のシステム時 1499 刻と,histidで指定されたデータ構造に記録された開始時刻から,プログラム 1500 区間の実行時間を求め,その結果を記録する. 1736 1501 1737 1502 (4) void print_hist(ID histid) 1738 1503 1739 ã·ã¹ãã ãã°æ©è½ãç¨ãã¦ï¼å®è¡æéåå¸ã®è¨æ¸¬çµæãåºåããï¼ 1740 1741 1742 ï¼ï¼ï¼ãã¹ãããã°ã©ã 1743 1744 ãã¹ãããã°ã©ã ã¯ï¼ã«ã¼ãã«ã®æ©è½ãã¹ãããã³æ§è½è©ä¾¡ãè¡ãããã®ãã 1745 ã°ã©ã 群ã§ããï¼ 1746 1747 10.1 ãã¹ãããã°ã©ã ç¨ã©ã¤ãã©ãª1748 1749 ãã¹ãããã°ã©ã ç¨ã©ã¤ãã©ãªã¯ï¼ããã°ã©ã ä¸ã®ãã§ãã¯ãã¤ã³ããæ£ãã 1750 é åºã§å®è¡ããããã¨ãªã©ï¼ããã°ã©ã ãæ£ããåä½ãã¦ãããã¨ããã§ã㯠1751 ããããã®é¢æ°ç¾¤ã§ããï¼ããã°ã©ã ãæ£ããåä½ãã¦ããªããã¨ãæ¤åºãã 1752 å ´åã«ã¯ï¼ããã°ã©ã ãçµäºãããï¼ 1753 1754 ãã¹ãããã°ã©ã ç¨ã©ã¤ãã©ãªé¢æ°ãç¨ããå ´åã«ã¯ï¼test_lib.hãã¤ã³ã¯ã«ã¼ 1755 ããï¼test_lib.cãã³ã³ãã¤ã«ã»ãªã³ã¯ããï¼ 1504 システムログ機能を用いて,実行時間分布の計測結果を出力する. 1505 1506 1507 10.テストプログラム 1508 1509 テストプログラムは,カーネルの機能テストおよび性能評価を行うためのプロ 1510 グラム群である. 1511 1512 10.1 テストプログラム用ライブラリ 1513 1514 テストプログラム用ライブラリは,プログラム中のチェックポイントが正しい 1515 順序で実行されたことなど,プログラムが正しく動作していることをチェック 1516 するための関数群である.プログラムが正しく動作していないことを検出した 1517 場合には,プログラムを終了させる. 1518 1519 テストプログラム用ライブラリ関数を用いる場合には,test_lib.hをインクルー 1520 ドし,test_lib.cをコンパイル・リンクする. 1756 1521 1757 1522 (1) void check_point(uint_t count) 1758 1523 1759 ãã§ãã¯ãã¤ã³ããééããéã«å¼ã³åºãé¢æ°ï¼countã«ã¯ï¼ä½çªç®ã®ãã§ã㯠1760 ãã¤ã³ãã§ããããæå®ããï¼æåã®ãã§ãã¯ãã¤ã³ãã§ã¯1ãæå®ããï¼ï¼ 1761 count ã®å¤ãï¼æåã®ãã§ãã¯ãã¤ã³ãã«ããã¦ã¯1ã§ãªãå ´åã«ï¼ãã以éã®1762 ãã§ãã¯ãã¤ã³ãã«ããã¦ã¯ï¼åã®ãã§ãã¯ãã¤ã³ãééæã«countã«æå®ãã 1763 å¤ã«1ãå ããå¤ã§ãªãå ´åã«ï¼ããã°ã©ã ãæ£ããåä½ãã¦ããªãã¨è¦ãªãï¼ 1764 ããã°ã©ã ãçµäºãããï¼ 1524 チェックポイントを通過する際に呼び出す関数.countには,何番目のチェック 1525 ポイントであるかを指定する(最初のチェックポイントでは1を指定する). 1526 countの値が,最初のチェックポイントにおいては1でない場合に,それ以降の 1527 チェックポイントにおいては,前のチェックポイント通過時にcountに指定した 1528 値に1を加えた値でない場合に,プログラムが正しく動作していないと見なし, 1529 プログラムを終了させる. 1765 1530 1766 1531 (2) void check_finish(uint_t count) 1767 1532 1768 æå¾ã®ãã§ãã¯ãã¤ã³ãã«å°éããéã«å¼ã³åºãé¢æ°ï¼countã«ã¯ï¼ä½çªç®ã® 1769 ãã§ãã¯ãã¤ã³ãã§ããããæå®ããï¼æåã®ãã§ãã¯ãã¤ã³ãã§ã¯1ãæå®ã 1770 ãï¼ï¼countã®å¤ãï¼åã®ãã§ãã¯ãã¤ã³ãééæã«countã«æå®ããå¤ã«1ãå 1771 ããå¤ã§ãªãå ´åã«ï¼ããã°ã©ã ãæ£ããåä½ãã¦ããªãã¨è¦ãªãï¼ãã®é¢æ° 1772 ã¯ï¼ããã°ã©ã ãæ£ããåä½ãã¦ããï¼ããªãã«é¢ãããï¼ããã°ã©ã ãçµäº 1773 ãããï¼ 1533 最後のチェックポイントに到達した際に呼び出す関数.countには,何番目の 1534 チェックポイントであるかを指定する(最初のチェックポイントでは1を指定す 1535 る).countの値が,前のチェックポイント通過時にcountに指定した値に1を加 1536 えた値でない場合に,プログラムが正しく動作していないと見なす.この関数 1537 は,プログラムが正しく動作している/いないに関わらず,プログラムを終了 1538 させる. 1774 1539 1775 1540 (3) void check_assert(bool_t exp) 1776 1541 1777 exp ãçã§ãããã¨ããã§ãã¯ãããå ´åã«å¼ã³åºãé¢æ°ï¼expãå½ã§ããå ´å1778 ã«ï¼ããã°ã©ã ãæ£ããåä½ãã¦ããªãã¨è¦ãªãï¼ããã°ã©ã ãçµäºãããï¼ 1542 expが真であることをチェックしたい場合に呼び出す関数.expが偽である場合 1543 に,プログラムが正しく動作していないと見なし,プログラムを終了させる. 1779 1544 1780 1545 (4) void check_ercd(ER ercd, ER expected_ercd) 1781 1546 1782 ercd ãexpected_ercdã«ä¸è´ãã¦ãããã¨ããã§ãã¯ãããå ´åã«å¼ã³åºãé¢æ°ï¼1783 ercd ãexpected_ercdã«ä¸è´ãã¦ããªãå ´åã«ï¼ããã°ã©ã ãæ£ããåä½ãã¦ã1784 ãªãã¨è¦ãªãï¼ããã°ã©ã ãçµäºãããï¼ 1547 ercdがexpected_ercdに一致していることをチェックしたい場合に呼び出す関数. 1548 ercdがexpected_ercdに一致していない場合に,プログラムが正しく動作してい 1549 ないと見なし,プログラムを終了させる. 1785 1550 1786 1551 (5) void check_state(bool_t ctx, bool_t loc, PRI ipm, 1787 1552 bool_t dsp, bool_t dpn, bool_t tex) 1788 1553 1789 ã¿ã¹ã¯ã³ã³ããã¹ãã«ããã¦ï¼ã·ã¹ãã ç¶æ 1790 ãæå¾ 1791 ãããã®ã«ãªã£ã¦ããã 1792 ãã§ãã¯ãããæã«å¼ã³åºãé¢æ°ï¼ctxï¼locï¼dspï¼dpnï¼texã«ã¯ãããã 1793 sns_ctx()ï¼sns_loc()ï¼sns_dsp()ï¼sns_dpn()ï¼sns_tex()ã®è¿å¤ã¨ãã¦æå¾ 1794 ã 1795 ããå¤ãï¼ipmã«ã¯get_ipm()ã§åç 1796 §ã§ããå²è¾¼ã¿åªå 1797 度ãã¹ã¯ã¨ãã¦æå¾ 1798 ãã 1799 ãå¤ãæå®ããï¼ãã®å 1800 ã®ãããããæå¾ 1801 ãããå¤ã¨ä¸è´ãã¦ããªãå ´åã«ï¼ 1802 ããã°ã©ã ãæ£ããåä½ãã¦ããªãã¨è¦ãªãï¼ããã°ã©ã ãçµäºãããï¼ 1554 タスクコンテキストにおいて,システム状態が期待したものになっているか 1555 チェックしたい時に呼び出す関数.ctx,loc,dsp,dpn,texにはそれぞれ 1556 sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期待さ 1557 れる値を,ipmにはget_ipm()で参照できる割込み優先度マスクとして期待され 1558 る値を指定する.この内のいずれかが期待される値と一致していない場合に, 1559 プログラムが正しく動作していないと見なし,プログラムを終了させる. 1803 1560 1804 1561 (6) void check_state_i(bool_t ctx, bool_t loc, 1805 1562 bool_t dsp, bool_t dpn, bool_t tex) 1806 1563 1807 éã¿ã¹ã¯ã³ã³ããã¹ãã«ããã¦ï¼ã·ã¹ãã ç¶æ 1808 ãæå¾ 1809 ãããã®ã«ãªã£ã¦ããã 1810 ãã§ãã¯ãããæã«å¼ã³åºãé¢æ°ï¼ctxï¼locï¼dspï¼dpnï¼texã«ã¯ãããã 1811 sns_ctx()ï¼sns_loc()ï¼sns_dsp()ï¼sns_dpn()ï¼sns_tex()ã®è¿å¤ã¨ãã¦æå¾ 1812 ã 1813 ããå¤ãæå®ããï¼ãã®å 1814 ã®ãããããæå¾ 1815 ãããå¤ã¨ä¸è´ãã¦ããªãå ´åã«ï¼ 1816 ããã°ã©ã ãæ£ããåä½ãã¦ããªãã¨è¦ãªãï¼ããã°ã©ã ãçµäºãããï¼ 1564 非タスクコンテキストにおいて,システム状態が期待したものになっているか 1565 チェックしたい時に呼び出す関数.ctx,loc,dsp,dpn,texにはそれぞれ 1566 sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期待さ 1567 れる値を指定する.この内のいずれかが期待される値と一致していない場合に, 1568 プログラムが正しく動作していないと見なし,プログラムを終了させる. 1817 1569 1818 1570 (7) void set_bit_func(BIT_FUNC bit_func) 1819 1571 1820 ãã§ãã¯ãã¤ã³ãã«ããã¦å¼ã³åºãèªå·±è¨ºæé¢æ°ãè¨å®ããããã®é¢æ°ï¼ 1572 チェックポイントにおいて呼び出す自己診断関数を設定するための関数. 1821 1573 1822 1574 (8) void test_start(char *progname) 1823 1575 1824 ãã¹ãéå§æã«ï¼ãã¹ãããã°ã©ã åãåºåããããã®é¢æ°ï¼ 1576 テスト開始時に,テストプログラム名を出力するための関数. 1825 1577 1826 1578 (9) void syslog_flush(void) 1827 1579 1828 ã·ã¹ãã ãã°æ©è½ã«è¨é²ããããã°æ 1829 å ±ãï¼ä½ã¬ãã«åºåæ©è½ã«ç¨ããæååº 1830 åé¢æ°ã«ããåºåããï¼ 1580 システムログ機能に記録されたログ情報を,低レベル出力機能に用いる文字出 1581 力関数により出力する. 1831 1582 1832 1583 (10) void test_finish(void) 1833 1584 1834 ããã°ã©ã ãçµäºãããé¢æ°ï¼ãã§ãã¯ãã¤ã³ãã使ç¨ããªãå ´åã«ï¼ãã®é¢ 1835 æ°ãç¨ããï¼ 1836 1837 10.2 ã«ã¼ãã«ã®æ´åæ§æ¤æ» 1838 1839 ãã§ãã¯ãã¤ã³ãã«ããã¦å¼ã³åºãèªå·±è¨ºæã«ä½¿ãããã®ããã°ã©ã ã¨ãã¦ï¼ 1840 ã«ã¼ãã«ã®æ´åæ§æ¤æ»ãç¨æãã¦ããï¼ã«ã¼ãã«ã®æ´åæ§æ¤æ»ã¯ï¼ã«ã¼ãã«å 1841 1842 ã®åãã¼ã¿æ§é ã®ä¸è²«æ§ãæ¤æ»ããï¼ç¾æç¹ã§ã¯æªå®æï¼ï¼ 1843 1844 ã«ã¼ãã«ã®æ´åæ§æ¤æ»ãç¨ããå ´åã«ã¯ï¼bit_kernel.cãã³ã³ãã¤ã«ã»ãªã³ã¯ 1845 ããï¼ 1585 プログラムを終了させる関数.チェックポイントを使用しない場合に,この関 1586 数を用いる. 1587 1588 10.2 カーネルの整合性検査 1589 1590 チェックポイントにおいて呼び出す自己診断に使うためのプログラムとして, 1591 カーネルの整合性検査を用意している.カーネルの整合性検査は,カーネル内 1592 の各データ構造の一貫性を検査する(現時点では未完成). 1593 1594 カーネルの整合性検査を用いる場合には,bit_kernel.cをコンパイル・リンク 1595 する. 1846 1596 1847 1597 (1) ER bit_kernel(void) 1848 1598 1849 ã«ã¼ãã«å 1850 ã®åãã¼ã¿æ§é ã®ä¸è²«æ§ãæ¤æ»ãï¼ä¸è²«æ§ã確èªã§ããå ´åã«E_OKï¼ 1851 ã§ããªãã£ãå ´åã«E_SYSã¨ã©ã¼ãè¿ãé¢æ°ï¼E_SYSã¨ã©ã¼ãè¿ãéã®ãµãã¨ã©ã¼ 1852 ã³ã¼ãã¨ãã¦ï¼ä¸è²«æ§ã確èªã§ããªãã£ãé 1853 ç®ã示ãã³ã¼ããè¿ãï¼ 1854 1855 10.3 æ©è½ãã¹ãããã°ã©ã 1856 1857 testãã£ã¬ã¯ããªã«ç½®ããã"test"ã§å§ã¾ãããã°ã©ã ã¯ï¼ã«ã¼ãã«ã®æ©è½ã 1858 ã¹ããè¡ãããã®ããã°ã©ã ã§ããï¼ 1859 1860 æ©è½ãã¹ãããã°ã©ã ã¯ãã¹ãããã°ã©ã ç¨ã©ã¤ãã©ãªã使ç¨ãã¦ããããï¼ 1861 æ§ç¯ããå ´åã«ã¯ï¼Makefileã®APPL_COBJSã«ï¼test_lib.oã追å ããå¿ 1862 è¦ãã 1863 ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã使ç¨ããå ´åã«ã¯ï¼-Uãªãã·ã§ã³ã§ 1864 test_lib.oãæå®ããï¼å 1865 ·ä½çã«ã¯ï¼æ¬¡ã®ã³ãã³ããå®è¡ããã°ããï¼æ§ç¯ç¨ 1866 ã®ãã£ã¬ã¯ããªãï¼ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãå±éãããã£ã¬ã¯ããªã®ç´ 1867 ä¸ã«ããã¨ä»®å®ãã¦ããï¼ï¼ 1868 1869 % perl ../configure -T <ã¿ã¼ã²ããç¥ç§°> -A <æ©è½ãã¹ãããã°ã©ã å> \ 1599 カーネル内の各データ構造の一貫性を検査し,一貫性が確認できた場合にE_OK, 1600 できなかった場合にE_SYSエラーを返す関数.E_SYSエラーを返す際のサブエラー 1601 コードとして,一貫性が確認できなかった項目を示すコードを返す. 1602 1603 10.3 機能テストプログラム 1604 1605 testディレクトリに置かれた"test"で始まるプログラムは,カーネルの機能テ 1606 ストを行うためのプログラムである. 1607 1608 機能テストプログラムはテストプログラム用ライブラリを使用しているため, 1609 構築する場合には,MakefileのAPPL_COBJSに,test_lib.oを追加する必要があ 1610 る.コンフィギュレーションスクリプトを使用する場合には,-Uオプションで 1611 test_lib.oを指定する.具体的には,次のコマンドを実行すればよい(構築用 1612 のディレクトリが,ASPカーネルのソースファイルを展開したディレクトリの直 1613 下にあると仮定している). 1614 1615 % perl ../configure -T <ターゲット略称> -A <機能テストプログラム名> \ 1870 1616 -a ../test -U test_lib.o 1871 1617 1872 ãã ãï¼CPUä¾å¤å¦çã®ãã¹ã(1)ï½(13)ã¯ï¼åä¸ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ 1873 ã·ã§ã³ãå 1874 ±ç¨ãã¦ããããï¼test_cpuexc.cfgã次ã®ããã«ã³ãã¼ãã¦ããå¿ 1875 è¦ 1876 ãããï¼ 1877 1878 % cp ../test/test_cpuexc.cfg test_cpuexc<ãã¹ãçªå·>.cfg 1879 1880 ç¾ãã¼ã¸ã§ã³ã§ç¨æãã¦ããæ©è½ãã¹ãããã°ã©ã ã¯æ¬¡ã®éãï¼ 1881 1882 (1) test_cpuexc1 CPUä¾å¤å¦çã®ãã¹ã(1) 1883 (2) test_cpuexc2 CPUä¾å¤å¦çã®ãã¹ã(2) 1884 (3) test_cpuexc3 CPUä¾å¤å¦çã®ãã¹ã(3) 1885 (4) test_cpuexc4 CPUä¾å¤å¦çã®ãã¹ã(4) 1886 (5) test_cpuexc5 CPUä¾å¤å¦çã®ãã¹ã(5) 1887 (6) test_cpuexc6 CPUä¾å¤å¦çã®ãã¹ã(6) 1888 (7) test_cpuexc7 CPUä¾å¤å¦çã®ãã¹ã(7) 1889 (8) test_cpuexc8 CPUä¾å¤å¦çã®ãã¹ã(8) 1890 (9) test_cpuexc9 CPUä¾å¤å¦çã®ãã¹ã(9) 1891 (10) test_cpuexc10 CPUä¾å¤å¦çã®ãã¹ã(10) 1892 (11) test_cpuexc11 CPUä¾å¤å¦çã®ãã¹ã(11) 1893 (12) test_cpuexc12 CPUä¾å¤å¦çã®ãã¹ã(12) 1894 (13) test_cpuexc13 CPUä¾å¤å¦çã®ãã¹ã(13) 1895 (14) test_dlynse sil_dly_nseã«é¢ãããã¹ã 1896 (15) test_sem1 ã»ããã©æ©è½ã®ãã¹ã(1) 1897 (16) test_sem2 ã»ããã©æ©è½ã®ãã¹ã(2) 1898 (17) test_sysstat1 ã·ã¹ãã ç¶æ 1899 ã«é¢ãããã¹ã(1) 1900 (18) test_task1 ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®ãã¹ã(1) 1901 (19) test_tex1 ã¿ã¹ã¯ä¾å¤å¦çã«é¢ãããã¹ã(1) 1902 (20) test_tex2 ã¿ã¹ã¯ä¾å¤å¦çã«é¢ãããã¹ã(2) 1903 (21) test_utm1 get_utmã«é¢ãããã¹ã(1) 1904 1905 CPUä¾å¤å¦çã®ãã¹ãããã°ã©ã ã®ä¸é¨ã¯ï¼CPUä¾å¤ãã³ãã©ãããªã¿ã¼ã³ãã 1906 å ´åã«ï¼CPUä¾å¤ãçºçãããå½ä»¤ã®æ¬¡ããå®è¡ãç¶ç¶ããããã¨ãåæã«ä½æ 1907 ããã¦ããï¼ãã®åæãæãç«ããªãå ´åã«ã¯ï¼ãã¹ãããã°ã©ã ã®ã¿ã¼ã²ã 1908 ãä¾åå®ç¾©ã«ããã¦ï¼CANNOT_RETURN_CPUEXCããã¯ãå®ç¾©ãããã¨ãå¿ 1909 è¦ã§ã 1910 ãï¼è©³ããã¯ï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãããåç 1911 §ãããã¨ï¼ 1912 1913 10.4 æ§è½è©ä¾¡ããã°ã©ã 1914 1915 testãã£ã¬ã¯ããªã«ç½®ããã"perf"ã§å§ã¾ãããã°ã©ã ã¯ï¼ã«ã¼ãã«ã®æ§è½è© 1916 価ãè¡ãããã®ããã°ã©ã ã§ããï¼ 1917 1918 æ§è½è©ä¾¡ããã°ã©ã ã¯ï¼è¨æ¸¬å¯¾è±¡ã¨ãªãå¦çãç¹°ãè¿ãå®è¡ãï¼ãã®å®è¡æé 1919 ãè¨æ¸¬ãã¦ï¼å®è¡æéåå¸ã表示ããï¼ 1920 1921 è¨æ¸¬ããå®è¡æéã«ã¯ï¼æéè¨æ¸¬ã®ãªã¼ããããï¼æéè¨æ¸¬å¦çã®å®è¡ã«ãã 1922 ãæéï¼ãå«ã¾ããï¼è¨æ¸¬å¯¾è±¡ã®å¦çã®æ£å³ã®å®è¡æéãæ±ããããã«ã¯ï¼è¨ 1923 測ãããæéããï¼æéè¨æ¸¬ã®ãªã¼ãããããè¨æ¸¬ããããã®ããã°ã©ã 1924 ï¼perf0ï¼ã§è¨æ¸¬ãããæéãæ¸ç®ããå¿ 1925 è¦ãããï¼ 1926 1927 ã¾ãï¼å®è¡æéã®è¨æ¸¬ã¯ï¼å¥ã«è¨è¿°ããªãéãå²è¾¼ã¿ã許å¯ããã¾ã¾è¡ãããï¼ 1928 å²è¾¼ã¿ãã³ãã©ï¼å°ãªãã¨ãï¼ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ï¼ã®å¦çæéãå«ã¾ãã 1929 å®è¡çµæãè¨æ¸¬ãããï¼ 1930 1931 ã«ã¼ãã«ã®æ§è½è©ä¾¡ã«ããã£ã¦ã¯ï¼ãã¼ãã¦ã§ã¢ï¼ç¹ã«ãã£ãã·ã¥ï¼ã®è¨å®ã« 1932 çæããå¿ 1933 è¦ãããï¼ 1934 1935 æ§è½è©ä¾¡ããã°ã©ã ã¯ãã¹ãããã°ã©ã ç¨ã©ã¤ãã©ãªã¨å®è¡æéåå¸éè¨ã¢ 1936 ã¸ã¥ã¼ã«ã使ç¨ãã¦ããããï¼æ§ç¯ããå ´åã«ã¯ï¼Makefileã®APPL_COBJSã«ï¼ 1937 test_lib.oã¨histogram.oã追å ããå¿ 1938 è¦ãããï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ 1939 ãªããã使ç¨ããå ´åã«ã¯ï¼-Uãªãã·ã§ã³ã§test_lib.oã¨histgram.oãæå®ã 1940 ãï¼å 1941 ·ä½çã«ã¯ï¼æ¬¡ã®ã³ãã³ããå®è¡ããã°ããï¼æ§ç¯ç¨ã®ãã£ã¬ã¯ããªãï¼ 1942 ASPã«ã¼ãã«ã®ã½ã¼ã¹ãã¡ã¤ã«ãå±éãããã£ã¬ã¯ããªã®ç´ä¸ã«ããã¨ä»®å®ã㦠1943 ããï¼ï¼ 1944 1945 % perl ../configure -T <ã¿ã¼ã²ããç¥ç§°> -A <æ§è½è©ä¾¡ããã°ã©ã å> \ 1618 ただし,CPU例外処理のテスト(1)~(13)は,同一のシステムコンフィギュレー 1619 ションを共用しているため,test_cpuexc.cfgを次のようにコピーしておく必要 1620 がある. 1621 1622 % cp ../test/test_cpuexc.cfg test_cpuexc<テスト番号>.cfg 1623 1624 現バージョンで用意している機能テストプログラムは次の通り. 1625 1626 (1) test_cpuexc1 CPU例外処理のテスト(1) 1627 (2) test_cpuexc2 CPU例外処理のテスト(2) 1628 (3) test_cpuexc3 CPU例外処理のテスト(3) 1629 (4) test_cpuexc4 CPU例外処理のテスト(4) 1630 (5) test_cpuexc5 CPU例外処理のテスト(5) 1631 (6) test_cpuexc6 CPU例外処理のテスト(6) 1632 (7) test_cpuexc7 CPU例外処理のテスト(7) 1633 (8) test_cpuexc8 CPU例外処理のテスト(8) 1634 (9) test_cpuexc9 CPU例外処理のテスト(9) 1635 (10) test_cpuexc10 CPU例外処理のテスト(10) 1636 (11) test_cpuexc11 CPU例外処理のテスト(11) 1637 (12) test_cpuexc12 CPU例外処理のテスト(12) 1638 (13) test_cpuexc13 CPU例外処理のテスト(13) 1639 (14) test_dlynse sil_dly_nseに関するテスト 1640 (15) test_sem1 セマフォ機能のテスト(1) 1641 (16) test_sem2 セマフォ機能のテスト(2) 1642 (17) test_sysstat1 システム状態に関するテスト(1) 1643 (18) test_task1 タスク管理モジュールのテスト(1) 1644 (19) test_tex1 タスク例外処理に関するテスト(1) 1645 (20) test_tex2 タスク例外処理に関するテスト(2) 1646 (21) test_utm1 get_utmに関するテスト(1) 1647 1648 CPU例外処理のテストプログラムの一部は,CPU例外ハンドラからリターンした 1649 場合に,CPU例外を発生させた命令の次から実行が継続されることを前提に作成 1650 されている.この前提が成り立たない場合には,テストプログラムのターゲッ 1651 ト依存定義において,CANNOT_RETURN_CPUEXCをマクロ定義することが必要であ 1652 る.詳しくは,「ターゲット依存部 ポーティングガイド」を参照すること. 1653 1654 10.4 性能評価プログラム 1655 1656 testディレクトリに置かれた"perf"で始まるプログラムは,カーネルの性能評 1657 価を行うためのプログラムである. 1658 1659 性能評価プログラムは,計測対象となる処理を繰り返し実行し,その実行時間 1660 を計測して,実行時間分布を表示する. 1661 1662 計測した実行時間には,時間計測のオーバヘッド(時間計測処理の実行にかか 1663 る時間)が含まれる.計測対象の処理の正味の実行時間を求めるためには,計 1664 測された時間から,時間計測のオーバヘッドを計測するためのプログラム 1665 (perf0)で計測された時間を減算する必要がある. 1666 1667 また,実行時間の計測は,別に記述がない限り割込みを許可したまま行うため, 1668 割込みハンドラ(少なくとも,タイマ割込みハンドラ)の処理時間が含まれた 1669 実行結果が計測される. 1670 1671 カーネルの性能評価にあたっては,ハードウェア(特にキャッシュ)の設定に 1672 留意する必要がある. 1673 1674 性能評価プログラムはテストプログラム用ライブラリと実行時間分布集計モ 1675 ジュールを使用しているため,構築する場合には,MakefileのAPPL_COBJSに, 1676 test_lib.oとhistogram.oを追加する必要がある.コンフィギュレーションスク 1677 リプトを使用する場合には,-Uオプションでtest_lib.oとhistgram.oを指定す 1678 る.具体的には,次のコマンドを実行すればよい(構築用のディレクトリが, 1679 ASPカーネルのソースファイルを展開したディレクトリの直下にあると仮定して 1680 いる). 1681 1682 % perl ../configure -T <ターゲット略称> -A <性能評価プログラム名> \ 1946 1683 -a ../test -U "test_lib.o histogram.o" 1947 1684 1948 ç¾ãã¼ã¸ã§ã³ã§ç¨æãã¦ããæ§è½è©ä¾¡ããã°ã©ã ã¯æ¬¡ã®éãï¼ 1949 1950 (1) perf0 æéè¨æ¸¬ã®ãªã¼ããããã®è©ä¾¡ 1951 1952 æéè¨æ¸¬ã®ãªã¼ãããããè¨æ¸¬ããããã®ããã°ã©ã ï¼å 1953 ·ä½çã«ã¯ï¼ç©ºã®ãã 1954 ã°ã©ã ï¼begin_mearsureã¨end_measureãç¶ãã¦å¼ã³åºãããã°ã©ã ï¼ã®å®è¡æ 1955 éãè¨æ¸¬ããï¼ 1956 1957 ä»ã®æ§è½è©ä¾¡ããã°ã©ã ã§è¨æ¸¬ãããæéããï¼ãã®ããã°ã©ã ã§è¨æ¸¬ããã 1958 æéãæ¸ç®ããæéãï¼è¨æ¸¬å¯¾è±¡ã®å¦çã®æ£å³ã®å®è¡æéã§ããï¼ 1959 1960 (2) perf1 slp_tskï¼wup_tskã«ããã¿ã¹ã¯åæãæéã®è©ä¾¡ 1961 1962 slp_tskï¼wup_tskã«ããã¿ã¹ã¯åæãæéãè¨æ¸¬ããããã®ããã°ã©ã ï¼å 1963 ·ä½ 1964 çã«ã¯ï¼é«ãåªå 1965 度ã®ã¿ã¹ã¯ãèµ·åºå¾ 1966 ã¡ç¶æ 1967 ã§ããæã«ï¼ä½ãåªå 1968 度ã®ã¿ã¹ã¯ 1969 ãwup_tskã«ããé«ãåªå 1970 度ã®ã¿ã¹ã¯ãèµ·åºãï¼é«ãåªå 1971 度ã®ã¿ã¹ã¯ã«åãæã 1972 ãã¾ã§ã®æéã¨ï¼é«ãåªå 1973 度ã®ã¿ã¹ã¯ãslp_tskã«ããèµ·åºå¾ 1974 ã¡ç¶æ 1975 ã¨ãªãï¼ä½ 1976 ãåªå 1977 度ã®ã¿ã¹ã¯ã«åãæããã¾ã§ã®æéãè¨æ¸¬ããï¼ 1978 1979 (3) perf2 snd_pdqã®å¦çæéã®è©ä¾¡ 1980 1981 åªå 1982 度ãã¼ã¿ãã¥ã¼ã«èç©ããã¦ãããã¼ã¿ã®æ°ã«ããï¼snd_pdqã®å¦çæéã 1983 ã©ã®ããã«å¤åããããè¨æ¸¬ããããã®ããã°ã©ã ï¼å 1984 ·ä½çã«ã¯ï¼åªå 1985 度ãã¼ 1986 ã¿ãã¥ã¼ä¸ã«é«ãåªå 1987 度ã®ãã¼ã¿ãnåèç©ããã¦ããæã«ï¼snd_dtqã«ããä½ 1988 ãåªå 1989 度ã®ãã¼ã¿ãå 1990 ¥ããã®ã«ãããæéãè¨æ¸¬ããï¼nã0ï¼10ï¼20ï¼30ï¼40ï¼ 1991 50ï¼100ï¼200ï¼300ã¨å¤åããã¦è¨æ¸¬ããï¼ 1992 1993 (4) perf3 set_flgã®å¦çæéã®è©ä¾¡ 1994 1995 å¾ 1996 ã¡è§£é¤ããã¿ã¹ã¯ã®æ°ã«ããï¼set_flgã®å¦çæéãã©ã®ããã«å¤åãããã 1997 è¨æ¸¬ããããã®ããã°ã©ã ï¼å 1998 ·ä½çã«ã¯ï¼TA_WMULå±æ§ã®ã¤ãã³ããã©ã°ã«å¯¾ã 1999 ã¦ï¼nåã®ã¿ã¹ã¯ãå¾ 2000 ã£ã¦ããæã«ï¼set_flgã«ãããã®ãã¹ã¦ãå¾ 2001 ã¡è§£é¤ãã 2002 ã®ã«ãããæéãè¨æ¸¬ããï¼nã0ï¼1ï¼2ï¼3ï¼4ï¼5ï¼10ï¼20ã¨å¤åããã¦è¨æ¸¬ã 2003 ãï¼ 2004 2005 (5) perf4 act_tskï¼iact_tskã®å¦çæéã¨ã¿ã¹ã¯åæãæéã®è©ä¾¡ 2006 2007 act_tskï¼iact_tskã®å¦çæéã¨ã¿ã¹ã¯åæãæéãè¨æ¸¬ããããã®ããã°ã©ã ï¼ 2008 å 2009 ·ä½çã«ã¯ï¼(1) ã¿ã¹ã¯åæããèµ·ãããªãact_tskã®å¦çæéï¼(2) ã¿ã¹ã¯å 2010 æããèµ·ããact_tskã®å¦çæéï¼ã¿ã¹ã¯åæãæéãå«ãï¼ï¼(3) ã¿ã¹ã¯åæ 2011 ããèµ·ããiact_tskã®å¦çæéï¼ã¿ã¹ã¯åæãæéã¨ã¿ã¤ãå²è¾¼ã¿ä¸ã§å®è¡ã 2012 ããã·ã¹ãã æå»ã®æ´æ°å¦çæéãå«ãï¼ã®3ã¤ã®æéãè¨æ¸¬ããï¼ 2013 2014 ï¼ï¼ï¼ä½¿ç¨ä¸ã®æ³¨æã¨ãã³ã 2015 2016 11.1 ã¿ã¤ããã©ã¤ãã®çµè¾¼ã¿ 2017 2018 ã¿ã¤ããã©ã¤ããã·ã¹ãã ã«çµã¿è¾¼ãããã«ï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ 2019 ã³ãã¡ã¤ã«ã®å 2020 é ã§target_timer.cfgãã¤ã³ã¯ã«ã¼ãããå¿ 2021 è¦ãããï¼ 2022 2023 11.2 assertãã¯ãã®å¦ç 2024 2025 ASPã«ã¼ãã«ã®ã³ã¼ãä¸ã«ã¯ï¼assertãã¯ãã使ããã¦ããï¼assertãã¯ãã®å® 2026 義ã¯t_stddef.hã«å«ã¾ãï¼assertã失æããå ´åã®æå¾ã®å¦çï¼é常ã¯ï¼ãã 2027 ã°ã©ã ãåæ¢ãããå¦çï¼ã¯ï¼ã¿ã¼ã²ããä¾åé¨ã®TOPPERS_assert_abortã§æ±º 2028 å®ãããï¼ 2029 2030 assertã失æããå ´åï¼ã·ã¹ãã éçºä¸ã¯ãããã¬ã«è½ã¨ãã®ãæã¾ãããï¼ 2031 ã·ã¹ãã 稼åæã®å¯¾å¦æ³ã¯ï¼ã·ã¹ãã ã«å¯¾ããè¦ä»¶ã«ä¾åããï¼ããã§ï¼ã¿ã¼ 2032 ã²ããä¾åé¨ã®TOPPERS_assert_abortãï¼ã·ã¹ãã è¦ä»¶ã«åè´ããé©åãªå¦ç 2033 ã«ç½®ãæããå¿ 2034 è¦ãããï¼ã·ã¹ãã è¦ä»¶ã«ãã£ã¦ã¯ï¼NDEBUGãå®ç¾©ãã¦assert 2035 ãã¯ãã®å¦çããªãã¸ã§ã¯ãã³ã¼ãä¸ããæ¶ãï¼ã6.2 ã³ã³ãã¤ã«ãªãã·ã§ã³ã 2036 ã®ç¯ãåç 2037 §ï¼æ¹æ³ãèããããï¼ 2038 2039 11.3 ã·ã¹ãã ãã°æ©è½ã®æ±ã 2040 2041 TOPPERS/ASPã«ã¼ãã«ã§ã¯ï¼ã·ã¹ãã éçºæã®å©ä¾¿æ§ãèæ 2042 ®ãï¼ã·ã¹ãã ãã°æ© 2043 è½ãçµã¿è¾¼ãè¨å®ãããã©ã«ãã¨ãã¦ããï¼ 2044 2045 ããã«å¯¾ãã¦ï¼TOPPERS/ASPã«ã¼ãã«ãç¨ããã·ã¹ãã ãæ©å¨ã«çµã¿è¾¼ãå ´åã¯ï¼ 2046 ã·ã¹ãã ãã°æ©è½ãæå³ããªãå ´åãå¤ãï¼æ©å¨ã¸ã®çµè¾¼ã¿ã«éãã¦ã®ã·ã¹ã 2047 ã ãã°æ©è½ã®è¨å®æ¹æ³ã«ã¯ï¼ä»¥ä¸ã®æ¹æ³ãèããããï¼ 2048 2049 (1) ã·ã¹ãã ãã°æ©è½ãç¨ããªã 2050 2051 ã·ã¹ãã ãã°æ©è½ãä¸å使ç¨ããªãå ´åã«ã¯ï¼ã·ã¹ãã ãã°æ©è½ãã·ã¹ãã ã« 2052 çµã¿è¾¼ã¾ãï¼ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã§syslog.cfgãã¤ã³ã¯ 2053 ã«ã¼ãããªãï¼ï¼ã·ã¹ãã ãã°æ©è½ã®ãµã¼ãã¹ã³ã¼ã«ãå¼ã³åºãã½ã¼ã¹ãã¡ã¤ 2054 ã«ãTOPPERS_OMIT_SYSLOGãå®ç¾©ãã¦ã³ã³ãã¤ã«ããã°ããï¼ 2055 2056 (2) ãã°æ 2057 å ±ã®èç©ã®ã¿ãè¡ã 2058 2059 æ©å¨ã«çµã¿è¾¼ãã ç¶æ 2060 ã§ï¼ã·ãªã¢ã«ãã¼ãçãä»ãã¦ã·ã¹ãã ãå¤é¨ã¨æ¥ç¶ã 2061 ããã¨ãã§ããå ´åã«ã¯ï¼ã·ã¹ãã 稼åæã«ã¯ãã°æ 2062 å ±ã®èç©ã®ã¿ãè¡ãï¼ã· 2063 ã¹ãã ã«é害ãèµ·ããæãªã©ã«ãã°æ 2064 å ±ãåãåºããã¨ã§ï¼é害ã®åå åæã® 2065 å©ãã¨ãããã¨ãã§ããï¼ 2066 2067 å 2068 ·ä½çãªè¨å®æ¹æ³ã¨ãã¦ï¼æ¬¡ã®2ã¤ã®æ¹æ³ãèããããï¼ 2069 2070 (2-1) ä½ã¬ãã«åºåãã¡ã¢ãªã«èç©ãã 2071 2072 å¿ 2073 è¦ãªãã°æ 2074 å ±ãä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåããããã«è¨å®ãï¼ä½ã¬ãã« 2075 ã®æååºåé¢æ°ï¼target_fput_logï¼ã«éãããæåãã¡ã¢ãªï¼å 2076 ¸åçã«ã¯ãªã³ 2077 ã°ãããã¡ï¼ã«èç©ããããã«ããï¼ã·ã¹ãã ã®é害æã«ã¯ï¼ãã®ã¡ã¢ãªé å 2078 ãèªã¿åºãï¼ 2079 2080 (2-2) ã·ã¹ãã ãã°æ©è½ã®ãã°ãããã¡ã«èç©ãã 2081 2082 å¿ 2083 è¦ãªãã°æ 2084 å ±ãã·ã¹ãã ãã°æ©è½ã®ãã°ãããã¡ã«è¨é²ããããã«è¨å®ããï¼ 2085 ã·ã¹ãã ãã°ã¿ã¹ã¯ãåä½ãããªãã¨ï¼ãã°æ 2086 å ±ã¯ãã°ãããã¡ã«èç©ãã㦠2087 ããï¼ã·ã¹ãã ã®é害æã«ã¯ï¼ãã°ãããã¡ã®é åãèªã¿åºããï¼ã·ã¹ãã ã 2088 ã°ã¿ã¹ã¯ãåä½ããã¦ãã°æ 2089 å ±ãåºåãããï¼ 2090 2091 (3) éçºæã®è¨å®ã®ã¾ã¾ã¨ãã 2092 2093 ã·ã¹ãã ãã°æ©è½ã®è¨å®ãï¼ã·ã¹ãã éçºæã®ã¾ã¾å¤æ´ããï¼ã·ãªã¢ã«ãã¼ã 2094 çã«ãã°æ 2095 å ±ãåãæµãæ¹æ³ãèããããï¼ 2096 2097 11.4 ãªãã¸ã§ã¯ãIDã®ç®¡ç 2098 2099 TOPPERS/ASPã«ã¼ãã«ã§ã¯ï¼ãªãã¸ã§ã¯ãã®IDçªå·ãï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãå² 2100 ãä»ããæ¹æ³ãåºæ¬ã¨ãªã£ã¦ããï¼ 2101 2102 ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ä¸ã§ãªãã¸ã§ã¯ãã®IDçªå·ãåç 2103 §ããå ´åã«ã¯ï¼ 2104 次ã®2ã¤ã®æ¹æ³ãèããããï¼ 2105 2106 (1) ãªãã¸ã§ã¯ãèå¥åãç¨ãã 2107 2108 ãªãã¸ã§ã¯ãçæã®ããã®éçAPIï¼CRE_YYYï¼ã®ç¬¬1ãã©ã¡ã¼ã¿ã«è¨è¿°ãããªã 2109 ã¸ã§ã¯ãèå¥åãï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ä¸ã§ãç¨ããæ¹æ³ï¼ 2110 2111 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¯ï¼ãªãã¸ã§ã¯ãèå¥åãï¼å²ãä»ããIDçªå·ã«ãã¯ãå® 2112 義ããCè¨èªããªããã»ããµã®ãã£ã¬ã¯ãã£ãï¼#defineï¼ãkernel_cfg.hã«ç 2113 æããããï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ããkernel_cfg.hãã¤ã³ã¯ã«ã¼ãã 2114 ãå¿ 2115 è¦ãããï¼ 2116 2117 ãã®æ¹æ³ã¯ï¼ãªãã¸ã§ã¯ãã³ã¼ãä¸ã«IDçªå·ãç´æ¥åãè¾¼ã¾ããããã«å®è¡å¹ 2118 çãè¯ãä¸æ¹ã§ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãå®è¡ããã¦kernel_cfg.hãæ¸ãæãã 2119 度ã«ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®åã³ã³ãã¤ã«ãå¿ 2120 è¦ã«ãªãã¨ããæ¬ ç¹ã 2121 ããï¼ãã®ããï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ãæ§æãããã¡ã¤ã«ã®ä¸ã§ï¼ä¸ 2122 é¨ã®ãã¡ã¤ã«ã®ã¿ã§ãªãã¸ã§ã¯ãèå¥åãåç 2123 §ããæ§æã«ããã¨ãã£ã工夫ã 2124 ãããã¨ãæã¾ããï¼ 2125 2126 (2) ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°ãç¨ãã 2127 2128 ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããconstå±æ§ãä»å ããå¤æ°ãç¨æãï¼ã¢ããªã±ã¼ 2129 ã·ã§ã³ããã°ã©ã ä¸ã§ã¯ï¼ãã®å¤æ°ãç¨ããæ¹æ³ï¼ 2130 2131 ä¾ãã°ï¼TASK1ã¨ãããªãã¸ã§ã¯ãèå¥åã®ã¿ã¹ã¯ã«å¯¾ãã¦ï¼æ¬¡ã®ãããªå¤æ°ã 2132 ç¨æããï¼ 1685 現バージョンで用意している性能評価プログラムは次の通り. 1686 1687 (1) perf0 時間計測のオーバヘッドの評価 1688 1689 時間計測のオーバヘッドを計測するためのプログラム.具体的には,空のプロ 1690 グラム(begin_mearsureとend_measureを続けて呼び出すプログラム)の実行時 1691 間を計測する. 1692 1693 他の性能評価プログラムで計測された時間から,このプログラムで計測された 1694 時間を減算した時間が,計測対象の処理の正味の実行時間である. 1695 1696 (2) perf1 slp_tsk,wup_tskによるタスク切換え時間の評価 1697 1698 slp_tsk,wup_tskによるタスク切換え時間を計測するためのプログラム.具体 1699 的には,高い優先度のタスクが起床待ち状態である時に,低い優先度のタスク 1700 がwup_tskにより高い優先度のタスクを起床し,高い優先度のタスクに切り換わ 1701 るまでの時間と,高い優先度のタスクがslp_tskにより起床待ち状態となり,低 1702 い優先度のタスクに切り換わるまでの時間を計測する. 1703 1704 (3) perf2 snd_pdqの処理時間の評価 1705 1706 優先度データキューに蓄積されているデータの数により,snd_pdqの処理時間が 1707 どのように変化するかを計測するためのプログラム.具体的には,優先度デー 1708 タキュー中に高い優先度のデータがn個蓄積されている時に,snd_dtqにより低 1709 い優先度のデータを入れるのにかかる時間を計測する.nを0,10,20,30,40, 1710 50,100,200,300と変化させて計測する. 1711 1712 (4) perf3 set_flgの処理時間の評価 1713 1714 待ち解除するタスクの数により,set_flgの処理時間がどのように変化するかを 1715 計測するためのプログラム.具体的には,TA_WMUL属性のイベントフラグに対し 1716 て,n個のタスクが待っている時に,set_flgによりそのすべてを待ち解除する 1717 のにかかる時間を計測する.nを0,1,2,3,4,5,10,20と変化させて計測す 1718 る. 1719 1720 (5) perf4 act_tsk,iact_tskの処理時間とタスク切換え時間の評価 1721 1722 act_tsk,iact_tskの処理時間とタスク切換え時間を計測するためのプログラム. 1723 具体的には,(1) タスク切換えを起こさないact_tskの処理時間,(2) タスク切 1724 換えを起こすact_tskの処理時間(タスク切換え時間を含む),(3) タスク切換 1725 えを起こすiact_tskの処理時間(タスク切換え時間とタイマ割込み中で実行さ 1726 れるシステム時刻の更新処理時間を含む)の3つの時間を計測する. 1727 1728 11.使用上の注意とヒント 1729 1730 11.1 タイマドライバの組込み 1731 1732 タイマドライバをシステムに組み込むために,システムコンフィギュレーショ 1733 ンファイルの先頭でtarget_timer.cfgをインクルードする必要がある. 1734 1735 11.2 assertマクロの処理 1736 1737 ASPカーネルのコード中には,assertマクロが使われている.assertマクロの定 1738 義はt_stddef.hに含まれ,assertが失敗した場合の最後の処理(通常は,プロ 1739 グラムを停止させる処理)は,ターゲット依存部のTOPPERS_assert_abortで決 1740 定される. 1741 1742 assertが失敗した場合,システム開発中はデバッガに落とすのが望ましいが, 1743 システム稼働時の対処法は,システムに対する要件に依存する.そこで,ター 1744 ゲット依存部のTOPPERS_assert_abortを,システム要件に合致した適切な処理 1745 に置き換える必要がある.システム要件によっては,NDEBUGを定義してassert 1746 マクロの処理をオブジェクトコード中から消す(「6.2 コンパイルオプション」 1747 の節を参照)方法も考えられる. 1748 1749 11.3 システムログ機能の扱い 1750 1751 TOPPERS/ASPカーネルでは,システム開発時の利便性を考慮し,システムログ機 1752 能を組み込む設定をデフォルトとしている. 1753 1754 それに対して,TOPPERS/ASPカーネルを用いたシステムを機器に組み込む場合は, 1755 システムログ機能が意味がない場合も多い.機器への組込みに際してのシステ 1756 ムログ機能の設定方法には,以下の方法が考えられる. 1757 1758 (1) システムログ機能を用いない 1759 1760 システムログ機能を一切使用しない場合には,システムログ機能をシステムに 1761 組み込まず(システムコンフィギュレーションファイルでsyslog.cfgをインク 1762 ルードしない),システムログ機能のサービスコールを呼び出すソースファイ 1763 ルをTOPPERS_OMIT_SYSLOGを定義してコンパイルすればよい. 1764 1765 (2) ログ情報の蓄積のみを行う 1766 1767 機器に組み込んだ状態で,シリアルポート等を介してシステムを外部と接続す 1768 ることができる場合には,システム稼働時にはログ情報の蓄積のみを行い,シ 1769 ステムに障害が起きた時などにログ情報を取り出すことで,障害の原因分析の 1770 助けとすることができる. 1771 1772 具体的な設定方法として,次の2つの方法が考えられる. 1773 1774 (2-1) 低レベル出力をメモリに蓄積する 1775 1776 必要なログ情報を低レベル出力機能を用いて出力するように設定し,低レベル 1777 の文字出力関数(target_fput_log)に送られた文字をメモリ(典型的にはリン 1778 グバッファ)に蓄積するようにする.システムの障害時には,そのメモリ領域 1779 を読み出す. 1780 1781 (2-2) システムログ機能のログバッファに蓄積する 1782 1783 必要なログ情報をシステムログ機能のログバッファに記録するように設定する. 1784 システムログタスクを動作させないと,ログ情報はログバッファに蓄積されて 1785 いく.システムの障害時には,ログバッファの領域を読み出すか,システムロ 1786 グタスクを動作させてログ情報を出力させる. 1787 1788 (3) 開発時の設定のままとする 1789 1790 システムログ機能の設定を,システム開発時のまま変更せず,シリアルポート 1791 等にログ情報を垂れ流す方法も考えられる. 1792 1793 11.4 オブジェクトIDの管理 1794 1795 TOPPERS/ASPカーネルでは,オブジェクトのID番号を,コンフィギュレータが割 1796 り付ける方法が基本となっている. 1797 1798 アプリケーションプログラム中でオブジェクトのID番号を参照する場合には, 1799 次の2つの方法が考えられる. 1800 1801 (1) オブジェクト識別名を用いる 1802 1803 オブジェクト生成のための静的API(CRE_YYY)の第1パラメータに記述したオブ 1804 ジェクト識別名を,アプリケーションプログラム中でも用いる方法. 1805 1806 コンフィギュレータは,オブジェクト識別名を,割り付けたID番号にマクロ定 1807 義するC言語プリプロセッサのディレクティブ(#define)をkernel_cfg.hに生 1808 成するため,アプリケーションプログラムからkernel_cfg.hをインクルードす 1809 る必要がある. 1810 1811 この方法は,オブジェクトコード中にID番号が直接埋め込まれるために実行効 1812 率が良い一方で,コンフィギュレータが実行されてkernel_cfg.hが書き換わる 1813 度に,アプリケーションプログラムの再コンパイルが必要になるという欠点が 1814 ある.そのため,アプリケーションプログラムを構成するファイルの中で,一 1815 部のファイルのみでオブジェクト識別名を参照する構成にするといった工夫を 1816 することが望ましい. 1817 1818 (2) オブジェクトのID番号を保持する変数を用いる 1819 1820 オブジェクトのID番号を保持するconst属性を付加した変数を用意し,アプリケー 1821 ションプログラム中では,その変数を用いる方法. 1822 1823 例えば,TASK1というオブジェクト識別名のタスクに対して,次のような変数を 1824 用意する. 2133 1825 2134 1826 const ID TASK1_id = TASK1; 2135 1827 2136 ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ä¸ã§ã¯ï¼ãã®å¤æ°ï¼TASK1_idï¼ãç¨ãããã¨ã§ï¼ 2137 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãå®è¡ããã¦kernel_cfg.hãæ¸ãæãã度ã«ï¼ä¸è¨ã®å¤æ° 2138 å®ç¾©ãå«ãã ãã¡ã¤ã«ã®ã¿ãåã³ã³ãã¤ã«ããã°ãããã¨ã«ãªãï¼ 2139 2140 ãã®æ¹æ³ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®åã³ã³ãã¤ã«ãæå°éã«ã§ããå© 2141 ç¹ãããä¸æ¹ã§ï¼å¤æ°ã®ããã®ã¡ã¢ãªé åãå¿ 2142 è¦ã«ãªããã¨ã«å ãã¦ï¼ï¼ãã 2143 ã»ããµã«ãã£ã¦ã¯ï¼å¤æ°ã¢ã¯ã»ã¹ã®ããã®ãªã¼ãããããçããã¨ããæ¬ ç¹ã 2144 ããï¼ã¾ãï¼å®æ°ã§ã¯ãªãå¤æ°ã§ãããã¨ããï¼ä»ã®å¤æ°ã®åæåã«ã¯ä½¿ã㪠2145 ãã¨ããå¶éãããï¼ 2146 2147 ãªãï¼TOPPERS/ASPã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¯ï¼--external-idãªãã·ã§ 2148 ã³ãä»å ãããã¨ã«ããï¼ä¸è¨ã®å¤æ°å®ç¾©ãkernel_cfg.cä¸ã«çæããæ©è½ã 2149 æã£ã¦ããã®ã§ï¼ãã¹ã¦ã®ãªãã¸ã§ã¯ãIDããã®æ¹æ³ã§åç 2150 §ããå ´åã«ã¯ï¼ã 2151 ã®æ©è½ãç¨ãããã¨ãæ¨å¥¨ããï¼ 2152 2153 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«ããIDçªå·å²ä»ãã®ãã1ã¤ã®èª²é¡ã¨ãã¦ï¼ã³ã³ãã£ã®ã¥ 2154 ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ä¿®æ£ã«ããï¼ãªãã¸ã§ã¯ãIDã®å²ä»ããå¤ãã£ã¦ãã¾ã 2155 ãã¨ãæããããï¼ããã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ã½ããã¦ã§ã¢ã®è¨è¨ä»æ§æ¸ã«ID 2156 çªå·ãè¨è¼ããã¦ããå ´åãï¼ãããã°ä½æ¥ã«ããã¦IDçªå·ãç´æ¥æ±ã£ã¦ãã 2157 å ´åã«ï¼ä½æ¥å¹çãä½ä¸ãããå¯è½æ§ãèããããï¼ 2158 2159 ãã®åé¡ã«å¯¾å¿ããããã«ï¼TOPPERS/ASPã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«ï¼ 2160 IDçªå·ã®å²ä»ãçµæããã¡ã¤ã«ã«æ¸ãåºãæ©è½ï¼--id-output-fileãªãã·ã§ã³ï¼ 2161 ã¨ï¼IDçªå·ã®å²ä»ãããã¡ã¤ã«ããåãè¾¼ãæ©è½ï¼--id-input-fileãªãã·ã§ã³ï¼ 2162 ãç¨æãã¦ããï¼ãããã®æ©è½ãç¨ãã¦ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãå®è¡ãã度ã«ï¼ 2163 ååã«å®è¡ããæã«ãã¡ã¤ã«ã«æ¸ãåºããIDçªå·ã®å²ä»ããåãè¾¼ããã¨ã§ï¼ 2164 ååå®è¡æã¨åãå²ä»ããè¡ããã¨ãã§ããï¼ãã ãï¼TOPPERS/ASPã«ã¼ãã«ã§ 2165 ã¯ï¼IDçªå·ã«æããããã®ã¯è¨±ãããªãããï¼ãªãã¸ã§ã¯ãã®æ°ãæ¸ã£ãå ´å 2166 ã«ã¯ï¼IDçªå·ã大ããæ¹ã®ãªãã¸ã§ã¯ããæ¸ã£ãå ´åãé¤ãã¦ï¼ã¨ã©ã¼ã¨ãªãï¼ 2167 ãã®å ´åã«ã¯ï¼ããã¼ã®ãªãã¸ã§ã¯ããçæããæ¹æ³ã§åé¿ãããããªãï¼ 2168 2169 11.5 ã«ã¼ãã«ã®å 2170 é¨ã·ã³ãã«ã®ãªãã¼ã 2171 2172 ASPã«ã¼ãã«ã§ã¯ï¼ã¢ã¸ã¥ã¼ã«å 2173 é¨ã®å称ãä»ã®ã¢ã¸ã¥ã¼ã«å 2174 é¨ã®å称ã¨è¡çªã 2175 ããã¨ãé¿ããããã«ï¼ã«ã¼ãã«ã®å 2176 é¨ã·ã³ãã«ã¯ï¼Cè¨èªã¬ãã«ã§ï¼å 2177 é ã 2178 "_kernel_"ã¾ãã¯"_KERNEL_"ã§ããå称ã¨ãã¦ããï¼ 2179 2180 ãããã½ã¼ã¹ã³ã¼ãã®å¯èªæ§ã¨ä¸¡ç«ãããããã«ï¼ASPã«ã¼ãã«ã§ã¯ï¼ã½ã¼ã¹ã³ã¼ 2181 ãã¯èªç¶ãªååãç¨ãã¦è¨è¿°ãï¼Cè¨èªããªããã»ããµã®ãã¯ãå®ç¾©ï¼#defineï¼ 2182 ãç¨ãã¦ï¼ããã"_kernel_"ã¾ãã¯"_KERNEL_"ã§å§ã¾ãååï¼èªç¶ãªååã 2183 yyyyyã®å ´åã«ã¯ï¼_kernel_yyyyyï¼ã«ãªãã¼ã ããä»çµã¿ãç¨ãã¦ããï¼ 2184 2185 å 2186 ·ä½çã«ã¯ï¼é¢é£ãããã£ã¬ã¯ããªã«xxx_rename.defãç½®ãï¼ãããããªãã¼ 2187 ã ã®ããã®ããããã¡ã¤ã«ï¼xxx_rename.hããã³xxx_unrename.hï¼ãçæãã 2188 ãã¼ã«ï¼utils/genrenameï¼ãç¨æãã¦ããï¼ 2189 2190 ãã®ä»çµã¿ã¯ï¼ã½ã¼ã¹ã³ã¼ãã®å¯èªæ§åä¸ã«å½¹ç«ã¤ä¸æ¹ã§ï¼å¼å®³ãããï¼ä¾ã 2191 ã°ï¼å¤ãã®ãããã¬ã§ï¼ã½ã¼ã¹ã³ã¼ãä¸ã®å称ã¨ãªãã¸ã§ã¯ãã³ã¼ãä¸ã®å称 2192 ãç°ãªãããã«ï¼ã½ã¼ã¹ã³ã¼ãä¸ã®å¤æ°åãæå®ãã¦å¤ãèªãã ãï¼é¢æ°åã 2193 æå®ãã¦ãã¬ã¼ã¯ãã¤ã³ããç½®ãã¨ãã£ããã¨ãã§ããªãï¼ 2194 2195 ãã®ç¶æ³ã«å¯¾å¿ããããã«ï¼ASPã«ã¼ãã«ã§ã¯ï¼ã½ã¼ã¹ã³ã¼ãä¸ã®è©²å½ããå称 2196 ããªãã¼ã ããããã®ã¦ã¼ãã£ãªãã£ï¼utils/applyrenameï¼ãç¨æãã¦ããï¼ 2197 applyrenameã¦ã¼ãã£ãªãã£ã«ï¼ãªãã¼ã å®ç¾©ãã¡ã¤ã«ï¼xxx_rename.defï¼ã®ã 2198 ãªãã£ãã¯ã¹ï¼xxxã®é¨åï¼ã¨ï¼ãªãã¼ã ããããã¡ã¤ã«ãªã¹ããä¸ããã¨ï¼ãª 2199 ãã¼ã å¦çãè¡ãªãï¼ä¾ãã°ï¼kernelãã£ã¬ã¯ããªã®ãã¹ã¦ã®ãã¡ã¤ã«ã«å¯¾ã 2200 ã¦ï¼ã«ã¼ãã«ã®å 2201 é¨ã·ã³ãã«ããªãã¼ã ããã«ã¯ï¼æ¬¡ã®ã³ãã³ããå®è¡ããã° 2202 ããï¼ 1828 アプリケーションプログラム中では,この変数(TASK1_id)を用いることで, 1829 コンフィギュレータが実行されてkernel_cfg.hが書き換わる度に,上記の変数 1830 定義を含んだファイルのみを再コンパイルすればよいことになる. 1831 1832 この方法は,アプリケーションプログラムの再コンパイルを最小限にできる利 1833 点がある一方で,変数のためのメモリ領域が必要になることに加えて,(プロ 1834 セッサによっては)変数アクセスのためのオーバヘッドが生じるという欠点が 1835 ある.また,定数ではなく変数であることから,他の変数の初期化には使えな 1836 いという制限がある. 1837 1838 なお,TOPPERS/ASPカーネルのコンフィギュレータは,--external-idオプショ 1839 ンを付加することにより,上記の変数定義をkernel_cfg.c中に生成する機能を 1840 持っているので,すべてのオブジェクトIDをこの方法で参照する場合には,こ 1841 の機能を用いることを推奨する. 1842 1843 コンフィギュレータによるID番号割付けのもう1つの課題として,コンフィギュ 1844 レーションファイルの修正により,オブジェクトIDの割付けが変わってしまう 1845 ことが挙げられる.これは,アプリケーションソフトウェアの設計仕様書にID 1846 番号が記載されている場合や,デバッグ作業においてID番号を直接扱っている 1847 場合に,作業効率を低下させる可能性が考えられる. 1848 1849 この問題に対応するために,TOPPERS/ASPカーネルのコンフィギュレータに, 1850 ID番号の割付け結果をファイルに書き出す機能(--id-output-fileオプション) 1851 と,ID番号の割付けをファイルから取り込む機能(--id-input-fileオプション) 1852 を用意している.これらの機能を用いて,コンフィギュレータを実行する度に, 1853 前回に実行した時にファイルに書き出したID番号の割付けを取り込むことで, 1854 前回実行時と同じ割付けを行うことができる.ただし,TOPPERS/ASPカーネルで 1855 は,ID番号に抜けがあるのは許されないため,オブジェクトの数が減った場合 1856 には(ID番号が大きい方のオブジェクトが減った場合を除いて)エラーとなる. 1857 この場合には,ダミーのオブジェクトを生成する方法で回避するしかない. 1858 1859 11.5 カーネルの内部シンボルのリネーム 1860 1861 ASPカーネルでは,モジュール内部の名称が他のモジュール内部の名称と衝突す 1862 ることを避けるために,カーネルの内部シンボルは,C言語レベルで,先頭が 1863 "_kernel_"または"_KERNEL_"である名称としている. 1864 1865 これをソースコードの可読性と両立させるために,ASPカーネルでは,ソースコー 1866 ドは自然な名前を用いて記述し,C言語プリプロセッサのマクロ定義(#define) 1867 を用いて,それを"_kernel_"または"_KERNEL_"で始まる名前(自然な名前が 1868 yyyyyの場合には,_kernel_yyyyy)にリネームする仕組みを用いている. 1869 1870 具体的には,関連するディレクトリにxxx_rename.defを置き,そこからリネー 1871 ムのためのヘッダファイル(xxx_rename.hおよびxxx_unrename.h)を生成する 1872 ツール(utils/genrename)を用意している. 1873 1874 この仕組みは,ソースコードの可読性向上に役立つ一方で,弊害もある.例え 1875 ば,多くのデバッガで,ソースコード中の名称とオブジェクトコード中の名称 1876 が異なるために,ソースコード中の変数名を指定して値を読んだり,関数名を 1877 指定してブレークポイントを置くといったことができない. 1878 1879 この状況に対応するために,ASPカーネルでは,ソースコード中の該当する名称 1880 をリネームするためのユーティリティ(utils/applyrename)を用意している. 1881 applyrenameユーティリティに,リネーム定義ファイル(xxx_rename.def)のプ 1882 リフィックス(xxxの部分)と,リネームしたいファイルリストを与えると,リ 1883 ネーム処理を行なう.例えば,kernelディレクトリのすべてのファイルに対し 1884 て,カーネルの内部シンボルをリネームするには,次のコマンドを実行すれば 1885 よい. 2203 1886 2204 1887 % cd kernel 2205 1888 % ../utils/applyrename kernel * 2206 1889 2207 ã¾ãï¼ã¿ã¼ã²ããä¾åé¨ã®ãã£ã¬ã¯ããªã®ãã¹ã¦ã®ãã¡ã¤ã«ã«å¯¾ãã¦ï¼ã«ã¼ã 2208 ã«ã®å 2209 é¨ã·ã³ãã«ããªãã¼ã ããã«ã¯ï¼æ¬¡ã®ãããªã³ãã³ããå®è¡ããã°ããï¼ 1890 また,ターゲット依存部のディレクトリのすべてのファイルに対して,カーネ 1891 ルの内部シンボルをリネームするには,次のようなコマンドを実行すればよい. 2210 1892 2211 1893 % cd target/dve68k_gcc/ … … 2213 1895 % ../../utils/applyrename ../../kernel/kernel * 2214 1896 2215 11.6 ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ãã®ä½¿ç¨æ¹æ³2216 2217 ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ããã¿ã¼ã²ããä¾åé¨ã«çµã¿è¾¼ã¾ãã¦ããå ´ 2218 åã«ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã¹ã¯ãªããã«ããã使ç¨ãããã¨ãæ示ãã 2219 ãªãã·ã§ã³ï¼-rï¼ãä»å ãããã¨ã§ï¼ã¡ã¢ãªä¸ã«ãã¬ã¼ã¹ãã°ãè¨é²ããæ©è½ 2220 ãæå¹ã«ãªãï¼ 2221 2222 ãã¬ã¼ã¹ãã°è¨é²ã®ä½¿ç¨æ¹æ³ã®ä¸ä¾ã¨ãã¦ï¼ã·ã¹ãã èµ·åæã«ãã¬ã¼ã¹ãã°ã® 2223 è¨é²ãéå§ãï¼ã·ã¹ãã çµäºæã«è¨é²ãããã¬ã¼ã¹ãã°ããã³ãããããã«ã¯ï¼ 2224 ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã«æ¬¡ã®ãããªè¨è¿°ã追å ããï¼ 1897 11.6 トレースログ記録のサンプルコードの使用方法 1898 1899 トレースログ記録のサンプルコードがターゲット依存部に組み込まれている場 1900 合には,コンフィギュレーションスクリプトにそれを使用することを指示する 1901 オプション(-r)を付加することで,メモリ上にトレースログを記録する機能 1902 が有効になる. 1903 1904 トレースログ記録の使用方法の一例として,システム起動時にトレースログの 1905 記録を開始し,システム終了時に記録したトレースログをダンプするためには, 1906 システムコンフィギュレーションファイルに次のような記述を追加する. 2225 1907 2226 1908 #include "logtrace/trace_config.h" … … 2228 1910 ATT_TER({ TA_NULL, target_fput_log, trace_dump }); 2229 1911 2230 ããã§ï¼åæåã«ã¼ãã³ï¼trace_initializeï¼ã¸ã®å¼æ°ã¯ï¼åæåç´å¾ã®ãã¬ã¼ 2231 ã¹ãã°ã®åä½ã¢ã¼ããæå®ãããã®ã§ããï¼æå®ã§ããåä½ã¢ã¼ãã«ã¤ãã¦ã¯ï¼ 2232 arch/logtrace/trace_config.hä¸ã®ã³ã¡ã³ãã«èª¬æãããï¼ 2233 2234 çµäºå¦çã«ã¼ãã³ï¼trace_dumpï¼ã¯ï¼è¨é²ããããã¬ã¼ã¹ãã°ãã¿ã¼ã²ããä¾ 2235 åã®ä½ã¬ãã«åºåæ©è½ï¼target_fput_logï¼ãå©ç¨ãã¦ãã³ãããããã®ãã®ã§ 2236 ããï¼ãã¬ã¼ã¹ãã°ãå¥ã®æ¹æ³ã§åãåºãå ´åã«ã¯ï¼çµäºå¦çã«ã¼ãã³ãç»é² 2237 ããå¿ 2238 è¦ã¯ãªãï¼ 2239 2240 以ä¸ã®æ¹æ³ã§ã¯ï¼trace_initializeãåæåã«ã¼ãã³ã§ï¼trace_dumpãçµäºå¦ 2241 çã«ã¼ãã³ã§å¼ã³åºãã¦ããããï¼åæåã«ã¼ãã³ãå¼ã³åºãåãçµäºå¦çã«ã¼ 2242 ãã³ãå¼ã³åºããå¾ã«ã¯ï¼ãã¬ã¼ã¹ãã°è¨é²ã®æ©è½ãå©ç¨ã§ããªãï¼åæåã«ã¼ 2243 ãã³ãå¼ã³åºãåãçµäºå¦çã«ã¼ãã³ãå¼ã³åºããå¾ã«å®è¡ãããå¦çï¼ä¾ã 2244 ã°ï¼ã«ã¼ãã«ãªãã¸ã§ã¯ãã®åæåå¦çãï¼trace_initializeãããå 2245 ã«ç»é² 2246 ããåæåã«ã¼ãã³ï¼trace_dumpãããå 2247 ã«ç»é²ããçµäºå¦çã«ã¼ãã³ï¼ã§ã 2248 ã¬ã¼ã¹ãã°è¨é²ã®æ©è½ãå©ç¨ããããã«ã¯ï¼trace_initializeã¨trace_dumpã 2249 é©åãªå ´æã§å¼ã¶ããã«ä¿®æ£ãããã¨ãå¿ 2250 è¦ã§ããï¼ 2251 2252 11.7 ã·ã¹ãã ã®èµ·åæã®åæåå¦ç 2253 2254 ã·ã¹ãã ã®èµ·åæã«ã¢ããªã±ã¼ã·ã§ã³ã§å¿ 2255 è¦ã¨ãªãåæåå¦çãè¡ãããã®æ© 2256 è½ã¨ãã¦åæåã«ã¼ãã³ãç¨æããã¦ãããï¼åæåã«ã¼ãã³ãå®è¡ãããã 2257 ããæ©ãã¿ã¤ãã³ã°ã§å®è¡ãããã¨ãå¿ 2258 è¦ãªåæåå¦çãããå ´åãããï¼ 2259 2260 ãã®ãããªå ´åã«ç¨ããããã«ï¼æ¨æºçãªã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ããï¼ã¿ã¼ 2261 ã²ããã·ã¹ãã ä¾åã®åæåããã¯ï¼hardware_init_hookï¼ãå¼ã³åºããã¨ã¨ 2262 ãã¦ããï¼hardware_init_hookã¯ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã§ç¨æãã㦠2263 ããã®ãæ¨æºã§ãããï¼ãããã¢ããªã±ã¼ã·ã§ã³ã§ç¨æãããã®ã«ç½®ãæãï¼ 2264 ãã®ä¸ã§ã¢ããªã±ã¼ã·ã§ã³ã§å¿ 2265 è¦ã¨ãªãåæåå¦çãè¡ããã¨ãã§ããï¼ 2266 2267 ãã ãï¼hardware_init_hookã®ä½æããå ´åã«ã¯ï¼bssã»ã¯ã·ã§ã³ã¨dataã»ã¯ã·ã§ 2268 ã³ãåæåããã¦ããªããã¨ãï¼ã©ã¤ãã©ãªãåæåããã¦ããªããã¨ï¼Cè¨èª 2269 ã§è¨è¿°ã§ããã¨ã¯éããªããã¨ãªã©ã«æ³¨æãå¿ 2270 è¦ã§ããï¼ä½æã«ããã£ã¦ã¯ï¼ 2271 ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãããåç 2272 §ãããã¨ï¼ 2273 2274 ã«ã¼ãã«ã®ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ãhardware_init_hookãå¼ã³åºãããã« 2275 å®è£ 2276 ããã¦ããªãå ´åã«ã¯ï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ãã¢ããªã±ã¼ã·ã§ã³ã§ 2277 ç¨æãããã®ã«ç½®ãæããæ¹æ³ãæ¨å¥¨ããï¼ 2278 2279 11.8 rodataã»ã¯ã·ã§ã³ãRAMã«ç½®ãå ´å 2280 2281 ä½ããã®çç±ã§rodataã»ã¯ã·ã§ã³ãRAMã«ç½®ãå ´åï¼dataã»ã¯ã·ã§ã³ã¨åæ§ã«ï¼ 2282 ãã®åæå¤ã¯ROMã«ç½®ãï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã§RAMã«ã³ãã¼ããã®ãç´ 2283 ç´ã§ããï¼ãããå®ç¾ããã«ã¯ï¼dataã»ã¯ã·ã§ã³ã®åæ±ããåèã«ï¼ãªã³ã«ã¹ 2284 ã¯ãªããã¨ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ãä¿®æ£ããå¿ 2285 è¦ããããï¼ããã«å ãã¦ï¼ 2286 以ä¸ã®æªç½®ãå¿ 2287 è¦ã§ããï¼ 2288 2289 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¯ï¼ãã¹1ã¨ãã¹3ã«ããã¦ï¼ãã¼ãã¢ã¸ã¥ã¼ã«ã®ã·ã³ãã« 2290 ãã¡ã¤ã«ãç¨ãã¦ï¼ãã¼ãã¢ã¸ã¥ã¼ã«å 2291 ã®rodataã»ã¯ã·ã§ã³ãèªã¿è¾¼ããã¨ã§ï¼ 2292 å種ã®å®æ°å¤ãåå¾ããï¼ãã®ããï¼rodataã»ã¯ã·ã§ã³ãdataã»ã¯ã·ã§ã³ã¨å 2293 æ§ã«æ±ãã¨ï¼ãã®ã¢ã¯ã»ã¹ã¢ãã¬ã¹ï¼RAMå 2294 ã®ã¢ãã¬ã¹ï¼VMAã¨å¼ã¶ï¼ã¨é 2295 置㢠2296 ãã¬ã¹ï¼ROMå 2297 ã®ã¢ãã¬ã¹ï¼LMAã¨å¼ã¶ï¼ãä¸è´ããªããªãããã«ï¼å®æ°å¤ãå 2298 å¾ãããã¨ãã§ããï¼ã¨ã©ã¼ã¨ãªãï¼ 2299 2300 ãã¹1ã§ã®ã¨ã©ã¼ãåé¿ããããã«ã¯ï¼ãã¹1ã®ãªã³ã¯æï¼cfg1_outããªã³ã¯ã 2301 ãæï¼ã«ã¯ï¼rodataã»ã¯ã·ã§ã³ã®ã¢ã¯ã»ã¹ã¢ãã¬ã¹ã¨é 2302 ç½®ã¢ãã¬ã¹ãä¸è´ãã 2303 ããªã³ã«ã¹ã¯ãªããï¼æ¨æºã®ãªã³ã«ã¹ã¯ãªããã¯ãã®ããã«ãªã£ã¦ããï¼ãç¨ 2304 ããï¼ãµã³ãã«ã®Makefileã§ã¯ï¼LDSCRIPTã«ãããªã³ã«ã¹ã¯ãªãããæå®ãã 2305 ã®ã§ã¯ãªãï¼LDFLAGSã¨CFG1_OUT_LDFLAGSã«ç°ãªããªã³ã«ã¹ã¯ãªãããç¨ãã㪠2306 ãã·ã§ã³ãè¨å®ããã°ããï¼ 2307 2308 ãã¹3ã§ã®ã¨ã©ã¼ãåé¿ããããã«ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹3ã®ãã³ãã¬ã¼ 2309 ããã¡ã¤ã«ã«ããã¦ï¼rodataã»ã¯ã·ã§ã³ã®å 2310 容ãï¼é 2311 ç½®ã¢ãã¬ã¹ããã¢ã¯ã»ã¹ 2312 ã¢ãã¬ã¹ã«ã³ãã¼ããï¼ãã®ããã«ã¯ï¼ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ã 2313 ãä¾åé¨ã§ï¼LMA.ORDER_LISTçã®ãã³ãã¬ã¼ããã¡ã¤ã«å¤æ°ãè¨å®ããã°ããï¼ 2314 å 2315 ·ä½çãªæ¹æ³ã¯ï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãããåç 2316 §ãããã¨ï¼ 2317 2318 2319 ï¼ï¼ï¼åèæ 2320 å ± 2321 2322 12.1 å©ç¨æ¡ä»¶ã¨å©ç¨å ±å 2323 2324 ASPã«ã¼ãã«ã®å©ç¨æ¡ä»¶ã¯ï¼åãã¡ã¤ã«ã®å 2325 é ã«è¡¨ç¤ºããã¦ããï¼èä½æ¨©ã¯ï¼å 2326 ãã¡ã¤ã«ã®å 2327 é ã«è¡¨ç¤ºããã¦ããèä½æ¨©è 2328 ãä¿æãã¦ããï¼ 2329 2330 å©ç¨æ¡ä»¶ã®(3)ã®(b)ã«ããã¦ï¼å©ç¨ã®å½¢æ 2331 ãTOPPERSããã¸ã§ã¯ãã«å ±åããæ¹ 2332 æ³ã¨ãã¦ã¯ï¼ASPã«ã¼ãã«ãå©ç¨ãã製åã®å称ã¨å¿ç¨åéï¼è£½ååããä¼ç¤¾å 2333 ã¨æ¥ç¨®çã®æ 2334 å ±ãï¼ä»¥ä¸ã®URLã®ãã¼ã¸ããå ±åãããã®ã¨ããï¼ 1912 ここで,初期化ルーチン(trace_initialize)への引数は,初期化直後のトレー 1913 スログの動作モードを指定するものである.指定できる動作モードについては, 1914 arch/logtrace/trace_config.h中のコメントに説明がある. 1915 1916 終了処理ルーチン(trace_dump)は,記録されたトレースログをターゲット依 1917 存の低レベル出力機能(target_fput_log)を利用してダンプするためのもので 1918 ある.トレースログを別の方法で取り出す場合には,終了処理ルーチンを登録 1919 する必要はない. 1920 1921 以上の方法では,trace_initializeを初期化ルーチンで,trace_dumpを終了処 1922 理ルーチンで呼び出しているため,初期化ルーチンを呼び出す前や終了処理ルー 1923 チンを呼び出した後には,トレースログ記録の機能を利用できない.初期化ルー 1924 チンを呼び出す前や終了処理ルーチンを呼び出した後に実行される処理(例え 1925 ば,カーネルオブジェクトの初期化処理や,trace_initializeよりも先に登録 1926 した初期化ルーチン,trace_dumpよりも先に登録した終了処理ルーチン)でト 1927 レースログ記録の機能を利用するためには,trace_initializeとtrace_dumpを 1928 適切な場所で呼ぶように修正することが必要である. 1929 1930 11.7 システムの起動時の初期化処理 1931 1932 システムの起動時にアプリケーションで必要となる初期化処理を行うための機 1933 能として初期化ルーチンが用意されているが,初期化ルーチンが実行されるよ 1934 りも早いタイミングで実行することが必要な初期化処理がある場合がある. 1935 1936 このような場合に用いるために,標準的なスタートアップモジュールから,ター 1937 ゲットシステム依存の初期化フック(hardware_init_hook)を呼び出すことと 1938 している.hardware_init_hookは,カーネルのターゲット依存部で用意されて 1939 いるのが標準であるが,これをアプリケーションで用意したものに置き換え, 1940 その中でアプリケーションで必要となる初期化処理を行うことができる. 1941 1942 ただし,hardware_init_hookの作成する場合には,bssセクションとdataセクショ 1943 ンが初期化されていないことや,ライブラリが初期化されていないこと,C言語 1944 で記述できるとは限らないことなどに注意が必要である.作成にあたっては, 1945 「ターゲット依存部 ポーティングガイド」を参照すること. 1946 1947 カーネルのスタートアップモジュールがhardware_init_hookを呼び出すように 1948 実装されていない場合には,スタートアップモジュールをアプリケーションで 1949 用意したものに置き換える方法を推奨する. 1950 1951 11.8 rodataセクションをRAMに置く場合 1952 1953 何らかの理由でrodataセクションをRAMに置く場合,dataセクションと同様に, 1954 その初期値はROMに置き,スタートアップモジュールでRAMにコピーするのが素 1955 直である.これを実現するには,dataセクションの取扱いを参考に,リンカス 1956 クリプトとスタートアップモジュールを修正する必要があるが,それに加えて, 1957 以下の措置が必要である. 1958 1959 コンフィギュレータは,パス1とパス3において,ロードモジュールのシンボル 1960 ファイルを用いて,ロードモジュール内のrodataセクションを読み込むことで, 1961 各種の定数値を取得する.そのため,rodataセクションをdataセクションと同 1962 様に扱うと,そのアクセスアドレス(RAM内のアドレス,VMAと呼ぶ)と配置ア 1963 ドレス(ROM内のアドレス,LMAと呼ぶ)が一致しなくなるために,定数値を取 1964 得することができず,エラーとなる. 1965 1966 パス1でのエラーを回避するためには,パス1のリンク時(cfg1_outをリンクす 1967 る時)には,rodataセクションのアクセスアドレスと配置アドレスを一致させ 1968 るリンカスクリプト(標準のリンカスクリプトはこのようになっている)を用 1969 いる.サンプルのMakefileでは,LDSCRIPTによりリンカスクリプトを指定する 1970 のではなく,LDFLAGSとCFG1_OUT_LDFLAGSに異なるリンカスクリプトを用いるオ 1971 プションを設定すればよい. 1972 1973 パス3でのエラーを回避するためには,コンフィギュレータのパス3のテンプレー 1974 トファイルにおいて,rodataセクションの内容を,配置アドレスからアクセス 1975 アドレスにコピーする.そのためには,パス3のテンプレートファイルのターゲッ 1976 ト依存部で,LMA.ORDER_LIST等のテンプレートファイル変数を設定すればよい. 1977 具体的な方法は,「ターゲット依存部 ポーティングガイド」を参照すること. 1978 1979 1980 12.参考情報 1981 1982 12.1 利用条件と利用報告 1983 1984 ASPカーネルの利用条件は,各ファイルの先頭に表示されている.著作権は,各 1985 ファイルの先頭に表示されている著作権者が保有している. 1986 1987 利用条件の(3)の(b)において,利用の形態をTOPPERSプロジェクトに報告する方 1988 法としては,ASPカーネルを利用した製品の名称と応用分野,製品化した会社名 1989 と業種等の情報を,以下のURLのページから報告するものとする. 2335 1990 2336 1991 http://www.toppers.jp/report.html 2337 1992 2338 ã¾ããã®éã«ï¼ASPã«ã¼ãã«ã使ç¨ãã¦ã®ã³ã¡ã³ãããæè¦ãããã ããã¨å¹¸ã 2339 ã§ããï¼ 2340 2341 12.2 ä¿è¨¼ã»é©ç¨æ§ã»ãµãã¼ã 2342 2343 ASPã«ã¼ãã«ã¯ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼éçºè 2344 ããã³TOPPERSãã 2345 ã¸ã§ã¯ãã¯ï¼ASPã«ã¼ãã«ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®çã«å¯¾ããé©åæ§ãå«ãã¦ï¼ 2346 ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼ASPã«ã¼ãã«ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥ç 2347 ã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 2348 2349 éçºè 2350 ããã³TOPPERSããã¸ã§ã¯ãã¯ï¼ASPã«ã¼ãã«ã«é¢ãããµãã¼ãã®ç´æ㯠2351 ãã¦ããªãï¼ASPã«ã¼ãã«ã«é¢ãã¦è³ªåãããå ´åã¯ï¼å¾è¿°ã®TOPPERSã¦ã¼ã¶ã¼ 2352 ãºã¡ã¼ãªã³ã°ãªã¹ããå©ç¨ãã¦ããã ããã¨å¹¸ãã§ããï¼ç¢ºå®ãªãµãã¼ããå¿ 2353 2354 è¦ãªå ´åã«ã¯ï¼æåã§ãµãã¼ããµã¼ãã¹ãæä¾ãã¦ããä¼ç¤¾ã«ç¸è«ããããï¼ 2355 2356 12.3 ãã°ã¬ãã¼ã 2357 2358 ASPã«ã¼ãã«ã«ãã°ãåé¡ç¹ãçºè¦ãããå ´åã«ã¯ï¼å¾è¿°ã®TOPPERSã¦ã¼ã¶ã¼ãº 2359 ã¡ã¼ãªã³ã°ãªã¹ãã«å ±åãã¦æ¬²ããï¼ 2360 2361 ã¡ã¼ãªã³ã°ãªã¹ãã«ãã°ãåé¡ç¹ãªã©ãå ±åããå ´åã«ã¯ï¼å¿ 2362 è¦ã«å¿ãã¦æ¬¡ã® 2363 æ 2364 å ±ãç¥ããã¦æ¬²ããï¼ 2365 2366 使ç¨ãã¦ããã«ã¼ãã«ã«é¢ããæ 2367 å ± 2368 ã»ã¿ã¼ã²ããéä¾åé¨ã®ãã¼ã¸ã§ã³ 2369 ã»ä½¿ç¨ãã¦ããã¿ã¼ã²ããä¾åé¨ã¨ãã®ãã¼ã¸ã§ã³ 2370 ã»TOPPERSããã¸ã§ã¯ãããã®ãªãªã¼ã¹ã«å¯¾ããæ¹é ç®æï¼ããã°ï¼ 2371 2372 ã¿ã¼ã²ããã·ã¹ãã ã«é¢ããæ 2373 å ± 2374 ã»ã¿ã¼ã²ããããã»ããµã®ç¨®é¡ 2375 ã»ã¿ã¼ã²ãããã¼ãçã®ç¨®é¡ 2376 2377 ãã¹ãã«é¢ããæ 2378 å ± 2379 ã»OSã®ãã¼ã¸ã§ã³ï¼ãµã¼ãã¹ããã¯ã®é©ç¨ç¶æ³ãï¼ 2380 ã»ã³ã³ãã¤ã©ãªã©ã®éçºç°å¢ã®ãã¼ã¸ã§ã³ï¼Cygwinã®ãã¼ã¸ã§ã³ãï¼ 2381 2382 12.4 ã¦ã§ããµã¤ã 2383 2384 TOPPERSããã¸ã§ã¯ãã®ã¦ã§ããµã¤ãã¯ï¼ä»¥ä¸ã®URLã«ããï¼ 1993 またその際に,ASPカーネルを使用してのコメントやご意見もいただけると幸い 1994 である. 1995 1996 12.2 保証・適用性・サポート 1997 1998 ASPカーネルは無保証で提供されているものである.開発者およびTOPPERSプロ 1999 ジェクトは,ASPカーネルに関して,特定の使用目的に対する適合性も含めて, 2000 いかなる保証も行わない.また,ASPカーネルの利用により直接的または間接的 2001 に生じたいかなる損害に関しても,その責任を負わない. 2002 2003 開発者およびTOPPERSプロジェクトは,ASPカーネルに関するサポートの約束は 2004 していない.ASPカーネルに関して質問がある場合は,後述のTOPPERSユーザー 2005 ズメーリングリストを利用していただけると幸いである.確実なサポートが必 2006 要な場合には,有償でサポートサービスを提供している会社に相談されたい. 2007 2008 12.3 バグレポート 2009 2010 ASPカーネルにバグや問題点を発見された場合には,後述のTOPPERSユーザーズ 2011 メーリングリストに報告して欲しい. 2012 2013 メーリングリストにバグや問題点などを報告する場合には,必要に応じて次の 2014 情報を知らせて欲しい. 2015 2016 使用しているカーネルに関する情報 2017 ・ターゲット非依存部のバージョン 2018 ・使用しているターゲット依存部とそのバージョン 2019 ・TOPPERSプロジェクトからのリリースに対する改造箇所(あれば) 2020 2021 ターゲットシステムに関する情報 2022 ・ターゲットプロセッサの種類 2023 ・ターゲットボード等の種類 2024 2025 ホストに関する情報 2026 ・OSのバージョン(サービスパックの適用状況も) 2027 ・コンパイラなどの開発環境のバージョン(Cygwinのバージョンも) 2028 2029 12.4 ウェブサイト 2030 2031 TOPPERSプロジェクトのウェブサイトは,以下のURLにある. 2385 2032 2386 2033 http://www.toppers.jp/ 2387 2034 2388 TOPPERSããã¸ã§ã¯ããASPã«ã¼ãã«ã«é¢ããææ°æ 2389 å ±ã¯ï¼ãã®ã¦ã§ããµã¤ãã 2390 ãå¾ããã¨ãã§ããï¼ã¾ãï¼ASPã«ã¼ãã«ã®ææ°çã¯ï¼ãã®ã¦ã§ããµã¤ãããã 2391 ã¦ã³ãã¼ããããã¨ãã§ããï¼ 2392 2393 12.5 TOPPERSã¦ã¼ã¶ã¼ãºã¡ã¼ãªã³ã°ãªã¹ã 2394 2395 ASPã«ã¼ãã«ãå«ãTOPPERSããã¸ã§ã¯ãã®éçºææç©ã®ã¦ã¼ã¶ã«å¯¾ããæ 2396 å ±æ 2397 ä¾ããã³ã¦ã¼ã¶ç¸äºéã®æ 2398 å ±äº¤æã容æã«ããããã«ï¼TOPPERSã¦ã¼ã¶ã¼ãºã¡ã¼ 2399 ãªã³ã°ãªã¹ãï¼users@toppers.jpï¼ãç¨æãã¦ããï¼ 2400 2401 ãã®ã¡ã¼ãªã³ã°ãªã¹ãã«ã¯ï¼èª°ã§ãèªç±ã«ç»é²ãï¼ã¡ã¼ã«ãéä»ãããã¨ã㧠2402 ããï¼ç»é²è 2403 以å¤ã¯ã¡ã¼ã«ãéä»ã§ããªãï¼ï¼ã¾ãï¼éä»ãããã¡ã¼ã«ã¯ï¼èª° 2404 ã§ãèªç±ã«ã¦ã§ããµã¤ãã§èªããã¨ãã§ããï¼ 2405 2406 ã¡ã¼ãªã³ã°ãªã¹ãã¸ã®ç»é²æ¹æ³ã«ã¤ãã¦ã¯ï¼ä»¥ä¸ã®URLã®ãã¼ã¸ã«èª¬æãããï¼ 2035 TOPPERSプロジェクトやASPカーネルに関する最新情報は,このウェブサイトか 2036 ら得ることができる.また,ASPカーネルの最新版は,このウェブサイトからダ 2037 ウンロードすることができる. 2038 2039 12.5 TOPPERSユーザーズメーリングリスト 2040 2041 ASPカーネルを含むTOPPERSプロジェクトの開発成果物のユーザに対する情報提 2042 供およびユーザ相互間の情報交換を容易にするために,TOPPERSユーザーズメー 2043 リングリスト(users@toppers.jp)を用意している. 2044 2045 このメーリングリストには,誰でも自由に登録し,メールを送付することがで 2046 きる(登録者以外はメールを送付できない).また,送付されたメールは,誰 2047 でも自由にウェブサイトで読むことができる. 2048 2049 メーリングリストへの登録方法については,以下のURLのページに説明がある. 2407 2050 2408 2051 http://www.toppers.jp/community.html 2409 2052 2410 12.6 TOPPERSããã¸ã§ã¯ãã®ã¡ã³ãåãã®ãµã¼ãã¹ 2411 2412 TOPPERSããã¸ã§ã¯ãã®ã¡ã³ãã«å¯¾ãã¦ã¯ï¼ä¸è¨ã«å ãã¦ï¼ASPã«ã¼ãã«ã«é¢é£ 2413 ãã¦æ¬¡ã®ãµã¼ãã¹ãç¨æãã¦ããï¼ 2414 2415 (1) TOPPERSéçºè 2416 ã¡ã¼ãªã³ã°ãªã¹ã 2417 2418 TOPPERSããã¸ã§ã¯ãã®ã¡ã³ãã¯ï¼ASPã«ã¼ãã«ã«é¢ãã質åï¼ãã°ãåé¡ç¹ãª 2419 ã©ã®å ±åã«ï¼TOPPERSéçºè 2420 ã¡ã¼ãªã³ã°ãªã¹ãï¼dev@toppers.jpï¼ãå©ç¨ããã 2421 ã¨ãã§ããï¼ 2422 2423 (2) ASPã«ã¼ãã«ã®éçºæ¯æ´ãµã¤ã 2424 2425 ASPã«ã¼ãã«ã®éçºæ¯æ´ã®ããã®TRACï¼ãã°ãã©ããã³ã°ã·ã¹ãã ï¼ãï¼ä»¥ä¸ã® 2426 URLã«ããï¼TRACã¸ã®ã¢ã¯ã»ã¹ã«ã¯ï¼ä¼å¡ãã¹ã¯ã¼ããå¿ 2427 è¦ã§ããï¼ï¼ 2053 12.6 TOPPERSプロジェクトのメンバ向けのサービス 2054 2055 TOPPERSプロジェクトのメンバに対しては,上記に加えて,ASPカーネルに関連 2056 して次のサービスを用意している. 2057 2058 (1) TOPPERS開発者メーリングリスト 2059 2060 TOPPERSプロジェクトのメンバは,ASPカーネルに関する質問,バグや問題点な 2061 どの報告に,TOPPERS開発者メーリングリスト(dev@toppers.jp)を利用するこ 2062 とができる. 2063 2064 (2) ASPカーネルの開発支援サイト 2065 2066 ASPカーネルの開発支援のためのTRAC(バグトラッキングシステム)が,以下の 2067 URLにある(TRACへのアクセスには,会員パスワードが必要である). 2428 2068 2429 2069 http://dev.toppers.jp/trac/asp/ 2430 2070 2431 TOPPERS ããã¸ã§ã¯ãã®ã¡ã³ãã¯ï¼ãã®ãµã¤ãããï¼ã¦ã§ãã¤ã³ã¿ãã§ã¼ã¹ãã2432 ã³subversionãµã¼ãã«ããï¼ASPã«ã¼ãã«ã®éçºä¸ã®ãã¼ã¸ã§ã³ãå¾ããã¨ã㧠2433 ããï¼ã¾ãï¼ãã°ãã©ããã³ã°ãã¼ã¿ãã¼ã¹ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãï¼éå» 2434 ã®ãã°å±¥æ´ã¸ã®ã¢ã¯ã»ã¹ãï¼ãã°ã®ç»é²ããããã¨ãã§ããï¼ 2435 2436 12.7 TOPPERS ããã¸ã§ã¯ãã¸ã®åå2437 2438 TOPPERS ããã¸ã§ã¯ãã§ã¯ï¼ä½ããã®å½¢ã§ããã¸ã§ã¯ãã«è²¢ç®ãã¦ããã ããæ¹ï¼2439 ããã¸ã§ã¯ãã§éçºããã½ããã¦ã§ã¢ãã使ãã®æ¹ï¼ããã¸ã§ã¯ãã«èå³ãã 2440 æã¡ã®æ¹ã®åå ãæ±ãã¦ããï¼TOPPERSããã¸ã§ã¯ãã¸ã®åå æ¹æ³ã«ã¤ãã¦ã¯ï¼ 2441 以ä¸ã®ãã¼ã¸ã«èª¬æãããï¼ 2071 TOPPERSプロジェクトのメンバは,このサイトから,ウェブインタフェースおよ 2072 びsubversionサーバにより,ASPカーネルの開発中のバージョンを得ることがで 2073 きる.また,バグトラッキングデータベースにアクセスすることができ,過去 2074 のバグ履歴へのアクセスや,バグの登録をすることができる. 2075 2076 12.7 TOPPERSプロジェクトへの参加 2077 2078 TOPPERSプロジェクトでは,何からの形でプロジェクトに貢献していただける方, 2079 プロジェクトで開発したソフトウェアをお使いの方,プロジェクトに興味をお 2080 持ちの方の参加を求めている.TOPPERSプロジェクトへの参加方法については, 2081 以下のページに説明がある. 2442 2082 2443 2083 http://www.toppers.jp/joinus.html 2444 2084 2445 2085 2446 ï¼ï¼ï¼ãªãã¡ã¬ã³ã¹ 2447 2448 13.1 ãµã¼ãã¹ã³ã¼ã«ä¸è¦§2449 2450 (1) ã¿ã¹ã¯ç®¡çæ©è½2086 13.リファレンス 2087 2088 13.1 サービスコール一覧 2089 2090 (1) タスク管理機能 2451 2091 2452 2092 ER ercd = act_tsk(ID tskid) … … 2460 2100 ER ercd = ref_tsk(ID tskid, T_RTSK *pk_rtsk) 2461 2101 2462 (2) ã¿ã¹ã¯ä»å±åææ©è½2102 (2) タスク付属同期機能 2463 2103 2464 2104 ER ercd = slp_tsk(void) … … 2473 2113 ER ercd = dly_tsk(RELTIM dlytim) 2474 2114 2475 (3) ã¿ã¹ã¯ä¾å¤å¦çæ©è½2115 (3) タスク例外処理機能 2476 2116 2477 2117 ER ercd = ras_tex(ID tskid, TEXPTN rasptn) … … 2482 2122 ER ercd = ref_tex(ID tskid, T_RTEX *pk_rtex) 2483 2123 2484 (4) åæã»éä¿¡æ©è½2124 (4) 同期・通信機能 2485 2125 2486 2126 ER ercd = sig_sem(ID semid) … … 2533 2173 ER ercd = ref_mbx(ID mbxid, T_RMBX *pk_rmbx) 2534 2174 2535 (5) ã¡ã¢ãªãã¼ã«ç®¡çæ©è½2175 (5) メモリプール管理機能 2536 2176 2537 2177 ER ercd = get_mpf(ID mpfid, void **p_blk) … … 2542 2182 ER ercd = ref_mpf(ID mpfid, T_RMPF *pk_rmpf) 2543 2183 2544 (6) æé管çæ©è½2184 (6) 時間管理機能 2545 2185 2546 2186 ER ercd = get_tim(SYSTIM *p_systim) … … 2557 2197 ER ercd = ref_alm(ID almid, T_RALM *pk_ralm) 2558 2198 2559 (7) ã·ã¹ãã ç¶æ 2560 管çæ©è½ 2199 (7) システム状態管理機能 2561 2200 2562 2201 ER ercd = rot_rdq(PRI tskpri) … … 2577 2216 ER ercd = ext_ker(void) 2578 2217 2579 (8) å²è¾¼ã¿ç®¡çæ©è½2218 (8) 割込み管理機能 2580 2219 2581 2220 ER ercd = dis_int(INTNO intno) … … 2584 2223 ER ercd = get_ipm(PRI *p_intpri) 2585 2224 2586 (9) CPU ä¾å¤ç®¡çæ©è½2225 (9) CPU例外管理機能 2587 2226 2588 2227 bool_t stat = xsns_dpn(void *p_excinf) 2589 2228 bool_t stat = xsns_xpn(void *p_excinf) 2590 2229 2591 13.2 éçAPIä¸è¦§2592 2593 (1) ã¿ã¹ã¯ç®¡çæ©è½2230 13.2 静的API一覧 2231 2232 (1) タスク管理機能 2594 2233 2595 2234 CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task, 2596 2235 PRI itskpri, SIZE stksz, STK_T *stk }) 2597 2236 2598 (3) ã¿ã¹ã¯ä¾å¤å¦çæ©è½2237 (3) タスク例外処理機能 2599 2238 2600 2239 DEF_TEX(ID tskid, { ATR texatr, TEXRTN texrtn }) 2601 2240 2602 (4) åæã»éä¿¡æ©è½2241 (4) 同期・通信機能 2603 2242 2604 2243 CRE_SEM(ID semid, { ATR sematr, uint_t isemcnt, uint_t maxsem }) … … 2608 2247 CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, void *mprihd }) 2609 2248 2610 (5) ã¡ã¢ãªãã¼ã«ç®¡çæ©è½2249 (5) メモリプール管理機能 2611 2250 2612 2251 CRE_MPF(ID mpfid, { ATR mpfatr, uint_t blkcnt, uint_t blksz, 2613 2252 MPF_T *mpf, void *mpfmb }) 2614 2253 2615 (6) æé管çæ©è½2254 (6) 時間管理機能 2616 2255 2617 2256 CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr, … … 2619 2258 CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr }) 2620 2259 2621 (8) å²è¾¼ã¿ç®¡çæ©è½2260 (8) 割込み管理機能 2622 2261 2623 2262 CFG_INT(INTNO intno, { ATR intatr, PRI intpri }) … … 2625 2264 DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr }) 2626 2265 2627 (9) CPU ä¾å¤ç®¡çæ©è½2266 (9) CPU例外管理機能 2628 2267 2629 2268 DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr }) 2630 2269 2631 (10) ã·ã¹ãã æ§æ管çæ©è½2270 (10) システム構成管理機能 2632 2271 2633 2272 DEF_ICS({ SIZE istksz, STK_T *istk }) … … 2635 2274 ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn }) 2636 2275 2637 13.3 ãã¼ã¸ã§ã³å±¥æ´ 2638 2639 2006å¹´10æ29æ¥ Release 1.A.0 æåã®ãªãªã¼ã¹ 2640 2007å¹´2æ20æ¥ Release 1.A.1 2641 2007å¹´2æ20æ¥ Release 1.A.2 2642 2007å¹´7æ12æ¥ Release 1.B.0 ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãæ°ãã¼ã¸ã§ã³ã« 2643 2007å¹´7æ12æ¥ Release 1.B.1 ã©ã¤ã»ã³ã¹æ¡ä»¶ã®å 2644 ¥ãæã 2645 2007å¹´7æ16æ¥ Release 1.B.2 2646 2007å¹´7æ21æ¥ Release 1.B.3 ãã£ã¬ã¯ããªæ§æã®å¤æ´ 2647 2007å¹´8æ20æ¥ Release 1.B.4 æ¡å¼µããã±ã¼ã¸ã®è¿½å 2648 2007å¹´10æ16æ¥ Release 1.B.5 2649 2007å¹´11æ15æ¥ Release 1.0.0 æ£å¼çã®ãªãªã¼ã¹ 2650 2007å¹´12æ23æ¥ Release 1.1.0 2651 2008å¹´3æ19æ¥ Release 1.2.0 2652 2008å¹´3æ21æ¥ Release 1.2.1 2653 2008å¹´4æ12æ¥ Release 1.3.0 ä¸è¬å 2654 ¬éã«åãã¦ã®æçµä¿®æ£ 2655 2008å¹´5æ13æ¥ Release 1.3.1 æåã®ä¸è¬å 2656 ¬éç 2657 2008å¹´8æ21æ¥ Release 1.3.2 2658 2009å¹´5æ11æ¥ Release 1.4.0 2659 2010å¹´6æ28æ¥ Release 1.5.0 æ¡å¼µããã±ã¼ã¸ãä¸è¬å 2660 ¬é 2661 2010å¹´8æ1æ¥ Release 1.6.0 cfg-1.6ã«å¯¾å¿ 2662 2011å¹´5æ8æ¥ Release 1.7.0 åççææ©è½æ¡å¼µããã±ã¼ã¸çã®è¿½å 2663 2012å¹´12æ26æ¥ Release 1.8.0 2664 2014å¹´1æ6æ¥ Release 1.9.0 ã¡ãã»ã¼ã¸ãããã¡æ©è½æ¡å¼µã®è¿½å 2665 2014å¹´11æ17æ¥ Release 1.9.1 2666 2015å¹´5æ30æ¥ Release 1.9.2 2667 2017å¹´4æ29æ¥ Release 1.9.3 2668 2669 ä»¥ä¸ 2276 13.3 バージョン履歴 2277 2278 2006年10月29日 Release 1.A.0 最初のリリース 2279 2007年2月20日 Release 1.A.1 2280 2007年2月20日 Release 1.A.2 2281 2007年7月12日 Release 1.B.0 コンフィギュレータを新バージョンに 2282 2007年7月12日 Release 1.B.1 ライセンス条件の入れ換え 2283 2007年7月16日 Release 1.B.2 2284 2007年7月21日 Release 1.B.3 ディレクトリ構成の変更 2285 2007年8月20日 Release 1.B.4 拡張パッケージの追加 2286 2007年10月16日 Release 1.B.5 2287 2007年11月15日 Release 1.0.0 正式版のリリース 2288 2007年12月23日 Release 1.1.0 2289 2008年3月19日 Release 1.2.0 2290 2008年3月21日 Release 1.2.1 2291 2008年4月12日 Release 1.3.0 一般公開に向けての最終修正 2292 2008年5月13日 Release 1.3.1 最初の一般公開版 2293 2008年8月21日 Release 1.3.2 2294 2009年5月11日 Release 1.4.0 2295 2010年6月28日 Release 1.5.0 拡張パッケージを一般公開 2296 2010年8月1日 Release 1.6.0 cfg-1.6に対応 2297 2011年5月8日 Release 1.7.0 動的生成機能拡張パッケージ等の追加 2298 2012年12月26日 Release 1.8.0 2299 2014年1月6日 Release 1.9.0 メッセージバッファ機能拡張の追加 2300 2014年11月17日 Release 1.9.1 2301 2015年5月30日 Release 1.9.2 2302 2017年4月29日 Release 1.9.3 2303 2304 以上 -
Property svn:mime-type
changed from
-
rubycfg_asp/trunk/asp_dcre/doc/version.txt
-
Property svn:mime-type
changed from
text/plain
totext/plane; charset=UTF-8
r313 r315 1 1 2 TOPPERS/ASP ã«ã¼ãã«3 å¤æ´å±¥æ´4 5 対å¿ãã¼ã¸ã§ã³: Release 1.9.36 æçµæ´æ°: 2017å¹´4æ29æ¥7 8 ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/ASPã«ã¼ãã«ã®Release 1.0.0以éã®å¤æ´å±¥æ´ãï¼ 9 æ°ããæ¹ããé ã«è¨è¿°ãããã®ã§ããï¼ 2 TOPPERS/ASPカーネル 3 変更履歴 4 5 対応バージョン: Release 1.9.3 6 最終更新: 2017年4月29日 7 8 このドキュメントは,TOPPERS/ASPカーネルのRelease 1.0.0以降の変更履歴を, 9 新しい方から順に記述したものである. 10 10 11 11 ---------------------------------------------------------------------- … … 17 17 Graduate School of Information Science, Nagoya Univ., JAPAN 18 18 19 ä¸è¨èä½æ¨©è 20 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 21 ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 22 å¤ã»åé 23 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 24 (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 25 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 26 ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 27 (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 28 ç¨ã§ããå½¢ã§åé 29 å¸ããå ´åã«ã¯ï¼åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 31 è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 33 ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 35 ç¨ã§ããªãå½¢ã§åé 36 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 37 ã¨ï¼ 38 (a) åé 39 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 40 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 41 ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 42 (b) åé 43 å¸ã®å½¢æ 44 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 45 å ±åãããã¨ï¼ 46 (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 47 害ãããï¼ä¸è¨èä½æ¨©è 48 ããã³TOPPERSããã¸ã§ã¯ããå 49 責ãããã¨ï¼ 50 ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 51 ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 52 ããã³TOPPERSããã¸ã§ã¯ãã 53 å 54 責ãããã¨ï¼ 19 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 20 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 21 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 23 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 24 スコード中に含まれていること. 25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 26 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 27 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 28 の無保証規定を掲載すること. 29 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 30 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 31 と. 32 (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 33 作権表示,この利用条件および下記の無保証規定を掲載すること. 34 (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 35 報告すること. 36 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 37 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 38 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 39 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 40 免責すること. 55 41 56 æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 57 ã 58 ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 59 ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 60 ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 61 ã®è²¬ä»»ãè² ããªãï¼ 42 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 43 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 44 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 45 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 46 の責任を負わない. 62 47 63 48 $Id$ 64 49 ---------------------------------------------------------------------- 65 50 66 TOPPERS/ASPã«ã¼ãã« 67 Release 1.9.2 ãã 1.9.3 ã¸ã®å¤æ´ç¹ 68 69 âå¤æ´ç¹ã®ãªã¹ã 70 71 ã»åççææ©è½æ¡å¼µããã±ã¼ã¸ã®ãã°ãã£ãã¯ã¹ 72 - acre_tskã§ï¼åªå 73 度ã®é«ãã¿ã¹ã¯ãçæã»èµ·åãã¦ããã£ã¹ããããèµ· 74 ãããªãä¸å 75 ·åãä¿®æ£ï¼ 76 - fsnd_dtqã¨ifsnd_dtqã§ï¼ã¨ã©ã¼ã³ã¼ãã«E_OKãä¸æ¸ããã¦ããä¸å 77 ·å 78 ãä¿®æ£ï¼ 79 - acre_tskã§ï¼p_tinib->stkszã«æ ¼ç´ããå¤ï¼stkszï¼ã丸ããå¤ã¨ãã 80 ããã«ä¿®æ£ï¼ 81 82 ã»ãã®ä»ã®ä¿®æ£ 83 - syslog_ref_logã®åºå£ã®ãã°åºåãã¯ãï¼LOG_SYSLOG_REF_LOG_LEAVEï¼ 84 ã®ãã©ã¡ã¼ã¿ã«ã¨ã©ã¼ã³ã¼ãã追å ï¼ 85 - extension/dcre/kernel/kernel.tfã§ï¼ISRã«æ¸¡ãæ¡å¼µæ 86 å ±ãintptr_tå 87 ã¸ã®ãã£ã¹ãããããã«ä¿®æ£ï¼ 88 - sample/Makefileä¸ã®ã³ã³ãã¤ã©ã«å¯¾ãã-Tãªãã·ã§ã³ãï¼-Wl,-Tãªã 89 ã·ã§ã³ã«å¤æ´ï¼ 90 - utils/genoffset.tfã«ï¼SIL_ENDIAN_BIT/LITTLEã®èª¤å®ç¾©ã®æ¤åºå¦çã 91 追å ï¼ 92 - ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®ä¿®æ£ï¼ 93 - ãã³ãã¬ã¼ããã¡ã¤ã«ã®è¨è¿°ã¹ã¿ã¤ã«ã®ä¿®æ£ï¼ 94 - æ¡å¼µããã±ã¼ã¸ãï¼kernel.tfä¸ã§ï¼ã¹ã¿ãã¯é åã®ç¢ºä¿ã«ALLOC_STACK 95 ã使ãããã«ä¿®æ£ï¼éå»ã®ä¿®æ£æã®æ¡å¼µããã±ã¼ã¸ã®ä¿®æ£æ¼ãï¼ï¼ 96 - TLSFã®init_memory_poolãè¿ãã¨ã©ã¼å¤ã®ãã§ãã¯æ¹æ³ãä¿®æ£ãMac OS 97 Xã¿ã¼ã²ããä¾åé¨ãï¼ 98 99 ã»ããã¥ã¡ã³ãã®ä¿®æ£ï¼ã³ã¡ã³ãã®ä¿®æ£ 100 101 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 102 - ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 103 104 ---------------------------------------------------------------------- 105 106 TOPPERS/ASPã«ã¼ãã« 107 Release 1.9.1 ãã 1.9.2 ã¸ã®å¤æ´ç¹ 108 109 âå¤æ´ç¹ã®ãªã¹ã 110 111 ã»åççææ©è½æ¡å¼µã®ãã°ãã£ãã¯ã¹ 112 - acre_cycã§ï¼å¨æãã³ãã©ãéå§ããå¦çã®ãã°ãä¿®æ£ï¼ 113 114 ã»ãã®ä»ã®ãã°ãã£ãã¯ã¹ 115 - test_cpuexc10.cã®ãã§ãã¯å¤ã®èª¤ãã®ä¿®æ£ï¼ 116 117 ã»ããã¥ã¡ã³ãã®ä¿®æ£ï¼ 118 119 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 120 - ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 121 122 ---------------------------------------------------------------------- 123 124 TOPPERS/ASPã«ã¼ãã« 125 Release 1.9.0 ãã 1.9.1 ã¸ã®å¤æ´ç¹ 126 127 âå¤æ´ç¹ã®ãªã¹ã 128 129 ã»ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µã®ä»æ§å¤æ´ 130 - èªã¿ã¹ã¯ãããã¯ãã¦ãããã¥ã¼ããã¯ã¹ãå度ããã¯ãããã¨ããå ´ 131 åã¨ï¼èªã¿ã¹ã¯ãããã¯ãã¦ããªããã¥ã¼ããã¯ã¹ãããã¯è§£é¤ããã 132 ã¨ããå ´åã®ã¨ã©ã¼ã³ã¼ããE_OBJã«å¤æ´ï¼ 133 134 ã»ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µã®ãã°ãã£ãã¯ã¹ 135 - ã¿ã¹ã¯çµäºæã®ãã¥ã¼ããã¯ã¹ã®è§£æ¾é åºãéé ã«ï¼ 136 137 ã»åççææ©è½æ¡å¼µã®ãã°ãã£ãã¯ã¹ 138 - ãªãã¸ã§ã¯ãæªç»é²ã¨ã©ã¼ã®ãã§ãã¯ã®æãããã³ãã°ãä¿®æ£ï¼ 139 - ãªãã¸ã§ã¯ãæªç»é²ã®å ´åã®ä»ã®ã¨ã©ã¼ã®ãã§ãã¯å ´æã®ä¿®æ£ï¼ 140 141 ã»ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã®ãã°ãã£ãã¯ã¹ 142 - ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ã®èµ·åã¨ï¼ãªã¼ãã©ã³ã¿ã¤ãã®ååä½ 143 éå§ï¼åæ¢ã¨ã®ç«¶åã®åé¡ãä¿®æ£ï¼ 144 145 ã»ãã¹ãããã°ã©ã é¢ä¿ã®ä¿®æ£ 146 147 ã»ãã®ä»ã®ä¿®æ£ 148 - xsns_dpnã¨xsns_xpnã§ï¼kerflgããã§ãã¯ããããã«ä¿®æ£ï¼å®å 149 ¨æ§ã®å 150 ä¸ã®ããã®ä¿®æ£ï¼ï¼ 151 - kernel.tfä¸ã§ï¼ã¹ã¿ãã¯é åã®ç¢ºä¿ã«ALLOC_STACKã使ãããã«ä¿®æ£ï¼ 152 153 ã»ããã¥ã¡ã³ãã®å 154 155 å®ï¼ã³ã¡ã³ãã®ä¿®æ£ 156 157 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 158 - ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 159 160 ---------------------------------------------------------------------- 161 162 TOPPERS/ASPã«ã¼ãã« 163 Release 1.8.0 ãã 1.9.0 ã¸ã®å¤æ´ç¹ 164 165 âå¤æ´ç¹ã®ãªã¹ã 166 167 ã»ã¡ãã»ã¼ã¸ãããã¡æ©è½æ¡å¼µããã±ã¼ã¸ã®è¿½å 168 169 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹3ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã«ï¼ã¿ã¼ã²ããä¾åé¨ã§ 170 ãè¨å®ããã»ã¯ã·ã§ã³ãï¼LMAããVMAã«ã³ãã¼ããå¦çã追å 171 172 ã»ãµã³ãã«ã®Makefileã®ä¿®æ£ 173 - Cè¨èªã®æã«-lcãä»ããããã«ä¿®æ£ï¼ 174 - CFG_OBJSãï¼CFG_ASMOBJSã¨CFG_COBJSã«åé¢ï¼ 175 176 ã»å 177 é çªå°ã®ãã§ãã¯ã³ã¼ãã®ä¿®æ£ 178 - å 179 é çªå°ã®ãµã¤ãºãåºå®å¤ã«ãªã£ã¦ããã¨ãããï¼sizeof_FPã«ä¿®æ£ï¼ 180 - ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã«ããã¦ï¼ãªã¼ãã©ã³ãã³ãã©ã®å 181 é çªå° 182 ã®ãã§ãã¯ã追å ï¼ 183 184 ã»éçAPIã«ãããã¨ã©ã¼ãã§ãã¯ã®è¿½å 185 - 符å·ç¡ãã®ãã©ã¡ã¼ã¿ã«è² ã®å¤ãæå®ããå ´åã®ã¨ã©ã¼ãã§ãã¯ã追å ï¼ 186 - ã¤ãã³ããã©ã°ã®åæããããã¿ã¼ã³ã®ã¨ã©ã¼ãã§ãã¯ã追å ï¼ 187 188 ã»ãã¹ãããã°ã©ã é¢ä¿ã®ä¿®æ£ 189 - ãã¹ãã©ã¤ãã©ãªã«ï¼test_startã追å ï¼ 190 - ãã¹ãããã°ã©ã ã®å 191 é ã§ï¼ããã°ã©ã åã表示ããããã«ä¿®æ£ï¼ 192 - gentestãæ¡å¼µï¼ 193 194 ã»åççææ©è½æ¡å¼µã®ãã°ãã£ãã¯ã¹ 195 - ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãºã®ãã§ãã¯ã³ã¼ããä¿®æ£ï¼ 196 - DEF_KMMã®kmmszã0以ä¸ã®å ´åã®ã¨ã©ã¼ãã§ãã¯ã追å ï¼ 197 - ã«ã¼ãã«å 198 é¨ã·ã³ãã«ã®ãªãã¼ã 表ãä¿®æ£ï¼ 199 200 ã»ãã®ä»ã®ãã°ãã£ãã¯ã¹ 201 - kernel_def.csvã«TARGET_MIN_ISTKSZã追å ï¼ 202 - ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã§ï¼ãªã¼ãã©ã³ãã³ãã©ããµãã¼ããã¦ã 203 ãªãã¿ã¼ã²ããã§DEF_OVRã使ç¨ããå ´åã«ã¯ï¼ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã§ã¨ 204 ã©ã¼ã¨ããããã«ä¿®æ£ï¼ 205 206 ã»ãã®ä»ã®ä¿®æ£ 207 - reqdspãdspreqã«ï¼p_reqdspãp_dspreqã«ãªãã¼ã ï¼ 208 - ã¹ã¿ãã¯é åã¨åºå®é·ã¡ã¢ãªãã¼ã«é åã®å 209 é çªå°ãã¦ã¼ã¶ãæå®ãã 210 å ´åã«ã¯ï¼kernel_cfg.cä¸ã§(void *)åã«ãã£ã¹ãããããã«ä¿®æ£ï¼å 211 ççææ©è½æ¡å¼µã®ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®å 212 é çªå°ãåæ§ï¼ 213 - TNUM_PORTã5以ä¸ã®æã¯ï¼serial.cã§ã¨ã©ã¼ãå ±åããï¼ 214 - makedepã¨makereleaseãæ¹åï¼ 215 216 ã»ããã¥ã¡ã³ãã®å 217 218 å®ï¼ã³ã¡ã³ãã®ä¿®æ£ 219 - ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«ã1.6 Cygwinç°å¢ã«ããã注æäºé 220 ãã追å ï¼ 221 - ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«ã11.8 rodataã»ã¯ã·ã§ã³ãRAMã«ç½®ãå ´åãã 222 追å ï¼ 223 224 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 225 - ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 226 227 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.8.0 â 1.9.0ï¼ 228 229 (1) CFG_OBJSãCFG_COBJSã«ãªãã¼ã 230 - Makefileã®ã¿ã¼ã²ããä¾åé¨ã§CFG_OBJSãå®ç¾©ãã¦ããå ´åã«ã¯ï¼ 231 CFG_COBJSã«ãªãã¼ã ããï¼ 232 233 ---------------------------------------------------------------------- 234 235 TOPPERS/ASPã«ã¼ãã« 236 Release 1.7.0 ãã 1.8.0 ã¸ã®å¤æ´ç¹ 237 238 âå¤æ´ç¹ã®ãªã¹ã 239 240 ã»char_tåã®å»æ¢ 241 242 ã»SILã®ã¡ã¢ãªç©ºéèªåºãé¢æ°ã«æ¸¡ããã¤ã³ã¿ã®å±æ§ã®å¤æ´ 243 - sil_r??_???ã«æ¸¡ããã¤ã³ã¿ã«ï¼constå±æ§ã追å ï¼ 244 245 ã»éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®ãµã¤ãºãã§ãã¯ã®è¿½å 246 - DEF_ICSã®istkszãã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_ISTKSZï¼ãã 247 ãå°ããå ´åã«E_PARã¨ã©ã¼ã¨ããå¦çã追å ï¼ 248 249 ã»vasyslog.cãlibraryãã£ã¬ã¯ããªã«ç§»å 250 251 ã»MISRA-C対å¿ã®ããã®ã³ã¼ãã®ä¿®æ£ 252 - æããã¯ãå®ç¾©ãã¦ããç®æãdo{}while(false)ã§å²ãï¼ 253 - ã³ã³ãæ¼ç®åã«ä½¿ç¨ãæå°éã«ï¼ 254 - å¤é代å 255 ¥æããããï¼ 256 - 符å·ç¡ãæ´æ°å®æ°ã«Uãã¤ããï¼ 257 - æ¨æºçãªååãå¤æ°åã¨ãã¦ä½¿ããªãããã«ä¿®æ£ï¼ 258 - è¿å¤ã使ããªãé¢æ°å¼åºãã(void)ã«ãã£ã¹ãããï¼ 259 260 ã»ãã®ä»ã®ãã°ãã£ãã¯ã¹ 261 - ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µã§ï¼ref_tskãTTW_MTXãè¿ãå¦çã追å ï¼ 262 - åççææ©è½æ¡å¼µã§ï¼acre_isrã®ã¨ã©ã¼ã³ã¼ããä¿®æ£ï¼ 263 - åççææ©è½æ¡å¼µã§ï¼ãªãã¸ã§ã¯ãã³ã³ããã¼ã«ãããã¯ããªãæã« 264 acre_yyyãå¼ãã å ´åã®åé¡ãä¿®æ£ï¼ 265 - kernel_check.tfã§ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®åºåå¦çãä¿®æ£ï¼ 266 - æ¡å¼µã¢ã¸ã¥ã¼ã«ã®è¿½å¾ãã¹ã®ä¿®æ£ï¼ 267 - TOPPERS_SUPPORT_OVRTIMãTOPPERS_SUPPORT_OVRHDRã«ä¿®æ£ï¼ 268 269 ã»ãµã³ãã«ã®Makefileã®ä¿®æ£ 270 - ã«ã¼ãã«ã©ã¤ãã©ãªãå¥ãã£ã¬ã¯ããªã§ä½æããæã«ï¼ã«ã¼ãã«ã©ã¤ã 271 ã©ãªãæ´æ°ããããï¼ãªãã¸ã§ã¯ããã¡ã¤ã«ãåæ§ç¯ããããã«ä¿®æ£ï¼ 272 - CFG2_OUTãCFG2_OUT_SRCSã«ãªãã¼ã ï¼ 273 - LDFLAGSã¯ï¼cfg1_out.cã®ãªã³ã¯æã«ã¯é©ç¨ãããªãããã«ä¿®æ£ï¼ 274 - log_output.oï¼vasyslog.oï¼t_perror.oï¼strerror.oãï¼SYS_COBJSãã 275 APPL_COBJSã«ç§»åï¼ 276 277 ã»ãã®ä»ã®ä¿®æ£ 278 - semaphore.hçããwait.hãã¤ã³ã¯ã«ã¼ãããããã«ä¿®æ£ï¼ 279 - TOPPERS_EMPTY_LABELã®ããã©ã«ãã®å®ç¾©ãkernel_int.hã«ç§»åï¼ 280 - __STDC_VERSION__ãå®ç¾©ããã¦ããªãå ´åã«å¯¾å¿ï¼ 281 - test_lib.hã«å¤éã¤ã³ã¯ã«ã¼ãã®é²æ¢ã³ã¼ãã追å ï¼ 282 - ã¦ã¼ãã£ãªãã£ããã°ã©ã ãæ°ããperlã«å¯¾å¿ããããã«ä¿®æ£ï¼ 283 - gentestãæ¡å¼µï¼CPUä¾å¤ãã³ãã©ã®çæï¼GOTOã«å¯¾å¿ãªã©ï¼ï¼ 284 - configureã«ãªãã·ã§ã³ã追å ï¼ 285 - test_tex1ã«ãã¹ãã±ã¼ã¹1件ã追å ï¼ 286 287 ã»ããã¥ã¡ã³ãã®å 288 289 å®ï¼ã³ã¡ã³ãã®ä¿®æ£ 290 291 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 292 - ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 293 294 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.7.0 â 1.8.0ï¼ 295 296 (1) char_tåãcharåã«ä¿®æ£ 297 298 (2) TARGET_MIN_ISTKSZã®å®ç¾©ã追å ï¼ãªãã·ã§ã³ï¼ 299 - éã¿ã¹ã¯ã³ã³ããã¹ãã®ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ããã§ãã¯ããå ´åã« 300 ã¯ï¼æå°å¤ãTARGET_MIN_ISTKSZã«å®ç¾©ããï¼ 301 302 (3) CFG2_OUTãCFG2_OUT_SRCSã«ãªãã¼ã 303 - Makefileã®ã¿ã¼ã²ããä¾åé¨ã§CFG2_OUTãå®ç¾©ãã¦ããå ´åã«ã¯ï¼ 304 CFG2_OUT_SRCSã«ãªãã¼ã ããï¼ 305 306 (4) CFG1_OUT_LDFLAGSã®å®ç¾© 307 - Makefileã®ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããLDFLAGSã¯ï¼cfg1_out.cããªã³ã¯ 308 ããéã«ã¯é©ç¨ãããªãããã«å¤æ´ããããï¼LDFLAGSã«å®ç¾©ãããªãã·ã§ 309 ã³ã§ï¼cfg1_out.cããªã³ã¯ããéã«ãå¿ 310 è¦ãªãã®ã¯ï¼CFG1_OUT_LDFLAGS 311 ã«ãå®ç¾©ããããã«ä¿®æ£ããï¼ 312 313 ---------------------------------------------------------------------- 314 315 TOPPERS/ASPã«ã¼ãã« 316 Release 1.6.0 ãã 1.7.0 ã¸ã®å¤æ´ç¹ 317 318 âå¤æ´ç¹ã®ãªã¹ã 319 320 ã»åççææ©è½æ¡å¼µããã±ã¼ã¸ï¼å¶ç´ã¿ã¹ã¯æ¡å¼µããã±ã¼ã¸ã®è¿½å 321 322 ã»ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡éå§æ¡ä»¶ã®å¤æ´ 323 - ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å®è¡ã«é¢ããã³ã¼ãã®ä¿®æ£ï¼ 324 - ipmflgãå°å 325 ¥ï¼ 326 - exc_sense_unlockãå»æ¢ï¼ 327 328 ã»ãã¼ã¿ãã¥ã¼ã®ã³ã¼ãã®ä¿®æ£ 329 - ãã¼ã¿ç®¡çãããã¯ã®å°å 330 ¥ï¼ä»ã®ãªãã¸ã§ã¯ãã®å®è£ 331 ã¨æ´åãããï¼ï¼ 332 333 ã»SILã®ã¡ã¢ãªç©ºéã¢ã¯ã»ã¹é¢æ°ã«æ¸¡ããã¤ã³ã¿ã®åã®å¤æ´ 334 - void *ã渡ãã¦ããã¨ãããï¼ãµã¤ãºã«ãããã¦ï¼uint8_t *ãªã©ã«å¤æ´ï¼ 335 336 ã»åççææ©è½æ¡å¼µããã±ã¼ã¸ã«ããããä¿®æ£ 337 - t_stddef.hã«MB_Tåã®å®ç¾©ã追å ï¼ 338 - ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã³ãã¬ã¼ããã¡ã¤ã«ï¼ãã¹2ããã³3ï¼ã§å®ç¾©ã 339 ã¦ããã¿ã¼ã²ããä¾åæ 340 å ±ãï¼ããããã¡ã¤ã«ã«ç§»åï¼ 341 - kernel_def.csvã«ï¼ãããã®å¤ãåå¾ããããã®è¨è¿°ã追å ï¼ 342 - ãã¼ãã£ã³ã°ã¬ã¤ãã®ä¿®æ£ï¼ 343 344 ã»ãªãã»ãããã¡ã¤ã«ãã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã§çæããæ¹æ³ã追å 345 - genoffset.tfã追å ï¼ 346 - kernel_def.csvã«ï¼SIL_ENDIAN_BIG/LITTLEã追å ï¼ 347 - sample/Makefileãä¿®æ£ï¼ 348 - m68kä¾åé¨ãï¼ãã®æ¹æ³ã«å¯¾å¿ãããï¼ 349 - ãã¼ãã£ã³ã°ã¬ã¤ãã®ä¿®æ£ï¼ 350 351 ã»ãã®ä»ã®ãã°ãã£ãã¯ã¹ 352 - CHECK_INTPRI_CHGIPMã®å®ç¾©ä¸ã®typoãä¿®æ£ï¼ 353 - genoffsetã®Release 1.6.0ã«ããããã£ã°ã¬ã¼ããä¿®æ£ï¼ 354 - ãªã¼ãã©ã³ãã³ãã©æ¡å¼µæ©è½ã§ï¼ã¿ã¼ã²ããä¾åé¨ããªã¼ãã©ã³ãã³ã 355 ã©ããµãã¼ããã¦ããªãå ´åã«ã¯ï¼TCBä¸ã®leftotmãå®ç¾©ããªãããã« 356 ä¿®æ£ï¼ 357 358 ã»ãã®ä»ã®ä¿®æ£ 359 - USE_TSKINICTXBããã¯ãå®ç¾©ããå ´åã®ã¹ã¿ãã¯é åã®å 360 é çªå°ã®ãã§ã 361 ã¯ã®ããã«ï¼GET_STK_TSKINICTXBãå°å 362 ¥ï¼ 363 - kernel_cfg.cä¸ã§ï¼ã¿ã¹ã¯ã®å 364 é çªå°ãTASKåã«ãã£ã¹ãããããã« 365 kernel.tfãä¿®æ£ï¼ 366 - ext_tskã®E_SYSã®è¿ãæ¹ãä¿®æ£ï¼ext_kerãE_SYSãè¿ãã³ã¼ãã«ä¿®æ£ï¼ 367 - CFG_INTã¯ï¼æå¹ãªãã¹ã¦ã®å²è¾¼ã¿çªå·ã«å¯¾å¿ããæ¹éã«å¾ãï¼ã³ã³ã㣠368 ã®ã¥ã¬ã¼ã¿ã®ã¨ã©ã¼æ¡ä»¶ãä¿®æ£ï¼ 369 - makedepã«-Sãªãã·ã§ã³ã追å ï¼ 370 - ã·ãªã¢ã«ãã©ã¤ãã§ãµãã¼ããããã¼ãæ°ãï¼æ大4ãã¼ãã«å¤æ´ï¼ 371 372 ã»ããã¥ã¡ã³ãã®å 373 374 å®ï¼ã³ã¡ã³ãã®ä¿®æ£ 375 376 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 377 - ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 378 379 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.6.0 â 1.7.0ï¼ 380 381 (1) ã¿ã¼ã²ããä¾åé¨ã§ï¼calltexãå¼ã¶ä»£ããã«calltexã®å 382 容ãã¤ã³ã©ã¤ã³ 383 å±éãã¦ããå ´åã«ï¼call_texrtnãå¼ã³åºãæ¡ä»¶ã«ãipmflgãtrueãã追å ã 384 ãããã«ä¿®æ£ï¼ 385 386 (2) å²è¾¼ã¿åºå 387 ¥å£å¦çãæ£ãããã®ç¢ºèªï¼ 388 - ãã¼ãã£ã³ã°ã¬ã¤ãã®å²è¾¼ã¿åºå 389 ¥å£å¦çã«è¿½å ãããå²è¾¼ã¿åªå 390 度ãã¹ 391 ã¯ãï¼å 392 ¨è§£é¤ç¶æ 393 ï¼TIPM_ENAALLï¼ã®å¤ã«è¨å®ãã ⦠(*h)ãã®å¦çãå® 394 ç¾ããã¦ãããã確èªï¼ 395 - ãã¼ãã£ã³ã°ã¬ã¤ãã®6.6.1ç¯ã®è¨è¿°ã確èªï¼(*g)(*i)ã®æ³¨è¨ã追å ãã 396 ãªã©ï¼è¨è¿°ã詳細åããï¼ï¼ 397 398 (3) exc_sense_unlockã®å®ç¾©ãåé¤ï¼ 399 400 (4) TARGET_TSKATRï¼TARGET_ISRATRï¼TARGET_INHATRï¼TARGET_INTATRï¼ 401 TARGET_EXCATRï¼TARGET_MIN_STKSZï¼CHECK_STKSZ_ALIGNã®å®ç¾©ãï¼ã¿ã¼ã²ãã 402 ä¾åé¨ã®ãã³ãã¬ã¼ããã¡ã¤ã«ï¼ãã¹2ï¼ããããããã¡ã¤ã«ã«ç§»åï¼ 403 404 (5) CHECK_FUNC_ALIGNï¼CHECK_FUNC_NONNULLï¼CHECK_STACK_ALIGNï¼ 405 CHECK_STACK_NONNULLï¼CHECK_MPF_ALIGNï¼CHECK_MPF_NONNULLã®å®ç¾©ãï¼ã¿ã¼ã²ã 406 ãä¾åé¨ã®ãã³ãã¬ã¼ããã¡ã¤ã«ï¼ãã¹3ï¼ããããããã¡ã¤ã«ã«ç§»åï¼ 407 408 (6) åççææ©è½æ¡å¼µããã±ã¼ã¸ã«å¯¾å¿ï¼ 409 - CHECK_MB_ALIGNã®å®ç¾©ã追å ï¼ 410 - TSZ_PDQMBã®å®ç¾©ã追å ï¼ããã©ã«ãã§ä¸é½åãªå ´åï¼ï¼ 411 - VALID_INTNO_CREINTã®å®ç¾©ã追å ï¼ 412 - åçã¡ã¢ãªç®¡çã«é¢ããå®ç¾©ã追å ï¼ 413 414 (7) ãªãã»ãããã¡ã¤ã«ãã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã§çæããæ¹æ³ã¸ã®å¯¾å¿ï¼å¿ 415 é 416 ã§ã¯ãªããï¼å¯¾å¿ãã¦ãããã¨ãæã¾ããï¼ï¼è©³ããã¯ï¼ãã¼ãã£ã³ã°ã¬ã¤ã 417 ã®2.5ç¯ãåç 418 §ãããã¨ï¼ 419 420 (8) USE_TSKINICTXBããã¯ãå®ç¾©ãï¼CHECK_STACK_ALIGNã¨CHECK_STACK_NONNULL 421 ã®ãããããå®ç¾©ãã¦ããå ´åã«ã¯ï¼TINIBããã¹ã¿ãã¯é åã®å 422 é çªå°ãåã 423 åºãããã®ãã³ãã¬ã¼ããã¡ã¤ã«é¢æ°GET_STK_TSKINICTXBãå®ç¾©ï¼ 424 425 ---------------------------------------------------------------------- 426 427 TOPPERS/ASPã«ã¼ãã« 428 Release 1.5.0 ãã 1.6.0 ã¸ã®å¤æ´ç¹ 429 430 âå¤æ´ç¹ã®ãªã¹ã 431 432 ã»cfgã®æ°ãããã¼ã¸ã§ã³ï¼1.6ï¼ã«å¯¾å¿ 433 - offsetof_TINIB_stkszã¨offsetof_TINIB_stkã®åå¾è¨è¿°ãã¿ã¼ã²ããé 434 ä¾åé¨ã«ç§»åï¼ 435 436 ã»ã¦ã¼ãã£ãªãã£ã®ä¿®æ£ 437 - genoffsetã«ï¼ã¨ã³ãã£ã¢ã³æå®ããã§ãã¯ããæ©è½ã追å ï¼ãã®éã«ï¼ 438 ã³ã¼ããæ´çï¼ 439 440 ã»ãã®ä»ã®ä¿®æ£ 441 - TCBã®priorityãã£ã¼ã«ããï¼æ¡ä»¶ãããã°uint_8ã§å®ç¾©ããããã«ä¿®æ£ï¼ 442 - ã¿ã¼ã²ããä¾åé¨ã§SIL_ENDIAN_BIGãSIL_ENDIAN_LITTLEãå®ç¾©ããã¦ã 443 ãªãå ´åã«ï¼sil.hã§ã¨ã©ã¼ãæ¤åºããããã«ä¿®æ£ï¼ 444 - ã·ã¹ãã ãã°æ©è½ã®sysog_logmaskã¨syslog_lowmask_notã®åæå¤ãä¿®æ£ï¼ 445 - makereleaseãï¼ãã¡ã¤ã«ã®éè¤ããã§ãã¯ããããã«ä¿®æ£ï¼ 446 - test_utm1ã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ãä¿®æ£ï¼ 447 448 ã»ããã¥ã¡ã³ãã®å 449 450 å®ï¼ã³ã¡ã³ãã®ä¿®æ£ 451 452 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 453 - ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 454 455 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.5.0 â 1.6.0ï¼ 456 457 (1) makeoffset.cã®ä¿®æ£ 458 - makeoffset.cã«ï¼sil_endiané¢æ°ã追å ããï¼ããã«ããï¼genoffsetã® 459 ã¨ã³ãã£ã¢ã³æå®ããã§ãã¯ããæ©è½ãæå¹ã«ãªãï¼ï¼ 460 - ãªã¼ãã©ã³ãã³ãã©æ¡å¼µããã±ã¼ã¸ã«å¯¾å¿ããå ´åã«ã¯ï¼leftotmãã£ã¼ 461 ã«ããå«ã¾ãã¦ãããã確èªããï¼ 462 - çæãããoffset.hã«å¤åããªããã¨ã確èªããï¼ 463 464 (2) å¤åå¾ã·ã³ãã«ãã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã®ä¿®æ£ 465 - 以ä¸ã®2è¡ãtarget_def.csvï¼ã¾ãã¯ããã«ä»£ãããã¡ã¤ã«ï¼ããåé¤ããï¼ 51 TOPPERS/ASPカーネル 52 Release 1.9.2 から 1.9.3 への変更点 53 54 ○変更点のリスト 55 56 ・動的生成機能拡張パッケージのバグフィックス 57 - acre_tskで,優先度の高いタスクを生成・起動してもディスパッチが起 58 こらない不具合を修正. 59 - fsnd_dtqとifsnd_dtqで,エラーコードにE_OKを上書きしている不具合 60 を修正. 61 - acre_tskで,p_tinib->stkszに格納する値(stksz)を丸めた値とする 62 ように修正. 63 64 ・その他の修正 65 - syslog_ref_logの出口のログ出力マクロ(LOG_SYSLOG_REF_LOG_LEAVE) 66 のパラメータにエラーコードを追加. 67 - extension/dcre/kernel/kernel.tfで,ISRに渡す拡張情報をintptr_t型 68 へのキャストするように修正. 69 - sample/Makefile中のコンパイラに対する-Tオプションを,-Wl,-Tオプ 70 ションに変更. 71 - utils/genoffset.tfに,SIL_ENDIAN_BIT/LITTLEの誤定義の検出処理を 72 追加. 73 - コンフィギュレータのエラーメッセージの修正. 74 - テンプレートファイルの記述スタイルの修正. 75 - 拡張パッケージも,kernel.tf中で,スタック領域の確保にALLOC_STACK 76 を使うように修正(過去の修正時の拡張パッケージの修正漏れ). 77 - TLSFのinit_memory_poolが返すエラー値のチェック方法を修正〔Mac OS 78 Xターゲット依存部〕. 79 80 ・ドキュメントの修正,コメントの修正 81 82 ・バージョン番号の更新 83 - カーネルのバージョン番号を更新. 84 85 ---------------------------------------------------------------------- 86 87 TOPPERS/ASPカーネル 88 Release 1.9.1 から 1.9.2 への変更点 89 90 ○変更点のリスト 91 92 ・動的生成機能拡張のバグフィックス 93 - acre_cycで,周期ハンドラを開始する処理のバグを修正. 94 95 ・その他のバグフィックス 96 - test_cpuexc10.cのチェック値の誤りの修正. 97 98 ・ドキュメントの修正. 99 100 ・バージョン番号の更新 101 - カーネルのバージョン番号を更新. 102 103 ---------------------------------------------------------------------- 104 105 TOPPERS/ASPカーネル 106 Release 1.9.0 から 1.9.1 への変更点 107 108 ○変更点のリスト 109 110 ・ミューテックス機能拡張の仕様変更 111 - 自タスクがロックしているミューテックスを再度ロックしようとした場 112 合と,自タスクがロックしていないミューテックスをロック解除しよう 113 とした場合のエラーコードをE_OBJに変更. 114 115 ・ミューテックス機能拡張のバグフィックス 116 - タスク終了時のミューテックスの解放順序を逆順に. 117 118 ・動的生成機能拡張のバグフィックス 119 - オブジェクト未登録エラーのチェックの抜けおよびバグを修正. 120 - オブジェクト未登録の場合の他のエラーのチェック場所の修正. 121 122 ・オーバランハンドラ機能拡張のバグフィックス 123 - オーバランタイマ割込みハンドラの起動と,オーバランタイマの再動作 124 開始/停止との競合の問題を修正. 125 126 ・テストプログラム関係の修正 127 128 ・その他の修正 129 - xsns_dpnとxsns_xpnで,kerflgもチェックするように修正(安全性の向 130 上のための修正). 131 - kernel.tf中で,スタック領域の確保にALLOC_STACKを使うように修正. 132 133 ・ドキュメントの充実,コメントの修正 134 135 ・バージョン番号の更新 136 - カーネルのバージョン番号を更新. 137 138 ---------------------------------------------------------------------- 139 140 TOPPERS/ASPカーネル 141 Release 1.8.0 から 1.9.0 への変更点 142 143 ○変更点のリスト 144 145 ・メッセージバッファ機能拡張パッケージの追加 146 147 ・コンフィギュレータのパス3のテンプレートファイルに,ターゲット依存部で 148 設定したセクションを,LMAからVMAにコピーする処理を追加 149 150 ・サンプルのMakefileの修正 151 - C言語の時に-lcを付けるように修正. 152 - CFG_OBJSを,CFG_ASMOBJSとCFG_COBJSに分離. 153 154 ・先頭番地のチェックコードの修正 155 - 先頭番地のサイズが固定値になっていたところを,sizeof_FPに修正. 156 - オーバランハンドラ機能拡張において,オーバランハンドラの先頭番地 157 のチェックを追加. 158 159 ・静的APIにおけるエラーチェックの追加 160 - 符号無しのパラメータに負の値を指定した場合のエラーチェックを追加. 161 - イベントフラグの初期ビットパターンのエラーチェックを追加. 162 163 ・テストプログラム関係の修正 164 - テストライブラリに,test_startを追加. 165 - テストプログラムの先頭で,プログラム名を表示するように修正. 166 - gentestを拡張. 167 168 ・動的生成機能拡張のバグフィックス 169 - カーネルが割り付けるメモリ領域のサイズのチェックコードを修正. 170 - DEF_KMMのkmmszが0以下の場合のエラーチェックを追加. 171 - カーネル内部シンボルのリネーム表を修正. 172 173 ・その他のバグフィックス 174 - kernel_def.csvにTARGET_MIN_ISTKSZを追加. 175 - オーバランハンドラ機能拡張で,オーバランハンドラをサポートしてい 176 ないターゲットでDEF_OVRを使用した場合には,コンフィギュレータでエ 177 ラーとするように修正. 178 179 ・その他の修正 180 - reqdspをdspreqに,p_reqdspをp_dspreqにリネーム. 181 - スタック領域と固定長メモリプール領域の先頭番地をユーザが指定した 182 場合には,kernel_cfg.c中で(void *)型にキャストするように修正.動 183 的生成機能拡張のカーネルが割り付けるメモリ領域の先頭番地も同様. 184 - TNUM_PORTが5以上の時は,serial.cでエラーを報告する. 185 - makedepとmakereleaseを改善. 186 187 ・ドキュメントの充実,コメントの修正 188 - ユーザーズマニュアルに「1.6 Cygwin環境における注意事項」を追加. 189 - ユーザーズマニュアルに「11.8 rodataセクションをRAMに置く場合」を 190 追加. 191 192 ・バージョン番号の更新 193 - カーネルのバージョン番号を更新. 194 195 ○ターゲット依存部の要修正箇所(1.8.0 → 1.9.0) 196 197 (1) CFG_OBJSをCFG_COBJSにリネーム 198 - Makefileのターゲット依存部でCFG_OBJSを定義している場合には, 199 CFG_COBJSにリネームする. 200 201 ---------------------------------------------------------------------- 202 203 TOPPERS/ASPカーネル 204 Release 1.7.0 から 1.8.0 への変更点 205 206 ○変更点のリスト 207 208 ・char_t型の廃止 209 210 ・SILのメモリ空間読出し関数に渡すポインタの属性の変更 211 - sil_r??_???に渡しポインタに,const属性を追加. 212 213 ・非タスクコンテキスト用のスタック領域のサイズチェックの追加 214 - DEF_ICSのistkszがターゲット定義の最小値(TARGET_MIN_ISTKSZ)より 215 も小さい場合にE_PARエラーとする処理を追加. 216 217 ・vasyslog.cをlibraryディレクトリに移動 218 219 ・MISRA-C対応のためのコードの修正 220 - 文をマクロ定義している箇所をdo{}while(false)で囲む. 221 - コンマ演算子に使用を最小限に. 222 - 多重代入文をやめる. 223 - 符号無し整数定数にUをつける. 224 - 標準的な名前を変数名として使わないように修正. 225 - 返値を使わない関数呼出しを(void)にキャストする. 226 227 ・その他のバグフィックス 228 - ミューテックス機能拡張で,ref_tskがTTW_MTXを返す処理を追加. 229 - 動的生成機能拡張で,acre_isrのエラーコードを修正. 230 - 動的生成機能拡張で,オブジェクトコントロールブロックがない時に 231 acre_yyyを呼んだ場合の問題を修正. 232 - kernel_check.tfでエラーメッセージの出力処理を修正. 233 - 拡張モジュールの追従ミスの修正. 234 - TOPPERS_SUPPORT_OVRTIMをTOPPERS_SUPPORT_OVRHDRに修正. 235 236 ・サンプルのMakefileの修正 237 - カーネルライブラリを別ディレクトリで作成する時に,カーネルライブ 238 ラリが更新されたら,オブジェクトファイルを再構築するように修正. 239 - CFG2_OUTをCFG2_OUT_SRCSにリネーム. 240 - LDFLAGSは,cfg1_out.cのリンク時には適用されないように修正. 241 - log_output.o,vasyslog.o,t_perror.o,strerror.oを,SYS_COBJSから 242 APPL_COBJSに移動. 243 244 ・その他の修正 245 - semaphore.h等からwait.hをインクルードするように修正. 246 - TOPPERS_EMPTY_LABELのデフォルトの定義をkernel_int.hに移動. 247 - __STDC_VERSION__が定義されていない場合に対応. 248 - test_lib.hに多重インクルードの防止コードを追加. 249 - ユーティリティプログラムを新しいperlに対応するように修正. 250 - gentestを拡張(CPU例外ハンドラの生成,GOTOに対応など). 251 - configureにオプションを追加. 252 - test_tex1にテストケース1件を追加. 253 254 ・ドキュメントの充実,コメントの修正 255 256 ・バージョン番号の更新 257 - カーネルのバージョン番号を更新. 258 259 ○ターゲット依存部の要修正箇所(1.7.0 → 1.8.0) 260 261 (1) char_t型をchar型に修正 262 263 (2) TARGET_MIN_ISTKSZの定義を追加(オプション) 264 - 非タスクコンテキストのスタックサイズの最小値をチェックする場合に 265 は,最小値をTARGET_MIN_ISTKSZに定義する. 266 267 (3) CFG2_OUTをCFG2_OUT_SRCSにリネーム 268 - Makefileのターゲット依存部でCFG2_OUTを定義している場合には, 269 CFG2_OUT_SRCSにリネームする. 270 271 (4) CFG1_OUT_LDFLAGSの定義 272 - Makefileのターゲット依存部で定義したLDFLAGSは,cfg1_out.cをリンク 273 する際には適用されないように変更したため,LDFLAGSに定義したオプショ 274 ンで,cfg1_out.cをリンクする際にも必要なものは,CFG1_OUT_LDFLAGS 275 にも定義するように修正する. 276 277 ---------------------------------------------------------------------- 278 279 TOPPERS/ASPカーネル 280 Release 1.6.0 から 1.7.0 への変更点 281 282 ○変更点のリスト 283 284 ・動的生成機能拡張パッケージ,制約タスク拡張パッケージの追加 285 286 ・タスク例外処理ルーチンの実行開始条件の変更 287 - タスク例外処理ルーチンの実行に関するコードの修正. 288 - ipmflgを導入. 289 - exc_sense_unlockを廃止. 290 291 ・データキューのコードの修正 292 - データ管理ブロックの導入(他のオブジェクトの実装と整合された). 293 294 ・SILのメモリ空間アクセス関数に渡すポインタの型の変更 295 - void *を渡していたところを,サイズにあわせて,uint8_t *などに変更. 296 297 ・動的生成機能拡張パッケージにあわせた修正 298 - t_stddef.hにMB_T型の定義を追加. 299 - コンフィギュレータのテンプレートファイル(パス2および3)で定義し 300 ていたターゲット依存情報を,ヘッダファイルに移動. 301 - kernel_def.csvに,それらの値を取得するための記述を追加. 302 - ポーティングガイドの修正. 303 304 ・オフセットファイルをコンフィギュレータで生成する方法を追加 305 - genoffset.tfを追加. 306 - kernel_def.csvに,SIL_ENDIAN_BIG/LITTLEを追加. 307 - sample/Makefileを修正. 308 - m68k依存部を,この方法に対応させる. 309 - ポーティングガイドの修正. 310 311 ・その他のバグフィックス 312 - CHECK_INTPRI_CHGIPMの定義中のtypoを修正. 313 - genoffsetのRelease 1.6.0におけるディグレードを修正. 314 - オーバランハンドラ拡張機能で,ターゲット依存部がオーバランハンド 315 ラをサポートしていない場合には,TCB中のleftotmを定義しないように 316 修正. 317 318 ・その他の修正 319 - USE_TSKINICTXBをマクロ定義した場合のスタック領域の先頭番地のチェッ 320 クのために,GET_STK_TSKINICTXBを導入. 321 - kernel_cfg.c中で,タスクの先頭番地をTASK型にキャストするように 322 kernel.tfを修正. 323 - ext_tskのE_SYSの返し方を修正.ext_kerもE_SYSを返すコードに修正. 324 - CFG_INTは,有効なすべての割込み番号に対応する方針に従い,コンフィ 325 ギュレータのエラー条件を修正. 326 - makedepに-Sオプションを追加. 327 - シリアルドライバでサポートするポート数を,最大4ポートに変更. 328 329 ・ドキュメントの充実,コメントの修正 330 331 ・バージョン番号の更新 332 - カーネルのバージョン番号を更新. 333 334 ○ターゲット依存部の要修正箇所(1.6.0 → 1.7.0) 335 336 (1) ターゲット依存部で,calltexを呼ぶ代わりにcalltexの内容をインライン 337 展開している場合に,call_texrtnを呼び出す条件に「ipmflgがtrue」を追加す 338 るように修正. 339 340 (2) 割込み出入口処理が正しいかの確認. 341 - ポーティングガイドの割込み出入口処理に追加した「割込み優先度マス 342 クを,全解除状態(TIPM_ENAALL)の値に設定する … (*h)」の処理が実 343 現されているかを確認. 344 - ポーティングガイドの6.6.1節の記述を確認((*g)(*i)の注記を追加する 345 など,記述を詳細化した). 346 347 (3) exc_sense_unlockの定義を削除. 348 349 (4) TARGET_TSKATR,TARGET_ISRATR,TARGET_INHATR,TARGET_INTATR, 350 TARGET_EXCATR,TARGET_MIN_STKSZ,CHECK_STKSZ_ALIGNの定義を,ターゲット 351 依存部のテンプレートファイル(パス2)からヘッダファイルに移動. 352 353 (5) CHECK_FUNC_ALIGN,CHECK_FUNC_NONNULL,CHECK_STACK_ALIGN, 354 CHECK_STACK_NONNULL,CHECK_MPF_ALIGN,CHECK_MPF_NONNULLの定義を,ターゲッ 355 ト依存部のテンプレートファイル(パス3)からヘッダファイルに移動. 356 357 (6) 動的生成機能拡張パッケージに対応. 358 - CHECK_MB_ALIGNの定義を追加. 359 - TSZ_PDQMBの定義を追加(デフォルトで不都合な場合). 360 - VALID_INTNO_CREINTの定義を追加. 361 - 動的メモリ管理に関する定義を追加. 362 363 (7) オフセットファイルをコンフィギュレータで生成する方法への対応(必須 364 ではないが,対応しておくことが望ましい).詳しくは,ポーティングガイド 365 の2.5節を参照すること. 366 367 (8) USE_TSKINICTXBをマクロ定義し,CHECK_STACK_ALIGNとCHECK_STACK_NONNULL 368 のいずれかを定義している場合には,TINIBからスタック領域の先頭番地を取り 369 出すためのテンプレートファイル関数GET_STK_TSKINICTXBを定義. 370 371 ---------------------------------------------------------------------- 372 373 TOPPERS/ASPカーネル 374 Release 1.5.0 から 1.6.0 への変更点 375 376 ○変更点のリスト 377 378 ・cfgの新しいバージョン(1.6)に対応 379 - offsetof_TINIB_stkszとoffsetof_TINIB_stkの取得記述をターゲット非 380 依存部に移動. 381 382 ・ユーティリティの修正 383 - genoffsetに,エンディアン指定をチェックする機能を追加.その際に, 384 コードを整理. 385 386 ・その他の修正 387 - TCBのpriorityフィールドを,条件があえばuint_8で定義するように修正. 388 - ターゲット依存部でSIL_ENDIAN_BIGもSIL_ENDIAN_LITTLEも定義されてい 389 ない場合に,sil.hでエラーを検出するように修正. 390 - システムログ機能のsysog_logmaskとsyslog_lowmask_notの初期値を修正. 391 - makereleaseを,ファイルの重複をチェックするように修正. 392 - test_utm1のエラーメッセージを修正. 393 394 ・ドキュメントの充実,コメントの修正 395 396 ・バージョン番号の更新 397 - カーネルのバージョン番号を更新. 398 399 ○ターゲット依存部の要修正箇所(1.5.0 → 1.6.0) 400 401 (1) makeoffset.cの修正 402 - makeoffset.cに,sil_endian関数を追加する(これにより,genoffsetの 403 エンディアン指定をチェックする機能が有効になる). 404 - オーバランハンドラ拡張パッケージに対応する場合には,leftotmフィー 405 ルドが含まれているかを確認する. 406 - 生成されるoffset.hに変化がないことを確認する. 407 408 (2) 値取得シンボルテーブルのターゲット依存部の修正 409 - 以下の2行をtarget_def.csv(またはそれに代わるファイル)から削除する. 466 410 offsetof_TINIB_stksz,"offsetof(TINIB,stksz)" 467 411 offsetof_TINIB_stk,"offsetof(TINIB,stk)" 468 â» Release 1.5.0ã«ãããä¿®æ£ãå 469 ã«æ»ãï¼ 470 471 (3) target_fput_logã®å®è£ 472 å¶éã®ç¢ºèªï¼ä»æ§ãä¿®æ£ãããããã§ã¯ãªãï¼ 473 - target_fput_logå 474 ¨å²è¾¼ã¿ããã¯ç¶æ 475 ã§å¼ã³åºããããã«ãªã£ã¦ããã確 476 èªããï¼ 477 478 ---------------------------------------------------------------------- 479 480 TOPPERS/ASPã«ã¼ãã« 481 Release 1.4.0 ãã 1.5.0 ã¸ã®å¤æ´ç¹ 482 483 âå¤æ´ç¹ã®ãªã¹ã 484 485 ã»ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¨CPUä¾å¤ã®æ±ãã®è¦ç´ã 486 - ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®è¨å®æ¹æ³ãæ´çã»æ¡å¼µï¼ 487 - ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©ã¯ï¼ã«ã¼ãã«å 488 ã®åºå 489 ¥å£å¦çãçµç±ã 490 ãªããã¨ãåºæ¬ã¨ããï¼ã¿ã¼ã²ããä¾åï¼ï¼ 491 - CPUä¾å¤ãã³ãã©ã®åºå 492 ¥å£å¦çã«ãããã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã®æ±ã 493 ãè¦å®ï¼ 494 495 ã»chg_ipmã¨get_ipmã®ä»æ§å¤æ´ 496 - chg_ipmã¨get_ipmã¯ï¼CPUããã¯ç¶æ 497 ã§ã¯å¼ã¹ãªããã®ã¨ããï¼ 498 - ããã«ä¼´ã£ã¦ãã¹ãããã°ã©ã ãä¿®æ£ï¼ 499 500 ã»ã¿ã¤ãå²è¾¼ã¿å¦çã§å¼ã³åºããialm_timã®åºæºæéã®å¤æ´ 501 - current_timeã®æ´æ°å¾ã«ï¼ã¿ã¤ã ã¤ãã³ãã®å¦çãè¡ãããã«å¤æ´ï¼ 502 - æå¹ãªæå°ã®ã·ã¹ãã æå»ã¨ãã¦min_timeãå°å 503 ¥ï¼ 504 - pend_updateãå»æ¢ï¼ 505 506 ã»ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ãã§ãã¯ã®è¿½å 507 - ã¹ã¿ãã¯ãµã¤ãºã0ã®å ´åã®ã¨ã©ã¼ãï¼ã¿ã¼ã²ããéä¾åã§æ¤åºï¼ 508 - ã¿ã¼ã²ããä¾åã§ï¼ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ãè¨å®ã§ãããã 509 ã«ããï¼ 510 511 ã»ã¿ã¹ã¯åæåã³ã³ããã¹ããããã¯ã®è¿½å 512 - ã¿ã¼ã²ããä¾åã§ï¼ã¿ã¹ã¯åæåã³ã³ããã¹ããããã¯ï¼TSKINICTXBï¼ 513 ã使ç¨ã§ããããã«ããï¼ 514 515 ã»ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããå称ã®ãªãã¼ã æ¹æ³ã®å¤æ´ 516 - ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ãï¼ã¿ã¼ã²ããéä¾åé¨ããåç 517 §ããå称ã®ãª 518 ãã¼ã è¨è¿°ãï¼ã¿ã¼ã²ããä¾åé¨ã«ç§»åï¼ 519 520 ã»æ¡å¼µããã±ã¼ã¸ã®è¿½å 521 - ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µããã±ã¼ã¸ï¼ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µãã 522 ã±ã¼ã¸ï¼ã¿ã¹ã¯åªå 523 度æ¡å¼µããã±ã¼ã¸ãï¼ä¸è¬å 524 ¬éãããã¡ã¤ã«ã«è¿½å ï¼ 525 - ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã¸ã®å¯¾å¿æ¹æ³ãï¼ãã¼ãã£ã³ã°ã¬ã¤ãã«è¨è¼ï¼ 526 527 ã»ãµãã¼ãããæ©è½ãèå¥ãããã¯ãã®å®ç¾©æ¹æ³ã®å¤æ´ 528 - ã¿ã¼ã²ããä¾åé¨ã§TOPPERS_TARGET_SUPPORT_XXXXXããã¯ãå®ç¾©ãã㦠529 ããã°ï¼kernel.hã§TOPPERS_SUPPORT_XXXXXããã¯ãå®ç¾©ããæ¹æ³ã«å¤æ´ï¼ 530 531 ã»ã·ã¹ãã ãã°æ©è½ã®ä¿®æ£ 532 - syslog_initializeãå¼ã°ããåã®ãã°æ 533 å ±ã®åºåã«å¯¾å¿ï¼ 534 - sysog_logmaskã¨syslog_lowmask_notã®åæå¤ãä¿®æ£ï¼ 535 536 ã»ãã¹ãã©ã¤ãã©ãªã®ä¿®æ£ 537 - test_lib.hã¨test_lib.cãï¼testãã£ã¬ã¯ããªããï¼ããããinclude㨠538 libraryãã£ã¬ã¯ããªã«ç§»åï¼ 539 - syslog_flushé¢æ°ã追å ï¼logtask_flushã®ä»£ããã«ä½¿ç¨ï¼ 540 - test_finishé¢æ°ã追å ï¼ãã¹ãããã°ã©ã ä¸ã§ext_kerã®ä»£ããã«ä½¿ç¨ï¼ 541 - 以ä¸ã«ä¼´ã£ã¦ãã¹ãããã°ã©ã ãä¿®æ£ï¼ 542 543 ã»configureã®æ¡å¼µ 544 - Makefileã®ãã³ãã¬ã¼ããæå®ããããã®ãªãã·ã§ã³ã追å ï¼ 545 546 ã»ãã®ä»ã®ãã°ãã£ãã¯ã¹ 547 - kernel_impl.hä¸ã®ãã¯ãåã®ä¿®æ£ï¼ 548 - kernel.tfä¸ã®ææ³ãã¹ã®ä¿®æ£ï¼ 549 550 ã»ãã®ä»ã®ä¿®æ£ 551 - CTXBåãTSKCTXBåã«å称å¤æ´ï¼ 552 - ext_tskã§ï¼æ»ããªãã¯ãã®å¦çããæ»ã£ãå ´åã«ã¯ï¼E_SYSãè¿ãï¼ 553 - call_texrtnããdispatchãå¼ã³åºãå¦çãæ¹åï¼ 554 - make_non_waitãï¼wait.cããwait.hã«ç§»åï¼ 555 - xsns_xpnä¸ã®åé·ãªæ¡ä»¶å¼ãåé¤ï¼ 556 - TA_DISINTã¨TA_LEVELãitron.hããåé¤ï¼ 557 - LOG_TEX_LEAVEã®ç¬¬2ãã©ã¡ã¼ã¿ãåé¤ï¼ 558 - ãµã³ãã«ã®Makefileã«ï¼OMIT_WARNING_ALLã¨OMIT_OPTIMIZATIONã追å ï¼ 559 - get_utmã«é¢ãããã¹ã(1)ï¼test_utm1ï¼ã追å ï¼ 560 - test_dlynse.cã®è¡¨ç¤ºãæ¹åï¼ 561 562 ã»ããã¥ã¡ã³ãã®å 563 564 å®ï¼ã³ã¡ã³ãã®ä¿®æ£ 565 - æ©è½æ¡å¼µã»ãã¥ã¼ãã³ã°ã¬ã¤ãã«é¢ãã¦ï¼ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«è¨è¼ï¼ 566 - ãã¥ã¼æä½ã©ã¤ãã©ãªé¢æ°ã«é¢ãã¦ï¼ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«è¨è¼ï¼ 567 - ã·ã¹ãã ã®èµ·åæã®åæåå¦çã«é¢ãã¦ï¼ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«è¨è¼ï¼ 568 - è¨è¨ã¡ã¢ãæ¡å 569 570 ï¼ 571 572 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 573 - ã«ã¼ãã«ä»æ§ã®ãã¼ã¸ã§ã³çªå·ï¼ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 574 575 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.4.0 â 1.5.0ï¼ 576 577 (1) ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã®æ±ãã®å¤æ´ 578 - ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©ã®å¼ã³åºãæ¹ã«ã¤ãã¦ï¼ããã¾ã§ã®è 579 ãæ¹ãå¤æ´ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ããã®6.6.7ç¯ 580 ã®è¨è¿°éãã«å®è£ 581 ããã¦ããããã§ãã¯ããï¼ 582 - TA_NONKERNELã使ç¨ã§ããããã«ããå ´åã«ã¯ï¼target.tfã§ï¼ 583 TARGET_INHATRã«TA_NONKERNELãè¨å®ããï¼ 584 - ãã¹2ã®ãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¿ã¼ã²ããéä¾åé¨ã«ï¼ 585 INTNO_FIX_KERNELï¼INHNO_FIX_KERNELï¼INTNO_FIX_NONKERNELï¼ 586 INHNO_FIX_NONKERNELï¼USE_INHINIB_TABLEï¼USE_INTINIB_TABLEã®ãµãã¼ 587 ãã追å ãããã®ã§ï¼ä½¿ç¨ã§ããå ´åã«ã¯ä½¿ç¨ããããã«ä¿®æ£ããï¼ 588 - ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãã³ãã©ã®åºå 589 ¥å£å¦çã«ã¤ãã¦ï¼ãã¿ã¼ã²ããä¾ 590 åé¨ ãã¼ãã£ã³ã°ã¬ã¤ããã®6.6.1ç¯ã®è¨è¿°éãã«å®è£ 591 ããã¦ããã㨠592 ã確èªããï¼ 593 594 (2) ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã®æ±ãã®å¤æ´ 595 - ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ãã³ãã©ã®å¼ã³åºãæ¹ã«ã¤ãã¦ï¼ããã¾ã§ã®è 596 ãæ¹ãå¤æ´ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ããã®6.7.1ç¯ 597 ã®è¨è¿°ãåç 598 §ãã¦ï¼å®è£ 599 ãä¿®æ£ããï¼ 600 601 (3) ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããå称ã®ãªãã¼ã ã®è¿½å 602 - ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ãï¼ã¿ã¼ã²ããéä¾åé¨ããåç 603 §ããå称ã®ãª 604 ãã¼ã è¨è¿°ãï¼ã¿ã¼ã²ããä¾åé¨ã«è¿½å ããï¼ã¿ã¼ã²ããä¾åé¨ã¨ãã 605 ãä¾åé¨ã®éã§ãåæ§ã®å¤æ´ãè¡ããã¨ãæã¾ããï¼ãã ãï¼ 606 arch/logtrace/trace_config.cã§å®ç¾©ãããå称ã«ã¤ãã¦ã¯ï¼ã¿ã¼ã²ã 607 ãä¾åé¨ã§ãªãã¼ã ããï¼ 608 609 (4) ã¿ã¼ã²ããä¾åé¨ã§ãµãã¼ãããæ©è½ã示ããã¯ãã®å¤æ´ 610 - ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ãã¦ããTOPPERS_SUPPORT_DIS_INTã 611 TOPPERS_TARGET_SUPPORT_DIS_INTã«ï¼TOPPERS_SUPPORT_ENA_INTã 612 TOPPERS_TARGET_SUPPORT_ENA_INTã«ï¼TOPPERS_SUPPORT_GET_UTMã 613 TOPPERS_TARGET_SUPPORT_GET_UTMã«ï¼ããããå¤æ´ããï¼ 614 615 (5) ã¿ã¹ã¯ã³ã³ããã¹ããããã¯ã®ååã®å¤æ´ 616 - CTXBåãTSKCTXBåã«å称å¤æ´ããï¼ 617 618 (6) å¤åå¾ã·ã³ãã«ãã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã®ä¿®æ£ 619 - 以ä¸ã®2è¡ãtarget_def.csvï¼ã¾ãã¯ããã«ä»£ãããã¡ã¤ã«ï¼ã«å ããï¼ 412 ※ Release 1.5.0における修正を元に戻す. 413 414 (3) target_fput_logの実装制限の確認(仕様が修正されたわけではない) 415 - target_fput_log全割込みロック状態で呼び出せるようになっているか確 416 認する. 417 418 ---------------------------------------------------------------------- 419 420 TOPPERS/ASPカーネル 421 Release 1.4.0 から 1.5.0 への変更点 422 423 ○変更点のリスト 424 425 ・カーネル管理外の割込みとCPU例外の扱いの見直し 426 - カーネル管理外の割込みの設定方法を整理・拡張. 427 - カーネル管理外の割込みハンドラは,カーネル内の出入口処理を経由し 428 ないことを基本とした(ターゲット依存). 429 - CPU例外ハンドラの出入口処理におけるカーネル管理外のCPU例外の扱い 430 を規定. 431 432 ・chg_ipmとget_ipmの仕様変更 433 - chg_ipmとget_ipmは,CPUロック状態では呼べないものとした. 434 - これに伴ってテストプログラムを修正. 435 436 ・タイマ割込み処理で呼び出したialm_timの基準時間の変更 437 - current_timeの更新後に,タイムイベントの処理を行うように変更. 438 - 有効な最小のシステム時刻としてmin_timeを導入. 439 - pend_updateを廃止. 440 441 ・タスクのスタックサイズの最小値チェックの追加 442 - スタックサイズが0の場合のエラーを,ターゲット非依存で検出. 443 - ターゲット依存で,タスクのスタックサイズの最小値を設定できるよう 444 にした. 445 446 ・タスク初期化コンテキストブロックの追加 447 - ターゲット依存で,タスク初期化コンテキストブロック(TSKINICTXB) 448 を使用できるようにした. 449 450 ・ターゲット依存部で定義する名称のリネーム方法の変更 451 - ターゲット依存部で定義し,ターゲット非依存部から参照する名称のリ 452 ネーム記述を,ターゲット依存部に移動. 453 454 ・拡張パッケージの追加 455 - ミューテックス機能拡張パッケージ,オーバランハンドラ機能拡張パッ 456 ケージ,タスク優先度拡張パッケージを,一般公開するファイルに追加. 457 - オーバランハンドラ機能拡張への対応方法を,ポーティングガイドに記載. 458 459 ・サポートする機能を識別するマクロの定義方法の変更 460 - ターゲット依存部でTOPPERS_TARGET_SUPPORT_XXXXXがマクロ定義されて 461 いれば,kernel.hでTOPPERS_SUPPORT_XXXXXをマクロ定義する方法に変更. 462 463 ・システムログ機能の修正 464 - syslog_initializeが呼ばれる前のログ情報の出力に対応. 465 - sysog_logmaskとsyslog_lowmask_notの初期値を修正. 466 467 ・テストライブラリの修正 468 - test_lib.hとtest_lib.cを,testディレクトリから,それぞれincludeと 469 libraryディレクトリに移動. 470 - syslog_flush関数を追加.logtask_flushの代わりに使用. 471 - test_finish関数を追加.テストプログラム中でext_kerの代わりに使用. 472 - 以上に伴ってテストプログラムを修正. 473 474 ・configureの拡張 475 - Makefileのテンプレートを指定するためのオプションを追加. 476 477 ・その他のバグフィックス 478 - kernel_impl.h中のマクロ名の修正. 479 - kernel.tf中の文法ミスの修正. 480 481 ・その他の修正 482 - CTXB型をTSKCTXB型に名称変更. 483 - ext_tskで,戻らないはずの処理から戻った場合には,E_SYSを返す. 484 - call_texrtnからdispatchを呼び出す処理を改善. 485 - make_non_waitを,wait.cからwait.hに移動. 486 - xsns_xpn中の冗長な条件式を削除. 487 - TA_DISINTとTA_LEVELをitron.hから削除. 488 - LOG_TEX_LEAVEの第2パラメータを削除. 489 - サンプルのMakefileに,OMIT_WARNING_ALLとOMIT_OPTIMIZATIONを追加. 490 - get_utmに関するテスト(1)(test_utm1)を追加. 491 - test_dlynse.cの表示を改善. 492 493 ・ドキュメントの充実,コメントの修正 494 - 機能拡張・チューニングガイドに関して,ユーザーズマニュアルに記載. 495 - キュー操作ライブラリ関数に関して,ユーザーズマニュアルに記載. 496 - システムの起動時の初期化処理に関して,ユーザーズマニュアルに記載. 497 - 設計メモを拡充. 498 499 ・バージョン番号の更新 500 - カーネル仕様のバージョン番号,カーネルのバージョン番号を更新. 501 502 ○ターゲット依存部の要修正箇所(1.4.0 → 1.5.0) 503 504 (1) カーネル管理外の割込みの扱いの変更 505 - カーネル管理外の割込みハンドラの呼び出し方について,これまでの考 506 え方を変更した.「ターゲット依存部 ポーティングガイド」の6.6.7節 507 の記述通りに実装されているかチェックする. 508 - TA_NONKERNELを使用できるようにする場合には,target.tfで, 509 TARGET_INHATRにTA_NONKERNELを設定する. 510 - パス2のテンプレートファイルのターゲット非依存部に, 511 INTNO_FIX_KERNEL,INHNO_FIX_KERNEL,INTNO_FIX_NONKERNEL, 512 INHNO_FIX_NONKERNEL,USE_INHINIB_TABLE,USE_INTINIB_TABLEのサポー 513 トが追加されたので,使用できる場合には使用するように修正する. 514 - カーネル管理の割込みハンドラの出入口処理について,「ターゲット依 515 存部 ポーティングガイド」の6.6.1節の記述通りに実装されていること 516 を確認する. 517 518 (2) カーネル管理外のCPU例外の扱いの変更 519 - カーネル管理外のCPU例外ハンドラの呼び出し方について,これまでの考 520 え方を変更した.「ターゲット依存部 ポーティングガイド」の6.7.1節 521 の記述を参照して,実装を修正する. 522 523 (3) ターゲット依存部で定義する名称のリネームの追加 524 - ターゲット依存部で定義し,ターゲット非依存部から参照する名称のリ 525 ネーム記述を,ターゲット依存部に追加する.ターゲット依存部とチッ 526 プ依存部の間でも同様の変更を行うことが望ましい.ただし, 527 arch/logtrace/trace_config.cで定義される名称については,ターゲッ 528 ト依存部でリネームする. 529 530 (4) ターゲット依存部でサポートする機能を示すマクロの変更 531 - ターゲット依存部で定義しているTOPPERS_SUPPORT_DIS_INTを 532 TOPPERS_TARGET_SUPPORT_DIS_INTに,TOPPERS_SUPPORT_ENA_INTを 533 TOPPERS_TARGET_SUPPORT_ENA_INTに,TOPPERS_SUPPORT_GET_UTMを 534 TOPPERS_TARGET_SUPPORT_GET_UTMに,それぞれ変更する. 535 536 (5) タスクコンテキストブロックの型名の変更 537 - CTXB型をTSKCTXB型に名称変更する. 538 539 (6) 値取得シンボルテーブルのターゲット依存部の修正 540 - 以下の2行をtarget_def.csv(またはそれに代わるファイル)に加える. 620 541 offsetof_TINIB_stksz,"offsetof(TINIB,stksz)" 621 542 offsetof_TINIB_stk,"offsetof(TINIB,stk)" 622 â» æ°è¨ãããUSE_TSKINICTXBã使ãå ´åã«ã¯å¿ 623 è¦ãªãï¼ 624 â» Release 1.6以éãç¨ããå ´åã«ã¯ï¼ãã®ä¿®æ£ã¯å¿ 625 è¦ã¯ãªãï¼ 626 627 (7) ãã°ãã¯ãã®ä¿®æ£ 628 - LOG_TEX_LEAVEã®ç¬¬2ãã©ã¡ã¼ã¿ãåé¤ãããã®ã§ï¼LOG_TEX_LEAVEãå®ç¾© 629 ãã¦ããå ´åã«ã¯ï¼ãã®å®ç¾©ãå¤æ´ããï¼ 630 631 (8) ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã®ä¿®æ£ï¼bssã»ã¯ã·ã§ã³ã®ã¯ãªã¢ãçç¥ãã¦ãã 632 å ´åã®ã¿ï¼ 633 - ã·ã¹ãã ãã°æ©è½ã使ç¨ããå ´åã«ã¯ï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã«ï¼ 634 syslog_logmaskã¨syslog_lowmask_notã0ã«åæåããã³ã¼ãã追å ããï¼ 635 - ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ããçµã¿è¾¼ãã§ããå ´åã«ã¯ï¼ã¹ã¿ã¼ 636 ãã¢ããã¢ã¸ã¥ã¼ã«ã«ï¼trace_modeã0ã«åæåããã³ã¼ãã追å ããï¼ 637 638 (9) ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ãã§ãã¯ã®è¨å®ï¼ãªãã·ã§ã³ï¼ 639 - ã¿ã¼ã²ããä¾åã«ï¼ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ããã§ãã¯ããå ´ 640 åã«ã¯ï¼æå°å¤ãTARGET_MIN_STKSZã«å®ç¾©ããï¼ 641 642 (10) ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µã¸ã®å¯¾å¿ï¼ãªãã·ã§ã³ï¼ 643 - ãªã¼ãã©ã³ãã³ãã©æ©è½æ¡å¼µããã±ã¼ã¸ã«å¯¾å¿ããï¼å¯¾å¿æ¹æ³ã«ã¤ã㦠644 ã¯ï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ããä¸ã®ã#ifdef 645 TOPPERS_SUPPORT_OVRHDRããããç®æã¨ï¼5.7ç¯ã¨6.14ç¯ãåç 646 §ãããã¨ï¼ 647 648 ---------------------------------------------------------------------- 649 650 TOPPERS/ASPã«ã¼ãã« 651 Release 1.3.2 ãã 1.4.0 ã¸ã®å¤æ´ç¹ 652 653 âå¤æ´ç¹ã®ãªã¹ã 654 655 ã»å¨æãã³ãã©ã®ä»æ§å¤æ´ 656 - sta_cycãå¼ã³åºããå¾ï¼æåã«å¨æãã³ãã©ãèµ·åãããæå»ãï¼èµ·å 657 å¨æå¾ããï¼èµ·åä½ç¸å¾ã«å¤æ´ï¼ 658 659 ã»TSZ_MPFã®å®ç¾©ãåé¤ 660 661 ã»call_atexitã®å»æ¢ 662 - ã¿ã¼ã²ããéä¾åé¨ããcall_atexitãå¼ã³åºãã®ããããï¼ 663 call_atexitã§è¡ã£ã¦ããå¦çï¼æ¨æºçã«ã¯software_term_hookãå¼ã³åº 664 ãå¦çï¼ã¯ï¼å¿ 665 è¦ã§ããã°target_exitã®å 666 é ã§è¡ããã¨ã¨ããï¼ 667 668 ã»get_utmã®åé¡ã®ä¿®æ£ 669 - å¨æãã³ãã©ï¼ã¢ã©ã¼ã ãã³ãã©ã®ä¸ã§get_utmãå¼ã¶ã¨ï¼æ£ããæå»ã 670 è¿ããªãåé¡ãä¿®æ£ï¼ 671 672 ã»ã¹ã±ã¸ã¥ã¼ã©ã®ã¢ã¸ã¥ã¼ã«æ§åä¸ 673 - ã¿ã¹ã¯ç¶æ 674 ï¼tstatï¼ã®å¤æ´ãï¼make_runnableã§ã¯ãªãï¼ãããå¼ã¶å´ 675 ã®é¢æ°ã§è¡ãããã«ä¿®æ£ï¼ 676 677 ã»ãã³ãã¬ã¼ãå¤æ°ã®å¤ã®èªååå¾ 678 - OMIT_INITIALIZE_INTERRUPTã¨OMIT_INITIALIZE_EXCEPTIONã®2ã¤ã®ãã³ã 679 ã¬ã¼ãå¤æ°ã®å¤ãï¼ããããã¡ã¤ã«ã®å®ç¾©ããèªååå¾ããããã«ä¿®æ£ï¼ 680 681 ã»ãã¬ã¼ã¹ãã°æ©è½ã®æ¹å 682 - LOG_TEX_ENTERï¼LOG_TEX_LEAVEã®ãã©ã¡ã¼ã¿ã«ï¼p_runtskã追å ï¼ 683 684 ã»å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã®ä¿®æ£ 685 - æå»åå¾ã®æ¹æ³ãã¿ã¼ã²ããä¾åã§å¤æ´ã§ããããã«ä¿®æ£ï¼ 686 - TNUM_HISTã®å®ç¾©ãï¼histgram.hããhistgram.cã«ç§»åï¼ 687 688 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®åé¢ 689 - cfgã¯ï¼ASPã«ã¼ãã«ã¨ã¯ç¬ç«ããããã±ã¼ã¸ã¨ãã¦é 690 å¸ãããã¨ã«ããï¼ 691 692 ã»ãã¤ã°ã¬ã¼ã·ã§ã³ã¬ã¤ãã®åé¢ 693 - doc/migration.txtã¯ï¼å¥éPDFãã¡ã¤ã«ã§é 694 å¸ãããã¨ã«ããï¼ 695 696 ã»ãã¹ãããã°ã©ã ï¼æ§è½è©ä¾¡ããã°ã©ã ã®è¿½å 697 - ã»ããã©æ©è½ã®ãã¹ã(2)ï¼test_sem2ï¼ã追å ï¼ 698 - act_tskï¼iact_tskã®å¦çæéã®è©ä¾¡ããã°ã©ã ï¼perf4ï¼ã追å ï¼ 699 700 ã»cleanæã«åé¤ãããã¡ã¤ã« 701 - cleanæã«åé¤ãããã¡ã¤ã«ãï¼ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããããã®å¤æ° 702 ï¼CLEAN_FILESï¼ãå°å 703 ¥ï¼ 704 705 ã»ã¦ã¼ãã£ãªãã£ã®ä¿®æ£ 706 - makereleaseã使ããã£ã¬ã¯ããªåï¼aspï¼ãï¼ã«ã¬ã³ããã£ã¬ã¯ããªã 707 ã決å®ããããã«ä¿®æ£ï¼ 708 - makedepã«ï¼Cygwinç°å¢ã«ãããã«ã¼ããã£ã¬ã¯ããªåãæå®ãããã 709 ã®-Rãªãã·ã§ã³ã追å ï¼Makefileã«MAKEDEP_OPTSå¤æ°ã追å ï¼ 710 - gentestãã¢ã©ã¼ã ãã³ãã©ã®è¤æ°åèµ·åã«å¯¾å¿ã§ããããã«æ¡å¼µï¼ 711 712 ã»ãã®ä»ã®ãã°ãã£ãã¯ã¹ 713 - ãªãã¼ã ããã·ã³ãã«ãä¿®æ£ï¼ 714 - å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼åæåã«ã¼ãã³ï¼çµäºå¦çã«ã¼ãã³ã®å 715 é çª 716 å°ã«é¢æ°å以å¤ãè¨è¿°ããå ´åã«ãåä½ããããã«ä¿®æ£ï¼ 717 - Makefile.dependããªãå ´åã®åé¡ãä¿®æ£ï¼ 718 719 ã»ããã¥ã¡ã³ãã®å 720 721 å®ï¼ã³ã¡ã³ãã®ä¿®æ£ 722 - åããã¥ã¡ã³ãã«TOPPERSã©ã¤ã»ã³ã¹ã¨ç®æ¬¡ã追å ï¼ 723 724 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 725 - ã«ã¼ãã«ä»æ§ã®ãã¼ã¸ã§ã³çªå·ï¼ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå·ãæ´æ°ï¼ 726 727 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.3.2 â 1.4.0ï¼ 728 729 (1) call_atexitã®å»æ¢ 730 - call_atexitãå»æ¢ããããï¼ã¿ã¼ã²ããä¾åé¨ããå®ç¾©ãåé¤ããï¼ 731 call_atexitã§è¡ã£ã¦ããå¦çï¼æ¨æºçã«ã¯software_term_hookãå¼ã³åº 732 ãå¦çï¼ã¯ï¼å¿ 733 è¦ã§ããã°target_exitã®å 734 é ã§è¡ãï¼ 735 736 (2) ãã³ãã¬ã¼ãå¤æ°ã®å¤ã®è¨å®ã®åé¤ 737 - OMIT_INITIALIZE_INTERRUPTã¨OMIT_INITIALIZE_EXCEPTIONã®2ã¤ã®ãã³ã 738 ã¬ã¼ãå¤æ°ã®å¤ãï¼ããããã¡ã¤ã«ã®å®ç¾©ããèªååå¾ããããã«ä¿®æ£ 739 ããããï¼ã¿ã¼ã²ããä¾åé¨ï¼target.tfã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãã 740 ãããã¡ã¤ã«ï¼ã§å¤ãå®ç¾©ãã¦ããã°ï¼ãã®å®ç¾©ãåé¤ããï¼ 741 742 (3) makedepãå¼ã¶éã®ãªãã·ã§ã³ã®è¿½å 743 - Makefileã®ã¿ã¼ã²ããä¾åé¨ï¼Makefile.targetçï¼ã§makedepãå¼ã㧠744 ããå ´åã«ã¯ï¼$(MAKEDEP_OPTS)ã追å ããï¼ 745 746 ä¾ï¼@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \ 543 ※ 新設されたUSE_TSKINICTXBを使う場合には必要ない. 544 ※ Release 1.6以降を用いる場合には,この修正は必要はない. 545 546 (7) ログマクロの修正 547 - LOG_TEX_LEAVEの第2パラメータが削除されたので,LOG_TEX_LEAVEを定義 548 している場合には,その定義を変更する. 549 550 (8) スタートアップモジュールの修正(bssセクションのクリアを省略している 551 場合のみ) 552 - システムログ機能を使用する場合には,スタートアップモジュールに, 553 syslog_logmaskとsyslog_lowmask_notを0に初期化するコードを追加する. 554 - トレースログ記録のサンプルコードを組み込んでいる場合には,スター 555 トアップモジュールに,trace_modeを0に初期化するコードを追加する. 556 557 (9) タスクのスタックサイズの最小値チェックの設定(オプション) 558 - ターゲット依存に,タスクのスタックサイズの最小値をチェックする場 559 合には,最小値をTARGET_MIN_STKSZに定義する. 560 561 (10) オーバランハンドラ機能拡張への対応(オプション) 562 - オーバランハンドラ機能拡張パッケージに対応する.対応方法について 563 は,「ターゲット依存部 ポーティングガイド」中の「#ifdef 564 TOPPERS_SUPPORT_OVRHDR」がある箇所と,5.7節と6.14節を参照すること. 565 566 ---------------------------------------------------------------------- 567 568 TOPPERS/ASPカーネル 569 Release 1.3.2 から 1.4.0 への変更点 570 571 ○変更点のリスト 572 573 ・周期ハンドラの仕様変更 574 - sta_cycを呼び出した後,最初に周期ハンドラが起動される時刻を,起動 575 周期後から,起動位相後に変更. 576 577 ・TSZ_MPFの定義を削除 578 579 ・call_atexitの廃止 580 - ターゲット非依存部からcall_atexitを呼び出すのをやめる. 581 call_atexitで行っていた処理(標準的にはsoftware_term_hookを呼び出 582 す処理)は,必要であればtarget_exitの先頭で行うこととする. 583 584 ・get_utmの問題の修正 585 - 周期ハンドラ,アラームハンドラの中でget_utmを呼ぶと,正しい時刻が 586 返らない問題を修正. 587 588 ・スケジューラのモジュール性向上 589 - タスク状態(tstat)の変更を,make_runnableではなく,それを呼ぶ側 590 の関数で行うように修正. 591 592 ・テンプレート変数の値の自動取得 593 - OMIT_INITIALIZE_INTERRUPTとOMIT_INITIALIZE_EXCEPTIONの2つのテンプ 594 レート変数の値を,ヘッダファイルの定義から自動取得するように修正. 595 596 ・トレースログ機能の改善 597 - LOG_TEX_ENTER,LOG_TEX_LEAVEのパラメータに,p_runtskを追加. 598 599 ・実行時間分布集計モジュールの修正 600 - 時刻取得の方法をターゲット依存で変更できるように修正. 601 - TNUM_HISTの定義を,histgram.hからhistgram.cに移動. 602 603 ・コンフィギュレータの分離 604 - cfgは,ASPカーネルとは独立したパッケージとして配布することにする. 605 606 ・マイグレーションガイドの分離 607 - doc/migration.txtは,別途PDFファイルで配布することにする. 608 609 ・テストプログラム,性能評価プログラムの追加 610 - セマフォ機能のテスト(2)(test_sem2)を追加. 611 - act_tsk,iact_tskの処理時間の評価プログラム(perf4)を追加. 612 613 ・clean時に削除するファイル 614 - clean時に削除するファイルを,ターゲット依存部で定義するための変数 615 (CLEAN_FILES)を導入. 616 617 ・ユーティリティの修正 618 - makereleaseが使うディレクトリ名(asp)を,カレントディレクトリか 619 ら決定するように修正. 620 - makedepに,Cygwin環境におけるルートディレクトリ名を指定するため 621 の-Rオプションを追加.MakefileにMAKEDEP_OPTS変数を追加. 622 - gentestをアラームハンドラの複数回起動に対応できるように拡張. 623 624 ・その他のバグフィックス 625 - リネームするシンボルを修正. 626 - 割込みサービスルーチン,初期化ルーチン,終了処理ルーチンの先頭番 627 地に関数名以外を記述した場合にも動作するように修正. 628 - Makefile.dependがない場合の問題を修正. 629 630 ・ドキュメントの充実,コメントの修正 631 - 各ドキュメントにTOPPERSライセンスと目次を追加. 632 633 ・バージョン番号の更新 634 - カーネル仕様のバージョン番号,カーネルのバージョン番号を更新. 635 636 ○ターゲット依存部の要修正箇所(1.3.2 → 1.4.0) 637 638 (1) call_atexitの廃止 639 - call_atexitを廃止したため,ターゲット依存部から定義を削除する. 640 call_atexitで行っていた処理(標準的にはsoftware_term_hookを呼び出 641 す処理)は,必要であればtarget_exitの先頭で行う. 642 643 (2) テンプレート変数の値の設定の削除 644 - OMIT_INITIALIZE_INTERRUPTとOMIT_INITIALIZE_EXCEPTIONの2つのテンプ 645 レート変数の値を,ヘッダファイルの定義から自動取得するように修正 646 したため,ターゲット依存部(target.tfまたはそこからインクルードさ 647 れるファイル)で値を定義していれば,その定義を削除する. 648 649 (3) makedepを呼ぶ際のオプションの追加 650 - Makefileのターゲット依存部(Makefile.target等)でmakedepを呼んで 651 いる場合には,$(MAKEDEP_OPTS)を追加する. 652 653 例)@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \ 747 654 -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend 748 655 749 (4) ç°¡æããã±ã¼ã¸ã¸ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è¿½å 750 - ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ï¼cfgï¼ãã¿ã¼ã²ããéä¾åé¨ããåé¢ãããããï¼ 751 ç°¡æããã±ã¼ã¸ã«å 752 ¥ããå ´åã«ã¯ï¼E_PACKAGEã«cfgãå«ããããã®è¨è¿° 753 ã追å ããï¼ 754 755 ä¾ï¼INCLUDE ../../cfg/MANIFEST 756 757 ---------------------------------------------------------------------- 758 759 TOPPERS/ASPã«ã¼ãã« 760 Release 1.3.1 ãã 1.3.2 ã¸ã®å¤æ´ç¹ 761 762 âå¤æ´ç¹ã®ãªã¹ã 763 764 ã»TMAX_RELTIMãã¦ã¼ã¶ããåç 765 §ã§ãããã¯ãã« 766 - TMAX_RELTIMã®å®ç¾©ãï¼kernel/time_event.hããinclude/t_stddef.hã« 767 移åï¼ 768 769 ã»constæå®ã®è¿½å 770 - syslog_printfï¼syslog_printï¼syslog_wri_logï¼serial_wri_datã®ãã© 771 ã¡ã¼ã¿ã«constæå®ã追å ï¼ 772 773 ã»TMIN_ISRPRIï¼TMAX_ISRPRIã®å°å 774 ¥ 775 776 ã»å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã§æéã®é転ãçãããã±ã¼ã¹ã®æ±ã 777 - å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã§æéã®é転ãçããã度æ°ãè¨æ¸¬ããã 778 ãã«ä¿®æ£ï¼ 779 780 ã»ã·ã¹ãã ãã°ã¿ã¹ã¯ã®çµäºå¦çã®ä¿®æ£ 781 - ãã°ãããã¡ã«æ®ã£ããã°æ 782 å ±ã§ãããã¨ã示ãæååãåºåããããã« 783 ä¿®æ£ï¼ 784 785 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ä¿®æ£ 786 - é åºä»ããªã¹ãã®è¦ç´ ã«å¼ã使ããããã«å¤æ´ï¼ 787 - éçAPIã®ãã©ã¡ã¼ã¿ã«åãã£ã¹ããå«ã¾ããã¨ãã¼ã¹ã§ããªããã°ã®ä¿®æ£ï¼ 788 - #pragma onceãç¨ããã¨è¡çªå·ãããããã°ã®ä¿®æ£ï¼ 789 - cfgãã¡ã¤ã«ãæå®ããªãã£ãå ´åã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®ä¿®æ£ï¼ 790 791 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã« 792 - ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãkernel_cfg.c以å¤ã®ãã¡ã¤ã«ãçæããå ´åã«å¯¾ 793 å¿ããããã®å¤æ°ï¼CFG_OBJSï¼CFG2_OUTï¼ãå°å 794 ¥ï¼ 795 796 ã»realcleanæã«åé¤ãããã¡ã¤ã« 797 - realcleanæã«åé¤ãããã¡ã¤ã«ãï¼ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ããããã® 798 å¤æ°ï¼REALCLEAN_FILESï¼ãå°å 799 ¥ï¼ 800 801 ã»ãã¹ãããã°ã©ã ã®è¿½å ã»æ¡å 802 803 804 - ã»ããã©æ©è½ã®ãã¹ã(1)ã追å ï¼ 805 - ã«ã¼ãã«ã®æ´åæ§æ¤æ»ã«ã»ããã©æ¯ã®æ¤æ»ã追å ï¼ 806 807 ã»ãã°ãã£ãã¯ã¹ 808 - éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã¹ã¿ãã¯ã®ç¢ºä¿æã®ãµã¤ãºã®èª¤ãï¼ 809 - kernel.tfä¸ã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®èª¤ãï¼ 810 - å®è¡æéåå¸éè¨ã¢ã¸ã¥ã¼ã«ã«ãããæ大å¤ã®æ±ãã®ãã°ï¼ 811 - Makefileä¸ã®APPLDIRã«è¤æ°ã®ãã£ã¬ã¯ããªãå®ç¾©ããã¦ããæã®æ±ãï¼ 812 - test/perf.cã§ï¼è¨æ¸¬åæ°ã10000åã«ãªãããã«ä¿®æ£ï¼ 813 - DVE68Kã¿ã¼ã²ããä¾åé¨ã®target.tfä¸ã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®èª¤ãï¼ 814 815 ã»ããã¥ã¡ã³ãã®å 816 817 å®ï¼ã³ã¡ã³ãã®ä¿®æ£ 818 - åããã¥ã¡ã³ãã«TOPPERSã©ã¤ã»ã³ã¹ã¨ç®æ¬¡ã追å ï¼ 819 820 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 821 822 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.3.1 â 1.3.2ï¼ 823 824 ç¹ã«ãªã 825 826 ---------------------------------------------------------------------- 827 828 TOPPERS/ASPã«ã¼ãã« 829 Release 1.3.0 ãã 1.3.1 ã¸ã®å¤æ´ç¹ 830 831 âå¤æ´ç¹ã®ãªã¹ã 832 833 ã»ã¹ã¿ãã¯ãµã¤ãºã®ã¨ã©ã¼ãã§ãã¯ã追å 834 - CRE_TSKã®stkï¼ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®å 835 é çªå°ï¼ãNULLã§ãªãå ´åã«ï¼ 836 stkszãé©åãªå¤ï¼ã¿ã¼ã²ããä¾åã®å¤ã®åæ°ï¼ã«ä¸¸ããå¦çãããï¼é© 837 åãªå¤ã§ãªãå ´åã«ã¨ã©ã¼ã¨ããããã«ä¿®æ£ï¼ 838 - DEF_ICSã®istkï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®å 839 é çªå°ï¼ã 840 NULLã§ãªãå ´åã«ï¼istkszãé©åãªå¤ï¼ã¿ã¼ã²ããä¾åã®å¤ã®åæ°ï¼ã§ 841 ãªãå ´åã®ã¨ã©ã¼ã®ãã§ãã¯ã追å ï¼ 842 843 ã»å¼·å¶å¾ 844 ã¡è¦æ±ãã¹ãã®å»æ¢ã«ä¼´ã追å ä¿®æ£ 845 - TMAX_SUSCNTã®å®ç¾©ãï¼kernel.hããitron.hã«ç§»åï¼ 846 - ref_tskã§åç 847 §ã§ããæ 848 å ±ï¼T_RTSKã®ãã£ã¼ã«ãï¼ããsuscntãåé¤ï¼ 849 850 ã»kernel_api.csvã®ä¿®æ£ 851 - åãªãã¸ã§ã¯ãã®å±æ§ã®ãã©ã¡ã¼ã¿ãï¼ç¬¦å·ç¡ãã«ä¿®æ£ï¼ 852 853 ã»kernel_def.csvã®ä¿®æ£ 854 - 符å·ä»ãã®ã·ã³ãã«ã®å®ç¾©ã«",signed"ãä»å ï¼ 855 856 ã»itron.hã®ä¿®æ£ 857 - frsm_tskã®ã¿ã¤ããã¹ã®ä¿®æ£ï¼ 858 859 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ä¿®æ£ 860 - çµè¾¼ã¿é¢æ°DUMP, TRACE, NOOPã追å ï¼ 861 - $FOREACH$ã$IF$çã®ä¸èº«ãä½ããªãã¨ãã«ï¼internal errorã«ãªãä¸å 862 · 863 åãä¿®æ£ï¼ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®é©ååï¼ï¼ 864 - $INCLUDE$å½ä»¤ã§ã¤ã³ã¯ã«ã¼ãããtfã®è¡çªå·ããããä¸å 865 ·åãä¿®æ£ï¼ 866 - 64ãããæ´æ°ãå®ç¾©ããã¦ããªãã¨ï¼CSVãã¡ã¤ã«ã§sãã¤ããã¬ã³ã¼ã 867 ã符å·ä»ãã¨æ±ãããªãä¸å 868 ·åã®ä¿®æ£ï¼ 869 - åãã£ã¹ãã®ãã¼ã¹å¦çã«é¢ããä¸å 870 ·åã®ä¿®æ£ï¼ 871 - ã¨ã©ã¼ã®èµ·ãã£ãè¡çªå·ãæ£ãããªãä¸å 872 ·åã®ä¿®æ£ï¼ 873 - åãtskidã«å¯¾ãã¦DEF_TEXãè¤æ°ããã¨ã©ã¼ã®ãã§ãã¯ãè¡ãããã«ä¿®æ£ï¼ 874 - DEF_TEXã使ç¨ããæã«ï¼TSK.TSKID[tskid]ã0ã«ãªãä¸å 875 ·åã®ä¿®æ£ï¼ 876 - DEF_INH,CFG_INT,DEF_EXCã§åããªãã¸ã§ã¯ãçªå·ã«å¯¾ããç»é²ãéè¤ã 877 ãå ´åã®ã¨ã©ã¼ãã§ãã¯ãäºéã«è¡ã£ã¦ããåé¡ã®ä¿®æ£ï¼ 878 879 ã»é 880 å¸ãããã¡ã¤ã«ã®ä¿®æ£ 881 - doc/api_spec.txt, ngki_spec.txt, sysstat.txtãé¤å¤ï¼ 882 - extensionãã£ã¬ã¯ããªãé¤å¤ï¼ 883 884 ã»ããã¥ã¡ã³ãã®ä¿®æ£ï¼ã³ã¡ã³ãã®ä¿®æ£ 885 886 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ° 887 888 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.3.0 â 1.3.1ï¼ 889 890 (1) ã¹ã¿ãã¯ãµã¤ãºã®ã¨ã©ã¼ãã§ãã¯ã«é¢ããä¿®æ£ç®æ 891 - target.tfã§kernel.tfãã¤ã³ã¯ã«ã¼ãããåã«ï¼CHECK_STKSZ_ALIGNãï¼ 892 ã¹ã¿ãã¯ãµã¤ãºãã©ã®å¤ã®åæ°ã«ãªã£ã¦ããªããã°ãªããªãããè¨å®ã 893 ãï¼ 894 ä¾ï¼$CHECK_STKSZ_ALIGN = 4$ 895 896 (2) ã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã«ã¤ã㦠897 - ã¿ã¼ã²ããä¾åé¨ã®ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã®ãã¡ã¤ã«åã¨ï¼ãã®ãã¡ã¤ 898 ã«ã«è¨è¿°ãã¹ãå 899 容ãè¦å®ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ 900 ããã®ã9.1 ããã¥ã¡ã³ããã®ç¯ãåç 901 §ãããã¨ï¼ 902 903 ---------------------------------------------------------------------- 904 905 TOPPERS/ASPã«ã¼ãã« 906 Release 1.2.1 ãã 1.3.0 ã¸ã®å¤æ´ç¹ 907 908 âå¤æ´ç¹ã®ãªã¹ã 909 910 ã»set_timï¼ã·ã¹ãã æå»ã®è¨å®ï¼ã®å»æ¢ 911 912 ã»å±æ§ã®å¤æ´ 913 - TA_DISINTãå»æ¢ãã¦ï¼TA_ENAINTãå¾©æ´»ï¼ 914 915 ã»æ¡å¼µæ©è½ã»ã¿ã¼ã²ããå®ç¾©æ©è½ã®æç¡ãå¤å¥ãããã¯ãåã®å¤æ´ 916 - TOPPERS_EXTENSION_MUTEXãTOPPERS_SUPPORT_MUTEXã«ï¼ 917 - TOPPERS_EXTENSION_PRI_LEVELãTOPPERS_SUPPORT_PRI_LEVELã«ï¼ 918 - SUPPORT_???_???ãTOPPERS_SUPPORT_???_???ã«å¤æ´ãï¼ã¿ã¼ã²ããä¾å 919 é¨ã§ã®å®ç¾©ãtarget_kernel.hã«ç§»åããï¼ 920 921 ã»ååã»å¤æ°åã»å®æ°åã®å¤æ´ 922 - SYSUTIM â SYSUTMï¼sysutim â sysutmï¼p_sysutim â p_sysutm 923 - SIO_ERDY_SND â SIO_RDY_SNDï¼SIO_ERDY_RCV â SIO_RDY_RCV 924 - sio_ierdy_snd â sio_irdy_sndï¼sio_ierdy_rcv â sio_irdy_rcv 925 926 ã»cfg1_out.cã®ã³ã³ãã¤ã«ï¼ãªã³ã¯æ¹æ³ã®å¤æ´ 927 - cfg1_out.cããtarget_cfg1_out.hãã¤ã³ã¯ã«ã¼ãããããã«ï¼ã³ã³ã㣠928 ã®ã¥ã¬ã¼ã¿ãå¤æ´ï¼ 929 - ã¿ã¼ã²ããä¾åé¨ã§target_cfg1_out.hãç¨æããï¼ 930 - cfg1_out.cã®ãªã³ã¯ã¯ï¼ã«ã¼ãã«ã¨åãæ¹æ³ãã¨ãããã«å¤æ´ï¼ 931 932 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ä¿®æ£ 933 - cfg1_out.cã«çæããå 934 容ã®å¤æ´ï¼åè¨ã¨é¢é£ï¼ï¼ 935 - boost 1.35.0ã«å¯¾å¿ï¼ 936 937 ã»ãµã³ãã«ããã°ã©ã ã®ä¿®æ£ 938 - ã¿ã¹ã¯å 939 ã§ã®ã«ã¼ãåæ°ãåºå®ããæ©è½ï¼TASK_LOOPï¼ãå°å 940 ¥ï¼ 941 942 ã»ãã°ãã£ãã¯ã¹ 943 - åºå®é·ã¡ã¢ãªãã¼ã«é åã®ç¢ºä¿æ¹æ³ï¼ 944 - DEF_TEXã®ã¨ã©ã¼ã§ï¼åé¡ã«ãªã£ãDEF_TEXã®è¡çªå·ã表示ããï¼ 945 946 ã»ç¨èªã®å¤æ´ 947 -ãå²è¾¼ã¿ããã¯ãâãå 948 ¨å²è¾¼ã¿ããã¯ã 949 950 ã»ããã¥ã¡ã³ãã®ä¿®æ£ 951 952 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ°ï¼ 953 954 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.2.1 â 1.3.0ï¼ 955 956 (1) TA_DISINTã®å»æ¢ã»TA_ENAINTã®å¾©æ´»ã«ä¼´ãä¿®æ£ç®æ 957 - TA_DISINTã使ã£ãå¤å®ãTA_ENAINTã使ã£ãå¤å®ã«å¤æ´ããï¼ 958 ä¾ï¼((intatr & TA_DISINT) == 0U) â ((intatr & TA_ENAINT) != 0U) 959 - CFG_INTã®å²è¾¼ã¿å±æ§ã«TA_DISINTãè¨å®ããã¦ããã°ï¼ãããæ¶ãï¼ 960 ä¾ï¼CFG_INT(INTNO_SIO, { TA_DISINT | INTATR_SIO, INTPRI_SIO }); 961 â CFG_INT(INTNO_SIO, { INTATR_SIO, INTPRI_SIO }); 962 - CFG_INTã®å²è¾¼ã¿å±æ§ã«TA_DISINTãè¨å®ããã¦ããªããã°ï¼TA_ENAINTã 963 å ããï¼ 964 ä¾ï¼CFG_INT(INTNO_TIMER, { INTATR_TIMER, INTPRI_TIMER }); 965 â CFG_INT(INTNO_TIMER, { TA_ENAINT | INTATR_TIMER, INTPRI_TIMER }); 966 967 (2) æ¡å¼µæ©è½ã»ã¿ã¼ã²ããå®ç¾©æ©è½ã®æç¡ãå¤å¥ãããã¯ãåã®å¤æ´ã«ä¼´ãä¿®æ£ç®æ 968 - SUPPORT_???_???ãTOPPERS_SUPPORT_???_???ã«å¤æ´ãï¼ã¿ã¼ã²ããä¾å 969 é¨ã§ã®å®ç¾©ãtarget_kernel.hã«ç§»åããï¼ 970 TOPPERS_SUPPORT_DIS_INT dis_intããµãã¼ããã 971 TOPPERS_SUPPORT_ENA_INT ena_intããµãã¼ããã 972 TOPPERS_SUPPORT_GET_UTM get_utmããµãã¼ããã 973 - makeoffset.cã§ï¼TOPPERS_EXTENSION_MUTEXãåç 974 §ãã¦ããå ´åã«ã¯ï¼ 975 TOPPERS_SUPPORT_MUTEXã«å¤æ´ããï¼ 976 977 (3) ååã»å¤æ°åã»å®æ°åã®å¤æ´ã«ä¼´ãä¿®æ£ç®æ 978 - SYSUTIM â SYSUTMï¼sysutim â sysutmï¼p_sysutim â p_sysutm 979 - SIO_ERDY_SND â SIO_RDY_SNDï¼SIO_ERDY_RCV â SIO_RDY_RCV 980 - sio_ierdy_snd â sio_irdy_sndï¼sio_ierdy_rcv â sio_irdy_rcv 981 â 982 sysutimã¨erdyã大æåå°æåãåºå¥ããã«ãµã¼ãããã¨ããï¼ 983 984 (4) cfg1_out.cã®ã³ã³ãã¤ã«ï¼ãªã³ã¯æ¹æ³ã®å¤æ´ã«ä¼´ãä¿®æ£ç®æ 985 - ã¿ã¼ã²ããä¾åé¨ã§ï¼target_cfg1_out.hãç¨æããï¼è©³ããã¯ï¼ãã¿ã¼ 986 ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ããã®7.4ç¯ãåç 987 §ï¼ 988 - æ°ãã«ç¨æãããã¡ã¤ã«ãMANIFESTã«è¿½å ããï¼ 989 990 (5) è¦åã¡ãã»ã¼ã¸ã¸ã®å¯¾å¦ 991 - Makefile.targetã«ï¼ãCOPTS := $(COPTS) -Werrorãã追å ãããã¨ã 992 æ¤è¨ããï¼ã«ã¼ãã«å 993 ã§å³å¯ãªå¥åè¦åã«ããè¦åã¡ãã»ã¼ã¸ãåºãå ´ 994 åã«ã¯ï¼ãKERNEL_CFLAGS := $(KERNEL_CFLAGS) -fno-strict-aliasingã 995 ã追å ãã¦ãããï¼ 996 997 (6) ã³ã¡ã³ãã®ä¿®æ£ 998 -ãå²è¾¼ã¿ããã¯ãâãå 999 ¨å²è¾¼ã¿ããã¯ã 1000 1001 ---------------------------------------------------------------------- 1002 1003 TOPPERS/ASPã«ã¼ãã« 1004 Release 1.2.0 ãã 1.2.1 ã¸ã®å¤æ´ç¹ 1005 1006 âå¤æ´ç¹ã®ãªã¹ã 1007 1008 ã»ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ããçµã¿è¾¼ãæ¹æ³ã®å¤æ´ 1009 - configureã«-rãªãã·ã§ã³ã追å ï¼ 1010 - sample/Makefileã®ä¿®æ£ï¼ 1011 1012 ã»Makefileã®ã³ã³ãã£ã®ã¥ã¬ã¼ã¿é¢é£é¨åã®å¤æ´ 1013 - ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾ããã¿ã¼ã²ããä¾åã®ãªãã·ã§ã³ãï¼Makefile 1014 ã®ã¿ã¼ã²ããä¾åé¨ã§è¨è¿°ããããã«å¤æ´ï¼ 1015 - ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®åãã¹ã®ã¿ã¼ã²ããä¾åã®ãã¡ã¤ã«ã¸ã®ä¾åé¢ä¿ 1016 ãï¼Makefileã®ã¿ã¼ã²ããä¾åé¨ã§è¨è¿°ããããã«å¤æ´ï¼ 1017 1018 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ°ï¼ 1019 1020 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.1.0 â 1.2.1ï¼ 1021 1022 (1) æ°ããã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¸ã®å¯¾å¿ 1023 1024 ã»target.tfä¸ã§ï¼ããããã¡ã¤ã«ã¨éè¤ããå®æ°å¤ã®å®ç¾©ãè¡ã£ã¦ããå ´åã« 1025 ãã¯ï¼target_def.cvsã«å¤æ°è¨è¿°ãè¡ãï¼éè¤ããå®ç¾©ãåé¤ããï¼ 1026 1027 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾ãããªãã·ã§ã³ã«ï¼target_def.cvsãèªã¿è¾¼ã¾ãã 1028 ãæå®ã追å ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãã2.4ç¯ã® 1029 ã(2-4-15) é 1030 ãåç 1031 §ï¼ 1032 1033 ã»target_check.tfãä½æããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãã 1034 ã7.3ç¯åç 1035 §ï¼ 1036 1037 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®åãã¹ã«å¯¾ãã¦ï¼ã¿ã¼ã²ããä¾åã®ãã¡ã¤ã«ã¸ã®ä¾å 1038 ãé¢ä¿ãå®ç¾©ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãã2.7ç¯åç 1039 §ï¼ 1040 1041 (2) ãã¼ã¿åã¨å®æ°ã®å¤æ´ã»è¿½å 1042 1043 ã»BOOLãbool_tã«ï¼TRUEã¨FALSEãããããtrueã¨falseã«å¤æ´ããï¼ER_BOOL㪠1044 ãã©ãå¤æ´ããªãããã«æ³¨æãããã¨ï¼ã³ã¡ã³ãä¸ã«è¨è¿°ããããããã®ãã¼ 1045 ãã¿åã¨å®æ°ãå¤æ´ãããã¨ï¼ 1046 1047 ã»charãchar_tã«å¤æ´ããï¼ãã ãï¼æååå®æ°ãè¨è¿°ããããã¨ãå¤ãå¼æ° 1048 ãçã¯ï¼ã³ã³ãã¤ã©ã®è¦åãé¿ããããã«ï¼char *ã®ã¾ã¾ã¨ããï¼ã¿ã¼ã²ãã 1049 ãä¾åé¨ã§æä½éå¤æ´ããªããã°ãªããªãã®ã¯ï¼ä»¥ä¸ã®2ç®æï¼ 1050 1051 - target_fput_logã®å¼æ° 1052 - sio_snd_chrã®ç¬¬2å¼æ° 1053 1054 ã»target_stddef.hï¼ã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã«ï¼ãµã¤ãº 1055 ãã®æå®ãããæµ®åå°æ°ç¹åï¼float32_tã¨double64_tï¼ï¼ãã®æ大å¤ã»æå°å¤ 1056 ãã®ãã¯ãã®å®ç¾©ã追å ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãã3.4 1057 ãç¯åç 1058 §ï¼éçºç°å¢ãGCCã§arch/gcc/tool_stddef.hãç¨ãã¦ããï¼floatå㨠1059 ãdoubleåãããããIEEE754æºæ ã®å精度浮åå°æ°ç¹æ°ã¨å精度浮åå°æ°ç¹æ° 1060 ãã§ããå ´åã«ã¯ï¼arch/gcc/tool_stddef.hãã¤ã³ã¯ã«ã¼ãããåã«ï¼ 1061 ãTOPPERS_STDFLOAT_TYPE1ããã¯ãå®ç¾©ããã°ããï¼ 1062 1063 (3) ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ãã®çµè¾¼ã¿ï¼ãªãã·ã§ã³ï¼ 1064 1065 ã»ã¿ã¼ã²ããä¾åé¨ãï¼ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ãã使ç¨ããããã« 1066 ãä¿®æ£ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãã6.11.2ç¯åç 1067 §ï¼ 1068 1069 (4) TARGETDIRå¤æ°ã®ä½¿ç¨ 1070 1071 ã»Makefileã®ã¿ã¼ã²ããä¾åé¨ã§ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªãåç 1072 §ã㦠1073 ãããç®æã§ï¼$(SRCDIR)/target/$(TARGET)ãï¼$(TARGETDIR)ã«å¤æ´ããï¼ 1074 1075 ---------------------------------------------------------------------- 1076 1077 TOPPERS/ASPã«ã¼ãã« 1078 Release 1.1.0 ãã 1.2.0 ã¸ã®å¤æ´ç¹ 1079 1080 âå¤æ´ç¹ã®ãªã¹ã 1081 1082 ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãæ°ãããã¼ã¸ã§ã³ã«å·®ãæã 1083 - ãã¹1ã¨ãã¹3ã«ãã¿ã¼ã²ããä¾åæ©è½ã追å ï¼ 1084 - FMPã«ã¼ãã«ã®ã¯ã©ã¹è¨è¿°ã«å¯¾å¿ï¼ 1085 - 追å ãã¡ã¤ã«ï¼ã¿ã¼ã²ããéä¾åé¨ï¼cfg以ä¸ãé¤ãï¼ 656 (4) 簡易パッケージへのコンフィギュレータの追加 657 - コンフィギュレータ(cfg)がターゲット非依存部から分離されたため, 658 簡易パッケージに入れる場合には,E_PACKAGEにcfgを含めるための記述 659 を追加する. 660 661 例)INCLUDE ../../cfg/MANIFEST 662 663 ---------------------------------------------------------------------- 664 665 TOPPERS/ASPカーネル 666 Release 1.3.1 から 1.3.2 への変更点 667 668 ○変更点のリスト 669 670 ・TMAX_RELTIMをユーザから参照できるマクロに 671 - TMAX_RELTIMの定義を,kernel/time_event.hからinclude/t_stddef.hに 672 移動. 673 674 ・const指定の追加 675 - syslog_printf,syslog_print,syslog_wri_log,serial_wri_datのパラ 676 メータにconst指定を追加. 677 678 ・TMIN_ISRPRI,TMAX_ISRPRIの導入 679 680 ・実行時間分布集計モジュールで時間の逆転が疑われるケースの扱い 681 - 実行時間分布集計モジュールで時間の逆転が疑われる度数を計測するよ 682 うに修正. 683 684 ・システムログタスクの終了処理の修正 685 - ログバッファに残ったログ情報であることを示す文字列を出力するように 686 修正. 687 688 ・コンフィギュレータの修正 689 - 順序付きリストの要素に式を使えるように変更. 690 - 静的APIのパラメータに型キャストが含まれるとパースできないバグの修正. 691 - #pragma onceを用いると行番号がずれるバグの修正. 692 - cfgファイルを指定しなかった場合のエラーメッセージの修正. 693 694 ・コンフィギュレータが生成するファイル 695 - コンフィギュレータがkernel_cfg.c以外のファイルを生成する場合に対 696 応するための変数(CFG_OBJS,CFG2_OUT)を導入. 697 698 ・realclean時に削除するファイル 699 - realclean時に削除するファイルを,ターゲット依存部で定義するための 700 変数(REALCLEAN_FILES)を導入. 701 702 ・テストプログラムの追加・拡充 703 - セマフォ機能のテスト(1)を追加. 704 - カーネルの整合性検査にセマフォ毎の検査を追加. 705 706 ・バグフィックス 707 - 非タスクコンテキスト用スタックの確保時のサイズの誤り. 708 - kernel.tf中のエラーメッセージの誤り. 709 - 実行時間分布集計モジュールにおける最大値の扱いのバグ. 710 - Makefile中のAPPLDIRに複数のディレクトリが定義されている時の扱い. 711 - test/perf.cで,計測回数を10000回になるように修正. 712 - DVE68Kターゲット依存部のtarget.tf中のエラーメッセージの誤り. 713 714 ・ドキュメントの充実,コメントの修正 715 - 各ドキュメントにTOPPERSライセンスと目次を追加. 716 717 ・バージョン番号の更新 718 719 ○ターゲット依存部の要修正箇所(1.3.1 → 1.3.2) 720 721 特になし 722 723 ---------------------------------------------------------------------- 724 725 TOPPERS/ASPカーネル 726 Release 1.3.0 から 1.3.1 への変更点 727 728 ○変更点のリスト 729 730 ・スタックサイズのエラーチェックを追加 731 - CRE_TSKのstk(タスクのスタック領域の先頭番地)がNULLでない場合に, 732 stkszを適切な値(ターゲット依存の値の倍数)に丸める処理をやめ,適 733 切な値でない場合にエラーとするように修正. 734 - DEF_ICSのistk(非タスクコンテキスト用のスタック領域の先頭番地)が 735 NULLでない場合に,istkszが適切な値(ターゲット依存の値の倍数)で 736 ない場合のエラーのチェックを追加. 737 738 ・強制待ち要求ネストの廃止に伴う追加修正 739 - TMAX_SUSCNTの定義を,kernel.hからitron.hに移動. 740 - ref_tskで参照できる情報(T_RTSKのフィールド)からsuscntを削除. 741 742 ・kernel_api.csvの修正 743 - 各オブジェクトの属性のパラメータを,符号無しに修正. 744 745 ・kernel_def.csvの修正 746 - 符号付きのシンボルの定義に",signed"を付加. 747 748 ・itron.hの修正 749 - frsm_tskのタイプミスの修正. 750 751 ・コンフィギュレータの修正 752 - 組込み関数DUMP, TRACE, NOOPを追加. 753 - $FOREACH$や$IF$等の中身が何もないときに,internal errorになる不具 754 合を修正(エラーメッセージの適切化). 755 - $INCLUDE$命令でインクルードしたtfの行番号がずれる不具合を修正. 756 - 64ビット整数が定義されていないと,CSVファイルでsをつけたレコード 757 が符号付きと扱われない不具合の修正. 758 - 型キャストのパース処理に関する不具合の修正. 759 - エラーの起こった行番号が正しくない不具合の修正. 760 - 同じtskidに対してDEF_TEXが複数あるエラーのチェックを行うように修正. 761 - DEF_TEXを使用した時に,TSK.TSKID[tskid]が0になる不具合の修正. 762 - DEF_INH,CFG_INT,DEF_EXCで同じオブジェクト番号に対する登録が重複し 763 た場合のエラーチェックを二重に行っている問題の修正. 764 765 ・配布するファイルの修正 766 - doc/api_spec.txt, ngki_spec.txt, sysstat.txtを除外. 767 - extensionディレクトリを除外. 768 769 ・ドキュメントの修正,コメントの修正 770 771 ・バージョン番号の更新 772 773 ○ターゲット依存部の要修正箇所(1.3.0 → 1.3.1) 774 775 (1) スタックサイズのエラーチェックに関する修正箇所 776 - target.tfでkernel.tfをインクルードする前に,CHECK_STKSZ_ALIGNを, 777 スタックサイズがどの値の倍数になっていなければならないかを設定す 778 る. 779 例)$CHECK_STKSZ_ALIGN = 4$ 780 781 (2) ターゲット依存部のユーザーズマニュアルについて 782 - ターゲット依存部のユーザーズマニュアルのファイル名と,そのファイ 783 ルに記述すべき内容を規定した.「ターゲット依存部 ポーティングガイ 784 ド」の「9.1 ドキュメント」の節を参照すること. 785 786 ---------------------------------------------------------------------- 787 788 TOPPERS/ASPカーネル 789 Release 1.2.1 から 1.3.0 への変更点 790 791 ○変更点のリスト 792 793 ・set_tim(システム時刻の設定)の廃止 794 795 ・属性の変更 796 - TA_DISINTを廃止して,TA_ENAINTを復活. 797 798 ・拡張機能・ターゲット定義機能の有無を判別するマクロ名の変更 799 - TOPPERS_EXTENSION_MUTEXをTOPPERS_SUPPORT_MUTEXに. 800 - TOPPERS_EXTENSION_PRI_LEVELをTOPPERS_SUPPORT_PRI_LEVELに. 801 - SUPPORT_???_???をTOPPERS_SUPPORT_???_???に変更し,ターゲット依存 802 部での定義をtarget_kernel.hに移動する. 803 804 ・型名・変数名・定数名の変更 805 - SYSUTIM → SYSUTM,sysutim → sysutm,p_sysutim → p_sysutm 806 - SIO_ERDY_SND → SIO_RDY_SND,SIO_ERDY_RCV → SIO_RDY_RCV 807 - sio_ierdy_snd → sio_irdy_snd,sio_ierdy_rcv → sio_irdy_rcv 808 809 ・cfg1_out.cのコンパイル/リンク方法の変更 810 - cfg1_out.cからtarget_cfg1_out.hをインクルードするように,コンフィ 811 ギュレータを変更. 812 - ターゲット依存部でtarget_cfg1_out.hを用意する. 813 - cfg1_out.cのリンクは,カーネルと同じ方法をとるように変更. 814 815 ・コンフィギュレータの修正 816 - cfg1_out.cに生成する内容の変更(前記と関連). 817 - boost 1.35.0に対応. 818 819 ・サンプルプログラムの修正 820 - タスク内でのループ回数を固定する機能(TASK_LOOP)を導入. 821 822 ・バグフィックス 823 - 固定長メモリプール領域の確保方法. 824 - DEF_TEXのエラーで,問題になったDEF_TEXの行番号を表示する. 825 826 ・用語の変更 827 -「割込みロック」→「全割込みロック」 828 829 ・ドキュメントの修正 830 831 ・バージョン番号の更新. 832 833 ○ターゲット依存部の要修正箇所(1.2.1 → 1.3.0) 834 835 (1) TA_DISINTの廃止・TA_ENAINTの復活に伴う修正箇所 836 - TA_DISINTを使った判定をTA_ENAINTを使った判定に変更する. 837 例)((intatr & TA_DISINT) == 0U) → ((intatr & TA_ENAINT) != 0U) 838 - CFG_INTの割込み属性にTA_DISINTが設定されていれば,それを消す. 839 例)CFG_INT(INTNO_SIO, { TA_DISINT | INTATR_SIO, INTPRI_SIO }); 840 → CFG_INT(INTNO_SIO, { INTATR_SIO, INTPRI_SIO }); 841 - CFG_INTの割込み属性にTA_DISINTが設定されていなければ,TA_ENAINTを 842 加える. 843 例)CFG_INT(INTNO_TIMER, { INTATR_TIMER, INTPRI_TIMER }); 844 → CFG_INT(INTNO_TIMER, { TA_ENAINT | INTATR_TIMER, INTPRI_TIMER }); 845 846 (2) 拡張機能・ターゲット定義機能の有無を判別するマクロ名の変更に伴う修正箇所 847 - SUPPORT_???_???をTOPPERS_SUPPORT_???_???に変更し,ターゲット依存 848 部での定義をtarget_kernel.hに移動する. 849 TOPPERS_SUPPORT_DIS_INT dis_intをサポートする 850 TOPPERS_SUPPORT_ENA_INT ena_intをサポートする 851 TOPPERS_SUPPORT_GET_UTM get_utmをサポートする 852 - makeoffset.cで,TOPPERS_EXTENSION_MUTEXを参照している場合には, 853 TOPPERS_SUPPORT_MUTEXに変更する. 854 855 (3) 型名・変数名・定数名の変更に伴う修正箇所 856 - SYSUTIM → SYSUTM,sysutim → sysutm,p_sysutim → p_sysutm 857 - SIO_ERDY_SND → SIO_RDY_SND,SIO_ERDY_RCV → SIO_RDY_RCV 858 - sio_ierdy_snd → sio_irdy_snd,sio_ierdy_rcv → sio_irdy_rcv 859 ★sysutimとerdyを大文字小文字を区別せずにサーチするとよい. 860 861 (4) cfg1_out.cのコンパイル/リンク方法の変更に伴う修正箇所 862 - ターゲット依存部で,target_cfg1_out.hを用意する.詳しくは,「ター 863 ゲット依存部 ポーティングガイド」の7.4節を参照. 864 - 新たに用意したファイルをMANIFESTに追加する. 865 866 (5) 警告メッセージへの対処 867 - Makefile.targetに,「COPTS := $(COPTS) -Werror」を追加することを 868 検討する.カーネル内で厳密な別名規則による警告メッセージが出る場 869 合には,「KERNEL_CFLAGS := $(KERNEL_CFLAGS) -fno-strict-aliasing」 870 を追加してもよい. 871 872 (6) コメントの修正 873 -「割込みロック」→「全割込みロック」 874 875 ---------------------------------------------------------------------- 876 877 TOPPERS/ASPカーネル 878 Release 1.2.0 から 1.2.1 への変更点 879 880 ○変更点のリスト 881 882 ・トレースログ記録のサンプルコードを組み込む方法の変更 883 - configureに-rオプションを追加. 884 - sample/Makefileの修正. 885 886 ・Makefileのコンフィギュレータ関連部分の変更 887 - コンフィギュレータに対するターゲット依存のオプションを,Makefile 888 のターゲット依存部で記述するように変更. 889 - コンフィギュレータの各パスのターゲット依存のファイルへの依存関係 890 を,Makefileのターゲット依存部で記述するように変更. 891 892 ・バージョン番号の更新. 893 894 ○ターゲット依存部の要修正箇所(1.1.0 → 1.2.1) 895 896 (1) 新しいコンフィギュレータへの対応 897 898 ・target.tf中で,ヘッダファイルと重複した定数値の定義を行っている場合に 899 は,target_def.cvsに変数記述を行い,重複した定義を削除する. 900 901 ・コンフィギュレータに対するオプションに,target_def.cvsを読み込ませる 902 指定を追加する.「ターゲット依存部 ポーティングガイド」2.4節の 903 (2-4-15) 項を参照. 904 905 ・target_check.tfを作成する.「ターゲット依存部 ポーティングガイド」 906 7.3節参照. 907 908 ・コンフィギュレータの各パスに対して,ターゲット依存のファイルへの依存 909 関係を定義する.「ターゲット依存部 ポーティングガイド」2.7節参照. 910 911 (2) データ型と定数の変更・追加 912 913 ・BOOLをbool_tに,TRUEとFALSEをそれぞれtrueとfalseに変更する.ER_BOOLな 914 どを変更しないように注意すること.コメント中に記述されたこれらのデー 915 タ型と定数も変更すること. 916 917 ・charをchar_tに変更する.ただし,文字列定数が記述されることが多い引数 918 等は,コンパイラの警告を避けるために,char *のままとする.ターゲット 919 依存部で最低限変更しなければならないのは,以下の2箇所. 920 921 - target_fput_logの引数 922 - sio_snd_chrの第2引数 923 924 ・target_stddef.h(またはそこからインクルードされるファイル)に,サイズ 925 の指定された浮動小数点型(float32_tとdouble64_t),その最大値・最小値 926 のマクロの定義を追加する.「ターゲット依存部 ポーティングガイド」3.4 927 節参照.開発環境がGCCでarch/gcc/tool_stddef.hを用いており,float型と 928 double型がそれぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点数 929 である場合には,arch/gcc/tool_stddef.hをインクルードする前に, 930 TOPPERS_STDFLOAT_TYPE1をマクロ定義すればよい. 931 932 (3) トレースログ記録のサンプルコードの組込み(オプション) 933 934 ・ターゲット依存部を,トレースログ記録のサンプルコードを使用するように 935 修正する.「ターゲット依存部 ポーティングガイド」6.11.2節参照. 936 937 (4) TARGETDIR変数の使用 938 939 ・Makefileのターゲット依存部で,ターゲット依存部ディレクトリを参照して 940 いる箇所で,$(SRCDIR)/target/$(TARGET)を,$(TARGETDIR)に変更する. 941 942 ---------------------------------------------------------------------- 943 944 TOPPERS/ASPカーネル 945 Release 1.1.0 から 1.2.0 への変更点 946 947 ○変更点のリスト 948 949 ・コンフィギュレータを新しいバージョンに差し換え 950 - パス1とパス3にもターゲット依存機能を追加. 951 - FMPカーネルのクラス記述に対応. 952 - 追加ファイル(ターゲット非依存部,cfg以下を除く) 1086 953 kernel/kernel_api.csv, kernel_def.csv, kernel_check.tf 1087 - 追å ãã¡ã¤ã«ï¼ã¿ã¼ã²ããä¾åé¨ï¼954 - 追加ファイル(ターゲット依存部) 1088 955 target_def.csv, target_check.tf 1089 - sample/Makefileãæ°ããã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«å¯¾å¿ãããï¼ 1090 - ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µã§ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®makeãä¸è¦ã«ï¼ 1091 1092 ã»ãã¼ã¿åã¨å®æ°ã®å¤æ´ã»è¿½å 1093 - BOOLåãbool_tåã«å¤æ´ï¼ 1094 BOOL â bool_tï¼TRUE â trueï¼FALSE â false 1095 å¾æ¥ã®å®ç¾©ãitron.hã«è¿½å ï¼ 1096 - charåãchar_tåã«å¤æ´ï¼ 1097 ãã ãï¼æååå®æ°ãè¨è¿°ããããã¨ãå¤ãå¼æ°çã¯ï¼ã³ã³ãã¤ã©ã® 1098 è¦åãé¿ããããã«ï¼char *ã®ã¾ã¾ã¨ããï¼ 1099 - float32_t, double64_tã®è¿½å ï¼ 1100 1101 ã»ãã¹ãããã°ã©ã ã®è¿½å ã»ä¿®æ£ 1102 - ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ããã¤ã³ã¯ã«ã¼ãããã³ã³ã㣠1103 ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®æ´çï¼ããã ã¢ããé åºã«ï¼ï¼ 1104 - ãã¹ãããã°ã©ã ã®çæã¹ã¯ãªããï¼utils/gentestï¼ãä½æï¼ 1105 - ãã¥ã¼ããã¯ã¹æ©è½ã®ãã¹ãããã°ã©ã ãçæã¹ã¯ãªãã対å¿ã«ï¼ 1106 - ãã¥ã¼ããã¯ã¹æ©è½æ¡å¼µã«test_mutex7ã追å ï¼ 1107 1108 ã»ã·ã¹ãã ãµã¼ãã¹ã®ããããã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ãè¨è¿°ã®æ´ç 1109 - syssvcã®ä¸ã®ããããã¡ã¤ã«ã¯ï¼#include "syssvc/??????.h"ã§ã¤ã³ã¯ 1110 ã«ã¼ãããï¼??????.cããã¤ã³ã¯ã«ã¼ãããå ´åãé¤ãï¼ï¼ 1111 - Makefileããï¼-I$(SRCDIR)/syssvcãåé¤ï¼ 1112 1113 ã»ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåï¼bannerï¼æ©è½ã®ç¬ç« 1114 - syssvc/banner.cfg, banner.hãä½æï¼ 1115 - syslog.cfgããé¢é£ããè¨è¿°ãåé¤ï¼ 1116 1117 ã»t_syslog.hã¨syslog.hã®å½¹å²ã®å¤æ´ 1118 - t_syslog.hã¯ï¼ã·ã¹ãã ãã°åºåãè¡ãããã®å®ç¾©ãå«ãããããã¡ã¤ 1119 ã«ã¨ãï¼ã·ã¹ãã ãã°æ©è½ãæä½ããããã®å®ç¾©ã¯ï¼syslog.hã«ç§»ãï¼ 1120 1121 ã»ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãã©ãã·ã¥æ¹æ³ã®å¤æ´ 1122 - ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®å¼·å¶ãã©ãã·ã¥æ©è½ã¯å»æ¢ãï¼æªé 1123 ä¿¡æåã®ååºãæ©è½ãæ°è¨ï¼ãããç¨ããå¼·å¶ãã©ãã·ã¥å¦çã¯ï¼ã·ã¹ 1124 ãã ãã°ã¿ã¹ã¯ã®çµäºå¦çã«ã¼ãã³å´ã§å®æ½ï¼ 1125 1126 ã»ã¿ã¹ã¯ãã£ã¹ãããã®è¦å¦ã®å¤å®æ¹æ³ã®å¤æ´ 1127 - ã¿ã¹ã¯ãã£ã¹ãããã®å¿ 1128 è¦ãªç¶æ 1129 ã«ããé¢æ°ãï¼ãã¹ã¦ï¼ã¿ã¹ã¯ãã£ã¹ 1130 ãããã®è¦å¦ãè¿ãããã«ãï¼p_runtskã¨p_schedtskã®æ¯è¼ã«ããå¤å® 1131 ããªãã¹ã使ããªãããã«ä¿®æ£ï¼ 1132 1133 ã»ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ãã®ä½¿ç¨æ¹æ³ãè¦å® 1134 - ãã¼ãã£ã³ã°ã¬ã¤ãã®6.11.2ç¯ã«ï¼ã¿ã¼ã²ããä¾åé¨ã§ãã¬ã¼ã¹ãã°è¨ 1135 é²ã®ãµã³ãã«ã³ã¼ãã使ç¨ããæ¹æ³ãè¦å®ï¼ 1136 - DVE68Kã¿ã¼ã²ããä¾åé¨ãããã«å¾ãããã«ä¿®æ£ï¼ 1137 1138 ã»TARGETDIRå¤æ°ã®å°å 1139 ¥ 1140 - sample/Makefileã§ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªã示ãå¤æ° 1141 TARGETDIRãå®ç¾©ï¼ 1142 - ããã使ãããã«ï¼ã¿ã¼ã²ããä¾åé¨ãä¿®æ£ï¼ 1143 1144 ã»ãã®ä»ã®ãã°ãã£ãã¯ã¹ 1145 - kernel_rename.defï¼log_???_entry â log_???_enter 1146 1147 ã»ãã®ä»ã®ä¿®æ£ 1148 - T_RLOG â T_SYSLOG_RLOG 1149 - syssvcã®ä¸ã®ããããã¡ã¤ã«ã«ãthrow()ãå 1150 ¥ããï¼ 1151 - makereleaseï¼RELEAEãã£ã¬ã¯ããªããªããã°ä½ãï¼ 1152 1153 ã»ããã¥ã¡ã³ãã®å 1154 1155 å®ï¼ã³ã¡ã³ãã®è¿½å ã»ä¿®æ£ï¼ 1156 - doc/migration.txtãä½æï¼ç¾æç¹ã§ã¯æªå®æï¼ï¼ 1157 1158 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ°ï¼ 1159 1160 âã¿ã¼ã²ããä¾åé¨ã®è¦ä¿®æ£ç®æï¼1.1.0 â 1.2.0ï¼ 1161 1162 (1) æ°ããã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã¸ã®å¯¾å¿ 1163 1164 ã»target.tfä¸ã§ï¼ããããã¡ã¤ã«ã¨éè¤ããå®æ°å¤ã®å®ç¾©ãè¡ã£ã¦ããå ´åã« 1165 ãã¯ï¼target_def.cvsã«å¤æ°è¨è¿°ãè¡ãï¼éè¤ããå®ç¾©ãåé¤ããï¼ 1166 1167 ã»target_check.tfãä½æããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãã 1168 ã7.3ç¯åç 1169 §ï¼ 1170 1171 (2) ãã¼ã¿åã¨å®æ°ã®å¤æ´ã»è¿½å 1172 1173 ã»BOOLãbool_tã«ï¼TRUEã¨FALSEãããããtrueã¨falseã«å¤æ´ããï¼ER_BOOL㪠1174 ãã©ãå¤æ´ããªãããã«æ³¨æãããã¨ï¼ã³ã¡ã³ãä¸ã«è¨è¿°ããããããã®ãã¼ 1175 ãã¿åã¨å®æ°ãå¤æ´ãããã¨ï¼ 1176 1177 ã»charãchar_tã«å¤æ´ããï¼ãã ãï¼æååå®æ°ãè¨è¿°ããããã¨ãå¤ãå¼æ° 1178 ãçã¯ï¼ã³ã³ãã¤ã©ã®è¦åãé¿ããããã«ï¼char *ã®ã¾ã¾ã¨ããï¼ã¿ã¼ã²ãã 1179 ãä¾åé¨ã§æä½éå¤æ´ããªããã°ãªããªãã®ã¯ï¼ä»¥ä¸ã®2ç®æï¼ 1180 1181 - target_fput_logã®å¼æ° 1182 - sio_snd_chrã®ç¬¬2å¼æ° 1183 1184 ã»target_stddef.hï¼ã¾ãã¯ããããã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«ï¼ã«ï¼ãµã¤ãº 1185 ãã®æå®ãããæµ®åå°æ°ç¹åï¼float32_tã¨double64_tï¼ï¼ãã®æ大å¤ã»æå°å¤ 1186 ãã®ãã¯ãã®å®ç¾©ã追å ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãã3.4 1187 ãç¯åç 1188 §ï¼éçºç°å¢ãGCCã§arch/gcc/tool_stddef.hãç¨ãã¦ããï¼floatå㨠1189 ãdoubleåãããããIEEE754æºæ ã®å精度浮åå°æ°ç¹æ°ã¨å精度浮åå°æ°ç¹æ° 1190 ãã§ããå ´åã«ã¯ï¼arch/gcc/tool_stddef.hãã¤ã³ã¯ã«ã¼ãããåã«ï¼ 1191 ãTOPPERS_STDFLOAT_TYPE1ããã¯ãå®ç¾©ããã°ããï¼ 1192 1193 (3) ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ãã®ä½¿ç¨æ¹æ³ã«å¾ã£ãä¿®æ£ï¼ãªãã·ã§ã³ï¼ 1194 1195 ã»ã¿ã¼ã²ããä¾åé¨ãï¼ãã¬ã¼ã¹ãã°è¨é²ã®ãµã³ãã«ã³ã¼ãã使ç¨ããããã« 1196 ãä¿®æ£ããï¼ãã¿ã¼ã²ããä¾åé¨ ãã¼ãã£ã³ã°ã¬ã¤ãã6.11.2ç¯åç 1197 §ï¼ 1198 1199 (4) TARGETDIRå¤æ°ã®ä½¿ç¨ 1200 1201 ã»Makefileã®ã¿ã¼ã²ããä¾åé¨ã§ï¼ã¿ã¼ã²ããä¾åé¨ãã£ã¬ã¯ããªãåç 1202 §ã㦠1203 ãããç®æã§ï¼$(SRCDIR)/target/$(TARGET)ãï¼$(TARGETDIR)ã«å¤æ´ããï¼ 1204 1205 ---------------------------------------------------------------------- 1206 1207 TOPPERS/ASPã«ã¼ãã« 1208 Release 1.0.0 ãã 1.1.0 ã¸ã®å¤æ´ç¹ 1209 1210 âå¤æ´ç¹ã®ãªã¹ã 1211 1212 ã»frsm_tskãã«ã¼ãã«ããåé¤ï¼itron.hã«ãã¯ãå®ç¾©ã¨ãã¦æ®ã 1213 1214 ã»ã«ã¼ãã«ã®ãã¬ã¼ã¹ãã°æ©è½ã®æ¹ä¿® 1215 - ãã¬ã¼ã¹ãã°ãã¯ãã使ãå´ã®ãã¡ã¤ã«ã§ï¼ããã©ã«ãå®ç¾©ãä¸ããï¼ 1216 - nulltraceãå»æ¢ï¼logtraceãä¿®æ£ï¼ 1217 - ã¿ã¼ã²ããä¾åé¨ã§ã®ãã¬ã¼ã¹ãã°åå¾æ¹æ³ãæ¨æºåï¼ 1218 - INTHDR_ENTRYã¨EXCHDR_ENTRYã«ãã©ã¡ã¼ã¿ã追å ï¼ 1219 - target_putcãï¼target_fput_logã«ãªãã¼ã ï¼ 1220 1221 ã»ã·ã¹ãã ãã°æ©è½ãã«ã¼ãã«ããå¤ãã¦ï¼ã·ã¹ãã ãµã¼ãã¹ã®ä½ç½®ä»ãã« 1222 - syslog.cï¼syslog.hï¼banner.cãï¼kernelããsyssvcã«ç§»åï¼ 1223 - ã·ã¹ãã ãã°æ©è½ã®ãµã¼ãã¹ã³ã¼ã«ã®å称ã«syslog_ãä»å ï¼ 1224 1225 ã»ã·ã¹ãã ãµã¼ãã¹ã®ãã£ã¬ã¯ããªã®ä½ç½®ä»ãã®æ確å 1226 - logtask.hã¨serial.hãï¼includeããsyssvcã«ç§»åï¼ 1227 - vasyslog.cãï¼libraryããsyssvcã«ç§»åï¼ 1228 1229 ã»ãªãªã¼ã¹ããã±ã¼ã¸ã®å½¢æ 1230 ãæ´å 1231 - utils/makereleaseãä½æï¼utils/genmanifestãåé¤ï¼ 1232 - MANIFESTãã¡ã¤ã«ã«ï¼ããã±ã¼ã¸åã¨ãã¼ã¸ã§ã³çªå·ãè¨è¿°ï¼ 1233 - MANIFESTãã¡ã¤ã«ã®INCLUDEè¨è¿°ãå¤æ´ï¼ 1234 1235 ã»åºå 1236 ¥å£å¦çã®çªå°ã®å¤æ°ï¼ãã£ã¼ã«ãåã®å¤æ´ 1237 - å²è¾¼ã¿ãã³ãã©ï¼CPUä¾å¤ãã³ãã©ã®åºå 1238 ¥å£å¦çã®çªå°ï¼FPåï¼ã®å¤æ°ï¼ 1239 ãã£ã¼ã«ãåãint_entryï¼exc_entryã«å¤æ´ï¼ã³ã¡ã³ããä¿®æ£ï¼ 1240 1241 ã»DVE68Kï¼M68Kä¾åé¨ã®ä¿®æ£ï¼ 1242 - target.tfä¸ã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®ä¿®æ£ï¼ 1243 - logtraceã使ãããã«ä¿®æ£ï¼ 1244 1245 ã»ãã®ä»ã®ä¿®æ£ï¼ 1246 - åºå®é·ã¡ã¢ãªãã¼ã«åæåãããã¯ã®çæã«é¢ãããã°ãä¿®æ£ï¼ 1247 - configureã§ï¼cfgãçæããã¦ãããã®ãã§ãã¯ãå³å¯åï¼ 1248 - sample/Makefileã«ããã¦ï¼ã©ã¤ãã©ãªã«é¢ããä¾åè¨è¿°ã®ä¿®æ£ï¼ 1249 - sample/sample1.cfgã«ããã¦ï¼ã·ã¹ãã ãµã¼ãã¹ã®å®ç¾©é ãå¤æ´ï¼ 1250 - extension/MANIFESTã«ï¼MANIFESTã追å ï¼ 1251 1252 ã»ããã¥ã¡ã³ãã®å 1253 1254 å®ï¼ã³ã¡ã³ãã®è¿½å ã»ä¿®æ£ï¼ 1255 1256 ã»ãã¼ã¸ã§ã³çªå·ã®æ´æ°ï¼ 1257 1258 âã¿ã¼ã²ããä¾åé¨ã®ä¿®æ£ç®æï¼1.0.0 â 1.1.0ï¼ 1259 1260 ã»ã«ã¼ãã«ã®ãã¬ã¼ã¹ãã°æ©è½ã®ä¸ã§ï¼ã¿ã¼ã²ããä¾åé¨ã§å®è£ 1261 ããå¿ 1262 è¦ãã 1263 ãããã®ãå®è£ 1264 ããï¼è©³ããã¯ï¼porting.txtã®6.1.2ç¯ï¼6.5.2ç¯ï¼6.6.1ç¯ï¼ 1265 ã6.7.1ç¯ãåç 1266 §ãããã¨ï¼ 1267 1268 ã»INTHDR_ENTRYã¨EXCHDR_ENTRYã«2çªç®ã®ãã©ã¡ã¼ã¿ã追å ãããã®ã«å¯¾å¿ããï¼ 1269 1270 ã»TARGET_NAMEã¨COPYRIGHT_TARGETãï¼target_config.hããtarget_syssvc.hã« 1271 ã移åããï¼COPYRIGHT_TARGETã¯TARGET_COPYRIGHTã«ãªãã¼ã ããï¼ 1272 1273 ã»target_putcãtarget_fput_logã«ãªãã¼ã ãï¼ãã®å®£è¨ãtarget_config.hã 1274 ããtarget_syssvc.hã«ç§»åããï¼é¢æ°å®ç¾©ã¯ï¼target_config.cã«ç½®ããã¾ã¾ 1275 ãã§ããï¼é¢æ°å®£è¨ã»å®ç¾©ã®ä¸ã®ã³ã¡ã³ããä¿®æ£ããï¼ 1276 1277 ã»å²è¾¼ã¿ãã³ãã©ã®åºå 1278 ¥å£å¦çã®çªå°ï¼FPåï¼ã®å¤æ°ï¼ãã£ã¼ã«ãåãinthdr 1279 ãããint_entryã«ï¼CPUä¾å¤ãã³ãã©ã®åºå 1280 ¥å£å¦çã®çªå°ï¼FPåï¼ã®å¤æ°ï¼ 1281 ããã£ã¼ã«ãåãexchdrããexct_entryã«ï¼ããããå¤æ´ããï¼ããã«é¢é£ã 1282 ããx_define_inhã¨x_define_excã®ã³ã¡ã³ããä¿®æ£ããï¼ 1283 1284 ã»ãã¬ã¼ã¹ãã°ãè¨é²ããªãå ´åã«ã¯ï¼target_config.hããã#include 1285 ã"nulltrace/trace_config.h"ããåé¤ããï¼ 1286 1287 ã»ãã¬ã¼ã¹ãã°ãè¨é²ããå ´åã«ã¯ï¼target_syssvc.hã«ã#include 1288 ã"logtrace/trace_config.h"ãã追å ããï¼ã¾ãï¼target_config.hä¸ã® 1289 ãã#include "logtrace/trace_config.h"ãã®ä½ç½®ãåã®æ¹ã«ç§»åããï¼ 1290 1291 ã»MANIFESTã¨E_PACKAGEãä½æï¼ä¿®æ£ããï¼MANIFESTä¸ã«ï¼å¿ 1292 è¦ã«å¿ãã¦ï¼ 1293 ãPACKAGEãã£ã¬ã¯ãã£ãã¨VERSIONãã£ã¬ã¯ãã£ãã追å ããï¼ã¾ãï¼ 1294 ãINCLUDEãã£ã¬ã¯ãã£ãã®ãã©ã¡ã¼ã¿ãï¼ãã£ã¬ã¯ããªåãããã¡ã¤ã«åã«å¤ 1295 ãæ´ããï¼ã¿ã¼ã²ããã·ã¹ãã æ¯ã«ï¼E_PACKAGEãä½æããï¼è©³ããã¯ï¼ 1296 ãuser.txtã®ï¼ç« ã¨porting.txtã®9.1ç¯ãåç 1297 §ãããã¨ï¼ 1298 1299 ---------------------------------------------------------------------- 956 - sample/Makefileを新しいコンフィギュレータに対応させる. 957 - ミューテックス機能拡張でコンフィギュレータのmakeを不要に. 958 959 ・データ型と定数の変更・追加 960 - BOOL型をbool_t型に変更. 961 BOOL → bool_t,TRUE → true,FALSE → false 962 従来の定義をitron.hに追加. 963 - char型をchar_t型に変更. 964 ただし,文字列定数が記述されることが多い引数等は,コンパイラの 965 警告を避けるために,char *のままとする. 966 - float32_t, double64_tの追加. 967 968 ・テストプログラムの追加・修正 969 - システムコンフィギュレーションファイルからインクルードするコンフィ 970 ギュレーションファイルの整理(ボトムアップ順序に). 971 - テストプログラムの生成スクリプト(utils/gentest)を作成. 972 - ミューテックス機能のテストプログラムを生成スクリプト対応に. 973 - ミューテックス機能拡張にtest_mutex7を追加. 974 975 ・システムサービスのヘッダファイルのインクルード記述の整理 976 - syssvcの下のヘッダファイルは,#include "syssvc/??????.h"でインク 977 ルードする(??????.cからインクルードする場合を除く). 978 - Makefileから,-I$(SRCDIR)/syssvcを削除. 979 980 ・カーネル起動メッセージの出力(banner)機能の独立 981 - syssvc/banner.cfg, banner.hを作成. 982 - syslog.cfgから関連する記述を削除. 983 984 ・t_syslog.hとsyslog.hの役割の変更 985 - t_syslog.hは,システムログ出力を行うための定義を含むヘッダファイ 986 ルとし,システムログ機能を操作するための定義は,syslog.hに移す. 987 988 ・シリアルインタフェースドライバのフラッシュ方法の変更 989 - シリアルインタフェースドライバの強制フラッシュ機能は廃止し,未送 990 信文字の取出し機能を新設.これを用いた強制フラッシュ処理は,シス 991 テムログタスクの終了処理ルーチン側で実施. 992 993 ・タスクディスパッチの要否の判定方法の変更 994 - タスクディスパッチの必要な状態にする関数を,すべて,タスクディス 995 パッチの要否を返すようにし,p_runtskとp_schedtskの比較による判定 996 をなるべく使わないように修正. 997 998 ・トレースログ記録のサンプルコードの使用方法を規定 999 - ポーティングガイドの6.11.2節に,ターゲット依存部でトレースログ記 1000 録のサンプルコードを使用する方法を規定. 1001 - DVE68Kターゲット依存部をそれに従うように修正. 1002 1003 ・TARGETDIR変数の導入 1004 - sample/Makefileで,ターゲット依存部ディレクトリを示す変数 1005 TARGETDIRを定義. 1006 - これを使うように,ターゲット依存部を修正. 1007 1008 ・その他のバグフィックス 1009 - kernel_rename.def:log_???_entry → log_???_enter 1010 1011 ・その他の修正 1012 - T_RLOG → T_SYSLOG_RLOG 1013 - syssvcの下のヘッダファイルにもthrow()を入れる. 1014 - makerelease:RELEAEディレクトリがなければ作る. 1015 1016 ・ドキュメントの充実.コメントの追加・修正. 1017 - doc/migration.txtを作成(現時点では未完成). 1018 1019 ・バージョン番号の更新. 1020 1021 ○ターゲット依存部の要修正箇所(1.1.0 → 1.2.0) 1022 1023 (1) 新しいコンフィギュレータへの対応 1024 1025 ・target.tf中で,ヘッダファイルと重複した定数値の定義を行っている場合に 1026 は,target_def.cvsに変数記述を行い,重複した定義を削除する. 1027 1028 ・target_check.tfを作成する.「ターゲット依存部 ポーティングガイド」 1029 7.3節参照. 1030 1031 (2) データ型と定数の変更・追加 1032 1033 ・BOOLをbool_tに,TRUEとFALSEをそれぞれtrueとfalseに変更する.ER_BOOLな 1034 どを変更しないように注意すること.コメント中に記述されたこれらのデー 1035 タ型と定数も変更すること. 1036 1037 ・charをchar_tに変更する.ただし,文字列定数が記述されることが多い引数 1038 等は,コンパイラの警告を避けるために,char *のままとする.ターゲット 1039 依存部で最低限変更しなければならないのは,以下の2箇所. 1040 1041 - target_fput_logの引数 1042 - sio_snd_chrの第2引数 1043 1044 ・target_stddef.h(またはそこからインクルードされるファイル)に,サイズ 1045 の指定された浮動小数点型(float32_tとdouble64_t),その最大値・最小値 1046 のマクロの定義を追加する.「ターゲット依存部 ポーティングガイド」3.4 1047 節参照.開発環境がGCCでarch/gcc/tool_stddef.hを用いており,float型と 1048 double型がそれぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点数 1049 である場合には,arch/gcc/tool_stddef.hをインクルードする前に, 1050 TOPPERS_STDFLOAT_TYPE1をマクロ定義すればよい. 1051 1052 (3) トレースログ記録のサンプルコードの使用方法に従った修正(オプション) 1053 1054 ・ターゲット依存部を,トレースログ記録のサンプルコードを使用するように 1055 修正する.「ターゲット依存部 ポーティングガイド」6.11.2節参照. 1056 1057 (4) TARGETDIR変数の使用 1058 1059 ・Makefileのターゲット依存部で,ターゲット依存部ディレクトリを参照して 1060 いる箇所で,$(SRCDIR)/target/$(TARGET)を,$(TARGETDIR)に変更する. 1061 1062 ---------------------------------------------------------------------- 1063 1064 TOPPERS/ASPカーネル 1065 Release 1.0.0 から 1.1.0 への変更点 1066 1067 ○変更点のリスト 1068 1069 ・frsm_tskをカーネルから削除.itron.hにマクロ定義として残す 1070 1071 ・カーネルのトレースログ機能の改修 1072 - トレースログマクロを使う側のファイルで,デフォルト定義を与える. 1073 - nulltraceを廃止.logtraceを修正. 1074 - ターゲット依存部でのトレースログ取得方法を標準化. 1075 - INTHDR_ENTRYとEXCHDR_ENTRYにパラメータを追加. 1076 - target_putcを,target_fput_logにリネーム. 1077 1078 ・システムログ機能をカーネルから外して,システムサービスの位置付けに 1079 - syslog.c,syslog.h,banner.cを,kernelからsyssvcに移動. 1080 - システムログ機能のサービスコールの名称にsyslog_を付加. 1081 1082 ・システムサービスのディレクトリの位置付けの明確化 1083 - logtask.hとserial.hを,includeからsyssvcに移動. 1084 - vasyslog.cを,libraryからsyssvcに移動. 1085 1086 ・リリースパッケージの形態を整備 1087 - utils/makereleaseを作成.utils/genmanifestを削除. 1088 - MANIFESTファイルに,パッケージ名とバージョン番号を記述. 1089 - MANIFESTファイルのINCLUDE記述を変更. 1090 1091 ・出入口処理の番地の変数/フィールド名の変更 1092 - 割込みハンドラ/CPU例外ハンドラの出入口処理の番地(FP型)の変数/ 1093 フィールド名をint_entry/exc_entryに変更.コメントも修正. 1094 1095 ・DVE68K/M68K依存部の修正. 1096 - target.tf中のエラーメッセージの修正. 1097 - logtraceを使うように修正. 1098 1099 ・その他の修正. 1100 - 固定長メモリプール初期化ブロックの生成に関するバグを修正. 1101 - configureで,cfgが生成されているかのチェックを厳密化. 1102 - sample/Makefileにおいて,ライブラリに関する依存記述の修正. 1103 - sample/sample1.cfgにおいて,システムサービスの定義順を変更. 1104 - extension/MANIFESTに,MANIFESTを追加. 1105 1106 ・ドキュメントの充実.コメントの追加・修正. 1107 1108 ・バージョン番号の更新. 1109 1110 ○ターゲット依存部の修正箇所(1.0.0 → 1.1.0) 1111 1112 ・カーネルのトレースログ機能の中で,ターゲット依存部で実装する必要があ 1113 るものを実装する.詳しくは,porting.txtの6.1.2節,6.5.2節,6.6.1節, 1114 6.7.1節を参照すること. 1115 1116 ・INTHDR_ENTRYとEXCHDR_ENTRYに2番目のパラメータが追加されたのに対応する. 1117 1118 ・TARGET_NAMEとCOPYRIGHT_TARGETを,target_config.hからtarget_syssvc.hに 1119 移動する.COPYRIGHT_TARGETはTARGET_COPYRIGHTにリネームする. 1120 1121 ・target_putcをtarget_fput_logにリネームし,その宣言をtarget_config.hか 1122 らtarget_syssvc.hに移動する.関数定義は,target_config.cに置いたまま 1123 でよい.関数宣言・定義の上のコメントを修正する. 1124 1125 ・割込みハンドラの出入口処理の番地(FP型)の変数/フィールド名をinthdr 1126 からint_entryに,CPU例外ハンドラの出入口処理の番地(FP型)の変数/ 1127 フィールド名をexchdrからexct_entryに,それぞれ変更する.これに関連す 1128 るx_define_inhとx_define_excのコメントを修正する. 1129 1130 ・トレースログを記録しない場合には,target_config.hから「#include 1131 "nulltrace/trace_config.h"」を削除する. 1132 1133 ・トレースログを記録する場合には,target_syssvc.hに「#include 1134 "logtrace/trace_config.h"」を追加する.また,target_config.h中の 1135 「#include "logtrace/trace_config.h"」の位置を前の方に移動する. 1136 1137 ・MANIFESTとE_PACKAGEを作成/修正する.MANIFEST中に,必要に応じて, 1138 PACKAGEディレクティブとVERSIONディレクティブを追加する.また, 1139 INCLUDEディレクティブのパラメータを,ディレクトリ名からファイル名に変 1140 更する.ターゲットシステム毎に,E_PACKAGEを作成する.詳しくは, 1141 user.txtの2章とporting.txtの9.1節を参照すること. 1142 1143 ---------------------------------------------------------------------- -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.