wip
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user