SSブログ

同じ間違いを(また)繰り返した [電子工作]

(2018.08.30)

PIC16F1829を使ってPICの開発を行っています。少し複雑なプログラムですが、少しづつ前進しています。そんな中、デバッグ作業で以前にやらかした間違いをまた繰り返してしまいました。orz

プログラムの動作を追いかけるため、スナップ・ダンプを取ろうとしたところ、それまで問題無く動いていた機能が動かなくなりました。リセットすると回復するので、プログラム・コードの問題では無さそうなのですが・・・

PIC16F1829はデータ・メモリを1024バイト(プログラム・メモリは8192バイト)搭載しています。
2018_0830_2.pngPIC16F1829のデータ・メモリ

そのデータ・メモリは複数のバンク・メモリ(128バイト単位)で構成されていて、データ・メモリ(1024バイト)と言うのはGeneral Purpose RAM(1008バイト)とCommon RAM(16バイト)の合計です。
2018_0830_1.pngPICのバンク・メモリ構成

スナップ・ダンプを取るため、以下のデバッグ・バッファを設けました。承知して居るはずなのについやらかしてしまいました。

unsigned char debug_buff[16] @0x200; <==これが問題悪化の元凶

頭の中にあったのは、『データ・メモリの前半26%まで使っているから50%相当の場所にバッファを割り当てよう』というものでした。

そして、スナップ・ダンプ(事後解析用にデータをバッファに書き出す)を取りながら、不具合を抱えた処理を実行してみると、何か様子が変です。以前より動作がおかしくなっています。

何が何だか判らなくなってしまいました。

こんな時、慌ててプログラム・コードをいじり回しても良い結果が得られ無いことは承知しています。不具合に遭遇するのは慣れているのです。(^_^;)<==変に自慢げな奴

作業を中断して、頭を冷やすことにしました。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
(数時間後)
あっ!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー

バンク・メモリの前半にコア・レジスタが配置されていることを思い出しました。重要機能を司るレジスタ群をスナップ・ダンプで書き換えていたのです。

2018_0830_3.png0x200のレジスタ割り当て

そして、一緒に思い出しました。
『これ、前にもやったことある』と前回も思ったことを・・・
この誤りを繰り返すこと(多分)三度目です。(<==無駄に経験を積み重ねる奴)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
管理人が気になっている広告です。





nice!(1)  コメント(0) 
共通テーマ:日記・雑感

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。