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