Feb. 17th, 2017

Глюки

Feb. 17th, 2017 06:05 pm
Поставил на кубитрак армбиан (нет уже сил с гентой: собирать пакеты можно лишь на компьютере, несерьезно это). Почти час убил в попытках понять, почему же у меня перестало работать считывание изображения с all-sky. Затык обнаружился здесь:
size_t read_tty(uint8_t *buff, size_t length){
    ssize_t L = 0;
    fd_set rfds;
    struct timeval tv;
    int retval;
    FD_ZERO(&rfds);
    FD_SET(comfd, &rfds);
    tv.tv_sec = 0; tv.tv_usec = 50000; // wait for 50ms
    retval = select(comfd + 1, &rfds, NULL, NULL, &tv);
    if (!retval) return 0;
    if(FD_ISSET(comfd, &rfds)){
        if((L = read(comfd, buff, length)) < 1) return 0;
    }
    return (size_t)L;
}

Строчка "wait for 50ms". Функция эта выполняется до тех пор, пока полностью нужное количество байт не считается, или не выйдет таймаут. Почему-то на компьютере все нормально работало, а на кубитраке стали "теряться" данные. Пришлось увеличить tv.tv_usec до 500мс.

А еще я намучился с форматом для printf: на компьютере uint64_t выводится как %lu, а кубитрак хочет %llu. Неужто нет нормальных обозначений printf, общих для любых архитектур? Идиотизм какой-то...

July 2017

S M T W T F S
      1
23 4 5 6 78
9 101112 131415
16171819 202122
23242526272829
3031     

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 25th, 2017 04:48 am
Powered by Dreamwidth Studios