(toppers-users 70) cfg のバグ

ACKyugo ackyugo @ geocities.co.jp
2001年 2月 17日 (土) 21:43:24 JST


こんにちは。

静的APIで固定長メモリプールを作成するとcfgによってkernel_cfg.cに
-----
const MPFINIB _kernel_mpfinib_table[TNUM_MPFID] = {
	{TA_TPRI,TCOUNT_VP(8),_mpf1(VP)(((VB *)_mpf1) + sizeof(_mpf1))}
};
-----
のようなコードが生成されますが、これではコンパイルも出来ませんし、出来た
としても正常に動作しません。

正しくは
-----
const MPFINIB _kernel_mpfinib_table[TNUM_MPFID] = {
	{TA_TPRI,TROUND_VP(8),_mpf1,(VP)(((VB *)_mpf1) + sizeof(_mpf1))}
};
-----
だと思うのですが。因みにわたしはcfg/toppers.cppの638行目を適当に修正して
使っています。kernel/mempfix.cのget_block()を修正するという方法もあります
が、コメントやドキュメントなどからcfgの問題だと判断しました。

それからdoc/user.txtの固定長メモリプールに関する記述
> 3.5.1 固定長メモリプール
>
> サイズが blkszバイトのメモリブロックを blkcnt個獲得できるのに必要な固
> 定長メモリプール領域のサイズは,ROUND_VP(blksz) * blkcnt バイトである.
> ここで,ROUND_VP(blksz) は,blksz をターゲットプロセッサ/コンパイラの
>ポインタのサイズの倍数になるよう切り上げた数を表す.TSZ_MPF は定義して
> いない.
ですが、ROUND_VPではなくてTROUND_VPの間違いだと思われます。

---
ACKyugo <ackyugo @ users.sourceforge.net>