denshikobo’s blog

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

関数を固定アドレスに配置してみた

目指しているのは、ユーザ・プログラム(HEXファイル)をFlashメモリに書き込んで、ユーザが定義した関数を呼び出すことです。

 

HEXファイルを読み取り、Flashメモリに書き込むところまで出来ました。

あとは、書き込んだFlashメモリ上のアドレスを関数コールして、リターン出来れば・・・

本当に上手くできるのか?その実現性は未だ不明です。(^_^;)

 

関数呼び出しのテストをやりやすくするため、予め用意したtest_func()を呼び出してみることにしました。その関数を固定アドレスに配置できれば都合が良いのですが、どうすれば関数を固定アドレスに配置できるのか?

 

取り敢えずの思い付きを試してみると・・・

void test_func(void) @ 0x900
{
    unsigned char loop;
    while( break_flag )
    {
        loop++;
    }
    loop = 0;
}

ビンゴ~

簡単に実現出来てしまいました。

ーーーーーーーーーーーーーーーーーーーーーーーーーー

後で、『XC8 C Compiler User's Guide』を調べてみると、 5.8.4 Changing The Default Function Allocationの項に”absolute function”として説明されていました。

 

『知識は後から着いてくる』(<==基本的な開発ポリシー)