お世話になっております。
良く分からない現象が出ており、ご教授願います。
HEWで作成したファームを書き込んで動作確認しています。
1)E1エミュレータのデバッグモード(デバッガ)で動作させて確認
2)E1エミュレータのデバッグモードで接続し、ダウンロードで書き込み、
書込み後E1エミュレータは外して動作確認
つまり、デバッグモードでライトだけおこない、実際の動作確認はE1を使用せずに普通におこなう
3)E1エミュレータのフラッシュライタモードで接続し、ダウンロードで書き込み、
書込み後E1エミュレータを外して動作確認
上記の3種類のやり方で確認しています。
1)に関してはデバッグモードで動作させているので違うのは分かるのですが、
2)と3)でも違いはあるのだろうと思うのですが、何が違うのでしょうか?←ここが一番わからないところです
現在、1)と2)では正常に動作するのですが、3)ではおかしな動きになってしまう困っています。
おかしな動き
・LCDの表示がずれたりする(ずっとずれている状態)→(少し違うかもしれませんが)123456と表示すると321654のような感じになる
※コンパイラの設定を変えると、表示文字がおかしくなることもある。
・UARTが正常に出来なくなる(PCと通信すると応答がなくなる)
※コンパイラの設定を変えると通信はするが、データがずれて送られてくることがある。
試したこと
・PLLを使用しているので、PLLのロックが正常にされていないのかと思い、時間を延ばしたりもしてみましたが変化ありませんでした。
※これが原因だとすると確認した方法の2)でも出そうな気もします・・・・。
・コンパイラの設定を変えて試してみましたが上記の「おかしな動き」に書いたように、おかしくなる状態が変わるだけでした。
以上です。
どこまで書けばよいのか分かりませんでしたので、発生している現象などを記載いたしました。
何か、検討するのに追加で記載する情報等ありましたら載せますので言ってください。
ご教授のほどよろしくお願い致します。
yueさん、こんにちは。NoMaYと申します。#大昔に「はんだづけをするとプログラムが止まる」で一度リプライしたことがありますが。かふぇルネで私が関わった類似案件では、ソース上でのセクション切り替えのミス、もしくはリンカのオプション設定のミス、によってROM化が不完全になっていた事に加えて、デバッガが何のワーニングも出さずにRAMに直接データをダウンロードするようになっていて、そのせいでROM化が不完全になっていたことに気付かず、このような現象として見えていた、というものが多かったような気がします。たぶん、マップファイルを確認するだけでも怪しい点が見つかる可能性が高いですが、以下のようなデバッグ方法を提案すると、解決に向けて進んでいくことが多かったような気がします。● 既にフラッシュメモリに書き込み済みのプログラムをそのまま使ってデバッグしてみる。(つまり、デバッガの設定で、コードのダウンロードはせずに、デバッグ情報のみダウンロードする、という設定にしてデバッグしてみる。)● ただし、この時、デバッグ前に一旦マイコンの(というかマイコンの載っている機器の)電源をON→OFF→ONしてRAMの内容が不定になるようにしておきます。ちなみに、今回、以下の(2)で電源をON→OFF→ONすると、正常動作から異常動作へと状況が変化したりしないでしょうか?(変化したら、ROM化が不完全になっている可能性が高いと思われます。変化しなければ、このリプライはちょっと的外れだったかも知れません。)> 2)E1エミュレータのデバッグモードで接続し、ダウンロードで書き込み、> 書込み後E1エミュレータは外して動作確認> つまり、デバッグモードでライトだけおこない、実際の動作確認はE1を使用せずに普通におこなう> 3)E1エミュレータのフラッシュライタモードで接続し、ダウンロードで書き込み、> 書込み後E1エミュレータを外して動作確認> 1)に関してはデバッグモードで動作させているので違うのは分かるのですが、> 2)と3)でも違いはあるのだろうと思うのですが、何が違うのでしょうか?←ここが一番わからないところです> 現在、1)と2)では正常に動作するのですが、3)ではおかしな動きになってしまう困っています。あと、電源をON→OFF→ONしても正常動作のままであれば、(2)で書かれたフラッシュメモリの内容と(3)でダウンロードしているMOTファイルの内容を、フラッシュライタモードのベリファイ機能で比較してみたら、どういう結果になるでしょうか?(もしもその機能が存在しなかったら御免なさい。)
yueさん、こんにちは。NoMaYです。> 2)と3)でダウンロードして書き込んでいるmotファイルは共に同じファイルを指定しています。> そのため、違いがあるとは思わないのですが…HEWでは通常はABSファイルをダウンロードする設定では無かったでしょうか?(HEWは触っていた頻度がちょっと少なかったので、私の記憶違いでしたら御免なさい。)ただ、ここでのポイントは、(2)と(3)で同じフラッシュメモリイメージになっていることを念を入れて確認することですので、フラッシュメモリイメージが同一だったなら、私が前のリプライに書いたことは可能性から外して良さそう、だと思います。そして、(2)と(3)でフラッシュメモリイメージが同一で、かつ、(2)で電源をON→OFF→ONして正常動作のままなら、私自身も果たして(2)と(3)の違いは何だろうか?と思います。[訂正] (2)では動作確認時はE1を外していますので、以下の可能性は無いですね。すみません。そうなると、じまさんのリプライに書かれていたFAQの以下に似た何かなのだろうかと思うのですが、CC-RXの標準のスタートアップルーチン等を使っていれば以下に上げられている個々の項目では無いとは思います。では何だろう、、、
3.ユーザプログラムでスタックポインタ、汎用レジスタ、内蔵RAMの初期化を行っているか。一般的にE1エミュレータ使用時と、実チップ単体での違いとしては、初期値に関する問題があります。 スタックポインタの初期値 汎用レジスタの初期値 内蔵RAMの初期値上記について初期化を行わないプログラムでも、E1エミュレータ使用時は、E1エミュレータにて一部領域を初期化をしているため、動作してしまう可能性があります。
5.ユーザプログラムでオプション設定メモリのエンディアン選択レジスタS(MDES)でエンディアンの設定をしているか。エミュレータ使用時はプロパティの起動時設定に従ってエミュレータのプログラムが本レジスタに書き込みを行うため、ユーザプログラム中に本レジスタ設定がない場合も動作してしまいます。
yueさん、こんにちは。NoMaYです。「debagu情報のみダウンロード」は、一般的には、ソースデバッグに必要な以下のような情報のみダウンロードすることです。・ソースの行番号とプログラムのアドレスの対応表・関数の一覧(名前、アドレス、サイズ、型、等)・変数の一覧(名前、アドレス、サイズ、型、引数情報、等)