##### Shinobi Library - ファイバ関数

# syFbrInitEx

ファイバライブラリの拡張初期化

### 書式

> `SYFBR syFbrInitEx( pfbuf, num, pintStack, pParam )
> Void* pfbuf
> Sint32 num
> Void* pIntStack
> Void* pParam
> `

### 引数

> pfbuf | ファイバライブラリが使用する領域のアドレス
> num | 使用するファイバの数
> pIntStack | 割り込みスタック底のアドレス
> pParam | メインファイバのファイバデータ

### 戻り値

> 非SYD_FBR_NULL | 正常終了:メインファイバのハンドル
> SYD_FBR_NULL | 異常終了

### 解説

> ファイバライブラリの初期化を行います。

> 具体的には以下の項目を実行します。

> 1. ファイバライブラリの内部データを初期化します。
> 2. 割り込みハンドラの使用するスタックのアドレスを指定します。
> 3. 現在実行中の関数(メイン関数)をファイバ（メインファイバ）化しそのハンドルを返します。

> ファイバライブラリが使用する領域には、SYD_FBR_FBRSIZE(*1) × ファイバ数(num) バイトの領域をユーザ側で確保して指定してください。
> (*1) sizeof(SYS_FBR_INFO)

> また、numにはメインファイバ(syFbrConvertThreadToFiber()関数もしくはsyFbrInitEx()関数により実行中の関数をファイバ化したファイバ)の数を含みます。 引数pIntStackには、syHwInit()関数の引数に指定した割り込みハンドラが使用するスタックの底のアドレスを設定してください。 この指定が正しくないと、syFbrDelayedSwitchToFiber()関数が正常に動作しません。

> この関数が異常終了する原因は、パラメータ不正(pfbufがNULL、numが0、pintStackがNULL)の場合です。

### 用例

>     #define FIBERS (2)
>     #define INTSTACK_SIZE  (20*1024)

>     Uint32 gIntStackBuf[INTSTACK_SIZE/sizeof(Uint32)] ;
>     SYS_FBR_INFO    gFiberInfo  [FIBERS] ;
>     SYFBR           gFiberMain = NULL ;
>     ...
>         {
>     		...

>     	/* ハードウェアの初期化 */
>     	syHwInit(&gIntStackBuf[INTSTACK_SIZE/sizeof(Uint32));

>     	/* ファイバーの初期化        */
>     	gFiberMain = syFbrInitEx(gFiberInfo,FIBERS,
>     	                         &gIntStackBuf[INTSTACK_SIZE/sizeof(Uint32)],
>     	                         NULL) ;
>     		...
>     	}

### 備考

> この関数は、通常sbInitSystem()関数で実行されます。

> この関数の戻り値であるメインファイバのハンドルは、syFbrGetMainFiber()関数でも取得できます。

### 参照

> syFbrInit() | ファイバライブラリの初期化
> syFbrConvertThreadToFiber() | 現在実行中の関数をファイバ（メインファイバ）に変換
> syFbrGetMainFiber() | メインファイバのハンドルを取得
> syFbrGetFiberData() | 実行中のファイバのファイバデータを取得
> syFbrDelayedSwitchToFiber() | 割り込みを契機としたファイバの切り替え

syFbrInitEx

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000