タグ付けされた質問 「linker」

4
Cortex M3 .bss領域の初期化用のベアメタルスタートアップコード
ここから着想を得て、腕皮質M3のベアメタルスタートアップコードを開発しました。ただし、次の問題が発生します。main.cでunsigned char型など、初期化されていないグローバル変数を宣言するとします。 #include ... unsigned char var; ... int main() { ... } これにより、STM32 f103の.bss領域は、_BSS_START = 0x20000000で始まり、_BSS_END = 0x20000001で終わります。さて、スタートアップコード unsigned int * bss_start_p = &_BSS_START; unsigned int * bss_end_p = &_BSS_END; while(bss_start_p != bss_end_p) { *bss_start_p = 0; bss_start_p++; } .bss領域全体をゼロに初期化しようとします。ただし、そのwhileループ内では、ポインターは4バイトで増加します。したがって、1ステップ後にbss_start_p = 0x20000004なので、無限ループなどにつながるbss_end_pとは常に異なります。 これに対する標準的な解決策はありますか?どういうわけか、.bss領域の次元を4の倍数に「強制」すると思いますか?または、unsigned charへのポインターを使用して.bss領域をウォークスルーする必要がありますか?おそらく次のようなものです: unsigned char * bss_start_p = …

1
別のバイナリを統合する
GCCとCrossworksを使用してARMのバイナリを構築しています。起動時に別のICにロードする必要があるセカンダリバイナリイメージがあります。 このバイナリをツールチェーンに統合するのが好きです。つまり、このバイナリをイメージの一部にし、ビルドするたびに、このバイナリが最終的なバイナリファイルに統合されて、CPUにロードされます。これのベストプラクティスは何ですか? THX
8 arm  linker 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.