Добрый день.
Есть компьютер (типо встроенная система) который выводит данные из нескольких таблиц на OLED дисплей по RS-232.
Иногда компьютер перестает обновлять определенные значения считываемые из таблиц на дисплей. Но начинает снова обновлять их если подключить к нему смартфон в режиме модема или ноутбук (На компьютере есть веб-морда работающая с этой же базой и таблицами). Данные в базу постоянно пишутся другой программой, при выгрузке аномалий и столбняка значение нет, есть только на дисплей.
За работу с дисплеем отвечает моя программа. Она опрашивает 4 таблицы и вывод данные, а так же текущее системное время.
Данные в таблицах обновляются не чаще 1 раза в секунду. База требуется только для хранения и асинхронного доступа к данным.
Текущее значение из таблиц считываю так, аналогично запрашиваю данные и из других таблиц:
void read_base_sensor(char *name_table_sensor0){ char buf1[255],buf2[255]; conn = PQconnectdb(name_base); IF(PQstatus(conn)!=CONNECTION_OK){ PQfinish(conn); exit(0); } else{ sprintf(buf1,"SELECT id,time,press,temp FROM %s WHERE id=(SELECT max(id) FROM %s);", name_table_sensor0 ,name_table_sensor0); res = PQexec(conn, buf1); // выводим название столбцов nFields = PQnfields(res); int max_lines = PQntuples(res); IF(max_lines > 0){ p = atof(PQgetvalue(res,max_lines-1,2)); t = atof(PQgetvalue(res,max_lines-1,3)); PQclear(res); IF(t < 0){t1 = 1; t2 = 4;} IF((t >= 0) && (t < 10)){t1 = 1; t2 = 5;} IF((t > 9) && (t < 100)){t1 = 2; t2 = 4;} IF(t > 99){t1 = 3; t2 = 3;} IF(p < 0){p1 = 1; p2 = 4;} IF((p >= 0) && (p < 10)){p1 = 1; p2 = 5;} IF((p > 9) && (p < 100)){p1 = 2; p2 = 4;} IF(p > 99){p1 = 3; p2 = 2;} sprintf(a_disp,"A:%*.*f\xDF\x43 %*.*fMPa;",t1,t2,t,p1,p2,p); } } PQfinish(conn); }
Этот код взят чуть ли не из примера по работе с БД. Есть подозрения что с залипаниями может быть как то связанно кэширование. Больше пока идей нет.