eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika74HCT245 jako port wejściowy - nie działa, choć powinienRe: 74HCT245 jako port wejściowy - nie działa, choć powinien
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin.
    stu.neva.ru!aioe.org!peer01.ams4!peer.am4.highwinds-media.com!news.highwinds-me
    dia.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.ne
    ostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    Subject: Re: 74HCT245 jako port wejściowy - nie działa, choć powinien
    Newsgroups: pl.misc.elektronika
    References: <5f3e204e$0$520$65785112@news.neostrada.pl>
    From: Atlantis <m...@w...pl>
    Date: Tue, 25 Aug 2020 18:00:46 +0200
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
    Thunderbird/68.11.0
    MIME-Version: 1.0
    In-Reply-To: <5f3e204e$0$520$65785112@news.neostrada.pl>
    Content-Type: text/plain; charset=utf-8
    Content-Language: pl
    Content-Transfer-Encoding: 8bit
    Lines: 31
    Message-ID: <5f4535af$0$536$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 83.27.20.46
    X-Trace: 1598371247 unt-rea-a-02.news.neostrada.pl 536 83.27.20.46:32970
    X-Complaints-To: a...@n...neostrada.pl
    X-Received-Bytes: 2500
    X-Received-Body-CRC: 459153783
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:756589
    [ ukryj nagłówki ]

    Ok, wygląda to tak, jakby faktycznie winę za niestabilne działanie
    układu ponosiło przepełnienie stosu. Zamiast wywoływać funkcję
    key_update() z pętli głównej, umieściłem tam odpowiadający jej fragment
    kodu (cc65 na chwilę obecną jest dość ubogim kompilatorem, wśród jego
    ograniczeń znajduje się m.in. brak funkcji inline). Wszystko zaczęło
    działać.

    Trochę mnie to dziwi, bo:
    - Nie mam w tym kodzie głęboko zagnieżdżonych funkcji. Funkcje
    key_update() była wywoływana bezpośrednio z pętli głównej, ona sama
    wywołuje tylko funkcję millis() - wzorowaną na Arduino funkcję
    zwracającą ilość taktów systemowych generowanych w przerwaniu (ze
    względu na niskie taktowanie są one zwiększane co 20 ms, a nie 1 ms).
    - Sprzętowy stos 6502 jest co prawda niewielki, ale cc65 generuje
    własny, programowy stos.
    - Pamięci jest sporo jak na taki układ (8kB) i jak na razie zbyt mocno
    jej nie wykorzystuję. Najwięcej zużywają chyba bufory dla UART-a (2x 256
    bajtów). Jest też kilka pomniejszych buforów i trochę zmiennych. Aż
    sprawdziłem, czy przypadkiem łańcuch tekstowe podawane jako argumenty
    funkcji nie trafiają przypadkiem do RAM-u, ale w generowanym przez
    kompilator kodzie asemblerowym są oznaczone jako .rodata.

    Gdyby kogoś szczególnie interesowała ta zagadka, to wrzuciłem kody
    źródłowe na githuba,

    To jest ten problematyczny:
    https://github.com/marekw1986/RetroEG

    A tutaj działający:
    https://github.com/marekw1986/TalkingClock
    (Definicja key_update w io.c)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: