Eclipse CDT 4.5.1 (Mars)、ARM GCC 4.9 2015q3、Liviu Ionescu による GnuArmEclipse-Plugin、OpenOCD 0.9.0、および STM32CubeMX 4.11.0 を使用して、STM32F401C Discovery Board 用の Windows ベースのツールチェーンをセットアップしました。
基本的に、STM32CubeMX を使用して SW4STM32 プロジェクトを生成し、すべてを新しい Cross ARM GCC Eclipse C プロジェクトにインポートし、いくつかのパラメーター (シンボル、CPU タイプ、FPU、リンク ファイル) を調整しました。シンプルな LED 点滅の例が正常にビルドされ、OpenOCD で実行できます。ブレークポイントも機能します。
newlib または newlib nano で必要なシステム コール (たとえば、_sbrk
および) を提供するために、リンカー オプション_write
を使用して開始しました。--specs=nosys.specs
このようにして、動的メモリ割り当ては問題なく機能します。_write
ただし、ディスプレイに印刷したり、UART 経由でデータを送信したりするために、関数を自分で実装したいと考えています。
libgloss では、_write
関数に弱いシンボルがあるため、再実装するだけで十分です。私はこれを私のmain.cで行いました:
int _write (int fd, char *ptr, int len)
{
HAL_GPIO_TogglePin(LD5_GPIO_Port, LD5_Pin);
HAL_Delay(300);
return len;
}
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
HAL_GPIO_TogglePin(LD5_GPIO_Port, LD5_Pin);
printf("Blink");
while(1)
{
// do nothing
}
}
LED が点滅することを期待していましたが、メイン関数内のトグル コマンドだけが効果を示しました。
書き込み関数が呼び出されないのはなぜですか? 私は何か見落としてますか?