0

当我的系统 gatt 连接未建立时,我遇到了一个 if 语句未通过的问题。

语境

我有一个使用 C 语言编程的 NRF52840-dk 板的 BLE 系统。我还有一个移动应用程序,它通过 Gatt 连接与该板通信。我有一个具有单一特征的单一服务。我从我的移动应用程序中写入此特性,并从中进行一些处理。目前我可以发送时间戳并开始存储数据。但是,我需要通过此连接将数据发送回我的移动设备。

所以我有一个命令从手机发送来询问一些数据。然后,这应该通过更改特征值将数据发送回手机。

在我可以更改值之前,我需要查看命令是否已发出。但是,由于设备的优先级和限制,我需要在主函数中而不是在我已经完成时间戳的 BLE 中断中进行此处理。这是因为我最终将要传输的数据会很大。

然而,我的问题是,我收到将一些数据发送回手机并更新全局 int 值(从 0 更改为 1)的命令。然后在我的主循环中测试这个值,如果它是 1,则写入终端并将值改回。然后,我将使用代码的这一点来运行一个函数来发送数据。

但是这个说法没有通过。

这是我的主循环代码

    if(GATT_CONNECTED == false)//This works!
    {
        //Do some functions here
    }
    else if (GATT_CONNECTED == true)// GATT_CONNECTED = true
    {
        NRF_LOG_INFO("Test1 passed");//Testing variable this does not print
        if(main_test == 1)
        {
            NRF_LOG_INFO("Test2 passed");//This does not print either irrelevant of value
            main_test = 0;//False
        }
        idle_state_handle();
    }

我不知道问题是我定义变量的方式还是由于中断优先级或类似的原因。但是,当我的 Gatt 连接建立时, (GATT_CONNECTED == true) 的循环似乎没有处理。

我的变量是在另一个处理我的 GATT 连接的文件中定义的。GATT 连接变量在 main 中处理。我的 main_test 变量在另一个 c 文件中定义为 int main_test = 0;。在标头中声明为 extern int main_test;。

我知道 GATT_CONNECTED 变量可以工作,因为我的代码只有在我的 gatt 未连接时才运行。为简单起见,我省略了它。

有任何想法吗,

谢谢

Ps 希望你们一切安好,平安

编辑

为简单起见添加了代码

主程序

bool GATT_CONNECTED = false;

int main(void)
{
    Init_Routine();

    while(1)
    {
        Process_data();//This runs if the gatt is not connected if statement inside
        if(GATT_CONNECTED == true)//This does not run true when the gatt is connected
        {
            NRF_LOG_INFO("check gatt connectedpassed");//Testing variable.
            nrf_gpio_pin_set(LED_4);//Turn an LED on once led 4 does not work
        }
        idle_state_handle();
    }
}



4

0 回答 0