-
Data: 2022-08-26 22:19:34
Temat: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
Od: Dawid Rutkowski <d...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]piątek, 26 sierpnia 2022 o 20:26:00 UTC+2 Atlantis napisał(a):
> 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?
Ale wymyśliłeś...
Ogólnie należy przypomnieć sobie C - i niezależnie, co zrobi kompilator, taka zmienna
będąca argumentem funkcji ma gwarantowany czas życia tylko do wyjścia z tego
konkretnego wywołania tej funkcji (a jeszcze może chciałbyś "reentrant"?).
Tak jest w C i tyle.
Więc albo sobie w tej funkcji gdzieś kopiujesz ten string albo jako argumentów
używasz globali.
Następne wpisy z tego wątku
- 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
- 27.08.22 21:43 Dawid Rutkowski
- 28.08.22 12:34 JDX
Najnowsze wątki z tej grupy
- Zasilanie własnych konstrukcji przez PoE
- Jak działa domofon?
- Co oni mierzą miernikiem
- 40 lat OrCAD-a
- Multimetr z bluetooth
- Ciekawa mapka z BTS-ami
- Lampy uliczne LED z kubkiem
- Pęczniejące LiPo
- wyłącznik ścienny
- "Wybitna" inteligencja AI
- test stereo
- Bluetooth stereo
- W USA budują pierwszą komercyjną elektrownię fuzji jądrowej
- Weryfikacja myjki ultradźwiękowej
- zasieg radaru
Najnowsze wątki
- 2025-10-15 Warszawa => Konsultant Wiodący SAP PP <=
- 2025-10-15 nie klam w sieci
- 2025-10-15 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-10-15 Warszawa => C Programmer <=
- 2025-10-15 Zakrzewo => SAP HCM Consultant <=
- 2025-10-15 Chrzanów => Spedytor Międzynarodowy (handel ładunkami/prowadzenie f
- 2025-10-15 Warszawa => IT Recruiter <=
- 2025-10-15 Rzeszów => Spedytor Międzynarodowy <=
- 2025-10-15 Warszawa => Generative AI Engineer <=
- 2025-10-15 Warszawa => Senior Microsoft Dynamics 365 Business Central Konsultant
- 2025-10-14 wifi calling
- 2025-10-14 Nicolas Sarkozy skazany [na 5 lat więzienia - przyp. JMJ].
- 2025-10-14 Dlaczego Polacy WRACAJĄ do PIRACTWA
- 2025-10-14 Żurkotura uczy: Starannie dobieraj miejsca popełnienia "grupy czynów" bo ci sąd wybiorą [UE-poseł Braun]
- 2025-10-14 Karalność kibiców z RP3 za okrzyki "jak Tusk opisał" na meczu na wyjeździe [Kowno/Litwa]