gpt4 book ai didi

c - 可能是指针问题,但不确定原因

转载 作者:行者123 更新时间:2023-11-30 16:30:18 25 4
gpt4 key购买 nike

由于特定的 ARM (LPCXpresso 1115R/303) Cortex M0 和 H6 蓝牙模块,这会有点抽象,并且使用 NXP 软件有大量链接的驱动程序文件,因此希望下面的代码片段足以识别问题。

我正在通过蓝牙创建一个简单的菜单系统。一切都通过沟通进行。我从板上发送消息,它在手机上可见,我响应并在程序的控制台中打印该值。一切都正是我想要的。但这就是发生的事情:

1) 启动调试 session 并恢复

2) 第一个菜单发送到手机,正确。

3) 输入对电话的回复并发送,正确。

4) 控制台中显示的消息与从手机输入的信息完全相同(仅显示数字 1)

5) 有 if 循环检查 Buffer value == '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

最佳答案

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

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

以上方法有效,但如果有人有任何更深入的信息可以解释为什么我有兴趣知道。这就是我初始化缓冲区的方式:

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

关于c - 可能是指针问题,但不确定原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51295575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com