問題タブ [msp430]
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 - 組み込み C: 登録アクセス
アドレス say に書き込みたいとすると0xc000
、C でマクロを次のように定義できます。
私の質問は、マイクロコントローラーを使用する場合、MSP430 の例を考えてみてください。P1OUT レジスターのアドレスは 0x0021 です。
しかし、P1OUT=0xFFFF を使用すると、// P1OUT に値 0xFFFF を割り当てます。
私の質問は、この場合は0x0021など、そのアドレスにどのように書き込むかです。IDE は IAR です。定義の下のヘッダー msp430g2553.h で見つけました:
アドレスを定義していると思いますが、書き込みまたは読み取りを行う他のマクロはどこにありますか。
その特定のアドレス位置で P1OUT がどのように書き込むかの流れを誰か説明してもらえますか? また、 0x0021u の意味を教えてください。
ありがとう
これまでのところ、私が見つけた詳細は次のとおりです。
msp430g2553.h で
io430g2553.h は言う
上記の定義が何をするのか説明できる人はいますか? MSP430 IAR C/C++ Compiler で見つけた詳細:
誰か知っていますか?
c - 25を超える要素の配列を使用すると、msp430g2211(ランチパッド)が起動時に停止します
Linux環境(Ubuntu、msp430-gcc 4.6.3)でTI Launchpad(msp430g2211)を使用しています。
奇妙な問題があります。固定量を超えるメモリを割り当てようとすると、マイクロコントローラが起動時に停止します。
より正確に言うと、main()に25個の要素の配列があり、次のように作成されています。
(完全を期すために:
)。
すべてが機能しますが、25ではなく30(または25を超える任意の数)の要素を使用しようとすると、uCは機能しなくなったように見えます。(コンパイルおよびプログラミング中にエラーは発生しません)
TI Wikiで私はこれを見つけました。これは、私が経験していることを満たしているようです。
Cスタートアップコード中にWDTが起動する
アプリケーションがC言語で記述されている場合のもう1つの最も一般的な問題は、起動時のウォッチドッグタイムアウトです。すべてのMSP430のデフォルトのウォッチドッグタイマーは、起動後にアクティブに設定されます。したがって、アプリケーションコードの開始時に必要がない場合は、WDTをオフにする必要があります。アプリケーションコードが起動時に初期化する必要のある大きな変数 を使用している場合、これにより、起動中にウォッチドッグタイマーがすでに起動し、コードが実行されない可能性があります。
この問題の解決策は、C変数の初期化の前でも呼び出されるコンパイラの低レベルC初期化関数を使用することです。CCSコンパイラでは「int_system_pre_init(void)」と呼ばれ、IARでは関数はint __low_level_init(void)と呼ばれます。戻り値は、C / C ++グローバルデータ初期化を実行するかどうかを決定するために使用されます(C / C ++自動初期化をバイパスするための戻り値0)。この問題の詳細については、MSP430ソフトウェアコーディングテクニックアプリケーションレポートの3.6章「低レベル初期化機能の使用」を参照してください。
そこで、次の関数を追加しようとしました(メモリを割り当てる前にWDTを停止するため)。
しかし、問題はまだそこにあります...
私が行ったその他のテスト:-コンパイラのバージョンを変更しました-配列を15個の要素のうちの2つ以上に分割しました-メイン関数または「.init3」、「。init1」、「。init7」でWDTを停止します
何か案が ?ありがとうございました。
編集:提案されたように、私はGCC出力ASMコードを分析しました(「##」が機能していないバージョンでコメントされています):
diffコマンドは次のようにも言っています:
私はASMの専門家ではありませんが、WDTの説明は適切な場所にあるようです。どこが問題なのかわからない…ありがとうございます。
msp430 - Need an old version of MSP430 DLL V3 package
The latest version is not capable with the python-msp-tool, it needs the MSP430_Identify() function which was removed from the latest version of DLL V3.
So anyone can share me with your older version of DLL V3? The original zip file should with the name slac460c.zip, not slac460.zip. And the version number is 3.2.4.5 or less, not 3.2.5.4.
Thanks a lot!
EDIT: I just find TI has released some older version of MSP430 DLL V3 package, but it seems it is used for developing under windows which all functions were packaged well. What I need is the pure source code that can be made under Linux with a Makefile.
EDIT: I have compiled the latest version of libMSP430.so (3.2.5.4) for Raspberry Pi. To save other guys time, I have posted the file here.
EDIT: the MSP430_Identify() can be instead by below two functions: MSP430_OpenDevice and MSP430_GetFoundDevice. You can refer to MspDebug tool, they are using the up-to-date DLL driver.
java - JAVA GUI : MSP430 とラップトップの間でデータを送受信するには
ラップトップと MSP 430 デバイス間の通信を確立する必要があるという要件があります。インターフェイスは Java GUI である必要があります。
私は MSP430 の経験があり、JAVA について少し知識があります。
これを進める方法、またはこれに利用できるリソースを提案できますか?
ありがとう
c - MSP430 msp430-gbd が細かい値をデバッグしない
TI の MSP430 ランチパッド (1.5 with MSP430g2553) について質問があります。
次の hello ワーク コードを使用して MCU をプログラムすると、デバッグ モードで gdb を使用して細かい値を読み取る際に問題が発生します。
- gcc は mcu を介してコードをダウンロードするために使用しています: $ make prog v=main.c
- $ mspdebug rf2500 gdbおよび msp430-gdb main.elf
- 対象のリモート localhost:2000
LED が点滅します。数時間後、実行を停止し、ローカル変数に問い合わせます: (gdb) info locals toto = 1 tyty = 10 tata = -577
グローバル変数titiに関する情報は問題ありません。totoとtytyは私のコードに表示される値ですが、それはtataの別の値です。なんで ?
それがgdbのバグだとは思わないでください....
よろしくお願いします、
GM
variables - gnu-アセンブラーでサブセクションのパディングを取得する方法
私は TI MCU (msp430) で gnu アセンブラを使用しており、アセンブリで混合アラインメントの変数を定義したいと考えています。バイト アラインされているものもあれば、ワード (16 ビット) アラインされている必要があるものもあります。また、いくつかの変数をアセンブリ言語モジュールに対してプライベートにし、他の変数を共通 (グローバル) にしておく必要があります。したがって、デフォルトとして .lcomm を使用し、必要に応じて .global を使用して上書きしたいと思います。
しかし、バイト アライン ディレクティブを適用した後でも、GCC でコンパイルされたプログラムのリンク中にアラインメント エラーが発生します。
ssegLED.c:200: 危険な再配置: アラインされていないアドレス
そして、その行は、ワードでアラインされているはずのデータにアクセスしようとしているだけです:
if (ノブ) { ... }
問題の原因となっているアセンブリ言語モジュールでは、データ パックを効率的にメモリに入れようとしています。したがって、サブセクションを使用して、同様の種類のデータをグループ化し、異なる位置合わせのデータ間に穴が形成されないようにしたいと考えています。例: デフォルトのサブセクション (0) にはすべてのワード アライン データが必要ですが、サブセクション 1 にはアラインされていないデータが必要です。
キーストローク、直交、キー状態、およびノブの 4 つの変数を定義するために使用されるアセンブリ / .s コードを次に示します。最初の 3 つはバイト境界で整列され、最後の 3 つはワード境界で整列されます。
現在、ミスアラインメントの問題を防ぐために私が行っていることが 2 つあります。GNU AS マニュアルによると、サブセクション 0 はサブセクション 1 の前にメモリに配置する必要があります。したがって、セクション 0 は、デフォルト セクションとして自動的にワード アラインされた状態で開始されます。次に、.balign ディレクティブを明示的に使用しています。
しかし、それは機能しません...そして .b2align に変更しても修正されません。
サブセクション 1 の変数 keystroke、quadrature、および keystate に別のバイト アライン変数を明示的に追加することで、エラーを解消できます。サブセクション全体が単語境界で終わるようにします。しかし、問題のあるサブセクションの数値が小さい (0) ため、サブセクション (1) の位置合わせは何の効果も持たないはずです....
次に、すべての .lcomm を .comm に変更すると、エラーもなくなります。しかし、私には理由がわかりません。
どうしたの?そして、私は何を間違っていますか?
java - AndroidでBluetooth経由で受信されているデータを分離する方法
BluetoothChat のサンプル コードを変更して、TI MSP430 開発ボードの UART に接続した汎用の Bluetooth トランシーバーに接続しました。通信を確立し、単一の文字列を送受信して、値を TextView に表示できます。以下は、圧力、temp1、および temp 2 の 1 ~ 3 桁の値を送信するために使用している C コードです。これはかなり簡単で、設計どおりに動作しています。
今、複数のデータを Android デバイスに送信し、値ごとに個別の TextView にデータ型に従って表示したいと考えています。現在、2 つの温度センサーと 1 つの圧力センサーを測定しています。問題なくすべてのデータを Android デバイスに送信しましたが、すべての値が TextView で互いに上書きされ、最後に送信された文字列のみが表示されます。
これは、リモート デバイスに接続しているときに実行されるコードの一部です。
これは、メッセージを読み取って TextView に表示するコードです。
文字列の違いを区別できるようにAndroidアプリケーションをプログラムする方法がわからないようです。そのため、Temp1文字列を受信するとTemp1TextViewに移動し、Temp2文字列はTemp2TextViewに移動します。追加する必要がありますMSP430 から送信される最初のビットとして特殊文字を使用し、Android でそのビットを参照して、どこに行くべきかを識別しますか? ちょっとした考え。
どんな助けでも大歓迎です。
編集: intを文字列に変換してから、トークナイザーを使用してそれを分離し、intに戻すことができると考えました。ただし、Bluetooth 経由でデータを受信すると、アプリケーションがクラッシュするようになりました。これが私がそれを変換するために使用しているコードです。なぜクラッシュするのか考えていますか?
これはクラッシュからの logcat です:
msp430 - ラップトップで MSP430 PWM を制御する
ラップトップから 2 桁の数字を取得し、PWM デューティサイクルをその数字に変更するコードを作成しました。これは、UART 経由でモーター速度を制御する必要がある、より大きな要件の一部です。
void PWM(uint8_tduty_cycle) 関数の問題は、最初に P1.6 で正しい PWM を生成し、次に値を指定すると PWM をその DC に変更することですが、より低い DC に戻ることはできません。
コード内の最初の 2 つの PWM 関数が正しいデューティ サイクル PWM(5)、PWM(15) に変更され、残りの PWM 値が目的のデューティ サイクルを生成しません。
どこが間違っているのかトラブルシューティングできません。
ありがとう
c - このコード行がcで何をするのかわからない
<<
このコード行で何が行われているのか理解できません。これは何のために使われますか?
msp430 - Mspgcc で割り込みハンドラ (ISR) を宣言する方法は?
mspgcc で割り込みハンドラを宣言するための推奨される方法は何ですか?