Nie znam VHDL/Verilog ale coś mi mówi, że schemat realizowany w scalaku to nieco co innego niż schemat urządzenia.
Ale jak procesor ma mieć możliwość podglądnięcia czegoś w zasilaniu, na przykład dowiedzieć się:
- jaki jest poziom tętnień (aby zasygnalizować wysychające kondensatory na długo zanim objawi się to inaczej),
- że zapas energii w kondensatorze (po wyłączeniu) wystarczy tylko na dokończenie rozpoczętych zapisów do flasha,
- że akumulator ma już małą pojemność i pora go wymienić,
- że ktoś odłączył akumulator więc jak będzie przerwa w zasilaniu to nie będzie podtrzymania, to są to właśnie połączenia w schemacie odpowiadające goto w programie.
No dobra można uznać, ze blok zasilacza ma po prostu ileś wyjść i nie są to goto tylko hierarchiczny fragment połączony wieloma połączeniami. Ale słownie opisany taki schemat byłby dla mnie po prostu nieczytelny. P.G.
Didn't find your answer? Ask the community — no account required.
H
heby
Mowa o schemacie elektronicznym. Opis *HDL ma cech pozwalajace "rysować" w nim schematy, podobnie jak rysuje się je w Spice. Z tą róznicą, że nie jest to płaski schemat, ale hierarchiczny. Co ułatwia analizę.
Routowanie ASICa to troche inne zagadnienie. Bliżej projektowania PCB.
I dokładnie takie połaczenia istnieją też w HDL. Albo są to "referencje hierarchiczne", które są odpowiednikiem goto i równie ostro zwalczane, albo ciągnie się osobną magistralę przez kilka poziomów hierarchi - w ten sposób od razu widać *kto* jest zainteresowany tymi informacjami.
Kwestia przyzwyczajenia. Podobnie jak do vi.
M
Mateusz Viste
2022-07-19 o 06:50 -0700, Dawid Rutkowski napisał:
Tzn. serwer git jest gdzieś hostowany na zewnątrz? No ok... ale przecież z svnem można dokładnie tak samo, a nawet prościej bo klient svn jest dużo lżejszy od gita.
Nie widzę związku. svn (jak i git, cvs czy inny bazaar) służy do wersjonowania kodu w czasie, nie ma nic wspólnego z tym, jak dany jest napisany i poskładany. Oczywiście można sobie trzymać różne "wersje" kodu dla różnych urządzeń w różnych branchach... ale to nie do tego powinno służyć. Branch z założenie powinien być tymczasowy - pracuję nad częścią kodu i po miesiącu albo wyrzucam kod bo eksperyment się nie udał, albo merguję z trunkiem jeśli nowy moduł okazał się skuteczny. To, o czym ty piszesz to różne "wersje" kodu dla różnych urządzeń. Takie rzeczy raczej załatwia się ogólnopojętą abstrakcją.
Oczywiście, że był. Ale potrzeba Linusa jest niszowa - on potrzebował decentralizacji i możliwości współpracy nieograniczonej ilości nieufających sobie programistów. W tej niszy git spisuje się dość dobrze
- niestety świat uznał, że git to taki "lepszy svn" i efekt mody zrobił swoje.
ifdefy mają się nijak do VCSa (lub jego braku).
Pewnie ma, jak każde scentralizowane rozwiązanie. Ja tego sufitu nie znam i nigdy go nie doświadczyłem. Przy czym przy *naprawdę* dużych projektach svn jest właśnie lepszy, bo programista dostaje tylko jedną
- aktualną - wersję a historia siedzi tylko na serwerze. W git każden jeden ludź jest serwerem, i musi lokalnie trzymać całą historię zmian i to wszystko synchronizować na bieżąco.
To chyba tylko w wersji "EXPRESS" tego wynalazku? Powody raczej licencyjne niż techniczne, bo 100k rekordów można obsłużyć byle flat filem. Ale nie znam MSSQL więc tylko gdybam, na codzień korzystam tylko z Postgresa.
Mateusz
D
Dawid Rutkowski
To jak taki fajny ten SVN, bez wad, to po co Linus pisał gita? To, że Linus jest głupi, odpada ;P Może wtedy nie było jeszcze SVNa? Ale jednak z jakiegoś powodu Linus nie wziął się za poprawianie CVSu, tylko zrobił coś nowego. A skoro nadal tego używają, to musi to dawać jakąś wartość dodaną. No chyba że jest to tylko magia nazwiska. Sam Linus na pytanie - czy Linux, oprócz "cool name", daje cokolwiek więcej niż inne *nixy, odpowiedział, że nie daje nic więcej oprócz tego, że możesz powiedzieć: "Błee używasz jakiegoś tam 386BSD, I've got Linux, what a cool name!" i że naprawdę włożyli dużo pracy w wymyślenie chwytliwej nazwy (w innym miejscu Linus jednak się przyznał, że jest egotycznym bufonem i wszystkie swoje projekty nazywa wg siebie - m.in. Linux oraz git).
M
Mateusz Viste
2022-07-19 o 07:44 -0700, Dawid Rutkowski napisał:
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.
Mateusz
H
heby
Pytaj Linusa.
Bez znaczenia. Linux ma inne potrzeby niż zwarta grupa programistów w jednej lokalizacji.
git i scvn mają inne cele. Obecnie moda jest taka, że nawet jak masz cele do których git nie pasuje, to się go tam wciska.
J
Janusz
W dniu 2022-07-19 o 15:54, heby pisze:
Guzik prawda, w tym 'h' trzyma pewnie tylko połączenia więc z polimorfizmem to nic nie ma wspólnego, to tylko konfiguracja sprzętowa.
P
Piotr Gałka
Masz rację. W V5 na schemacie po obrysowaniu od razu ciągnęło blok. Ale, od razu jak to zauważyłem to sprawdziłem sobie, że można się nie przejmować, kliknąć prawy przycisk myszy i wybrać funkcję (np Copy). Blok był kopiowany a na schemacie automagicznie wracał na swoje miejsce. Jak już to wiedziałem to przestało mi przeszkadzać, że ciągnie. Szczególnie, że najczęściej zaznaczam blok aby go przesunąć w inne miejsce na schemacie. Mój schemat składa się z bloków podłączonych do szyny. Jak zaznaczam cały blok to nic się za nim nie ciągnie tylko mogę go przenieść w inne miejsce. To akurat robię często układając tak bloki, aby mieć miejsce (na razie udaje mi się wszystkie schematy mieścić na jednym arkuszu).
Teraz sprawdziłem w V6 - już nie ma tego efektu ciągnięcia.
Kiedyś dawno pewnie ktoś tak zrobił. Może przyświecała mu idea, że najczęściej zaznacza się blok aby go przesunąć. Prace głównie skupiały się na PCB co jest oczywiście ważniejsze I jeszcze chyba trochę brakuje KiCadowi do Protela 3 pochodzącego z 1997r. Chyba, bo nie miałem jeszcze okazji zapoznać się dokładniej ze wszystkimi możliwościami V6.
Teraz między V5 a V6 pozmieniali format plików bibliotecznych elementów schematu więc trochę przy schemacie też pogrzebali i może dlatego zniknęło to ciągnięcie. P.G.
H
heby
To dalej do osiągniecia statycznym polimorfizmem a nie reinkludowaniem przypadkowych plików.
P
Piotr Gałka
W dniu 2022-07-19 o 15:54, heby pisze:
Chyba muszę jeszcze raz poczytać o templates. Dotychczas rozumiałem, że to się głównie nadaje do opisania tego samego typu działań realizowanych na różnych typach zmiennych. Dla każdego typu zmiennych powstaje osobny kod (ale robi w sumie to samo tylko uwzględnia tym zmiennych). Jak to zaprząc do realizacji różnych funkcji przez każdą kopię (nie wiem jak to się nazywa) tego templates. Jak to zaprząc to machania na innej nodze gdy LED jest gdzie indziej podłączony.
To chyba nie tyle chodzi o czas na indirect call co o wkładanie do kodu tylko tego co potrzeba. Jak mamy 20 pochodnych danej klasy z funkcjami wirtualnymi (wszystko opisane w jednym cpp) to kompilator potrafi zorientować się, że w tej aplikacji używana jest ta jedna klasa i nie wstawić kodu pozostałych? Bo jak zrobimy to w 20 plikach i będziemy ręcznie dokładać do projektu tylko to co potrzeba to właściwie my załatwiamy to co miało 'się załatwić'.
Używam C++. Nie mogę użyć C++ 11. Używam Buildera 5 bo go kiedyś kupiliśmy i załatwia mi (łatwo i w znany mi sposób) interfejs użytkownika. Mam też Buildera 2010, ale używałem go tylko jak już koniecznie musiałem. Wynikało to z tego, że on się kłócił w Win7. Dawał się uruchomić raz. Jak odruchowo go zamknąłem to następne uruchomienie po resecie komputera. W pakiecie z Builderem 2010 jest jakaś biblioteka komunikacji przez internet, którą z wielkim trudem udało mi się (z 8 lat temu - już nic nie pamiętam) na tyle ogarnąć, aby się po UDP z naszymi urządzeniami komunikować. Jakieś udane próby TCPIP też chyba robiłem, ale nie rozumiem całej tej koncepcji z serwerami z komunikacją z wieloma chętnymi. Nie miałem musu tego robić, bo ja nie piszę aplikacji dla ludzi tylko tak na prawdę nasze programiki testowe.
Teraz przeniosłem się na Win10. Na razie tylko sprawdziłem, że Buildera
2010 można zamknąć i znów otworzyć. Ale Builder 2010 to też coś starszego niż C++11. A pisząc poprzedni post jak chciałem sprawdzić jak się te C++ nazywa, to zauważyłem, że oprócz 11 i 14 o których wiedziałem to też jest już 17. Z tego wynika, że tę książkę Stroustrupa przeglądałem między 2014 a 2017 rokiem.
Nie wykluczam, że przeniosę wszystkie moje programy do 2010.
Jak nie używać Buildera to napisz mi co mam używać. Ale nie chcę się zajmować samemu tworzeniem interfejsu użytkownika (dawno dawno temu, używając Turbo C++ 1.0, pisałem swoją obsługę okienek pod DOS). P.G.
D
Dawid Rutkowski
wtorek, 19 lipca 2022 o 16:57:56 UTC+2 Mateusz Viste napisał(a):
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?
J
Janusz
Ale człowieku to nie ma nic wspólnego z polimorfizmem, ani statycznym ani dynamicznym, przestań pisać bzdury.
J
Janusz
W dniu 2022-07-19 o 18:21, Piotr Gałka pisze:
Zapomnij, do embedded się nie nadaje a ty tym się zajmujesz.
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.
J
Janusz
W dniu 2022-07-19 o 17:45, Piotr Gałka pisze:
Mi tam nic nie brakuje,a to co ostatnio zrobili z rozsuwaniem ścieszek to bajka. No i za to go też cenię że jest szybki i łatwy w obsłudze, protel to kobyła która jest potwornie przeładowana i trzeba wiedzieć gdzie co zmienić bo jak sie nie wie to mozna długo szukać.
H
heby
To prymitywna wersja templates. Z lat 90. Od tamtego czasu przeszliśmy długą drogę.
Tak:
template< class _HardwreUartImplementation >
ModBusProtol { ... }
Raz w kodzie msz wtedy:
ModBusProtocol< STM32UART0 > modbus;
albo
ModBusProtocol< AtmegSoftwarUartImpl > modbus;
albo, co najważniejsze:
ModBusProtocol< UartMock > modbus;
Dostarczyć inna klasę, implementująca "setState( bool )" w inny sposób, jako parametr szablonu klasy Blinker<>. Blinker może też przyjąc inną klasę jak paramter, na przykłąd implemetacje timera, Albo trzeci, decydujący o kontroli wypełnienia.
Klasy akceptują klasy jako parametry = i dzięki temu budujesz swój kod niejako z bloków. Kompilator, po rozwiązaniu wszystkich templaces widzi jeden wielki spagetti kod, który slicznie optymalizuje i po tych wszystkich machlojkach nie ma śladu w kodzie wynikowym.
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 ;)
To robi statyczny polimorfizm. Redukuje kod do 0.
Dynamiczny polimorfizm nie, choć nie do końca - pewne sztuczki pozwalają kompilatorowi usuwać kod co do którego ma pewnośc, że jest niedostepny. Wiec tak i nie. Zalezy. To skomplikowane.
Ktoś tą decyzję podejmie, jaki parametr przekazać do szablonu. Jak to zrobić, zalezy. Może być ifdef, jeśli jest potrzeba.
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.
Statyczny polimorfizm nie wymaga C++11.
Rozumiem, że zaleta jest w łatwym do ogarnięciu GUI?
Z dwóch powyższych wnosze, że to raczej prototypowanie, a nie programowanie.
Obecnie używanie do tego celu C++ mija się z celem.
Python?
Nie wiem co w nim używasz. 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.
Nikt go nie robi ręcznie. Rzecz w tym, że środowiska do pisania GUI odsunely się od koncepcji onClicków z Delphi i stały się czymś w rodzaju dodatku do pisania kodu a nie kodem samym w sobie.
QtCreator na przykład.
Nie spodoba Ci się.
Nie mam rozwiązania tej bolączki. Może poza zmianą stylu pisania na poprawny ;)
H
heby
A co konkretnie nie ma nic wspólnego?
H
heby
Bzdura :)
ROFL. Wyjasni nam teraz grzecznie jak działają templates, z nastawieniem na Harvard i dlaczego akurat tam mają nie działać. Tylko czekaj, bo skoczę po popcorn.
Odpale też moje arduino, w którym zatrzęsienie templates, nie działajacych na AVR, pozwoli mi, na AVR, właczyć światełko w lampce.
H
heby
git pozwala na trzymanie lokalnych branchy. Ja nie uważam, ze to jest jakakolwiek zaleta, ale *każdy* z kilkunastu programistów w firmie, uzywający na codzień gita, przytacza ten argument jako jeden z pierwszych.
Dalej nie wiem po co.
Ale przytaczają.
Najwidoczniej ważny.
Uzasadnić potrzeby nigdy nie potrafią.
Zmegujesz sobie sam, jak chcesz.
Możesz automatycznie, ale to się zawsze wiąże z konfliktami. Zazwyczaj merge robi się półautomatycznie, po wielu etapach sprawdzania jakości.
Z kilku miejsc? Zero problemu. Możesz te kilka miejs zrobić atomowo w trunk, jesli potrzeba.
Mogą pracować na jednym branchu, poświęconym tej funkcjonalności i rozwiązywać konflikty dynamicznie na tym branchu.
Masz brancha na którym szykujesz sobie release, który wybranchowałeś z trunka w dniu podjęcia decyzji "no to stabilizujemy i wypuszczamy". I on tam się grzeje, aż pewnego dnia ktoś stwierdza "już". No i już.
Ogólnie przedstawiasz problemy, które w firmach pracujacychc z svn są normalnością a nie jakimiś wydumanymi przykładami.
J
Janusz
To "Ale to jak ona jest faktycznie realizowana zależy od tego pliku h o wspólnej nazwie dla wszystkich projektów a tam jest informacja jaki procesor i jak jest podłączony dla danej wersji płytki."
z tym
"Tak. To statyczny polimorfizm."
To jest konfiguracja sprzętowa a polimorfizm to "Polimorfizm (z gr. wielopostaciowość) – mechanizmy pozwalające programiście używać wartości, zmiennych i podprogramów na kilka różnych sposobów[1]. Inaczej mówiąc jest to możliwość wyabstrahowania wyrażeń od konkretnych typów[2]."
Klasycznym przykładem polimorfizmu jest
"Przeciążanie (lub przeładowywanie, ang. overloading) pozwala nazwać tak samo kilka podprogramów operujących na różnych danych i następnie obsługiwać te dane w jednolity sposób. Np. inaczej dodawane są liczby całkowite, a inaczej zmiennopozycyjne, ale wygodnie obie te operacje nazywać po prostu dodawaniem i oznaczać symbolem „+”. W językach bez przeciążania operatory te muszą się różnić (np. w OCamlu są oddzielne operatory „+” i „+.”). Przeciążane mogą być np. operatory, funkcje, metody, procedury. W niektórych językach niektóre operatory lub funkcje są przeciążone, ale programista nie może ich dodatkowo dociążać lub przeciążać własnych."
J
Janusz
Jak na razie to ty bajki opowiadasz.
Bo pisał o dynamicznych :) "Jak to zaprząc do realizacji różnych funkcji przez każdą kopię (nie wiem jak to się nazywa) tego templates. "
teraz sprawdź czym się różnią i gdzie są odpalane.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.