4

最小限のライブラリが接続された STM32 マイクロコントローラーを使用しています。clock()関数 from <ctime>(および場合によっては new )を使用したいのですが、 -1 を返すstd::chronoことに固執しています。clock()

gcc-arm-none-eabiライブラリがマイクロコントローラーの周辺機器のレイアウトを認識しているとは思わないので、これは驚くべきことではありません。

clockティックカウントの取得元を確認するにはどうすればよいですか? 単純に再宣言できますか、それとも実装する必要がある下位レベルの関数はありますか?

4

1 に答える 1

1

これは通常、libc実装を新しいプラットフォームに移植する作業の一部です。glibcまたはnewlib(C標準ライブラリの2つの最も一般的な実装)のコピーをコンパイルするときは、一連のスタブメソッドを提供する必要があり、そのうちの1つが時間を提供します。gcc-arm-none-eabiはnewlibで事前定義されたターゲットであり、これらのスタブの多くを実装しますが、時間を取得するためのターゲットではありません。これは、前述のように、これらはアプリケーション固有であるためです。

最善の方法は、このメソッドを実装して、自分でツールチェーンを構築することです。ここの指示に従うことができますが、newlibをビルドする直前に、ターゲットを編集してこのスタブに入力します。スタブを実装するための良いリファレンスはここにあります。

または、独自の関数を直接実装することもできclockます。アプリケーションをリンクすると、ライブラリ内のバージョンよりもバージョンが優先されます。ただし、これは、呼び出すライブラリ内のすべてがclock壊れたライブラリバージョンを呼び出すことを意味するため、多くの関数を再実装する必要がある場合があることに注意してください。

于 2013-02-22T18:01:32.450 に答える