問題タブ [freertos]
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++ - 組み込みプラットフォームで Vtable が正しく実装されないのはなぜですか?
組み込みシステム (具体的には、PSoC Creator を使用する PSoC 5) のコードを開発し、C++ で記述しています。
C++ を使用してほとんどのハードルを克服しましたが、最初にコンパイラ フラグを使用して C++ でコンパイルし-x c++
、 new および delete 演算子を定義し、コンパイラ フラグで例外がスローされない-fno-exception
ようにしました。仮想関数を使用するようになります。
仮想関数を宣言しようとすると、コンパイラからエラーが返されますundefined reference to "vtable for __cxxabiv1::__class_type_info"
。これを回避する唯一の方法は、コンパイラ フラグを使用する-fno-rtti
ことです。これにより、エラーが回避され、正常にコンパイルされます。しかし、そうすると、オーバーロードされた仮想関数を実行しようとすると、組み込みプログラムがクラッシュします。これは、vtable が存在しないためだと思います。
組み込みプラットフォームで vtables を実装できない理由がわかりません。メンバー オブジェクトの前または後のメモリ内に余分なスペースがあるためです (正確なコンパイラによって異なります)。
私が仮想関数を使用しようとしている理由は、C++ で FreeRTOS を使用したいからであり、他の人は仮想関数を使用してこれを実装しています ( http://www.freertos.org/FreeRTOS_Support_Forum_Archive/July_2010/freertos_Is_it_possible_create_freertos_task_in_c_3778071.htmlを参照してください)。議論、およびよく書かれた組み込み C++ FreeRTOS フレームワークのhttps://github.com/yuriykulikov/Event-driven_Framework_for_Embedded_Systems )
eclipse - Eclipse: プログラム「cs-make」を実行できません: 起動に失敗しました
この 1 週間、私は FreeRTOS でサポートされている STM32F1xx 用の無料の開発環境を探していました。そして、まだ成功していません:( .
今、私はこれを見つけました: http://www.stf12.org/developers/ODeV.html
これは、STM32 のコンパイルとデバッグ用の Eclipse 構成であり、FreeRTOS デモもあります。完全!
そこで、事前に構成されたバージョンの Eclipse をダウンロードし、デモ プロジェクトをコンパイルしてこのエラーを取得しようとしました。
憂鬱。助けてください、私はIDE、コンパイラ、リンカの設定が非常に苦手なので、これは初心者に優しいものでなければなりません:)
memory - FreeRTOS 組み込みシステムに適した MCU の選択
STM32 MCU を多数のセンサー (加速度計、ジャイロスコープなど) と接続するプロジェクトが進行中です。ダウンロードしたセンサー データを計算し、6 つの PWM に適切な出力を生成します。これに加えて、アクティブなワイヤレス通信モジュールと、おそらく小さな LCD 画面 (派手なものは何もありません) を用意します。さらに、いくつかのマイナーな追加機能。
システムの制御に FreeRTOS を使用する予定ですが、やり過ぎかどうか判断できません。代わりに小さな共同スケジューラを使用する必要がありますか?
STM32F100RB で 8kB の RAM と 128kB のフラッシュを搭載した FreeRTOS システムを稼働させていますが、FreeRTOS を実行するシステムに十分なメモリがあるかどうか判断できません。..
embedded - LPC ディープ スリープ モードの例
まず、私が組み込み技術の初心者であることを明確にします。NXP LPC1769 ボードを使用しています。数日間、ウォッチドッグを使用してディープ スリープ モードから復帰する方法の例を探していましたが、見つかりません。
ウォッチドッグ タイマーについては UM10360 の 21.1 章を、電源制御については 4.8 章を読みました。
ウォッチドッグについては、これを書いてみました:
WDT_IRQn
無限ループでボードの進入を止めますが。
ボードをディープスリープモードに設定するには、次のことを試みます。
c - FreeRTOS - STM32F4 でのスタックの破損
現在、STM32F407 ターゲットで FreeRTOS を実行しているときに、構成エラーによるスタック破損と思われる問題が発生しています。
gcc を使用して STM32F4でのFreeRTOS スタックの破損を確認しましたが、解決策はありませんでした。
アプリケーションは 2 つのタスクを実行し、1 つの CAN 割り込みに依存します。ワークフローは次のとおりです。
- 2 つのタスク network_task と app_task が、2 つのキュー raw_msg_queue と app_msg_queue と共に作成されます。CAN 割り込みも設定されています。
- network_task は最高の優先度を持ち、raw_msg_queue で無期限に待機を開始します。
- 次に app_task があり、app_msg_queue で待機を開始します。
- その後、CAN メッセージが raw_msg_queue に追加され、外部イベントによって CAN 割り込みがトリガーされます。
- network_task が起動し、メッセージを処理し、処理されたメッセージを app_msg_queue に追加してから、raw_msg_queue で待機を続けます。
- app_task が起動し、ハード フォールトが発生します。
問題は、エンド ユーザーの利便性と移植性のために、app_task が xQueueReceive に対して行う呼び出しを 2 つのステップでラップしたことです。app_task の合計関数チェーンは、network_receive(..) -> os_queue_receive(..) -> xQueueReceive(..) を呼び出すことです。これはうまく機能しますが、xQueueReceive(..) から戻ると、一見ランダムなメモリ位置に戻る前に os_queue_receive(..) に戻るだけで、ハード フォールトが発生します。
スタック サイズは適切である必要があり、両方とも 2048 に設定されています。すべての大きなデータ構造はポインターとして渡されます。
2 つの STM32F407 でコードを実行しています。FreeRTOS は、執筆時点で最新のバージョン 7.4.2 です。
誰かがここで私を助けてくれることを本当に願っています!
c - コンパイラが freertos #define コードを処理していません
デモ コードを RX62N にロードしようとしていますが、コードがコンパイルされません。このようなエラーがたくさん発生します。
エラー [Pe125]: "(" C:\FreeRTOSV7.4.2\FreeRTOS\Source\queue.c 263 が必要です
ここにどのリンクがありますか
そして、このように定義されています
なぜこれが起こるのでしょうか?
c - FreeRTOS でスレッド間通信を実装する最良の方法は? - lwIP ケーブルの状態を確認する
DHCP をオンにして TCP 接続を使用して、lwip ケーブルのオン/オフを防弾にしたいと考えています。どちらのソリューションも問題なく機能しますが、どちらがより賢明で正しいかはわかりません。(間違ったコンテキスト関数呼び出しが怖い)
- 最初の解決策:
電話する:
その後:
したがって、メインlwIP
スレッドとスレッドの2つのスレッドがありhc_task
ます。hc_task
は:
hc_send
ページをダウンロードするために TCP 接続を行います。
次に、PHY をチェックしてケーブルの状態を読み取る 2 秒間隔のポーリング タイマーがあります。
次にケーブルがオンになったら、次のように呼び出します。
これらの関数をタイマー割り込みで呼び出すのは正しいと思います。
- 2番目の解決策:
lwip
2 番目の方法は、タイマー割り込みがメインスレッドにメッセージを送信することです。
タイマー割り込みは、メイン lwip スレッドに次のいずれかを呼び出すメッセージを送信します。
また:
ケーブルの状態 (タイマー割り込みから保存) を格納するためのグローバル変数があり、メインlwip
スレッドでそれをチェックして、適切な関数 (リンク アップまたはダウン) を呼び出します。
だから私はどの解決策がそれを行うためのより良い/正しい方法であるかを尋ねています.
私の構成: マイクロプロセッサ LPC1768 - LAN8720 PHY - FreeRTOS 7.4 - lwip 1.4.1 - DHCP を含む - TCP/IP を含む