目次

CubeIDE

STM32の開発環境

マニュアル自動翻訳メモ

2.5.3 Page size allocation for malloc

When the GNU Tools for STM32 toolchain is used with the standard C newlib library, the page size setting for malloc can be changed. The newlib default page size is 4096 bytes. If a sysconf() function is implemented in the user project, this user function is called by mallocr(). The following example shows how to implement a sysconf() function with a 128-byte page size. Add a similar function if there is a need for the application to use a smaller page size than the default 4096 bytes.
Note: If the “GNU ARM Embedded” toolchain is used, it does not call any sysconf() function implemented in the application but always uses the default sysconf() function in newlib. Also, no call to sysconf() is made if the “GNU Tools for STM32” toolchain is used with the reduced C newlib-nano library.
If the “GNU ARM Embedded” toolchain is used, it does not call any sysconf() function implemented in the application but always uses the default sysconf() function in newlib. Also, no call to sysconf() is made if the “GNU Tools for STM32” toolchain is used with the reduced C newlib-nano library.
GNU Tools for STM32 ツールチェーンを標準C newlibライブラリと共に使用すると、malloc のページ サイズ設定を変更できます。newlib のデフォルトのページ サイズは 4096バイトです。 ユーザープロジェクトに sysconf() 関数が実装されている場合、このユーザー関数は _malloc_r() によって呼び出されます。次の例は、128 バイトのページ サイズで sysconf() 関数を実装する方法を示しています。アプリケーションがデフォルトの 4096 バイトよりも小さいページ サイズを使用する必要がある場合は、同様の関数を追加します。 「GNU ARM Embedded」ツールチェーンが使用されている場合、アプリケーションに実装されている sysconf() 関数は呼び出されず、常に newlib のデフォルトの sysconf() 関数が使用されます。また、縮小されたC newlib-nano ライブラリで「GNU Tools for STM32」ツールチェーンが使用されている場合、sysconf()への呼び出しは行われません。

2.5.5 Treat linker warnings and errors

The GNU linker is normally silent for warnings. One example of such silent warning is seen if the startup code containing the normal Reset_Handler function is missing in the project. The GNU linker in normal silent mode creates an elf file and only report a warning output in the Console window about the missing Reset_Handler.
In this case, a new elf file is created but, if the warning is not detected, it will not work to debug the project because the program does not contain the Reset_Handlerfunction. It is possible to configure the linker to treat warnings as errors by adding the –fatal-warnings option.
When the --fatal-warnings option is used, the linker does not generate the elf file but displays an error in the console log:

c:\st\stm32cubeide_1.1.0.19w37\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.extern altools.gnu-tools-for-stm32.7-2018-q2-update.win32_1.0.0.201904181610\tools\arm-none-eabi\bin\ld.exe: warning: cannot find entry symbol Reset_Handler; defaulting to 0000000008000000 collect2.exe: error: ld returned 1 exit status make: *** [makefile:40: NUCLEO-F401RE.elf] Error 1 "make -j4 all" terminated with exit code 2. Build might be incomplete. 11:26:30 Build Failed. 1 errors, 6 warnings. (took 7s.193ms)


GNUリンカは通常、警告に対して沈黙しています。 通常のReset_Handler 関数を含むスタートアップ コードがプロジェクトにない場合、このようなサイレント警告の 1 つの例が見られます。 通常のサイレント モードの GNU リンカーは、elf ファイルを作成し、不足している Reset_Handlerに関する警告出力をコンソール ウィンドウに報告するだけです。
この場合、新しい elf ファイルが作成されますが、警告が検出されない場合、プログラムに Reset_Handler関数が含まれていないため、プロジェクトをデバッグすることはできません。 –fatal-warningsオプションを追加することで、警告をエラーとして扱うようにリンカを設定することができます。

–fatal-warningsオプションを使用すると、リンカは elf ファイルを生成せず、コンソール ログに次のエラーを表示します: