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:AbsoluteStack 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