読者です 読者をやめる 読者になる 読者になる

denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

inline指定が無視されている?

 

(2015.11.04)
PIC32MX250F128を使った最小モデルのオシロジをOscilogi410(オシロ4CH、ロジアナ10CHの意)と呼ぶことにしました。(以前はOscilogi2と呼んでいた)

PIC32MX250F128は最大500kHzでAD変換できます(スペックは1MHzだったのですがErrataで・・・)が、ソフトウェアで行うトリガ判定が間に合うかどうか微妙なところです。

そこでdisassembly listを調べてみたのですが、inline指定している関数の呼び出しにJAL(Jump and Link)命令が使われていることに気づきました。クロック・サイクルが問題になっているところにこんなコードが使われていては台無しです。

コンパイラのマニュアルを調べて、inlineを有効にするためにはコンパイラ・オプション”-finline-functios”の指定が必要であることが判りました。

で、早速試して見ると・・・

f:id:denshikobo:20151104130655p:plain

--------------------------------
warning: Compiler option (inline functions) ignored because the free XC32 C compiler does not support this feature.

visit http://www.microchip.com/MPLABXCcompilers to purchase a new MPLAB XC compiler license.
--------------------------------
”inline関数を使いたければ、有償版のXC32を買え”ということのようです。orz

inline関数を呼び出すのは以下の5箇所で、制御レジスタを操作するだけの簡単なコードです。

    if( ADC_1_INT_FlagGet() )   <==
    {
        ad_buff[0] = ADC1BUF0;  
        ADC_1_INT_FlagClear();   <==
    }
    
    if( ADC_TIMER_INT_FlagGet() ) <==
    {
       SYS_DMA_Channel1ForceStart(); <==
       ADC_TIMER_INT_FlagClear();  <==
    }

Harmonyの枠組みからは外れてしまいますが、ここだけ制御レジスタを直接操作することにします。

有償版のXC32は安い方のSTD版(これ)で凡そ$500です。

それを購うことができない貧乏人には”Harmonyの高邁な理念は高嶺の花”ということでしょうか?