[uquote="ARV",url="/forum/viewtopic.php?p=4131237#p4131237"]включаю зануду.
FreshMan писал(а):void uart_send_string(char *s){
if(bit_is_clear(UCSR0A,TXC0)){ // если предыдущая передача закончена
p = s;
UDR0 = *p;
p++;
enable_interrupt_when_data_register_USART_is_empty;
}
}
а если предыдущая передача не закончена, что тогда? _delay_ms(1000) для надежности? и зачем тогда огород с передачей по прерываниям,[/uquote]
относительно
_delay_ms(1000) , я его вставил специально чтобы вывод на терминал был медленным, в реальном проэкте такого конечно же не будет
относительно законченности предыдущей задачи: мне представляется, изходя из своего опыта, что было бы правильней не начинать новую передачу пока старая не закончена. Допустим у нас сработали два внешние прерывания с периодичностью в 5мс, и на каждое из них мне нужно как-то отреагировать, допустим послать по юарту 2/3 книги война и мир, это пример явно зафантазированный, но как говорится чем ярче краски тем красивее картинка, так вот исходя из данного примера сообщение второго прерывания нужно бы поставить в очередь пока инфа с первого не передастся, а потом уже чтобы автоматом запустилось второе.
Вот такое мое видение, допускаю что можна проще.
Интересует сам принцип, насколько он правильный ?
Posted after 5 minutes 24 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=4131237#p4131237"]включаю зануду.
тем более, что подобный принцип прекрасно поддерживается системными функциями printf, использовать которые для вывода на компьютерную консоль - милое дело! .[/uquote]
а можна по подробней об этом ?