Глобальная переменная Bluetooth-соединения не изменяется - PullRequest
0 голосов
/ 18 марта 2020

У меня проблема с оператором if, который не проходит, пока не установлено соединение с моей системой gatt.

Context

У меня есть система BLE, использующая NRF52840- плата dk запрограммирована в C. У меня также есть мобильное приложение, которое связывается с этой платой через соединение Gatt. У меня есть один сервис с одной характеристикой c. Я пишу в эту характеристику c из моего мобильного приложения и из этого выполняю некоторую обработку. На данный момент я могу отправить отметку времени и начать хранение данных. Однако мне нужно затем отправить данные обратно на мое мобильное устройство по этому соединению.

Итак, у меня есть команда, которую нужно отправить с телефона, чтобы запросить некоторые данные. Затем следует отправить данные обратно на телефон, изменив значение характеристики c.

Прежде чем я смогу изменить значение, мне нужно проверить, была ли введена команда. Однако из-за приоритетов и ограничений устройства мне нужно выполнить эту обработку в основной функции, а не в прерывании BLE, в котором я выполнил свою отметку времени. Это связано с тем, что данные, которые я буду передавать, со временем будут большими.

Однако моя проблема заключается в том, что я получаю команду отправить некоторые данные обратно на телефон и обновить глобальное значение int (измененное с 0 на 1). Затем в моем основном l oop проверьте это значение и, если оно равно 1, запишите в терминал и измените значение обратно. Затем я использовал бы эту точку кода для запуска функции отправки данных.

Но это утверждение не проходит.

Это мой основной код l oop

    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 установлено, l oop из (GATT_CONNECTED == true), похоже, не обрабатывается.

Моя переменная определена в другом файле, где обрабатывается мое соединение GATT. Связанная переменная GATT обрабатывается в main. моя переменная main_test определена в другом файле c как int main_test = 0 ;. В заголовке, объявленном как extern int main_test;.

Я знаю, что переменная GATT_CONNECTED работает, поскольку у меня есть код, который запускается, только когда мой гатт не подключен. Я упустил его для простоты.

Любые идеи,

Спасибо

Ps Надеюсь, у вас все хорошо и, безопасно

Редактировать

Добавлен код для простоты

main. c

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();
    }
}



...