-
Data: 2022-08-26 20:25:57
Temat: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 26.08.2022 16:40, Dawid Rutkowski wrote:
> W AVR - i pewnie w innych harvardach - jest możliwość zrobienia tak,
> że nie będzie używany RAM - send(PSTR("tekscik z ROMu"));
> a jako argument leci wskaźnik - ale do flasha.
Tak to było robione na części ośmiobitowych mikrokontrolerów, takich jak
PIC16/PIC18 albo właśnie AVR (i w związku z tym również większość płytek
Arduino). Żeby uniknąć kopiowania do RAM-u, trzeba było deklarować
łańcuchy tekstowe za pomocą specjalnych makrodefinicji. Istniały też
specjalne wersje funkcji do operacji na łańcuch, przygotowane z myślą o
nich.
W przypadku nowoczesnych układów 32bitowych (STM32, PIC32,
ESP8266/ESP36) nie ma już takiej potrzeby, bo zarówno flash jak i RAM
stanowią część tej samej przestrzeni adresowej i można się do nich
odwoływać za pomocą tych samych wskaźników, a łańcuchy zdefiniowane jako
const char* trafiają do flasha.
Oczywiście trzeba uważać na to co się robi, bo np. próba zapisu pod
adres we flashu spowoduje rzucenie wyjątku.
Moje pytanie dotyczyło czegoś innego - chciałem się upewnić, czy
faktycznie łańcuch zdeklarowany jako argument funkcji (a nie jawnie,
jako globalna stała z kwalifikatorem const) zawsze będzie zapisany we
flashu. Wyobraźmy sobie np. hipotetyczną sytuację:
Send("Lights on");
Send("Lightf off");
Czy nie istnieje np. ryzyko, że kompilator spróbuje to niejawnie
zoptymalizować i zdefiniuje sobie we flashy łańcuchu "Lights ", "on"
oraz "off", a potem będzie tworzył ich kombinacje na stosie, przed
przekazaniem w argumencie funkcji?
Następne wpisy z tego wątku
- 26.08.22 21:50 Janusz
- 26.08.22 22:19 Dawid Rutkowski
- 26.08.22 22:34 Grzegorz Niemirowski
- 27.08.22 06:27 JDX
- 27.08.22 06:41 J.F
- 27.08.22 08:10 Atlantis
- 27.08.22 10:28 Dawid Rutkowski
- 27.08.22 11:34 Marek
- 27.08.22 11:53 JDX
- 27.08.22 12:59 Atlantis
- 27.08.22 15:59 Dawid Rutkowski
- 27.08.22 16:06 Dawid Rutkowski
- 27.08.22 16:53 J.F
- 27.08.22 20:30 a...@m...uni.wroc.pl
- 27.08.22 20:55 JDX
Najnowsze wątki z tej grupy
- syrenki alarmów
- Czym obecnie programuje się EPROM-y?
- zagadka sieciowa
- W Polsce powstaje grawitacyjny magazyn energii
- Linux wciąż wspiera dyskietki. Porządki w sterownikach do FDD
- Koniec z instalacją niezatwierdzonych aplikacji na Androidzie
- To koniec Starlinka dla Ukrainy. Karol Nawrocki zdecydował
- [OT] Wycinanie pianki kostkowej / szesciennej
- Alarm do lodówki
- Poczta Polska na Discord-zie
- Aku do UPS
- czy ludzie przestali słuchać muzyki?
- zabawa czatem :)
- Modernizacja instalacji elektrycznej w wielkiej płycie
- Co to za dziwne "białe namioty" co stawiają je w różnych dziwnych miejscach?!?
Najnowsze wątki
- 2025-08-31 Mały box bagażowy i koła rowerowe
- 2025-08-31 Czy jest nam z tego powodu przykro?
- 2025-08-31 syrenki alarmów
- 2025-08-30 Czy produkujemy jakiekolwiek auta eksportowane do Stanów Zjednoczonych?
- 2025-08-30 Warszawa => Starszy Konsultant SAP - obszar PP <=
- 2025-08-30 Myślenice => Specjalista ds. kontrolingu <=
- 2025-08-30 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-08-29 Motodziennik test - NOWOŚĆ - LEAPMOTOR T03 - LEPSZY OD DACII SPRING. Za 100 zeta miesięcznie...
- 2025-08-29 Czym obecnie programuje się EPROM-y?
- 2025-08-29 Warszawa => International Freight Forwarder <=
- 2025-08-29 Warszawa => Senior Algorithm Developer (Java/Kotlin) <=
- 2025-08-29 Kraków => Senior Fullstack Engineer (Low-Code Platform) <=
- 2025-08-28 Automat do bondingu IC
- 2025-08-28 Internet bezprzewodowy Wi-Fi 5G
- 2025-08-28 Minister pobity