picマイコンのソースコードを確認する方法とは?

このQ&Aのポイント
  • pic16f84aのマイコンに何度も変更して書き直したが、動作しない問題が発生した。動作したソースコードを確認する方法を教えて欲しい。
  • pic16f84aのマイコンに書き込んで試みたが、相変わらず動作しない。動作したソースコードの確認方法を知りたい。
  • pic16f84aのマイコンが突然動作するようになったが、どの変更が効果的だったのかわからない。動作したソースコードの確認方法を教えてほしい。
回答を見る
  • ベストアンサー

picマイコンの中のソースコードを確認したい

多くの方に教えて頂き、やっと書き込みができました。、pic16f84aのマイコンに何度も変更して書き直しました。その後,偶然に突然正常にマイコンが動作しました。 何度も変更して書き直したためどこを直した時のゴードが良かったのかその後わかりません。 別のpic16f84aのマイコンに書き込んで試みるも相変わらず動作しません。 この動作したpic16f84aのソースコードを確認する方法はありませんか、方法があるとしたらその方法を教えて頂けませんか。お願いいたします。 環境: windows8  MPLAB X IDE XC(8)  pickit3 pickit対応ICSP書き込みアダブター  pic16f84a

  • diwk85
  • お礼率83% (141/168)

質問者が選んだベストアンサー

  • ベストアンサー
noname#215107
noname#215107
回答No.4

今後のためですが、バージョン管理をしっかりしておきましょう。 バージョン管理ツールを利用するのもいいですが、一番簡単なのは、ソースに変更を加える前に プロジェクト全体をフォルダごとコピーしておくことです。 また、ソースを変更する場合も、直接書き換えるのではなく、コメントアウトして消さないでおきます。 変更を加える場合、行を変えて新しく記述し、変更した日時、経緯、理由などを、そこにコメントでメモしておきましょう。

diwk85
質問者

お礼

何度もお手数をおかけしまして申し訳ありません。 ご指導いただきましたように取り組んでいきたいと思います。 素人とはいえ、いささか恥ずかしい限りです。 今後ともよろしくお願いいたします。

その他の回答 (3)

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.3

PICKIT2で読み出した、HEXファイルを、MPLAB IDEにImportして読み出すとProgram Memory(Machine)ウインドウにてディスアセンブルした状態で見ることが出来ます (コメントも無く、データエリアも分離されてません) あとはLstファイルのマシン語、C言語ソースと比較するしかありません PICKIT3 MPLABX IDEでも同様のことが出来るはず・・ 次回からソースリストにはバージョン番号と、変更箇所の記載を薦めます。

diwk85
質問者

お礼

ありがとう御座いました。 ご指導いただきましたように、リストの管理をし、今回のようなことの起きないように注意して、PICの 勉強に取り組んでいきたいと思います。 今後ともよろしくお願いいたします。

noname#215107
noname#215107
回答No.2

C言語だと原則、元には戻りませんが、逆アセンブルは可能です。 PICKIT3で読みだして、逆アセンブルすると良いです。 もちろん、コメントなどは復活しません。

diwk85
質問者

お礼

ありがとう御座いました。 今回の経験を活かし二度とこのようなことの起きないよう取組たいと思います。 今後ともよろしくお願いいたします。

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.1

PICは使った事がありませんが、他の機種と同様な手順で確認する事が出来ると思われます。 (新機種開発時にメーカー作成ドライバの動作不良問題が発生し、バイナリモジュールしかない状態で逆アセンブラやインサーキットテスタやデバッガ等を使って問題追及し、メーカーに問題点の訂正依頼を行ったりした経験があります) アセンブラソースの復元は逆アセンブラを使えば比較的に容易なので、現在問題にされているのはコンパイルソースの復元問題な訳ですね。 また逆コンパイラがあれば良いのですが、PIC用としては無いようですね。 (特に確認した訳ではありませんが) 地道に一歩一歩進めて行く他ないのではと思われます。 先ず逆アセンブラソースを作成し、変数ラベル、プログラムラベル等を追加して16進アドレスから意味のあるラベルを含んだアセンブラソースを復元していくのが最初でしょう。 プログラムの飛び先アドレスや変数アドレスが逆アセンブラ上で16進実効アドレスで記されていた時、意味のある飛び先アドレスや変数アドレスについて、エディタで16進==>ラベルに各々一括変換していきます。 その時一度に意味のある飛び先ラベルや変数名を付ける事は無理だったら、適当に分り易い変数名等を付けておき、意味が分かる毎により適した変数名に変更したりしていきます。 まず正しいと思っているが不正なプログラム(B)の逆アセンブルリストについて上記ラベル付けを行います。 コンパイラがコンパイル結果のアセンブルソースを出してくれれば楽ですが。 次に正しく動いているプログラム(A)の逆アセンブルリストを作り、上記のラベル付けをします。変数リスト等はBと殆ど同じでしょうから、Bを参照しながらラベル変換していく事が出来るでしょう。 プログラムの数十ステップの塊り毎にラベル付けされ、アクセスする変数名が分れば対応するコンパイラソースも概略想像が付くようになるでしょう。 load, add, sub, store, compare, jumpif, call等の塊りの行数や、アクセスする変数名等をA,Bで見比べていけば、各ブロック毎に対応する同一のソースなのか、異なっている部分があるのか、片方にしか無い部分が間に挟み込まれているのか等が次第に分るようになる筈でしょう。 代表的なコンパイラソースがどのようにアセンブラソースにコンパイルされるか等について、サンプルソースを作ってコンパイルし確認する等もトライしてみて下さい。 以上のような事を繰り返していけばコンパイラソースの復元も出来るのではないでしょうか。

diwk85
質問者

お礼

ありがとう御座いました。 お忙しい中をいろいろご検討いただきまして申し訳ありませんでした。 今後は、他の方からもご指導いただきましたようにファイル管理をしっかりして、今後も勉強していきたいと思っております。 今後ともよろしくお願いいたします。

関連するQ&A

  • PICマイコンPIC12F509について

    これからPICを勉強しようとしているPIC未経験者です。 とりあえず使用するPICはPIC12F509を考えています。ネットの情報量からすると本当はPIC12F683の方が良いのかも知れませんが価格面からPIC12F509を検討しています。 PICはこれから購入しますが一番最初に触るPICマイコンとしてPIC12F509を選択しても大丈夫でしょうか? 一応言語はアセンブラを勉強しようと考えています。また、最初の目標として入力1に5Vがかかった時に出力1から何ミリ秒か遅れて5Vが出力され、入力1の加わる5Vが不定期に素早くON-OFFを繰り返えしてもPICの電源をOFFするまでずっと繰り返し動作する程度の物を組みたいと思っています。 現在の開発環境はPCにMPLAB X IDE v3.26等のソフトをインストール、PICkit3を入手程度です。 先日、MPLAB IPE v3.26を使用しHEXファイルをPIC18F2550に書込みを初めてしてみました。これが初めてのPICとのふれあいです。 以上、PIC知識人の皆さまご教示を宜しくお願い申し上げます。

  • ソースコードを書き込むときのエラー表示の意味

    C言語のソースコードをPickit3を使い書き込むと、表示されるエラーの意味をを何方か教えて下さいませんか、また出来ましたらその原因と解決策も教えて頂けましたら有難いです。 最近始めたばかりの素人です。 下記の二つのエラーです。   1. 「 Failed to Program devise 」   2. 「 unable to connect the targetdevisc Failed to Devise ID 」 環境は、windows8.1 MPLAB X ID XC8 PICkit-3 PIC12f683 です。      Power を選択して、「 power target circuti from PICkit3 」にはチェックを入れてあります。 参考書のゴードを書き写しPICに書き込んでいます。一度で書き込みが成功するのは5割程度です。 頻繁にエラーが発生します。MPLAB を起動し直したり Pickit3の接続をやり直したり、すると成功します。 ※書き込む前のコンパイルは成功しています。

  • PICライタは何を買えばよいのでしょう?

    PICマイコンは初めてのため右も左も分かりません。ずぶの素人です。 以前、少しだけH8をいじっていましたがそんな記憶は彼方へと吹き飛びました。 参考書籍を買い、ライタなどを買おうと思っております。 とりあえずマイコンは「PIC16F628」を参考書の中で使用していたので購入予定です。 ライタは秋月電気通商のほうで探してみたのですが、 「PICkit3」と「PICkit対応ICSP書き込みアダプターキット」 を買うか 「ハンディーPICライターPSTART」 を買おうか迷っております。 前者は新しく、値段も高めで比較的多くの方が使っている印象を受けます。使い方や説明も先人の方々が日本語で詳しく説明しているところもあるようです。 後者は前者と比べて安くて古いですが今私が使おうとしているマイコンには対応しているようです。その代わり説明書が英語だったり、使用するソフトのバージョンによってはアップグレード的なものを追加で購入しなければならないとありました。 個人的にはお財布に優しいハンディーPICライターをとりたいと思っていたのですが、ただでさえ意味の分かりにくい英語の説明書を相手にするのは厳しいと思いました。 やはりここはおとなしく PICkit3 を買っておくべきでしょうか。 また、上記組み合わせよりも良いものなどがありましたら教えていただけると幸いです。

  • PICマイコン書き込みについて

    PICマイコン(PIC12F675)の書き込みの質問ですが、買ったばかりのPICマイコンへは、書き込みできますが、同じマイコンで2回目以降の書き込みができません。 原因がわかれば、教えてください。 尚、PICライターは、秋月電子通商のAKI-PIC2(PIC Kit2互換)です。

  • PICマイコン 4つのLEDを点滅させたいのですが

    マイコンのプログラミングはこれから勉強 という所ですが、PICKit3は持っていて、過去に プログラムを作ってもらい、PICに書き込み、 基盤を組んで動作させた事はあります。 本題です。4つのLEDを点滅させたいのですが、 マイコンはPIC10F200で可能だと思います。 ですが、当方やってみたいのが同時点滅でも 順次点灯でもなく、1個1個のLEDの点灯時間を ずらしたいんです。イメージは昔ながらの クリスマスツリーで、バイメタル球の点灯時間が 個体によりばらつきがある、というのをLEDで 再現したいと思ったのですが、PIC10F200で可能 でしょうか? 宜しくお願いします。

  • PICで静電容量方式タッチセンサの使い方

    PIC初心者ですm(_ _)m MPLAB IDE v8.80で、C言語でプログラムして、 PICkit3を使ってPIC12F615に書き込んでいます。 PIC12F1822を使って、タッチセンサを作成してみたいのですが、 いろいろ調べたのですが、レジスタの設定等、検出手順など全く分かりません(T_T) よろしくお願いしますm(_ _)m

  • PICが動作しません。

    以前に加速度センサーとI2C通信のことで質問したものです。 基礎から勉強しているのですが、一番初めで躓きました。 PICが動作しません。 MPLAB IDE v8.88 CコンパイラはXC8です。 後閑さんの本「PICマイコンの基礎」で勉強しています。 PICが動作しません。 MPLAB IDE v8.88 CコンパイラはXC8です。 PICは16F1936です。 ライターはPICkit3です。 【現象】 本のプログラムで書き込みをしても PICが動作しません。 テスターで出力設定したピンの電圧を測定しても、出力がでません(0Vです) 【調べたこと】 1・ライターはエラーでは無さそうです。 「Programming/Verify complete」 と表示されます。 しかし、PICkit3の3番ピンをブレッドボードにさすと、 「Target Device ID (00000000) does not match expected Device ID (00002360).」 と出ます。 このままでは、書き込みも出来ないので、 「READ」を押してからだと、上記のIDエラーが解消され、書き込みができますが、動きません。 条件はわかりませんが、 「he following memory regions failed to program correctly: Program Memory Address: 00000000 Expected Value: 00003180 Received Value: 00000000」 というエラーもたまにでます。 2.PICは2つあるので、交換しても同じです。 【考察】 1.プログラムが間違っている (1)本のプログラムを何度も見直し+サポートページからコピペでしてます。 ただ、コンフィグレーション設定の「BORV19」と打つとコンパイルエラーが出ますので、入れていません。 →関係あるのでしょうか?これは「どの電圧まで下がったらリセットするか」なのと、デフォルトでも1.9なので関係ないと思います が・・・ 2.XC8のコンパイラが悪い? ヘッダファイルは「XC.h」と「htc.h」両方で試しました。 何か相性等があるのでしょうか。 【プログラム】 25ピンから電圧を出力するだけのプログラムに変更し確認しましたが動作しませんでした。 #include <xc.h> __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_ON & CLKOUTEN_ON & IESO_OFF & FCMEN_OFF); __CONFIG(WRT_OFF & PLLEN_OFF & STVREN_OFF & LVP_OFF); #define _XTAL_FREQ 8000000 // クロック周波数設定 void main(void) { OSCCON = 0x70; // 8MHz INTOSC ANSELB = 0; // PORTBをデジタルに設定 TRISB = 0; // PORTBすべて出力モード /** メインループ 永久ループ **/ while(1) { RB5=1; } } 私なりに色々とネットで調べても解決しませんでした。 長文で、大変失礼ですが、ご回答下さると幸いです。

  • PICマイコン(PIC16F73B)書込みについて

    PIC16F73BにCコンパイラで作ったプログラムを書き込もうとしますがエラーが出て書き込みできません。理由と対処方法を教えてください。  ちなみに (1)プログラマーはMPLAB PM3 (2)使用マイコンはPIC16F73B (3)書き込みを行ったときのエラーは   PM3 is unable to read device - Current operation is aborted.  が表示されます。 (4)Read及びVerifyを実施すると以前書き込みができていたため、   Read successfully.   Verify Succeeded.  が表示されます。 なぜ、ReadやVerifyができてWritwができないか不明。 PIC16F73BのBは何か特殊で書き込み等できないのでしょうか? 以上、ご教授、よろしくお願いします。

  • PICマイコンについて

    こんにちは。いつも参考にさせてもらっています。 さて、今回はPICマイコンの件でわからないことがありましたので相談に乗っていただきたいと思います。 現在、製造中の機器でPIC16F873を使用した機器を製造しています。 このPICは一度書き込みをしたあとに動作検査を3回行っています。 1回目は書き込みができたかのテスト(社内の治具を使用しています)、2回目はPICを差し込んだ後のテスト、3回目は製品としての動作テストです。 これらのテストで問題がなかったものが、出荷して顧客先に到着すると正常に動作しないことがありました。 その製品を回収してみたところ、プログラムが書き込まれていない(社内の治具で確認)ことが判明しました。 このように一度書き込まれたPICが、何もしていない状態(出荷しただけ)でプログラムが消去されることがあるのでしょうか? ちなみにPIC自体は秋葉原の秋月電子通商さんで購入しています。 どなたか同様な経験をお持ちの方、または原因がお判りになる方、よろしくお願いいたします。

  • pickit3でpicマイコンに書き込めません

    pickit3で書き込めないという質問がいくつかあり、色々試してみましたが 書き込めません。 ・pickitから給電するように設定する。 ・管理者権限で実行する ・pickit3の黒いボタンを押しながら接続する など試してみました。 質問1: エラーメッセージは、expected device id が違いますと出ます。 私は、1年ほど前には同じパソコンから書き込めたのですが… 上のエラーメッセージの場合の対処がわかれば教えて頂きたいのです。 質問2 また、windowsのデバイスマネージャーを見たら、pickit3らしきものが見つからないのですが、 接続していると、デバイスマネージャーにpickit3ってなにか表示でますか・・? 質問3 pickit3、なんか嫌です。以前はAdwinのpicプログラマーを使っており、 結構使いやすかったですが、 対応するマイコンが限られており、pickit3を使うようになりました。 pickit3は検索すれば、色々書き込めないという声が見えますし・・、 使いやすい書き込みツールがあれば教えていただきたいです。 ICDとかいうのは使いやすいですか・・? よろしくお願いします(泣)

専門家に質問してみよう