5

Cortex-M4 (LPC4357) 用に GCC プロジェクトをコンパイルし、-mcpu=cortex-m4 スイッチ フロートを使用すると、float が機能しません (blx __addsf3 を呼び出し、最終的に stmia コマンドに分岐し、おそらく不正な値が原因でエラー割り込みが発生します)レジスタで)。-mcpu=cortex-m3 でコンパイルすると、ソースが異なり動作する bl __addsf3 が呼び出されます。

float を -mcpu=cortex-m4 で動作させるには、他のスイッチを修正する必要があると思います...いくつか試してみましたが、これは本当に奇妙です。

関連するコンパイラとリンカー スイッチ:

コンパイラ: -mthumb -mcpu=cortex-m4 -std=c99 -c -g -D DEBUG -D gcc

リンカ: -nostartfiles -nostdlib -nodefaultlibs -fno-exceptions -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O0 -lgcc -lc

ここで明らかな何かが欠けているかどうかわかりますか?

4

1 に答える 1

14

ARM が提供するARM 組み込みプロセッサ ツールチェーン用のGNU ツールを使用して、次のものをコンパイルする必要があります。

 -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16

ハードウェア浮動小数点を使用します。readme.txtファイルから次の表を参照してください。

アーキテクチャ オプションの使用
-------------------------------------------------- ------------------
| | アームコア | コマンド ライン オプション | マルチライブラリ |
|---------------------|-------------------------------------- ------|----------|
|Cortex-M0+| -mthumb -mcpu=cortex-m0plus | armv6-m |
|Cortex-M0 | -mthumb -mcpu=cortex-m0 | | |
|Cortex-M1 | -mthumb -mcpu=cortex-m1 | | |
| | |--------------------------------------------| | |
| | | | -mthumb -march=armv6-m | | |
|---------------------|-------------------------------------- ------|----------|
|Cortex-M3 | -mthumb -mcpu=cortex-m3 | armv7-m |
| | |--------------------------------------------| | |
| | | | -mthumb -march=armv7-m | | |
|---------------------|-------------------------------------- ------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4 | armv7e-m |
|(FP なし) |------------------------------------------------ | | | |
| | | | -mthumb -march=armv7e-m | | |
|---------------------|-------------------------------------- ------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4 -mfloat-abi=softfp | armv7e-m |
|(ソフト FP) | -mfpu=fpv4-sp-d16 | /softfp |
| | |--------------------------------------------| | |
| | | | -mthumb -march=armv7e-m -mfloat-abi=softfp | | |
| | | | -mfpu=fpv4-sp-d16 | | |
|---------------------|-------------------------------------- ------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4 -mfloat-abi=hard | armv7e-m |
|(ハード FP) | -mfpu=fpv4-sp-d16 | /fpu |
| | |--------------------------------------------| | |
| | | | -mthumb -march=armv7e-m -mfloat-abi=hard | | |
| | | | -mfpu=fpv4-sp-d16 | | |
|---------------------|-------------------------------------- ------|----------|
|Cortex-R4 | [-mthumb] -march=armv7-r | armv7-ar |
|Cortex-R5 | | | /親指 |
|Cortex-R7 | | | | |
|(FP なし) | | | | |
|---------------------|-------------------------------------- ------|----------|
|Cortex-R4 | [-mthumb] -march=armv7-r -mfloat-abi=softfp| armv7-ar |
|Cortex-R5 | -mfpu=vfpv3-d16 | /親指 |
|Cortex-R7 | | | /softfp |
|(ソフト FP) | | | | |
|---------------------|-------------------------------------- ------|----------|
|Cortex-R4 | [-mthumb] -march=armv7-r -mfloat-abi=hard | armv7-ar |
|Cortex-R5 | -mfpu=vfpv3-d16 | /親指 |
|Cortex-R7 | | | /fpu |
|(ハード FP) | | | | |
|---------------------|-------------------------------------- ------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a | armv7-ar |
|(FP なし) | | | /親指 |
|---------------------|-------------------------------------- ------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=softfp| armv7-ar |
|(ソフト FP) | -mfpu=vfpv3-d16 | /親指 |
| | | | | | /softfp |
|---------------------|-------------------------------------- ------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=hard | armv7-ar |
|(ハード FP) | -mfpu=vfpv3-d16 | /親指 |
| | | | | | /fpu |
-------------------------------------------------- ------------------

どこから入手したかに関係なく、gcc ツールチェーンに付属の README ファイルを実際に読む必要があります。

于 2014-09-08T15:42:08.340 に答える