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バージョンをアップグレードした後、コントロールメニューは次のようになり、推論を使用するだけ
です。