度々こちらで、お助け頂いております。
さて、今回の主旨はPICマイコンによりLCD表示器へ6個の数字を
表示する方法についてご質問させていただきました。
プログラミングはPIC用コンパイラCCS社のCコンパイラを使用し、
Micro chip社のMPLABと統合動作させています。
一般的なC言語と異なる部分があり、扱づらい面のあるコンパイラです。
では、問題のソースコードを次に記述します。
細部の設定や定義は省いて記述してあります。
1.void main()
2. {
3.int data,i;
4.srand((unsigned)time(ULL));
5.data = 0;
6.表示器の初期化
7.カーソル位置をHomeへ
8.while(1)
9.{
10.入力信号判定式
11.for(i = 0; i < 6; i++)
12. {
13. data=rand( )%6 + 1;
14. printf(lcd_data"%3d",data);
15. }
16.入力信号判定式
17.break;
18. }
19. }
以上、これだけのソースコードですが、コンパイルすると、
行番4コードがコンパイルエラーとなります。
(※英語のメッセージは読取れません。(勉強不足))
PICに関するrand( )とsrand( )関数について、いろいろと調べてみましたが、
それらに該当する項目が見当たりません。
そこで、行番4の部分をsrand(data);に変更したら、何とかコンパイル成功します。
それをPICに書込み、ターゲットに実装試験してみると、
100回乱数表示のうち、18回同じ組合せの数が出てしまいます。
どうも、srandの初期化が上手く出来てないみたいですが・・・
何処が不具合となっているのでしょうか?
また、同じソースコードをパソコンの標準Cで試してみると、
130回とも全てランダムに画面表示されます。
そこでどなた様か、PICに詳しい方のお知恵を拝借し、
ご指南頂けるなら、大変幸いに思います。
何卒宜しくお願い申し上げます。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> 行番4コードがコンパイルエラーとなります。
> (※英語のメッセージは読取れません。(勉強不足))
読んでください。それができないなら、そのメッセージをコピーして、ネットで検索したり翻訳したりしてください。
質問するにしても、そのメッセージが無いとなんとも言えません。
> srand((unsigned)time(ULL));
・NULLの打ち間違いですか?ULLのままですか?
・PICマイコンって時計内蔵してるんですか?時計が無ければ、現在時刻を返すtime関数を正常に動作させるのは無理ですよね。
マニュアルちょっと見る限り、time関数は用意されていないようですが。
エラーメッセージを読めば、上の間違いなら、「ULLなんて知らない」とか「timeなんて知らない」とか書いてあるはずです。
> そこで、行番4の部分をsrand(data);に変更したら、何とかコンパイル成功します。
> それをPICに書込み、ターゲットに実装試験してみると、
> 100回乱数表示のうち、18回同じ組合せの数が出てしまいます。
randは、疑似乱数といって、一見バラバラに見えますが、実際はsrandを初期値として使って計算で求めた値です。
なので、srandで指定した「種」が同じだと、乱数の出方も同じになります。
そのため、実行のたびに違う値になって欲しいときは、実行のたびに変わるような種を使います。
time、つまり「現在時刻」を使うのは、そのための手段の一つです。
宣言しただけで、まだ値を代入していない変数dataを使った場合、メモリの内容は不定なので、種として機能することもあるでしょう。しかし、時刻を使った場合にくらべて「前回と同じ」になる可能性が大きいです。
kmee 様
早速のご回答頂きまして有難うございました。
順を追っていろいろと、検索やら試をしているうち、
お礼と、結果報告が遅くなり申し訳ございません。
PICマイコンとCCS-Cコンパイラは、やはりtime.hが扱われないようですね。
エラーメッセージから、”使用定義されてない機能”と解読できました。
行番4行目の(ULL)は、こちらの記述ミスで、(NULL)が正しいコードです。
time関数が使用できないとなれば、また別の方法がないのか、
考えてみようと思います。
ご親切な解説ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
変数(関数)名の頭に_
-
コンパイルできない
-
PICマイコンによる乱数の表示に...
-
C言語のワーニングメッセージの...
-
ABAQUS ユーザーサブルーチン...
-
【エラー】Cpadで初めてコンパイル
-
C++ で、「)」が必要 というエ...
-
Visual C++とVisual C++.NETの違い
-
シンボル、リンカーの(ソフト...
-
fortranでのNaNについて
-
C言語で長方形を作る
-
コンパイルの意味
-
Eclipseの環境設定について
-
パックマンプログラム
-
【JAVA】数字をひし形に出力す...
-
自動クエリとはどういうもので...
-
変数の値が勝手に変化する原因
-
あるプログラムのコマンドライ...
-
C言語のプログラミングの問題で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++でアボート(Abort)で処理が...
-
変数(関数)名の頭に_
-
C++ で、「)」が必要 というエ...
-
io.hをincludeするとそのような...
-
C言語のワーニングメッセージの...
-
Eclipseの環境設定について
-
ABAQUS ユーザーサブルーチン...
-
Visual C++とVisual C++.NETの違い
-
コンパイルできない
-
volatile修飾について
-
コンパイラについて
-
コンパイラフラグ(compiler fla...
-
Delphiの逆コンパイル
-
fortranでのNaNについて
-
cobolの文法チェックソフト
-
不要なインクルードファイルの検出
-
__extension__
-
IPアドレス表示プログラム
-
isnanの取り扱いについて
おすすめ情報