問題タブ [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.

0 投票する
1 に答える
88 参照

c - EEPROM 検索機能

EEPROM に配列を保存しています

{0,0,0,0,1,1,1...} から始まり、アドレス '0'-address'53' から最大 54 個の要素があり、値をクロス チェックしたところ、すべて問題ありません。

しかし、「検索機能」を使用し、0番目のアドレスから検索するときに引数として「0」を渡した場合。

unsigned char search(char current_time)

ただし、「4」番目の要素の後はゼロではないため、値として「4」を返す必要があります。

しかし、常に 53 を返します。

なぜそうなのですか?

私はc18コンパイラを使用しています..ロジックに間違いがある場合は、私を修正してください.

よろしく

0 投票する
1 に答える
2884 参照

c - C18 char 配列を関数に渡す

私は C プログラミングとマイクロコントローラーが初めてです。C18 を搭載した PIC18F24K20 マイクロコントローラーを使用しています。USART 送受信機能を使用してコンピュータ入力から情報を受信するようにセットアップしました。私の目標は、受信した単語を既知の単語と比較し、受信した単語に基づいて何かをコンピューターに送信することです。以下は関連するコードです。

コードは現在、何が問題なのかを判断するためにテストするように設定されています。そのまま実行すると、マイクロコントローラーが CommTransmit 関数を実行したかのように、コンピューターは「t」を受け取ります。ただし、「g」は送信されません。USART_transmit('g') 呼び出しを CommTransmit 関数の外側と if ステートメントの後に入れても、呼び出されることはありません (strcmppgm2ram 関数でスタックするように?) が、それでも 't' を送信します。

CommTransmit関数にブレークを入れて1行ずつ実行すると、正常に動作するように見えるため、これも奇妙です。しかし、MPLAB IDE 内で CommVariable を見てみると、本来あるべきものではありません (ただし、関数に呼び出される前の 'buf' 変数は正しいものです)。私が知る限り、私が見るときの CommVariable の値は、配列のサイズに依存します。

読んでみると、マイクロコントローラーが変数を格納する方法(プログラムとデータメモリの違い)が原因である可能性があると思いますが、よくわかりません。どんな助けでも大歓迎です!

編集: CommTransmit 行の前の else ステートメントで T = strcmppgm2ram 行のコメントを外すと、正しく動作することも追加する必要があります (2 つの文字列が同じ場合は T = 0)。関数を介して配列を渡すと、配列が変更され、strcmppgm2ram 関数が正しく機能しなくなると思います。

0 投票する
1 に答える
982 参照

arrays - C18 コンパイラ、MPLAB (ANSI C89) で構造体を割り当てる方法

メインプログラムで値を割り当てようとしています。

メインプログラムで構造体 p に値を代入できる唯一の方法は

この方法では、配列に値を割り当てるのに多くのスペースと時間がかかります。これを行うより良い方法はありますか?

次の方法は私にとってはうまくいきませんでした..

0 投票する
1 に答える
928 参照

pic - picc コードの __18CXX と __PCB__ の意味は何ですか

コンパイラ関連のコードの次の行をよく見かけます。

それぞれの意味をどうやって知ることができますか?

0 投票する
2 に答える
2581 参照

c18 - Microchip XC8 コンパイラと C18 コンパイラの違いは何ですか?

XC8 コンパイラと C18 コンパイラの違いをさらに理解したい。

XC8 が、すべての 8 ビット マイクロチップ コントローラ用の最新のコンパイラであることは知っています。例: PIC16F、PIC18F。C18 は PIC18 製品のコンパイラです。C18の場合、PIC18シリーズにはPIC18FとPIC18Cの両方が含まれていますね。

XC8 は C18 に比べてさらに進化したバージョンだと思います。以前にC18でコンパイルされたコードのすべて/一部をXC8でもコンパイルできるということですか。そうでない場合、どうあるべきか。

ところで、現在 (数日) PIC18F2455/2550/4550 USB インターフェイスに関するサンプル/チュートリアル コードを探しています。ポインタがあれば、本当に感謝しています。

0 投票する
2 に答える
1667 参照

enums - 関数で列挙型とスイッチを使用する (C18 コンパイラ)

私は最近、プログラムをより理解しやすいように書き直し始め、プログラムのさまざまな状態を記述するために列挙型を使い始めました。

列挙型は次のとおりです。

値は実際には整数であるため、バイトとして関数に渡すことで回避できると思いましたが、これが問題を引き起こすのか、それとも何か他の原因なのかはわかりません。この関数を何年も修正してきました。

コンパイル時に発生するエラー (同じ行に 2 つのエラー)、特定のケースでは常に最初の行にエラーが表示されます。何を伝えようとしているのかわからない。

質問: 何が間違っているのか、コードを機能させるにはどうすればよいですか?

0 投票する
2 に答える
148 参照

c - const 関数のパラメーターはプロトタイプではあるが宣言ではない (C の場合)

C でコードを記述する場合const、関数の定義に関数パラメーターの宣言を含めることがよくありますが、その宣言は含めません。

これは常に GCC と Clang を使用して問題なくコンパイルされていますが、Microchip の C18 コンパイラは型の不一致を主張しています。

規格はこれについて何を言わなければなりませんか? 非標準の拡張機能に依存していませんか?

編集:私はこれの利点について尋ねているわけではなく、想定される重複した質問のように C++ について尋ねているわけでもありません (関数パラメーターに「const」を使用する)。C 標準についてお尋ねします。これは合法的な ANSI C、C99、または C11 ですか?

0 投票する
2 に答える
186 参照

microchip - Microchip C18はデータを数値としてターミナルに送信します

USART経由で端末にデータを送信する必要があるプロジェクトに取り組んでいます。データを char (EEPROM から収集したもの) の数値 (0-255) として表示する必要があります。

char をそのまま端末に送信することができました (Putty または TerMite を使用) char の値が印刷できないところから問題が始まります

そのため、char の値を数値に変換する必要があります。

例: EEPROM から取得したデータが 0x31 の場合、ルーチンは「1」を送信しますが、「049」または「49」を端末に送信する必要があります。

}

ありがとう、