問題タブ [c18]
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.
bit-manipulation - PIC C18:バイトからビットを読み取る
非常に初歩的な質問があります。しかし、何を試しても、これをうまく実装できませんでした。
次のハードウェア構成でPIC18F2550に接続されたシフトレジスタ(74LS164 )があります。
LEDは74LS164の出力ピンに接続され、そのステータスを表示します。として宣言された8ビット変数がありますunsigned char
。この変数のビットをシフトレジスタに送信したいと思います。シフトレジスタには、出力の名前がQ0〜Q7の内部フリップフロップがあります。最初に送信されたビットはQ0にロードされ、2番目のビットを送信すると、前のQ0がQ1にシフトし、新しく送信されたビットがQ0に到達します。これは、後続のビットを送信するときに続きます。送信が完了すると、変数のLSBはシフトレジスタのQ0にあると想定され、MSBはQ7にあります。
私のコードは次のようなものです(言語はC18です):
上記のコードは、私が望むように実行されません。実行すると、変数にロード0b11111111
したかのように、すべてのLEDが点灯します。ucRegister
ただし、次の1つは非常にうまく機能します。
私のコードの何が問題になっていますか?エラーはライン上にある可能性が最も高いとSCLCD_DATA = ((ucRegister & 0b10000000) == 0b10000000) ? 1 : 0;
思いますが、どれだけ見ても、私には完全に問題ないように見えます。私のコードの何が問題になっていますか?
どんな助けでもありがたいです。
c - 4つのシングルバイトでIPアドレス文字列を解析する
Cを使用してMCUでプログラミングしているので、IPアドレスを含むnullで終了する文字列を4つのシングルバイトに解析する必要があります。私はC++で例を作りました:
このコードは、新しい行に各バイト192、168、0、および1を出力します。ここで、char byte1、byte2、byte3、byte4のように各バイトが必要です。byte1には1が含まれ、byte4には192が含まれます...または構造体IP_ADDRでその構造体を返しますが、その方法がわかりません。 C. :(
c - C18:コードでのLONGおよびFLOAT定数の表現
long
コード内のfloat
数字には特別な表現が必要ですか?
C / C ++を使用したコンピュータープログラミングでは、型と区別するためにf
、型付き定数の後に文字を置きます。C18言語では、同じことを行う必要がありますか?float
double
ロングタイプはどうですか?
c - C18: 未使用のライブラリ関数は EPROM のスペースを消費しますか?
Library.h
main.c
多くの関数定義を含むライブラリ ファイルがあります。未使用のライブラリ関数により、生成されるマシン コードのサイズは増加しますか? それとも、コンパイラは未使用の関数を無視してコードを最適化しますか?
IDE: MPLAB 8.43
コンパイラ: MCC18 3.34
PIC: 18F2550
c - Microchip C18ネイキッド機能
C18コンパイラでネイキッド関数を宣言する方法を知っている人はいますか?
裸の機能とは、エピローグとプロローグのない機能を意味します。
私が使用するgccで:
多分 #pragma または同じ結果を得るためのいくつかのトリック...??
ありがとうございました!
c - このCマクロが構文エラーを引き起こすのはなぜですか?
Cでマクロを使用するのはこれが初めてであり、通常は関数に配置するコードの大部分をマクロに置き換えようとしています。これは非常に頻繁に使用される割り込みの一部であるため、可能な限り最適化する必要があります。ドキュメントを読んだ後、コンパイラが関数のインライン化をサポートしていないことを確認しました。関数呼び出しのオーバーヘッドを回避したいと思います。
コード自体がデータをシリアル入力パラレル出力シフトレジスタに送信します。私が見る限り、必要なコードを記述するためのより短い方法はありません。
私はC18コンパイラバージョン3.41とMPLABXIDEを使用しています。
したがって、関数形式で使用しているコードは次のとおりです。
関数をこのマクロに変えました:
だから私は何が間違っているのですか?
更新:コメントを削除しましたが、別の場所で構文エラーが発生しています。
usb - Microchip PIC (MPLAB/C18) の USB HID コードのリンカ エラー
基本的な USB HID 機能のコードをコンパイルしようとしています。MPLAB 8.43 と Microchip C18 コンパイラを搭載した PIC18F14K50 を使用しています。
Microchip の Web サイトからいくつかの標準ファイルを使用しています。ここに私の C ファイルがあり、ここにヘッダー ファイルがあります。
ビルド時に次のエラーが発生します。
実行中: "C:\Program Files\Microchip\mplabc18\v3.40\bin\mplink.exe" /p18F14K50 /l"C:\MCC18\lib" /k"C:\MCC18\bin\LKR" "usb_function_hid. o" "usb_device.o" "enumeration.o" "usb_descriptors.o" /u_CRUNTIME /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"C:\LPCUSBDK_Labs\Lab1_files\output\Project Lab 1.cof" /M" C:\LPCUSBDK_Labs\Lab1_files\output\Project Lab 1.map" /W
MPLINK 4.40、リンカー
デバイス データベース バージョン 1.3
Copyright (c) 1998-2011 Microchip Technology Inc.
エラー - ファイル「./usb_function_hid.o」にシンボル「HIDDescriptor1」の定義が見つかりませんでした。
エラー: 1
リンク ステップに失敗しました。
このHIDDescriptor1
記号は、コード内の 2 つの場所 (C ファイルの PasteBin 行 173 とヘッダー ファイルの PasteBin 行 356) に表示されます。
このコードは、Microchip から直接提供されています。リンクしない理由がわかりません。コンパイラの別のバージョン用に設計されているか、外部依存関係が欠落しているか、コンパイラ/リンカー スイッチが欠落していると思います。
これを構築するために何をする必要があるかについてのアイデアはありますか?
include - MPLABXIDEで外部ヘッダーファイルを使用する
いくつかの.hファイルと.cファイルを含むフォルダーがあり、プロジェクトでヘッダーファイルを使用したいと思います。
「既存のアイテムの追加」を使用してプロジェクトの「ヘッダーファイル」フォルダーにそれらを含めましたが、「#include」しようとすると、コンパイラ(mplabc18 \ v3.41)は「ファイルxyz.hが見つかりません」と言います。
では、これらのファイルをプロジェクトフォルダーにコピーせずに使用するにはどうすればよいですか?
c - C18Microchipコンパイラとstrcmp関数
2つの文字列を比較したい:
最初の文字列は私のメインの上で宣言されています:
const文字列と比較したい場合は、次の行を入力します。
関数がゼロを返すことはありません。解決策と正しい型キャストは何ですか?strcmpも同じ問題です!