Goto page Previous 1, 2, 3 ... 13, 14, 15 ... 22, 23, 24 Next
Piotr GaĹka
Guest
Tue Jul 19, 2022 5:31 pm
W dniu 2022-07-19 o 18:35, Janusz pisze:
Quote:
Zapomnij, do embedded się nie nadaje a ty tym się zajmujesz.
Nie całkiem. Teraz rozmawiamy o embedded pod hasłem mój brat to robi.
Kiedyś pisał wszystko w assemblerze. Naście lat temu dał się przekonać
do C, ale nadal w naszych (jako firmy, jego, jako autora) programach są
spore kawałki w assemblerze. Np. SHA256 w tym AtXmega zabrało mu
praktycznie wszystkie rejestry. W C się nie da, bo C ileś tam rejestrów
blokuje na swoje potrzeby. Zapisane w C działało wielokrotnie wolniej
(konieczność ciągłego przerzucania danych między rejestrami a RAMem).
Jakaś biblioteka, którą gdzieś znalazł też działała wyraźnie wolniej.
Ale ja nic nigdy nie napisałem embedded.
C++ uczyłem się z książki Stroustrupa z 1991 roku. Mam ksero oryginału.
Potem kupiłem polskie wydanie (1994,1995).
Na bazie przykładów z książki napisałem Makroassembler 8051, który potem
brat używał do wszystkiego.
Dlatego jak bym się uparł to template może być dla mnie, ale nie mam na
razie powodu się upierać.
P.G.
heby
Guest
Tue Jul 19, 2022 6:01 pm
On 19/07/2022 18:35, Janusz wrote:
Quote:
Ale na avr-ze to nie pójdzie bo ten procek nie wykonuje programu z ram-u
(architektura Harvard) więc żadnej kopi nie uruchomi.
Tutaj masz dwa przykłady napisne przed chwilą na kolanie:
Polimorfizm statyczny:
https://pastebin.com/wDavM1vq
A tu dynamiczny:
https://pastebin.com/dFjzVsCn
Oba migają diodą jak szalone, na moim Harvardowym Arduino z biednym
AVRkiem. Co mogę mieć źle, że mam dobrze?
Piotr GaĹka
Guest
Tue Jul 19, 2022 6:08 pm
W dniu 2022-07-19 o 18:40, heby pisze:
Quote:
template< class _HardwreUartImplementation
ModBusProtol {
...
}
Raz w kodzie msz wtedy:
ModBusProtocol< STM32UART0 > modbus;
albo
ModBusProtocol< AtmegSoftwarUartImpl > modbus;
albo, co najważniejsze:
ModBusProtocol< UartMock > modbus;
Nie rozumiem dlaczego napisałeś, że najważniejsze.
Czy STM32UART0, AtmegSoftwarUartImpl i UartMock to pochodne
_HardwreUartImplementation ?
Quote:
Czasami chodzi. Ludzie w embedded mają fobie związane ze słowem virtual,
czasami jest podnoszone, że jest "niebezpieczne". Przyjmuje to do
wiadomości, ale od 100km nad poziomem gruntu
Z innej wypowiedzi zrozumiałem, że virtual w ogóle nie da się jak kod
jest wykonywany z flasha. Ale nie wiem czy na pewno. Przecież zestaw
wskaźników na funkcje wirtualne danej klasy może być w flashu. Obiekt
danej klasy znajdujący się w RAMie może mieć wskaźnik na tę tabelkę
wskaźników więc może wywołać odpowiednią dla siebie funkcję. Jak nawet
wywołamy według wskaźnika na obiekt to też sobie to znajdzie.
Quote:
Nie dostrzegasz koncepcji: nie ma inkludowania przypadkowych plików,
bazując na katalogu w którym jesteś, aby emulować statyczny polimorfizm.
To jest już bardzo duży postęp.
O includowaniu pisałem jako właśnie o złym rozwiązaniu w sytuacji, gdy
próbujemy dynamicznego polimorfizmu
Quote:
Statyczny polimorfizm nie wymaga C++11.
Temat C++11 pojawił się w temacie mojego popróbowania innych nowych
możliwości C++.
A statyczny polimorfizm jest w temacie embedded a tam są środowiska
dostarczane przez producentów procków więc pewnie bardziej aktualne.
Czyli powinienem teraz przekonać brata do C++ koniecznie z templates.
Będzie trudno :)
Quote:
Rozumiem, że zaleta jest w łatwym do ogarnięciu GUI?
Dokładnie.
Quote:
Z dwóch powyższych wnosze, że to raczej prototypowanie, a nie
programowanie.
Niektóre moje programy trafiają do naszych klientów. Ogólnie to wziąłem
się za tę komunikację UDP bo pracowanik, który pisze dla nas (tysiące
razy poważniejsze programu od moich) twierdził, że to co my kombinujemy
nie ma sensu i w ogóle 'nie da się'. Zamiast walczyć z jego
przekonaniami postanowiliśmy, że w takim przypadku trzeba to zrobić samemu.
Problem nie był w komunikacji tylko w postawionej według niego na głowie
konfiguracji sprzętu co my uważaliśmy za najlepsze rozwiązanie i nadal
tak uważamy.
Quote:
Python?
Nie znam. Chciałbym poznać. Nie mam czasu.
Poprawiłem raz skrypt w Pythonie do generowanie BOM w KiCadzie.
Już mało pamiętam. Dodałem wywołanie jakiejś funkcji, która przy okazji
wołała po raz drugi jakąś funkcję Sort. Z tym, że jedno z tych wywołań
było jakby Sort to była funkcja klasy a drugi raz jakby to była funkcja
globalna ale wołana z tą samą klasą jako parametrem.
Co mnie totalnie zdziwiło. Jak była tylko oryginalna postać tego skryptu
to sortowało 'nie do końca' a jak doszedł ten drugi Sort (którego wcale
nie chciałem tam wkładać, po prostu był w czymś co chciałem dołożyć) to
się okazało, że już sortuje 'do końca'. Tych moich zmian nie ma dużo
jakbyś chciał to mogę służyć oryginałem i moją wersją.
Olałem to, że coś się robi dwa razy - nie jestem w stanie stwierdzić
dlaczego już jest dobrze, ale jest dobrze. Jeszcze nie doszedłem do tego
tematu w przypadku V6. Mam nadzieję, że obejdzie się bez zaglądania.
Quote:
Niestety czas RADów, czyli "wyklikaj mi
onClicka" już mija, ten sposób pisania nie sprawdził się, słabo się
skaluje i wręcz narzuca błędy projektowe. Współczesne środowiska do
tworzenia GUI są inne. Nie będziesz zadowolony.
Przyjmuję do wiadomości i cieszę się, że jak na moje skromne potrzeby
RAD się sprawdził.
Quote:
Nie mam rozwiązania tej bolączki. Może poza zmianą stylu pisania na
poprawny
Mam się obrazić?
P.G.
heby
Guest
Tue Jul 19, 2022 6:21 pm
On 19/07/2022 20:08, Piotr Gałka wrote:
Quote:
albo, co najważniejsze:
ModBusProtocol< UartMock > modbus;
Nie rozumiem dlaczego napisałeś, że najważniejsze.
Bo testowanie własnego kodu invitro, unittestami, jest waznym etapem
pisania jakiegokolwiek kodu, z miganiem diodą włacznie.
Quote:
Czy STM32UART0, AtmegSoftwarUartImpl i UartMock to pochodne
_HardwreUartImplementation ?
W templates "nie muszą być pochodne". Zgodnośc interfejsu badana jest
podczas wypełniania szablonu. Jeśli tylko jakaś klasa ma metodę foo() i
ktoś chce ją zawołać w momencie specjalizacji szablonem, to zadziała. W
dynamicznym polimorfizmie musisz dodawać wartwę interfejsu z metodami
wirtualnymi. W statycznym nie. Można by powiedzieć, że statyczny
polimorfizm bazuje na "opóźnionej kompilacji, do ostatniej chwili, kiedy
już wszystki wiadomo"
Quote:
Czasami chodzi. Ludzie w embedded mają fobie związane ze słowem
virtual, czasami jest podnoszone, że jest "niebezpieczne". Przyjmuje
to do wiadomości, ale od 100km nad poziomem gruntu
Z innej wypowiedzi zrozumiałem, że virtual w ogóle nie da się jak kod
jest wykonywany z flasha.
Bzdura. Stosowny przykład podałem kilka postów wyżej.
Quote:
Ale nie wiem czy na pewno. Przecież zestaw
wskaźników na funkcje wirtualne danej klasy może być w flashu. Obiekt
danej klasy znajdujący się w RAMie może mieć wskaźnik na tę tabelkę
wskaźników więc może wywołać odpowiednią dla siebie funkcję. Jak nawet
wywołamy według wskaźnika na obiekt to też sobie to znajdzie.
Bo to bzdura. Wirtualizacja działa na praktycznie wszyskich procesorach,
od 6502 po współczesne. Jeśli gdzies nie działa, to będzie jakiś
wyjątkowy wyjątek.
Quote:
Nie dostrzegasz koncepcji: nie ma inkludowania przypadkowych plików,
bazując na katalogu w którym jesteś, aby emulować statyczny
polimorfizm. To jest już bardzo duży postęp.
O includowaniu pisałem jako właśnie o złym rozwiązaniu w sytuacji, gdy
próbujemy dynamicznego polimorfizmu
Dynamiczny jest w embedded troche niepotrzebny. On jest przydatny kiedy
programujemy obiektowo. W malym embedded potrzeba obiektowości jest
sporadyczna.
Quote:
Statyczny polimorfizm nie wymaga C++11.
Temat C++11 pojawił się w temacie mojego popróbowania innych nowych
możliwości C++.
Jesteś ograniczony i tak Builderem oraz bratem używającym z niechęcią C.
Wątpie, aby cokolwiek z C++11 miało jakąkolwiek wartość przed RAII czy
szablonami. Nie warto. No może dla "auto" warto.
Quote:
A statyczny polimorfizm jest w temacie embedded a tam są środowiska
dostarczane przez producentów procków więc pewnie bardziej aktualne.
Nie widuję. Statyczny polimorfizm stosowany jest w niektórych
biblitekach Arduino. Został zaakceptowany przez środowisko embedded
tylko dlatego, że nikt głośno nie powiedział, że to C++. Jak by
powiedział, to od razu by się obrazili, jak Janusz. Teraz muszą używac,
nie ma odwrotu. Pękło bredzenie o tym, jak to C++ się nie nadaje do
embedded.
Quote:
Czyli powinienem teraz przekonać brata do C++ koniecznie z templates.
Będzie trudno
Nie. Za późno. Jesli mysli asemblerem, to nie przekonasz. Nie próbuj
nawet. Jesli robi dobrze to, co robi, to niech robi, to co robi.
To taka dysputa teoretyczna. Przecież obaj wiemy, że nie będziesz
zmieniał przyzwyczajeń bez powodów.
Quote:
Nie mam rozwiązania tej bolączki. Może poza zmianą stylu pisania na
poprawny
Mam się obrazić?
Prawidłowo: ewoluować. To białko ma się dostosować do zmian w
komputerach, a nie odwrotnie.
Dawid Rutkowski
Guest
Tue Jul 19, 2022 6:26 pm
wtorek, 19 lipca 2022 o 16:57:56 UTC+2 Mateusz Viste napisał(a):
Quote:
2022-07-19 o 07:44 -0700, Dawid Rutkowski napisał:
To jak taki fajny ten SVN, bez wad, to po co Linus pisał gita?
To jest pytanie z serii "skoro mam traktor, to po co mi samochód".
svn i git to dwa VCSy, ale rozwiązujące nieco inne klasy problemów.
Toteż właśnie o to pytam - czym się różnią?
I jak bardzo w ogóle mogą się różnić od siebie systemy kontroli wersji?
Wiadomo, że podstawowym pytaniem jest "co się optymalizuje?" i że się
nie da mieć wszystkiego (dlatego wśród programistów jest tak mało kobiet - jedynie
kobieta z umysłem mężczyzny, typu Maria Skłodowska, jest w stanie to zrozumieć),
no ale na ile różnych sposobów można zrobić to samo?
Może naiwnie pytam, bo w sumie też wciąż czekam na satori - czyli zrozumienie,
po co w ogóle takiego oprogramowania używać, w sensie zysków, bo że koszty będą to nie ulega wątpliwości.
A tendencją rozsądnego człowieka jest szukanie rozwiązywania istniejących problemów,
a nie hipotetycznych (to to podczas analizy i projektu).
Bo to, że VCS pomoże mi w tym, że sobie z czymś eksperymentuję, a potem to albo odrzucam albo
wrzucam do trunka, to mi na plaster - to samo robi się po prostu kopiując katalog
(zakładam że katalog jest na tak samo chronionym komputerze w sensie redundancji itp. co VCS).
Ewentualnie mogłoby coś dać, gdybym na raz eksperymentował z kilkoma rzeczami,
ale dla bezpieczeństwa chciał, by sprawdzać jedną na raz - a potem żeby VCS automagicznie
połączył mi trzy takie gałęzie w spójny projekt będący wersją wyjściową z dodanymi tymi 3 nowymi funkcjonalnościami.
Da się tak?
Identyczna sprawa gdy w rozproszeniu nad dodaniem poszczególnych funkcji pracują osobni programiści.
Albo jeszcze takie cudo - projekt jest rozwijany, ale nagle przychodzi potrzeba dorobienia jednej małej zmiany - ale,
znów dla bezpieczeństwa i żeby nie latać po osiedlu po raz kolejny, na dość dawnej wersji sprawdzonej i wygrzanej przez ładny uptime na produkcji - ale żeby ta zmiana weszła sobie "sama" do wszystkich kolejnych wersji, i to też nie tak
od razu, ale dopiero po wygrzaniu na produkcji. Zrobi tak?
Janusz
Guest
Tue Jul 19, 2022 6:40 pm
W dniu 2022-07-19 o 19:03, heby pisze:
Quote:
To, że nie widzisz tu polimorfizmu, to nie znaczy, że go tam nie ma. C++
to trudna rzecz.
Ziew, szkoda czasu.
--
Janusz
Janusz
Guest
Tue Jul 19, 2022 6:41 pm
W dniu 2022-07-19 o 19:05, heby pisze:
Quote:
Moja lampka napędana Arduino z programem napisanym szblonami dalej
złośliwie świeci.
Jasne. Kolejny ziew.
--
Janusz
Janusz
Guest
Tue Jul 19, 2022 6:43 pm
W dniu 2022-07-19 o 19:09, heby pisze:
Quote:
bez tego znika Ci kod, to robisz coś bardzo, bardzo źle?
Znowu nie masz pojęcia, tak voiltale powoduje że kod pracuje tak jak ja
chcę a nie jak kompilator myśli że ma pracować.
--
Janusz
Janusz
Guest
Tue Jul 19, 2022 6:46 pm
W dniu 2022-07-19 o 19:31, Piotr Gałka pisze:
Quote:
W dniu 2022-07-19 o 18:35, Janusz pisze:
Zapomnij, do embedded się nie nadaje a ty tym się zajmujesz.
Nie całkiem. Teraz rozmawiamy o embedded pod hasłem mój brat to robi.
Kiedyś pisał wszystko w assemblerze. Naście lat temu dał się przekonać
do C, ale nadal w naszych (jako firmy, jego, jako autora) programach są
spore kawałki w assemblerze. Np. SHA256 w tym AtXmega zabrało mu
praktycznie wszystkie rejestry. W C się nie da, bo C ileś tam rejestrów
blokuje na swoje potrzeby.
Da się, trzeba te rejestry zachować na stosie a na wyjściu przywrócić,
banał.
--
Janusz
Janusz
Guest
Tue Jul 19, 2022 6:50 pm
W dniu 2022-07-19 o 20:01, heby pisze:
Quote:
On 19/07/2022 18:35, Janusz wrote:
Ale na avr-ze to nie pójdzie bo ten procek nie wykonuje programu z ram-u
(architektura Harvard) więc żadnej kopi nie uruchomi.
Tutaj masz dwa przykłady napisne przed chwilą na kolanie:
Polimorfizm statyczny:
https://pastebin.com/wDavM1vq
A tu dynamiczny:
https://pastebin.com/dFjzVsCn
Oba migają diodą jak szalone, na moim Harvardowym Arduino z biednym
AVRkiem. Co mogę mieć źle, że mam dobrze?
Jasne i potem siada świeżak ( albo autor po paru latach) do takiego kodu
i pół godziny się zastanawia co k@#$a autor miał na myśli pisząc taki kod.
Idź sie topić razem z tymi przykładami.
--
Janusz
Piotr GaĹka
Guest
Tue Jul 19, 2022 6:54 pm
W dniu 2022-07-19 o 20:21, heby pisze:
Quote:
On 19/07/2022 20:08, Piotr Gałka wrote:
albo, co najważniejsze:
ModBusProtocol< UartMock > modbus;
Nie rozumiem dlaczego napisałeś, że najważniejsze.
Bo testowanie własnego kodu invitro, unittestami, jest waznym etapem
pisania jakiegokolwiek kodu, z miganiem diodą włacznie.
A w jaki sposób z tego co napisałeś wynika, że to dotyczy testowania
własnego kodu. Dla mnie to były po prostu trzy wersje użycia tego
template dla trzech różnych klas. Co takiego szczególnego ma w sobie ta
trzecia nazwa?
Quote:
W templates "nie muszą być pochodne". Zgodnośc interfejsu badana jest
podczas wypełniania szablonu. Jeśli tylko jakaś klasa ma metodę foo() i
ktoś chce ją zawołać w momencie specjalizacji szablonem, to zadziała. W
dynamicznym polimorfizmie musisz dodawać wartwę interfejsu z metodami
wirtualnymi. W statycznym nie. Można by powiedzieć, że statyczny
polimorfizm bazuje na "opóźnionej kompilacji, do ostatniej chwili, kiedy
już wszystki wiadomo"
Czyli to co jest wymagane to aby każda z tych klas miała te funkcje
które zostaną użyte w template.
Poza tym każda może mieć dodatkowo inny zestaw funkcji - to nie robi.
Quote:
Jesteś ograniczony i tak Builderem oraz bratem używającym z niechęcią C.
Niechęć to była lata temu. Teraz już lubi C.
On po prostu uważał, że ważny jest algorytm, a zapisać go już można w
dowolnym języku.
Panuje nad znacznie bardziej skomplikowaną rzeczywistością w tych
urządzeniach niż ja. Jak coś chce ze mną uzgodnić to czasem kilka godzin
schodzi na to abym wyrobił sobie obraz sytuacji w której trzeba ustalić
jak coś robimy. A sytuacja to bardzo drobniutki fragment całości
ogarnianej przez te urządzenia.
Quote:
Wątpie, aby cokolwiek z C++11 miało jakąkolwiek wartość przed RAII czy
szablonami. Nie warto. No może dla "auto" warto.
Właśnie "auto" mi się podobało i nie wiem jak się to nazywa, ale takie
tworzenie w locie (w jednej linijce) klasy z jakąś jedną funkcją (może
konstruktorem) co się okazało z jakiegoś powodu było często potrzebne i
wprowadzono nowy sposób zapisu tego w kodzie źródłowym.
Quote:
A statyczny polimorfizm jest w temacie embedded a tam są środowiska
dostarczane przez producentów procków więc pewnie bardziej aktualne.
Nie widuję.
A myślałem, że jak dostarczają środowisko to tam z definicji będzie
można pisać w C++.
Quote:
Nie. Za późno. Jesli mysli asemblerem, to nie przekonasz. Nie próbuj
nawet. Jesli robi dobrze to, co robi, to niech robi, to co robi.
Kiedy Ty od czasu do czasu piszesz o zabetonowanych środowiskach
siedzących w swoim grajdołku z ubiegłego wieku.
P.G.
heby
Guest
Tue Jul 19, 2022 6:56 pm
On 19/07/2022 20:50, Janusz wrote:
Quote:
Oba migają diodą jak szalone, na moim Harvardowym Arduino z biednym
AVRkiem. Co mogę mieć źle, że mam dobrze?
Jasne i potem siada świeżak ( albo autor po paru latach) do takiego kodu
i pół godziny się zastanawia co k@#$a autor miał na myśli pisząc taki kod.
Nie wydaje mi się. Od kilkunastu lat pracuje z takim kodem. Nie mam
problemu z jego pojmowaniem.
Może nie powinieneś zajmowac się C++?
Quote:
Idź sie topić razem z tymi przykładami.
Ale zadaniem tych przykładów jest, abyś odszczekał debilizmy o
Harvardzie z problemem z metodami wirtualnymi.
Piotr GaĹka
Guest
Tue Jul 19, 2022 6:58 pm
W dniu 2022-07-19 o 20:46, Janusz pisze:
Quote:
Da się, trzeba te rejestry zachować na stosie a na wyjściu przywrócić,
banał.
Się wydaje oczywiste.
Aż niemożliwe, aby tego nie spróbował.
Niestety to nie ja. Mogę tylko gdybać. Może kompilator nie pozwalał
grzebać w 'swoich rejestrach'.
Może to gdzieś trzeba było odblokować, ale że to były pierwsze podejścia
do C to nie wiedział.
A może po prostu coś mi się pomieszało.
P.G.
heby
Guest
Tue Jul 19, 2022 6:59 pm
On 19/07/2022 20:43, Janusz wrote:
Quote:
bez tego znika Ci kod, to robisz coś bardzo, bardzo źle?
Znowu nie masz pojęcia, tak voiltale powoduje że kod pracuje tak jak ja
chcę a nie jak kompilator myśli że ma pracować.
vialtile używane jest tylk ow sytuacji, kiedy *coś* może zmienić
zawartość zmiennej *nieoczekiwanie*.
Takie sytuacje to:
Inny wątek.
Przerwanie.
Rejestr sprzętowy.
Tylko w jednej sytuacji z tej listy używamy volatile. W dwóch używamy
barier. Istnieją mikroskopije architektury, w których nie ma barier, ale
teraz nawet miganie diodami robi się na ARMach.
Jeśli wyoptymalizowało Ci kod, który korzysta ze zmiennej i "naprawiłeś"
to przez delklarację volatile, to masz naprawdę nikłe pojęcie o tym, jak
pracuje kompilator i gdzie jest przyczyna niedziałania.
Współczuję.
Janusz
Guest
Tue Jul 19, 2022 7:02 pm
W dniu 2022-07-19 o 18:26, Dawid Rutkowski pisze:
Quote:
wtorek, 19 lipca 2022 o 16:57:56 UTC+2 Mateusz Viste napisał(a):
2022-07-19 o 07:44 -0700, Dawid Rutkowski napisał:
To jak taki fajny ten SVN, bez wad, to po co Linus pisał gita?
To jest pytanie z serii "skoro mam traktor, to po co mi samochód".
svn i git to dwa VCSy, ale rozwiązujące nieco inne klasy problemów.
Toteż właśnie o to pytam - czym się różnią?
I jak bardzo w ogóle mogą się różnić od siebie systemy kontroli wersji?
Wiadomo, że podstawowym pytaniem jest "co się optymalizuje?" i że się
nie da mieć wszystkiego (dlatego wśród programistów jest tak mało kobiet - jedynie
kobieta z umysłem mężczyzny, typu Maria Skłodowska, jest w stanie to zrozumieć),
no ale na ile różnych sposobów można zrobić to samo?
Może naiwnie pytam, bo w sumie też wciąż czekam na satori - czyli zrozumienie,
po co w ogóle takiego oprogramowania używać, w sensie zysków, bo że koszty będą to nie ulega wątpliwości.
Nie przejmuj się, mnie też nie przekonał ani on ani poprzednicy, jak
pracujesz sam nad kodem to i sam sobie panujesz nad kolejnymi wersjami.
Co innego praca zespołowa i chyba głównie w takiej pracy sie to uzywa,
ale dla np mnie jest strasznie upierdliwe.
Quote:
A tendencją rozsądnego człowieka jest szukanie rozwiązywania istniejących problemów,
a nie hipotetycznych (to to podczas analizy i projektu).
Bo to, że VCS pomoże mi w tym, że sobie z czymś eksperymentuję, a potem to albo odrzucam albo
wrzucam do trunka, to mi na plaster - to samo robi się po prostu kopiując katalog
(zakładam że katalog jest na tak samo chronionym komputerze w sensie redundancji itp. co VCS).
Ewentualnie mogłoby coś dać, gdybym na raz eksperymentował z kilkoma rzeczami,
ale dla bezpieczeństwa chciał, by sprawdzać jedną na raz - a potem żeby VCS automagicznie
połączył mi trzy takie gałęzie w spójny projekt będący wersją wyjściową z dodanymi tymi 3 nowymi funkcjonalnościami.
Da się tak?
Dostaniesz taką kaszkę mannę że tydzień będziesz dochodził co jest gdzie

--
Janusz
Goto page Previous 1, 2, 3 ... 13, 14, 15 ... 22, 23, 24 Next