eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaPamięć at89c2051 › Re: Pamięć at89c2051
  • Data: 2017-03-21 09:48:07
    Temat: Re: Pamięć at89c2051
    Od: MKi <e...@t...op.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    -- Wiadomość oryginalna (wysłana 21.03.2017 09:09) --
    > Ciąg dalszy eksperymentów z antycznymi mikrokontrolerami. :)
    >
    > Trafiłem na taką oto dziwną sytuację (zawartość pliku .mem wklejona na
    > końcu wiadomości). Z jakiegoś powodu kilkanaście bajtów na początku
    > pamięci zostało wyłączonych z użytku przez kompilator sdcc. Ktoś ma
    > pomysł dlaczego tak się stało i co mogę z tym zrobić?
    > Może mam coś źle ustawione w makefile albo powinienem deklarować zmienne
    > w jakiś specyficzny sposób?
    >
    > Druga sprawa: wykonałem kilka eksperymentów i z tego co widzę
    > umieszczenie w kodzie tablicy znaków zdefiniowanej jako const char[] nie
    > powoduje zwiększenia zużycia RAM-u. Mam rozumieć, że 8051/sdcc potrafi
    > odwoływać się do danych umieszczonych w pamięci programu bezpośrednio,
    > bez potrzeby kombinowania z jakimś odpowiednikiem AVR-owskiego pgmspace.h?
    >
    >
    > Internal RAM layout:
    > 0 1 2 3 4 5 6 7 8 9 A B C D E F
    > 0x00:|0|0|0|0|0|0|0|0|a|a|a|a|Q| | | |
    > 0x10:| | | | | | | | | | | | | | | | |
    > 0x20:|B|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|
    > 0x30:|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|
    > 0x40:|b|b|b|b|b|b|b|b|b|b|b|b|b|b|b|S|
    > 0x50:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
    > 0x60:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
    > 0x70:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
    > 0x80:| | | | | | | | | | | | | | | | |
    > 0x90:| | | | | | | | | | | | | | | | |
    > 0xa0:| | | | | | | | | | | | | | | | |
    > 0xb0:| | | | | | | | | | | | | | | | |
    > 0xc0:| | | | | | | | | | | | | | | | |
    > 0xd0:| | | | | | | | | | | | | | | | |
    > 0xe0:| | | | | | | | | | | | | | | | |
    > 0xf0:| | | | | | | | | | | | | | | | |
    > 0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData,
    > S:Stack, A:Absolute
    >
    > Stack starts at: 0x4f (sp set to 0x4e) with 49 bytes available.
    >
    > Other memory:
    > Name Start End Size Max
    > ---------------- -------- -------- -------- --------
    > PAGED EXT. RAM 0 256
    > EXTERNAL RAM 0 1024
    > ROM/EPROM/FLASH 0x0000 0x0327 808 2048
    >

    Pamięć:
    Zapewne obszar zmiennych jednego modułu (jednego pliku .c)
    musi być ciągły, a obszar "bbbb" jest za duży, aby się
    zmieścił od 0x0D do 0x1F. Używasz też zmiennych bitowych,
    które zaczynają się zawsze od 0x20.
    Rozwiązanie: rozdziel zmienne modułu "bbbb" na dwa moduły.

    Dane we FLASH: Jak najbardziej, całe kombinowanie
    to dyrektywa const lub code.

    Pozdrowienia,
    MKi




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: