-
X-Received: by 2002:a05:620a:318b:b0:6bc:138:27c9 with SMTP id
bi11-20020a05620a318b00b006bc013827c9mr1031441qkb.2.1661545174602; Fri,
26 Aug 2022 13:19:34 -0700 (PDT)
X-Received: by 2002:a05:620a:318b:b0:6bc:138:27c9 with SMTP id
bi11-20020a05620a318b00b006bc013827c9mr1031441qkb.2.1661545174602; Fri,
26 Aug 2022 13:19:34 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erj
e.net!3.us.feeder.erje.net!feeder.erje.net!border-1.nntp.ord.giganews.com!nntp.
giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-gro
ups.googlegroups.com!not-for-mail
Newsgroups: pl.misc.elektronika
Date: Fri, 26 Aug 2022 13:19:34 -0700 (PDT)
In-Reply-To: <63091035$0$560$65785112@news.neostrada.pl>
Injection-Info: google-groups.googlegroups.com; posting-host=5.172.255.36;
posting-account=fcN60AoAAACGnErMsW3A8rTO2UKkGJEn
NNTP-Posting-Host: 5.172.255.36
References: <6308cdf1$0$6193$65785112@news.neostrada.pl>
<4...@g...com>
<63091035$0$560$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <1...@g...com>
Subject: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
From: Dawid Rutkowski <d...@w...pl>
Injection-Date: Fri, 26 Aug 2022 20:19:34 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 59
Xref: news-archive.icm.edu.pl pl.misc.elektronika:773950
[ ukryj 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
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- Propagation velocity v/c dla kabli RF
- Jakie natynkowe podwójne gniazdo z bolcem (2P+PE)
- Czujnik nacisku
- Protoków komunikacyjny do urządzenia pomiarowego
- Hiszpania bez pradu
- amperomierz w plusie
- 3G-nadal działa
- Historia pewnego miernika kalibratora
- Ustym 4k Pro i wyświetlacz
- Czemu rozwaliło celę?
- Wojna w portfelu
- Jaki trojfazowy licznik tuya lub podobny?
- Problem z dekoderem adresów
- Intel się wyprzedaje: po 10latach pchnęli pakiet kontrolny Altery za 1/4 kwoty zakupu
Najnowsze wątki
- 2025-05-17 Głosowanie na prezydenta mDowód
- 2025-05-17 Karol i Patrycja - a może wielka miłość jak Romeo i Julia
- 2025-05-17 Re: Pamientajta, aby zamknÄ Ä ryje, bo jest cisza wyborcza, a co powiecie
- 2025-05-17 Phishing obok nas.
- 2025-05-17 poznaj siłe swoich pieniędzy
- 2025-05-17 Warszawa => Senior IT Recruitment Consultant <=
- 2025-05-17 Warszawa => DevOps Engineer <=
- 2025-05-17 Warszawa => Junior Account Manager <=
- 2025-05-17 Warszawa => Senior Programmer C <=
- 2025-05-17 Polska => Senior Key Account Manager <=
- 2025-05-17 Migracje i przestępczość
- 2025-05-16 czy Seba naprawdę wróci do macierzy?
- 2025-05-15 coś pustawo u mechaników
- 2025-05-16 Warszawa => IT Data Analyst (obszar Power BI) <=
- 2025-05-16 Warszawa => Senior Backend Developer <=