This commit is contained in:
Maxim
2026-06-09 13:44:52 +03:00
parent bf23cf5ca4
commit 79c711a486

View File

@@ -6,6 +6,9 @@
make really-all
Требования:
Используется модифицированный WiringPi с функцией digitalReadPins()
Режимы:
fill - заполняет паузы последним байтом (высокий CPU, непрерывный поток)
sleep - спит при отсутствии данных (низкий CPU, только реальные данные)
*/
#include <stdlib.h>
@@ -38,7 +41,6 @@ unsigned int pins[] = { 21, 7, 6, 5, 25, 24, 23, 22 }; // 8-битная шин
const size_t out_buffer_len = 32U; // Размер логируемого пакета
const size_t fifo_buffer_len = 4096U; // Размер ПППУ в байтах
// ================= FIFO =================
struct fifo {
char *buffer;
@@ -96,7 +98,6 @@ bool fifo_try_write(struct fifo *ff, char* buffer, size_t len) {
return true;
}
// =======================================
static struct fifo isr_ff;
@@ -118,8 +119,9 @@ void isr_handle(void) {
fifo_try_write(&isr_ff, &byte_read, 1);
}
int main(int argc, char *argv[]) {
// Инициализация FIFO
// Обработка аргументов
if (!fifo_init(&isr_ff, fifo_buffer_len)) {
perror("fifo_init()");
exit(EXIT_FAILURE);
@@ -130,7 +132,6 @@ int main(int argc, char *argv[]) {
perror("wiringPiSetup()");
exit(EXIT_FAILURE);
}
pinMode(wr_pin, INPUT);
pullUpDnControl(wr_pin, PUD_UP);
@@ -147,17 +148,18 @@ int main(int argc, char *argv[]) {
exit(EXIT_FAILURE);
}
// Основной цикл
char byte;
char byte_prev = 0;
while (true) {
if (fifo_try_read(&isr_ff, &byte, 1)) {
char byte = 0;
if (fifo_try_read(&isr_ff, &byte, sizeof byte)) {
fwrite(&byte, 1, 1, stdout);
fflush(stdout);
} else {
usleep(1000); // 1 мс пауза при отсутствии данных
byte_prev = byte;
}
else {
fwrite(&byte_prev, 1, 1, stdout);
}
fflush(stdout);
}
fifo_uninit(&isr_ff);
return EXIT_SUCCESS;
}