Hi all, I connected two analog-to-digital converters to a BeagleBoneBlack (with kernel version 3.14.33-ti-r51.2) and tried to use the deadline scheduler to get samples at a constant rate. In my C++/Qt application the ADCs are represented by a class which is derived from QThread. The run() method is basically:
run() { unsigned int flags; struct sched_attr attr; attr.sched_policy = SCHED_DEADLINE; attr.sched_runtime = 600 * 1000; attr.sched_deadline = 1250 * 1000; attr.sched_period = 1250 * 1000; sched_setattr(0, &attr, flags); while (active) { /* code that gets a sample from adc, takes around 500 ms */ sched_yield(); } } to get samples at a rate of 800 Hz. However, once sched_yield() is called, the threads do not seem to be scheduled again (no samples are acquired and when the application shuts down the threads remain as zombies). As far as I understand, I have to call sched_yield() if the the execution time of one loop iteration is either not constant or unknown (both cases being very likely), because if I do not, a new loop iteration could be started if the time budget is not empty. Have I missed something? Any ideas or alternative approaches are welcome! Thanks a lot in advance! Best regards, Michael -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/