Rynek pracy STM32

Nie wiem, nie mam takiej potrzeby ich używania. Jak już coś pisze to piszę prosty kod zrozumiały dla mnie.

Reply to
Janusz
Loading thread data ...

W dniu 2022-07-21 o 16:25, Janusz pisze:

Prawie na pewno się mylisz. Funkcje wirtualne nigdy nie są realizowane poprzez modyfikowanie kodu w RAMie.

Z tego co pamiętam (Stroustrup pisał jak jego funkcje wirtualne mają być implementowane) to nie jest do tego wykorzystywane modyfikowanie kodu podczas pracy programu. P.G.

Reply to
Piotr Gałka

Przecież statyczny jest tak samo wywoływany, nie tu tkwi różnica, ale brnij dalej.

Polimorfizm dynamiczny na dużych maszynach był tak osiągany, czy teraz to nie wiem bo dawno w kod nie zaglądałem, pewnie ze względów bezpieczeństwa już tak nie robią tym bardziej że wielkość pamięci przestałą być krytyczna.

Reply to
Janusz

W dniu 2022-07-21 o 15:34, heby pisze:

To chyba o sobie piszesz :) bo ja już trochę programów napisałem i nie miałem takiego problemu. Może dlatego że zamiast szablonów to używam struktur np bitowych gdzie mam wszystko jasno opisane, ale wiem szablony sa lepsze :)

Reply to
Janusz

Czy GUIDy są zmienne? Pisałeś o statycznych.

To miejsce na tempaltes, jesli są statyczne.

class KlasaBazowa { public: KlasaBazowa( GUID const& _guid ) : m_guid( _guid ); [...] private: GUI const& m_guid; };

Więc w tej funkcji masz m_gui który jest typu GUID i o wartości jaką przekazano do konstruktora klasy bazowej.

static GUI konkretnyGUID = { };

class KlasaKonkretna : public KlasaBazowa { public: KlasaKonkretna() : KlasaBazowa( konkretnyGUID ) { [...] };

[...] };

Zaznaczam, że to nie jest optymalne. Tracisz 4 bajty na pole m_guid.

Poprawnie było by to zrobione za pomocą szablonów i techniki mixin. Klasa bazowa nie musiała by wtedy trzymać GUIDa, ale mogła by z niego korzystać dzięki specjalizacji szablonem.

Tak jak powyżej.

Hmmm... całośc tego wydaje mi się niejasna, co w zasadzie było problemem.

Niewątpliwie ten kod przydałby się w wersji invitro aby móc coś wiecej dysputować.

To metasłowa. Może być GORZAŁKA i ZAGRYCHA.

Nijak. Programiści musza czasami pokazać składnię czegoś w oderwaniu od konkretów. Używa się też "spam", "Alice" i kilku innych.

formatting link

Gcc ma flagę -Os? Symbole debugowe wyłaczone w docelowej binarce?

Raczej nie dam wiary, że jest tak źle. Prosty kod usb UARTa na STM32 zajmował jakies kilobajty. Ba, w małym AVR potrafili to zmieścić, z softwareową emulacją.

Reply to
heby

Jakich? Odrach?

No właśnie.

Kod polimorfizmu dynamicznego nie wymaga samomodyfikującego kodu, jesli tylko masz indirect jump/call. W AVR masz. Finito.

Reply to
heby

Nie masz pojęcia co piszesz. Kompilatory praktycznie nigdy nie produkują kodu samomodyfikującego, od dziesiątek lat. Nie ma znaczenia, czy na AVR czy RISCV. To jest bezużyteczna technika.

Nikt tego nie robi, poza trampolinami. Od dziesiątek lat nie piszemy kodu samomodyfikującego bo to jest najzwyczajniej niepotrzebne i utrudnia działanie potoków w CPU mocno je spowalniając.

Reply to
heby

Napisałeś kilkarazy, że nie działają, bo Harvard.

Tego nie dało się napisać prościej, aby wykazać ideę i działanie na AVR. Złośliwe - dodajmy, bo miało nie działać.

Reply to
heby

PC-tach.

Tylko wtedy niczym sie nie różni od statycznego.

Reply to
Janusz

Szkoda słów.

Kompilatory praktycznie nigdy nie produkują

A wiesz że pierwsze pc-ty nie miały potoków? nawet 486 i pentiumy nie miały, więc o czym piszesz, mało wiesz a sadzisz się jak kura na grzędzie. To że później ich ni ma to już napisałem, więc sobie daruj, ale informatyka czy programowanie nie zaczeło sie jak Ty zacząłeś pisać.

Reply to
Janusz

Czyli potwierdzasz, że nie pojmujesz w czym rzecz.

formatting link
Dynamiczny polimorfizm bazuje na wołaniu metod wirtualnych.

Statyczny bazuje na zamrożeniu tych wywołań na etapie kompilacji, przez co metody wirtualne przestają być potrzebne.

Tak z grubsza.

Reply to
heby

To było dziesiątki lat temu. Dlatego od dziesiatek lat nie stosujemy kodu samomodykującego.

486 miał potok, podobnie jak Pentium.

formatting link

Na razie wychodzisz na ignoranta. Jestes pewny, że widziałes kiedyś na oczy komputer? Współczesny? Taki po Odrze?

Chcesz mi powiedzieć, że całe to bredzenie o Harvardzie i samoodyfikującym się kodzie, to tylko dlatego, że jesteś kustoszem w muzeum?

To teraz jasne.

FYI: mamy już 2022. W mikrokontrolerach mamy C++. Mamy potoki w pierdołach wielkości główki zapałki, do migania diodą. Świat się rozwinął od czasu jak odpalałeś ostatni czas Odrę.

Reply to
heby

Jedyne co mi przychodzi na mysl, to jakies switch/case, gdzie mozna obliczyc adres skoku, a procesor nie ma stosownego rozkazu. No chyba, ze wrzucic adres na stos i zrobic RET.

A - i jeszcze 8080, gdzie nie bylo rozkazu IN/OUT z adresem w rejestrze. Tylko na stale umieszczony w kodzie, a mamy np

8 portow szeregowych do obsluzenia.

Plus wielozadaniowosc i przełaczanie zadan, przerwania, protekcja itp .

J.

Reply to
J.F

środa, 20 lipca 2022 o 21:56:23 UTC+2 Piotr Gałka napisał(a):

I to jest główny argument za pracowaniem na komputerze bez dostępu do internetu ;>

Taki powinien być w drugim pokoju albo w ogóle 100m dalej. Newsy to morderstwo. Kiedyś na studiach się zgadało o usenecie i pytam kolegi: "ty masz czas na czytanie grup?" (sam czytałem tylko śp. p.r.h.n.) - a on: "ty mnie lepiej spytaj, czy ja mam czas na cokolwiek innego" ;>

Reply to
Dawid Rutkowski

No to jeszcze spróbuję wymiany. Na razie zamieniałem między HDD a CD-ROM - ale żeby oba poszły? Choć CD-ROM działa źle, a chyba ostatnio w ogóle odłączyłem. Zamieniałem też między dwoma kontrolerami (płyta ma 6 gniazd z chipsetu + 2 z drugiego chipa, no i jeszcze IDE). Ew. to płyta (jeśli nie naprawdę dysk) - jakiś czas temu przestała działać wbudowana karta sieciowa. Tak nagle. PCIowy realtek z kolei ma przerwy w transmisji. Więc używam USB-ethernet. Chyba że to jego sterowniki psują kernel. Echh, nowy komputer to gorzej niż nowe spodnie - tym bardziej, że żona nie kupi...

Reply to
Dawid Rutkowski

czwartek, 21 lipca 2022 o 15:21:40 UTC+2 heby napisał(a):

Ja też nie rozumiem sensu szablonów. Jak tylko zobaczyłem, uznałem, że to to samo co define'y - a nieszczęsny zapis z <> odrzucił estetycznie. I przez to nie da się zrobić bibliotek closed-source. Polepszyło się coś od 2001? Tylko nie mieszajmy w to idei open-source i free software.

Reply to
Dawid Rutkowski

Pozwalają podejmować decyzje na etapie kompialcji. Ta niewielka cecha czyni z nich poteżne narzędzie, użyteczne w wielu sytuacjach. W embedded też. Być może tam w szczególności - niektóre konstrukcje pozwalają na absurdalnie dokładne optymalizacje kodu wynikowego.

Nie to samo. Główna rónica, jak już chcesz porównać, to ścisła kontrola typów, których w #define nie ma. #define to taki regexp/sed wbudowany w język, z masą problemów.

Da się.

W sensie templates? Cały nowoczesny C++ to głównie szablony. Robiące rzeczy o kłopotliwej w wyjasnieniu, przeciętnemu kilkaczowi w C, rzeczy. To mocno inny język.

Szablony nie musza być open-source, aczkolwiek ich uzytecznośc wtedy nie jest tak wielka.

Możesz mieć Foo< Bar > gdzieś w .hpp i biblitekę .a. Bez znajomości Foo i Bar.

Ogólnie interfejsy biblitek bardziej korzystają z szablonów (np. boost::optional< Foo >, std::shared_ptr< Bar >, itd) niż mają interfejs szablonowy. Skoro są closed source to raczej nie ba się korzystać z mozliwosci szablonów, bo one, aby były optymalnie wykorzystane, muszą widzieć kod, aby go zoptymalizować. Co nie znaczy że nie korzysta się z szablonów w closed-source. Jako narzędzie a nie cel.

Reply to
heby

Oczywiście że wiem. To ty się puszysz jak kogut w kurniku.

czyli calami wywołuje funkcje z rom, tylko wpierw musi wybadać typ zmiennej żeby wybadać gdzie skoczyć.

Czyli te same cale co wyżej tylko na stałe przypisane do wywołania bo kompilator wie jaki jest typ zmiennej i nic nie musi badać.

I tak z grubsza jest guano bo pakowane są wszystkie funkcje w zalezności od typu, czyli to samo co robi dotychczasowy amator pisząc osobne funkcje na kazdy typ zmiennej np: na wysyłanie znaku czy liczby. Jedyna zaleta że w wywołaniu ładnie wygląda po to jedna funkcja np: lcd.print() Jak widać postęp niewielki a kruszysz kopie jakby nie wiadomo co to było.

Reply to
Janusz

W dniu 2022-07-21 o 17:58, heby pisze:

Chłopcze, sam jesteś ignorantem, żegnam.

Reply to
Janusz

Kod wykonywany przez CPU, pochodzący z kompilacji C++ nie bada żadnych typów runtime. Zawartości wywołań wirtualnych również są statyczne. W kodzie nie znajdziesz ani jednej instrukcji warukowej, majacej na celu "wybadanie typu".

W obu wypadkach typy są przypisane na stałe, nie ma badania typów. Typy nie istnieją w kodzie wynikowym.

Jedyne miejsce, gdzie typy można "badać" to dynamic_cast<> i wymaga to wywołania jawnie w kodzie źródłowym, dotyczy wąskiego zakresu typów i w zasadzie nie polega na badaniu typu, tylko porownania pointera na coś magicznego.

W szablonach? Nie, tylko uzywany kod, po otymalizacji, która często kończy się zerową ilością kodu.

Szablony mogą nie genrować kodu, generować bardzo mało i generować bardzo dużo. Zalezy co chcesz nimi uzyskać.

Tak, nie, zależy.

Amator piszący osobne funcje i tak jest musi napisać w szablonach jak i w kodzie nieszablonowym - bo są różne i wymagają innych implementacji.

A wiec kompletnie dalej tego nie rozumiesz. Nawet przyłapywany co chwile na kłamstwach, brniesz dalej w ignorancję.

Reply to
heby

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.