41 #ifndef picox_multitask_xfiber_h_ 42 #define picox_multitask_xfiber_h_ 142 #define X_FIBER_EVENT_WAIT_OR (0) 145 #define X_FIBER_EVENT_WAIT_AND (1) 148 #define X_FIBER_EVENT_CLEAR_ON_EXIT (1 << 1) 162 struct XFiberChannel;
163 struct XFiberMailbox;
164 struct XFiberSemaphore;
166 typedef struct XFiber XFiber;
167 typedef struct XFiberEvent XFiberEvent;
168 typedef struct XFiberQueue XFiberQueue;
169 typedef struct XFiberPool XFiberPool;
170 typedef struct XFiberChannel XFiberChannel;
171 typedef struct XFiberMailbox XFiberMailbox;
172 typedef struct XFiberSemaphore XFiberSemaphore;
173 typedef struct XFiberMutex XFiberMutex;
XError xfiber_channel_send_isr(XFiberChannel *channel, const void *src, size_t size)
Definition: xfiber.c:1202
XError xfiber_channel_receive(XFiberChannel *channel, void *dst, size_t *o_size)
Definition: xfiber.c:1227
XError xfiber_pool_try_get(XFiberPool *pool, void **o_mem)
プールからメモリの確保をポーリングで試みます
Definition: xfiber.c:1743
void xfiber_mailbox_destroy(XFiberMailbox *mailbox)
メールボックスを生成します
Definition: xfiber.c:1588
XError xfiber_queue_receive_isr(XFiberQueue *queue, void *dst)
割込みハンドラから呼び出し可能なxfiber_queue_try_receive()です
Definition: xfiber.c:1089
int32_t XTicks
システムチックを格納する型です
Definition: xtime.h:63
void xfiber_queue_destroy(XFiberQueue *queue)
キューを破棄します
Definition: xfiber.c:865
XError xfiber_mailbox_receive_isr(XFiberMailbox *mailbox, XFiberMessage **o_message)
割込みハンドラから呼び出し可能なxfiber_mailbox_try_receive()です
Definition: xfiber.c:1692
XError xfiber_semaphore_try_take(XFiberSemaphore *semaphore)
セマフォの獲得をポーリングで試みます
Definition: xfiber.c:1486
XError xfiber_event_timed_wait(XFiberEvent *event, XMode mode, XBits wait_pattern, XBits *result, XTicks timeout)
指定のイベントが成立するのをタイムアウト付きで待ちます
Definition: xfiber.c:476
XError xfiber_pool_timed_get(XFiberPool *pool, void **o_mem, XTicks timeout)
プールからメモリの確保をタイムアウト付きで試みます
Definition: xfiber.c:1749
XError xfiber_mutex_unlock_isr(XFiberMutex *mutex)
割込みハンドラから呼び出し可能なxfiber_mutex_unlock()です
Definition: xfiber.c:1432
void xfiber_delay(XTicks time)
タスクの実行を指定時間遅延します
Definition: xfiber.c:753
XError xfiber_signal_timed_wait(XBits sigs, XBits *result, XTicks timeout)
シグナルが成立するのをタイムアウト付きで待ちます
Definition: xfiber.c:638
XError xfiber_queue_send_back(XFiberQueue *queue, const void *src)
キューの末尾への要素の転送を試みます
Definition: xfiber.c:876
双方向リンリストリストノード
Definition: xintrusive_list.h:87
XError
errnoの代替として使用する共通のエラーコードを表す列挙型です
Definition: xstddef.h:367
XError xfiber_queue_send_back_isr(XFiberQueue *queue, const void *src)
割込みハンドラから呼び出し可能なxfiber_queue_try_send_back()です
Definition: xfiber.c:929
void xfiber_channel_destroy(XFiberChannel *channel)
Definition: xfiber.c:1136
XError xfiber_mailbox_timed_receive(XFiberMailbox *mailbox, XFiberMessage **o_message, XTicks timeout)
メールボックス先頭からメッセージの受信をタイムアウト付きで試みます
Definition: xfiber.c:1658
void xfiber_semaphore_destroy(XFiberSemaphore *semaphore)
セマフォを破棄します
Definition: xfiber.c:1469
XError xfiber_queue_try_send_front(XFiberQueue *queue, const void *src)
キューの先頭への要素の転送をポーリングで試みます
Definition: xfiber.c:958
XBits xfiber_signal_get(XFiber *fiber)
現在のビットパターンを返します
Definition: xfiber.c:733
XError xfiber_create(XFiber **o_fiber, int priority, const char *name, size_t stack_size, XFiberFunc func, void *arg)
タスクを生成します
Definition: xfiber.c:368
XError xfiber_channel_send(XFiberChannel *channel, const void *src, size_t size)
Definition: xfiber.c:1147
XError xfiber_mutex_create(XFiberMutex **o_mutex)
ミューテックスを生成します
Definition: xfiber.c:1321
XError xfiber_queue_try_send_back(XFiberQueue *queue, const void *src)
キューの末尾への要素の転送をポーリングで試みます
Definition: xfiber.c:882
XError xfiber_pool_create(XFiberPool **o_pool, size_t block_size, size_t num_blocks)
プールを生成します
Definition: xfiber.c:1704
XError xfiber_mailbox_send_isr(XFiberMailbox *mailbox, XFiberMessage *message)
割込みハンドラから呼び出し可能なxfiber_mailbox_send()です
Definition: xfiber.c:1627
XError xfiber_mutex_lock(XFiberMutex *mutex)
ミューテックスを獲得を試みます
Definition: xfiber.c:1350
XError xfiber_semaphore_take(XFiberSemaphore *semaphore)
セマフォの獲得を試みます
Definition: xfiber.c:1480
const char * xfiber_name(const XFiber *fiber)
タスクの名前を返します
Definition: xfiber.c:424
XError xfiber_queue_send_front_isr(XFiberQueue *queue, const void *src)
割込みハンドラから呼び出し可能なxfiber_queue_try_send_front()です
Definition: xfiber.c:1005
XError xfiber_channel_timed_receive(XFiberChannel *channel, void *dst, size_t *o_size, XTicks timeout)
Definition: xfiber.c:1239
uint32_t XBits
XModeと同じくビットフラグを格納しますが、よりビットを意識した型です
Definition: xstddef.h:292
XError xfiber_semaphore_create(XFiberSemaphore **o_semaphore, int initial_count)
セマフォを生成します
Definition: xfiber.c:1451
XError xfiber_mailbox_create(XFiberMailbox **o_mailbox)
メールボックスを生成します
Definition: xfiber.c:1572
XBits xfiber_event_get(XFiberEvent *event)
現在のビットパターンを返します
Definition: xfiber.c:606
XError xfiber_event_try_wait(XFiberEvent *event, XMode mode, XBits wait_pattern, XBits *result)
指定のイベントが成立しているかをポーリングで確認します
Definition: xfiber.c:470
XError xfiber_signal_wait(XBits sigs, XBits *result)
シグナルが成立するのを待ちます
Definition: xfiber.c:626
XError xfiber_kernel_start_scheduler(void)
スケジューリングを開始します
Definition: xfiber.c:329
void xfiber_kernel_end_scheduler(void)
スケジューリングを終了します
Definition: xfiber.c:350
XError xfiber_channel_receive_isr(XFiberChannel *channel, void *dst, size_t *o_size)
Definition: xfiber.c:1289
void(* XFiberFunc)(void *)
タスクのメイン関数ポインタ型です
Definition: xfiber.h:125
XError xfiber_suspend(XFiber *fiber)
タスクをサスペンド状態に遷移させます
Definition: xfiber.c:771
XError xfiber_queue_receive(XFiberQueue *queue, void *dst)
キューの先頭から要素の受信を試みます
Definition: xfiber.c:1028
XError xfiber_signal_raise_isr(XFiber *fiber, XBits sigs)
割込みハンドラから呼び出し可能なxfiber_signal_raise()です
Definition: xfiber.c:718
XError xfiber_queue_timed_receive(XFiberQueue *queue, void *dst, XTicks timeout)
キューの先頭から要素の受信をタイムアウト付きで試みます
Definition: xfiber.c:1040
XError xfiber_channel_try_receive(XFiberChannel *channel, void *dst, size_t *o_size)
Definition: xfiber.c:1233
XError xfiber_queue_timed_send_back(XFiberQueue *queue, const void *src, XTicks timeout)
キューの末尾への要素の転送をタイムアウト付きで試みます
Definition: xfiber.c:888
XError xfiber_pool_release_isr(XFiberPool *pool, void *mem)
割込みハンドラから呼び出し可能なxfiber_pool_release()です
Definition: xfiber.c:1823
int(* XFiberIdleHook)(void)
アイドル時に呼び出されるフック関数のポインタ型です
Definition: xfiber.h:133
XError xfiber_event_set_isr(XFiberEvent *event, XBits pattern)
割込みハンドラから呼び出し可能なxfiber_event_set()です
Definition: xfiber.c:516
XBits xfiber_event_clear(XFiberEvent *event, XBits pattern)
指定ビットをクリアします
Definition: xfiber.c:583
XError xfiber_mailbox_try_receive(XFiberMailbox *mailbox, XFiberMessage **o_message)
メールボックス先頭からメッセージの受信をポーリングで試みます
Definition: xfiber.c:1652
XError xfiber_channel_try_send(XFiberChannel *channel, const void *src, size_t size)
Definition: xfiber.c:1153
XError xfiber_resume(XFiber *fiber)
タスクのサスペンド状態を解除します
Definition: xfiber.c:808
XError xfiber_semaphore_give_isr(XFiberSemaphore *semaphore)
割込みハンドラで呼び出し可能なxfiber_semaphore_give()です
Definition: xfiber.c:1553
XError xfiber_mutex_timed_lock(XFiberMutex *mutex, XTicks timeout)
ミューテックスを獲得をタイムアウト付きで試みます
Definition: xfiber.c:1362
XError xfiber_queue_try_receive(XFiberQueue *queue, void *dst)
キューの先頭から要素の受信をポーリングで試みます
Definition: xfiber.c:1034
XError xfiber_signal_try_wait(XBits sigs, XBits *result)
シグナルが成立するのをポーリングで待ちます
Definition: xfiber.c:632
XError xfiber_mailbox_send(XFiberMailbox *mailbox, XFiberMessage *message)
メールボックス末尾にメッセージを追加します
Definition: xfiber.c:1599
XError xfiber_event_create(XFiberEvent **o_event)
イベントオブジェクトを生成します
Definition: xfiber.c:432
XError xfiber_semaphore_timed_take(XFiberSemaphore *semaphore, XTicks timeout)
セマフォの獲得をタイムアウト付きで試みます
Definition: xfiber.c:1492
XError xfiber_queue_timed_send_front(XFiberQueue *queue, const void *src, XTicks timeout)
キューの先頭への要素の転送をタイムアウト付きで試みます
Definition: xfiber.c:964
XError xfiber_queue_create(XFiberQueue **o_queue, size_t queue_len, size_t item_size)
キューを生成します
Definition: xfiber.c:842
XBits xfiber_signal_get_isr(XFiber *fiber)
割込みハンドラから呼び出し可能なxfiber_signal_get()です
Definition: xfiber.c:746
XBits xfiber_event_get_isr(XFiberEvent *event)
割込みハンドラから呼び出し可能なxfiber_event_get()です
Definition: xfiber.c:619
void xfiber_yield()
タスクの実行を同一優先度の別のタスクにゆずります
Definition: xfiber.c:362
XError xfiber_mutex_try_lock(XFiberMutex *mutex)
ミューテックスを獲得をタイムアウト付きで試みます
Definition: xfiber.c:1356
XError xfiber_queue_send_front(XFiberQueue *queue, const void *src)
キューの先頭への要素の転送を試みます
Definition: xfiber.c:952
XError xfiber_signal_raise(XFiber *fiber, XBits sigs)
タスクにシグナルを発行します
Definition: xfiber.c:694
XError xfiber_mailbox_receive(XFiberMailbox *mailbox, XFiberMessage **o_message)
メールボックス先頭からメッセージの受信を試みます
Definition: xfiber.c:1646
void xfiber_event_destroy(XFiberEvent *event)
イベントオブジェクトを破棄します
Definition: xfiber.c:453
XError xfiber_pool_get_isr(XFiberPool *pool, void **o_mem)
割込みハンドラから呼び出し可能なxfiber_pool_try_get()です
Definition: xfiber.c:1783
XError xfiber_event_set(XFiberEvent *event, XBits pattern)
イベントをセットします
Definition: xfiber.c:545
XError xfiber_event_wait(XFiberEvent *event, XMode mode, XBits wait_pattern, XBits *result)
指定のイベントが成立するのを待ちます
Definition: xfiber.c:464
uint32_t XMode
何らかのビットフラグを格納することを意図した型です
Definition: xstddef.h:287
void xfiber_pool_destroy(XFiberPool *pool)
プールを解放します
Definition: xfiber.c:1726
XError xfiber_kernel_init(void *heap, size_t heapsize, XFiberIdleHook idlehook)
カーネルを初期化します
Definition: xfiber.c:316
XError xfiber_pool_release(XFiberPool *pool, void *mem)
プールにメモリを返却します
Definition: xfiber.c:1795
XFiber * xfiber_self()
実行状態のタスクを返します
Definition: xfiber.c:356
XError xfiber_channel_create(XFiberChannel **o_channel, size_t capacity, size_t max_item_size)
Definition: xfiber.c:1117
void xfiber_mutex_destroy(XFiberMutex *mutex)
ミューテックスを破棄します
Definition: xfiber.c:1339
XError xfiber_semaphore_give(XFiberSemaphore *semaphore)
セマフォを返却します
Definition: xfiber.c:1525
XError xfiber_channel_timed_send(XFiberChannel *channel, const void *src, size_t size, XTicks timeout)
Definition: xfiber.c:1159
XBits xfiber_event_clear_isr(XFiberEvent *event, XBits pattern)
割込みハンドラから呼び出し可能なxfiber_event_clear()です
Definition: xfiber.c:597
XError xfiber_mutex_unlock(XFiberMutex *mutex)
ミューテックスのロック解除を行います
Definition: xfiber.c:1395
XError xfiber_pool_get(XFiberPool *pool, void **o_mem)
プールからメモリの確保を試みます
Definition: xfiber.c:1737