問題タブ [pic18]
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 - PIC C18での呼び出しに問題があり、パラメータが文字化けしています-構造体へのポインタを使用している可能性がありますか?
私はPICC18を使用してかなり簡単な呼び出しを行おうとしています。
MPLABシミュレータを使用すると、関数に入るときでさえ、引数が完全に文字化けしているのがわかります。
私は次のtypedefを持っています
(私のTODOリストには、ビットフィールドを指定するために必要な順序の計算が含まれています)
それはさらなる構造体に埋め込まれています
ページングされたRAMのどこかに割り当てられます(main.c内)
aprs.hで定義されているメソッド
(string.hの例に従って、そこに「far」を入れてみました。効果はありません。このPICには64Kがないので、すべてを「near」として再コンパイルする必要があります)
aprs.cでの実装は
(最適化することができます。最初にこれを機能させるのが最善です。この実装により、ループを一周するときにchに何があるかを確認できます。)
main.cのmain()からのいくつかの呼び出しは次のとおりです。
(unsigned char)へのキャストも役に立ちませんでした。
最初の3行はコンパイルされますが、MPLABシミュレータで実行すると、関数実装の引数にジブリッシュが発生します。
strcpy行は、コンパイラに「警告[2066]型修飾子の割り当ての不一致」という警告を出します。それがどの割り当てを教えてくれたらいいのにと思います。
私はここで何を間違えましたか?
ありがとう
- リチャード
assembly - ISR のプリスケーラをマイクロ秒単位で特定の間隔に設定する方法は?
私はPIC18F87J11デバイスを持っており、以下を作成することになっています:
1) 100ms ごとにトリガーされる優先度の高い ISR
2) 10ms ごとにトリガーされる優先度の低い ISR
プリスケーラーの構成に関する基本的な知識があります。たとえば、Timer0 の場合です。
マニュアル ページを読むと、Timer0 を 16 ビット カウンタ、プリスケーラ 1:8 に設定する必要があります (デバイスのマニュアル ページ 179)。問題は、100 ミリ秒間隔が必要な場合に正しいプリスケーラー設定を決定する方法がわからないことです。どんな助けでも感謝します。
編集:
さて、今、私は自分が何をしているのかについて、思っていたよりもずっと少ない考えを持っていることに気付きました. マニュアルに関連情報が見つかりません(そして、そこにあると確信しています)。Timer0を 100ms に、Timer1を 10msに設定する必要があります。
java - USB通信ポート
PIC18F4550 から EEPROM にデータを送信したいと考えています。PIC は、(USB ポート通信) を使用して PC から PIC にデータを送信したい開発キットにあります。*シリアルではありません*
C または Java 言語を使用してこの操作を実行する方法について、適切なコード例またはチュートリアルを探しています。
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 - PIC ボード グローバル変数とメソッド ローカルでの C パフォーマンス
全て、
PIC18 ボードの制御ループの一部であるため、1 秒間に何度も呼び出される C 関数があります。これらの関数にはメソッド スコープのみが必要な変数がありますが、これらの変数を常に割り当てることと、グローバルまたは少なくともより高いスコープの変数を使用することのオーバーヘッドがあるとしたらどうでしょうか。(パフォーマンスがメソッドのローカル変数を使用しないことを決定する場合、グローバル変数の使用を避けるために、より高いスコープから渡されるように構造体を typedef することを考えました)
ここには、このトピックをカバーするいくつかの優れたスレッドがありますが、決定的な答えはまだ見ていません。ほとんどの場合、ベスト プラクティスを説いており、マイクロ秒ごとにパフォーマンスが向上しない限り、これに従うことに同意します。
1 つのスレッドで、グローバル変数の代わりにファイル スコープの静的変数を使用することが言及されていましたが、それが必要なのか疑問に思わずにはいられません。
みんなどう思う?
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. :(
pic18 - PIC18F4550を搭載したEEPROM 24lc256
私は pic18f4550 を i2c EEPROM と接続する必要がある大学のプロジェクトに取り組んでいます。
プロテウスシミュレーターを使って以下の回路を実装しました。私のつながりで以下
実際にインターフェイスを実装したとき、PIC が eeprom から読み取るときに問題に直面しました。中断されているため、読み取り操作が正しく実行されたかどうかを確認できませんでした。
何が問題なのですか?