0

2 つのコードをまとめました (元々はThis Question Here で説明されていました)。

MpLab (Microchip MPLAB C30) からこのエラーが発生しました。

 Link Error: Could not allocate section .nbss, size = 20004 bytes, attributes = bss near 

奇妙なことに、コンパイラのマニュアル (マイクロチップ社の出版物 DS51284F) でそのメッセージを探しましたが、そのメッセージの部分文字列であっても、何も見つかりませんでした。

1 語のallocateを探しても、3 回か 4 回しか見つかりませんでした。エラー メッセージが表示されることはありませんでした。

これら 2 つのコードをまとめる前に、Thing-XからThing-Yにデータを移動するために使用するメモリの「大きなチャンク」に使用するセグメントを 0x8000 に定義しました。

0x8000 で定義したデータ領域を 1 バイトに縮小しましたが、まだこのエラーが発生しています。

このメッセージは、Microchip のコンパイラ マニュアル DS51284F に記載されていません。これまでに誰かがこれを解決したことがありますか?

リンカーの別のマニュアルはありますか?

メモリマップを取得してメモリ領域がどこにあるかを確認する方法はありますか?

4

1 に答える 1

3

このエラーは、初期化されていない変数 (near bss または略して nbss) に対して十分なメモリが Near データ空間に残っていないことを示しています。

これらの推奨事項を使用して、データ メモリの使用量を削減できます。1) コンパイラの最適化、-O3 または -Os を使用します。

2) Compiler build options で Large Data Model を選択します。 - default -msmall-data - large (>8KB) -mlarge-data - small (<=8KB) -msmall-data デフォルトのデータ モデルは small です。

3) いくつかの変数を far スペースで宣言します。これにより、ニア ラム スペースのスペースが解放されます。

4) 関数パラメーターのサイズまたは数を減らします。たとえば、構造体を値で渡すのではなく、同じ構造体へのポインターを渡します。

5) 一部のローカル変数のストレージ クラスを静的に変更するか、それらをグローバルにします。

6) 可能な場合は、ローカル変数とパラメーターを再利用します。

7) 必要以上に大きくない型を使用します。たとえば、100 オブジェクトを超える for ループのカウンター変数は、char と同じ大きさで十分です。

8) 初期化されたデータ/配列の一部をコード空間に配置します。-コード内の mconst

于 2014-11-19T18:11:06.630 に答える