RTV forum PL | NewsGroups PL

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

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Dziwny problem z kodem w C (gcc mips/pic32)

Goto page Previous  1, 2, 3, ... 10, 11, 12  Next

Dawid Rutkowski
Guest

Thu May 18, 2023 2:13 pm   



czwartek, 18 maja 2023 o 14:01:30 UTC+2 Marek napisał(a):
Quote:
On Thu, 18 May 2023 04:08:13 -0700 (PDT), Dawid Rutkowski
drut...@wp.pl> wrote:
To nie turbo pascal tylko C na uC - i tak się dziwię, że OP
pisze tu o jakichś wyjątkach, może to w wersji mips pod jaki
mś unixem.
Błagam, przecież pic32 to pełen mips dlaczego nie ma mieć wyjątków??
Ma nawet wsparcie częściowe do VM user/kernel space. A MZy nawet
TBLe do translacji adresów wirtualnych. Na ATmega8 świat się nie
kończy...

O, nawet się nie zainteresowałem, że pic32 to mips - sądziłem, że się bardziej wysilili.
Wszystko kwestia kosztu, w tym ilości RAMu - 386 było już w 1986,
ja miałem już w 1933, a Linux Torvalds, dla zbawienia ludzkości, na szczęście już w 1990 (chyba).

No ale żeby się nie kopać po kostkach, to i na 386 można sobie puszczać jeden program (tak narodził
się Linux - Linusowi nie podobał się emulator terminal w minixie, więc napisał własny,
działający na "gołym" 386 - ale 32-bitowym), i pewnie na pic32 też - ale żeby były
wyjątki obsługiwane, to coś tam jeszcze trzeba albo dokompilować - w stylu eCosa,
czyli jednozadaniowego, wielowątkowego systemu operacyjnego - lub coś po prostu
puszczać, w stylu Linuxa czy innego OSa.
Więc co tam jeszcze masz?
Czy wszystko, łącznie z obsługą wyjątków, jest w tych 75k linii kodu? Bo można i tak,
choć ciekawi, jak te wyjątki obsługujesz.

Dawid Rutkowski
Guest

Thu May 18, 2023 2:14 pm   



czwartek, 18 maja 2023 o 13:54:05 UTC+2 Grzegorz Niemirowski napisał(a):
Quote:
heby <he...@poczta.onet.pl> napisał(a):
Słusznie. Pozwólcie, że wsadzę kij w mrowisko i pokażę co należy używać od
kilku lat:
https://en.cppreference.com/w/cpp/iterator/size
A bodaj od 20 lat jest w boost.
Ale to trzeba zacząć C++ używać Smile

Zaraz usłyszysz, że "jest za darmo" ;>

heby
Guest

Thu May 18, 2023 2:37 pm   



On 18/05/2023 13:54, Grzegorz Niemirowski wrote:
Quote:
https://en.cppreference.com/w/cpp/iterator/size
A bodaj od 20 lat jest w boost.
Ale to trzeba zacząć C++ używać Smile

Tak. Trzeba zmienić 2 litery w nazwie kompilatora na dwa +.

Dawid Rutkowski
Guest

Thu May 18, 2023 2:59 pm   



czwartek, 18 maja 2023 o 14:39:29 UTC+2 heby napisał(a):
Quote:
On 18/05/2023 13:54, Grzegorz Niemirowski wrote:
https://en.cppreference.com/w/cpp/iterator/size
A bodaj od 20 lat jest w boost.
Ale to trzeba zacząć C++ używać Smile
Tak. Trzeba zmienić 2 litery w nazwie kompilatora na dwa +.

I to wystarczy, żeby sizeof zaczął oznaczać liczbę elementów tablicy?
Analogicznie do dowodu nie wprost:
"Jedna rana stanowczo śmiertelna, ale pozostałe dadzą się wyleczyć!"

Marek
Guest

Thu May 18, 2023 3:04 pm   



On Thu, 18 May 2023 05:13:49 -0700 (PDT), Dawid Rutkowski
<drutkow1@wp.pl> wrote:
Quote:
t w tych 75k linii kodu? Bo można i tak,
choć ciekawi, jak te wyjątki obsługujesz.

Wyjątki obsługuje funkcja przypisana do exception handler, ją już
wywołuje core procesorami. Jest kilka wyjątków:

static enum {
      EXCEP_IRQ = 0,            // interrupt
      EXCEP_AdEL = 4,            // address error exception (load or
ifetch)
      EXCEP_AdES,                // address error exception (store)
      EXCEP_IBE,                // bus error (ifetch)
      EXCEP_DBE,                // bus error (load/store)
      EXCEP_Sys,                // syscall
      EXCEP_Bp,                // breakpoint
      EXCEP_RI,                // reserved instruction
      EXCEP_CpU,                // coprocessor unusable
      EXCEP_Overflow,            // arithmetic overflow
      EXCEP_Trap,                // trap (possible divide by zero)
      EXCEP_IS1 = 16,            // implementation specfic 1
      EXCEP_CEU,                // CorExtend Unuseable
      EXCEP_C2E                // coprocessor 2
  } _excep_code;


Oczywiście można po wyjątku wyjść z handlera i działać dalej ale w
moim przypadku handler zapamiętuje co i gdzie się wydarzyło i
zatrzymuje kod aż watchdog zresetuje procesor.

Kiedyś na MZ zrobiłem małego OSa z ochroną pamięci, obsługą pamięci
wirtualnej i TBLami, ładowaniem procesów itp... Skończyło się tylko
na tym, że jeden proces wypisywał AAA a drugi BBB na konsoli
(zbieżność z początkiem innego OSa przypadkowa).
Zresztą na MZ można uruchomić pełnego Linuxa więc....

--
Marek

heby
Guest

Thu May 18, 2023 3:06 pm   



On 18/05/2023 14:59, Dawid Rutkowski wrote:
Quote:
https://en.cppreference.com/w/cpp/iterator/size
A bodaj od 20 lat jest w boost.
Ale to trzeba zacząć C++ używać Smile
Tak. Trzeba zmienić 2 litery w nazwie kompilatora na dwa +.
I to wystarczy, żeby sizeof zaczął oznaczać liczbę elementów tablicy?

To wystarczy aby "trzeba zacząć C++ używać".

W przypadku oznaczania tablicy przez std::size, należy się jeszcze
upewnić, że kompilator i bibliteki są zgodne, bodaj, z C++17, lub, że ma
się 20 letni kompilator wspierany przez 20 letni boost, jeśli z jakiegoś
powodu ma się 20 letni kompilator.

Quote:
Analogicznie do dowodu nie wprost:
"Jedna rana stanowczo śmiertelna, ale pozostałe dadzą się wyleczyć!"

W sensie że zamiana dwóch literek na dwa + to śmiertelna rana? Jeśli to
coś popsuje, to i tak miałeś popusty kod wcześniej. Zwyczajowo nic nie
popsuje.

A mówią, że nie ma darmowych obiadów.

Grzegorz Niemirowski
Guest

Thu May 18, 2023 3:17 pm   



heby <heby@poczta.onet.pl> napisał(a):
Quote:
Tak. Trzeba zmienić 2 litery w nazwie kompilatora na dwa +.

I od tego Marek zostanie programistą C++?

--
Grzegorz Niemirowski
https://www.grzegorz.net/

heby
Guest

Thu May 18, 2023 3:18 pm   



On 18/05/2023 15:17, Grzegorz Niemirowski wrote:
Quote:
Tak. Trzeba zmienić 2 litery w nazwie kompilatora na dwa +.
I od tego Marek zostanie programistą C++?

Nie. Zapewne dlatego wyciałeś cycta wyżej. Od tego może "zacząć C++ używać".

Grzegorz Niemirowski
Guest

Thu May 18, 2023 3:28 pm   



heby <heby@poczta.onet.pl> napisał(a):
Quote:
Nie. Zapewne dlatego wyciałeś cycta wyżej. Od tego może "zacząć C++
używać".

Wyciąłem, bo pisząc o zaczęciu nie miałem na myśli wykonania kroku, który
tak naprawdę nic nie zmienia. Język kodu nie zależy od nazwy kompilatora.
Ba, możesz nawet napisać kod i go nie skompilować. Oni tego nie sprawdzają
Smile Podobnie czytając książkę o programowaniu rozpoznasz język bez używania
żadnego narzędzia. Kolega KS zacznie używać C++ gdy zacznie używać jego
mechanizmy i porzuci nawyki z C.

--
Grzegorz Niemirowski
https://www.grzegorz.net/

heby
Guest

Thu May 18, 2023 3:37 pm   



On 18/05/2023 15:28, Grzegorz Niemirowski wrote:
Quote:
Nie. Zapewne dlatego wyciałeś cycta wyżej. Od tego może "zacząć C++
używać".
Wyciąłem, bo pisząc o zaczęciu nie miałem na myśli wykonania kroku,
który tak naprawdę nic nie zmienia.

Krok ten zmienia bardzo wiele. Nagle nie masz wymówki, że się nie da
pisać lepiej.

W momencie jak masz C++, zrobienie buga na sizeof jest dalej możliwe,
ale znacząco bardziej wstydliwe, a po kilku latach praktyki, praktycznie
trudne.

Trzymanie się tej meldy "ja od zawsze pisałem w C i nie mogę używać
std::size" jest tym mniej sensowne im bardziej rozumiesz jaki jest koszt
przejścia na C++. Zerowy, choć są koszta ideologiczne.

Quote:
Język kodu nie zależy od nazwy
kompilatora.

To częsciowo prawda, g++ i gcc tak naprawdę róznią się tylko detalami.

Quote:
Ba, możesz nawet napisać kod i go nie skompilować. Oni tego
nie sprawdzają Smile Podobnie czytając książkę o programowaniu rozpoznasz
język bez używania żadnego narzędzia.

Filozofujesz.

Prawda taka, że społecznośc programistów embedded zazwyczaj jest o mały
krok od zamiany kijka na siekierkę i to za friko. Ale z jakiejś
przyczyny nie chcą. I nikt, do dzisiaj, nie wyjaśnił mi jaki koszt
ponoszą zmieniajac 2 literki w nazwie kompialtora i dostając masę nowych
ficzerów.

Quote:
Kolega KS zacznie używać C++ gdy
zacznie używać jego mechanizmy i porzuci nawyki z C.

Nie. Mechniazmów C++ możesz używać dowolnych, w dowolnym momencie. Nikt
nie porzuca C, nie ma takiej potrzeby. W C++ jest masa ułatwień, któe
znakomicie przydadzą się w C bez potrzeby rezygnacji i dysonansu
ideologicznego. std::size to jedno z setek, użytecznych w embedded,
ułatwień, za darmo.

Grzegorz Niemirowski
Guest

Thu May 18, 2023 3:52 pm   



heby <heby@poczta.onet.pl> napisał(a):
Quote:
Filozofujesz.

Ciekawe stwierdzenie jak na kogoś, kto daje poradę odnoszącą się do innego
języka niż używa pytający Smile A potem rozważasz jaka super jest zmiana gcc na
g++ w Makefile.

--
Grzegorz Niemirowski
https://www.grzegorz.net/

Dawid Rutkowski
Guest

Thu May 18, 2023 3:55 pm   



czwartek, 18 maja 2023 o 15:04:31 UTC+2 Marek napisał(a):
Quote:
On Thu, 18 May 2023 05:13:49 -0700 (PDT), Dawid Rutkowski
drut...@wp.pl> wrote:
t w tych 75k linii kodu? Bo można i tak,
choć ciekawi, jak te wyjątki obsługujesz.
Wyjątki obsługuje funkcja przypisana do exception handler, ją już
wywołuje core procesorami. Jest kilka wyjątków:

static enum {
EXCEP_IRQ = 0, // interrupt
EXCEP_AdEL = 4, // address error exception (load or
ifetch)
EXCEP_AdES, // address error exception (store)
EXCEP_IBE, // bus error (ifetch)
EXCEP_DBE, // bus error (load/store)
EXCEP_Sys, // syscall
EXCEP_Bp, // breakpoint
EXCEP_RI, // reserved instruction
EXCEP_CpU, // coprocessor unusable
EXCEP_Overflow, // arithmetic overflow
EXCEP_Trap, // trap (possible divide by zero)
EXCEP_IS1 = 16, // implementation specfic 1
EXCEP_CEU, // CorExtend Unuseable
EXCEP_C2E // coprocessor 2
} _excep_code;


Oczywiście można po wyjątku wyjść z handlera i działać dalej ale w
moim przypadku handler zapamiętuje co i gdzie się wydarzyło i
zatrzymuje kod aż watchdog zresetuje procesor.

A, OK, dzięki, to całkiem fajne, choć w typowych zastosowaniach uC przydaje się tylko do debugowania
przekroczeń pamięci - ale to też się przyda.

Quote:
Kiedyś na MZ zrobiłem małego OSa z ochroną pamięci, obsługą pamięci
wirtualnej i TBLami, ładowaniem procesów itp... Skończyło się tylko
na tym, że jeden proces wypisywał AAA a drugi BBB na konsoli
(zbieżność z początkiem innego OSa przypadkowa).

Ja zrobiłem na ATmegę dwa wątki wywłaszczane (no bo procesy bez ochrony pamięci są bez sensu).
Ale nie mam pomysłu, do czego użyć tego w praktyce.

Quote:
Zresztą na MZ można uruchomić pełnego Linuxa więc....

Linux, przy całym swym bogactwie, ma jedną wadę - nie jest systemem czasu rzeczywistego.
A olbrzymia większość tego, co robiłem na uC, jest przynajmniej soft real-time.
I w sumie nic dziwnego - od nie-real-time mamy PC-ty z Linuxem.

Dawid Rutkowski
Guest

Thu May 18, 2023 3:58 pm   



czwartek, 18 maja 2023 o 15:06:53 UTC+2 heby napisał(a):
Quote:
On 18/05/2023 14:59, Dawid Rutkowski wrote:
https://en.cppreference.com/w/cpp/iterator/size
A bodaj od 20 lat jest w boost.
Ale to trzeba zacząć C++ używać Smile
Tak. Trzeba zmienić 2 litery w nazwie kompilatora na dwa +.
I to wystarczy, żeby sizeof zaczął oznaczać liczbę elementów tablicy?
To wystarczy aby "trzeba zacząć C++ używać".

Jako przycisku do papieru ;>

Quote:
W przypadku oznaczania tablicy przez std::size, należy się jeszcze
upewnić, że kompilator i bibliteki są zgodne, bodaj, z C++17, lub, że ma
się 20 letni kompilator wspierany przez 20 letni boost, jeśli z jakiegoś
powodu ma się 20 letni kompilator.

Mój zaraz będzie 17-letni. Prawie "stara dupa" ;>

Quote:
Analogicznie do dowodu nie wprost:
"Jedna rana stanowczo śmiertelna, ale pozostałe dadzą się wyleczyć!"
W sensie że zamiana dwóch literek na dwa + to śmiertelna rana? Jeśli to
coś popsuje, to i tak miałeś popusty kod wcześniej. Zwyczajowo nic nie
popsuje.

Nie, odwrotnie.
Zmienić dwie literki - proste, ale nie wystarczy.
Może wystarczą następne kroki - ale one są już o wiele, wiele trudniejsze.

Zaś "zwyczajowo" - to samo raczej nic nie poprawi. Popsuć może.

heby
Guest

Thu May 18, 2023 4:00 pm   



On 18/05/2023 15:52, Grzegorz Niemirowski wrote:
Quote:
Filozofujesz.
Ciekawe stwierdzenie jak na kogoś, kto daje poradę odnoszącą się do
innego języka niż używa pytający Smile

Pytający używa subsetu C++ o nazwie C, nie posiadający żadnych
widocznych zalet względem pełnego setu.

Istnieje bezpieczny i przeznaczony do takich zastosowań element języka
poza tym subsetem.

Przeniesięnie się z subsetu do przestrzeni gdzie istnieje to rozwiązanie
jest obarczone zerowym kosztem.

W przestrzeni tej istnieje też wiecej rozwiązań probemów, o których
jeszcze nie wiesz, że są problemami rozwiązanymi 20 lat temu.

Quote:
A potem rozważasz jaka super jest
zmiana gcc na g++ w Makefile.

Bo to, co zgrabnie wyciąłeś, okresla koszt "zacząć C++ używać". To nie
jest operacja zatrzymująca firmę na miesiąc. To operacja, której
wiekszosc programistów nawet nie zauważy. Dlatego wymówka "zacząć C++
używać" wymaga odpowiedzi, bo często podczas dysput z embedowcami
pojawia się jako heroiczny wysiłek i zwiększenie wsadu do flasha o
gigabajty w/g opini zasłyszanej od kolegi szwagra z sąsiedniej firmy.

heby
Guest

Thu May 18, 2023 4:01 pm   



On 18/05/2023 15:58, Dawid Rutkowski wrote:
Quote:
Zmienić dwie literki - proste, ale nie wystarczy.
Może wystarczą następne kroki - ale one są już o wiele, wiele trudniejsze.

A co jeszcze musisz zmienić *zanim* zaczniesz używać std::size, poza "++"?

Możesz podać listę tych kroków?

Quote:
Zaś "zwyczajowo" - to samo raczej nic nie poprawi. Popsuć może.

A co może popsuć?

Goto page Previous  1, 2, 3, ... 10, 11, 12  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Dziwny problem z kodem w C (gcc mips/pic32)

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map