問題タブ [lpc]
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.
embedded - ARM LPC1768 UART0 構成、ボーレートが正しくありません
私のボーレートは 115200 のはずですが、892.9 です。
cclk が 100MHz で動作していることを確認しました。
UART init コードを、Kunil (uart_interrupt_demo) によるサンプル プロジェクトのコードに置き換えます。
そしてそれはうまくいきます!
私は何が間違っていたのかを調べなければなりません。レジスタ設定の順番がずれていたようです。
size - Keilでより多くのヒープを提供する
私はMCB2300(LPC2378プロセッサを搭載)に取り組んでおり、keiluVision4を使用しています。私のプログラムでは、malloc()関数を使用して動的メモリを作成しています。すべての動的コンテンツはヒープに格納されるため、必要なヒープサイズが割り当てられていることを確認する必要があります。スタートアップファイル(LPC2300.s)のヒープのデフォルト値は0x00000800です。私のアプリケーションでは、画像(bmp形式)を読み取り、ピクセル値をマトリックスに格納しています。マトリックスは、入力画像のサイズに対して動的に作成されます。スタートアップファイルに設定できる最大ヒープ値は0x000072FFです。このヒープの値については、44x33の画像を正常に読み取ることができました。このサイズを超えると、メモリは割り当てられません。少なくとも100x100のサイズの画像を読み取る必要があります。使用可能なRAMは32Kです。
これらは、コードをコンパイルした後の出力値です
プログラムサイズ:コード= 30664RO-data = 1220 RW-data = 132 ZI-data = 37628
追加のヒープを提供する方法は?
LPC2378用に用意されているSD/MMCカードや外部メモリバンクにヒープメモリを保存することはできますか?この問題を解決するのを手伝ってください
c++ - LPC1700 がディープスリープから復帰しない
LPC1754、59、および 68 + FreeRTOS + CMSIS で実行されているファームウェアがあります。
マイクロコントローラーを可能な限り低電力モードにできるようにしたいのですが、
- 「睡眠」が足りない。
- マイクロコントローラーが「ディープ スリープ」、「パワー ダウン」、または「ディープ パワー ダウン」になると、ボタン (EINT3) を押してもそれ以上ウェイクアップできません。
「 LPC17xx ユーザー マニュアル」(58、59 ページ)を読む限り、EINT3 から「パワーダウン」モードまでウェイクアップできるはずです。
私は何が欠けていますか?低電力時に割り込みが発生していませんか? どのように伝えるのですか?それを生成できるようにするには、何か特定のことをする必要がありますか?
- 簡単にするために、私は内部 RC から実行しているので、PLL エラッタは問題になりません。
編集:
- 実際、私は P2 のいくつかのピンに「GPIO 割り込み」を使用しています。これは、EINT3 と共有されています。EINT3 ピン自体 (P2.13) は使用されていませんでした。以下のコメントを参照してください。
c - LPC17xx: RTC が実行されているかどうかを確認します
NXP LPC17xx ファミリ マイクロコントローラ (LPC1759 および LPC1768) を使用しています。
RTC が確実に実行されているかどうかを確認するにはどうすればよいですか?
でテストを行っています
しかし、あまり信頼できないようです。デバイスの電源を入れると、3197 年頃の値が表示されました。
RTC が実行されていて、その値が壊れていないことを確認するにはどうすればよいですか?
編集:
最終的に、RTC 値に単純な健全性チェックを追加しました。
以下に示すように、POST中に実行されます。
embedded - SDHC SPI 書き込みの問題
しばらくの間、 LPC1766 SPIペリフェラルを使用して SD カード インターフェイスを作成しようとしましたが、現在、どこにも答えが見つからないという問題に行き詰まっています。
問題は、SDHC カードが書き込みコマンドと読み取りコマンドに期待どおりに応答しないことです。
Chan のフローチャートと NXP アプリケーション ノートに基づいた初期化では、すべて正常に動作します。カードのバージョンを区別し、OCR、CID、CSD を読み取り、それらのサイズを判断できます。
そのステップの後、1 秒ごとに単一のブロックを書き始め、それを読み戻してデータの整合性をチェックします。Kingston SDHC 4 GB クラス 4 カードでは、最初の書き込みコマンドを送信できますが、2 番目のコマンドでは、カードは CMD24 に (0x00 または 0x01) 応答しません。SanDisk 4 GB クラス 4 カードの場合、結果は異なります。カードはすべてのコマンドに応答しますが、データを読み戻すとゼロしか返されません (ゼロを書き込んでいないことは確かです)。SDSC カードを使用すると、すべて正常に動作します。
SDHC はバイト アドレスではなくブロック アドレスであり、SDHC の場合は CCS をオンにして ACMD41 を送信する必要があることを認識しています。CRC チェックをオンにしたばかりで、すべてのカードがコマンドとデータを受け入れているため、クロック周波数が問題ではないこともわかっています (開始に 400 KHz を使用し、次に書き込み/読み取りに 20 MHz を使用)。CRC の計算を停止すると、すべてのカードがコマンドとデータを拒否します。
embedded - PS/2 ポートを介したデータの送信
LPC2148 用のマウス ドライバーをゼロから作成していますが、この点で行き詰まっています。キーボードからデータを受信できますが、マウスにはコマンド コードを送信する必要があります。これを行う最良の方法は何ですか?
embedded - NXP LPC17xx 保留中の割り込み
LPC17xx シリーズの外部割り込みで奇妙な問題に直面しています。
外部ボタンを外部割り込み 1 に設定し、両方の内部を外部プルアップ抵抗 (p2.11) として立ち下がりエッジに設定しました。
と:
と:
これは ISR の一部です (200 ミリ秒のボタン デバウンス タイマーを含む)。
"Do work here" セクションには時間がかかる場合があります (例: 場合によっては 200 ミリ秒以上)。これは意図されたものであり、プログラムをさらに実行するのに問題はありません。
問題は、ISR が最初に入力され、ISR の実行中にもう一度ボタンを押すと (これはすばやく行う必要があります)、保留中の割り込みが設定され、最初の割り込みが終了した場合に ISR が再度実行されることです。時間。EXTI_ClearEXTIFlag(1) は NVIC で保留中の割り込みをクリアしないため、これは私が推測する通常の動作です。そのため、NVIC_ClearPendingIRQ(EINT1_IRQn) を追加して、ISR コードのいくつかの場所で新しい保留中の割り込みをクリアし、保留中の割り込みが確実にクリアされるようにしました。奇妙なことに、これはまったく機能しません。
私の質問は、保留中の割り込みを JTAG/デバッガ (メモリ アドレス) 経由で読み取るにはどうすればよいかということです。そして、ここで何が起こっているのですか?誰かがこの動作を説明できますか?おそらくそれを修正する方法の手がかりがありますか?
ありがとう!
c - LPC1788 マイクロコントローラのメモリ割り当ての問題
私はマイクロコントローラーのプログラミングにかなり慣れていません。LPC1788 を使って数週間が経ちました。
私が最近抱えている問題の 1 つは、予想よりもずっと早くメモリ不足になることです。mallocできる連続したメモリのブロックの大きさをテストすることで、使用可能なメモリの量をテストしました。結果は972バイトです。割り当ては、アドレス 0x10000000 (このボードでは約 64kB である必要があるオンチップ SRAM の開始) から開始されます。
私が現在取り組んでいるプログラムは、LCD を利用してメッセージを表示できる単純なデバッガとして機能することを意図しています。新しいメッセージによって常に「追加」される 1 つの文字列があり、メッセージ全体が LCD に表示されます。画面のメッセージの長さが垂直方向の境界を超えると、最も古いメッセージ (一番上に近いメッセージ) が収まるまで削除されます。ただし、追加のメモリの割り当てを拒否する前に、約 7 つの追加メッセージしか追加できません。必要に応じて、プロジェクトの main.c はhttp://pastebin.com/bwUdpnD3でホストされます。
以前、threadX RTOS を使用して複数のスレッドを作成および実行するプロジェクトの作業も開始しました。そのプログラムにLCDの使用を含めようとしたとき、メモリも非常に限られていることがわかりました。LCD は SDRAM のベース アドレスから始まるすべてのピクセル データを格納しているように見えますが、それが私が使用している SRAM と同じかどうかはわかりません。
私が必要としているのは、LCD を利用しながら、複数のスレッドが機能したり、大きな文字列を格納したりできるように十分なメモリを割り当てる方法です。1 つの可能性としては、バッファーまたはその他のメモリー領域を使用することが考えられますが、その方法がよくわかりません。どんな助けでも大歓迎です。
tl;dr: LCD に大きな文字列を出力しようとすると、SRAM の割り当て可能なメモリがすぐに不足します。
編集 1: 変数 currMessage でメモリ リークが検出されました。現在は修正されていると思います:
編集 2: メモリ リークの修正を実装しました。プログラムは今ではかなりうまく機能し、私はかなりばかげていると感じています。
sd-card - SPIモードでのSDカード書き込み速度
SPI モード経由でマイクロコントローラに接続された SD カード (または SDHC カード) があります。Chan の FATライブラリを使用しています。8192 バイトのバッファーからのデータを書き込みます (RAM が不足しているため、バッファーを大きくすることはできません)。この書き込みは定期的に行われます。通常、バッファが再びいっぱいになる前に、書き込みの準備が整います。しかし、ときどき (バッファのフィル速度にもよりますが) 問題が発生し、新しいバッファが書き込まれる前に書き込みの準備ができておらず、データが失われることがあります。
ちなみにセクターサイズも8192バイトに設定されていますが、他は影響ないようです。
書き込みはスコープで監視でき、書き込みに時間がかかる場合があることがわかります。たとえば、通常の 4 倍の長さです。
ここで何が起こっているのでしょうか?どうすればこれを防ぐことができますか? これは、読み取り、変更、書き込みのシーケンスと関係がありますか? 外部 RAM バッファは必要ですか? または、パフォーマンスを向上させるためのより良い方法はありますか?
c - strcpyを呼び出した後にメモリを解放しようとすると、プログラムがクラッシュします
ここの多くの人がstrcpyについて不満を言っていることは理解していますが、私が抱えている問題に対処する検索を使用したものは見つかりませんでした。
まず、strcpy自体を呼び出しても、クラッシュ/セグメンテーション違反自体は発生しません。次に、コードは関数内に含まれており、この関数を初めて呼び出すと、完全に機能します。クラッシュするのは2回目だけです。
私はLPC1788マイクロコントローラーでプログラミングしています。メモリはかなり限られているので、mallocのようなものが失敗する理由はわかりますが、解放されません。
関数trimMessage()にはコードが含まれており、関数の目的は、大きな文字列配列が大きくなりすぎた場合にその一部を削除することです。
助けてくれた皆さん、ありがとうございました。関数が正しく機能するようになりました。解放したばかりの配列を印刷しようとした理由を尋ねる人には、strcpyの後に問題が発生したことを示し、その後に続く他のコードを除外するためにそこにありました。
同様の問題に遭遇した人に役立つことがわかった場合に備えて、最終的なコードはここにあります。