PIC24でprogram memoryにデータ読み書き


PIC24でprogram memoryにデータ読み書き

PIC24のメモリ

pic24にはEEPROMがなく不揮発なROMとして使用するためにはプログラム書き込み領域の一部を使用する必要がある。
Table命令によりprogram memoryに書き込む方法をメモする。

table命令によるメモリの読み書き

基本的にはリンク
のとおりやるとできるがメモリの確保と削除で詰まったので記しておく。

メモリの確保

program memoryの領域はした図のようになっている。(PIC24FJ64GBの場合)

ScreenClip

プログラムは0x200から書き込まれるので0xa000付近の後半に確保したほうがいいと思われる。

メモリの確保は以下のように行う。
このとき0x9600~0x9BFFまでのメモリが確保される。

const <strong>attribute</strong>((section(&quot;my_memory&quot;), space (prog), address (0x9600) )) unsigned int _flash_datas[96*8]; 

この宣言時のアドレスは0x600の倍数でなければならない。
なので
– 0x9600 : o
– 0x9C00 : o
– 0x9601 : x
– 0x9900 : x

となる。
ビルドも通らない。

メモリの削除

上記のメモリの確保では0x600ごとのブロックに区切られていたが、メモリのEraseは0x400毎の区切りで行う。これはプログラム64命令×8分。
位置命令は16bit,1wordのレジスタ2つ分なので6482 = 0x400 という計算。

1回の削除でそのレジスタを含む0x400区切りのブロックがすべて削除される。

例えば0x9600のレジスタのデータを削除すると0x400の倍数で0x9400~0x97FFまでのレジスタが削除される。

まとめ

メモリの確保と削除で区切りが違うので注意が必要。
(最初に0x9600でメモリを確保し、0x9600でメモリ削除すると97FFまでしか削除されないのでつまった)

サンプルプログラム github

The following two tabs change content below.
miyamoto
IoT/ DIY / music / 日本語ラップ
miyamoto

About miyamoto

IoT/ DIY / music / 日本語ラップ

One Thought on “PIC24でprogram memoryにデータ読み書き

  1. Pingback: PIC24向けのSDカードBOOTLOADERを作った | illmatic工業

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Post Navigation