-
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
- Światłowód między budynkami
- POtrzebny bufor 3.3<>5V, jedonkieruowy, trójstanowy, wąski
- retro
- Bezprzewodowe polączenie Windows z projektorem
- rozklejanie obudowy
- Prośba o identyfikację komponentu
- Smart gniazdko straciło na zasięgu wifi?
- Smart gniazdko straciło zasięg wifi?
- nurtuje mnie
- dziwna sprawa...
- Laptop MSI się nie uruchamia.
- Dobra listwa LED (CRI 90-95, bez migotania)
- masowe programowanie AVR
- Fajny pomysł na monitor z klawiaturą
- Sprzedawanie zaszyfrowanych filmów na płytach Blu-Ray bez kluczy deszyfrujących
Najnowsze wątki
- 2024-10-28 Oskarżony v. Podejrzany [terminologia właściwa dla Państwa Prawa]
- 2024-10-28 Światłowód między budynkami
- 2024-10-28 Warszawa => Technical Lead ( (Java Background)) <=
- 2024-10-28 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-10-28 Warszawa => Demon Sprzedaży B2B <=
- 2024-10-28 Warszawa => SAP Project System/EPPM Consultant <=
- 2024-10-28 Dziwnie padający Seagate
- 2024-10-27 Kolejny pożar
- 2024-10-27 Walka o prad :D
- 2024-10-27 Koniec alimentów - jak zakończyć?
- 2024-10-27 POtrzebny bufor 3.3<>5V, jedonkieruowy, trójstanowy, wąski
- 2024-10-26 Gdzie w smartfonie są SMSy/MMSy ?
- 2024-10-27 jakie klocki do elektryka?
- 2024-10-26 Czym jeździ Myjk
- 2024-10-25 tak nieśmiało zapytam