将C与TI EZ430-RF2500 dev芯片一起使用

时间:2011-04-26 07:30:36

标签: c embedded msp430

所以我要做的是接收数据包并将有效负载打印到串口。在端口上侦听是一个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语言,所以任何关于设计的指针都会很棒。

感谢。

1 个答案:

答案 0 :(得分: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';
  }
}