#include <queue.h>
データ構造 | |
struct | dataqueue_initialization_block |
struct | dataqueue_control_block |
struct | dataqueue_waiting_information |
マクロ定義 | |
#define | DTQID(p_dtqcb) ((ID)(((p_dtqcb) - dtqcb_table) + TMIN_DTQID)) |
型定義 | |
typedef struct dataqueue_initialization_block | DTQINIB |
typedef struct dataqueue_control_block | DTQCB |
typedef struct dataqueue_waiting_information | WINFO_DTQ |
関数 | |
void | initialize_dataqueue (void) |
void | enqueue_data (DTQCB *p_dtqcb, intptr_t data) |
void | force_enqueue_data (DTQCB *p_dtqcb, intptr_t data) |
void | dequeue_data (DTQCB *p_dtqcb, intptr_t *p_data) |
bool_t | send_data (DTQCB *p_dtqcb, intptr_t data, bool_t *p_reqdsp) |
bool_t | force_send_data (DTQCB *p_dtqcb, intptr_t data) |
bool_t | receive_data (DTQCB *p_dtqcb, intptr_t *p_data, bool_t *p_reqdsp) |
変数 | |
const ID | tmax_dtqid |
const DTQINIB | dtqinib_table [] |
DTQCB | dtqcb_table [] |
#define DTQID | ( | p_dtqcb | ) | ((ID)(((p_dtqcb) - dtqcb_table) + TMIN_DTQID)) |
typedef struct dataqueue_control_block DTQCB |
typedef struct dataqueue_initialization_block DTQINIB |
typedef struct dataqueue_waiting_information WINFO_DTQ |
void dequeue_data | ( | DTQCB * | p_dtqcb, | |
intptr_t * | p_data | |||
) |
dataqueue.c の 225 行で定義されています。
参照先 dataqueue_control_block::count, dataqueue_initialization_block::dtqcnt, dataqueue_control_block::head, dataqueue_control_block::p_dtqinib, と dataqueue_initialization_block::p_dtqmb.
00226 { 00227 *p_data = *(p_dtqcb->p_dtqinib->p_dtqmb + p_dtqcb->head); 00228 p_dtqcb->count--; 00229 p_dtqcb->head++; 00230 if (p_dtqcb->head >= p_dtqcb->p_dtqinib->dtqcnt) { 00231 p_dtqcb->head = 0U; 00232 } 00233 }
void enqueue_data | ( | DTQCB * | p_dtqcb, | |
intptr_t | data | |||
) |
dataqueue.c の 184 行で定義されています。
参照先 dataqueue_control_block::count, dataqueue_initialization_block::dtqcnt, dataqueue_control_block::p_dtqinib, dataqueue_initialization_block::p_dtqmb, と dataqueue_control_block::tail.
00185 { 00186 *(p_dtqcb->p_dtqinib->p_dtqmb + p_dtqcb->tail) = data; 00187 p_dtqcb->count++; 00188 p_dtqcb->tail++; 00189 if (p_dtqcb->tail >= p_dtqcb->p_dtqinib->dtqcnt) { 00190 p_dtqcb->tail = 0U; 00191 } 00192 }
void force_enqueue_data | ( | DTQCB * | p_dtqcb, | |
intptr_t | data | |||
) |
dataqueue.c の 202 行で定義されています。
参照先 dataqueue_control_block::count, dataqueue_initialization_block::dtqcnt, dataqueue_control_block::head, dataqueue_control_block::p_dtqinib, dataqueue_initialization_block::p_dtqmb, と dataqueue_control_block::tail.
00203 { 00204 *(p_dtqcb->p_dtqinib->p_dtqmb + p_dtqcb->tail) = data; 00205 p_dtqcb->tail++; 00206 if (p_dtqcb->tail >= p_dtqcb->p_dtqinib->dtqcnt) { 00207 p_dtqcb->tail = 0U; 00208 } 00209 if (p_dtqcb->count < p_dtqcb->p_dtqinib->dtqcnt) { 00210 p_dtqcb->count++; 00211 } 00212 else { 00213 p_dtqcb->head = p_dtqcb->tail; 00214 } 00215 }
dataqueue.c の 271 行で定義されています。
参照先 force_enqueue_data, task_control_block::p_winfo, queue_delete_next(), queue_empty(), dataqueue_control_block::rwait_queue, と wait_complete.
00272 { 00273 TCB *p_tcb; 00274 00275 if (!queue_empty(&(p_dtqcb->rwait_queue))) { 00276 p_tcb = (TCB *) queue_delete_next(&(p_dtqcb->rwait_queue)); 00277 ((WINFO_DTQ *)(p_tcb->p_winfo))->data = data; 00278 return(wait_complete(p_tcb)); 00279 } 00280 else { 00281 force_enqueue_data(p_dtqcb, data); 00282 return(false); 00283 } 00284 }
void initialize_dataqueue | ( | void | ) |
dataqueue.c の 161 行で定義されています。
参照先 dataqueue_control_block::count, dtqcb_table, dtqinib_table, dataqueue_control_block::head, dataqueue_control_block::p_dtqinib, queue_initialize(), dataqueue_control_block::rwait_queue, dataqueue_control_block::swait_queue, dataqueue_control_block::tail, と tnum_dtq.
00162 { 00163 uint_t i; 00164 DTQCB *p_dtqcb; 00165 00166 for (p_dtqcb = dtqcb_table, i = 0; i < tnum_dtq; p_dtqcb++, i++) { 00167 queue_initialize(&(p_dtqcb->swait_queue)); 00168 p_dtqcb->p_dtqinib = &(dtqinib_table[i]); 00169 queue_initialize(&(p_dtqcb->rwait_queue)); 00170 p_dtqcb->count = 0U; 00171 p_dtqcb->head = 0U; 00172 p_dtqcb->tail = 0U; 00173 } 00174 }
dataqueue.c の 294 行で定義されています。
参照先 dataqueue_control_block::count, dequeue_data, enqueue_data, task_control_block::p_winfo, queue_delete_next(), queue_empty(), dataqueue_control_block::swait_queue, と wait_complete.
00295 { 00296 TCB *p_tcb; 00297 intptr_t data; 00298 00299 if (p_dtqcb->count > 0U) { 00300 dequeue_data(p_dtqcb, p_data); 00301 if (!queue_empty(&(p_dtqcb->swait_queue))) { 00302 p_tcb = (TCB *) queue_delete_next(&(p_dtqcb->swait_queue)); 00303 data = ((WINFO_DTQ *)(p_tcb->p_winfo))->data; 00304 enqueue_data(p_dtqcb, data); 00305 *p_reqdsp = wait_complete(p_tcb); 00306 } 00307 else { 00308 *p_reqdsp = false; 00309 } 00310 return(true); 00311 } 00312 else if (!queue_empty(&(p_dtqcb->swait_queue))) { 00313 p_tcb = (TCB *) queue_delete_next(&(p_dtqcb->swait_queue)); 00314 *p_data = ((WINFO_DTQ *)(p_tcb->p_winfo))->data; 00315 *p_reqdsp = wait_complete(p_tcb); 00316 return(true); 00317 } 00318 else { 00319 return(false); 00320 } 00321 }
dataqueue.c の 243 行で定義されています。
参照先 dataqueue_control_block::count, dataqueue_initialization_block::dtqcnt, enqueue_data, dataqueue_control_block::p_dtqinib, task_control_block::p_winfo, queue_delete_next(), queue_empty(), dataqueue_control_block::rwait_queue, と wait_complete.
00244 { 00245 TCB *p_tcb; 00246 00247 if (!queue_empty(&(p_dtqcb->rwait_queue))) { 00248 p_tcb = (TCB *) queue_delete_next(&(p_dtqcb->rwait_queue)); 00249 ((WINFO_DTQ *)(p_tcb->p_winfo))->data = data; 00250 *p_reqdsp = wait_complete(p_tcb); 00251 return(true); 00252 } 00253 else if (p_dtqcb->count < p_dtqcb->p_dtqinib->dtqcnt) { 00254 enqueue_data(p_dtqcb, data); 00255 *p_reqdsp = false; 00256 return(true); 00257 } 00258 else { 00259 return(false); 00260 } 00261 }
const DTQINIB dtqinib_table[] |
const ID tmax_dtqid |
Copyright © 2008 by Kijineko Inc.