RTV forum PL | NewsGroups PL

Jak wygląda rynek pracy dla programistów STM32? Perspektywy i wynagrodzenia

Rynek pracy STM32

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wygląda rynek pracy dla programistów STM32? Perspektywy i wynagrodzenia

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

Janusz
Guest

Tue Jul 19, 2022 4:27 pm   



W dniu 2022-07-19 o 18:00, heby pisze:
Quote:
On 19/07/2022 17:29, Janusz wrote:
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.
Tak. To statyczny polimorfizm.
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.

To dalej do osiągniecia statycznym polimorfizmem a nie reinkludowaniem
przypadkowych plików.
Ale człowieku to nie ma nic wspólnego z polimorfizmem, ani statycznym

ani dynamicznym, przestań pisać bzdury.

--
Janusz

Janusz
Guest

Tue Jul 19, 2022 4:35 pm   



W dniu 2022-07-19 o 18:21, Piotr Gałka pisze:
Quote:
W dniu 2022-07-19 o 15:54, heby pisze:

Tak. To statyczny polimorfizm. Wykonuje się go w C++ za pomocą
templates. Dokładnie tak jak opisujesz - umożliwia np. rozdzielenie
implementacji hardwareowej UART od kodu implementującego protokół bez
ani jednej nadmiarowej  instrukcji asm.

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).
Zapomnij, do embedded się nie nadaje a ty tym się zajmujesz.


Quote:
Jak to zaprząc do realizacji różnych funkcji przez każdą kopię (nie wiem
jak to się nazywa) tego templates.
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.

--
Janusz

Janusz
Guest

Tue Jul 19, 2022 4:39 pm   



W dniu 2022-07-19 o 17:45, Piotr Gałka pisze:
Quote:
I jeszcze chyba trochę brakuje KiCadowi do Protela 3 pochodzącego z 1997r.
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ć.

--
Janusz

heby
Guest

Tue Jul 19, 2022 4:40 pm   



On 19/07/2022 18:21, Piotr Gałka wrote:
Quote:
Tak. To statyczny polimorfizm. Wykonuje się go w C++ za pomocą
templates. Dokładnie tak jak opisujesz - umożliwia np. rozdzielenie
implementacji hardwareowej UART od kodu implementującego protokół bez
ani jednej nadmiarowej  instrukcji asm.
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.

To prymitywna wersja templates. Z lat 90. Od tamtego czasu przeszliśmy
długą drogę.

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


Tak:

template< class _HardwreUartImplementation >
ModBusProtol {
...
}

Raz w kodzie msz wtedy:

ModBusProtocol< STM32UART0 > modbus;

albo

ModBusProtocol< AtmegSoftwarUartImpl > modbus;

albo, co najważniejsze:

ModBusProtocol< UartMock > modbus;


Quote:
Jak to zaprząc to machania na innej nodze gdy LED jest gdzie indziej
podłączony.

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.

Quote:
To się też da zrobić dynamicznym polimorfizmem (polimorficzne klasy z
metodami wirtualnymi), ale ktoś może marudzić, że to zajmuje cenne
cykle zegarowe na indirect call. Dlatego istnieje też polimorfizm
statyczny, który nie generuje dodatkowego kodu.
To chyba nie tyle chodzi o czas na indirect call co o wkładanie do kodu
tylko tego co potrzeba.

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

Quote:
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?

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.

Quote:
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ć'.

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.

Quote:
Napisałeś, że nie możesz używać C++ bo używasz Buildera. A po co
używac Buildera?
Używam C++. Nie mogę użyć C++ 11.

Statyczny polimorfizm nie wymaga C++11.

Quote:
Używam Buildera 5 bo go kiedyś kupiliśmy i załatwia mi (łatwo i w znany
mi sposób) interfejs użytkownika.

Rozumiem, że zaleta jest w łatwym do ogarnięciu GUI?

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

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?

Quote:
Jak nie używać Buildera to napisz mi co mam używać.

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.

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

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 Wink

heby
Guest

Tue Jul 19, 2022 4:41 pm   



On 19/07/2022 18:27, Janusz wrote:
Quote:
On 19/07/2022 17:29, Janusz wrote:
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.
Tak. To statyczny polimorfizm.
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.
To dalej do osiągniecia statycznym polimorfizmem a nie reinkludowaniem
przypadkowych plików.
Ale człowieku to nie ma nic wspólnego z polimorfizmem, ani statycznym
ani dynamicznym, przestań pisać bzdury.

A co konkretnie nie ma nic wspólnego?

heby
Guest

Tue Jul 19, 2022 4:43 pm   



On 19/07/2022 18:35, Janusz wrote:
Quote:
Zapomnij, do embedded się nie nadaje a ty tym się zajmujesz.

Bzdura :)

Quote:
Jak to zaprząc do realizacji różnych funkcji przez każdą kopię (nie
wiem jak to się nazywa) tego templates.
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.

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.

Dawid Rutkowski
Guest

Tue Jul 19, 2022 4:44 pm   



wtorek, 19 lipca 2022 o 15:58:42 UTC+2 heby napisał(a):
Quote:
On 19/07/2022 15:50, Dawid Rutkowski wrote:
W takim razie czy SVN nie ma gdzieś szklanego sufitu, przy którym przestaje się skalować?
Pracowałem o *ogromną* aplikacją z *ogromem* programistów na jednym repo
SVN. Absolutnie nie ma szklanego sufitu. Skaluje się i działa poprawnie
do absuradlych rozmiarów kodu, branchy i zajętosci repo. Klikasz i masz.
Od razu, co chcesz.

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

heby
Guest

Tue Jul 19, 2022 4:50 pm   



On 19/07/2022 18:26, Dawid Rutkowski wrote:
Quote:
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ą?

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

Quote:
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?

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.

Quote:
Identyczna sprawa gdy w rozproszeniu nad dodaniem poszczególnych funkcji pracują osobni programiści.

Mogą pracować na jednym branchu, poświęconym tej funkcjonalności i
rozwiązywać konflikty dynamicznie na tym branchu.

Quote:
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?

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.

Janusz
Guest

Tue Jul 19, 2022 4:55 pm   





Janusz
Guest

Tue Jul 19, 2022 4:58 pm   



W dniu 2022-07-19 o 18:43, heby pisze:
Quote:
On 19/07/2022 18:35, Janusz wrote:
Zapomnij, do embedded się nie nadaje a ty tym się zajmujesz.

Bzdura Smile
Jak na razie to ty bajki opowiadasz.


Quote:

Jak to zaprząc do realizacji różnych funkcji przez każdą kopię (nie
wiem jak to się nazywa) tego templates.
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.

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.

Bo pisał o dynamicznych Smile
"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.
--
Janusz

heby
Guest

Tue Jul 19, 2022 5:03 pm   





Janusz
Guest

Tue Jul 19, 2022 5:04 pm   



W dniu 2022-07-19 o 18:40, heby pisze:
Quote:
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.
Taa i potem piszesz sobie program z wieloma przypisaniami do zmiennej i

warunkami a kompilator dojdzie do wniosku że ona wynikowo będzie miała
np 0 i możesz w d.. pocałowac, jedynie volatile ratuje przed szaleństwem
kompilatora, tu pewnie nawet to nie pomoże :)

--
Janusz

heby
Guest

Tue Jul 19, 2022 5:05 pm   



On 19/07/2022 18:58, Janusz wrote:
Quote:
Bzdura Smile
Jak na razie to ty bajki opowiadasz.

Może i bajki, ale diodą migają.

Quote:
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.
Bo pisał o dynamicznych Smile

Kto? Dynamicznych templates? A co to jest?

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

Dalej nie wiem co to są "dynamiczne templates". To nie Java z
generykami. Możesz podkręcić jasność, do czego mam się ustosunkować
konkretnie?

Moja lampka napędana Arduino z programem napisanym szblonami dalej
złośliwie świeci.

heby
Guest

Tue Jul 19, 2022 5:09 pm   



On 19/07/2022 19:04, Janusz wrote:
Quote:
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.
Taa i potem piszesz sobie program z wieloma przypisaniami do zmiennej i
warunkami a kompilator dojdzie do wniosku że ona wynikowo będzie miała
np 0 i możesz w d.. pocałowac

Słusznie. W taki wypadku kompilator ma prawo usunąc kod.

Zainteresuj się czym jest bariera, bo to jedyny powód dla któego
kompilator mógłby usunąc kod - brak barier.

Chyba że piszesz do rejestru sprzętowego, ale wyraźnie napisałeś
"zmienna", wiec zakładam, że nie.

Quote:
, jedynie volatile ratuje przed szaleństwem
kompilatora, tu pewnie nawet to nie pomoże Smile

W czym nie pomoże? Pokaż przykład.

Mam nadzieję, że masz pojęcie, że jeśli używasz volatile na zmiennej i
bez tego znika Ci kod, to robisz coś bardzo, bardzo źle?

Piotr Gałka
Guest

Tue Jul 19, 2022 5:13 pm   



W dniu 2022-07-19 o 18:39, Janusz pisze:
Quote:
W dniu 2022-07-19 o 17:45, Piotr Gałka pisze:
I jeszcze chyba trochę brakuje KiCadowi do Protela 3 pochodzącego z
1997r.
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ć.


Co do Protela to wydawało mi się, że Protel3 który mamy nie był aż tak
przeładowany jak Protel 98 bo coś tam bardzo pozmieniali z plikami
wtedy, ale Protela 98 praktycznie nie znam.

To co miałem na myśli na pewno brakowało w V5. W V6 z tego co mi się
obiło to możliwe, że się da jakoś zrobić dopisując swoje regułki w
formie nie wiem jak to nazwać - pseudokodu. Tego typu rozwiązanie uważam
za nie całkiem rozwiązane bo człowiek pisząc ten kod musi trochę
wiedzieć jak to zapisać. Jak nawet to się uda to jak będzie taka
potrzeba za dwa lata to od nowa wyszukiwanie przykładów, ich
analizowanie i ogarnianie.
A powinno się wszystko dać zrobić na zasadzie wybierania z menu bez
żadnych wątpliwości.

Chodzi mi o sprecyzowanie wymagań clearance dla np. izolowanego RS485
(bo mam takie potrzeby).

W Protelu 3 mogłem to zrobić tak:
- definiuję klasę netów (IZO) i wkładam do niej wszystkie po stronie
izolowanej,
- w regułach produkcyjnych dodaję jedną regułę o clearance,
- określam (wybór z menu), że pierwszym obiektem jest klasa netów,
- według tego co wybrałem pojawia się możliwość wyboru - wybieram
klasę IZO,
- określam (wybór z menu), że drugim obiektem jest też klasa netów,
- z menu wybieram default (nie pamiętam jak to tam zwał).
- ustalam, że clearance ma być 3mm.

I działa - pozwala ścieżkom izolowanej części być między sobą blisko,
ale nie pozwala zbliżyć się do pozostałych ścieżek na płytce.

W KiCadzie V5 nie dało się tego dlatego, że clearance można było
przypisać do klasy netów a nie między klasami. Jak do klasy IZO
przypisałbym 3mm to one między sobą też chciały utrzymywać 3mm.

Inne co mi brakowało, ale daje się to uzyskać inaczej to klasy footprintów
W Protelu zawsze dzieliłem elementy na Big, Medium, pozostałe.
Dla big w regułach produkcyjnych ustawiałem, że podłączenie do filled
zone przez 4 odcinki o szerokości 30 mils, dla średnich 20 mils, a dla
pozostałych 10 mils.

W KiCadzie nie mogę tego tak łatwo definiować na etapie projektowania
płytki. Zrobiłem to wpisując na stałe te szerokości podłączeń do
definicji footprintów i jest do przyjęcia.

Ogólnie na etapie V4 uważałem, że KiCad jest porównywalny z tym Protelem
3 i dlatego postanowiłem się przenieść. V5 już uważałem za lepszy. W V5
najbardziej mi brakowało (z mojego starego Protela) możliwości
określenia kolorów linii połączeń i ukrycia linii GND bo to są dla mnie
połączenia, których nie muszę zrobić więc strasznie utrudniają przy
rozmieszczaniu myślenie jak rozplączę te połączenia.
P.G.

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

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wygląda rynek pracy dla programistów STM32? Perspektywy i wynagrodzenia

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map