Код: Выделить всё
USART1->DR = *tx_buffer++;
if (--tx_size == 0) {
USART1->CR1 &= ~USART1_TXEIE; // Disable TXE interrupt
USART1->CR1 |= USART1_TCIE; // Enable TC interrupt
}
неоч понятно, чем кривой код?
Не то что бы я большой спец по сям, но конкретно с этими ++ и -- уже вроде б разобрался... Оно эквивалентно:
Код: Выделить всё
USART1->DR = *tx_buffer;
tx_buffer++;
tx_size--;
if (tx_size == 0) {
USART1->CR1 &= ~USART1_TXEIE; // Disable TXE interrupt
USART1->CR1 |= USART1_TCIE; // Enable TC interrupt
}Тут настройка прерываний выполняется после передачи крайнего байта. И типа есть вероятность ну успеть отключить прерывание до его следующего срабатывания. Но полагаю, что это возможно только на очень низких частотах проца и на высоких частотах UART, что кажется редкодостижимо. Но в таком виде имхо несколько привычнее читается, чем конструкции с проверкой предпоследнего байта.
Добавлено after 1 minute 10 seconds:
[uquote="linux_rulezz",url="/forum/viewtopic.php?p=4758813#p4758813"]Не крайнего, а последнего! Не нужно людей в заблуждение вводить![/uquote]
я авиатор, я так вижу
