急ぎでお願いします

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yumi

急ぎでお願いします

#1

投稿記事 by yumi » 14年前

管理人:
著作権保有者から削除依頼があった為、投稿記事を削除しました

Poco
記事: 161
登録日時: 15年前

Re: 急ぎでお願いします

#2

投稿記事 by Poco » 14年前

質問したいことは何ですか?

yumi

Re: 急ぎでお願いします

#3

投稿記事 by yumi » 14年前

キッチンタイマのように,設定した時間をカウントダウンし,0秒になった時点で通知するプログラムのソースを教えて下さい

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#4

投稿記事 by h2so5 » 14年前

これは何かの宿題でしょうか?問題の丸投げは禁止です。

また、非公式のGBAソフトの開発などマニアックすぎて答えられません。
せめてgba1.hの中身や、ハードウェアのデータが無いととても無理です。

あと、コードはcodeタグで囲って下さい。

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 急ぎでお願いします

#5

投稿記事 by bitter_fox » 14年前

情報が少なすぎます。

まずフォーラムルールに従ってコードを載せる際はcodeタグで囲っていただきますようにお願いします。

また、次の五点を明らかにしてください。

コード:

  1. 自分は今何がしたくて - これは、タイマープログラムの作成ですね。

  2. どう取り組んで(作ったプログラムはどれで - 自分がどこまでかけたのかを教えてください。

  3. どのようなエラーやトラブルで困っていて - もし、エラーやコンパイルがうまくいかない場合や実行しても思いの結果にならなかった場合は教えてください。

  4. 自分は何が解らないのか、知りたいのか

  5. 今のCの知識はどの程度なのか
また「使っているOS名・コンパイラ名・ライブラリ名も明記しましょう。」これもお願いします。

ちなみに、「課題の丸投げ(問題文だけ書く事)は禁止です。」となってますのでご注意願いします。

非常に便利なテンプレがあるので、ご利用ください。

コード:

[1] 質問文
 [1.1] 自分が今行いたい事は何か
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
 [1.4] 今何がわからないのか、知りたいのか
      
[2] 環境  
 [2.1] OS : Windows, Linux等々
 [2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々

[3] その他 
 ・どの程度C言語を理解しているか
 ・ライブラリを使っている場合は何を使っているか
さらに、今回はGBAプログラムの開発のように思いますが非常にマニアックですので、エントリーポイントや使ってよい関数などを明示してください。

yumi

Re: 急ぎでお願いします

#6

投稿記事 by yumi » 14年前

キッチンタイマのように,設定した時間をカウントダウンし,0秒になった時点で通知するプログラムがわかりません。
今できているのはカウントダウンするところまでです。
カウントダウンして、0秒になった時、文字を表示させる方法がわかりません。
gba_io1.cやgba1.hなどは利用してよいがコードを変更はしてはいけない。
gba_io1.cのソースは

コード:

著作権保有者からの要請によりソースコードを削除しました。
です。
どこに何を加えたら0秒になった時、文字が表示されますか?
文字は「0になりました」と表示させたいです。
C言語は初心者です。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#7

投稿記事 by h2so5 » 14年前

今思いつくのはこんなコードです。
資料が無いのでタイマ停止処理は入れていません。

コード:

    while (1) {
        
        /* タイマ3 カウント値読込み */
        time =  *((unsigned short *)0x0400010C);
        
        /* time 表示位置設定 */
        locate(8, 3);

        if(time > 0){
                display_time(time);
        }else{
                prints("0になりました");
        }
 
    }

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 急ぎでお願いします

#8

投稿記事 by bitter_fox » 14年前

ご返答ありがとうございます。以下のようにしてみていただけますでしょうか??

コード:

void display_time(hword val) {
    
    
/* 引数を10進数として表示する関数(最大値16ビット)*/
 
    byte char_data[] = "9876543210";
    byte buf[6];
    hword tmp;
    int i;

    if (val == 0) /* ここから */
    {
        prints("0になりました");
        return;
    } /* ここまで変更 */
    
    /* 入力値valの桁数設定 */
    i = 3;
 
    /* 文字列の最後にNULLコード挿入 */
    buf[i+1] = 0;
    
    /* 最下位桁の文字(10で割った余り)を挿入し,入力値を10で割る */
    for(; i >= 0; i--) {
        buf[i] = char_data[mod(val, 10)];
        val = div(val, 10);
    }
    
    /* 文字列全体を表示 */
    prints(buf);
    
    return;
}
[hr][追記]
h2so5さんとかぶってしまいましたね。。。
h2so5さんの方が、display_timeにまで0になった時の出力が食い込んでないので、いいかもしれませんね・・・

yumi

Re: 急ぎでお願いします

#9

投稿記事 by yumi » 14年前

ありがとうございます。
9999秒からカウントダウンが始まるのでなかなか0になりません。
そこでこれを60からカウントダウンが始まるようにする方法を教えて下さい。
h2so5さんのを加えて実行してみましたが、99999999→99989998→99979997となってしまいました。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#10

投稿記事 by h2so5 » 14年前

それは、タイマの仕様が分からないと答えられません。
なにか他に資料は無いのですか?

追記:

*((unsigned short *)0x0400010C) = 0x0000; // タイマ3 カウンタ設定(元クロック1秒)

*((unsigned short *)0x0400010C) = 0x003C; // タイマ3 カウンタ設定(元クロック1秒)

これでどうでしょうか?

yumi

Re: 急ぎでお願いします

#11

投稿記事 by yumi » 14年前

9999→9998とうまくいきましたが
9999の横に文字化けが発生しています。9998になっても消えません。
資料というのはどのような資料をお見せしたらいいですか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#12

投稿記事 by h2so5 » 14年前

タイマのレジスタに関する資料です。

例えば、この
*((unsigned short *)0x0400010E) = 0x0084;
0x0400010Eというアドレスや0x0084という数値はどこから持ってきたものなのですか?

yumi

Re: 急ぎでお願いします

#13

投稿記事 by yumi » 14年前

私にもわからないです。
アドレス割り当て
0x04000100番地 タイマ0 タイマ設定レジスタ
0x04000102番地 タイマ0 タイマ設定レジスタ
0x04000104番地 タイマ0 タイマ設定レジスタ
初期値はすべて0
タイマ0のみ,カスケード接続不可
と資料には書いてあります。
gba1.h: ヘッダファイル
gba_io1.c: 入出力処理を集めたソースコード
locate(cx, cy)
prints(“abcdef”)
printh(i)
printn(i)
print_ascii(ascii_num)
draw_point(x, y)
8x8ascii.h: 文字フォントデータ
crt.S: C言語ランタイムスタートアップ
gcc.ls: リンカスクリプト
Makefile: メイクファイル
というのも資料にあります。
全然わからないですよね?
すみません

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#14

投稿記事 by h2so5 » 14年前

ここを参考にすると
http://jaco.ec.t.kanazawa-u.ac.jp/edu/GBA/hard.html

*((unsigned short *)0x0400010E) = 0x0084; // タイマ3 制御設定(タイマON,割込みOFF,カスケードON,プリスケーラなし)

*((unsigned short *)0x0400010E) = 0x0082; // タイマ3 制御設定(タイマON,割込みOFF,カスケードON,プリスケーラなし)

でどうですか?

yumi

Re: 急ぎでお願いします

#15

投稿記事 by yumi » 14年前

9999からカウントダウンされるスピードが速くなって、0を超えたら
また9999に戻っています。
しかも文字化けは直っていません。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#16

投稿記事 by h2so5 » 14年前

0になるとタイマ停止します

コード:

    while (1) {
        
        /* タイマ3 カウント値読込み */
        time =  *((unsigned short *)0x0400010C);
        
        /* time 表示位置設定 */
        locate(8, 3);
 
        if(time > 0){
                display_time(time);
        }else{
                /* タイマ停止 */
                *((unsigned short *)0x0400010E) = 0x0000;
                prints("0になりました");
        }
 
    }
文字化け原因はよく分かりません。

追記:

/* 入力値valの桁数設定 */
i = 3;



/* 入力値valの桁数設定 */
i = 4;

でどうですか??

yumi

Re: 急ぎでお願いします

#17

投稿記事 by yumi » 14年前

最初から文字化け状態で9999すら表示されません。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#18

投稿記事 by h2so5 » 14年前

開発環境が手元にないのでこれ以上調べようが無いんですが...。
期限などはあるのでしょうか?

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 急ぎでお願いします

#19

投稿記事 by bitter_fox » 14年前

最初に投稿していただいたプログラムを実行するとどうなりますか??
・文字化けを起こさないか?
・出力が、[99999999][99989998]といった風にならないか?

また、先ほど文字化けを起こすとおっしゃっていましたが、どういった風な出力になるのか教えていただけますでしょうか?
具体的にお願いします。
例)[9999-'(F*@]:a]

yumi

Re: 急ぎでお願いします

#20

投稿記事 by yumi » 14年前

私が最初に乗せたプログラムで実行しますと
9999→9998となり99999999→99989998とはならず
文字化けもしません。
文字化けは
例)[9999-'(F*@]:a]
と同じようになりますが、
文字化けの文字はアルファベットでもなく記号ばかりです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#21

投稿記事 by h2so5 » 14年前

8x8ascii.hの中身を見せてもらえますか?

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 急ぎでお願いします

#22

投稿記事 by bitter_fox » 14年前

yumi さんが書きました:私が最初に乗せたプログラムで実行しますと
9999→9998となり99999999→99989998とはならず
文字化けもしません。
文字化けは
例)[9999-'(F*@]:a]
と同じようになりますが、
文字化けの文字はアルファベットでもなく記号ばかりです。
ありがとうございます。
では、次のプログラムではどうでしょうか??

コード:

著作権保有者からの要請によりソースコードを削除しました。

yumi

Re: 急ぎでお願いします

#23

投稿記事 by yumi » 14年前

ありがとうございます
実行しましたところ0050→0049→0048・・・0000→5500→5499→5498となりました。

yumi

Re: 急ぎでお願いします

#24

投稿記事 by yumi » 14年前

h2so5さん

8x8ascii.hの中身です

コード:

著作権保有者からの要請によりソースコードを削除しました。

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 急ぎでお願いします

#25

投稿記事 by bitter_fox » 14年前

yumi さんが書きました:ありがとうございます
実行しましたところ0050→0049→0048・・・0000→5500→5499→5498となりました。
ありがとうございます。
では次のようにしてみてください。

コード:

著作権保有者からの要請によりソースコードを削除しました。
これでどうでしょうか??

yumi

Re: 急ぎでお願いします

#26

投稿記事 by yumi » 14年前

bitter_fox さんが書きました:
yumi さんが書きました:ありがとうございます
実行しましたところ0050→0049→0048・・・0000→5500→5499→5498となりました。
ありがとうございます。
では次のようにしてみてください。

コード:

著作権保有者からの要請によりソースコードを削除しました。
これでどうでしょうか??

エラーが出て実行できません。
crt.o(.text+0x0):undefined reference to 'main'
とエラーが出てきました。
ちなみに文字を表示させるのは
8x8ascii.hよりアルファベットしか
表示できないようなので
「OPEN」と表示させることにしたいと思います。

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 急ぎでお願いします

#27

投稿記事 by bitter_fox » 14年前

yumi さんが書きました:エラーが出て実行できません。

8x8ascii.hよりアルファベットしか
表示できないようなので
ですか、、、それが日本語を出力しようとしたからなのかわからないので以下のように変更してください。

コード:

    while (1) {
        /* time 表示位置設定 */
        locate(8, 3);
 
        /* タイマ3 カウント値読込み */
        if (70-*((unsigned short *)0x0400010C) > 0)
        {
                time = 70-*((unsigned short *)0x0400010C);
                display_time(time);
        }
        else
        {
                prints("OPEN");
        }
    }
 
[hr][編集]
「日本を出力」となっていたので日本語に編集(日本を出力なんてできないだろっwww)

yumi

Re: 急ぎでお願いします

#28

投稿記事 by yumi » 14年前

先ほどと同じエラーが出ました。

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 急ぎでお願いします

#29

投稿記事 by bitter_fox » 14年前

yumi さんが書きました:先ほどと同じエラーが出ました。
マジですかぁ・・・orz

ではこれでどうでしょう??

コード:

著作権保有者からの要請によりソースコードを削除しました。
[hr][修正]
0になった時の出力文字列が日本語のままだったので、修正しました。
定数を修正しました。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 急ぎでお願いします

#30

投稿記事 by h2so5 » 14年前

一応これで、お望みの動作をするはずです。
こちらの環境では正常に動作しました。

コメント消してますが、
const unsigned short time_rest = 60;
で残りの秒数を決めています。

コード:

著作権保有者からの要請によりソースコードを削除しました。

yumi

Re: 急ぎでお願いします

#31

投稿記事 by yumi » 14年前

動きました。
ありがとうございます。
ちゃんと表示もされました。

yumi

Re: 急ぎでお願いします

#32

投稿記事 by yumi » 14年前

このレビューをすべて削除して欲しいです

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: 急ぎでお願いします

#33

投稿記事 by Dixq (管理人) » 14年前

yumiさん

削除依頼についてですが、理由をお聞きしても良いでしょうか。
ここのフォーラムルールをご覧になったかどうか解りませんが、ここの投稿記事は基本的に削除できません。
また、不当に削除、記事を編集された場合は、こちら側で記事を元に戻すことになっています。

それは必要な情報だけ聞き出して全ての記事を削除するという行為が回答して下さった方々へ非常に失礼な行為だからです。
もし逆の立場だったらどうでしょう。
yumiさんが熱心に回答した記事が、次の日に見ると忽然とと削除されていたら・・。

私はbitter_foxさんとh2so5さんが別の場で、一生懸命回答をする為に話し合いをされているのを見ていました。
あれだけ熱心に取り組んで回答された記事を削除することは私には出来ません。
もし事情があれば、それを考慮の上、一部だけ削除ということはできるかもしれませんが、
それは最小限にして頂きたいという気持ちでいます。

yumi

Re: 急ぎでお願いします

#34

投稿記事 by yumi » 14年前

私の勝手で
とくに理由もなく削除依頼を出してすみませんでした。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: 急ぎでお願いします

#35

投稿記事 by Dixq (管理人) » 14年前

著作権保有者から削除依頼があった為、投稿記事のソースコードを削除しました

課題などで配布されたソースコード一式をアップロードする行為は著作権違反行為になります。
今回せっかく熱心に回答して下さったbitter_foxさん、h2so5さんの投稿されたソースコードも一式削除しなければならなくなりました。
どうか質問される際は著作権にご注意の上、このようなことにならないよう十分ご注意ください。

閉鎖

“C言語何でも質問掲示板” へ戻る