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



Teraz jest 28 lis 2024, o 11:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 21 wrz 2014, o 20:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Sytuacja faktycznie jest nieciekawa...
Na wstępie takie spostrzeżenia:
Z linii 15 można usunąć operator pozyskania adresu (ampersand), gdyż w przypadku funkcji takie działanie (pobrania adresu) jest domyślne.

Dodatkowo linię 36 można zamienić na

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

Niemniej jednak nietypowy wydaje mi się dostęp do pola "migacz", które nie zostało zadeklarowane w ciele klasy...


Jeśli chodzi o samo sedno problemu to jedyne co mi przychodzi do głowy to modyfikator "extern" dla obiektu "led" lub funkcja rejestrująca callback, wywoływana z poziomu pliku "main.c".

Wiązanie obiektu z zasobem sprzętowym niestety musi wykorzystywać zmienne globalne, co nie jest zbyt dobrym pomysłem, ale faktycznie nie widzę innego rozwiązania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 wrz 2014, o 21:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Borykałem się dokładnie z tym samym problemem odnośnie modułów USART.
Zrealizowałem to w sposób dość kulawy, a mianowicie utworzyłem globalną tablicę wskaźników na funkcję, które były wywoływane przez odpowiednie funkcje obsługi przerwań.
Tworzyłem wtedy dwa obiekty do których dodatkowo przekazywałem nr układu (0 i 1 odpowiednio dla USART0 i USART1). Wiem że nie jest to najlepszy sposób, ale przy większej ilości układów można utworzyć tablicę dynamiczną lub listę jednokierunkową zawierającą odpowiednie wskaźniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 paź 2014, o 20:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

Cześć mam pewien problem ideologiczny z liniami:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W pierwszym wersie deklaruje typ na metody klasy Dioda na wskaźniki na funckje postaci nazwa_funkcji(void). Chyba nazwa funkcji jest pewnym adresem na nią.

Następnie deklaruje migacz o typie callbackType, ale skoro to jest wskaźnik, więc tutaj jakbym miał adres na wsaźnik na funkcje. Więc do adresu przypisuje adres metody Dioda:callback;

Coś podobnego jak przy zwykłych wskaznikach
uint8_t *zmienna;
zmienna = &x; jest przypisanie do adresu

Dobrze to rozumiem?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2014, o 09:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

Dobra czaje. wielkie dzięki panowie.

_________________
sig off ;(



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

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