問題タブ [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.
assembly - 16 ビット ワードの下位部分と上位部分の取得
SDCC コンパイラ、その Z80 部分 (sdasz80) を学習します。私が使用するアセンブラのネイティブバージョンでは:
16 ビット値BUF
を 2 つの 8 ビット部分 (上位と下位) に格納します。私はSDCCでそれを行う方法を見つけることができません。
生成されたコードは正しく、エラーなしでコンパイルされますが、2 番目のロードは私には見栄えがよくなく、論理演算を順序付けする括弧がコンパイラによって受け入れられません。それは正しく、16 ビット値を 2 バイトで分割する唯一の方法ですか?
アップデート。一部の ASxxxマニュアル >
および<
オペレーターに記載されています (表 4 を参照)。コンパイル エラー「エラー: マシン固有のアドレッシングまたはアドレッシング モード エラー」を出して動作しないでください。
Update1: 次のコード
エラーが発生しますError: <q> missing or improper operators, terminators, or delimiters
。
embedded - I2C を開始できません
stm8s コントローラーと SDCC コンパイラーを使用しています。SD130S7 I 2 C ベースの RTC とコントローラを接続しています。通信中に問題が発生しました。問題は I 2 C 自体が起動していないことだと思います。
STM8S103用の開発ボードを使用しています。
ロジック アナライザーで確認したところ、SDA ピンにパルスが 1 つしかないことがわかりました。
SDAにはパルスがあり、SCLにはパルスがないのはなぜなのか混乱しています。(SCL はクロックであり、Clock は最初に存在する必要があるため)。
c - sdccインラインアセンブリで変数をプッシュするには?
私はこのコードを持っていますThreadCreate()
:
これにより、次の結果が得られます。
理由がわかりません。tmpPSW
明確に定義されていますが、sdcc は文句を言います。ここで何が間違っていますか?sdcc インライン アセンブリで C 変数をプッシュする他の方法はありますか?
また、これはおそらく関連しています。生成された.asm
ファイルには、割り当て情報が含まれています。
これは、レジスターが不足していることを意味しますか? もしそうなら、どうすればこれを軽減できますか?
編集:
のソースThreadCreate()
:
の生成されたアセンブリThreadCreate()
:
arrays - SDCC でビット フィールドのパック配列を作成する方法は?
MCS-51 ターゲット用に SDCC でコンパイルする必要があるビット フィールドの配列を含むネストされたデータ構造があります。
これは簡単な例です:
example.c
3 ビットが含まれているためstruct data
、8 つのインスタンスには合計 24 ビットが含まれているため、それらを格納するには 3 バイトのメモリで十分です。
しかし、結果でわかるように、SDCC は 8 バイトを割り当てますexample.asm
。
SDCC に 3 バイトのみを割り当てる方法はありますdummy
か?
回避策として、私は現在 astruct
をまったく使用していませんが、代わりにいくつかのマクロを使用して、データ構造の合計サイズを計算し、バイトのフラット配列を割り当て、個々のメンバーにアクセスするためのインデックスとビット マスクを生成しています。代わりに構文 like を使用したいと思いますdummy[5].b
。
一部のコンパイラには、ビット フィールド ( など) のパッキングを有効にするオプションがある#pragma pack
ようですが、SDCC マニュアルにはそのようなものは見つかりませんでした。