mozna zrobic tak jak zrobiono: prog_char: char __attribute__((progmem)) PGM_P : prog_char const*
Kompilator sie zorientuje ... ale jak zmusic printf i inne funkcje zeby sie po adresie orientowaly ? :-) Niby mozna tak jak kolega tu proponowal - wskazniki 3 bajtowe, pierwszy wskazuje obszar ... tylko ze wtedy zegnaj wydajnosc :-(
Co nie zabrania istnienia jednolitej adresacji. Np najstarszy bit adresu wybiera czy dana czytamy z ram czy z rom.
Tylko jak to zrobic jesli niektorzy chca 64KB ram, 256KB ROM i oszczedne 16-bitowe wskazniki.
Ech, to gdzie dostac ARMa w przyzwoitej cenie, detalicznej ilosci i obudowie nie BGA ?
J.
Didn't find your answer? Ask the community — no account required.
J
J.F.
51 bedzie sprawiala takich klopotow jeszcze wiecej :-)
Z maluchow to chyba motorolki hc11 i hc05 mialy jednolita adresacje.
J.
P
Piotr Wyderski
...i po pierwszym przypisaniu do zwyklego wskaznika zgubi te informacje i znow niczego biedaczek nie bedzie wiedzial. :-)
Bez "dynamicznego typowania", czyli kodowania typu obszaru pamieci we wskazniku wyglada to na problem nierozstrzygalny podczas statycznej analizy przeplwu danych. :-)
No to jest wlasnie rodzaj takiego dynamicznego typowania.
Za pomoca bankowania. :-)
Pozdrawiam Piotr Wyderski
A
Adam Dybkowski
Najlepiej przejsc od razu na ARMa. Procesory z tym jadrem wytwarza conajmniej kilkudziesieciu roznych producentow. Znajdziesz je m.in. u Philipsa, Atmela, OKI, TI, Intela. Kompilator gcc oczywiscie jest i bardzo ladnie sobie radzi. Przewaga nad AVR'ami jest wspolna przestrzen danych/programu i praktycznie brak ograniczen w adresowaniu (32 bity). Oczywiscie jest to szybki RISC.
J
Jan Dubiec
Zmuszać to chyba nie trzeba ponieważ w avr-libc są przecież funkcje z postfiksem _P. Problem jest w tym że w przypadku dużych AVR-ów wskaźki wskazujące na dane znajdujące się w pamięci programu powinny być 17 (a w przyszłości chyba i 18) bitowe a nie 16 bitowe.
[.....]
W naszym przypadku to zadziałałoby dla adresów >= 0x10000, ale jak rozpoznać czy adres np. 0x1000 dotyczy RAM czy ROM. :-) Właśnie po to są te wszyskie _P funkcje.
Poza tym w architekturze harwardzkiej przestrzeń adresowa z definicji jest podzielona na dwa obszary i stosowane są różne instrukcje do zapisu/odczytu danych z tych obszarów. Jest podzielona przynajmniej logicznie - fizycznie może być różnie - szyna adresowa/danych może być wspólna a tylko szyny sterujące rozdzielone (np. MCS-51) albo, ze względu na wydajność (a AFAIK właśnie o to chodziło twórcom tej architektury), wszystkie szyny zdublowane dla każdego z obszarów jak chyba jest w zdecydowanej większości DSP (np. w starym ale jarym ADSP-218x Analoga). I tak jest również w AVR, tylko że tam wszystko dotyczące pamięci programu jest ukryte wewnątrz kości - tak przynajmniej wynika z lektury dejtaszitów (nigdy nie używałem tych kości w praktyce).
BTW. Wcale nie należy się tak bardzo przyzwyczajać do schematu że pamięć programu to jest jakiś ROM. Np. we wspomnianych Analogach, ze względu na wydajność, pamięcią programu jest RAM - podczas startu kod jest ładowany do RAM z jakiegoś ROM lub przez IDMA z "procesora nadrzędnego".
[.....]
W Memec-u? Ewentualnie, prawie po sąsiedzku (w MSC), możesz kupić H8. :-)
Regards, /J.D.
J
J.F.
Adamie, ale moze konktretniej - gdzie w UE kilka sztuk, po ile, i czemu w BGA ? :-(
J.
Z
Zbych
Pewnego dnia Jan Dubiec przemówił ludzkim głosem:
Skoro i tak wskaźnik zrobi się dłuższy niż 2 bajty to można by wykorzystać najstarszy bit z 3 bajtu do rozróżniania obszarów.
M
Milosz Skowyra
Tia... tylko w AVR bankowanie zaczyna sie od 64 KB. I dodatkowo nie dziala tak jak powinno... ;-(
J
J.F.
To wlasnie musialoby byc zaszyte w procku - inny zakres adresow ma ROM, inny RAM. To ze oprocz tego bylyby rozdzielone i mialy osobne magistrale to osobna kwestia - ale adresacja jednolita.
IMHO - te rozne instrukcje to juz nie z definicji.
Fizycznie w mikrokontrolerach to zawsze jest podzielona - inaczej sie robi RAM a inaczej EE/E/P/ROM/Flash.
A no chyba ze tak.
J.
J
Jan Dubiec
No ale to byłoby rozwiązanie sprzętowe. I to dosyć "głębokie". Poza tym nie jestem przekonany czy w takim przypadku rozdzielenie szyn pamięci danych i programu miałoby sens - ów "dekoder adresów" mógłby być wąskim gardłem. Trzebaby to przemyśleć.
Chodzi mi o to że mogą dzielić szynę adresową/danych. BTW. IMO to jest zaprzeczenie celu w jakim wymyślono architekturę harwardzką.
Regards, /J.D.
A
Artur Lipowski
Piotr Wyderski wrote: ...
... No to Cię zaskoczę, bo to jest C. No może takie jakieś jeszcze młode i nieopierzone, ale C pełną gębą 8-)
formatting link
Jest duże prawdopodobieństwo, że GCC pójdzie właśnie tą drogą.
Pozdrawiam,
K
Krzysztof Rudnik
Ale ta metoda zmuszala by kompilator by kazde odwolanie do pamieci poprzez wskaznik kompilowal jako sekwencje rozkazow ze sprawdzeniem wskaznika i wybraniem odpowiedniej instrukcji w zaleznosci od tego warunku. Kazde odwolanie - to znacznie wydluzyloby kod.
Krzysiek Rudnik
Z
Zbych
Pewnego dnia Krzysztof Rudnik przemówił ludzkim głosem:
A teraz gdy masz dwa zestawy funkcji, osobny do każdej przestrzeni adresowej to myślisz, że kod jest krótki ? Według mnie w keilu rozwiązali to naprawdę dobrze. Jeśli z góry wiesz do jakiej pamięci się odwołujesz to jawnie deklarujesz typ pamięci przy wskaźniku. A jeśli masz funkcje, które muszą obsłużyć dowolny typ pamięci to używasz "kombinowanej" wersji wskaźnika.
M
Milosz Skowyra
A mozesz podac jakis modelik ARM-a ktory bylby dostepny (nie w Elfie) choc ulamkowo tak czesto jak '51 czy AVR-y ?? To w naszym kochanym kraju chyba najwiekszy problem ;-(
A
Adam Dybkowski
Nie bylo mowy, ze ma miec Flash w srodku. A bez tego w TQFP znalezc ARMy nie problem. Zapytaj np. w JM Elektronik - moga sprowadzic rozne atmelowe procki. Ja sie ostatnio w firmie bawie AT91R40008 i jest to calkiem zacny procek. Ze sprowadzeniem kilku szt. nie mielismy problemu.
Z
Zbych
Pewnego dnia Adam Dybkowski przemówił ludzkim głosem:
A możesz zdradzić cenę ?
A
Adam Dybkowski
Polecam np. AT91R40807 albo od razu nieco wiekszy i szybszy AT91R40008. Zapytaj sie o nie w JM Elektronik / Seguro. Albo u innego dystrybutora Atmela.
M
Milosz Skowyra
Ehem... a jest cos z flashem na grzbiecie i jakas forma ISP ? Cos typowego do nauki ??
A
Adam Dybkowski
Jakis czas temu pytalem sie o te ARMy w Seguro i dostalem cene AFAIR kilkanascie USD/szt + VAT. Po przeliczeniu wychodzilo okolo 100 zl, co jest IMHO super cena w porownaniu do ATmegi128 (za 40-50 zl) - ARM jest
4x szybszy i ma 256KB RAMu w srodku. Jedyna wada to brak Flasha, ale latwo ja naprawic dodatkowa kostka (kilkanascie zl).
A
Adam Dybkowski
BTW: ISP nie trzeba, bo kazdy ARM ma interfejs JTAG.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.