RTV forum PL | NewsGroups PL

Rynek pracy STM32

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Rynek pracy STM32

Goto page Previous  1, 2, 3 ... , 22, 23, 24  Next

Janusz
Guest

Thu Jul 21, 2022 7:20 pm   



W dniu 2022-07-21 o 17:58, heby pisze:
Quote:
Na razie wychodzisz na ignoranta. Jestes pewny, że widziałes kiedyś na
oczy komputer? Współczesny? Taki po Odrze?
Chłopcze, sam jesteś ignorantem, żegnam.


heby
Guest

Thu Jul 21, 2022 7:33 pm   



On 21/07/2022 21:18, Janusz wrote:
Quote:
https://www.modernescpp.com/index.php/dynamic-and-static-polymorphism
Dynamiczny polimorfizm bazuje na wołaniu metod wirtualnych.
czyli calami wywołuje funkcje z rom, tylko wpierw musi wybadać typ
zmiennej żeby wybadać gdzie skoczyć.

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".

Quote:
Statyczny bazuje na zamrożeniu tych wywołań na etapie kompilacji,
przez co metody wirtualne przestają być potrzebne.
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ć.

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.

Quote:
I tak z grubsza jest guano bo pakowane są wszystkie funkcje w zalezności
od typu

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ć.

Quote:
, czyli to samo co robi dotychczasowy amator pisząc osobne
funkcje na kazdy typ zmiennej np: na wysyłanie znaku czy liczby.

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.

Quote:
Jedyna
zaleta że w wywołaniu ładnie wygląda po to jedna funkcja np: lcd.print()

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

heby
Guest

Thu Jul 21, 2022 7:34 pm   



On 21/07/2022 21:20, Janusz wrote:
Quote:
Na razie wychodzisz na ignoranta. Jestes pewny, że widziałes kiedyś na
oczy komputer? Współczesny? Taki po Odrze?
Chłopcze, sam jesteś ignorantem,  żegnam.

To się kiedyś *plonk* nazywało, ale na Odrze mogło jeszcze nie być.

Dawid Rutkowski
Guest

Thu Jul 21, 2022 7:56 pm   



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

Quote:
W tym tygodniu miałem pilnie coś zrobić (pierwsza płytka po
przeniesieniu się do KiCad V6) na czwartek (promocja w Techno-service).
A tymczasem poniedziałek i wtorek zeszedł ma na p.m.e.
Choć to malutka płytka to nowe footprinty itp. Choć dziś już się za to
wziąłem to jeszcze nie skończyłem.

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" ;>

Dawid Rutkowski
Guest

Thu Jul 21, 2022 8:12 pm   



środa, 20 lipca 2022 o 22:49:05 UTC+2 heby napisał(a):
Quote:
On 20/07/2022 21:52, Dawid Rutkowski wrote:
Paranoicznie czasami dodaje md5, bo miałem nieprzyjemne problemy z
kablami sata.
O, a co się może dziać przez kable sata?
Naiwnie zakładałem że nic. Przecież transmisje są z sumami kontrolnymi
od czasu UDMA133.

A dzieje się coś takiego:
1) zapisuje grzecznie
2) kabel ma *nagle* jakiś problem
3) w dmasg widzę tysiace komunikatów "dma error, ble ble, retrying".
4) po chwili pliki uszkodzone bo kernel się poddał i nie zapisał
jakiegoś bloku.

Wymieniłem kabel w akcie desperacji i nagle wszystko działa.

Wniosek: sumy kontrolne to fajna sprawa, ale istnieje limit zapisów ze
zła sumą kontrolną...

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...

Janusz
Guest

Thu Jul 21, 2022 8:36 pm   



Powiem krótko, pierdol się, jesteś bucem i tyle.

Dawid Rutkowski
Guest

Thu Jul 21, 2022 8:36 pm   



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

Quote:
Nie rozumiesz sensu szablonów.

Bywa, że wynikiem skomplikowanego kodu w szablonach jest *nic*. Albo 1
liczba. Albo gigabajt kodu. Wkładasz szablony do worka "dużo" bo nigdy w
życiu ich nie używałeś do czegokolwiek. Po prostu wydaje Ci się, że dużo
kodu źrłodłwego musi wygenerować dużo asemblera. A tu jest czasami
odwrotnie.

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.

heby
Guest

Thu Jul 21, 2022 8:42 pm   



On 21/07/2022 22:36, Janusz wrote:
Quote:
Powiem krótko, pierdol się, jesteś bucem i tyle.

Fakty potafią boleć. Ja wiem.

Janusz
Guest

Thu Jul 21, 2022 9:56 pm   



W dniu 2022-07-21 o 22:42, heby pisze:
Quote:
On 21/07/2022 22:36, Janusz wrote:
Powiem krótko, pierdol się, jesteś bucem i tyle.

Fakty potafią boleć. Ja wiem.
Dupa a nie fakty, ja dyskutując z tobą starałem się ciebie nie obrażać a

ty ciągle robisz wycieczki osobiste i mnie obrażasz, nazywasz mnie
kłamcą, nieukiem itd. a tymczasem ja mam prawo mieć swoje zdanie,
programować można na wiele różnych sposobów bel osiągnąć właściwy cel. A
ty tonem wszystkowiedzącego narzucasz tylko swój punkt widzenia a co nie
pasuje to mieszasz z błotem. Czyli zachowujesz się jak typowy gbur,
zarozumiały buc i prostak który bez wycieczek osobistych nie potrafi
dyskutować.

--
Janusz

heby
Guest

Fri Jul 22, 2022 7:11 am   



On 21/07/2022 23:56, Janusz wrote:
Quote:
On 21/07/2022 22:36, Janusz wrote:
Powiem krótko, pierdol się, jesteś bucem i tyle.
Fakty potafią boleć. Ja wiem.
Dupa a nie fakty

Jesteś na etapie ich negowania.

Quote:
, ja dyskutując z tobą starałem się ciebie nie obrażać

Ale Ci nie wychodzi.

Quote:
a
ty ciągle robisz wycieczki osobiste i mnie obrażasz, nazywasz mnie
kłamcą, nieukiem itd.

Oczywiście. Informacja o potoku jest w 2-gim akapicie wikipedii o 486.
Zanim napisałeś, nawet nie sprawdziłeś.

Quote:
a tymczasem ja mam prawo mieć swoje zdanie,

To się świetnie sprawdza w sztuce, ale nie w naukach ścisłych.
Szczególnie że nie piszesz "moim zdaniem 486 nie ma potoków" tylko
piszesz, że nie ma i już. To jest kłamstwo. Do sprawdzenia w 3 sekundy.
To samo ze statycznym i dynamicznym polimorfizmem, co do których nie
masz śladu pojęcia czym są. To nie są opinie. To są kłamstwa.

Quote:
programować można na wiele różnych sposobów bel osiągnąć właściwy cel.

Ale mimo to ludzkośc znalazła wspólne nazwy i techniki, pozwalajace jej
porozumiewać się w sposób ścisły. Tu nie ma miejsca na swoje koncepcje.
Szczególnie, że w Twoim przypadi te koncpecje są biegunowo odległe od
rzeczywistości.

Quote:
A
ty tonem wszystkowiedzącego narzucasz tylko swój punkt widzenia

Ostatnio głównie cytuje definicje, z którymi się nie zgadzasz i
prezentuje przykłady, które w/g Ciebie nie mają prawa działać. To nie
jest mój punkt widzenia.

Tak naprawdę masz nikłą wiedzę w tych tematów. Zgaduje, że
najzwyczajniej świat Ci uciekł jakieś 20 lat temu i nie dogoniłeś go.
Ale dalej uważasz, że *wydaje* Ci sie, jak to ma działać, więc na pewno
tak działa. No więc nie.

Quote:
a co nie
pasuje to mieszasz z błotem.

Cytujac definicje? Jesteś jednym z tych ludzi, którzy uważają prawdę za
obraźliwą? Kompilatory C++ nie działają, jak myślisz. Runtime
generowanego kudu nie działa, jak myślisz. Procesory mają potoki,
odwrotnie jak myślisz. To Cie miesza z błotem? Że świat działą inaczej?

Quote:
Czyli zachowujesz się jak typowy gbur,
zarozumiały buc i prostak który bez wycieczek osobistych nie potrafi
dyskutować.

Przecież sam wpadłeś w środek *grzecznej* i bardzo miłej dyputy z butam,
wrzeszcząć coś o Harvardzie, nie mając pojęcia jak działa współczesny
procesor, posługując się stosem kłamstw i bredni. Buc? Oglądałeś się
ostatnio w lusterku? Gdybys tu nie wpadł ze swoją ignorancją dysputa
grzecznie by się zakończyła. A tak, nie możesz odpuścić, zamiast
dopuścić fakt, ze nie wiesz co mówisz.

Dostałeś to, z czym przyszedłeś. Dostałeś w łeb starając się ustawić
dyskutanta do pionu. Obnażono trudne do przełknięcia fakty, że nie masz
pojęcia o czym mówisz. Być może myślałeś że znasz się na czymś, ale nie
bierzesz pod uwagę, że *zawsze* są ludzie znający się na czymś lepiej i
należy najzwyczajniej uważać w pewności siebie. Tu jest pełno ludzi,
którzy znają się lepiej ode mnie na masie tematów i nie przyszło by do
głowy spierać się znimi o czymś, czego nie rozumiem. Dyskusja to nie
narzucanie punktów widzenia. Za to wpadanie w środek grzecznej dysputy z
ignorancją w ręku, już tak.

heby
Guest

Fri Jul 22, 2022 7:35 am   



On 21/07/2022 20:12, Dawid Rutkowski wrote:
Quote:
PCIowy realtek z kolei ma przerwy w transmisji.
Więc używam USB-ethernet.
Chyba że to jego sterowniki psują kernel.

Spawdzaleś z jakimś starszym Live Linuxem? Zazwyczaj odpalam wtedy
SystemRescueCD i puszczam jakiś prosty test sieciowy do wewnętrznego
serwera. Miałem już ze 3 razy, kiedy update kernela psuł ethernet,
głównie pod kątem wydajności. Czy to był Realtek, nie pamiętam, ale
jeden to na pewno był Marvell. Zazwyczaj dotyczyło to nowych chipów,
których sterowniki cągle miały problemy i co chwile w aktualizacji coś
zmieniali.

Quote:
Echh, nowy komputer to gorzej niż nowe spodnie - tym bardziej, że żona nie kupi...

Ta sieciówka naprawdę działa na PCI? Nie na PCIe? Ogólnie karty sieciowe
PCIe tanie są... to z usb to padlina, ma spore opóźnienia Wink

Piotr Gałka
Guest

Fri Jul 22, 2022 10:23 am   



W dniu 2022-07-21 o 16:41, heby pisze:
Quote:
On 21/07/2022 16:25, Piotr Gałka wrote:
Chciałem móc przekazać GUID jako parametr konstruktora - chyba mi się
nie udało.

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

To miejsce na tempaltes, jesli są statyczne.

Tak na prawdę to nie wiem co chciałem i na czym poległem (za dawno było).
Pamiętam jedynie, że wniosek był - tylko tak to mi działa.

Znalazłem to co sobie wtedy napisałem jako podsumowanie. Jak się coś
takiego po latach czyta to też się nie jest pewnym co się miało na
myśli, choć było to pisane 'ku pamięci'.

--------------------------------
Próbowałem umieścić GUID w DevTab i dostarczać go w konstruktorze
tabeli. Wyszło mi, że oprócz statycznej DevTab w klasach typu U485 muszę
też dać statyczny GUID (bo nie udawało mi się wygenerować go w biegu
jako parametru wywołania konstruktora).
W sumie aby w funkcji FindDevs móc zawołać FindDevs tabeli bez podawania
w tym miejscu GUIDa zapisy w każdej klasie docelowego urządzenia USB
robiły się większe niż po prostu wpisanie GUID w funkcji FindDevs() więc
zrezygnowałem z GUID w DevTab.
---------------------------------

Moja struktura klas do obsługi urządzeń WinUsb:

class WUsbDev
Urządzenie WinUsb (uchwyt i wywołania funkcji) - głównie zasłania różne
nic mi nie mówiące funkcje Windows.

class WUsbDevTab
zawiera WUsbDev Tab[WUsbDevTabSize];
tabelka znalezionych urządzeń według GUID
dlatego chciałem aby GUID był w tej klasie i wtedy jej FindDevs() byłaby
bez parametrów.

Mam tabelkę, bo zakładam możliwość podpięcia więcej niż jednego takiego
samego urządzenia. Na przykład jak wylosowany klikaniem na ekranie klucz
chcę wpisać do dwu urządzeń, które potem służą do szyfrowania
komunikacji, to chcę je oba na raz widzieć.

class WUsbBulkD
bazowa klasa urządzeń WinUsb z dwoma endpointami bulk (we i wy)
ona zawiera WUsbDev *Dev; - wskaźnik na aktualne wybrane z tabelki

class MmWUsbBulkD : public WUsbBulkD
nasze urządzenia - obsługują komunikację zgodnie z naszymi standardami
(ramka, rozkazy rozpoznawcze, rozkazy ugrade'u)

class Usb485 : public MmWUsbBulkD
przejściówka USB-RS485
i tu pojawia się konkretny UID

nie widzę w tej chwili jak to się łączy z tabelką a nie mam w tej chwili
czasu.
wrócę do tego później.
P.G.

Piotr Gałka
Guest

Fri Jul 22, 2022 4:19 pm   



W dniu 2022-07-21 o 16:41, heby pisze:

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

Ja kombinowałem z obiektem GUID w klasie (a nie referencją) i żeby go
inicjalizować w konstruktorze.

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

Stopniowo przypominam sobie o co mi chodziło i co było problemem.
Problemem było wpisanie wartości GUID bezpośrednio w wywołaniu
konstruktora obiektu static. Wydawało mi się, że kompilator wtedy
powinien wpisać dane z treści kodu źródłowego prosto do zmiennej typu GUID.
Szczerze mówiąc to jakbym w obiekcie miał referencję a wartość GUID
podawał jako parametr konstruktora (jak w Twoich przykładach) to nie
wiedziałbym czy to jest dobrze. Dla mnie (intuicyjnie) parametry wpisane
w wywołanie jakiejkolwiek funkcji (również konstruktora) znikają po
wykonaniu funkcji. Nie lubię stosować konstrukcji co do których nie
jestem pewny - dlatego przypisanie referencji do czegoś znikającego to
nie moja bajka.
Choć wiem, że łańcuch znaków mogę tak przekazać i przypisać wskaźnik na
ten łańcuch, ale wydawało mi się, że łańcuchy czasami są traktowane
inaczej od innych danych.
Zapewne kompilator radzi sobie z tym doskonale tworząc jakiś obiekt
gdzieś tam i przypisując do niego referencję, ale ja mam wtedy wrażenie
że to nie ja panuję nad wszystkimi danymi. Parametry z wywołania
konstruktora tak normalnie uważam, że powinienem w całości skopiować do
danych w klasie a nie przypisać sobie referencję do nich.

Mam zamiar powtórzyć tamte moje próby i dam znać.

Ale uciekam z pracy (pracuję na poddaszu po zachodniej stronie) - po
południu straszny upał się tu robi. Może w poniedziałek, chyba, że coś
wyskoczy.

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

To mi wieloletni zgryz wyjaśniłeś :)

Quote:
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ą.

Bardzo prawdopodobne, że się gruntowanie mylę. Dotychczas jak
rozmawialiśmy nie usiłowałem dopytywać o szczegóły więc wiem tylko tyle
co mi się tam po głowie kołacze.
P.G.

heby
Guest

Fri Jul 22, 2022 4:51 pm   



On 22/07/2022 18:19, Piotr Gałka wrote:
Quote:
Szczerze mówiąc to jakbym w obiekcie miał referencję a wartość GUID
podawał jako parametr konstruktora (jak w Twoich przykładach) to nie
wiedziałbym czy to jest dobrze. Dla mnie (intuicyjnie) parametry wpisane
w wywołanie jakiejkolwiek funkcji (również konstruktora) znikają po
wykonaniu funkcji.

Skoro konstruktor przyjmuje referencję, to umawiasz się z wołającym, że
to jego sprawa trzymać ten obiekt. Taka umowa, w przypadku używania
referencji, jest dość powszechna i bardzo podobna do trzymania pointera.

Dla skomplikowanych przypadków współdzielenia własności wymyślono
smart_ptr<>, ale tutaj jest to zbędne.

W kodzie ten obiekt jest w ogóle trzymany w zmiennej globalnej.

Quote:
Nie lubię stosować konstrukcji co do których nie
jestem pewny - dlatego przypisanie referencji do czegoś znikającego to
nie moja bajka.

GUIDy w przykłądzie nie zniką. Są trzymane w przestrzenie globalnej,
inicjowane przed main() i usuwane po wyjści z programu.

Quote:
Choć wiem, że łańcuch znaków mogę tak przekazać i przypisać wskaźnik na
ten łańcuch, ale wydawało mi się, że łańcuchy czasami są traktowane
inaczej od innych danych.

Tutaj ten problem jest zupełnie inny gdzięki temu, że GUID jest tworzony
i trzymany w zmiennej globalnej. Nigdzie nie zniknie.

Niewykluczone, że na dziwacznych architekturach w ogóle powinien być
trzymany we flashu, więc to nie jest optymalne.

Quote:
Zapewne kompilator radzi sobie z tym doskonale tworząc jakiś obiekt
gdzieś tam i przypisując do niego referencję, ale ja mam wtedy wrażenie
że to nie ja panuję nad wszystkimi danymi. Parametry z wywołania
konstruktora tak normalnie uważam, że powinienem w całości skopiować do
danych w klasie a nie przypisać sobie referencję do nich.

Piszesz o przypadakch "przedłużania zycia zmiennych". Tutaj to nie
zachodzi. Specjalnie przykład jest napisany tak, aby nie było
niejasności. Referencje są bezpieczne w tym przypadku.

Aczkolwiek, jak powiedziałem, szablony+mixiny pozwoliły by zaoszczędzić
4 bajty klasy bazowej w RAM kosztem kilkudziesięciu bajtów flasha...

Piotr Gałka
Guest

Mon Jul 25, 2022 1:33 pm   



W dniu 2022-07-22 o 18:51, heby pisze:

Znajduję tylko czas aby się odezwać, a nie aby poeksperymentować -
zawsze mówię sobie - to zaraz i ... nic nie robię.

Quote:
Skoro konstruktor przyjmuje referencję, to umawiasz się z wołającym, że
to jego sprawa trzymać ten obiekt. Taka umowa, w przypadku używania
referencji, jest dość powszechna i bardzo podobna do trzymania pointera.

To jest standardowe podejście.
Ale moim celem było, aby tego GUID wpisać tylko i wyłącznie jako
parametr wywołania funkcji - pominąć potrzebę robienia przeze mnie
zmiennej tego typu.

Twój przykład nawet stosując referencje nie realizuje tego co ja wtedy
chciałem osiągnąć.

W tym Twoim przykładzie?:
---------------
static GUI konkretnyGUID = { };

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

[...]
};
---------------

Mi chodziło o to aby: nie tworzyć statycznej zmiennej konkretnyGUID
tylko zapis jego wartości ująć jakoś od razu w miejscu gdzie go
wstawiłeś jako parametr konstruktora KlasyBazowej w konstruktorze Klasy
konkretnej.

Konstruktor KlasyKonkretnej najchętniej zostawiłbym w pliku h, a takie
static konkretny GUID to dla mnie musi być w pliku cpp więc i
konstruktor trzeba tam przenieść.

Ja chciałem zrobić coś podobnego jak mam definiowane mikrokontrolery.

Mam:

class ATProg : public ATProc
{
.....
public:
ATProg(dword fs,dword fp,dword es,dword ep,qeord fm,dword
sg):ATProc(...){}
};

I potem już konkretne są definiowane tak:

class ATmega162Prog : public ATProg
{
public:
ATmega162Prog():ATProg(0x4000,128,512,1,0x1EFFFF,0x1E9404){}
};

To jest cała definicja (w pliku h). Nic w niej tu nie skróciłem.
Bez śladu w pliku cpp.

Tak samo następnie mam definiowane klasy:
ATmega8Prog
ATmega48Prog
ATmega88Prog
ATmega644Prog

I tak samo chciałem zrobić z różnymi pochodnymi pewnej klasy, które to
pochodne różnią się między sobą tylko tym GUID.
Czyli konstruktor klasy bazowej miał mieć jeden parametr typu GUID a
konstruktory kolejnych klas miały go wołać wpisując tam wartość tego GUIDa.

Klasy pochodne występowały by tylko w pliku h.

Wiem, że mi się to nie udało. Ogólnie wiem, że nie udawało mi się wpisać
GUIDA jako parametru wywołania konstruktora (bezpośrednio w wywołaniu).
P.G.

Goto page Previous  1, 2, 3 ... , 22, 23, 24  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Rynek pracy STM32

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map