問題タブ [hal]
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.
stm32 - HAL SPI DMA は、動作中に受信したバイト数をチェックします
HAL を使用して SPI+DMA 経由でマスターからスレーブに 10 バイトを転送しています。その時点で受信者が何バイトあるかを確認するにはどうすればよいですか。10 バイトすべてが受信されていない場合は、プロセスを再度停止します。マスターは 10 バイトを送信した後、スレーブから応答を取得する必要がありますが、スレーブが完全なバイトを受信していない場合は待機し、システムは無期限になります.......
何か案が??
c - STM32F1でHALライブラリを使用してuart RX割り込みを永久に有効にしておく方法
HAL は、割り込みでシリアル データを受信するための次の関数を提供しているようです。HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
これは、基本的に rx 割り込みをセットアップして戻ります。
HAL_UART_RxCpltCallback()受信したバイト数が に達すると呼び出されますSize。
HAL は、このコールバックを実行する直前に rx 割り込みを無効にします
問題:
着信バイトの量は可変 (1 から ~100 まで) であり、それらをリング バッファに入れる必要があります。
したがって、1 に設定Sizeし、コールバック内で再度呼び出しHAL_UART_Receive_IT()て割り込みを再度有効にします。ボードが 1 バイトまたは 2 バイトを時々送信する場合はうまく機能しますが、それ以上のバイトは失われます。
私の推測では、割り込みの無効化と有効化の間に到着するため、それらは見逃されていると思います
HAL Cube で生成されたコードを上書きせずに、割り込みを永久に実行し続ける方法はありますか?
そうでない場合、関連する関数を上書きするクリーンな方法は何でしょうか?
この解決策を見つける必要がないように、私が見逃しているものはありますか?
sd-card - Hal Driverを使用したSTM32f103でのSDカード通信シーケンスの送信
STM32f103rb プロセッサを搭載した Olimex MOD-MP3-X ボードに Chan の FATFS システムを実装するために、SD カードの低レベル ドライバを作成しています。私はこのトピックにまったく慣れておらず、英語のネイティブスピーカーではありませんが、私の問題を指摘できることを願っています. 最初に、SPI 経由で cmd コマンドを送信する関数を書きたいと思います。だから私は関数の使用のためにこのプロトタイプを手に入れました:
...
HAL_SPI_Transmit_IT(&hspi2, &buffer, 5);gcc - HAL_GetTick() クラッシュ MCU
nucleo-f446ZE(STM32F446ZET6) 用に STCubeMX を使用して簡単なプロジェクトを作成しました。
プロジェクトは USB デバイスの HID である必要がありますが、開始に失敗します。デバッガーをいじった後、MCU PC レジスターが 0x00000000 または 0xFFFFFFFF になるか、ランダムな無効な値になることがあることがわかりました。
私はコードを変更しませんでした。コードを MDK-ARM (変更された GCC、Vision IDE) と GCC (openSTM32) でコンパイルしたところ、同じことが起こりました。
コールスタック:
- 主要
- SystemClock_Config
- HAL_RCC_ClockConfig (632)
- Hal_GetTick
Ps: 0x080149A の後に RAM が破損したため、プログラムが奇妙なことを行う理由 Image

解決
CubeMX はクロックをうまくセットアップできませんでした。これが、USBを機能させるために使用したセットアップです。
c - stm32f4105x で実行が DMA IRQHandler にジャンプしない
DMA トランザクションを使用して、STM32f401c-disco の STM32f4105VC の ADC1 から 1000 サンプルのシーケンスを取得しようとしています。データが上書きされないように、転送が完了したときに DMA が割り込みを生成し、そこで停止するようにします。コードは次のとおりです。
しばらくしてからプログラムをデバッグすると、DMA が停止し、フラグがレジスタに設定されTCIF0ますが、関数のブレークポイントは一度だけアクティブになります。なんで?HTIF0DMA_LISRDMA2_Stream0_IRQHandler
java - Traverson による Android スプリング HATEOAS REST API クライアント側サポート
HAL 形式の応答を使用してハイパーメディア API 用の春の Android クライアントを実装しようとしています。Spring HATEOAS - リファレンス ドキュメントでは、Traverson JavaScript ライブラリに触発されたクライアント側サービス トラバーサルの実装について説明しています。私はこれをこのようにします:
しかし、新しい Traverson オブジェクトの作成中に次のエラーが発生します。
誰かがそれを修正する方法を知っていますか?
AndroidでHAL応答をサポートする他の/より良い方法はおそらくありますか?
c# - (Cosmos) このコード行は機能しません: [assembly: Rings(System.Rings)]
これが機能しないのはなぜですか?チュートリアルに従って動作するはずです。エラーは、Rings が認識されないことです。
c++ - 設計パターン: C++ 抽象化レイヤー
コードをさまざまなプラットフォームで実行できるように、抽象化レイヤーを作成しようとしています。高レベル コードで最終的に使用したい 2 つのクラスの例を挙げましょう。
問題は、低レベルのコードで実装を埋められるようにするには、どのデザイン パターンを使用できるかということです。ここに私の考えと、それらが良い解決策ではないと思う理由があります:
理論的には、上記の定義が含まれ
highLevel/thread.hていて、プラットフォーム固有の実装が含まれていても問題はありませんlowLevel/platformA/thread.cpp。これは、リンク時に解決されるオーバーヘッドの少ないソリューションです。唯一の問題は、低レベルの実装ではメンバー変数やメンバー関数を追加できないことです。これにより、特定のことが実装できなくなります。解決策は、これを定義に追加することです (基本的には Pimpl-Idiom):
これで、低レベル コードは、void ポインターに格納された独自の構造体またはオブジェクトを持つことができます。ここでの問題は、読みにくく、プログラムするのが面倒なことです。
純粋な仮想を作成
class Threadし、それを継承することで低レベルの機能を実装できました。高レベルのコードは、次のようにファクトリ関数を呼び出すことにより、低レベルの実装にアクセスできます。これで十分ですが、静的クラスでは失敗します。
Display::drawText(...)私の抽象化レイヤーは、ハードウェアと IO に使用されます。単一のDisplayクラスへのポインターを持ち運ぶ代わりに、それを使用できるようにしたいと考えています。別のオプションは、このようにリンク時に解決できる C スタイルの関数のみを使用すること
extern "C" handle_t createThread()です。これは簡単で、一度しか存在しない低レベルのハードウェア (ディスプレイなど) にアクセスするのに最適です。しかし、複数回存在する可能性のあるもの (ロック、スレッド、メモリ管理) については、ハンドルを隠すか、ハンドルを非表示にする高レベルのラッパー クラスを持つ高レベル コードでハンドルを持ち歩く必要があります。いずれにせよ、高レベル側と低レベル側の両方でハンドルをそれぞれの機能に関連付ける必要があるというオーバーヘッドがあります。私の最後の考えは、ハイブリッド構造です。
extern "C"一度しか存在しない低レベルのもののための純粋な C スタイルの関数。複数回存在する可能性のあるもののファクトリ関数 (3. を参照)。しかし、私はハイブリッドなものが一貫性のない、読めないコードにつながるのではないかと心配しています。
私の要件に合ったパターンを設計するためのヒントをいただければ幸いです。