Dziwny problem z kodem w C (gcc mips/pic32)

May 17, 2023 Last reply: 3 years ago 169 Replies

Bo mam projekty jeszcze robione w 4 i 5, każdy chce mi je remapowć ale przy tym oczywiście się wywala na moich bibliotekach. Mam już dość z tym walki, pod windą 2 wersji nie zainstalujesz bo mają wspólne zmienne i nawet dynamiczne przełączanie/mapowanie zmiennych nie pomaga. A tak w Ubuntu odpalam 7, pod W7 odpalam 5 i mam jeszcze XP gdzie odpalam najstarsze pod 4 i programy tylko dobrze pod Xp działające.

Ale męczysz. A długość tablicy w czym? W milach czy we wiorstach? A może w łokciach?

- Kierowniku ile mamy kopać ten rów?

- Od tego słupa do 15:00

Właściwe to już nie jest rocket science, po adresach symboli po konsolidacji całości widać co sąsiaduje przed najeżdżaną tablicą. Jeśli inna to jest pierwszym podejrzanym kandydatem do sprawdzenia. Wyszedł banał a liczyłem, że ten wyjątek powodowało coś ciekawszego.

Ja męczę? przecież to ty miałeś problem nie ja.

A długość tablicy w czym? W milach czy we wiorstach? A może

Skoro masz takie podejście to się wypisuję z tego tematu. Co nie zmienia postaci rzeczy ze funkcja jest zła.

Byłeś w wojsku? chyba nie, a ja byłem całe 2 lata i doskonale wiem co to znaczy.

Nie obrażaj się. Już inni próbowali Ci wytłumaczyć, że operator działa prawidłowo i tak ma być. Tylko trzeba pamiętać w jakich jednostkach operuje.

No nie, z dyskusji wynika że nie działa prawidłowo, i sam się na tym naciąłeś bo nazwa jego jnie odzwierciedla zakresu działania, więc powinien sie nazywać inaczej aby to jednoznacznie identyfikować np sizeof_byte czy coś w tym stylu.

Janusz <janusz snipped-for-privacy@o2.pl napisał(a):

Nie działa prawidłowo bo ma krótką nazwę? Pewnie printf() też źle działa bo nie drukuje na drukarce.

W dniu 20.05.2023 o 13:03, Grzegorz Niemirowski pisze:

Może przeczytaj jeszcze raz co napisałem, "bo nazwa jego nie odzwierciedla zakresu działania,"

Pewnie printf() też źle działa

Janusz <janusz snipped-for-privacy@o2.pl napisał(a):

Przeczytałem, nazwa jest według Ciebie zbyt krótka aby w pełni opisać działanie operatora. Tylko że tak jest ze wszystkimi funkcjami i operatorami w każdym języku. W Javie próbuje się pójść Twoim tokiem rozumowania i wychodzą tasiemce typu sizeofTakingTypeOrVariableAsArgumentAndReturningItsSizeInBytes(). W C przyjęto krótką konwencję aby kod był przejrzysty. Szczególnie, że nie ma z czym tego sizeof() pomylić, nie ma w C drugiego takiego operatora o podobnym działaniu. Jak nie wiesz co zwraca dany operator, to czytasz jego dokumentację. Nie bardzo sobie wyobrażam co chcesz osiągnąć. Nazwy tak opisowe, że sięganie po dokumentację będzie zbędne? Jak ktoś nie chce czytać dokumentacji, to niech znajdzie sobie inne zajęcie niż programowanie.

Będe się upierał, że wyszło dobrze :) Programista musi czytać opisy funkcji i operatorów a nie wybierać tylko ze względu na kojarzące się angielskie słowa.

W dniu 20.05.2023 o 14:45, Grzegorz Niemirowski pisze:

Zawsze można przesadzić, a operat jak widać nie jest uniwersalny.

Ale to nie ja mam problem, ja napisałem swoja funkcję i używam. Więc ten przytyk jest nie na miejscu.

Nie bardzo sobie wyobrażam co chcesz osiągnąć. Nazwy

Też tak uważam, tylko co z tego, można pisać a wystarczy słabszy dzień i popełnia się proste błędy które o dziwo przechodzą dalej.

On 20.05.2023 11:17, Janusz wrote: [...]

Operator zadziałał prawidłowo, tzn. zgodnie ze standardami C. Znajdź sobie jakiś, poszukaj rozdziału „Unary operators”, a tam opisu sizeof: „The sizeof operator yields the size (in bytes) of its operand…”

sobota, 20 maja 2023 o 17:52:41 UTC+2 Janusz napisał(a):

Seryjnie napisałeś _funkcję_ w C, która zwraca liczbę elementów tablicy? Zapodaj, bo to wręcz Święty Grall...

Po co mam szukać? Przecież to nie ja mam problem, tylko autor tego programu, ja piszę tylko że operator jest nie do końca dobrze zrobiony przez autorów kompilatora bo w C++ jak czytam dało się. A Ja sobie napisałem swoją funkcję i mi to lotto :)

On 20.05.2023 20:05, Janusz wrote: [...]

Być może o tym nie wiesz, ale ewidentnie *masz* problem… :-)

W dniu 20.05.2023 o 14:45, Grzegorz Niemirowski pisze:

Żeby kod był przejrzysty pisze się w C++ albo jeszcze jaśniejszych językach.

A ona jest napisana w C++?

"void Arduino_DataBus::writeIndexedPixels(uint8_t *data, uint16_t *idx, uint32_t len) { while (len--) { write16(idx[*(data++)]); } }"

Ok, nie ma sensu męczyć.

Tak.

Jeśli chcesz jakiegoś hardkoru to poszukaj sobie w bibotekach Ardiuno ciągu znaków ::~ albo template.

Jak to pokazuje embedowcom to czasami się zawieszają na jakimś asercie w mózgu. No bo jak to tak...

Ale co to, Arduino to jakaś biblia, wyrocznia? Czy ci twoi "embedowcy" to na Arduino chowani (w liceum, w drugiej połowie 90-tych, a właściwie w 1. klasie, więc 94/95, mieliśmy taki przedmiot "technika". Do "komputerów" nie doszliśmy - może i dobrze, bo w tym samym liceum na "informatyce" "dowiedziałem się", że początkiem wszelkiej informatyzacji było powstanie procesora 8086, w, jak sama nazwa wskazuje, 1986r. - a w podręczniku czy ćwiczeniach było tyle, że istnieje coś takiego jak Norton Commander - program swoją drogą genialny - nawet screeny były, ale chowanie dzieci na nortonie to tyle samo co embedowców na Arduino)? Jak tak to przestaję się dziwić wzmożeniu w temacie ;>

On 21/05/2023 08:58, Dawid Rutkowski wrote:x

Nie. Kuźnia nowych programistów.

De facto to oni nie będą mieli problemu z przejsciem na C++ w poważnej pracy później.

Z czasem nastapi wymiana pokoleniowa.

Nowi nie będą bredzić o wyższości C nad resztą świata, tylko wezmą narzedzie które nie dość, że znają, to jeszcze jest bardziej użyteczne niż patyk po dziadku.

To przyszli pracownicy dużych korpo kształtujących rynek.

Dokładnie ten trend pojawił się na początku 2000 roku. Nowi ludzie przyszli do dużych korpo i kopnęli w dupę zasusznych programistów C. Efektem czego dzisiaj możesz pisać o wiele większe aplikacje, w bardziej bezpieczny i wydajny sposób. A kto został w C, ten przegrał, choć ciągle miganie diodą całkiem łatwo napisać w C.

Nie mam zielonego pojęcia skąd to porównanie i nie wiem co chcesz osiągnąć.

W latach 80 i 90 obecne pokolenie programistów chowało się na asemblerze, basicu, rejestrach blittera czy obsłudze covoxa.

To, że szkoły były zapuszczone i pokazywały głównie Nortona i Taga nic nie zmianiło: hobbyści mieli swoje, znacząco bardziej twórcze zabawki niż kopiowanie plikow z lewa na prawo.

Szkoła, ale i dowolna inna instytucja państwowa, nigdy nie będzie nadążać za postępem. Jak ktoś jest zdolny, wyprzedzi program.

Musiałeś coś przespać, bo ogólnie dużych projektów w C nikt nigdzie już nie utrzymyje inaczej, niż pakujac w C++ i wrapując. Niektórzy mówią na to uszczelnianie szamba. Jak popracujesz z takim kodem to zrozumiesz dlaczego.

Aż poplułem ekran. Jasne. Szczególnie to widać wokół we wszystkim co otacza współczesnego człowieka. Telefony, telewizory, aplikacje w sieci jakie to bezpieczne a szczególnie wydajne, paradygmat "proszę czekać ładuje się". Wieszajace się i nie responsywne UI, nieprzewidywalne w zachowaniu aplikacje. No jakie to programowanie w C++ (i innym obiektowym badziewiu) daje rezultaty, super. Efekty zajebiste. Chyba tylko finansowe korporacji i programistów. Używałeś kiedyś UI Google ADS? Tego k..wa nie daje się używać. Każdy klik to 5-8 sekund czekania by interfejs zaregowal. I Google tego od

10 lat nie jest w stanie ogarnąć żeby to było używalne. GOOGLE najlepsi na świecie specjaliści. To jest przyszłość? Zajebiste wydajne te języki obiektowe. Super. I uważasz, że wszystko jest w porządku bo da się wydajnie i bezpiecznie zamigac LED w C++... Jprdl...

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required