0

だから私がやろうとしているのは、パケットを受信して​​ペイロードをシリアルポートに出力することです。ポートでリッスンするのは、ペイロードを再アセンブルして処理を行う Python スクリプトです。

コードは次のとおりです。

#include "mrfi.h"
int main(void)
{
  BSP_Init();
  MRFI_Init();
  //Initialize the serial port
  P3SEL    |= 0x30;
  UCA0CTL1  = UCSSEL_2;
  UCA0BR0   = 0x41;
  UCA0BR1   = 0x3;
  UCA0MCTL  = UCBRS_2;                     
  UCA0CTL1 &= ~UCSWRST;
  MRFI_WakeUp();
  MRFI_RxOn();
  __bis_SR_register(GIE+LPM4_bits);
}
//This is run when a packet is received
void MRFI_RxCompleteISR()
{
  uint8_t i;
  P1OUT ^= 0x02;
  mrfiPacket_t packet;
  MRFI_Receive(&packet);
  char output[] = {"                   "};
  for (i=9;i<29;i++) {
    output[i-9]='a';
    if (packet.frame[i]=='\r') {
      output[i-9]='\n';
      output[i-8]='\r';
    }
  }
  TXString(output, (sizeof output));
}

テスト データを含むパケットを送信しますが、何も送信しません。誰にも洞察がありますか?また、これを行っている間、私は C を学んでいることを知っているので、デザインに関する指針も素晴らしいでしょう。

ありがとう。

4

1 に答える 1

1

コードが機能しない理由はわかりませんが、リクエストに応じてデザインのヒントをいくつか示します。

  • これはホストレス システムのように見えるため、main() はおそらく void を返すはずです。ホストレスでは main() にも永久ループがあるはずなので、すべてのコードを投稿していないと思います。

  • コードからすべての「マジック ナンバー」を削除し、#defined ビットマスクまたは定数に置き換えます。

  • 割り込み内のすべてのコードを最小限に抑えます。最適な割り込みは、いくつかのフラグのみを設定します。

  • 配列/文字列に指定されていない幅 (output[]) を使用しないでください。組み込みシステムの設計とは、物事を決定論的かつ固定的にすることです。

  • そのループを記述する別の方法の例を次に示します。このプログラムが何をするのかわからないので、定数名を意味のあるものに置き換えます。

uint8_t output[OUTPUT_N];

memset(output, ' ', SPACES_N);
output[OUTPUT_N - 1] = '\0';

for(i=0; i < SOMETHING; i++)
{
  output[i + A_OFFSET] = 'a';

  if(packet.frame[i + FRAME_OFFSET] == '\r')
  {
    output[i + CR_OFFSET] = '\r';
    output[i + LF_OFFSET] = '\n';
  }
}
于 2011-05-05T08:16:56.403 に答える