-
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
- Korekcja perspektywy
- Wentylator zabija zasilacze LEDek?
- Re: Kompensacja mocy biernej przy 230VAC
- Totaliztyczny obowiązek naprawy maszyn i urządzeń
- Niby uziom ale nie
- Położyłem dwa telefony obok siebie
- Przekaźnik na szynę DIN (?)
- Taśma LED
- Jak odróżnić myjki wibrujące od ultradźwiękowych.
- Ledy na wyłączniku czasowym błyskają
- Re: Kompensacja mocy biernej przy 230VAC
- Re: Kompensacja mocy biernej przy 230VAC
- RCD wybija
- Re: Kompensacja mocy biernej przy 230VAC
- Łożysko ślizgowe - jaki olej
Najnowsze wątki
- 2025-04-14 Odpowiedzialność cywilna publicznej szkoły podstawowej za molestowanie seksualne dziecka przez nauczyciela
- 2025-04-14 Szczecin => Key Account Manager (ERP) <=
- 2025-04-14 Warszawa => Java Full Stack Developer (Angular2+ experience) <=
- 2025-04-14 Warszawa => Java Full Stack Developer (Angular2+) <=
- 2025-04-14 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2025-04-14 Kraków => NMS System Administrator <=
- 2025-04-14 Kraków => NMS System Administrator <=
- 2025-04-14 Zielona Góra => Konsultant wdrożeniowy Comarch XL (Logistyka, WMS, P
- 2025-04-14 Warszawa => Fullstack PHP Developer <=
- 2025-04-14 Ostrów Wielkopolski => Konsultant Wdrożeniowy Comarch XL/Optima (Ksi
- 2025-04-14 t-mobile z dodatkiem perplexity_ai
- 2025-04-14 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2025-04-14 Kazdy z nas móglby to napisac
- 2025-04-14 kontrolowanie tego czy wpłaty faktycznie pochodzą od różnych darczyńców jest niemożliwe
- 2025-04-14 Korekcja perspektywy