1
0
mirror of git://projects.qi-hardware.com/ben-blinkenlights.git synced 2024-11-30 17:46:15 +02:00

ubb-patgen/ubb-patgen.c: run at realtime priority while waiting for trigger

This commit is contained in:
Werner Almesberger 2013-01-16 03:56:17 -03:00
parent 6d749fafb8
commit 4729d00b30

View File

@ -18,6 +18,7 @@
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
#include <time.h> #include <time.h>
#include <sched.h>
#include <assert.h> #include <assert.h>
#include <sys/mman.h> #include <sys/mman.h>
@ -248,6 +249,36 @@ static const char *load_pattern(const char *s)
} }
/* ----- Real-time mode ---------------------------------------------------- */
void realtimize(void)
{
struct sched_param prm;
prm.sched_priority = sched_get_priority_max(SCHED_FIFO);
if (prm.sched_priority < 0) {
perror("sched_get_priority_max SCHED_FIFO");
exit(1);
}
if (sched_setscheduler(0, SCHED_FIFO, &prm) < 0) {
perror("sched_setscheduler SCHED_FIFO");
exit(1);
}
}
void unrealtime(void)
{
struct sched_param prm = { .sched_priority = 0 };
if (sched_setscheduler(0, SCHED_OTHER, &prm) < 0) {
perror("sched_setscheduler SCHED_OTHER");
exit(1);
}
}
/* ----- DMA control ------------------------------------------------------- */ /* ----- DMA control ------------------------------------------------------- */
@ -409,6 +440,8 @@ static void mmc_buffer(const struct mmcclk *clk,
PDFUNS = mask; PDFUNS = mask;
realtimize();
if (trigger != -1) if (trigger != -1)
wait_trigger(trigger, debounce, debounce_ns); wait_trigger(trigger, debounce, debounce_ns);
if (wait_ns->tv_sec || wait_ns->tv_nsec) if (wait_ns->tv_sec || wait_ns->tv_nsec)
@ -425,6 +458,8 @@ static void mmc_buffer(const struct mmcclk *clk,
(1 << 31) | /* no descriptor */ (1 << 31) | /* no descriptor */
1; /* enable transfer */ 1; /* enable transfer */
unrealtime();
wait_dma_done(); wait_dma_done();
wait_fifo_empty(); wait_fifo_empty();
wait_shifted(clk); wait_shifted(clk);