У меня проблема с оператором 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();
}
}