2

Keil IDE を使用して、VCP を介して浮動小数点数を受信し、STM32F4 検出ボードのフラッシュ メモリに書き込もうとしています。フラッシュメモリへの書き込みに使用される関数:

FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data);
FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data);

データ入力として符号なし整数値を受け入れますが、次のコードを使用してフラッシュ メモリに符号付き整数を書き込むことができました。

int dataflash1 = -1000;
int gain;
uint32_t Address= 0x08008000;
.......
FLASH_ProgramWord(Address,dataflash1);
.......
gain=*(int*)Address;

しかし、まだフロートデータを書き込むことができていません。「int」を「float」に変更すると (どちらも 4 バイトのデータである必要があります。keil コンパイラ ガイドに記載されています)、1.7345673 e-42 のような数値が得られます。

くだらない質問かもしれませんが、どなたか教えていただけると助かります。

4

2 に答える 2

1

これが機能しない理由がわかりません:

float dataflash1 = -1000.0f;
float gain;
uint32_t Address= 0x08008000;
.......
FLASH_ProgramWord(Address,dataflash1);
.......
gain=*(float*)Address;

dataflash1と の両方をgainfloat として宣言する必要があることに注意してください。任意の数値 (たとえば、-1000) の整数と浮動小数点数としての表現は、一般に完全に異なるため、整数表現を使用してデータをメモリに書き込み、それを読み戻すことができると期待するのは合理的ではありません。浮動小数点数に直接変換します。最初にビットレベルの表現を変更する必要があります。ここでは、フラッシュへの書き込みに固有のものはありません。RAM のみで変数を使用する次のコードも機能しません。

int dataflash1 = -1000;
float gain;
gain=*(float*)Address;

の値を出力しようとしてgainも、結果が -1000 にならないことは保証できます。

于 2014-07-11T02:58:01.760 に答える