タグ付けされた質問 「embedded」

組み込みシステムは、1つまたはいくつかの専用機能を実行するように設計されたコンピューターシステムで、多くの場合、リアルタイムコンピューティングの制約があります。多くの場合、ハードウェアと機械部品を含む完全なデバイスの一部として埋め込まれます。

5
マイクロコントローラーの割り込み処理とFSMの例
最初の質問 マイクロコントローラでの割り込みの処理について、一般的な質問があります。私はMSP430を使用していますが、質問は他のuCにも当てはまると思います。コードに沿って頻繁に割り込みを有効/無効にするのが良い方法かどうか知りたいのですが。つまり、割り込みの影響を受けないコードの一部がある場合(または、さらに悪いことに、何らかの理由で割り込みをリッスンしてはならない場合)、次のことを行う方がよいでしょう。 クリティカルセクションの前に割り込みを無効にしてから、再度有効にします。 それぞれのISR内にフラグを設定し、(割り込みを無効にする代わりに)クリティカルセクションの前にフラグをfalseに設定し、直後にtrueにリセットします。ISRのコードが実行されないようにするため。 どちらもないので、提案は大歓迎です! 更新:割り込みと状態チャート 具体的な状況をお知らせします。4つのブロックで構成されるステートチャートを実装するとします。 遷移/効果。 終了条件。 エントリー活動。 活動を行う。 これは大学で教授が私たちに教えたものです。おそらく、それを行う最良の方法は、このスキームに従うことではありません。 while(true) { /* Transitions/Effects */ //---------------------------------------------------------------------- next_state = current_state; switch (current_state) { case STATE_A: if(EVENT1) {next_state = STATE_C} if(d == THRESHOLD) {next_state = STATE_D; a++} break; case STATE_B: // transitions and effects break; (...) } /* Exit activity …

2
MCUレジスタの論理的に関連するビットフィールドが、しばしば別々の場所にあるのはなぜですか?
この質問にすでに回答している場合はご容赦ください。しかし、このページでも、より広いインターネットでも、回答を見つけることができませんでした。 私は経験豊富な開発者であり、低レベルのプログラミングに関してある程度の知識がありますが、組み込み開発は比較的新しいです。私は、STM32F746ZG MCUを特徴とするST-NUCLEO144ボードを使用して、組み込みシステムの開発を教えてきました。私には自明ではないように見える1つの質問は、レジスタ内の論理的に関連するビットフィールドが異なる場所にある可能性があるということです。 1つの例は、USART_CR1STM32746ZG のレジスタです。M0そしてM1ビットフィールド一緒にUSART TX / RXの合成2ビット値の語長制御0b00、指定する8ビットの0b01こと以外はこれは、すべての非常に簡単であるなど、指定9ビットのM0ビット12にあり、M1ビットであります28 ...これはなぜですか? これは、以前に予約されていたスペースに新機能が挿入されたなど、レガシーデザインの理由によるものですか?それは私が考慮していないのは、チップ設計に関連する理由のためですか、それとも私には見られないより大きな目的がありますか? 明らかに、これはビットマスキングで克服するのはかなり簡単ですが、私は興味があります。

2
ブートローダーの構造を理解するための優れたツールまたは方法?
私は最近、オープンソースのブートローダーであるU-bootを実行しているAtmel AT91SAM9G20 SBCで取り組んでいる厄介なバグの原因を突き止めました。問題の核心は、U-bootがハードウェアを私が構築したものとは異なるように構成することを期待していたため、一部のデバイスレジスタが誤って構成されていたことでした。 私は問題を理解したので、レジスタを正しく構成するためにU-bootを微調整する必要があります。プログラムの最後に数行のコードを追加することで盲目的にこれを行うことができますが、それは面倒です。 これは私に私の質問をもたらします:U-bootがmain()から開始してすべてのファイルのすべての可能なコードパスを読み取るよりも効率的に機能する方法を理解するにはどうすればよいですか?私はファイル内をぐるぐる回ってみて、関連する識別子の近くのコードを調べました。これは効果がないことが判明しました。ほとんどのコードは私が気にしていないサブシステムのドライバーのようです。私は実際にブートローダーがどのようにうまく機能するかを理解していますが、私の素朴なアプローチよりも優れた方法があることを願っています。

5
MSP430のメモリに関する提案
TI MSP430を使用して測定アプリケーションを開発していますが、使用できるメモリのタイプに関する提案を聞きたいのですが。 これは、一定時間のログに使用して、デバイスがUSB経由で接続されているときにPCにデータをダウンロードするという考え方です。推定では、最大5MBのデータを保持し、各サンプルは約25バイトのデータです。 単純なEEPROMチップで十分でしょうか、それとももっと良いものがありますか?

3
ワイヤレス技術を介してデバイスをコンピューターに接続するための賢明なアプローチは何ですか?
私はX-10日を覚えています。コンピュータを家のすべてのウォールプレートに接続し、電力線キャリアを使用して信号をアドレス可能な受信機に送信しました(成功の度合いはさまざまです)。 コンピューターからリモートで電子レンジをオンにする必要はないかもしれませんが、ホームオートメーション用のワイヤレスコントローラースキームを持っていることはクールだと思います。外のセンサー。 これに取り組むための賢明な全体的な方法は何ですか?Wifiエンドポイントは本当に魅力的ですが、少し高価に見えます。ラジオを使用した代替アプローチはありますか?または、電力会社はまだ先に進んでいますか?

2
PIC12F675 GP4が機能しない
プロジェクトにPIC12F675を使用していますが、1つの点を除いてすべて正常に動作します。GP4はデジタルIOとして機能しません。設定とコードをよく見てきましたが、何も見つかりませんでした。 構成: #pragma config FOSC = INTRCCLK #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config BOREN = ON #pragma config CP = OFF #pragma config CPD = OFF コード: #include <xc.h> #include <math.h> #include "config.h" #define _XTAL_FREQ 4000000 void delay(unsigned int …
9 pic  c  embedded  programming  audio  oscillator  spark  dc-dc-converter  boost  charge-pump  eagle  analog  battery-charging  failure  humidity  hard-drive  power-supply  battery-charging  charger  solar-energy  solar-charge-controller  pcb  eagle  arduino  voltage  power-supply  usb  charger  power-delivery  resistors  led-strip  series  usb  bootloader  transceiver  digital-logic  integrated-circuit  ram  transistors  led  raspberry-pi  driver  altium  usb  transceiver  piezoelectricity  adc  psoc  arduino  analog  pwm  raspberry-pi  converter  transformer  switch-mode-power-supply  power-electronics  dc-dc-converter  phase-shift  analog  comparator  phototransistor  safety  grounding  current  circuit-protection  rcd  batteries  current  battery-operated  power-consumption  power-electronics  bridge-rectifier  full-bridge  ethernet  resistance  mosfet  ltspice  mosfet-driver  ftdi  synchronous  fifo  microcontroller  avr  atmega  atmega328p  verilog  error  modelsim  power-supply  solar-cell  usb-pd  i2c  uart 

6
組み込みCの観点からの静的キーワードの概念
static volatile unsigned char PORTB @ 0x06; これは、PICマイクロコントローラーヘッダーファイルのコード行です。@オペレータは、アドレスの内部PORTB値を格納するために使用される0x06PORTBを表すPICコントローラ内部のレジスタです。この時点までに、私は明確な考えを持っています。 この行は、ヘッダーファイル(.h)内でグローバル変数として宣言されています。したがって、私がC言語について知ったことから、「静的グローバル変数」は他のファイルからは見えません-または、単純に、静的グローバル変数/関数は現在のファイルの外では使用できません。 次に、このキーワードをPORTBメインのソースファイルや手動で作成した他の多くのヘッダーファイルに表示するにはどうすればよいですか? メインのソースファイルでは、ヘッダーファイルのみを追加しました#include pic.h。これは私の質問と関係がありますか?

1
STM32のSPIはプルアップ抵抗がないと機能せず、パフォーマンスも低下します
しばらくの間、STM32F103C8(Blue Pillボード)のSPI1が正しく機能するように努めています。ARMの学習を始めたばかりなので、データを74HC595シフトレジスタにシフトし、それをラッチして1バイトのLEDを点灯させようとしています。データを読み取っていないので、MOSI、SCK、SSのラインしかありません。 最初は何も出力されませんでしたが、オンラインの例を読んで、これらの最初の問題を修正して通信を開始することができました(GPIOAピンを正しく設定し、ソフトウェアSSを設定する必要がありました)。 現在の主な問題は、すべてのライン(MOSI、SCK、SS)にプルアップ抵抗を含めないと、マイクロコントローラーがラインに何も出力しないことです(スコープで確認)。これに加えて、プルアップ抵抗を追加した後、パルスの立ち上がり時間が非常に遅いため、あまりにも高い周波数を使用できません(10kΩのプルアップ抵抗を使用すると、約250 kHz SCKに制限され、スイッチング約330 MHzに約4 MHz)。私はブレッドボードで作業していますが、それでもAVRとより複雑な配線を使用しても、抵抗を追加せずに4 MHz SPIが問題なく動作し、波形はきれいでした。 これは、250 kHzクロックでバイト0b01110010を送信している2つの画像(スコープ画面のひどい状態の場合は申し訳ありません)です。上のトレースはSCKで、下のトレースはMOSIです。最初の画像は10kΩプルアップ抵抗で、2番目の画像は波形をより良くする330Ωプルアップ抵抗です(ただし、それらは必要ありません)。 何が起こっているのかを理解するための助けをいただければ幸いです。 私のコードの関連部分は: #define SS_LOW GPIOA->BSRR |= 1 << 4 + 16; #define SS_HIGH GPIOA->BSRR |= 1 << 4; // SPI GPIO configuration RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; GPIOA->CRL |= 0b0011 << 4 * 4; // Set pin A4 as PP …

9
耐久性の高いEEPROM
私は現在、常にアクティブになる1つのカウンターがある1つの組み込みプロジェクトに取り組んでいます。電源がダウンした場合、最後のカウンターのステータスを保存して、次回の起動時にそれを再度ロードする必要があります。そのため、カウンター値を継続的に書き込むEEPROMの使用を計画していました。しかし、EEPROMの読み取り/書き込みの耐久性が約100,000であることをどこかで読んだことがあり、24時間ごとにそのカウンタをおそらく120,000更新します。だから私はこの仕事を達成するための代替案を見つけています。同じことをするための提案をください。

2
改ざん防止組み込みマイクロプロセッサ
Microchip dsPICまたは同様のプロセッサを使用して、商用組み込みハードウェアを開発しています。 私が持っているファームウェアは時々非常に複雑で高価であり、ハッカーであり、ハードウェアを改ざんできないようにする必要があります。すべての基本的なソフトウェア保護はありますが、500ドルから1,000ドルで、セキュリティヒューズがあっても(不正な改ざんを防止するだけで)いくつかの外国のWebサイトサービスを介して16進コードを取得できます。その後、ほんの数か月で、IDA Proなどの逆アセンブラを使用してコードをリバースエンジニアリングできます。 ハードウェアデザインを少しだけ保護するにはどうすればよいですか(軍事保護の必要はありません)。 別の読み取り不能なプロセッサ、またはおそらく既存の設計への追加を推奨できますか? 必要なのはいくつかの機能を非表示にすることだけです。製品全体は必要ありません。また、安全な外部メモリでデータを非表示にするだけでは十分ではなく、プログラムの一部を非表示にする必要があります。 更新(多くのコメントに基づく):私はdsPICと4年間フルタイムでファームウェアを開発しています(別の方法でゼロから行うにはかなりの努力が必要です): 1)この製品はすでに販売されており、ハッカーは必要に応じてアクセスできます 2)新しいファームウェアはまだリリースされていません。すべての競争の誰もまだ持っていない5kBコードが含まれています。リリース後約12か月間、誰もが簡単に入手できないようにする必要があります 3)非常にエキゾチックなものや複雑なものにするための予算はなく、おそらく製品ごとにさらに$ 10プラスまたはマイナス 4)追加されたSIMカードのような解決策はうまくいくかもしれませんか? 5)非表示にする関数は、16バイトを復号化/暗号化するために、非標準の非常にトリッキーな計算を行います。既知のプロセスは1年でハッキングできず、関数が必要なので、非表示にしたいのです。 6)それが公開されているか、要求が「隠された」ハードウェアに送信されるか、または応答が公開されているかは問題ではありません。それを計算するプロセスを非表示にするだけでよく、dsPICプロセッサ内に置くことはできません。

4
組み込みCプログラムの存続期間中にコードを1回実行する
プログラムの存続期間中にコードスニペットを1回だけ実行するにはどうすればよいですか?何度もオフにしたりオンにしたりできます。コードスニペットを再度実行する唯一のオプションは、ボードを再度フラッシュすることです。 コードは、再実行したくない校正セクションです。EEPROMまたはフラッシュを使用する場合は、フラグをtrueまたはfalseに設定します。では、そのメモリ位置を最初に読み取ったとき、そのメモリ領域のランダムな値は何でしょうか? これを組み込みCに実装する最良の方法は何ですか?

2
組み込みプログラミングステートマシン
私は、gccを使用して32ビットMCUに重要な有限状態マシン(UML階層状態チャートとして指定)を実装することを検討しています。 うまくいくものとうまくいかないものの経験則はありますか?私の直感は、スイッチベース(または計算されたgoto)の実装はわずかにパフォーマンスが向上する必要があると述べていますが、関数ポインターベースの遷移テーブルは一般に保守性が高いと評されています。 また、組み込みアプリケーション向けにBoost MSMを評価した人はいますか?Boost MSMは一般に非常に効率的であると称賛されていますが、組み込みアプリケーションの効率はPCプログラミングの世界とは異なる方法で測定される場合があることを知っています。 MSMのコンパイルされたステートマシンエンジンがどのように見えるか知っていますか?スイッチジャンプテーブルのようなものですか、それとも関数ポインタ遷移テーブルのようなものですか?動的メモリ割り当てを使用しますか、それとも静的に使用できますか?

6
ハードウェアなしの組み込みソフトウェアの作成
ハードウェアチームが一部のハードウェアを開発するのに2か月かかることを考慮してください。 私の質問は、どのようにしてソフトウェアを作成し、ハードウェアなしでテストできるかということです。 従うべき規格はありますか?どうやってやるの?

5
RTOSが決定論的であると見なされるのはなぜですか?
PC(もちろんOS)では、どのCプログラムもタイミングの点で不確定になります。たとえば、「別のウィンドウを移動する速さ」に応じて、ループは1.2〜1.3秒かかります。これは、OSがプロセス(またはスレッド)に処理能力を共有させるためです。 RTOSに関する限り(組み込みシステム上)、マルチスレッドアプリケーションを作成すると、同時に実行されているスレッドの数に応じて、同じことが起こると思います。 組み込みシステムでこれを正確にテストするための機器がありません。したがって、私は尋ねたかった。私の懸念は合理的ですか、それとも非常に根本的なものを見逃していますか? 編集:例を挙げます。task1(10ミリ秒)とtask2(20ミリ秒)があります。彼らは同時に別々の2つのスレッドで開始しました。私の主張(これも心配ですが、よくわかりません)は、task1がtask2と処理能力を共有しているため、10ms以上かかることです。
8 embedded  rtos 

2
安全なUART通信プロトコルを作成するにはどうすればよいですか?
安全なUART / USB通信プロトコルを作成する方法を考えていました。マイコンとパソコンの通信に必要です。私は〜10個のコマンドを使用しており、それぞれに10個の個別の確認応答コマンドを使用すると思いました。 交換は次のようになります。 PCがUARTを介してウェイクアップコマンドを送信する µCはPCが接続されていることを認識し、そのコマンドをPCに送信します。 0x01 PCは要求された処理(一部のハードウェア関連)を実行し、~0x01完了時に応答します(2つの数の間に大きな「距離」を作成するために数を無視します)。 µC 0x01は送信したことを認識し~0x01、PCから期待しています。~0x01µCは、何か他のものが戻ってきた場合、何かがうまくいかなかったことを認識し、新しい要求またはエラーメッセージを送信します。 µCが送信する0x01場合、PCはそれを理解0x02して~0x02送り返しますが、~0x01ノイズによるµCの読み取りはかなり悪いでしょう。 送信に関してそれはどのくらい安全ですか、またはこれをより安全にするにはどうすればよいですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.