[ korak @ 10.08.2021. 14:40 ] @
Nekada, 90-tih godina silom prilika napravio sam pravi multitasking za upravljanje jednom složenom mašinom. Nju nisam mogao da donesem u radne prostorije, a bila je daleko od Niša.

Prva ideja je bila da napravim simulator mašine jednim MCU-om i da je povežem sa kontrolerom mašine. Onda mi pade napamet zašto da se zezam sa još jednom kontrolerskom jedinicom, kada mogu da napravim multitasking sa samo dva taska, gde bi jedan task simulirao mašinu. Kada sam to napravio, kolega se oduševio, i preko noći do jutra je pisao simulator. Tako napravismo kontrolu mašine za duplo kraće vreme od planiranog.

To je bilo sa HC11. Od tada je prošlo mnogo vremena, a računar sa izvornim kodom i svim projektima sa HC11 iz tog vremena je već odavno na deponiji. U međuvremenu sam zatvorio firmu, i ono malo što uradim pokrivam firmom drugara.

I po onom "besposlen pop jariće krsti" uzeh da napravim pravi multitasking za sledeči MCU kojim sam radio, MC9S08 ali za bilo koji broj taskova.

HC11 je uključivao taskove za oko 5us sa frkvencijom na magistrali od 2MHz, a ta frekvencija za 9S08 je 20MHz pa ima smisla samo ako ću uspeti da prebacujem taskove za manje od 5us. Ideja je da se taskovi uključuju na 500us.

Postavio sam tehničke zahteve, i sada ih razrađujem u smislu implementacije.

Taskovi se menjaju na prekid nekog tajmera sa periodom 500us ili više, sa mogućnošču da se neki task izvršava i duže.
Prebacivanje taskova i drugi prekidi ne smeju da budu u koliziji.
Stek prostor treba podeliti tako da svaki task ima svoj deo steka.
Glavni program je takođe jedan task.

Mora da postoji procedura za uključivanje taskova. Ona mora da promeni adresu povratka, koja ukazuje na prvu instrukciju pre prekida, na adresu sledeće instrukcije sledećeg taska kada je on bio prekinut. Sa povratkom iz prekidne procedure, nastaviće se izvršenje sledećeg taska. Pored ovoga, treba i stek pointer promeniti da ukazuje na stek sledećeg taska.

Vidim da je potrebna inicijalizacija stekova za svaki task što ne bi trebalo da je problem.

Pošto dosta toga mora biti u asembleru, ideja mi je da sve napišem u asembleru, a posle da "prevedem" na C, osim onoga što mora da bude u asembleru. Ali to će biti u nekom include fajlu i neće smetati.

Nisam siguran da cu doći do optimalnog rešenja, pa ako je neko nostalgičan može pomoći, ako su mu dosadile teme tipa kako da pogonim displej arduinom ili slično što je u starim dobrim vremenima bila trivijalna stvar.
[ bogdan.kecman @ 10.08.2021. 16:38 ] @
ne mogu pomognem nemam vremena ni za sta :( ali mogu bacim 2 recenice...
svakako ne mora da bude pisano nista u asm, cak stavise, kompajleri za C
su postali toliko dobri da vec u drugoj iteraciji tvoj asm program cak i
ako si genije i uspeo da ga optimizujes da bude bolji od  c programa
nije vise bolji i pada ispod tako da se asm vise ne isplati...

sto se pisanja multitaskinga tice, ako ti je iz dosade, a ti pisi sta
god ti ubija dosadu, ali ako ti je iz bilo kakve potrebe bolje ulozi
vreme da ucis FreeRTOS koji trci na svakom iole interesantnom MCU-u
danas, open source je, dzabe i radi vrhunski dobro... nije 100%
pokriveno sve sto treba jednom rtosu (na primer nema kompletne mailbox-e
vec samo delimicnu imlementaciju i slicno) ali je ozbiljan paket koji
KIDA kako radi
[ Living Light @ 10.08.2021. 19:29 ] @
jedino se cudim,
kako tebe Bogdane nije VRBOVALA neka NASA ili neka Ruska podmornica,
pošto ovako znaš stvari?

Da sam JA sa njihove strane,....
...Ti bi vec bio "Kindapovan, ILI kako se ve' kaže,..
...Kidnapovan"

Naravno, ....(valjda razumeš šalu),
Pozdravljam Te i Svako Dobro Bogdane!!!
Uzdravlje,
[ korak @ 20.08.2021. 18:02 ] @
Pogledao sam freeRTOS, zapravo više komentare uz kod i nešto malo i koda, ali bi potpuni uvid zahtevao mnogo vremena. Takođe sam pogledao i sve što sam mogao naći na temu RTOS za 8-o bitne mikrokontrolere. Ima tu opisa uz ponudu nekog RTOS-a, izveštaji o pisawu RTOS-a i slično.

Koriste se pojmovi: procesi, zadaci, kooperastivni multitasking, semafori i možda sam nešto i zaboravio. Zatim stvaranje dinamičkog mem. prostora za uključivanje procesa, kao i uklanjanje po prelasku na drugi proces, kao i potreba da zadatak mora biti završen pre nego što se uključi novi proces.

Sve to mi se nije uklapalo u moju zamisao da svaki proces dobija u proseku 500us izvršenja, da se za prelazak na drugi proces potroši oko 5us, da ne postoje nikakva ograničenja i da nema kolizije sa interrupt-ima.

Tako sam za proteklih 10 dana, od toga pola vremena potrošio na čitanje po internetu, napisao i testirao prvu verziju multitaskinga. Ukratko, karakteristike su sledeće:

1. Izdvojeni stek 200 bajta, po procesu 50, a za efektivno korišćenje 44 bajta;
2. Perioda uključivanja procesa 500us prekidom tajmera;
3. Vreme potrebno za promenu procesa 5.75us;
4. Broj procesa do 4, gde je main funkcija nulti proces, a uz njega još 3.

Ove karakteristike se mogu promeniti, ali zavise od toga koliko možete RAM-a da odvojite za stek, i koliko brzo želite promenu procesa i t. d.



[ bogdan.kecman @ 20.08.2021. 20:42 ] @
pazi sto se freeRtos-a i generalno svih ostalih rtosa tice sve to o cemu
pricas je configurabilno... taskovi mogu da imaju stek razlicite
velicine, mogu da rade na vise jezgara, taskovi imaju razlicite
prioritete te ne moraju svi taskovi da rade tacno odredjeni broj us,
takodje taskovi mogu da imaju "safe region" gde se task switch nikad
nece desiti, imaju mutekse, semafore, mailboxove, evente etc.. pre kojih
se komunicira izmedju taskova, preko kojih se limitira pristup shared
resursima (zajednickim varijablama, seriskom portu i slicno) ...
freertos je preemtive, sto znaci da task dobije slajs vremena i onda mu
se to vreme oduzme (sto ti kazes 500us) ali takodje task moze da "preda"
vreme drugim taskovima ranije ako ceka na neki event ili prosto ako je
zavrsio sa bitnim delom pa mu za dalje nije frka  (
https://freertos.org/a00020.html#taskYIELD )

pocetni stadijum da imas samo fixne taskove, koliok oces istih, i da se
se oni switchuju non stop na x us je pdim, to je 0.1% posla, i realno
par dana da se napravi, onda kada dva taska treba da komuniciraju ili
kada treba da pristupaju istim resursima i to treba da bude
standardizovano nastaju problemi jer onda moras da krenes da
implementiras jednu po jednu jos jedno 50% stvari koje u svakom rtosu
vec imas ... onih drugih 50% ti verovatno neces koristiti ali ako neko
uzme da pise sw koristeci tvoj sistem on ce hteti bar jos 10% koje nemas
i slicno...

pravis ga za sebe pa svakako pravi sta ti zanimljivo


npr

Code:

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* Configure the system clock */
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_CAN_Init();
  MX_SPI2_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  MX_TIM2_Init();

  /* Init and start scheduler */
  osKernelInitialize();  
  MX_FREERTOS_Init();
  osKernelStart();

  while (1);


Code:

osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
  .name = "defaultTask",
  .stack_size = 200 * 4,
  .priority = (osPriority_t) osPriorityNormal,
};

osThreadId_t readADCTaskHandle;
const osThreadAttr_t readADCTask_attributes = {
  .name = "readADCTask",
  .stack_size = 200 * 4,
  .priority = (osPriority_t) osPriorityLow,
};

osThreadId_t readEncodersTasHandle;
const osThreadAttr_t readEncodersTas_attributes = {
  .name = "readEncodersTas",
  .stack_size = 200 * 4,
  .priority = (osPriority_t) osPriorityLow,
};

void MX_FREERTOS_Init(void) {
  defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  readADCTaskHandle = osThreadNew(startReadADCTask, NULL, &readADCTask_attributes);
  readEncodersTasHandle = osThreadNew(StartReadEncoders, NULL, &readEncodersTas_attributes);
}


[ korak @ 20.08.2021. 23:56 ] @
Sve mi je to poznato. Moja realizacija može da menja trajanje svakog procesa u jednom tasku i to dinamički tokom izvođenja prograna. Ono što sam naveo to sam testirao. Jedino se unapred zadaje maksimalan broj procesa (ne moraju se svi inicijalizovati) i raspoloživ prostor na steku.

Nisam zamislio procese koji bi bili za čitanje AD-a ili za COM, već da procesi budu zaokružene programske celine. To sam i naveo u uvodnom posti, jedan proces je bio simulacija mašine, a drugi kontrola mašine. Na primer kontrola lifta ima više procesa: upravljanje kretanjem kabine i motora, upravljanje vratima kabine (spoljna, unutrašnja) upravljanje spoljnim spratnim pozivima i eventualno arbitražom kod dupleksa.

Skromne mogućnosti 8-o bitnih mikrokontrolera ne treba trošiti jeftino. Uz ograničen RAM, flash i brzinu, mnogo je važnije brzo uključivanje procesa i koncepcija u kojoj se ne javljaju greške. U primeru lifta, svi procesi imaju isti prioritet, ali dinamika događaja u nekom procesu može biti niža, pa se tom procesu može dodeliti kraće slajs (parče) vreme. Dakle to je ciljna gripa problema kojima sam bio okrenut kada sam pravio moje rešenje multitaskinga.

Dodavanje osobina koje si naveo samo bi produžilo vreme uključivanja drugog procesa, a od tih novih osobine ne vidim velike koristi u mojoj koncepciji.

Osim toga, da budem iskren, moja firma više ne radi, imam druge izvore prihoda i dosta slobodnog vremena koje mi ispuni tek delimično neki sitan poslić, pa uzeh ovo da uradim po principu besposlen pop jariće krsti.

Razumem da mnogi na forumu žive od ovog posla, pa otud arduino, razne biblioteke, pa evo dotakli smo se i RTOS-a. Neko nekada reče sledi kraj istorije, a ja vidim da sledi i kraj našeg zanata, sve dolazi u gotovim kockicama. Sa nostalgijom se sećam kada sam pre 15 godina postao član goruma, ovaj pdf je imao po nekoliko novih tema svakog dana, a sada jedna mesečno.

Pozdrav.
[ bogdan.kecman @ 21.08.2021. 00:37 ] @
niko ne zivi ozbiljno od arduina i kockica :D to su igrackice koje tu i tamo mogu da se naplate da se izdrzava hobi i to je to ..

kakav kraj zanata, evo imam upravo tim od 6 ljudi koji pise firmware za veliku industrisku maisnu vec po godine i ima jos jedno po godine da ga zavrsi (C++ i embOS segger-ov rtos sa nekoliko cm4 armova os stm-a i jednim arm cpu-om), pravim novi tim upravo od 3 coveka da pise firmware za neki power line communication gateway, jedno 6 meseci posla (C i freertos na S32 nxp arm cm4).. posla ko pleve za ozbiljno programiranje, a ni kinta uopste nije losa (900+ eur nedeljno za 40h nedelju) ... no slabo ko ima vremena da razvija i testira nesto sto vec postoji :) (znam da sam uvek pricao da ja ovo sa elektronikom iskljucivo kao hobi - nonprofit, ali renoviranje kuce se produzilo, fali para jbg, pa sam morao i ovo da monetizujem, dok ne zavrsim, pa se onda vracam u hobi vode :D )

elem
Citat:
Skromne mogućnosti 8-o bitnih mikrokontrolera
kao sto rekoh milion puta, 32bitni mcu danas kostaju kao i 8bitni mcu, koristiti 8bitni mcu na bilo cemu sto nije "pljuca na pcb-u neke kineske igracke" je gubljenje vremena, a i sam si rekao da ovo hoces da pravis na 32bitnom arm-u (neki NXP obzirom da Motorola tu vise ne postoji, tako bese?)

Citat:
samo bi produžilo vreme uključivanja drugog procesa

gresis :D task switching je max brz, svaki task ima sve svoje tako da je switching izmedju taskova extra brz, trosak vremena na sam scheduler je uzasno mali... da li ce switch trajati 2-3 instrukcije duze ne znaci nista obzirom na kolicinu kontrole koja se dobija

Citat:
Nisam zamislio procese koji bi bili za čitanje AD-a ili za COM

pa tako kako si zamislio i ne mozes da imas thread safe nista ni deljenje bilo cega ni kvalitetnu komunikaciju... za taj jedan primerak simulacije lifta i kontrole istog ce da radi ali to je resenje koje koristi samo i iskljucivo tebi, za bilo sta drugo / bilo koga drugog je beskorisno ... no nema veze, zatrebace ti i ovo i ono pa ces dodavati :) mozda dodjes do iskusnog "korakOS-a" u nekom trenutku :)
[ korak @ 21.08.2021. 02:13 ] @
U svemu se slažem sa napisanim. Pratim te od kada sam na forumu i znam da se vrlo profesionalno baviš ovim poslom. I pored svega vidim da nalaziš vreme da svakom pomogneš, i uvek pročitam sve što napišeš.

Ja sam odnedavno u penziji i samo po nekada uradim nešto za neku lovu - dobro dođe.

Inače sa multitaskingom sam se upoznao kada smo u firmi kupili San radnu stanicu sa MC68020 80-tih godina. Procesor je imao neku hardversku podršku za multitasking, već tada, i prklapanje procesa je tamo bilo zaista jednostavno i brzo. Danas je sve to još višestruko poboljšano.

Freescale je kupio NXP ćerka firma Filipsa, i nastavili su da održavaju proizvodni program kupljene firme.

Cena mikrokontrolera je najmanje kritična kada za dobar konektor ili taster ili neki senzor platiš dosta više. Važne su zato samo performanse. Ako neko želi da se ozbiljno bavi 32-nim MCU-ovima, kao ti, mora da ima i dobar razvojni sistem jer tu ima milion registara statusnih i kontrolnih bitova i tu dejta šitovi ne pomažu. Na tome ne treba škrtariti. Neki drugi misle: nabavio sam super MCU sada ću da pravim super stvari. Ne može, kupio sam razvojnu pločicu korteks m4 256KRAM, 1MB flash 120MHz industrijski standard, ali koristim besplatnu verziju razvojnog sistema koja ogranićava kod na 128KB, nema RTOS i MQX. I šta sam mogao da uradim, tek delić performasnsi da iskoristim. Zaglavio sam kada sam hteo da koristim nekoliko DMA kanala da iz memorije šaljem podatke preko 3 SPI-a. Procesor ekspert mi je izgenerisao nešto koda, a ostalo sam morao "peške" i nikako nisam uspeo da to dovedem do željenog nivoa rada.

Drago mi je da si uspešan u poslu, i nisam iznenađen, i želim ti još više interesantnih projekata.

Pozdrav.
[ bogdan.kecman @ 21.08.2021. 02:40 ] @
Citat:
korak
Inače sa multitaskingom sam se upoznao kada smo u firmi kupili San radnu stanicu sa MC68020 80-tih godina. Procesor je imao neku hardversku podršku za multitasking, već tada, i prklapanje procesa je tamo bilo zaista jednostavno i brzo. Danas je sve to još višestruko poboljšano.

ako se dobro secam imao je MMU koji se uspesno koristio ne za multitasking vec za multiprocess rad jer si mogao lakse da limitiras pristup memoriji razlicitim procesima, za sam multitasking nije imao nista specijalno sto pre njega nije bilo na ostalim masinama :) ...

Citat:
korak:
mora da ima i dobar razvojni sistem jer tu ima milion registara statusnih i kontrolnih bitova i tu dejta šitovi ne pomažu.


na zalost, da i ne... sve zavisi... ja za sve moje projekte koristi STM32 zato sto su se pokazali najbolji za male proizvodjace
- imaju jeftine razvojne alate
- kinezi su im ... tako da imas jos jeftinije fully functional klonirane alate + imas do jaja dobre kineske verzije najpopularnijih stm32 mikrokontrolera koji su jos i brzi i jeftiniji :D ... npr GigaDevice - vidi link za dobar text o tome
- uradili su ozbiljan dev sistem sa box + atolic
- imaju najmanje errata od svih ostalih mcu proizvodjaca tako da ne gubim vreme
- imaju ogroman raspon cipova za sve po ok ceni

ali sta mi to vredi kad mi dodje klijent i da gotovu razvijenu plocu da se uradi sw a na njoj FS32K144 .. i jbg, aj setapuj sve za NXP FS32K1xx pa da vidimo gde ce zabode i u kom po redu errata-u ce nadjemo zasto nesto ne radi kako pise da treba da radi :( ... volim ja to ko mikikg sve low level, sve fancy direkt po registrima, al ono klijent placa na sat, oce da bude gotovo juce i ne interesuje ga kako izgleda nego oce da radi :D tako da ako HAL ubrzava, teras HAL :D

problem je sto neki alati bas previse kostaju, za jednog klijenta smo radili u prastaroj IAR varijanti, novi IAR bi nam bas mnogo stvari olaksao ali jedna licenca tog %#$^#& kosta 10,000$, ako bi presli na novu verziju to je preko 200 licenci koje mora da se kupe, sve i da nam spuste cenu 50% .. zato ja volim sto za ARM postoji free GCC i uglavnom mozes da napravis svoj env. u kome mozes lepo da radis (posebno sa Visual Studio Code koji je stvarno pao sa neba) ali opet, sve to nasiljis i dodje klijent i kaze "ja ocu xyz studio v0.0001alfa-pre-dontuse" i jbg, vezes konja de ti gazda kaze

penzija je super, ja se nadam krajem godine da cu u neku "kvazi penziju", da mogu malo, najzad, da se posvetim sebi i deci :D

da se vratim na temu,

kao sto rekoh, za svoju dusu pravis sta god ti zgodno, iskreno, meni nikad ne bi bilo zabavno da pisem rtos, ni rudimentarni, kao hobi, ali sto da ne, 99.9% ljudi smatra moje hobije kompletno ludim tako da smo tu na istom... sa "simulatorima" na zalost imam bas dosta iskustva, ja bi licno to sto radis za lift uradio kao 2 potpuno odvojena projekta i hardwerski i softwerski ... jedan mcu + neki lep display sa animacijom pozicije lifta, stanja motora, ulaza, izlaza, sa svojim fizickim ulazima i izlazima kakav ima jedan lift sistem, i drugi sistem sa mcu koji se kaci na taj prvi sistem preko nekog multipin interfejsa i kaci se na sve "tastere", "signale", "stagod" na kome je pamet ... tako da umesto da to uguras na jedan mcu (svakako moze da stane ali sto bi), napravis fancy simulator lifta u jednom uredjaju i na njemu testiras razne izvedbe "pameti" sa drugog uredjaja :)
[ korak @ 21.08.2021. 13:37 ] @
Baš kao što si napisao, tako smo napravili simulator lifta. Na njemu se birao pogon lifta (elektromotorni ili hidroulični) brzina kabine, broj stanica (spratova) položaj znački (čita ih kabina dok se kreće) vrsta vrata kabine (ručna poluautomatska automatska svetlosna zavesa) senzori u kabini i t. d. Uz to moglo se setovati i kvar nekog senzora ili kvar rid prekidača koji detektuje značke, spale značke sa svog položaja i još mnogo toga. Simulator je baš bio zamašan program jer je obuhvatao sve vrste liftova (klasične, industrijske i platforme) i sve vrste vrata spoljnih i unutrašnjih. Bez takvog simulatora ne bi napravili ništa.

Penzija je lepa stvar ako si još uvek jednom nogom u poslu. Sve odjednom postaje opuštenije.

Želim ti svu sreću.
[ bogdan.kecman @ 21.08.2021. 15:05 ] @
pa to, ali ne vidim razlog sto bi to gurao u pola mcu-a da bi druga
polovina vrtela kontrolu, po meni je bolje da je to potpuno odvojeno :)

nadam se da ce ta "pemzija" da bude kako sam zamislio :D ... bas tako,
sa onoliko u poslu koliko zelis... nista preko toga
[ korak @ 21.08.2021. 22:35 ] @
Da, čak nije bilo ni moguće. To je rađeno do 2010 dok je grad Niš učestvovao u finansirawu remonta starih liftova, a tada sam radi 8-o bitnim. Jednostavno oba koda ne bi stala u flash.

Ne zovu džabe Hrvati penziju mirovina. Sa godinama počunje da te mrzi da radiš, pa čekaš posebnu inspiraciju. Inače energija uma je ista, ali se snaga uma smanjuje, usporava se rad mozga. Radiš sporo, ali sigurno dobro.

Evo ja mesecima odugovlačim ugradnju step motora na slajder za kameru sinu koji se bavi snimanjem. Odavno sam napravio elektroniku, pa onda na tenane projektovao u solid vorksu 5 aluminijumska elementa i sada samo treba da odem da kupim aluminijum i da dam da se obradi na glodalici. Što sam bliže završetku posla češće me mrzi.
[ bogdan.kecman @ 21.08.2021. 23:10 ] @
sve jasno :D ... doduse u nekim slucajevima nije problem sporo vec
prestane normalno da radi, samo ostane osecaj da je sve samo malo
usporeno a u stvari donose se odluke paklene... gledam mog caleta,
zadnjih 10 godina... uzas, resio sam da na vidnom mestu istetoviram
sebi, dok sam jos svestan nesto tipa "slusaj decu" posto kapiram da me
ceka slicna sudbina, ako uopste dozivim njegovih 80+ .. zez je samo sto
sam ja u "ocu u mirovinu" fazi vec par godina a nemam ni 50
[ korak @ 22.08.2021. 14:54 ] @
Spram mene ti si u cvetu mladosti. Misli na penziju, koliko ćeš uplaćivati u PIO, imaš predispoziciju dugovečnosti (na oca) pa bolj da dugo uživaš nego dugo da se zlopatiš.

Srećno ti bilo.
[ mikikg @ 22.08.2021. 22:05 ] @
Nece skorije penzija ... :)

Da vidis na primer kada ti dodje custom Omnivision RTOS, 4xARM + 4 razlicita dodatna kooprocesora, jedan za Codec-e, drugi za nesto, treci za AI i neuronske mreze, cetvrti za neku matematiku, sendvic sa ugradjenim 0.5GB DDR-a u BGA kucistu i treba da povezes kameru direktno i da strimujes tamo negde ... :)

Sve je u zaglupu, i software i hardware, proizvodjaca ne tangira nista tu sad oni tebi da pomognu oko toga nesto, nema pojma, jedva se javljaju sa nekim korisnim informacijama, sve je closed-source nista nema otvoreno, ni dokumentacija niti code ...
Brale, imeplementacija tog RTOS ima 5000+5000 .c/.h skripti ... :)

Kad sve to skontas i stavis u funkciju koliko-toliko i kazes proizvodjacu, ok daj mi sad na primer 5000 komada procesora da napravim uredjaje, on kaze nema problema, upisi se na spisak za cekanje, vreme isporuke 40 do 80 NEDELJA, pa kad stigne ti ugradi, u medjuvremenu ljude posaljite na odmor ...
[ bogdan.kecman @ 22.08.2021. 22:51 ] @
nedostatak cipova na trzistu je meni neobjasnjiv, ne kapiram sta se
desava, nije samo cipova, nema konektora nema skoro nicega, vreme
isporuke u godinama... nema teorije da to ima veze sa koronom
[ mikikg @ 22.08.2021. 23:14 ] @
Hehe, sta moze da bude jos crnje kod ovogo gore projekta, da pored Omnivision umesas i Qualcomm za BlueTooth, e to kad uradis onda je veseeeelooo na kvadrat!
Qualcomm je jos crnji po mnogim pitanjima, po ušima prvo pa onda mozes da pitas kako da iskoristis njihov neki debilni ne znam ni ja sta je nije linux nije rtos, neki custom stack sa dva (verovatno) ARM jezgra i dva DSP-a preko custom placenog prevodioca na Windows only sa njihovim GUI-e koji podseca na QT, eeee, ne znam sta da kazem a da ne opsujem :)
To je toliko zaguljeno sa BlueTooth da ustvari prvo CPU jezgro se samo time bavi i hendluje razne stvari dok je drugo CPU jezgro ostavljeno za korisnika koji sad treba da se upakuje u taj njihov postojeci setup.
Sve super divno kransno ali kad se uhvatis na primer I2C i sekvencionisanju nekih komandi jojjj kako to puca samo tako ako se ne ishendluje sve kako su ONI zamislili :)
Ima poseban njihov Qualcomm debugger, radi dobro ne bas savrseno, preko Python-a kuvaju u pozadini sa tim pa se i moze nekako namestiti.

Za Omnivision, verovali ili ne, proizvodjac mi je rekao da NE koriste JTAG konekciju na procesoru i ako postoji i ja je povezao, nisam mogao da verujem, pitao sam ponovo, kazu za taj kontroler nemamo nikakav support za JTAG i ne koristimo, "snalazi se kako znas", strasnoo ...
[ mikikg @ 23.08.2021. 00:09 ] @
Citat:
bogdan.kecman:
nedostatak cipova na trzistu je meni neobjasnjiv, ne kapiram sta se
desava, nije samo cipova, nema konektora nema skoro nicega, vreme
isporuke u godinama... nema teorije da to ima veze sa koronom


Kao nekad kada su se proizvodjaci žarulja "ujedinili" u monopolistickoj ideji tako isto i sada, svi se oni znaju medjusobno mnogo dobro, rade inace jedni sa drugima ovako ili onako, osetili su trenutak i hajde sad da vas razvalimo, imate da nas cekate, da nam kazete koje ce te delove unapred pa da se mi organizujemo, premesticemo proizvodnju odave-onde, prepakovace se i isporucice sve kolicine jer na kraju moraju da uzmu LOVE, bice to po ceni koji se taj IC-KARTEL dogovori, svi imaju da cekaju, i BMW i Tesla i IBM, sviiii dok se oni ne postave kako njima odgovara.

[Ovu poruku je menjao mikikg dana 23.08.2021. u 01:23 GMT+1]
[ korak @ 23.08.2021. 13:54 ] @
Jpš pre 30 i više godina pričao sam kolegasma da je trend da se stvori jedna elita u našoj branši koja će praviti procesorske komponente i SW podršku. Da će posao ostalih da se svede na tipkanje po tastaturi i sklapanje kockica, a da mnogi od njih neće znati ni tranzistor da apliciraju. I to je dovoljno za jednostavne aplikacije, a za one prave profesionalce koji rade složenije aplikacije slede mnogi problemi od pristupačnosti pravim detaljnijim informacijama pa do isporuke komponenata.

Radni vek sam proveo u 8-o bitnom svetu, i tu je bilo mnogo lakše da sam napravim ono što mi treba, ali danas je sve 100 puta komplikovanije. Potpuno vas razumem, naročito zato što mi je muka da tražim "šta je pisac hteo da kaže" po raznim SW podrškama koje treba da mi olakšaju posao.

Pozdrav obojici.
[ mikikg @ 24.08.2021. 12:21 ] @
Hehe, nije ni to najgore :)
Jos jedan krajnje bezobrazan potez od Omnivision, kazu u specifikaciji da kamera+kontroler moze da radi u HD sa 60FPS, to je fino i ti krenes oko toga sve da uspostavljas i pravis i dodjes u situaciju da preko 24FPS ne mozes da izguras nikako!?
I sta je i sta je, nemas debuger, sve preko seriske veze butas, nahvatas parce code-a koje je odgovorno za to procesiranje i vidis da je to nesto vrlo specificno od Omnivision, neki deo SDK-a koji je povezan preko onih specialnih dodatnih kooprocesora za koji naravno nema ni trunka dokumentacije ...
Pa se onda zalis Omnivision, kuliraju te na 5 mejlova, kad toliko dignes frku da sam cimao i neke njihove direktore oni se jave nekako na support i daju ti PATCH da se to potera na 30FPS.
A jeli momci sta je sa 60FPS?
Aaa tooo, a to nismo jos napravili, nemamo za to jos SDK ...
Jeliii bre, koga vi radite??? Odlepio sam ...

Tu bezobrazluku nije kraj, ako krenes sam da pokusas to da nekako namestis, skontas da od 10.000 .c/.h skripti koje mozes da editujes postoji jedan .a fajl (znate sta je to?) i koji je igrom slucaja bas on zaduzen za to podesavanje oko FPS ... Prevedena biblioteka bez source, znaci ne mozes im nista, mogu da te vortaju kako god hoce a ti gledaj sta ces sa tim projektom gde je vec potroseno vise hiljada radnih sati ...

[Ovu poruku je menjao mikikg dana 24.08.2021. u 13:47 GMT+1]
[ bogdan.kecman @ 24.08.2021. 12:55 ] @
trap for young players :D :D :D

to sto senzor moze da izbaci 60fps ne znaci da je modul 60fps :) ... to
sam se ja svadjao pre 10tak godina sa jednim klijentom :D ... pise
senzor moze 60fps, ja reko sa ovim dsp-om koji je na ploci jedino ako
cemo da spustimo res na 10x10 inace nema teorije da progura 60fps kroz
sebe sve i samo raw da ga salje :D.. jbg zato ja volim da uzmem dev kit,
pa vidim sta stvarno moze pa ako moze koristim, ako ne moze - ne moze i
jbg.. trazim drugi modul

inace rpi kamerice neke mogu 240fps (u nizoj rezoluciji), ali ne mogu sve..
[ mikikg @ 24.08.2021. 13:12 ] @
Vidi, ne mogu da ih pohvatam u kom su uopste fazonu Omnivision.
Projekat je zapocela neka prva ekipa developera, imali su neki DEV kit pa su se oko toga bazirali.
Omnivision je tim developerima nekako "dostavio" RTOS source, u skriptama potpisano lepo Omnivision RTOS taj i taj ...
Mesecima sam ja pokusavao da dodjem do te izvorne verzije kako bi uradio neku komparaciju sa sadasnjim stanjem, ma kakvi, prave se blesavi, nista mi nisu pomogli, kazem im "dajte mi to sto se njima dali", ma jok, "nemamo" ...

Kako bre prijatelju nemas, evo gledam ga svojim ocima ovde????

I tako vesela avantura sa Omnivision ...

Mozda smo "previse sitni klienti", ali brate ako neko planira da pazari na primer 200.000 procsora koji brat-bratu kostaju oko 20-30$ na komad, pa sta vise da uradim sa nase strane ...

[Ovu poruku je menjao mikikg dana 24.08.2021. u 14:23 GMT+1]
[ korak @ 24.08.2021. 20:22 ] @
U stara dobra vremena radio sam sa jednom minijaturnom TV kamerom simulator golf igrališta. Igrač stvarno udara golf lopticu i ona udara u platno na kojem se projektuje golf teren i let loptice.

Da bih simulirao let loptice treba što preciznije da uhvatim udarac i za određeno vreme da napravim snimak položaja loptice i njene senke na tlu iz čega se lako izračunava vektor brzine.

20 ms, periode poluslika je neprecizno, ali iz dokumentacije za SSD čip i njegov kontroler videh da mogu da skratim skeniranje slike sa 625 redova (312.5 po poluslici) na 15 redova, te je tako preciznost poboljšana na bolju od 2 ms, što 500 puta u sekundi. Pa onda kroz greber pa u PC.

Tako je nekada bilo, radilo se na niskom nivou i bilo je manje tajni.

A sada sve više stvari nije u našoj moći, pa zavisimo od drugih. Lepota napredka.

[ goran_68 @ 24.08.2021. 21:56 ] @
Suštinski, po meni, nema nikakve razlike nekad i sad. Tehnološki napredak normalno, komplikuje stvari ali niko ti ne brani da i dalje tučeš po registrima i optimizuješ kod do besvesti. Arhitektura jeste složenija ali na kraju sve su to samo neki registri i bitovi u njima :)

Evo, kod koji je Bogdan dao:

Code:

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* Configure the system clock */
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_CAN_Init();
  MX_SPI2_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  MX_TIM2_Init();

  /* Init and start scheduler */
  osKernelInitialize();  
  MX_FREERTOS_Init();
  osKernelStart();


Sve ovo dao je na gotovo CubeMX code generator za neki STM32 ARM. Ako mi se u nekom trenutku, kojim slučajem, nešto ne svidi ili imam nameru da baš znam šta to radi po registrima, uzmem pa pogledam po source kodu, jer je dostupan za svaku od ovih funkcija. To sam uglavnom i radio na početku. E sad, ovo su samo inicijalizacije i to nije teško da napišem sam ali ako mi treba USB stek npr. onda nema nikakvog smisla da ga pišem sam, nego uzmem gotov, proveren čiji je source kod opet tu. Logično, kad god mogu koristim HAL jer ja bolje od toga, za neko normalno vreme, ne mogu da uradim!
Patio sam se i ja sa Omnivision kamerama, doduše mnogo skromnijim od Mikijeve. Dokumentacija je očaj. Upucam u registar nešto što stoji u datasheet-u i ništa se ne desi.
Kad me drmne nostalgija uzmem 8-bitni Microchip sa Core Independent Peripherals pa se zezam.
Umalo da zaboravim. Hoću i ja u penziju!
[ korak @ 24.08.2021. 23:18 ] @
Pa nešto slično:

Code:
void main(void)
{
  /* Write your local variable definition here */

  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
  /*** End of Processor Expert internal initialization.                    ***/

  /* Write your code here */
   
  NT0 = 0;  
  NT1 = 0;
  NT2 = 0;
  NT3 = 0;
  
  InitTask(4);
  
  __EI();
  
  for(;;)
  {
      NT0++;
      
  }


Gde u PE_low_level_init() imam sve inicijalizacije i metode koje generiše procesor ekspert u kome podešavam stavke izabranog internog modula. Ne mora da se traže registri i bitovi po dejta širu, i to je OK. Ali ako umesto toga imam biblioteku bez izvornog koda onda mogu da budu problemi ako nešto krene po zlu.
[ korak @ 24.08.2021. 23:21 ] @
Pa nešto slično:

Code:
void main(void)
{
  /* Write your local variable definition here */

  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
  /*** End of Processor Expert internal initialization.                    ***/

  /* Write your code here */
   
  NT0 = 0;  
  NT1 = 0;
  NT2 = 0;
  NT3 = 0;
  
  InitTask(4);
  
  __EI();
  
  for(;;)
  {
      NT0++;
      
  }


Gde u PE_low_level_init() imam sve inicijalizacije i metode koje generiše procesor ekspert u kome podešavam stavke izabranog internog modula. Ne mora da se traže registri i bitovi po dejta širu, i to je OK. Ali ako umesto toga imam biblioteku bez izvornog koda onda mogu da budu problemi ako nešto krene po zlu.
[ mikikg @ 28.08.2021. 14:06 ] @
Momci, kakav bi ste vi ovde multitasking RTOS stavili? :)))

Ovo je verovatno jedan od buducih "omiljenih" MCU u kolekciji :)

https://www.parallax.com/propeller-2/

Ovo cudo ***** sve po spisku, niste videli ovakav kontroler do sad.
Ovde je HW multitasking, ne SW, mada ima naravno programiranje ali da vidite sta malac radi sve u realnom vremenu i na koji nacin, zaboravite na ARM-ove, totalno drugi koncept!
Radi i u Forth-u, Python i standardan C/C++.

Poruceni neki DEV kit-ovi, kad stigne ima da se poigramo malo ...
[ bogdan.kecman @ 28.08.2021. 17:00 ] @
freertos se super snalazi sa vise jezgara, mozes da lokujes tredove na
jezgro i slicno

propeleri su cool, nisam koristio dvojku ali moze hw bude samo bolji,
problem je sto je dev alat i dokumentacija bila uzas, nadam se da su sad
bolji :) ... ja sam odustao jos na kecu jer ma koliko je dev kit bilo
lako dobiti (ja dobio bedza) cipove su prodavali na spulnu, nisi mogo
kupis na komad nigde
[ mikikg @ 13.09.2021. 11:12 ] @
@bogdan.kecman

Kao sto rekoh, ima da "nas" razvale sa cenom, > 300% skocile cene svih kontrolera i plocica i pilulica na AliExpress, "kazu da imaju kolicine", da li stvarno imaju ili nemaju, licno mislim da imaju jer sam na drugim nekim primerima video da kinezi sve odrade kako treba kada im se pristojno plati i nabavljaju ne-nabavljive stvari u roku od dan i posalju odmah bez cekanja uplate !? :)
[ bogdan.kecman @ 13.09.2021. 13:47 ] @
@korak IZVINI! us%$#@^ smo ti temu :(

@miki
mislim da smo okrenuli temu na desetu stranu :( jbg ... ne znam, nije mi jasno ni zasto skok, ni zasto nestasica, nista mi nije jasno... kapiram da su bile i neke poplave, nedostatak ciste vode sto je veliki problem za proizvodnju jer se vaferi peru nesto 500 puta tokom proizvodnje ali svejedno ne mi jasno :( ... a ali, ne znam, 90% stvari koje sam narucio nije stiglo, 40% stvari sam uspeo da refundujem pare nazad, za 60% nece vrate pare kazu treking kaze arrived to destination country... dal nasa posta opet jede pakete ili oni laziraju treking kodove nemam pojma .... svaki paket koji stigne razlepim nalepnice dok ne dodjem do originalnog koda svaki paket koji stigne oznacim kao da je stigo u lokalnom trekeru i preeeeevise paketa ne stigne nikad... vise narucujem na aliju zato sto nemam gde drugde, u nasim radnjama nema, pa onda narucim isto od 10 prodavaca i ako sitgne 1 ili 2 primerka sutam se u d000pe :(

@moderator, ja nemam nista protiv da sva ova moja offtopic balj... utnes