PIC24のコンパイルで悩んだ [電子工作]
(2018.08.15)
PICプログラム開発にはMicrochip社が無償で提供しているCコンパイラを使います。PIC16ならxc8コンパイラ、PIC24ならxc16コンパイラです。同じ会社が提供する似た名前のコンパイラなのですが、違いが色々あって戸惑います。(聞いた話では開発した事業部が違うらしい)
xc8コンパイラでは、SRAM(データを格納する)やFlash Memory(プログラム・コードを格納する)の使用範囲をRAM ranges propertyとROM ranges propertyで指定していました。これと同じことをxc16コンパイラでやりたいのですが・・・
CodeGuard categoryにそれらしいpropertyを見つけました。しかし設定がsmall,medium,largeの三択で期待していたものとは違うようです。(<==使い方が判らない)
あれこれ調べて、CONFIGURATION REGISTERのFBSMLIMを使えば目的とする(Boot プログラムの後ろにユーザ・プログラムを配置する)機能を実現できることが判りました。
残るRAM ranges相当の機能は、どうやれば実現するのか?
(暫し悩む)>(あれこれ調べる) >(暫し悩む) >> ん!
無理矢理ですが、『ユーザ・プログラムにはこれ(↓)を付けてコンパイルしてもらう』という方法にたどり着きました。
int boot_area[0x400] __attribute__((noload,unused,address(0x800)));
noload==>実行時に初期化しない
unused==>使用していなくても領域を確保する
address(0x800)==>SRAMの先頭に配置する
Bootプログラムの方にはこれ(↓)を付けてコンパイルします。
asm (".section my_stack, stack address(0x0f00)");
asm (".space 0x100");
int user_area[0x1c00] __attribute__((noload,unused,address(0x1000)));
Bootプログラムで自由に使える範囲を0x800~0x0effに制限します。
パチパチパチ~
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
正しい方法が判ったらあとで書き足すことにして、今はこの方法で先に進みます。
(<==結果オーライな奴)
PICプログラム開発にはMicrochip社が無償で提供しているCコンパイラを使います。PIC16ならxc8コンパイラ、PIC24ならxc16コンパイラです。同じ会社が提供する似た名前のコンパイラなのですが、違いが色々あって戸惑います。(聞いた話では開発した事業部が違うらしい)
xc8コンパイラでは、SRAM(データを格納する)やFlash Memory(プログラム・コードを格納する)の使用範囲をRAM ranges propertyとROM ranges propertyで指定していました。これと同じことをxc16コンパイラでやりたいのですが・・・
CodeGuard categoryにそれらしいpropertyを見つけました。しかし設定がsmall,medium,largeの三択で期待していたものとは違うようです。(<==使い方が判らない)
あれこれ調べて、CONFIGURATION REGISTERのFBSMLIMを使えば目的とする(Boot プログラムの後ろにユーザ・プログラムを配置する)機能を実現できることが判りました。
残るRAM ranges相当の機能は、どうやれば実現するのか?
(暫し悩む)>(あれこれ調べる) >(暫し悩む) >> ん!
無理矢理ですが、『ユーザ・プログラムにはこれ(↓)を付けてコンパイルしてもらう』という方法にたどり着きました。
int boot_area[0x400] __attribute__((noload,unused,address(0x800)));
noload==>実行時に初期化しない
unused==>使用していなくても領域を確保する
address(0x800)==>SRAMの先頭に配置する
Bootプログラムの方にはこれ(↓)を付けてコンパイルします。
asm (".section my_stack, stack address(0x0f00)");
asm (".space 0x100");
int user_area[0x1c00] __attribute__((noload,unused,address(0x1000)));
Bootプログラムで自由に使える範囲を0x800~0x0effに制限します。
パチパチパチ~
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
正しい方法が判ったらあとで書き足すことにして、今はこの方法で先に進みます。
(<==結果オーライな奴)
コメント 0