おわた

金曜日の夕方頃から悩んでいた問題が何と解決(?)。
いや、解決したというか、結局、無理でした。

問題はというと、マイコン(SH/Tiny、SH7125)用のプログラムをHEWから新規に作成して、
SCI(Serial Communication Interface)とCMT(Compare Match Timer)を
同時に使用するとどっちかがおかしくなるというもの。
おそらく、SCIの方は問題はなくて、CMTの方が何かしらの問題を起こしていると思う。

具体的な状態としては、以下の2通りの状態が発生した。

1、SCIで出力の途中にCPUが停止する(よって、CMTは動作しない)。
2、ずっと無効な文字列をSCIで送信する(この時は、一応、CMTは動作する。ただ、Timerがおかしい)。

おそらく、最終的な原因はわからなかったが、
理由は以下のとおりだと推測している。

1、割り込みがかかったときの関数アドレスが間違っていて、無効なアドレスに飛んでしまったためCPUが停止した。
(ただ、例外発生時の割り込みにLED表示だけの処理書いても、
アドレスエラーを検出していなかったので何とも言えないところがある)

2、これもおそらく同様の問題。何らかの表紙にSCIの入出力を行っているFIFOのアドレスがおかしくなったため、
延々と無効な文字列を送っていると考えられる。

ただ、最終的な理由ははっきりとしない。

金曜日の日記を書いた後、その晩は、できたように思えたけど、
翌日動作させたら結局動いていなかった(これも日記に書いたとおり)。
サークル部屋に行って、デバッガを製作することにした。
ただ、作成している途中に気づいていたんだけど、実は、今使っているボードが
デバッガを接続するように設計されていなくて、SCIのポートとデバッガのポートが重なっていた。
(まぁ、プログラムを書く気が起きなかったので、そんなことは無視して、
デバッガ用のポートを接続したが。。。)
デバッガを作成しても、もちろん動かず。というか、XrossFinderの使い方がわからん。
単純なプログラムならデバッグできそうな感じはするので、また今度確かめよう。

話は戻って、午後からは再度問題解決を試みた。
他の先輩とかにも聞いてみたけど、結局、理由はわからず。
日曜日の夕方5時ごろに諦めました。

諦めてそのまま。。。だとどうにもならない(ここが重要なため)ので、
つくばロボットコンテストの時のプログラムを引っ張ってきて、
それのいらない部分を削除することにした。
(じゃあ、その時はどうしたのか?、という話になるが、ベース部分は
他の人からもらったものなので全部をはじめから作ったわけではない)

削除してもすぐには動かなくて、数時間悩んだ挙句、先ほど完成しましたとさ。
まぁ、この時間まで起きてたわけではなく、12時ごろに寝てしまって、
4時半ごろに目が覚めただけです。
少し寝てからやったら、30分で終わったので、寝ることは重要ですね。

ちなみに、4時半ごろのときに修正した部分は、一部のファイルでヘッダが
includeされていなかったため、それを適切に設定したら動作するようになった。
やっぱり、SH2のコンパイラ(特にリンカ)の関数アドレスの設定の仕方がおかしいんじゃないかな。

HEWを使用するときの注意点として、必ずヘッダファイルはincludeする必要がある。
Windows用のプログラムの場合、ヘッダなんて適当で良いと思うんだけど、
HEWの場合、中身がおかしいのか、それとも仕様なのか、往々にしてヘッダが
includeされていないことに起因するエラーが多すぎる。
さらに、初心者の人は何が起きているかわかんなくて、動作させるまでが大変・・・。

サークル内で、このことに関して言っている人はいなかったけど、先輩に聞いてみたら
やはり、このことには気づいている感じだった。

そもそも、(純粋な)C言語のコンパイラってヘッダチェックがかなり厳密だったりする?
仮に厳密だったとして、HEWがエラーを出さないのはまた別の問題だが。

そんなこんなで、1日半かかった問題がやっと解決しました。正直、1日分が丸つぶれ・・・。
まぁ、HEWが自動生成するプログラムが何をやっているか、何となく理解できたのでよしとしよう。
大体、割り込みテーブルをずっと眺めていた関係で、テーブルの
割り当てとかも頭の中に記憶し始めてるしね。。。
ある意味、怪我の功名ですかね。

さて、必要なメールを書いて、2度寝しよう。

Posted at : 2009-03-08 05:44:13 / Category : none

Comments

まだコメントはありません / No comment.

Send comment


Name


Mail-address (empty is OK. If you want to notify update, please fill mail-address.)


Bot check code (241222 と入力してください / Please input 241222.)