ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
1000878 Топик полностью
Связанные сообщения
Snippets
Пользуйся:2020-06-11
RxTx (01.05.2020 20:07, просмотров: 1279) ответил Andreas на Есть периодическое прерывание с длительностью менее 100мкс, где много что делается и по времени оно впритык. И из него надо скинуть наружу в лог 5..15 байт максимально быстро. Да, конечно можно через буфер а в другой задаче выгребать и не торопясь отправлять в консоль по printf. Но неудобно по разным причинам и хотелось другого решения.
Я так все прерывания делаю. Тривиальный кольцевой буфер. В прерывании - только в него пишет и переставляет индекс, который если длина буфера кратная степени двойки (256) сам заворачивается. Вот это: { buf[buf_write_index++] = myvar; buf_updated_flag = true; } ~ три инструкции. 

В mainloop постоянный поллинг:


    if (buf_updated_flag) {
        buf_updated_flag = false;
        while (buf_read_index != buf_write_index) {
             myvar_from_interrupt = buf[buf_read_index++];  // извлекли
        }
    }


Для иллюстрации пишется/читается myvar. Сделать buffer[] из struct{} никто не мешает.

записывать туда время происхождения прерывания - тоже полезно.

Порядок "сообщений" подобная буферизация не изменяет.

Спасибо, князь. Вы настоящий дворянин. И программист.

Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'guru' in 'field list' in /var/www/vhosts/caxapa.ru/cgi-bin/TreeX.php:40 Stack trace: #0 /var/www/vhosts/caxapa.ru/cgi-bin/TreeX.php(40): PDO->query('SELECT id, remo...') #1 /var/www/vhosts/caxapa.ru/cgi-bin/Message.php(125): Tree(Array, false) #2 /var/www/vhosts/caxapa.ru/www/index.html(33): include('/var/www/vhosts...') #3 {main} thrown in /var/www/vhosts/caxapa.ru/cgi-bin/TreeX.php on line 40