1

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 が点滅することを期待していましたが、メイン関数内のトグル コマンドだけが効果を示しました。

書き込み関数が呼び出されないのはなぜですか? 私は何か見落としてますか?

4

1 に答える 1

0

バッファを出力に明示的にフラッシュするか ( fflush(stdout))、改行を送信する( ) 必要があります'\n'

于 2015-12-06T13:21:41.620 に答える