Changeset 315 for rubycfg_asp/trunk/asp_dcre/doc/extension.txt
- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note:
See TracChangeset
for help on using the changeset viewer.