PIC32MM CPUを活用する

令和元年10月

    それ以外のバグまたは注意点

 前回の内容でPIC32MMマイコンの基本的な注意点は説明しました。
後は子ネタ的な内容が残っています。


    PIC32MXとPIC32MMのメモリ使用量

上図の二つは基本的に同じプログラムでのPIC32MXとPIC32MMでのメモリ使用量を示しています。
左側のPIC32MXではRAMの使用量が極端に少なく、逆に右側の PIC32MMではROMの使用量が少なくなっています。
  注意: 両者ではRAMの容量が異なるので、棒グラフは参考外です。使用量の数値を比較する必要があります。

最適化などのコンパイル条件は両者で基本的に同じです。
CPUコアに違いがあるとはいえ、両者は同じCPUコアから派生したCPUです。
ここまで使用量の差が出るのはやはりおかしいと考えるべきでしょう。

 まず、RAMの使用量に関しては原因を見つけています。
PIC32MMの方が正しく、PIC32MXの方は少なくとも8kB分少なく表示されています。
このプログラムではRAMにpersistent属性を指定したメモリが少なくとも8kB(実際にはもう少し)あります。
従ってRAMの使用量が4kB以下というのはあり得ない。この値はそれ以外のメモリ使用量と思われます。
この値に8kBを足すと概ねPIC32MMのメモリ使用量と同じになります。

 ROMの使用量に関して詳しく調べてはいないので想像でしかないのですが、どうやらmicroMIPSによるコード圧縮が有効になっているのではないかと思われます。PIC32MMのメモリ使用量はPIC32MXに対しておよそ70%に留まっています。コード圧縮率は30%となり、この数字はmicroMIPSが謳うコード圧縮率35%と左程変わらない。
(令和元年10月09日追記)
 この件は少し気になったので調べてみると、やはりXC32コンパイラはCPU としてPIC32MMを指定すると無条件にmicroMIPSによる圧縮コードを出力する仕様になっています。マイクロチップ社の「PIC32MM マイクロコントローラへの移行」と題する文書に「MPLAB XC32コンパイラは、PIC32MM ファミリ向けの microMIPS命令を自動的に選択します。」との記述があります。文書は下記から参照できます。
http://ww1.microchip.com/downloads/jp/DeviceDoc/00002191A_JP.pdf
(追記ここまで)

 このようにしてみるとMPLABXは極めて類似していると思えるCPUでさえ、細部の動作は細かく条件分けして処理されているであろうことが見て取れます。
数百にも上るCPUに良く対応しているなと感心します。


    MPLABX Ver5.25のインストール

 こちらも詳しくは調べていないのですが、少なくとも上記のverではインストールするWindowsとして64ビットを強く推奨しています。
処理性能上の理由との事ですので、無理に32ビットにインストールするのは止めた方がいいでしょう。
 また、(おそらくはVer5以降から)PIC32Cシリーズ(旧AtmelのCPU)のサポートを追加したためDisk使用量もVer4.2の2.7GBからVer5.25では6.3GBまで増加しています。
PIC32MXおよびPIC32MMを使用することが前提であれば、Ver5.25を使用するメリットは殆どありません。
現状ではVer4.2から移行するメリットはありません。