Проблемы с SELECT или кэшом

Добрый день.
Есть компьютер (типо встроенная система) который выводит данные из нескольких таблиц на 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);
    }

Этот код взят чуть ли не из примера по работе с БД. Есть подозрения что с залипаниями может быть как то связанно кэширование. Больше пока идей нет.

Back to top

(С) Виктор Вислобоков, 2008-2023