- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_kernel_impl.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 47 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 * 免責すること. 33 * 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * kernel_impl.h ã®ã³ã¢ä¾åé¨ï¼ARMç¨ï¼60 * 61 * ãã®ããããã¡ã¤ã«ã¯ï¼target_kernel_impl.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯62 * ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã63 * ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼44 * kernel_impl.hのコア依存部(ARM用) 45 * 46 * このヘッダファイルは,target_kernel_impl.h(または,そこからインク 47 * ルードされるファイル)のみからインクルードされる.他のファイルから 48 * 直接インクルードしてはならない. 64 49 */ 65 50 … … 70 55 71 56 /* 72 * ã¨ã©ã¼ãã§ãã¯æ¹æ³ã®æå®73 */ 74 #define CHECK_STKSZ_ALIGN 8 /* ã¹ã¿ãã¯ãµã¤ãºã®ã¢ã©ã¤ã³åä½*/75 #define CHECK_INTPTR_ALIGN 4 /* intptr_t åã®å¤æ°ã®ã¢ã©ã¤ã³åä½*/76 #define CHECK_INTPTR_NONNULL /* intptr_t åã®å¤æ°ã®éNULLãã§ãã¯*/57 * エラーチェック方法の指定 58 */ 59 #define CHECK_STKSZ_ALIGN 8 /* スタックサイズのアライン単位 */ 60 #define CHECK_INTPTR_ALIGN 4 /* intptr_t型の変数のアライン単位 */ 61 #define CHECK_INTPTR_NONNULL /* intptr_t型の変数の非NULLチェック */ 77 62 #ifndef __thumb__ 78 #define CHECK_FUNC_ALIGN 4 /* é¢æ°ã®ã¢ã©ã¤ã³åä½*/63 #define CHECK_FUNC_ALIGN 4 /* 関数のアライン単位 */ 79 64 #endif /* __thumb__ */ 80 #define CHECK_FUNC_NONNULL /* é¢æ°ã®éNULLãã§ãã¯*/81 #define CHECK_STACK_ALIGN 8 /* ã¹ã¿ãã¯é åã®ã¢ã©ã¤ã³åä½*/82 #define CHECK_STACK_NONNULL /* ã¹ã¿ãã¯é åã®éNULLãã§ãã¯*/83 #define CHECK_MPF_ALIGN 4 /* åºå®é·ã¡ã¢ãªãã¼ã«é åã®ã¢ã©ã¤ã³åä½*/84 #define CHECK_MPF_NONNULL /* åºå®é·ã¡ã¢ãªãã¼ã«é åã®éNULLãã§ãã¯*/85 #define CHECK_MB_ALIGN 4 /* 管çé åã®ã¢ã©ã¤ã³åä½*/65 #define CHECK_FUNC_NONNULL /* 関数の非NULLチェック */ 66 #define CHECK_STACK_ALIGN 8 /* スタック領域のアライン単位 */ 67 #define CHECK_STACK_NONNULL /* スタック領域の非NULLチェック */ 68 #define CHECK_MPF_ALIGN 4 /* 固定長メモリプール領域のアライン単位 */ 69 #define CHECK_MPF_NONNULL /* 固定長メモリプール領域の非NULLチェック */ 70 #define CHECK_MB_ALIGN 4 /* 管理領域のアライン単位 */ 86 71 87 72 #ifndef TOPPERS_MACRO_ONLY 88 73 89 74 /* 90 * ã¬ãã£ãã¥ã¼ãµã¼ãã®ããã®ãããããããµã¼ãé¢æ° 91 * 92 * CLZå½ä»¤ã¯æä¸ä½ããããããµã¼ãããããï¼æä¸ä½ããããæé«åªå 93 度㫠94 * 対å¿ãããï¼ 75 * レディキューサーチのためのビットマップサーチ関数 76 * 77 * CLZ命令は最上位ビットからサーチするため,最上位ビットを最高優先度に 78 * 対応させる. 95 79 */ 96 80 #if __TARGET_ARCH_ARM >= 6 … … 108 92 109 93 /* 110 * ã³ã³ããã¹ãã®åç 111 § 112 * 113 * ARMä¾åé¨ã§ã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã¨éã¿ã¹ã¯ã³ã³ããã¹ãã®ä¸¡æ¹ãã¹ã¼ 114 * ããã¤ã¶ã¢ã¼ãã§åä½ãããããï¼ããã»ããµã¢ã¼ãã§å¤æãããã¨ã㧠115 * ããªãï¼ãã®ããï¼å²è¾¼ã¿ãã³ãã©ï¼CPUä¾å¤ãã³ãã©ã®ãã¹ã段æ°ï¼ãã 116 * ãï¼ä¾å¤ãã¹ãã«ã¦ã³ãã¨å¼ã¶ï¼ã§ç®¡çãï¼ä¾å¤ãã¹ãã«ã¦ã³ãã0ã®æã« 117 * ã¿ã¹ã¯ã³ã³ããã¹ãï¼0ãã大ããå ´åã«éã¿ã¹ã¯ã³ã³ããã¹ãã§ããã¨å¤ 118 * æããï¼ 119 */ 120 extern uint32_t excpt_nest_count; /* ä¾å¤ãã¹ãã«ã¦ã³ã */ 94 * コンテキストの参照 95 * 96 * ARM依存部では,タスクコンテキストと非タスクコンテキストの両方をスー 97 * パバイザモードで動作させるため,プロセッサモードで判断することがで 98 * きない.そのため,割込みハンドラ/CPU例外ハンドラのネスト段数(これ 99 * を,例外ネストカウントと呼ぶ)で管理し,例外ネストカウントが0の時に 100 * タスクコンテキスト,0より大きい場合に非タスクコンテキストであると判 101 * 断する. 102 */ 103 extern uint32_t excpt_nest_count; /* 例外ネストカウント */ 121 104 122 105 Inline bool_t … … 129 112 130 113 /* 131 * TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã®å®ç¾ 132 * 133 * ARMã³ã¢ä¾åé¨ã§ã¯ï¼å²è¾¼ã¿ã®æ±ãã«é¢ãã¦ï¼æ¬¡ã®2ã¤ã®æ¹æ³ããµãã¼ãã 134 * ãï¼ 135 * 136 * (1) ã«ã¼ãã«ãåä½ã§ä½¿ç¨ããå ´åãSafeGã®ãã³ã»ãã¥ã¢ã¢ã¼ãã§ä½¿ç¨ã 137 * ãå ´åï¼IRQãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ï¼FIQãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¨ã 138 * ãï¼ããã©ã«ãã§ã¯ï¼ãã®æ¹æ³ã使ç¨ãããï¼ 139 * 140 * (2) SafeGã®ã»ãã¥ã¢ã¢ã¼ãã§ä½¿ç¨ããå ´åï¼FIQãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ 141 * ã¨ãï¼ã«ã¼ãã«ã®åä½ä¸ã¯IRQã常ã«ãã¹ã¯ããï¼ãã®æ¹æ³ã使ç¨ããå ´å 142 * ã«ã¯ï¼TOPPERS_SAFEG_SECUREããã¯ãå®ç¾©ããï¼ 143 * 144 * TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã®ä¸ã§ï¼å²è¾¼ã¿åªå 145 度ãã¹ã¯ã¨å²è¾¼ã¿è¦æ±ç¦ 146 * æ¢ãã©ã°ã«é¢ãã¦ã¯ï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦å®ç¾æ¹æ³ãç°ãªãããï¼ 147 * ARMã³ã¢ä¾åé¨ã§ã¯æ±ããªãï¼ 148 */ 149 150 /* 151 * FIQã¨IRQã®ä¸¡æ¹ãç¦æ¢ããCPSRã®ããããã¿ã¼ã³ 114 * TOPPERS標準割込み処理モデルの実現 115 * 116 * ARMコア依存部では,割込みの扱いに関して,次の2つの方法をサポートす 117 * る. 118 * 119 * (1) カーネルを単体で使用する場合やSafeGのノンセキュアモードで使用す 120 * る場合:IRQをカーネル管理の割込み,FIQをカーネル管理外の割込みとす 121 * る.デフォルトでは,この方法が使用される. 122 * 123 * (2) SafeGのセキュアモードで使用する場合:FIQをカーネル管理の割込み 124 * とし,カーネルの動作中はIRQを常にマスクする.この方法を使用する場合 125 * には,TOPPERS_SAFEG_SECUREをマクロ定義する. 126 * 127 * TOPPERS標準割込み処理モデルの中で,割込み優先度マスクと割込み要求禁 128 * 止フラグに関しては,割込みコントローラによって実現方法が異なるため, 129 * ARMコア依存部では扱わない. 130 */ 131 132 /* 133 * FIQとIRQの両方を禁止するCPSRのビットパターン 152 134 */ 153 135 #ifndef TOPPERS_MACRO_ONLY … … 158 140 159 141 /* 160 * CPUããã¯ã»å²è¾¼ã¿ããã¯ã§ãªãç¶æ 161 ã§ã®CPSRã®ããããã¿ã¼ã³ 142 * CPUロック・割込みロックでない状態でのCPSRのビットパターン 162 143 */ 163 144 #ifndef TOPPERS_SAFEG_SECURE … … 168 149 169 150 /* 170 * CPUããã¯ç¶æ 171 ã§ã®CPSRã®ããããã¿ã¼ã³ 151 * CPUロック状態でのCPSRのビットパターン 172 152 */ 173 153 #ifndef TOPPERS_SAFEG_SECURE … … 178 158 179 159 /* 180 * å²è¾¼ã¿ããã¯ç¶æ 181 ã§ã®CPSRã®ããããã¿ã¼ã³ 160 * 割込みロック状態でのCPSRのビットパターン 182 161 */ 183 162 #define CPSR_INTLOCK CPSR_FIQ_IRQ_BIT … … 186 165 187 166 /* 188 * CPUããã¯ç¶æ 189 ã¸ã®é·ç§» 167 * CPUロック状態への遷移 190 168 */ 191 169 Inline void … … 203 181 204 182 /* 205 * ã¡ã¢ãªåç 206 §ãï¼ãã®é¢æ°ãè¶ 207 ãã¦æé©åããããã¨ãææ¢ 183 * メモリ参照が,この関数を超えて最適化されることを抑止 208 184 */ 209 185 ARM_MEMORY_CHANGED; … … 211 187 212 188 /* 213 * CPUããã¯ç¶æ 214 ã¸ã®ç§»è¡ï¼ãã£ã¹ãããã§ããç¶æ 215 ï¼ 189 * CPUロック状態への移行(ディスパッチできる状態) 216 190 */ 217 191 #define lock_cpu_dsp() lock_cpu() 218 192 219 193 /* 220 * CPUããã¯ç¶æ 221 ã®è§£é¤ 194 * CPUロック状態の解除 222 195 */ 223 196 Inline void … … 225 198 { 226 199 /* 227 * ã¡ã¢ãªåç 228 §ãï¼ãã®é¢æ°ãè¶ 229 ãã¦æé©åããããã¨ãææ¢ 200 * メモリ参照が,この関数を超えて最適化されることを抑止 230 201 */ 231 202 ARM_MEMORY_CHANGED; … … 243 214 244 215 /* 245 * CPUããã¯ç¶æ 246 ã®è§£é¤ï¼ãã£ã¹ãããã§ããç¶æ 247 ï¼ 216 * CPUロック状態の解除(ディスパッチできる状態) 248 217 */ 249 218 #define unlock_cpu_dsp() unlock_cpu() 250 219 251 220 /* 252 * CPUããã¯ç¶æ 253 ã®åç 254 § 221 * CPUロック状態の参照 255 222 */ 256 223 Inline bool_t … … 265 232 266 233 /* 267 * å²è¾¼ã¿ãåãä»ããããã®é 268 延å¦ç 234 * 割込みを受け付けるための遅延処理 269 235 */ 270 236 Inline void … … 274 240 275 241 /* 276 * éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯åæå¤242 * 非タスクコンテキスト用のスタック初期値 277 243 */ 278 244 #define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz))) 279 245 280 246 /* 281 * ã¿ã¹ã¯ã³ã³ããã¹ããããã¯ã®å®ç¾©247 * タスクコンテキストブロックの定義 282 248 */ 283 249 typedef struct task_context_block { 284 void *sp; /* ã¹ã¿ãã¯ãã¤ã³ã¿*/285 FP pc; /* å®è¡åéçªå°*/250 void *sp; /* スタックポインタ */ 251 FP pc; /* 実行再開番地 */ 286 252 } TSKCTXB; 287 253 288 254 /* 289 * ã¿ã¹ã¯ãã£ã¹ããã㣠290 */ 291 292 /* 293 * æé«åªå 294 é ä½ã¿ã¹ã¯ã¸ã®ãã£ã¹ãããï¼core_support.Sï¼ 295 * 296 * dispatchã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãããå¼ã³åºããããµã¼ãã¹ã³ã¼ã«å¦çã 297 * ãå¼ã³åºãã¹ããã®ã§ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 298 ã»ãã£ã¹ãã 299 * ã許å¯ç¶æ 300 ã»ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 301 度ãã¹ã¯å 302 ¨è§£é¤ç¶æ 303 ã§å¼ã³åºã㪠304 * ããã°ãªããªãï¼ 255 * タスクディスパッチャ 256 */ 257 258 /* 259 * 最高優先順位タスクへのディスパッチ(core_support.S) 260 * 261 * dispatchは,タスクコンテキストから呼び出されたサービスコール処理か 262 * ら呼び出すべきもので,タスクコンテキスト・CPUロック状態・ディスパッ 263 * チ許可状態・(モデル上の)割込み優先度マスク全解除状態で呼び出さな 264 * ければならない. 305 265 */ 306 266 extern void dispatch(void); 307 267 308 268 /* 309 * éã¿ã¹ã¯ã³ã³ããã¹ãããã®ãã£ã¹ãããè¦æ±269 * 非タスクコンテキストからのディスパッチ要求 310 270 */ 311 271 #define request_dispatch() 312 272 313 273 /* 314 * ãã£ã¹ãããã£ã®åä½éå§ï¼core_support.Sï¼ 315 * 316 * start_dispatchã¯ï¼ã«ã¼ãã«èµ·åæã«å¼ã³åºãã¹ããã®ã§ï¼ãã¹ã¦ã®å²è¾¼ 317 * ã¿ãç¦æ¢ããç¶æ 318 ï¼å²è¾¼ã¿ããã¯ç¶æ 319 ã¨åçã®ç¶æ 320 ï¼ã§å¼ã³åºããªããã° 321 * ãªããªãï¼ 274 * ディスパッチャの動作開始(core_support.S) 275 * 276 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込 277 * みを禁止した状態(割込みロック状態と同等の状態)で呼び出さなければ 278 * ならない. 322 279 */ 323 280 extern void start_dispatch(void) NoReturn; 324 281 325 282 /* 326 * ç¾å¨ã®ã³ã³ããã¹ããæ¨ã¦ã¦ãã£ã¹ãããï¼core_support.Sï¼ 327 * 328 * exit_and_dispatchã¯ï¼ext_tskããå¼ã³åºãã¹ããã®ã§ï¼ã¿ã¹ã¯ã³ã³ãã 329 * ã¹ãã»CPUããã¯ç¶æ 330 ã»ãã£ã¹ããã許å¯ç¶æ 331 ã»ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 332 333 * 度ãã¹ã¯å 334 ¨è§£é¤ç¶æ 335 ã§å¼ã³åºããªããã°ãªããªãï¼ 283 * 現在のコンテキストを捨ててディスパッチ(core_support.S) 284 * 285 * exit_and_dispatchは,ext_tskから呼び出すべきもので,タスクコンテキ 286 * スト・CPUロック状態・ディスパッチ許可状態・(モデル上の)割込み優先 287 * 度マスク全解除状態で呼び出さなければならない. 336 288 */ 337 289 extern void exit_and_dispatch(void) NoReturn; 338 290 339 291 /* 340 * ã«ã¼ãã«ã®çµäºå¦çã®å¼åºãï¼core_support.Sï¼341 * 342 * call_exit_kernel ã¯ï¼ã«ã¼ãã«ã®çµäºæã«å¼ã³åºãã¹ããã®ã§ï¼éã¿ã¹ã¯343 * ã³ã³ããã¹ãã«åãæãã¦ï¼ã«ã¼ãã«ã®çµäºå¦çï¼exit_kernelï¼ãå¼ã³åº344 * ãï¼292 * カーネルの終了処理の呼出し(core_support.S) 293 * 294 * call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク 295 * コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出 296 * す. 345 297 */ 346 298 extern void call_exit_kernel(void) NoReturn; 347 299 348 300 /* 349 * ã¿ã¹ã¯ã³ã³ããã¹ãã®åæå 350 * 351 * ã¿ã¹ã¯ãä¼æ¢ç¶æ 352 ããå®è¡ã§ããç¶æ 353 ã«é·ç§»ããæã«å¼ã°ããï¼ãã®æç¹ 354 * ã§ã¹ã¿ãã¯é åã使ã£ã¦ã¯ãªããªãï¼ 355 * 356 * activate_contextãï¼ã¤ã³ã©ã¤ã³é¢æ°ã§ã¯ãªããã¯ãå®ç¾©ã¨ãã¦ããã®ã¯ï¼ 357 * ãã®æç¹ã§ã¯TCBãå®ç¾©ããã¦ããªãããã§ããï¼ 301 * タスクコンテキストの初期化 302 * 303 * タスクが休止状態から実行できる状態に遷移する時に呼ばれる.この時点 304 * でスタック領域を使ってはならない. 305 * 306 * activate_contextを,インライン関数ではなくマクロ定義としているのは, 307 * この時点ではTCBが定義されていないためである. 358 308 */ 359 309 extern void start_r(void); … … 367 317 368 318 /* 369 * æ¨æºã®å²è¾¼ã¿ç®¡çæ©è½ã®åæåå¦çãç¨ããªã319 * 標準の割込み管理機能の初期化処理を用いない 370 320 */ 371 321 #define OMIT_INITIALIZE_INTERRUPT 372 322 373 323 /* 374 * å²è¾¼ã¿ãã³ãã©ãã¼ãã«ï¼kernel_cfg.cï¼324 * 割込みハンドラテーブル(kernel_cfg.c) 375 325 */ 376 326 extern FP inh_table[TNUM_INHNO]; 377 327 378 328 /* 379 * å²è¾¼ã¿è¦æ±ã©ã¤ã³è¨å®ãã¼ãã«ï¼kernel_cfg.cï¼380 * 381 * å²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦å²è¾¼ã¿å±æ§ãè¨å®ããã¦ããã°1ï¼è¨å®ããã¦ã382 * ãªããã°0ãä¿æãããã¼ãã«ï¼329 * 割込み要求ライン設定テーブル(kernel_cfg.c) 330 * 331 * 割込み要求ラインに対して割込み属性が設定されていれば1,設定されてい 332 * なければ0を保持するテーブル. 383 333 */ 384 334 #ifdef USE_INTCFG_TABLE … … 387 337 388 338 /* 389 * æ¨æºã®ä¾å¤ç®¡çæ©è½ã®åæåå¦çãç¨ããªã339 * 標準の例外管理機能の初期化処理を用いない 390 340 */ 391 341 #define OMIT_INITIALIZE_EXCEPTION 392 342 393 343 /* 394 * CPU ä¾å¤ãã³ãã©ãã¼ãã«ï¼kernel_cfg.cï¼344 * CPU例外ハンドラテーブル(kernel_cfg.c) 395 345 */ 396 346 extern const FP exc_table[TNUM_EXCNO]; 397 347 398 348 /* 399 * CPU ä¾å¤ãã³ãã©ã®åæå349 * CPU例外ハンドラの初期化 400 350 */ 401 351 Inline void … … 405 355 406 356 /* 407 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ãã®åç 408 § 409 * 410 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ããï¼ã¿ã¹ã¯ã³ã³ããã¹ãã®æã«falseï¼ 411 * ããã§ãªãæã«trueãè¿ãï¼ 357 * CPU例外の発生した時のコンテキストの参照 358 * 359 * CPU例外の発生した時のコンテキストが,タスクコンテキストの時にfalse, 360 * そうでない時にtrueを返す. 412 361 */ 413 362 Inline bool_t … … 418 367 419 368 /* 420 * CPUä¾å¤ã®çºçããæã®å²è¾¼ã¿åªå 421 度ãã¹ã¯ã®åç 422 § 369 * CPU例外の発生した時の割込み優先度マスクの参照 423 370 */ 424 371 Inline PRI … … 429 376 430 377 /* 431 * CPUããã¯ç¶æ 432 ã¾ãã¯å²è¾¼ã¿ããã¯ç¶æ 433 ãã®åç 434 § 378 * CPUロック状態または割込みロック状態かの参照 435 379 */ 436 380 Inline bool_t … … 446 390 447 391 /* 448 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ãã¨å²è¾¼ã¿ã®ãã¹ã¯ç¶æ 449 ã®åç 450 § 451 * 452 * CPUä¾å¤ã®çºçããæã®ã·ã¹ãã ç¶æ 453 ãï¼ã«ã¼ãã«å®è¡ä¸ã§ãªãï¼ã¿ã¹ã¯ã³ 454 * ã³ããã¹ãã§ããï¼å 455 ¨å²è¾¼ã¿ããã¯ç¶æ 456 ã§ãªãï¼CPUããã¯ç¶æ 457 ã§ãªãï¼å² 458 * è¾¼ã¿åªå 459 度ãã¹ã¯å 460 ¨è§£é¤ç¶æ 461 ã§ããæã«trueï¼ããã§ãªãæã«falseãè¿ã 462 * ï¼CPUä¾å¤ãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦çä¸ã§çºçããå ´åã«ãfalseãè¿ 463 * ãï¼ï¼ 392 * CPU例外の発生した時のコンテキストと割込みのマスク状態の参照 393 * 394 * CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ 395 * ンテキストであり,全割込みロック状態でなく,CPUロック状態でなく,割 396 * 込み優先度マスク全解除状態である時にtrue,そうでない時にfalseを返す 397 * (CPU例外がカーネル管理外の割込み処理中で発生した場合にもfalseを返 398 * す). 464 399 * 465 400 */ … … 475 410 476 411 /* 477 * MMU é¢é£ã®æä½ï¼VMSAï¼412 * MMU関連の操作(VMSA) 478 413 */ 479 414 #ifdef USE_ARM_MMU 480 415 481 416 /* 482 * å¤æãã¼ãã«ãã¼ã¹ã¬ã¸ã¹ã¿ï¼TTBRï¼ã®è¨å®å¤417 * 変換テーブルベースレジスタ(TTBR)の設定値 483 418 */ 484 419 #if __TARGET_ARCH_ARM < 6 … … 495 430 496 431 /* 497 * MMUã®è¨å®æ 498 å ±ã®ãã¼ã¿å 432 * MMUの設定情報のデータ型 499 433 */ 500 434 typedef struct arm_mmu_config { 501 uint32_t vaddr; /* ä»®æ³ã¢ãã¬ã¹*/502 uint32_t paddr; /* ç©çã¢ãã¬ã¹*/503 uint32_t size; /* ãµã¤ãº*/504 uint32_t attr; /* ã»ã¯ã·ã§ã³å±æ§*/435 uint32_t vaddr; /* 仮想アドレス */ 436 uint32_t paddr; /* 物理アドレス */ 437 uint32_t size; /* サイズ */ 438 uint32_t attr; /* セクション属性 */ 505 439 } ARM_MMU_CONFIG; 506 440 507 441 /* 508 * MMUã®è¨å®æ 509 å ±ã®æ°ï¼ã¡ã¢ãªã¨ãªã¢ã®æ°ï¼ï¼target_kernel_impl.cï¼ 442 * MMUの設定情報の数(メモリエリアの数)(target_kernel_impl.c) 510 443 */ 511 444 extern const uint_t arm_tnum_memory_area; 512 445 513 446 /* 514 * MMUã®è¨å®æ 515 å ±ï¼ã¡ã¢ãªã¨ãªã¢ã®æ 516 å ±ï¼ï¼target_kernel_impl.cï¼ 447 * MMUの設定情報(メモリエリアの情報)(target_kernel_impl.c) 517 448 */ 518 449 extern ARM_MMU_CONFIG arm_memory_area[]; 519 450 520 451 /* 521 * MMU ã®åæå452 * MMUの初期化 522 453 */ 523 454 extern void arm_mmu_initialize(void); … … 529 460 530 461 /* 531 * ã³ã¢ä¾åã®åæå462 * コア依存の初期化 532 463 */ 533 464 extern void core_initialize(void); 534 465 535 466 /* 536 * ã³ã¢ä¾åã®çµäºå¦ç467 * コア依存の終了処理 537 468 */ 538 469 extern void core_terminate(void); 539 470 540 471 /* 541 * CPU ä¾å¤ã®çºçç¶æ³ã®ãã°åºå472 * CPU例外の発生状況のログ出力 542 473 */ 543 474 #ifndef OMIT_XLOG_SYS … … 547 478 548 479 /* 549 * æªå®ç¾©ã®å²è¾¼ã¿ãå 550 ¥ã£ãå ´åã®å¦ç 480 * 未定義の割込みが入った場合の処理 551 481 */ 552 482 extern void default_int_handler(void); 553 483 554 484 /* 555 * æªå®ç¾©ã®ä¾å¤ãå 556 ¥ã£ãå ´åã®å¦ç 485 * 未定義の例外が入った場合の処理 557 486 */ 558 487 extern void default_exc_handler(void *p_excinf, EXCNO excno);
Note:
See TracChangeset
for help on using the changeset viewer.