Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 kwi 2021, o 10:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 4 kwi 2021, o 10:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 mar 2021
Posty: 72
Pomógł: 0

Witajcie.
Jako, że dopiero raczkuję w c i AVR zmuszony jestem zadać takie pytanie:

Mam taki prosty kod do transmisji UART:

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


Pytania:
1. Czy rozwiązanie jak wyżej, wysyłanie znak po znaku w pętli jest prawidłowe ? może inaczej powinienem to zrobić ?
2. Wysyłając w ten sposób tablicę wysyłam jak z ostatni element tablicy "\0" ?
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?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2021, o 12:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 mar 2021
Posty: 72
Pomógł: 0

Nie wiem dlaczego tylko 2 znaki wysyłało
po zmianie na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wysyła całość



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2021, o 14:27 
Offline
Użytkownik

Dołączył(a): 29 lis 2019
Posty: 102
Pomógł: 29

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.


Autor postu otrzymał pochwałę

_________________
Think for yourself and question authority.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO