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



Teraz jest 26 lis 2024, o 14:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 2 wrz 2016, o 19:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sie 2013
Posty: 165
Lokalizacja: Sycyna Południowa
Pomógł: 4

Witam :) Zacząłem się bawić się tymi rejestrami, są mi one potrzebne do ulepszonej wersji sterownika wzmacniacza. Sam rejestr działa ok. Da się wysłać cały bajt, wszystko ładnie pracuje, ale pytanie nasuwa się w kwestii oprogramowania tego rejestru żeby działało tak jak chce.

Wpadłem na pomysł sterowania:

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


Teraz całą tą tablicę chciałbym wysłać do rejestru tak, żeby kolejne bity odpowiadały stanom wyjść rejestru (0 - wyłączone, 1 - włączone). Później bym przypisywał wartości odpowiadające kolejnym bitom zależnie co bym chciał zrobić. Problem mam z przepisaniem tej tablicy do np zmiennej i tą zmienną wysyłać do rejestru a może jest jakiś prostszy "patent" na tą tablicę? A może jest sposób operować na jednej zmiennej i tylko podmieniać odpowiednie bity? Czy może pomysł do d...? ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2016, o 19:32 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Kwestia tego, czy potrzebujesz tą tablicę jeszcze do czegoś, jeśli tak, to możesz zrobić np. tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i w zmiennej var_shift_reg masz binarną reprezentację swojej tablicy.

Pozdrawiam, QuadMan.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2016, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sie 2013
Posty: 165
Lokalizacja: Sycyna Południowa
Pomógł: 4

No byłem kurcze blisko :) Dziękuję już wszystko jest jasne :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2016, o 09:03 
Offline
Użytkownik

Dołączył(a): 14 paź 2012
Posty: 43
Lokalizacja: Szczecin
Pomógł: 0

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


Nie rozumię powyższego ..hmm. Dzielimy wielkość tablicy przez jej adres!? Co to nam daje?

dzięki z góry za wyjaśnienie!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2016, o 18:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 208
Lokalizacja: Kraków
Pomógł: 16

Nie przez adres a przez wartość komórki na którą aktualnie wskazuje tab.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2016, o 18:59 
Offline
Użytkownik

Dołączył(a): 14 paź 2012
Posty: 43
Lokalizacja: Szczecin
Pomógł: 0

Juffre napisał(a):
Nie przez adres a przez wartość komórki na którą aktualnie wskazuje tab.


Dzieki za pomoc! Już jasne :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2016, o 03:02 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

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


Nie rozumię powyższego ..hmm. Dzielimy wielkość tablicy przez jej adres!? Co to nam daje?

dzięki z góry za wyjaśnienie!


Sorry, że dopiero teraz, wcześniej mnie nie było. To "stary" trick. Chodzi po prostu o wyznaczenie ilości elementów tablicy tab. Operator siezof dla tablic działa w ten sposób, że podaje jej wielkość w bajtach ( dla czepialskich: to pewne uproszczenie, ale na tym etapie wystarczy), więc jeśli w ogólnym przypadku chcesz znać ilość elementów tablicy, to dzielisz sizeof(tab) - bo tyle ona zajmuje w bajtach, przez rozmiar w bajtach 1 elementu tejże tablicy.
Z kolei, sizeof(tab[0]), czy sizeof(tab[k]) w ogólnym przypadku to właśnie ilość bajtów potrzebnych na 1 element naszej tablicy. Ale tab[0] to przecież *tab, stąd zapis jak powyżej.
Twoja tablica jest typu uint8_t, więc w sumie wystarczyło by samo sizeof(tab), ( bo po co dzielić przez 1 ? ;-) ) ale odruchowo piszę zawsze to co wyżej.

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2016, o 11:13 
Offline
Użytkownik

Dołączył(a): 14 paź 2012
Posty: 43
Lokalizacja: Szczecin
Pomógł: 0

Dzieki QuadMan za dogłębne wyjaśnienie! W sumie proste ale można się zamotać :)

Pozdrawiam Janusz



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: 8 ] 

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