質問

すべてのコードに適合するために、8051マイクロコントローラーでコードバンキングを使用する必要があります。 SDCCはそれをサポートしていると言っていますが、リンクのステップで問題があります。

main.c、func1.c、bank.asmの3つのファイルを含むテストプロジェクトがあります。メイン関数はfunc1()を呼び出してからwhileループに配置する必要があります。ただし、func1()は別のコードバンクにあります。

// main.c
int func1(void) banked;

void main()
{
    int i = func1();

    while(i)
    {
    }
}

// func1.c
#pragma codeseg BANK1

int func1(void) {
    return 99; }

//bank.asm
    .area HOME    (CODE)
    .area GSINIT0 (CODE)
    .area GSINIT1 (CODE)
    .area GSINIT2 (CODE)
    .area GSINIT3 (CODE)
    .area GSINIT4 (CODE)
    .area GSINIT5 (CODE)
    .area GSINIT  (CODE)
    .area GSFINAL (CODE)
    .area CSEG    (CODE)
    .area HOME    (CODE)

__sdcc_banked_call::
    ret             ;make the call

__sdcc_banked_ret::
    ret         ;return to caller

すべてをコンパイルしてリンクするビルドバッチファイルがあります。

sdcc -c func1.c
sdcc -c main.c
asx8051 -ol bank.asm
sdcc "-Wl -b BANK1=0x018000" main.rel func1.rel bank.rel

このリンカーエラーが表示されます:

?ASlink-Error-Insufficient ROM/EPROM/FLASH memory.

これをリンクさせるにはどうすればよいですか

役に立ちましたか?

解決

SDCCマニュアルから:

  

セグメントは、   通常を使用した4メガのアドレス空間   -*-locオプション。 64Kを超えるセグメントがある場合、-r   フラグをリンカに渡して、   適切なセグメントを生成する   再配置、およびIntel HEX出力   形式を使用する必要があります。 -rフラグは   を使用してリンカーに渡される   SDCCコマンドラインのオプション-Wl-r。   ただし、現在、リンカーは   コードセグメントの処理> 64k。

したがって、リンカー行に-Wl-rを追加します。

他のヒント

私はSDCCに精通していませんが、他のバンクメモリアーキテクチャからは、リダイレクトされたバンク関数呼び出しを提供する必要がありました。

バンクレジスタを設定するための正しいコードを入力する必要がありますか、またはメモリバンクを設定するものは何ですか:

__sdcc_banked_call::
    ret                 ;make the call

__sdcc_banked_ret::
    ret                 ;return to caller

ルーチン?

これはおそらくリンカーの問題ではありませんが。
BANK1のコードセグメントを定義する必要がありますか?

これはコードセグメントを設定しているように見えます:

//bank.asm
    .area HOME    (CODE)
    .area GSINIT0 (CODE)
    .area GSINIT1 (CODE)
    .area GSINIT2 (CODE)
    .area GSINIT3 (CODE)
    .area GSINIT4 (CODE)
    .area GSINIT5 (CODE)
    .area GSINIT  (CODE)
    .area GSFINAL (CODE)
    .area CSEG    (CODE)
    .area HOME    (CODE)

しかし、BANK1は定義されていません。リンカファイルがあり、これらのコードセグメントにすべてのメモリ/フラッシュスペースを割り当てますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top