No.5ベストアンサー
- 回答日時:
「YCSH」はイエローソフト社のホームページによるとdoubleにも対応していると書いてますので、まず大丈夫だと思います。
コンパイル時にリンクエラーとか出ていないですよね?たぶんですが、デバッガはイエローソフト社のイエロースコープを使ったと思いますので環境的にも問題ない気がします。
ソースコードは次の点が気になりました。
(1)変数syuの定義が何処にもないけどaの間違いですかね?
(2)ソースがfloatですがfloatをdoubleに変えただけですか?
(3)scanf("%f",&a);はdoubleの時はscanf("%lf",&a);としていましたか?
まぁ、これらの問題を置いておいても「角度」で表示が止まった説明は出来ません。
なので調べて欲しいことがあります。、
1.イエローソフト社のホームページで「YCSH」が最新版であることを確認してください(コンパイラのバグの可能性もあるため)。
http://www.yellowsoft.com/download/qanda_03.html
2.デバッガでステップ実行してみてください。printfで問題が起きたのかscanfで問題が起きたのかはっきりさせる必要があります。
すいません、aの間違いです;
(2)はただfloatoをdoubleに変えただけです。
(3)はちゃんとdoubleの時はscanf("%lf",&a);にしていました。
調べてほしいことなんですが、もうこの項目の実験は終わってしまったのでもう調べられないんです。担当の先生に直接聞いています。
みなさん詳しく回答していただきありがとうございました。いろいろと勉強になりました。doubleが使えると分かったので満足です。
回答してくださったことを踏まえて、先生にいろいろと聞いてみたいと思います。
No.4
- 回答日時:
SH7044にはFPU(浮動小数点演算回路)が搭載されいないので固定小数点を使って浮動小数点の演算を行いますので単精度でも重いですが、倍精度だとべらぼうに重いと思います。
それはそれとして、
>main関数にwhile文で無限ループをつくったのですが、「double」だとすぐにループを抜けてしまいました。でも「float」で変数宣言したらちゃんとループを抜けずに実行してくれました。
>実行すると、
> 角度
>と表示されてプログラムが終了してしまいました。(?すら表示されませんでした。)
これは無限ループから抜けたんじゃなくて何らかの例外でCPUが停止したんです。ループを抜けるようだと無限ループとは言わない。デバッガで追いかけたらすぐ分る気がするんですけどね。
とりあえず前後も合わせてループの部分を掲載してください。
#include <stdio.h>
//SH7044レジスタ
#define PEIOR (*((volatile unsigned short *)0xFFFF83B4))
#define PECR1 (*((volatile unsigned short *)0xFFFF83B8))
#define TSTR (*((volatile unsigned char *)0xFFFF8240))
#define TSYR (*((volatile unsigned char *)0xFFFF8241))
#define TOER (*((volatile unsigned char *)0xFFFF820A))
#define TCR3 (*((volatile unsigned char *)0xFFFF8200))
#define TMDR3 (*((volatile unsigned char *)0xFFFF8202))
#define TIOR3H (*((volatile unsigned char *)0xFFFF8204))
#define TIOR3L (*((volatile unsigned char *)0xFFFF8205))
#define TSR3 (*((volatile unsigned char *)0xFFFF822C))
#define TCNT3 (*((volatile unsigned short *)0xFFFF8210))
#define TGR3A (*((volatile unsigned short *)0xFFFF8218))
#define TGR3B (*((volatile unsigned short *)0xFFFF821A))
#define TGR3C (*((volatile unsigned short *)0xFFFF8224))
#define TGR3D (*((volatile unsigned short *)0xFFFF8226))
float a, b;
void pwm_init(void)//PWMの初期化
{
TMDR3 = 0x02; //PWMモード1
PEIOR |= 0x0F00; //PE8-11:OUT
PECR1 |= 0x0055; //PE8-11(TIOC3A-TIOC3D):MTU
TSTR &= ~0x40; //カウンタストップ
TCNT3 = 0; //カウンタクリア
TCR3 |= 0x23; //TGR3A TCNTO CLEAR、CLOCK(24.576MHz)/64
TGR3A = 7680; //周期:(1/24.576MHz)*64*7680=20ms
TGR3B = 768; // DUTY:(1/24.576MHz)*64*768=2ms
TIOR3H = 0x16; //GRA初期出力1、コンペアマッチで出力1
//GRB初期出力0、コンペアマッチで出力0
TGR3C = 7680; //周期:(1/24.576MHz)*64*7680=20ms
TGR3D = 768; // DUTY:(1/24.576MHz)*64*768=2ms
TIOR3L = 0x16;//GRC初期出力0、コンペアマッチで出力0
//GRD初期出力1、コンペアマッチで出力1
TSTR |= 0x40;//カウンタ開始
}
void main(void)
{
pwm_init();
while(1){
printf("角度は?\n");
scanf("%f",&a);
b=(float)384+(float)syu*(float)384/(float)180;
printf("%f\n",b);
TGR3B = (unsigned short)b;TGR3D = (unsigned short)b;}
}
見にくくてすいません
No.3
- 回答日時:
開発環境とコンパイラは?
> SH2マイコンでは「double」は使えないのでしょうか?
GCCでもルネサスの評価版C/C++コンパイラでも、浮動小数点はサポートされているので動かないわけではないと思います。が、「ふつうの」SH2は浮動小数点演算コプロセッサを持っていないので、doubleの演算をするとすごく重くなります。特に割り算なんかやらせたら目も当てられない・・・。
> プログラムがハードでうまく実行できませんでした。(プログラムのエラーはないです。)
そういうときは、
1.何をして、
2.どういう結果になると思ったら
3.どうなったか
を書いてください。
開発ソフトウェアは、イエローソフト社製YellowIDEです。
RCサーボモータを指定された角度に制御するプログラムなのですが、プログラムを実行したら、すぐにプログラムが終了してしまいました。
その時の状況は、角度を、
printf("角度は?\n");
scanf("%f",&a);
b=(入力した角度aを変換して、doubleに型キャストした計算式)
TGR3B = (unsigned short)b;
TGR3D = (unsigned short)b;
こんな感じでコンピュータから入力して制御するつもりだったのですが、実行すると、
角度
と表示されてプログラムが終了してしまいました。(?すら表示されませんでした。)
No.2
- 回答日時:
SH2にはハードに浮動小数点回路搭載の有無やら色々バリエーションがあるはずです。
ラインナップ
http://japan.renesas.com/fmwk.jsp?cnt=sh7280_ser …
使用されたコンパイラの名称(HEWか?)とターゲットとなっているSH2の詳細な名称を書いてください。
たぶん、FPUのないSH2でFPUのあるSH2用のコンパイルオプションを指定してしまったとかと言うオチだとは思います(命令例外にならなかったのかが疑問ですが)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 1つのタクトスイッチで複数の並列回路を閉じ、アースにつなげることができるスイッチはありますか。 2 2022/08/06 10:38
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- その他(プログラミング・Web制作) Linuxについて質問です。 引数に指定されたアクセスログのファイルからアクセス数が多い順に上位3つ 1 2023/02/03 03:46
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- UNIX・Linux 実行の仕方及び実行結果が分かりません。 2 2022/11/17 19:31
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
C++Builder → Visual C++ 移植...
-
24bit サイズの変数
-
配列の初期化子 { .......} ...
-
組み込みソフト。ROM領域にデータ
-
CISCとRISCの移植性について
-
中国語(簡体字)をソースコード...
-
C言語でチェスを作ってみたいと...
-
COBOLの論理演算子について質問...
-
for文内での変数定義
-
C++でデスクトップGUIアプリ開...
-
C++DLLの明示的リンクに関して
-
組込みC開発
-
.EXEから製作者を特定すること...
-
sprintfの書式について
-
DLLの呼び出され方が分かりません
-
各言語の違いのついて
-
”カラー表示プログラム”のソー...
-
C言語はC言語でできている?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
printfなど、標準関数のソース...
-
組み込みソフト。ROM領域にデータ
-
C++Builder → Visual C++ 移植...
-
cc と gcc の違い
-
パーサとコンパイラの違いって?
-
COBOLの論理演算子について質問...
-
C++でデスクトップGUIアプリ開...
-
リリースモードとデバッグモー...
-
COBOLのALPHABET...
-
bcpadのコンパイラのインストー...
-
C言語はC言語でできている?
-
VC++の/Zm オプションについて
-
エラー0でのビルド失敗について
-
long long型について
-
main() 関数は、int を返値とす...
-
COBOL計算式の中間ワーク桁数に...
-
C言語の規格
-
変数の内容がコロコロ変わる、...
おすすめ情報