4

すべてのコードを収めるために、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.

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

4

2 に答える 2

2

SDCCマニュアルから:

セグメントは、通常の-*-locオプションを使用して、4メガのアドレス空間のどこにでも配置できます。セグメントが64Kより上にある場合は、適切なセグメント再配置を生成するために-rフラグをリンカに渡す必要があり、IntelHEX出力形式を使用する必要があることに注意してください。SDCCコマンドラインでオプション-Wl-rを使用すると、-rフラグをリンカに渡すことができます。ただし、現在、リンカは64kを超えるコードセグメントを処理できません。

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

于 2009-10-22T14:39:13.743 に答える
0

私は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は定義されていません。リンカーファイルはありますか?それはすべてのメモリ/フラッシュスペースをこれらのコードセグメントに割り当てますか?

于 2009-10-23T23:58:39.950 に答える