Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Forth, za one sa razlčitim rasporedom vijuga...
#81
Sa Macolom sam pricao pre neki dan i dosli do jedne zanimljive konstatacije, na primer STM32 sa C/C++ ili sa Forth? U cemu je stvar?

Stvar je u tome da mora da se poznaje arhitektura procesora na prvom mestu, C je dovoljno nizak da moze da se upravlja na tom nivou procesora, kada znas sta jezgro treba i kako da radi onda je sve lako, moze da se pise program u bilo kom jeziku, programski jezik je tu zbog procesora - ne obrnuto!
To je i gospodin Slobodan Cuk isto prica, sta je bitnije Topologija ili Tehnologija (pretvaraca)?

Dakle kada se savlada jezgro, ajd jezgro manje vise post je ono univerzalno, kada se savladaju periferije, tajemri, USART, I2C i tako dalje za neki kontroler onda stvarno mozemo da pisemo programe u cemu hocemo, Forth moze samo to iskustvo da kroz svoj jedinstven pristup pruzi korisnuku, i dalje mora da se prate neki interapti, da se gledaju neki flagovi i tako dalje, prvo kontroler pa Forth kako ispada na kraju kao zadnja lestvica istrazivanja neke MCU platforme, on je za PRO korisnike.
Reply
#82
OK je sve to ali...
Taj isti STM32103 na blue pill ima i USB kao periferiju. Šta sa njim? Ako nema da je negde neko uradio, bar kao primer, kreneš da tučeš sam do besvesti!? Šta sa Ethernet-om na 407 familiji? Još gora stvar. Ovako uzmeš LwIP i vozi za 10-20min.
Lako je za spi, lcd, i2c i uart.
Reply
#83
Sve stoji, C/C++ vise dodje u "harminiji" sa procesorom, skoro da se neki delovi code-a mogu prevesti 1:1 u masinski code, korak po korak po dokumentaciji i dodje se do neke tacke.
Sa Forth moras biti mnogo iskusniji u svemu, moras sve to poznavati ali na kraju mozes u na primer 3 Forth Words da ihendlujes ceo HTTP (mozda i HTTPS) server, tacno kako ovako pricamo, ima URI, hendler, ima comanda za jedno drugo trece, asinhroni neki callback i tome slicno.

Ja sam probao LwIP, radi i to, ali ovako da moze u par reci da bude skockano, to malo teze sa C/C++ a da ne pricam sto nije interaktivno nego svaki put flesujem kontroler iznova i resetujem stanje gde sam bio sa testiranjem i tako dalje i tako dalje ... Smile
Reply
#84
Miki,

poznavanje arhitekture MCU-a i nacina finkcionisanja periferija se podrazumeva. Ni jedan jedini programski jezik na ovom svetu ti nece pomoci, ako ne razumes osnovu.
Ovde je prica oko programskog jezika Forth, a ne oko arhitekture MCU-a. Ja sam rekao da se meni Forth ne svidja ni malo i licno ne vidim nikakvu pogodnost sa tim programskim jezikom u odnosu na C i debagere koji su ugradjeni u sam MCU. C je mnogo prirodniji jezik od Forth-a.
Forth ima mali broj korisnika u svetu i to su zaljubljenici u taj programski jezik. Mene ne moze niko na ovom svetu da ubedi da mu je lakse i preglednije da sabere 2 i 3 kao:
2!
3!
+
@

nego da napise 2+3
Reply
#85
Jos jedna stvar. Jel se secas kad se pojavio Forth za PIC16F84? On je imao toliko bagova da je to bio haos. Onda je Zoki odvojio dobar period vremena za sve to isfiltrira i prilagodi sebi da moze da koristi kasnije u ozboljnim projektima.
Reply
#86
Sve stoji Vojce ali nema interaktivnost, to je problems sa C/C++ jezikom, ne mogu tako lakko da menjam code, mogu da ga analiziram stvarno detaljno, imam i lincencirane alate za C/C++ sa vrhunskim debegerima ali mi dzaba kada ja moram da na primer flesujem 10 puta kontroler jer "siljim" neku variablu, to je enoooormno gubljenje vremena, moraom da izmisljam toplu vodu kako bi samo sto manje puta flesovao kontoler zbog takvih sitnih testova koji su mi neophodni tokom razvoja.
Reply
#87
Problem sa TCP/IP je malo dublji, nema veze sa programskim jezikom, to sto ga ima za C/C++ je odlicno i neka ga, mozda portujemo delove code-a, a siguran sam da ima portova i za Forth ... : )

Mora tema da se poznaje, evo prirucnik iz 1999 godine, dan-danas je aktuelan, pise SVE kako TCP posebno a kako IP posebno radi, to da se poznaje, pa onda da se poznaje HW implementacija u kontroleru pa onda pisi u cemu hoces program : )
Sve se ovo navraca jer je TCP/IP tek poceo da se masovno koristi na MCU platformama a protokol je i dalje isti, cak su i IPv6 spomiljali tada, sve je isto samo se implementacije razlikuju  ...

Reply
#88
Na primer, ovo je jedna zanimljiva platforma, TI CC32xx ima dosta slicnih, navodim kao primer, tu je vec TCP/IP pa i cak HTTP/S integrisan u kontroler, to su novi "moduli" koje treba savladati Smile

Pogledajte ovaj PDF, koliko tu novih stvari ima koje nikad pre nisu bile u MCU, bile su na SERVERIMA, evo ga jedan bezican na baterije Smile

I uzgred, sad videh, koriste SECP256r1 ECC krivu (curve), sjajno, bas sam radio sa tim, poznato mi je sve, isto Maxim DeepCover sto sam spominjao radi po tom principu, ovo je jos bolje, integrisano sve u MCU.


.pdf   swra509b.pdf (Size: 689,05 KB / Downloads: 4)

---

Sto se tice jezika, bas oko toga, kada sam pisao drajver za Linux, to je ispalo vrlo lepo parce C coda spakovano u manje od 5kB sa sve komentarima, kolege koje su radile neki drugi deo programa vezan oko toga su pisali u GoLang jeziku, morali smo da napravimo import moje biblioteke i radili preko pointera do jednog trenutka dok ekipi nisam rekao, "ljudi ja ne znam da programiram u GoLang ali ako uzmem naucicu i napisacu ovaj drajver za 3 dana", i tako bilo, kolege nisu mogle da se snadju sa I2C u GoLang, ja sam to caskom savladao i napisao drajver u GoLang sto je uprostilo pricu oko prevodjenja i perfomansi.
Dok se vlada materijom nema problema sa programskim jezikom, ja vidim samo da Forth tu moze neverovatno dobro da cucne ako se tako dobro poznaje sam jezik kao sto se poznaje HW platforma.
Reply
#89
Vojče,
Sve ima svoju namenu.
Za zakucavanje eksera se koristi čekić, a za bockanje ćevapa viljuška. Ako se pokuša obrnuto onda su rezultati loši i zahtevaju ozbiljnu gimnastiku da bi bilo upotrebljivo.

Forth zahteva više razmišljanja a manje prepisivanja.
Ono što je suština Forth sistema je vrhunska interakcija između kompilacije i interpretacije, a ono što svi prvo i pogrešno zapaze je manipulacija stekom koja na prvi pogled izgleda vrlo nedopadljivo :-) i postfiks konotacija koja izgleda još manje dopadljivo.
Međutim, potreba za mnogo drndanja steka je samo znak loše kreirane REČi.
Dobar programer u Forth može pisati maternjim jezikom, maltene na način kojim govori.

Ovako na primer izgleda pokretanje neke multitasking sprave koja ima 8 grejnih PID zona, pedesetak I/O, merenje pritisaka fluida, merne letve i naravno glavni proces, naravno pisao Mlađa:

Code:
task pid
: startpid                     (                    --                    )
    pid start:
    decimal pidinit 4 places !
    begin
        negrej @ not if
            newsample? if at-active @ if do-at else pidctr then then
            report
        else mpwminit then
    pause
    again
;
: run  startad startui startpid startpots ;
\ ' run turnkey
run

Primetićeš da je reč <startpid> definisana neposredno iznad njene konačne upotrebe.

U Forth možeš da odsečeš stubove i zidove kuće kuće i da ih zameniš, a za to vreme krov i dalje stoji na mestu gde je bio.
Skratiš kuću po visini za 10cm, podmetneš novo parče dok ostatak kuće visi iznad i trenutno ga isprobaš na licu mesta, pa ako ti se sviđa zalepiš za trajno u fleš i to dok ostatak radi u realnom vremenu.

Sve je samo stvar navike i vežbe i sasvim je normalno da ljudske navike imaju tendenciju samoodržanja, poput samog života kao pojave.

I sve ima svoje mane i prednosti, kao i povoljne zone za efikasnu upotrebu.
Reply
#90
@Macola @vojinilic
Ne znam da li ste primetili jedan detalj vezan za knjigu TCP/IP iz 1999 godine, to je interesatno iz vise razloga.
Tih godina su Zoki i Branko uveliko koristili PIC u raznim oblicima sa Forth-om, medjutim o TCP/IP nisi mnogo imali pojma i iskreno nije ih u tom trenutku to ni interesovalo, sta ce to njima Smile
Tada sam ja sa tim stvarima pravio vrlo zanimljive projekte, setite se CityMap Kragujevac, interaktivna vektorska mapa, to je 5 GODINA PRE GOOGLE MAPS NAPRALJENO, prva vektorska online mapa pre svih vektorskih mapa bar u Srbiji/EX-YU!
Pricao sam tada da TCP/IP ima mnogo velike potenciale ali nisu me bas slusali, sta "klinac" prica Smile
20 godina kasnije evo ga TCP/IP direktno u mikrokontroleru! Big Grin A mozemo i Forth da koristimo samo da ga jos naucimo Smile
Reply
#91
(03-02-2019, 01:32 AM)mikikg Wrote: Na primer, ovo je jedna zanimljiva platforma, TI CC32xx ima dosta slicnih, navodim kao primer, tu je vec TCP/IP pa i cak HTTP/S integrisan u kontroler, to su novi "moduli" koje treba savladati Smile

Imam neki razvojni sistem za CC3200 pa ako hoces da probas tu sam.
Reply
#92
@mikikg nisi napisao valja li ponovno snimljeni signal za PIC18F2550?

@Macola kad sam vidio na kojoj brzini radi tvoja komunikacija morao sam pogledati u terminalu koja je zadnja brzina na popisu  Big Grin  (imaš još fore ako bude trebala i veća brzina). Macola jesi ti to prešao sa PIC na STM32? Vidim vuče želja za učenjem Forth-a.


Glavni razlog zašto sam se odlučio na Forth je upravo ta istovremena "komunikacija" koja se odvija sa mikrokontorlerom, a još uvijek je dovoljno brz u usporedbi s asmemblerom. Za primjer, kolega koji programira Simens PLC je imao nevjerojatnih problema. Imao je slučaj gdje je identičan ormar sa plc, servo kontorlerom i ostalim dodatcima program koji je prekopiran s istog stroja izbacivao greške i nije se htio pokrenuti, a da ne pričam slučaj gdje je pokidao zubčasti remen sa istim tim programom. Također na komunikaciju između dva PLC sa različitim firmware je znao gubiti i do nekoliko tjedana....itd...

Mene interesira Forth jer mislim (neka me netko ispravi ako griješim, u procesu sam učenja Forth-a) da ću svejedno izgubiti manje vremena dok dovedem neki stroj/sklop/elektroniku u pogon nego s bilo kojim drugim načinom programiranja. Za primjer, ako imam nekakav stroj, mogu doslovno sa riječima koje definiram korak po korak mijenjati dok sjedim pokraj stroja i gledam kako se odvija čitav proces dok pišem program. Primjer:

: podigni_rampu uključi_motor #2000 ms isključi_motor ;
podigni_rampu /pritisak tipke enter i promatraj hoće li motor biti pokrenut na 2s ukoliko se to ne desi, instrument u ruke i kreni tražiti. 


Ja dijelim majstore na dva tipa, na one koji popravljaju metodom pogreške i pokušaja, i na one koji znaju čitav princip rada nekog stroja. Siguran sam da ćete se složiti da je ovaj drugi proces brži i jeftiniji. Naravno, svi smo mi probali učiti ovom prvom metodom.
Zato je neophodno znati kako radi cijeli mikrokontroler i programski jezik da bi mogli isprogramirati onako kako bi željeli da radi, sve ostalo je metoda pogreške i pokušaja, ubaci ovu biblioteku, ako ne radi ubaci drugu i na kraju se opet svede na to da kopate po tuđoj biblioteki dok ju ne naučite.
Forth ne može svatko programirati kao niti asembler, jednostavno to moraš biti takva osoba. Ja moram znati sve procese, sve drugo mi se ne čini sigurnim. 

Iako STM32 ima neusporedivo bržu, a i vjerojatno napredniju jezgru, ostajem na PIC i flashforth iz više razloga. Prvi je taj što posjedujem već nekoliko PIC i imam pickit3 programator. Flashforth je pisan prije barem 13 godina i na stranici vidim da nema previše bugova koje je vlasnik morao ispravljati, a i nekoliko univerziteta ga koristi za podučavanje DSP-a što znači da već ima aktivnih korisnika. To mi je bilo dovoljno za odluku da ostanem na ovom sustavu i da se ne zanimam za ostale poput Mecrisp. Ne kažem da nije dobro znati ARM, no meni u ovom trenutku to nije potrebno i to ne znači da možda neću završiti na ARM, jer se ne može napredovati ako se ne uči.
Reply
#93
@vedran
Nesto nije u redu sa tim PIC i oscilogramom, 6250 Baud (6.25kHz) je nestandrdna brzina, postoji 4800 pa ide 9600 Baud a kako rece Macola trazena brzina je 38400 Baud.

Ako uzmemo da postoji mala greska kod ocitavanja ovih 6250 (mali uzorak) i recimo da je to mozda 6400 to ispada tacno da ima problem sa Clock-om i/ili pre-scalerom jer je 38400 tacno 6 puta vise nego 6400!
Reply
#94
[Image: attachment.php?aid=26247]

Inace sto se tice PIC-a i ARM-a, koristili smo PIC svi ovde u temi, ali kada smo u jednom trenutku dosli do ove tacke i pokazali sta sve moze kineska plocica sa BluePill sa STM32F103 koja je kostala sa sve kristalom, stabilizatorom i konektorima 2$, gde mozemo vlasniku masine gde ce to biti upotrebljeno da damo jos 10 rezervnih Blue Pill ako treba jer otkud znam kakvog su kvaliteta te plocice (a inace ih "preletujemo sa Pb kalajem : ) i plus na tu svu situaciju Microchip pocne da pravi ARM jezgra + skontamo da se ARM vrti vec na vise od MILIJARDU device-ova i uredjaja (od mobilih telefona pa nadalje) i na kraju dodju oni WiFi ARM kontroleri poput CC32xx, pa kako da me ne zainteresuje ARM ariktektura?! Smile

To su sjajne male masinice vrlo fino koncipirane, samo ce da se sve vise i vise obogacuju periferije, bice i bolji i brzih A/D, D/A, mesace analogno i digitalno, sve standardne funkcije koje su togom godina postojale u SW ce se prebacivati u HW i tako dalje ...
Reply
#95
PS: Ovo sa 10 rezervnih kineskih plocica se odnosilo na to da ove ostale plocice koje je kolega Macola pravio (razni izolovan I/O) prakticno ne moze nikad da crkne Smile
Jedino direktni udar groma ne prezivljava, za ostale situacije mozemo da diskutujemo Smile
Reply
#96
Ne znam otkud ideja da sa Forth postoji problem oko složenih komunikacija i najviših nivoa apstrakcije?

Forth je redak meta jezik koji se "proteže" do najviših nivoa apstrakcije.
Čak mislim (ispravite me ako grešim) da je jedini koji obuhvata od najvišeg nivoa programiranja pa sve do golog asm u isti mah.
Pri tom ne podrazumevam miksovanje asm sa nekim od jezika, jer to mogu mnogi jezici, već isključivo korišćenjem samog Forth, gde je samo HW postavljen asm direktivama.
Odnosno, samo prvi sloj, hw sloj, mora biti postavljen na najnižem nivou, kao i u bilo kom jeziku, a svi ostali slojevi mogu biti Forth, od manipulacije bitovima, preko složene grafike pa do najsloženijih komunikacionih protokola.

Popriličan deo toga što gledate na web pretraživača je pisano u Forth.
Dosta složenih projekata koji obuhvataju mega infrastrukture je pisano u Forth (na primer sva kontrolna struktura na aerodromu u Abu Dabiju).
Mnogi svemirski programi.
Svaka PC mašina, bez obzira na OS u kom radi, se početno butuje u Forth, oko uspostavljanja bazne hw strukture.

Forth uopošte nije tako malo zastupljen kao što se pretpostavlja i nije nekomercijalan i prisutan je maltene svuda, u vidljivom ili nevidljivom obliku.

Evo linkovaću neke stvari oko Forth projekata:
http://www.forth.org/successes.html
https://www.forth.com/resources/forth-apps/
http://web.archive.org/web/2010102422370....nasa.gov/

I tako dalje i tako dalje...

Kao što je lepo rekao Vojin, jednostavno to nekom leži ili ne i to je to.
Nekom leži flauta, nekom klavir i tu je kraj priče.
Najbolji kandidati za sjajne Forth programere su ljudi koji su naučili da rade u asm, a nisu stekli navike u ostalim jezicima.
Ko nauči Fort, taj postaje bolji programer u ostalim jezicima zato što razvije kompaktan način ramišljanja i ne razbacuje se resursima.

Da li treba da prihvatim kao napredak to što današnji računar radi recimo 200% moćnije nego pre recimo 5 godina, a za to troši 5000% više resursa u svakom smislu?

To jeste moćan napredak sa hardverom, ali je jako degradiranje na nivou softvera, gde su stvari počele da se svode na masovno prepisivanje i copy-paste sa malo izmena, odnosno pakovanje lego kockica na neki nov način, a pri tom mi trebaju silni gigabajti memorije i silni gigaherci kloka.

Bili ste tek umereno zadovoljni poslednjim krikom pentujuma 1, kad je se pojavio i radili uspešno na njemu, kao što ste danas tek umereno zadovoljni četvorojezgarnim telefonom kome taj pomenuti pentijum 1 stane u jedno ćoše procesora.

Nisam primetio baš srazmeran porast zadovoljstva korisnika sa nenormalnim porastom ponuđenih (a i odmah potrošenih :-) resursa.

Forth programer inicijalno ima premisu da se ne razbacuje resursima i po navici optimalno piše, ma koliko bila bogata platforma na kojoj radi.
Reply
#97
Hehe, to je kao kada ja pokrenem JavaScript Graficku aplikaciju na Rasppbery Pi kroz Linux GTK graficki sistem i radi mi 3 frejma u sekundi grafika i kad to sve "razbucam" i batalim GUI i napisem program u C++ koji prica sa OpenGL na grafickoj kartici direktno i sve pocne da radi sa 60 frejmova u sekundi i jos dobijm gigabajt slobodnog RAM-a : )
Reply
#98
@Vedran,

Tačno je da sam prešao na ARM i to na STM32. I dalje tek ponekad upotrebim PIC.

Neke od razloga je pomenuo Miki.
Cena gotovih modula, poput Blue Pill sa STM32F103C8T i DiyMore sa STM32F407VGT6, su niske.
Nude veliku brzinu izvršavanja i rad sa 32 bita.
Ovaj drugi pak ima gomilu korisničkih pinova.

Čim imaš na ponudi veće mogućnosti, proširuje ti se i paleta rešenja.
Iskoristio sam 8bit PIC do neviđenog maksimuma i prerastao taj broj cipela.
Nisam hteo ići na 16bit PIC i 32bit PIC jer je se u međuvremenu na ponudi pojavio jevtini STM32.
Stavio sam pre 4 godine jedan STM32F407 na vrlo surov test u teškom industrijskom okruženju i posle 4 godine taj test smatram vrlo uspešnim.
Radi se o automatskoj NC mašini za brzo sečenje žice na meru. Seče žicu od 2-5mm, na mere od 20cm pa do 2000cm.
STM32407 pogoni jedan servo motor i neku pripadajuću pneumatiku u okruženju koje je prljavo, masno, puno metalne prašine i jake elektronske buke od mnogobrojnih kontaktora u blizini i temperaturom okruženja od -25C do +50C do sada izmerenih.
Sprava je do sada odsekla preko 10 miliona komada i nije imala nijedan elektro kvar. Jedini servisi su bili na mehanici koa se troši sa tim brojem ciklusa.

STM32 je prošao test što se mene tiče.

Ne mogu više nabrojati ni jedan razlog da ih ne koristim.

Šta više i tebi preporučujem da odmah pređeš na 32bit ARM, na primer upravo onaj ultrajevtini Blue Pill, gde si sa fotke na Mikijevom postu mogao videti da sam ga u prvih par desetina primena "naduo" do 104 I/O, sa istovremenom i2C, SPI i RS485 komunikacijom.
Na ono sa fotke je vezana konzola sa još jednim Blue Pill koji drajvuje TFT od 7 inča i prigodnu tastaturu.

Taj koncept (hardverski ulepšan) sada uspešno pogoni jednu mašinu tešku 50 Tona.
Morao sam odmah da vidim gde leži maksimum do kog mogu da idem sa Blue Pill i sa tim konceptom ga nisam probio, tj. taj maleni Blue Pill ima još dosta neiskorišćenih resursa...

A za 2$ ti se isplati da njim pogoniš 5 komada LED u zabavne svrhe.

Eto o tome se radi.

Jedina mana MCU na 3V3 je niža margina šuma i potreba za prilagođenjem na 5V periferije, no nemoguće je napraviti bilo šta bez bar neke mane.
Reply
#99
(03-02-2019, 01:24 PM)mikikg Wrote: Hehe, to je kao kada ja pokrenem JavaScript Graficku aplikaciju na Rasppbery Pi kroz Linux GTK graficki sistem i radi mi 3 frejma u sekundi grafika i kad to sve "razbucam" i batalim GUI i napisem program u C++ koji prica sa OpenGL na grafickoj kartici direktno i sve pocne da radi sa 60 frejmova u sekundi i jos dobijm gigabajt slobodnog RAM-a : )

Upravo tako nešto.

"Resavska" prepisivačka škola rešava stvari u kratkom roku i sa angažovanjem tima sasvim prosečnih kreatora, ali zato jede resurse do neviđenih granica.

I onda nas kao začudi što nam na PC trebaju terabajti i gigaherci...
Reply
Juče sam potrošio pola sata i naravio maleni hardver za konekciju na bilo koji MCU, sa napajanjem od 3-5V.
dakle, može na PIC, Atmel, STM.... i na bilo šta što ima USART i radi od 3V do 5V. Ništa novo, ali početnicima može biti od pomoći.

Gurnuo sam, pomoću ST Link, Forth u STM32F407, zakačio terminal, postavio baud rate na 115k200 , resetovao i BUM radi trenutno.

Biće da nekom možda zatreba taj hardverčić.


.pdf   232_3_5V.pdf (Size: 10,5 KB / Downloads: 26)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)