ATNEL tech-forum
https://forum.atnel.pl/

C, AVR, UART, TRANSMISJA
https://forum.atnel.pl/topic23704.html
Strona 1 z 1

Autor:  fofex [ 4 kwi 2021, o 14:27 ]
Tytuł:  Re: C, AVR, UART, TRANSMISJA

edwardkraweznik napisał(a):
        char * ppp = "ppp123";
 
        for(int i = 0; i<sizeof(ppp); i++)

sizeof wskaźnika zwraca wielkość zmiennej wskaźnikowej. W przypadku AVR wskaźniki są przeważnie 16 bitowe
edwardkraweznik napisał(a):
        char ppp[] = "ppp123 ala ma kota...";
 
        for(int i = 0; i<sizeof(ppp); i++)

sizeof na tablicy zwraca wielkość tablicy, w tym przypadku jest to długość stringu łącznie z końcowym '\0'. Wypychając string na UART zwykle nie chcemy wysyłać końcowego 0 a więc albo trzeba wysyłać "sizeof ppp - 1" znaków, albo skorzystać z funkcji strlen.
edwardkraweznik napisał(a):
1. Czy rozwiązanie jak wyżej, wysyłanie znak po znaku w pętli jest prawidłowe ? może inaczej powinienem to zrobić ?

W zasadzie tak, z tym że pęta busy wait blokuje program na czas transmisji.
edwardkraweznik napisał(a):
3. Co się stanie jeśli tych danych nie odbieram? mikrokontrolery mają jakiś timeout i wywalają te dane? co dokładnie się z tym dzieje?

Nic się nie dzieje, znak zostanie przetransmitowany niezależnie czy odbierzesz czy nie bez informacji zwrotnej. Jak chcesz mieć informację czy timeout musisz sobie zaimplementować swoją kontrolę przepływu
edwardkraweznik napisał(a):
void cum_pin_snd(volatile uint8_t *pin, uint8_t pinnr)
{
    if ( PINB & (1 << 0))

Przypuszczam że miało być
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/