問題タブ [newlib]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ARM Cortex M-3 GCC/newlib の初期化
私は ARM Cortex-M マイクロコントローラーの世界を掘り下げ始めたばかりで、既存の開発ボードや使いやすい IDE を使用するのではなく、これらのベア メタルに直接入ることにしました。私は STM32F103 をプロトタイピング ボードにはんだ付けして、Launchpad から gcc-arm-embedded Toolchain を使って動作させようとしています。リンカ スクリプトなどに関するマニュアルを読むのに苦労した後、私は独自のリンカ スクリプトとスタートアップ コードを作成しました。基本的には、.data セクションを ROM から RAM にコピーし、.bss をゼロにして SystemInit() を呼び出します。 ST の標準周辺機器ライブラリから、基本的な uC 初期化を行い、最後に main() を呼び出します。
さて、Cortex M-3 開発について見つけたいくつかのチュートリアルから、リンカに -nostartfiles フラグを使用していることがわかりましたが、今疑問に思っています: その場合、自分で newlib を初期化する必要がありますか? それとも、GCC/newlib のデフォルトの開始ファイルを使用して、-nostartfiles をドロップする必要がありますか? しかし、その場合でも、.data を RAM にコピーしてベクター テーブルを設定するなどの初期化を行う必要があり、これにはカスタム リンカー スクリプトが必要です。では、どこでそれを行うのですか?
そして、私は C++ について考え始めたくありません!
では、そのような Cortex-M3 ベースのマイクロコントローラーとその libc を初期化するための推奨される方法は何ですか (周辺機器は数えません)?
前もって感謝します!
c - Newlib printf 遅延
uart ポートにリダイレクトされる newlib の printf 関数に奇妙な問題があります。
この問題は、例を使ってうまく説明できます。
プログラムを実行すると、次のprintfに到達/呼び出されるまで「hi」は表示されません。つまり、'hello' が出力されることになっている場合、'hi' が出力されます.. この 1 呼び出しの遅延は常に実行されます。最後のprintfはまったく印刷されません。
私のUARTコードはどこですか:
これに対する解決策は何ですか?
c - __init_array には何が入りますか?
GCC でコンパイルされた Cortex-M3 プロジェクトがあります。startup_LPC177x_8x.s コードは、初期化されたデータをフラッシュから RAM にコピーし、bssを初期化し、クロック初期化を呼び出します SystemInit
。関数を呼び出す前に_main
、コードも関数を呼び出します_libc_init_array
。
__libc_init_array関数は、 で定義されているすべての初期化ルーチンを__preinit_array
呼び出し、_init
関数を呼び出し、 で定義されているすべてのルーチンを呼び出し__init_array
ます。
__preinit_array
GDB を使用すると、が空 (start==end) であり、2 番目の呼び出しが__init_array_start[i] ()
クラッシュすることがわかりました。
この配列に含まれる関数がわかりません。リンカー スクリプトにより、すべての.init.array.*
セクションがここに配置されます。.o
しかし、対応するファイルとソース ファイルを見つけるにはどうすればよいでしょうか。
linux - msp430-elf ターゲット用の gcc のビルド
msp430 用の gcc-4.9 をビルドしようとしています。の最新バージョンを既にビルドしており、基本的な構成でbinutils
ビルドを試みました。gcc-4.9
configure --target=msp430-elf --enable-languages=c,c++ --with-newlib=yes
ただし、問題は、gcc が自分のマシン用にビルドされ、新しいコンパイラでターゲットのx86-unknown-linux
ビルドが開始されたと思いますが、既に gcc-4.8 がインストールされており、既にインストールされているターゲットが必要なだけです。msp430
msp430-elf
4.8
注:msp430
ターゲットは でのみ使用できます。すでにインストールされているので、ホスト マシン用ではなく4.9
4.9 をビルドしたいだけです。msp430
まず、ビルドが失敗しました。次に、成功したとしても、インストールしたくありません。また、これを行うのではないかとx86
心配make install
しています。
のドキュメントconfigure
はかなり曖昧で、助けていただければ幸いです。
linux-kernel - gcc ツールチェーンの構築にカーネルヘッダーはどのように関与していますか?
カーネルヘッダーは、プログラムがカーネルと対話する方法を指定するため、標準ライブラリの構築に関与する必要があることを知りました。それとも? arm-elf ツールチェーン ( http://wiki.ubuntuusers.de/GNU_ARM-Toolchain )を構築する方法を非常によく説明するチュートリアルを読みました。
私を混乱させているのは、このプロセスにカーネルヘッダーが関与していないことです。彼らはgccを設定します
とNewlib
彼らはnewlibからのみヘッダーを取得しているように思えます(glibcの代わりにnewlibを使用しています)。このディレクトリ内のファイルは、非常に汎用的に見えます。Linux の「カーネル バージョン」がこのプロセスのどこかに表示されることを期待していますが、そうではありません。Linux ABI は、カーネル バージョンからカーネル バージョンに変更できると考えました。カーネル (ヘッダー) と gcc ツールチェーン間の「接続」はどのようになっていますか?
linux - glibc は Cygwin でサポートされていません
Cygwin FAQ には、「glibc はどこにありますか?」に関する次の情報があります。: Cygwin は glibc を提供していません。代わりに、同じ機能の多く (すべてではない) を提供する newlib を使用します。glibc を Cygwin に移植するのは難しいでしょう。
私は驚いて、以前に使用していたリリース パッケージをチェックアウトしました。リポジトリを確認したところ、glibc は実際にはバージョン 2.10 まで cygwin の一部だったようです。glibc の後続バージョンの移植の難しさについて誰か教えてもらえますか?