我正在使用MSP430并在C中编写代码。我通过UART接收字符(工作)并将它们放入数组rxDataArray中。由于我使用的是MSP430G2211,因此内存有限。最大阵列大小为50,并且它不再构建/加载,并且说空间不足。
我的MSP430正在与ESP8266模块(wifi)进行通信,我正在使用“AT”命令。我收到了我的AT命令的回显,然后是响应(例如AT + RST用AT + RST响应......确定)。我很困惑使用C,我怎么能只用“ok”响应创建一个字符串,并检查它是否正常工作。我有数组中的数据,只是不确定如何选择数组的某些元素,创建一个字符串,并将其与“ok”响应进行比较。我习惯在C ++中使用CString,并且很困惑如何在C中执行此操作。
/--------------------------------------------------------------------
// Timer_A UART - Receive Interrupt Handler
//-------------------------------------------------------------------
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMERA1_VECTOR))) Timer_A1_ISR (void)
#else
#error Compiler not supported!
#endif
{
static unsigned char rxBitCnt = 8;
static unsigned char rxData = 0;
switch (__even_in_range(TAIV, TAIV_TAIFG)) { // Use calculated branching
case TAIV_TACCR1: // TACCR1 CCIFG - UART RX
TACCR1 += UART_TBIT; // Add Offset to CCRx
if (TACCTL1 & CAP) { // Capture mode = start bit edge
TACCTL1 &= ~CAP; // Switch capture to compare mode
TACCR1 += UART_TBIT_DIV_2; // Point CCRx to middle of D0
}
else {
rxData >>= 1;
if (TACCTL1 & SCCI) { // Get bit waiting in receive latch
rxData |= 0x80;
}
rxBitCnt--;
if (rxBitCnt == 0) { // All bits RXed?
rxBuffer = rxData; // Store in global variable
if (rxDataCnt < 50)
{
rxDataArray[rxDataCnt] = rxBuffer;
rxDataCnt++;
}
else
{
int i = 0;
for (i; i<50-1; i++)
{
rxDataArray[i] = rxDataArray[i+1];
}
rxDataArray[50-1] = rxBuffer;
}
rxBitCnt = 8; // Re-load bit counter
TACCTL1 |= CAP; // Switch compare to capture mode
__bic_SR_register_on_exit(LPM0_bits); // Clear LPM0 bits from 0(SR)
}
}
break;
}
}
//-----------------------------------------------------------------------
答案 0 :(得分:1)
您可以通过发送ATE0
命令关闭回声。
另外,要找到预期的字符串响应,请按照以下步骤操作:
启用UART发送和接收中断。
完成命令传输后,您将开始在UART ISR中接收数据。
在接收中断时,启动一个1秒的定时器(您需要考虑波特率才能进行精确计算)。
跟踪UART ISR中接收的字节数。
现在,在计时器到期后,将null
添加到缓冲区中最后一个接收字节的末尾。
现在,您可以使用C的字符串操作函数来查找预期的响应。