由于特定的ARM(LPCXpresso 1115R / 303)Cortex M0和H6蓝牙模块,这将有点抽象,并且使用NXP软件链接了大量的驱动程序文件,因此希望下面的代码片段足以确定问题所在。
我正在通过蓝牙创建一个简单的菜单系统。一切都可以交流。我从板上发送消息,该消息在电话上可见,我响应并在程序控制台中打印该值。正是我希望他们成为的所有人。但这是发生了什么:
1)启动调试会话并继续
2)第一个菜单发送到手机,正确。
3)输入对电话的回复,然后发送并纠正。
4)消息出现在控制台中,与从手机输入的消息完全相同(仅出现数字1)
5)具有if循环,用于检查缓冲区值是否=='1';
6)一定不能== 1,因为它永远不会进入循环。
7)重新打印缓冲区的值,但它仍然等于1。
我唯一的提示是如下警告:在赋值行上显示“在不进行强制转换[-Wint-conversion]的情况下从指针生成整数”。
void ArmPeripheral() {
UARTCount = 0;
LPC_UART->IER = IER_THRE | IER_RLS; /* Disable RBR */
UARTSend( (uint8_t *)menu1, sizeof(menu1));
LPC_UART->IER = IER_THRE | IER_RLS | IER_RBR; /* Re-enable RBR */
while(1) {
if(UARTCount != 0){
printf("%s 1st print\n",UARTBuffer);
int bVal = UARTBuffer; // This is where the error occurs, tried uint8_t, did not work.
printf("%s This is bVal\n",bVal);
if(bVal == 1) { //have tried 1, '1', and "1" none work
printf("inside loop %s...\n",UARTBuffer);
printf("%s This is bVal\n",bVal);
LEDControl();
}
printf("%s second print\n",UARTBuffer);
UARTCount = 0;
}
}
}
答案 0 :(得分:0)
没关系,这只是一个简单的指针问题。 UARTBuffer是UART.c文件中的外部易失性uint8_t,即使未将其定义为指针,它还是以某种方式指向缓冲区。
int bVal = *UARTBuffer;
if(bVal == '1') {
以上方法有效,但如果有人能提供更多深入的信息,可以解释为什么我会对了解感兴趣。这是我初始化缓冲区的方式:
extern volatile uint32_t UARTCount;
extern volatile uint8_t UARTBuffer[BUFSIZE];