Использование C с чипами разработчика TI EZ430-RF2500 - PullRequest
0 голосов
/ 26 апреля 2011

Итак, я пытаюсь получить пакет и распечатать полезную нагрузку на последовательный порт.Прослушивание в порту - это скрипт на 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 Ответ

1 голос
/ 05 мая 2011

Я не знаю, почему ваш код не работает, но вот несколько советов по проектированию, которые были запрошены.

  • Так как это похоже на систему без хоста, main () должнаскорее всего возврат void.Я предполагаю, что вы не опубликовали весь свой код, поскольку в mainless также должен быть вечный цикл в main ().

  • Удалите все «магические числа» из кодаи замените их #определенными битовыми масками или константами.

  • Сократить весь код внутри прерываний до минимума.Оптимальное прерывание устанавливает только некоторые флаги.

  • Не используйте неопределенную ширину (выход []) для массивов / строк.Проектирование встроенных систем заключается в том, чтобы сделать вещи детерминированными и фиксированными.

  • Вот пример другого способа написания этого цикла.Поскольку я понятия не имею, что должна делать эта программа, замените имена констант чем-то, что имеет смысл.

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';
  }
}
...