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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 6 kwi 2025, o 02:05


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
    Autor Wiadomość
    PostNapisane: 6 wrz 2018, o 17:02 
    Offline
    Nowy

    Dołączył(a): 06 wrz 2018
    Posty: 1
    Pomógł: 0

    Piszę symulację w atmel studio. Otworzyłem okno z podglądem RAM i po wykonaniu
    Składnia: [ Pobierz ] [ Ukryj ]
    język asm
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    wszystko działa zgodnie z opisem RAMu w nocie atmega328 - zmienia się bajt pod adresem 0x0010.

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

    bajt 0x0020 RAMu nie zmienia się na 0x01?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 wrz 2018, o 11:16 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Na początku muszę uściślić, że adres 0x0020 w przestrzeni adresowej danych nie odnosi się do pamięci RAM, tylko tzw. pamięci MAPPED_IO (czyli dotyczy rejestrów I/O).
    Instrukcja SBI 0, 0 w rzeczywistości odnosi się do tej lokalizacji w pamięci. Należy jednak wziąć pod uwagę, że to rejestr specjalny i reakcja na poszczególne operacje (na takich rejestrach) nie zawsze będzie zgodna z zasadami ogólnymi.

    Nie podałeś typu mikrokontrolera i użyłeś wartości liczbowej, zamiast nazwy symbolicznej rejestru, więc nie wiadomo, o jaki rejestr chodzi. Oczywiście asembler nie zgłosi w tym przypadku błędu, ponieważ wartości operandów mieszczą się w dopuszczalnym zakresie, ale to wcale nie oznacza, że instrukcja jest prawidłowa. W niektórych mikrokontrolerach niektóre adresy (czy nawet tylko nietóre bity danego adresu) mogą być zarezerwowane/nieużywane i wpisywanie do nich czegokolwiek nie jest zalecane. W innych pod tym adresem może być np. jakiś rejestr PINx, i wtedy wpisywanie do niego jakichś wartości (z przyczyn oczywistych) w ogóle pozostaje bez efektu, lub daje efekt zupełnie innym niż się można spodziewać (biorąc pod uwagę zasady ogólne).

    Przykładowo w mikrokotrolerze ATmega644P pod adresem 0x20 (czyli 0x00 w przestrzeni I/O) znajduje się rejestr PINA. Ustawienie któregoś bitu w tym rejestrze nie powoduje de facto jego faktycznego ustawienia, za to powoduje zmianę stanu odpowiadającego mu bitu w rejestrze PORTA:
    Składnia: [ Pobierz ] [ Ukryj ]
    język asm
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    W powyższym przykładzie wartość rejestru PINA pozostanie bez zmian.

    Dlatego, jeśli już chcesz skosztować asemblera, używaj nazw symbolicznych rejestrów I/O, bo taki styl pisania (jak sam widzisz) nie bardzo zdaje egzamin. Dzięki zastosowaniu nazw symbolicznych kod będzie czytelniejszy i łatwiej będzie się domyślić, jaki będzie efekt poszczególnych instrukcji.

    Gdybyś w swoim przykładzie użył nazwy symbolicznej, byłaby pewność, że dany adres jet prawidłowy (nie jest zarezerwowany) albo przynajmniej łatwiej byłoby odpowiedzieć na Twoje pytanie. Skoro już korzystasz z dokumentacji (jak napisałeś) to jest w nich zawsze dokładne zestawienie wszystkich rejestrów I/O danego mikrokontrolera łącznie z ich adresami. Są tam też dokładne opisy, do czego te rejestry służą i jak ich używać.


    Autor postu otrzymał pochwałę


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

    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