|
|
|
| 2008/10/07 11:43||▲
|
|
|
srand関数は、乱数の種を設定するための関数です。この関数で、適切に種を設定しないと、rand関数は常に同じ数列を返すことになります。
ところで、乱数の種としてsrand関数に渡す値には、time関数の返却値を使うことが多いようですが、今回の実装では、time関数はデフォルトでは (time_t)-1 を返すことになりそうですので、あらかじめお断りしておきます。
それでは実装です(2006/06/08 若干間違いがあったので修正しました)。
#include <kernel.h>
static unsigned long next = 1UL;
void srand(unsigned int seed) { #ifdef __H8300__ int loc = vsns_ini() || sns_loc(); if (!loc) loc_cpu(); #endif next = seed; #ifdef __H8300__ if (!loc) unl_cpu(); #endif }
H8/300の場合、unsigned long型のオブジェクトへの代入はアトミックオペレーションにならないため、loc_cpuで排他制御を行っています。もっとも、現状のTOPPERS/JSPカーネルは、H8/300に対応していないので、このような措置は不要かもしれませんが、とりあえずこうしておきます。
|
| 2006/06/05 22:12|一般ユーティリティ|TB:0|CM:0|▲
|
|
|
コメント
|
|
コメントの投稿
|
|
|
|
|
トラックバック
|
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/67-5e713988
|
|
|
|
|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|