sizeofに関数ポインタを渡すとコンパイルエラーとなってしまします。 これができるとRAM実行がC言語で簡単に書けて嬉しいです♡ sizeof(ramexec)と書いてもsizeof(&ramexec)と書いてもエラーになってしまうんでよすね。 ANSI C的には問題ない記述な気もしますけど。 > ram.c(10) : CC78K0R error E0530: Illegal sizeof operand C言語でフラッシュセルフの FSL_ChangeInterruptTable()関数に対応したいなーと思っていますけど つれないですねー、CC-78K0Rは。 ------------------------------------------------------- //RAMに関数をコピーして実行するサンプル //mallocを使うのでcstart.asmの”_@MEMTOP”を”1024”にする //コードをリロケータブルにするためメモリモデルはラージ・モデル #pragma sfr #pragma ei #include <string.h> //memcpy用 #include <stdlib.h> //malloc用 __interrupt void ramexec(); //割り込みでRAM実行したい関数 void main(void){ memcpy(malloc(sizeof(ramexec)),ramexec,sizeof(ramexec)); //関数ramexecをRAMにコピー //このあたりでフラッシュ・セルフ・プログラミング・ライブラリの設定を行う(割り込み発生時の飛び先をRAMEXECADRに設定) EI(); ADMK=0; //フラッシュの消去、書き込み等の処理開始 while(1); } __interrupt void ramexec() { do { //セルフ書き込み中に発生した。割り込みフラグを確認する。 if(1==ADIF){ ADIF=0; //ここに処理を書く ※間違ってもROMに配置された割り込み関数を呼んではいけない。 break; } if(1==TMIF00){ TMIF00=0; //ここに処理を書く break; } while(1);/*ここに来てはいけない。必ず割り込み発生元を特定して処理すること。もしくは不要な割り込みはマスクすること。*/ } while(0); }