Changeset 389 for azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.h
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r388 r389 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 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * åªå 60 度ãã¼ã¿ãã¥ã¼æ©è½ 44 * 優先度データキュー機能 61 45 */ 62 46 … … 69 53 70 54 /* 71 * åªå 72 度ãã¼ã¿ç®¡çããã㯠55 * 優先度データ管理ブロック 73 56 */ 74 57 typedef struct pridata_management_block PDQMB; 75 58 76 59 struct pridata_management_block { 77 PDQMB *p_next; /* 次ã®ãã¼ã¿ */ 78 intptr_t data; /* ãã¼ã¿æ¬ä½ */ 79 PRI datapri; /* ãã¼ã¿åªå 80 度 */ 60 PDQMB *p_next; /* 次のデータ */ 61 intptr_t data; /* データ本体 */ 62 PRI datapri; /* データ優先度 */ 81 63 }; 82 64 83 65 /* 84 * åªå 85 度ãã¼ã¿ãã¥ã¼åæåããã㯠66 * 優先度データキュー初期化ブロック 86 67 * 87 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å 88 ±éé¨å 89 * ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 90 * æåã®ãã£ã¼ã«ããå 91 ±éã«ãªã£ã¦ããï¼ 68 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 69 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 70 * 最初のフィールドが共通になっている. 92 71 */ 93 72 typedef struct pridataq_initialization_block { 94 ATR pdqatr; /* åªå 95 度ãã¼ã¿ãã¥ã¼å±æ§ */ 96 uint_t pdqcnt; /* åªå 97 度ãã¼ã¿ãã¥ã¼ã®å®¹é */ 98 PRI maxdpri; /* ãã¼ã¿åªå 99 度ã®æå¤§å¤ */ 100 PDQMB *p_pdqmb; /* åªå 101 度ãã¼ã¿ãã¥ã¼ç®¡çé åã®å 102 é çªå° */ 73 ATR pdqatr; /* 優先度データキュー属性 */ 74 uint_t pdqcnt; /* 優先度データキューの容量 */ 75 PRI maxdpri; /* データ優先度の最大値 */ 76 PDQMB *p_pdqmb; /* 優先度データキュー管理領域の先頭番地 */ 103 77 } PDQINIB; 104 78 105 79 /* 106 * åªå 107 度ãã¼ã¿ãã¥ã¼ç®¡çããã㯠80 * 優先度データキュー管理ブロック 108 81 * 109 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 110 ±éé¨åï¼WOBJCBï¼ 111 * ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã® 112 * ãã£ã¼ã«ããå 113 ±éã«ãªã£ã¦ããï¼ 82 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 83 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 84 * フィールドが共通になっている. 114 85 */ 115 86 typedef struct pridataq_control_block { 116 QUEUE swait_queue; /* åªå 117 度ãã¼ã¿ãã¥ã¼éä¿¡å¾ 118 ã¡ãã¥ã¼ */ 119 const PDQINIB *p_pdqinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 120 QUEUE rwait_queue; /* åªå 121 度ãã¼ã¿ãã¥ã¼åä¿¡å¾ 122 ã¡ãã¥ã¼ */ 123 uint_t count; /* åªå 124 度ãã¼ã¿ãã¥ã¼ä¸ã®ãã¼ã¿ã®æ° */ 125 PDQMB *p_head; /* æåã®ãã¼ã¿ */ 126 uint_t unused; /* æªä½¿ç¨ãã¼ã¿ç®¡çãããã¯ã®å 127 é */ 128 PDQMB *p_freelist; /* æªå²å½ã¦ãã¼ã¿ç®¡çãããã¯ã®ãªã¹ã */ 87 QUEUE swait_queue; /* 優先度データキュー送信待ちキュー */ 88 const PDQINIB *p_pdqinib; /* 初期化ブロックへのポインタ */ 89 QUEUE rwait_queue; /* 優先度データキュー受信待ちキュー */ 90 uint_t count; /* 優先度データキュー中のデータの数 */ 91 PDQMB *p_head; /* 最初のデータ */ 92 uint_t unused; /* 未使用データ管理ブロックの先頭 */ 93 PDQMB *p_freelist; /* 未割当てデータ管理ブロックのリスト */ 129 94 } PDQCB; 130 95 131 96 /* 132 * åªå 133 度ãã¼ã¿ãã¥ã¼å¾ 134 ã¡æ 135 å ±ãããã¯ã®å®ç¾© 97 * 優先度データキュー待ち情報ブロックの定義 136 98 * 137 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 138 ã¡æ 139 å ±ãããã¯ã®å 140 ±éé¨å 141 * ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 142 * æåã®2ã¤ã®ãã£ã¼ã«ããå 143 ±éã«ãªã£ã¦ããï¼ 99 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 100 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 101 * 最初の2つのフィールドが共通になっている. 144 102 */ 145 103 typedef struct pridataq_send_waiting_information { 146 WINFO winfo; /* æ¨æºã®å¾ 147 ã¡æ 148 å ±ããã㯠*/ 149 PDQCB *p_pdqcb; /* å¾ 150 ã£ã¦ããåªå 151 度ãã¼ã¿ãã¥ã¼ã®ç®¡çãããã¯*/ 152 intptr_t data; /* éä¿¡ãã¼ã¿ */ 153 PRI datapri; /* ãã¼ã¿åªå 154 度 */ 104 WINFO winfo; /* 標準の待ち情報ブロック */ 105 PDQCB *p_pdqcb; /* 待っている優先度データキューの管理ブロック*/ 106 intptr_t data; /* 送信データ */ 107 PRI datapri; /* データ優先度 */ 155 108 } WINFO_SPDQ; 156 109 157 110 typedef struct pridataq_receive_waiting_information { 158 WINFO winfo; /* æ¨æºã®å¾ 159 ã¡æ 160 å ±ããã㯠*/ 161 PDQCB *p_pdqcb; /* å¾ 162 ã£ã¦ããåªå 163 度ãã¼ã¿ãã¥ã¼ã®ç®¡çãããã¯*/ 164 intptr_t data; /* åä¿¡ãã¼ã¿ */ 165 PRI datapri; /* ãã¼ã¿åªå 166 度 */ 111 WINFO winfo; /* 標準の待ち情報ブロック */ 112 PDQCB *p_pdqcb; /* 待っている優先度データキューの管理ブロック*/ 113 intptr_t data; /* 受信データ */ 114 PRI datapri; /* データ優先度 */ 167 115 } WINFO_RPDQ; 168 116 169 117 /* 170 * 使ç¨ãã¦ããªãåªå 171 度ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ã®ãªã¹ã 118 * 使用していない優先度データキュー管理ブロックのリスト 172 119 */ 173 120 extern QUEUE free_pdqcb; 174 121 175 122 /* 176 * åªå 177 度ãã¼ã¿ãã¥ã¼IDã®æ大å¤ï¼kernel_cfg.cï¼ 123 * 優先度データキューIDの最大値(kernel_cfg.c) 178 124 */ 179 125 extern const ID tmax_pdqid; … … 181 127 182 128 /* 183 * åªå 184 度ãã¼ã¿ãã¥ã¼åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼ 129 * 優先度データキュー初期化ブロックのエリア(kernel_cfg.c) 185 130 */ 186 131 extern const PDQINIB pdqinib_table[]; … … 188 133 189 134 /* 190 * åªå 191 度ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼ 135 * 優先度データキュー管理ブロックのエリア(kernel_cfg.c) 192 136 */ 193 137 extern PDQCB pdqcb_table[]; 194 138 195 139 /* 196 * åªå 197 度ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ããåªå 198 度ãã¼ã¿ãã¥ã¼IDãåãåºãã 199 * ãã®ãã¯ã 140 * 優先度データキュー管理ブロックから優先度データキューIDを取り出すた 141 * めのマクロ 200 142 */ 201 143 #define PDQID(p_pdqcb) ((ID)(((p_pdqcb) - pdqcb_table) + TMIN_PDQID)) 202 144 203 145 /* 204 * åªå 205 度ãã¼ã¿ãã¥ã¼æ©è½ã®åæå 146 * 優先度データキュー機能の初期化 206 147 */ 207 148 extern void initialize_pridataq(void); 208 149 209 150 /* 210 * åªå 211 度ãã¼ã¿ãã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´ 151 * 優先度データキュー管理領域へのデータの格納 212 152 */ 213 153 extern void enqueue_pridata(PDQCB *p_pdqcb, intptr_t data, PRI datapri); 214 154 215 155 /* 216 * åªå 217 度ãã¼ã¿ãã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã 156 * 優先度データキュー管理領域からのデータの取出し 218 157 */ 219 158 extern void dequeue_pridata(PDQCB *p_pdqcb, intptr_t *p_data, PRI *p_datapri); 220 159 221 160 /* 222 * åªå 223 度ãã¼ã¿ãã¥ã¼ã¸ã®ãã¼ã¿éä¿¡ 161 * 優先度データキューへのデータ送信 224 162 */ 225 163 extern bool_t send_pridata(PDQCB *p_pdqcb, intptr_t data, PRI datapri); 226 164 227 165 /* 228 * åªå 229 度ãã¼ã¿ãã¥ã¼ããã®ãã¼ã¿åä¿¡ 166 * 優先度データキューからのデータ受信 230 167 */ 231 168 extern bool_t receive_pridata(PDQCB *p_pdqcb, intptr_t *p_data,
Note:
See TracChangeset
for help on using the changeset viewer.