-
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
- Smar do video
- Litowe baterie AA Li/FeS2 a alkaliczne
- "ogrodowa linia napowietrzna"
- jaki zasilacz laboratoryjny
- jaki zasilacz laboratoryjny
- Puszka w ziemię
- T-1000 was here
- Ściąganie hasła frezem
- Koszyk okrągły, walec 3x AA, na duże paluszki R6
- Brak bolca ochronnego ładowarki oznacza pożar
- AMS spalony szybkim zasilaczem USB
- stalowe bezpieczniki
- Wyświtlacz ramki cyfrowej
- bateria na żądanie
- pradnica krokowa
Najnowsze wątki
- 2025-02-06 PROGRAM DOPŁAT DO AUT ELEKTRYCZNYCH TO ABSURD. ZA ŚRODKI Z KPO KUPIMY NIEMIECKIE I CHIŃSKIE AUTA
- 2025-02-05 ceny OC
- 2025-02-05 Re: ceny OC
- 2025-02-05 Re: ceny OC
- 2025-02-07 Smar do video
- 2025-02-06 Litowe baterie AA Li/FeS2 a alkaliczne
- 2025-02-07 Gliwice => Business Development Manager - Network and Network Security
- 2025-02-07 Warszawa => System Architect (Java background) <=
- 2025-02-07 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-02-07 Warszawa => Solution Architect (Java background) <=
- 2025-02-07 Gliwice => Ekspert IT (obszar systemów sieciowych) <=
- 2025-02-07 Lublin => Programista Delphi <=
- 2025-02-07 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-02-07 Dęblin => Node.js / Fullstack Developer <=
- 2025-02-07 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo