問題タブ [sdcc]
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 - C プログラミングはヘッダーなしでどのように機能しますか?
私は C プログラミング言語と z80 アセンブリに精通しており、32k の RAM、32k の ROM、および io コントロール用の 8255 pia を備えた cpu だけを備えた単純な z80「コンピューター」を作成しました。アセンブリ言語サブルーチンを使用して、システムで 8255 に LED を点滅させました。
質問は、z80 を含むさまざまな小型 CPU 用のアセンブリに C プログラムをコンパイルできる SDCC (Small Device C コンパイラ) がある場合、stdio ライブラリまたは任意のライブラリがない場合、どのように C プログラムを作成しますか?このシステムがどのようにカスタム化されているかという理由で親切です。最初にアセンブリを使用してから、ASM ルーチンとして関数を作成して呼び出す必要がありますか? ある種の重要なアイデアを誤解していますか? これがどのように機能するかについて、私はかなり混乱しています。出力のないシステムでは printf() だけではできません。言うまでもなく、printf() は何らかの端末が接続されていることを前提としています。
c - SDCC の特定のメモリ位置に変数を配置する方法
低レベルのプログラミングでは、特定のメモリ位置で、これが私のアドレスであると言う必要がある場合があります。この投稿では、例としてPIR1
PIC16F886 および関連するマイクロコントローラーのレジスターを取り上げます。常にアドレス 0x000C にあります。
私はこのアプローチを取りました:
これで、変数に次のようなものを割り当てることができますpir1 |= 0x40
(わかりました、マジック ナンバーの代わりに #defined 定数を使用しますが、あなたは私のドリフトを取得します)。これは GCC で問題なくコンパイルされ、使用しても警告は表示されません-Wextra -Wall
。私の仮定を確認するために、GCC は次の x86_64 を吐き出します。
まさに私が望んでいたものです(わかりました、なぜそれが時々あるのかがわかりました。それはおそらくさらに別の愚かなx86の癖ですが、とにかくPIC14コードが欲しいので無関係ですeax
)rax
さて、PIC14 をターゲットにするために、実際に SDCC コンパイラを使用しています。私はこのようにそれを呼び出しています
で始まる上記のコードで#define
は、次の警告が表示されます。
私は代わりにこれをやってみました:
しかし、それはエラーメッセージになります
課題を出そうとしたとき。
だから私の質問は、Cでこれを行う慣用的な方法が欠けているかどうかです? SDCC が警告しているのはなぜですか? ここで無視している特定の SDCC 固有のファンクはありますか?