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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
cc と gcc の違い
-
サイクルカウントの方法
-
組み込みソフト。ROM領域にデータ
-
中国語(簡体字)をソースコード...
-
C言語の規格
-
HP-UXのプログラムをSolaris、R...
-
VisualC++6.0でhugeモデルを使...
-
VBでVC++の処理速さを実...
-
C++でデスクトップGUIアプリ開...
-
main() 関数は、int を返値とす...
-
<conio.h>?
-
ソフトの開発言語を調べる方法
-
VB6のコンパイラ
-
#pragmaとは
-
printfなど、標準関数のソース...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
アプリケーションのDLLファイル...
-
<math.h>があるのにsqrtが・...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
C++でデスクトップGUIアプリ開...
-
組み込みソフト。ROM領域にデータ
-
cc と gcc の違い
-
C++Builder → Visual C++ 移植...
-
printfなど、標準関数のソース...
-
COBOLのALPHABET...
-
COBOLの論理演算子について質問...
-
Visual Studio でmakefileを使...
-
cobolで実行環境って何ですか?
-
パーサとコンパイラの違いって?
-
昔のgraph.hというファイル
-
未使用引数の注意文出力を回避...
-
C言語でのコンパイラの作成方法
-
C言語はC言語でできている?
-
COBOL計算式の中間ワーク桁数に...
-
リリースモードとデバッグモー...
-
POWERCOBOLのSQL...
-
Σの計算について
おすすめ情報