-
91. Data: 2023-05-19 14:39:44
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: Janusz <j...@o...pl>
W dniu 19.05.2023 o 13:32, J.F pisze:
> On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
>> W dniu 18.05.2023 o 12:18, Marek pisze:
>>> On Thu, 18 May 2023 08:55:51 +0200, Janusz <j...@o...pl> wrote:
>>>> Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
>>>> zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
>>>> status.
>>>
>>> Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
>>>
>>> unsigned short BT[300];
>>> int i;
>>>
>>> for (i=0; i<sizeof(BT);i++)
>>> BT[i] = getval(i);
>>>
>>> Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
>>> tablicą ze wskaźnikami do stringów.
>> No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
>> chyba kompilator czy linkier nie ma tu błędu w adresacji?
>
> Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
> wiadomo gdzie.
Ale przecież po to używa funkcję czy co to tam jest żeby mu policzyło
długość tablicy, na palcach jej nie liczył, a że funkcja skopana to
wychodzą kwiatki.
>
>>> Na starość to trzepać worki po cemencie a nie programować....
>> Eee tam, ja mam już prawie 63 i dalej piszę programy i naprawiam
>> elektronikę.
>
> Ale potem takie krzaczki jak powyzej wychodzą :-)
Spokojnie ty też będziesz miał kiedyś tyle, zobaczy jak ci sie wtedy
optyka zmieni.
--
Janusz
-
92. Data: 2023-05-19 14:48:42
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: "J.F" <j...@p...onet.pl>
On Fri, 19 May 2023 12:54:13 +0200, Grzegorz Niemirowski wrote:
> JDX <j...@o...pl> napisał(a):
>> No, czyli, służą do czego innego, więc jedno nie jest workaroudem na brak
>> drugiego.
> Jest, bo na tym polega workaround, że używasz czegoś nieprzeznaczonego do
> danego celu. sizeof() nie służy do zwracania liczby elementów ale czasem
> może dać poprawny wynik (dla typu jednobajtowego). Przy typie wielobajtowym
> trzeba podzielić przez sizeof(typ_wielobajtowy). Można też w ogóle nie
> używać sizeof() ale mieć stałą definiującą rozmiar i używać jej zarówno do
> deklaracji tablicy jak i do dostępu do tej tablicy. Szczególnie przydatne
> jak ta tablica jest potem gdzieś przekazywana i ktoś przez roztargnienie
> mógłby zrobić sizeof() na wskaźniku i dostać (zwykle) 4 lub 8 zależnie od
> architektury zamiast rozmiaru tablicy.
W zwykłym C na przekazanej tablicy w ogole juz nie mozna ustalic
rozmiaru.
Jak rozmiar zmienny, to trzeba go jawnie przekazywać,
jak stały, to mozna coz z typami kombinować.
A sizeof to nawet nie funkcja, tylko operator i to "czasu kompilacji"
- kompilator ustala ile wynosi wartosc.
P.S. Nie ma jakis cudów związanych z rozmieszczeniem danych?
Chodzi mi po głowie, ze MIPS lubil na granicy słów 32-bit,
wiec np sruktura {int, char} może i ma 5 bajtów, ale
w tablicy takie struktury byłyby rozmieszczone co 8 ...
J.
-
93. Data: 2023-05-19 14:56:47
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: heby <h...@p...onet.pl>
On 19/05/2023 14:48, J.F wrote:
> Chodzi mi po głowie, ze MIPS lubil na granicy słów 32-bit,
> wiec np sruktura {int, char} może i ma 5 bajtów, ale
> w tablicy takie struktury byłyby rozmieszczone co 8 ...
Padding.
https://c-faq.com/struct/align.html
https://iq.opengenus.org/size-of-struct-in-c/
-
94. Data: 2023-05-19 15:56:35
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: "J.F" <j...@p...onet.pl>
On Fri, 19 May 2023 14:39:44 +0200, Janusz wrote:
> W dniu 19.05.2023 o 13:32, J.F pisze:
>> On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
>>> W dniu 18.05.2023 o 12:18, Marek pisze:
>>>> On Thu, 18 May 2023 08:55:51 +0200, Janusz <j...@o...pl> wrote:
>>>>> Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
>>>>> zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
>>>>> status.
>>>>
>>>> Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
>>>>
>>>> unsigned short BT[300];
>>>> int i;
>>>>
>>>> for (i=0; i<sizeof(BT);i++)
>>>> BT[i] = getval(i);
>>>>
>>>> Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
>>>> tablicą ze wskaźnikami do stringów.
>>> No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
>>> chyba kompilator czy linkier nie ma tu błędu w adresacji?
>>
>> Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
>> wiadomo gdzie.
> Ale przecież po to używa funkcję czy co to tam jest żeby mu policzyło
> długość tablicy, na palcach jej nie liczył, a że funkcja skopana to
> wychodzą kwiatki.
No ale widzisz - źle policzył, przekroczyl zakres,
a C NIE MA ZABEZPIECZEN.
I w miare dobrze, ze nie ma.
A funkcja dobra, tylko źle użyta.
>>>> Na starość to trzepać worki po cemencie a nie programować....
>>> Eee tam, ja mam już prawie 63 i dalej piszę programy i naprawiam
>>> elektronikę.
>> Ale potem takie krzaczki jak powyzej wychodzą :-)
> Spokojnie ty też będziesz miał kiedyś tyle, zobaczy jak ci sie wtedy
> optyka zmieni.
Trzeba umiec powiedzieć "dość" :-)
A tu jeszcze co chwila cos nowego wymyślaja i zaskakują człowieka na
stare lata ... i to w szczegółach, bo w ogółach to za tym postępem
trudno nadążyć :-(
J.
-
95. Data: 2023-05-19 16:10:48
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: io <i...@o...pl.invalid>
W dniu 18.05.2023 o 20:39, heby pisze:
> On 18/05/2023 20:30, Marek wrote:
...
>
> Co ciekawe, nawet Arduino wymusza pisanie w C++, tylko mało kto
> zauważył.
W jaki niby sposób wymusza?
-
96. Data: 2023-05-19 16:49:03
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: heby <h...@p...onet.pl>
On 19/05/2023 16:10, io wrote:
>> Co ciekawe, nawet Arduino wymusza pisanie w C++, tylko mało kto zauważył.
> W jaki niby sposób wymusza?
Przez dostarczenie ogromnej ilości biblitek napisanych w C++.
Pierwsza od reki:
https://github.com/moononournation/Arduino_GFX
-
97. Data: 2023-05-19 17:21:59
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: Janusz <j...@o...pl>
W dniu 19.05.2023 o 15:56, J.F pisze:
> On Fri, 19 May 2023 14:39:44 +0200, Janusz wrote:
>> W dniu 19.05.2023 o 13:32, J.F pisze:
>>> On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
>>>> W dniu 18.05.2023 o 12:18, Marek pisze:
>>>>> On Thu, 18 May 2023 08:55:51 +0200, Janusz <j...@o...pl> wrote:
>>>>>> Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
>>>>>> zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
>>>>>> status.
>>>>>
>>>>> Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
>>>>>
>>>>> unsigned short BT[300];
>>>>> int i;
>>>>>
>>>>> for (i=0; i<sizeof(BT);i++)
>>>>> BT[i] = getval(i);
>>>>>
>>>>> Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
>>>>> tablicą ze wskaźnikami do stringów.
>>>> No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
>>>> chyba kompilator czy linkier nie ma tu błędu w adresacji?
>>>
>>> Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
>>> wiadomo gdzie.
>> Ale przecież po to używa funkcję czy co to tam jest żeby mu policzyło
>> długość tablicy, na palcach jej nie liczył, a że funkcja skopana to
>> wychodzą kwiatki.
>
> No ale widzisz - źle policzył, przekroczyl zakres,
On czy funkcja?
> a C NIE MA ZABEZPIECZEN.
To wiadomo, po to użył funkcję.
>
> I w miare dobrze, ze nie ma.
>
> A funkcja dobra, tylko źle użyta.
No nie, jest skopana skoro działa wybiórczo.
A Ty wiedziałeś przed tym wątkiem że taki problem istnieje?
>
>>>>> Na starość to trzepać worki po cemencie a nie programować....
>>>> Eee tam, ja mam już prawie 63 i dalej piszę programy i naprawiam
>>>> elektronikę.
>>> Ale potem takie krzaczki jak powyzej wychodzą :-)
>> Spokojnie ty też będziesz miał kiedyś tyle, zobaczy jak ci sie wtedy
>> optyka zmieni.
>
> Trzeba umiec powiedzieć "dość" :-)
I wtedy już można się kłaść do trumny. Można zwolnić ale zatrzymanie
jest uziemiające już na stałe.
Ale ja wciąż czuję się młodo, mam wszystkie włosy i nawet jeszcze nie
całkiem siwe więc nadal daję rady, oczywiście w swoim tempie a nie w
takim jak otoczenie ode mnie oczekuje.
>
> A tu jeszcze co chwila cos nowego wymyślaja i zaskakują człowieka na
> stare lata ... i to w szczegółach, bo w ogółach to za tym postępem
> trudno nadążyć :-(
Ja akurat jestem 'techniczny' więc w miarę nadążam.
Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i Kicada
5 i coś tam jeszcze chodzące na windzie.
--
Janusz
-
98. Data: 2023-05-19 17:35:37
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: "J.F" <j...@p...onet.pl>
On Fri, 19 May 2023 17:21:59 +0200, Janusz wrote:
> W dniu 19.05.2023 o 15:56, J.F pisze:
>> On Fri, 19 May 2023 14:39:44 +0200, Janusz wrote:
>>> W dniu 19.05.2023 o 13:32, J.F pisze:
>>>> On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
>>>>> W dniu 18.05.2023 o 12:18, Marek pisze:
>>>>>> On Thu, 18 May 2023 08:55:51 +0200, Janusz <j...@o...pl> wrote:
>>>>>>> Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
>>>>>>> zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
>>>>>>> status.
>>>>>>
>>>>>> Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
>>>>>>
>>>>>> unsigned short BT[300];
>>>>>> int i;
>>>>>>
>>>>>> for (i=0; i<sizeof(BT);i++)
>>>>>> BT[i] = getval(i);
>>>>>>
>>>>>> Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
>>>>>> tablicą ze wskaźnikami do stringów.
>>>>> No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
>>>>> chyba kompilator czy linkier nie ma tu błędu w adresacji?
>>>>
>>>> Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
>>>> wiadomo gdzie.
>>> Ale przecież po to używa funkcję czy co to tam jest żeby mu policzyło
>>> długość tablicy, na palcach jej nie liczył, a że funkcja skopana to
>>> wychodzą kwiatki.
>>
>> No ale widzisz - źle policzył, przekroczyl zakres,
> On czy funkcja?
On.
>> a C NIE MA ZABEZPIECZEN.
> To wiadomo, po to użył funkcję.
>
>> I w miare dobrze, ze nie ma.
>> A funkcja dobra, tylko źle użyta.
> No nie, jest skopana skoro działa wybiórczo.
> A Ty wiedziałeś przed tym wątkiem że taki problem istnieje?
Jaki problem?
że sizeof zwraca, a własciwie to podaje, rozmiar w bajtach, to wiem.
że można zajechac obszar innej zmiennej w C, i nic przed tym nie
ostrzeże - to też wiem.
Markowi pogratulować, ze tak szybko namierzył miejsce problemu.
>> A tu jeszcze co chwila cos nowego wymyślaja i zaskakują człowieka na
>> stare lata ... i to w szczegółach, bo w ogółach to za tym postępem
>> trudno nadążyć :-(
> Ja akurat jestem 'techniczny' więc w miarę nadążam.
> Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
> postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i Kicada
> 5 i coś tam jeszcze chodzące na windzie.
A wiesz, ze juz jest W11 ? :-)
J.
-
99. Data: 2023-05-19 18:41:36
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: Jacek Radzikowski <j...@s...die.die.die.piranet.org>
On 5/19/23 11:21, Janusz wrote:
[...]
> Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
> postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i Kicada
> 5 i coś tam jeszcze chodzące na windzie.
Kompletnie OT, ale zżera mnie ciekawość: Dlaczego używasz Win do
odpalania KiCada, skoro ładnie działa na linuksie?
Jacek
-
100. Data: 2023-05-19 20:40:16
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: Janusz <j...@o...pl>
W dniu 19.05.2023 o 17:35, J.F pisze:
>>> I w miare dobrze, ze nie ma.
>>> A funkcja dobra, tylko źle użyta.
>> No nie, jest skopana skoro działa wybiórczo.
>> A Ty wiedziałeś przed tym wątkiem że taki problem istnieje?
>
> Jaki problem?
> że sizeof zwraca, a własciwie to podaje, rozmiar w bajtach, to wiem.
No to podaje prawidłowy rozmiar czy nie?
>
> że można zajechac obszar innej zmiennej w C, i nic przed tym nie
> ostrzeże - to też wiem.
Ale jakim prawem, w tej konstrukcji nie powinno do tego dojść, przecież
po to 'pytał' o długość tablicy aby nie przekroczyć zakresu. Skoro
przekracza to oznacza że funkcja jest zła. Koniec kropka.
>
> Markowi pogratulować, ze tak szybko namierzył miejsce problemu.
:)
>
>>> A tu jeszcze co chwila cos nowego wymyślaja i zaskakują człowieka na
>>> stare lata ... i to w szczegółach, bo w ogółach to za tym postępem
>>> trudno nadążyć :-(
>> Ja akurat jestem 'techniczny' więc w miarę nadążam.
>> Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
>> postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i Kicada
>> 5 i coś tam jeszcze chodzące na windzie.
>
> A wiesz, ze juz jest W11 ? :-)
No i co z tego?Obaj moi synowie go mają a ja nie chcę.
--
Janusz