eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Dziwny problem z kodem w C (gcc mips/pic32)
Ilość wypowiedzi w tym wątku: 171

  • 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

strony : 1 ... 9 . [ 10 ] . 11 ... 18


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: