STM32領域の「フラッシュ」がxxxバイトの問題でオーバーフローした問題を解決

STM32領域の「フラッシュ」がxxxバイトの問題でオーバーフローした問題が解決されました

1.問題の現象

STM32CUBEIDEで作成されたSTM32L031プロジェクトで、HAL_UART_Receive_IT(&huart2、(uhut8_t *)&aRxBuffer、1);が有効になっている場合、シリアルポート2の受信が中断されても、プロジェクトのビルド時にxxxバイトでオーバーフローしたエラー領域FLASHが報告されます。
ここに画像の説明を挿入ここに画像の説明を挿入

2.不正解

インターネットで導入し、プロジェクトディレクトリのコンパイル済みスクリプトファイルを
ここに画像の説明を挿入
変更し、ldファイルを開いてFLASH(rx)値を36Kなどの大きな値に
ここに画像の説明を挿入
変更する方法があります。変更後、ビルドをチップに正常にダウンロードできますが、プログラムは実行できません。 。STM32L031には32Kのフラッシュスペースしかないため、ソフトウェアによって認識されるスペースのサイズを人為的に増やしても問題は解決しません。

3.正しい解決策

割り込みのないポーリング(ポーリング)メソッドを使用してシリアルポートデータを正常に受信するため、基本的な判断は、uart割り込みメソッドの最適化によって生成されたコードが大きすぎるということです。したがって、コンパイルの最適化のために調整できます。

STM32CUBEIDEのProject-Propertiesで、最適化オプション
ここに画像の説明を挿入
見つけてデバッグとリリースのコンパイルを最適化し、Optimize for sizeを選択する
ここに画像の説明を挿入
ここに画像の説明を挿入
か、すべてのタイプがOptimize for size
ここに画像の説明を挿入
Applyを使用して終了します。コードにスペースを入力し、プロジェクトを保存して再ビルドすると、コンパイルとリンクが成功します。チップへのダウンロード後、シリアルポートの割り込み受信動作は正常です。

STがSTM32CUBEIDEバージョンをアップグレードした後、コントロールメニューは次のようになり、推論を使用するだけ
ここに画像の説明を挿入
です。

おすすめ

転載: blog.csdn.net/hwytree/article/details/103125176