-
X-Received: by 2002:a05:620a:68f:b0:6be:5a7c:d61a with SMTP id
f15-20020a05620a068f00b006be5a7cd61amr1448325qkh.519.1661524846177; Fri,
26 Aug 2022 07:40:46 -0700 (PDT)
X-Received: by 2002:a05:620a:68f:b0:6be:5a7c:d61a with SMTP id
f15-20020a05620a068f00b006be5a7cd61amr1448325qkh.519.1661524846177; Fri,
26 Aug 2022 07:40:46 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.man.lodz.pl!newsfeed.pionier.net.p
l!2.eu.feeder.erje.net!feeder.erje.net!news.quux.org!weretis.net!feeder6.news.w
eretis.net!usenet.blueworldhosting.com!feed1.usenet.blueworldhosting.com!peer01
.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!n
ntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.misc.elektronika
Date: Fri, 26 Aug 2022 07:40:45 -0700 (PDT)
In-Reply-To: <6308cdf1$0$6193$65785112@news.neostrada.pl>
Injection-Info: google-groups.googlegroups.com; posting-host=84.10.46.130;
posting-account=fcN60AoAAACGnErMsW3A8rTO2UKkGJEn
NNTP-Posting-Host: 84.10.46.130
References: <6308cdf1$0$6193$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <4...@g...com>
Subject: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
From: Dawid Rutkowski <d...@w...pl>
Injection-Date: Fri, 26 Aug 2022 14:40:46 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Received-Bytes: 4604
Xref: news-archive.icm.edu.pl pl.misc.elektronika:773942
[ ukryj nagłówki ]piątek, 26 sierpnia 2022 o 15:43:15 UTC+2 Atlantis napisał(a):
> Mam pytanie do osób w większym stopniu niż ja ogarniających zachowanie
> kompilatorów języka C. Właściwie chcę się upewnić, że moje rozumowanie
> jest słuszne.
>
> Pisze obecnie pewną bibliotekę, której głównym elementem będzie maszyna
> stanów. Jednym z jej głównych zadań będzie przetwarzanie i przesyłanie
> dalej wiadomości wrzucanych do bufora pierścieniowego.
>
> Od strony użytkownika będzie to wyglądało w ten sposób, że w dowolnym
> momencie w programie będzie musiał wywołać funkcję, która będzie
> wyglądała mniej więcej tak:
>
> send(const char* str);
>
> Wskaźnik str zostanie zapisany w buforze cykliczny, gdzie będzie czekał
> do momentu, aż maszyna stanów będzie gotowa go odczytać i przesłać
> dalej. W przypadku danych zapisywanych w RAM-ie siłą rzeczy trzeba
> będzie więc zadbać, żeby żyły odpowiednio długo i np. nie znikły ze
> stosu. Konieczne będzie więc używanie tablic globalnych albo lokalnych
> statycznych.
>
> A co w sytuacji, kiedy będę chciał wysłać po prostu wartość podaną
> wprost w argumencie funkcji, np.?
>
> send("przykladowy tekst");
>
> Co w takiej sytuacji zrobi kompilator?
>
> 1. Zapisze tekst bezpośrednio we flashu i przekaże funkcji wskaźnik na
> początek łańcucha zapisanego w pamięci nieulotnej.
> 2. Przed wywołaniem skopiuje wartość z flasha na stos i przekaże
> wskaźnik do miejsca w pamięci RAM - po zwinięciu się stosu zawartość
> może zostać nadpisana.
> 3. Zachowanie nie jest jasno zdefiniowane i zależy od innych czynników.
>
> Oczywiście mówimy o w miarę współczesnym, 32bitowym mikrokontrolerze, z
> jedną przestrzenią adresową dla flasha/RAM-u.
>
> Najbardziej logiczna wydaje mi się opcja pierwsza, ale jak mówię - wolę
> się upewnić.
Zawartość będzie zapisana we flashu, a sama zmienna (tablica znaków) w RAMie.
Podczas initu nastąpi kopiowanie z flashu do RAMu.
send("przykładowy tekst"); zaś dostanie za argument stałą - adres w RAMie.
Najprawdopodobniej każde wywołanie send("ten sam tekst"); zajmie taką
samą porcję flasha i RAMu - ale tu pewności już nie ma...
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.
Ale wtedy w buforze musi być zapisana również informacja, że ten
akurat wskaźnik jest do flasha.
Myślę, że ogólnie bardzo utrudniasz sobie życie.
Następne wpisy z tego wątku
- 26.08.22 20:25 Atlantis
- 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
Najnowsze wątki z tej grupy
- Jak sie smazy elektronike z odleglosci kilkuset metrów?
- William Shockley, co-inventor of the transistor
- Gazowy kocioł CO regulacja cyklingu i regulacja pogodowa
- Zamek elektroniczny
- szablon do pasty DIY
- Głośnik potrzebny
- Silikonowy przewód ekranowany
- Wtyk bananowy ekranowany
- Co może być gorsze od pożaru elektryka?
- daltonizm
- Mały Linux
- Superkondensator. Czy to się uda?
- Stare filmy o technice
- Zasilanie własnych konstrukcji przez PoE
- Jak działa domofon?
Najnowsze wątki
- 2025-11-05 Warszawa => C Programmer <=
- 2025-11-05 Rzeszów => International Freight Forwarder <=
- 2025-11-05 Warszawa => OSS System Administrator <=
- 2025-11-05 Gdańsk => Programista Delphi <=
- 2025-11-05 Warszawa => AWS Cloud Engineer <=
- 2025-11-05 Wrocław => Programista React ze znajomością C++ <=
- 2025-11-05 Wrocław => React Developer with knowledge of C++ <=
- 2025-11-04 A jednak o prawnikach
- 2025-11-04 Wyzwanie prawniczenia: Dlaczego poseł KO mecenas G. NIE JEST JUŻ "fujarą i miękiszonem"?
- 2025-11-04 Jak sie smazy elektronike z odleglosci kilkuset metrów?
- 2025-11-04 Warszawa => DevOps Engineer <=
- 2025-11-04 Warszawa => OSS System Administrator <=
- 2025-11-04 4 lata za zabicie czlowieka, czyli prawo w Polsce
- 2025-11-04 Warszawa => APM/Observability Engineer (Inżynier Presales) <=
- 2025-11-04 Zasieg elektrykow




Elektromobilność dojrzewa. Auta elektryczne kupujemy z rozsądku, nie dla idei