Скорость последовательного порта обычно определяется самим оборудованием и настраивается драйвером оборудования.
Таким образом, следующей цепочкой будет вызов TCSETS
ioctl, который вызывает tty_set_termios()
в tty_ioctl.c
. Если вы проследите эту цепочку, то в драйвере RocketPort он вызовет rp_set_termios()
, который сам вызывает configure_r_port()
.
Выполняется некоторый расчет параметров конфигурации для отправки на микросхему RocketPort (, например. установка делителя ), которая в конечном итоге вызывает sSetBaud
(, определенную в rocket_int.h
), которая просто выводит байты на микросхему.
Таким образом, ядро само по себе не выполняет "битовую перестановку" последовательных линий для определения скорости передачи данных; Чип UART делает всю эту тяжелую работу за нас. Нам просто нужно запрограммировать чип:-)
Ваша логика не сработает. Последняя суббота месяца может быть 29, 30 или 31 числа. По этой причине лучший способ выполнить проверку — запускать ее каждую субботу и проверять в сценарии, если это последние 7 дней в месяце:
45 23 * * 6 sh /folder/script.sh
и добавьте в свой скрипт (сюда, предполагая реализацию GNUdate
)что-то вроде:
if [ "$(date -d "+7 day" +%m)" -eq "$(date +%m)" ]
then echo "This is not one of last 7 days in month.";exit
fi
<rest of your script>
Что касается вашей строки в cron, вы должны отредактировать ее, чтобы она начиналась так:
00 17 * * 6
(6 означает субботу, 0 или 7 означает воскресенье)