Задача моей программы - записать в последовательный порт следующее:
@@020102030000000000000000000002
... Далее следует новая строка. По словам Стрейса, данные выводятся, но время кажется не подходящим. Я пытаюсь отправить данные последовательно в микроконтроллер через последовательное соединение 56 Кбит / с.
open("/dev/ttyS0", O_WRONLY|O_NOCTTY|O_SYNC) = 3 <0.000076>
write(3, "@"..., 1) = 1 <0.000023>
write(3, "@"..., 1) = 1 <0.000009>
nanosleep({0, 100000}, {134521857, 3085980016}) = 0 <0.000966>
write(3, "020102030000000000000000000002"..., 30) = 30 <0.000038>
nanosleep({0, 100000}, {134521857, 3085980016}) = 0 <0.000747>
write(3, "\n"..., 1) = 1 <0.000008>
ioctl(3, TCFLSH, 0x2) = 0 <0.000008>
close(3) = 0 <0.001707>
open("/dev/ttyS0", O_RDONLY|O_NOCTTY|O_SYNC) = 3 <0.000075>
nanosleep({0, 1000}, NULL) = 0 <0.000709>
read(3, ^C <unfinished ...>
Я предполагаю, что числа в < >
в выводе строки приведены в микросекундах.
Когда я смотрю на цифры и делаю свои собственные расчеты, для отправки всех 33 байтов данных требуется 5,72 мс. Сложение всех этих чисел не равно этому. Когда я снял смыв
ioctl(3, TCFLSH, 0x2) = 0 <0.000008>
И использовал strace, я получил следующее:
open("/dev/ttyS0", O_WRONLY|O_NOCTTY|O_SYNC) = 3 <0.000076>
write(3, "@"..., 1) = 1 <0.000023>
write(3, "@"..., 1) = 1 <0.000009>
nanosleep({0, 100000}, {134521857, 3086340464}) = 0 <0.000984>
write(3, "020102030000000000000000000002"..., 30) = 30 <0.000038>
nanosleep({0, 100000}, {134521857, 3086340464}) = 0 <0.000722>
write(3, "\n"..., 1) = 1 <0.000008>
close(3) = 0 <0.004835>
open("/dev/ttyS0", O_RDONLY|O_NOCTTY|O_SYNC) = 3 <0.000076>
nanosleep({0, 1000}, NULL) = 0 <0.000655>
read(3, ^C <unfinished ...>
Предполагается, что почти вся последовательная обработка выполняется ПОСЛЕ последней выполненной команды записи байтов. Это проблематично, потому что я хочу, чтобы чтение началось примерно через 1 мс после записи, а не через 6 мс позже.
Есть ли способ настроить все так, чтобы каждая запись показала нормальное время ожидания для записи символов вместо постановки в очередь времени ожидания, пока не будет выполнено закрытие?
например, я бы хотел, чтобы это выглядело более похоже на strace ...
write(3, "020102030000000000000000000002"..., 30) = 30 <0.004638>
не это:
write(3, "020102030000000000000000000002"..., 30) = 30 <0.000038>