Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
STM32 generic board
Pretpostavljao sam da je tako. Znaci ovde treba koristiti specijalne programerske tehnike, kako bi sve bilo optimalno napisano.

Hvala.
Reply
Hmm, mada cuj, mozda i nije tako kako sam prvo rekao, rade neki ALIGN oni tu ...
Bas juce sam se igrao sa CHAR bufferima, znam da mi je trebalo 8K bufer i toliko mi pojeo dodatno memorije!
Bice da ipak ima internu organizaciju po 8 bit za DATA, ali su WORDS 32bit u Programskoj memoriji ...
Reply
Moram da provalim kako Atollic prikazuje zauzetost memorije. Jos trazim, pa cu da vidim.
Reply
Mora negde da pokaze, on koristi GCC, pise prilikom kompajliranja koliko/sta je zauzeo.

Ja radim sa Keil 5 pa ne znam gde to trebas da pogledas ...
Reply
Definitivno 100By, kada se radi o RAM memoriji char je uvek 8 bita.

Najveća zabuna je kod unsigned/signed int.
Ovo int je kod 8 bita MCU, 16 bita, dok je kod 32bitnih MCU 32 bita.

unsigned short je 16 bita kod 32 bit mcu.

unsigned long je 32 bita.

Kod nekih mikrokontrolera postoji i long long koji je 64 bita.
Reply
Ovo su deklaracije promenljivih po C standardu.

Kako bi se lakše napravila portabilnost koda, uvodi se od strane korisnika WORD; BYTE itd... koji su samo definisati nekim typedef-om kako bi se upotrebom jednog konverzionog fajla lepo iskonfigurisale promenljive (njihove veličine bajtovski gledano) a zavisno od kompjalera odnosno mikrokontolera koji se koristi.
Reply
Nebojsa. Hvala puno. Da li mcu ima asemblerske instrukcije koje se koriste za manipulaciju promenljivih razlicite sirine?
Reply
Postoje posebne instrukcije za 8, 16 i 32bit i kombinaciju vece/manje, vidi manual PM0214
http://www.st.com/content/ccc/resource/t...046982.pdf

U prilogu i sazet pregled instrukcija.


Attached Files
.pdf   Thumb-2-Instruction-Set.pdf (Size: 71,23 KB / Downloads: 2)
Reply
Znam za user manual, al me iskreno mrzelo da citam. Sada je stvar cista. Samo je pitanje kvaliteta kompajlera.
Reply
Kompajler to dobro radi, zavisi ako si ukljucio optimizaciju -O1 ili -O3, on to sve prepakuje kako je najoptimalnije, radi duplo brze sav code i malo manje memorije zauzme u odnosu na prevodjenje bez optimizacije -O0 (O nula) sto je pak zgodno za debugiranje jer kad ukljucis optimizaciju onda je dosta teze debagiranje jer masinse instrukcije ne "prate" detaljno tvoj source code sto zna da bude malo problem, tako da tu imas prakticno dve stvari, pises-radis source bez optimizacije ali sa vremena na vreme proveris da li ti radi i code sa optimizacijom jer zna da se poremete malo vremena (zavisi sve od implementacije) i kada zavrsis i bude spremo za produkciju mozes da ukljucis optimizaciju i da radi MCU ko bombona sa prakticno 50% rezerve CPU resursa ili da ga tridzis do 100% ako ti bas treba toliko ali onda zaboravi na debuger dok se pise u C/C++ Smile
Pod ovim procentima opterecenja podrazumevam zauzece nekog prioritetnog procesa preko interapta, ako on nema malo rezerve zna da bude prgavo ...
Na primer, na ovom spomenutom STM32F103 sa 72MHz clock, moze u interaptu koji se desava svakih 10us (100kHz) da se spakuje cudo logike za rad/procesiranje, to je ihaaaa resursa (ja se "manijacim" pa pravim dodatno jos 8 x 64bit SW tajmere kad vec ima resusrsa ...), sve ostalo radi u Main "kad stigne" i preko DMA bljuc-bljuc, moze XY taskova da ima tako na red manjeg prioriteta a na sve to je zgodno sto imamo HW module za SPI/I2C i ostale koji su po prirodi sinhroni tipovi gde ne moze da nas prekine interapt na nivoi prenosa jednog karaktera/instrukcije kroz te kanale (sa DMA ne moze da nas prekine ni za prenos niza karaktera), mogu samo da "prolongiraju" neku medju logiku u komunikaciji sa periferijom.
STM32 je "prebogat" resursima samo kada se iskoriste na pravi nacin, DMA, NVIC i ostalo su stvarno opake stvarcice u svetu mikrokontrolera.
Reply
Znam za sve optimizacije i kako se pise/debagira. Mislio sam samo na kvalitet kompajlera u smislu da li pakuje 8bit promenljive kao 8bit-ne. Imao sam kupovne C kompajlere koji su radili katastrofa. Cak sam imao situaciju da mi ponudi kompajler vise RAM-a nego sto MCU ima. To je radio tako sto kod pisanja programa vidi sta se ne koristi od periferija i te registre koristi kao RAM. U pitanju je bio HI-TECH PIC 18F C kompajler. Kostao boga oca. Npr. stanje na portb se menjalo ko ludo, jer nije koriscen u programu i ovaj ga zauzeo kao ram u user defined prostoru.
Reply
(09-26-2017, 02:49 PM)vsavic Wrote: @mikikg iz tvog posta negde na pocetku ove teme, videh da si Blue Pill plocicu pretvorio u BMP, jel sa njom mozes da radis JTAG Boundary-Scan?

BMP bi trebao da ima JTAG podrsku ali je nisam prakticno probao.
JTAG zahteva da se prikljuce jos 2-3-4 dodatne linije izmedju programotora i MCU pored SWD porta a posto sam uglavnom kratak sa nozicama na Blue Pill, iskoristio sam te nozice za nesto drugo i ostavio samo SWD prikljucak.

Inace posto trenutno sve programiram kroz Keil 5, tamo nema podrska za BMP (niti ce je skorije imati koliko kontam), presao sam na ST-Link V2 zbog debugera, ovaj jeftin klon, radi odlicno:
http://www.ebay.com/itm/401088363326
Reply
Tek sada čitam poruke, pa evo kratkih odgovora:
ASM za STM32 sam prelistavao samo informativno, nisam do sada ulazio u detalje kako radi ARM. Nedostatak vremena, nažalost.
Iz nekog prethodnog iskustva sa KEIL firmom imam samo reči hvale, (cena mislim da isto govori) tako da mislim da njihov C kompajler to radi jako jako dobro i u retkim sutacijama kada sam sumnjao na kompajler imao sam epilog da je to bila ljudska greška.

Što se tiče resursa, slažem se delimično sa Mikijem, ali opet ponavljam koliko god da uzmete brži, jači MCU opet ne treba "divljati" u interaptima. DMA i NVIC su standardi koji postoje kod mnogih MCU rešenja u poslednjih 10-ak godina (recimo dsPIC33, PIC32, ARM itd...) ali opet koliko god to rešenje bilo dobro, ako korisnik ne organizuje strukturu izvornog koda, "sve džaba".
Evo recimo pre par dana sam uspeo da udavim STM32F051 MCU, samo time što sam stavio floating point u interapt ADC-a. Testa radi, i to kada se desi UART interapt. Nisam dalje istraživao šta je tačno uzrok, ali kada sam prebacio float matematiku u main, sve je proradilo. Inače ovako radim, ali je za potrebe testa opterećenja to urađeno na pogrešan način i dokazano je da je pogrešno Smile
Reply
Sve ima svoje, u ISR moze da se radi ++, --, IF, THEN i tako neke jednostavnije funcije, moze i Floating Point ako je sa HW modulom, sa SW Floating Point to ide malo teze.

Ja praktikujem da uvek kontrolisem vreme ISR rutine, stavim na pocetku i na kraju jedan LED Toggle i pratim sa osciloskopom tacno koliko "fore" imam za rutinu, po nekom mom nepisanom pravilu, ne forsiram nikad vise od 50%, dakle 50% vremena radi nesto i ostalih 50% je slobodno dok se ne desi ponovo taj interupt.

Takodje imajte u vidu da samo poziv jedne funkcije "kosta" oko 1us. Nije mi jasno sto bas toliko ali tako ispada (treba mu vremena da uradi PUSH/POP stacka), tako da u ISR sto je moguce vise izbegavajte pozivanje funkcija nego "diskretno" napisite potrebnu funcionalnost.
Reply
I samo jos ovo da dodam, stvar na koju ce te neminovno naleteti a to je JITTER kod ISR funkcija.

Kako budete pisali program i aktivirali sve vise internih modula tako ce da se povecava jitter za svaku ISR rutinu i to zna da bude recimo reda +/-10 clock-ova jer mu treba sve vise vremena da se interno u MCU svi ti dogadjaji sinhronizuju, bez obzira koje prioritete ste dodelili interaptu.

Dakle ako vam treba bas prezicna neka vremena signala/impulsa (adekvatan izraz bi bio "stabilnija vremena"), mora da se ide preko HW modula koji to rade (tajmeri i ostalo), tu nije zgodno resenje sa ISR i paljenjem/gasenjem izlaza odatle.
Reply
(09-29-2017, 11:45 AM)mikikg Wrote:
(09-26-2017, 02:49 PM)vsavic Wrote: @mikikg iz tvog posta negde na pocetku ove teme, videh da si Blue Pill plocicu pretvorio u BMP, jel sa njom mozes da radis JTAG Boundary-Scan?

BMP bi trebao da ima JTAG podrsku ali je nisam prakticno probao.
JTAG zahteva da se prikljuce jos 2-3-4 dodatne linije izmedju programotora i MCU pored SWD porta a posto sam uglavnom kratak sa nozicama na Blue Pill, iskoristio sam te nozice za nesto drugo i ostavio samo SWD prikljucak.

Inace posto trenutno sve programiram kroz Keil 5, tamo nema podrska za BMP (niti ce je skorije imati koliko kontam), presao sam na ST-Link V2 zbog debugera, ovaj jeftin klon, radi odlicno
 
Pitah na njihovom kanalu, kazu da nema opcije za boundary-scan, jbg.to bi bilo bas cool da se proba.

Porucio sam i ja ovaj ST-Link v2, jedva cekam da probam kako radi :-)
Reply
Ima i ovaj programator, isto sve ST-Link V2 samo drugi konektor, Mini USB sto je mnooogo prakticnije nego taj veliki USB konektor, uz njega moras da vuces neki produzetak za USB jer vodove ka MCU moras da drzis sto kracim da bi dobro radilo.
Prepakuju se izlazni konektori i to stavi pod termoskupljajuci buzir i spravica milina za rad, malecka, niti smeta na stolu niti ima problema sa kablovima, sve na svom mestu.
http://www.ebay.com/itm/400581128094
Reply
Zanimljivo je i to da ovaj ST-LINK V2 i software poput OpenOCD nude puno opcija.

XJLink npr. koji Dave opisuje ovde jeste mnogo mocan, ali papren, poslah mejl pre neki dan da vidim koliko kosta, i evo sta kazu (kombinacija HW + SW):

Quote:Depending on what package you need it ranges from $10K to $35K.


Reply
Ako vas interesuje STM32F407 Cortex M4 (sa DSP/FPU), evo ovde jedna povoljna verzija plocice za oko 10$, nema jeftinije od toga trenutno plocica sa tim MCU:
http://www.ebay.com/itm/STM32F407VGT6-AR...EBIDX%3AIT&_trksid=p2057872.m2749.l2649
Reply
Ovo jeftinije od chipa samog :Smile hvala miki.  Taj M4 je opako mocna zverka
Reply


Forum Jump:


Users browsing this thread: 7 Guest(s)