現在h83052を用いて光量センサの値を測定するプログラムを作成し、完成するまでに至っています。その測定結果から、h8でついでにフーリエ展開した係数の結果まで表示するように現在プログラムを改良しています。
フーリエ展開の計算過程にはsin,cos関数を使用する必要があり、コンパイルのところで算術演算関数用ライブラリlibm.aをリンクする必要があります。このライブラリlibm.aというのは、クロスコンパイル環境を構築するときにインストールしたnewlibの中に含まれていると思ったのですが、h8用に構築したlibディレクトリ内にlibm.aファイルがありませんでした。構築の際に失敗したのか、もともとほかのlibm.aファイルを使用するのか、よくわかりません。
おそらく、h8用にインストールしたものを使用しないとコンパイルの際のシンボルがうまくあわないと思うので、困っているのですが・・・
どなたかわかる人がいらっしゃればよろしくおねがいします。
簡単なようで難しい感じになっています。
No.3
- 回答日時:
トラブル解決おめでとうございます。
> こんな感じでいいでしょうか。
シリアル通信の上に乗っかるプロトコル仕様の設計になりますので、
「自分でルールを決めて好きなように実装すればよい。」
ってのがきっと解答になってしまうのでしょう。
それも寂しい気がしますので割りと融通の利くサンプルでもご参考になれば。
ホストPCからの入力はHterm,TeraTerm,minicomなどの汎用シリアル通信アプリケーション。コマンドの入力はenterキー入力で完了とする。
これくらいの縛りであれば、ターゲット側で受信用のリングバッファでも用意しておき、CRの入力があった場合に、バッファ内の受信データをパーサに渡します。
パーサではstrcmpでも使ってコマンドを分類し、該当コマンドのハンドラを呼び出せば、後でいくらでもコマンドの拡張が可能です。
簡単なリモートコンソールを実装してしまうわけですね。
難易度もそれほど高くないことと、ちゃちゃっと作ってしまえば、使い回しも楽ですしデバッグ用に重宝しますよ。
やってることはプロトコルスタックの設計とか、状態遷移の実装とか必要になりますし、組み込み系ソフトウェアにとって実の多いトレーニングになると思います。
ありがとうございます。最終的には、いろいろ設定値を変更できるようにしたいので、とても参考になります。
今、フーリエ変換した値ををシリアル通信のソフト(ハイパーターミナル)などで表示できるようするために、その値を文字コードに変換して送るようにしているところです。
その変換した値がどのくらいなのかわからないので、場合わけ等が必要なのかと思っていましたら、会社の方にsprintfを使えばいいと言われました。
それは気づかなかったと思って、使ってみたら動きませんでした(^^;
型のあわせ方とかが間違っているのかな?
char buf[100];
sprintf(buf,"%f",a[k]); //a[k]はフーリエ展開した係数の値(double)
for(i=0;i<100;i++){
SCI_OUT_d(buf[i]); //SCI_OUT_dはシリアル送信関数
}
なにかおかしいところありますか?
ためしに
char buf[100];
float DFTa;
DFTa=(float)a[k];
sprintf(buf,"%f",a[k]); //a[k]はフーリエ転換した係数の値(double)
for(i=0;i<100;i++){
SCI_OUT_d(buf[i]); //SCI_OUT_dはシリアル送信関数
}
でfloat型にしてみてもそこでとまってしまいました。
No.2ベストアンサー
- 回答日時:
肝心の環境が書いてないので憶測ですが、
> h8用に構築したlibディレクトリ内にlibm.aファイルがありませんでした。
自身で環境構築を行っているならば、--prefixで設定したディレクトリ内に
--targetで指定したディレクトリが作成され、その中にlibディレクトリが
できているかもしれませんね。
configure時に設定したオプションはgccの-vオプションで確認が可能です。
(無論ネイティブのではなくクロスコンパイル用のgcc)
この時、--with-newlibと--with-headersの定義がなされていたか一応確認
環境構築時にnewlibのビルドとインストールを行っていればlibm.aは作成されているでしょう。
コア別、エンディアン別にディレクトリ分けされてる場合もありますが、
3052であれば300H、ビックエンディアンくらいしかないでしょうから、
探すのも容易じゃないかな。
gccのバージョンとnewlibのバージョンによってはうまく構築できないような話も伺いますので、構築時に実績のある環境を選択することも重要でしょう。
いつもありがとうございます。助かります。
構築の際にtargetで指定した場所にlibディレクトリはあるのですが、libmのファイルがなかったんです。。。
もう一度、newlibの構築を行ったら、できました。
gcccore-3.4.6のインストールの際についでにnewlibのインストールも行いましたが、--with-headersがついていなかったのかもしれません。
それで、算術演算関数ライブラリをリンクすることができ、フーリエ変換できるようになりました。
今度はSCI受信の機能を使用して、フーリエ変換で使用する基本周期などの値を入力できるようにしたいです。受信はできるようになりました。(エコーバックで確認)しかし、その受信した値をどのようにしようかというところで少しつまずいてしまっています。
1文字受信→配列に格納→格納した値をアスキーコードからバイナリコードに変換→各位になるように計算して基本周期として格納
こんな感じでいいでしょうか。
つまずいているところは、受信しているときに今のところ無限ループにしているので、どのように終わりにするかということです。
No.1
- 回答日時:
参考になるかは判りませんが、下記のページで、「H8でコンパイラに数学ライブラリーが付属していない場合下記の方法で作ることができます。
」とありました。http://s8426ec.free100.tv/math.htm
回答ありがとうございます。ここに質問する前にそのページは見ましたが、自作する方法は初心者の自分としてはかなり困難であると思ったのでスルーしてしまいました。libmを構築することはできましたので、なんとかできそうです。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Makefile作成時の拡張子.oとは?
-
エクセルVBAではRound...
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
セミコロンについて
-
VB5の逆コンパイルについて
-
” OS ビルド ” の意味が分か...
-
ヘッダファイルを使わずに定義...
-
マクロ コンパイルがグレーバック
-
外部シンボル "_main"は未解決です
-
【VC++6.0(MFC)】警告「LINK : ...
-
OpenCVを Borland C++ Builder...
-
pyc 編集 閲覧
-
Mac C Undefined x86_64
-
アプリケーションの配布
-
「fatal error C1189」を回避す...
-
Borland C Builder で OpenCVを...
-
クリティカルエラー Expressio...
-
DirectX9SDKが入ってるPCでDi...
-
C++/CLIで、アンマネージC++のD...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
「fatal error C1189」を回避す...
-
Makefile作成時の拡張子.oとは?
-
ILSpyで、デコンパイルできない。
-
1 つ以上の複数回定義されてい...
-
外部シンボル "_main"は未解決です
-
セミコロンについて
-
C言語でヘッダファイルにグロー...
-
” OS ビルド ” の意味が分か...
-
マクロ コンパイルがグレーバック
-
【VC++6.0(MFC)】警告「LINK : ...
-
クリティカルエラー Expressio...
-
PRO*C コンパイルエラー
-
[c++] <pthread.h>がinclude で...
-
<math.h>があるのにsqrtが・...
-
ビルドとリビルドの違いを教え...
-
CImageクラスの使用について
-
戻り値について
-
コンパイルエラー:ユーザ定義...
おすすめ情報