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