可能是指针问题,但不确定为什么

时间:2018-07-11 23:51:04

标签: c bluetooth arm lpcxpresso

由于特定的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;
}
}
}

enter image description here

1 个答案:

答案 0 :(得分:0)

没关系,这只是一个简单的指针问题。 UARTBuffer是UART.c文件中的外部易失性uint8_t,即使未将其定义为指针,它还是以某种方式指向缓冲区。

int bVal = *UARTBuffer;
if(bVal == '1') { 

以上方法有效,但如果有人能提供更多深入的信息,可以解释为什么我会对了解感兴趣。这是我初始化缓冲区的方式:

extern volatile uint32_t UARTCount;
extern volatile uint8_t UARTBuffer[BUFSIZE];