programator stm32 assembler

ruzne programy,konverze dat, digitalizace, atd...
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22915
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

25. 1. 2016, 10:45

Neni tu nekdo kdo by byl schopny prepsat kousek jednoducheho kodu v C do assembleru
narozdil od atmegy a podobnych uz je tohle dost slozity procesor a nejak nemam kdy to studovat
radsi bych poprosil nekoho kdo se v tom vyzna
hadam ze to je tak na hodinku

jde o to co nejrychleji porovnavat analogove vstupy a podle tabulky nastavovat vystupy
zaklad muze byt v C (idealne arduino rozsirene o tyhle STM32F103 boardy) jen ta smycka co bude prevadet a porovnavat ty analogove vstupy v asm
Vsechna prava na chyby vyhrazena (E)
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

26. 1. 2016, 3:01

Já STM32 používám hodně, ale do Assembleru se teda rozhodně netlačím. Myslím, že lidí co pro tohle píšou v asm tady asi moc nebude.
A podle mě to teda ani nemá moc smysl. Tyhle procesory jsou navržené tak, aby se pro ně dobře překládalo z vyšších jazyků, ale za cenu toho, že ručně se ten asm píše fakt blbě.
Takže podle mě když to napíšeš dobře v C (samozřejmě bez nějakého volání knihoven atd.), tak už to tim přespáním do asm moc nezrychlíš.
Maximálně by možná stálo zato to napsat v C, nechat přeložit a pak se pokusit to zoptimalizovat. Ale je otázkou, jestli tu optimalizaci uděláš líp než dobrý překladač.
Mimochodem jaký maximální čas pro to porovnání a nastavení výstupu by sis představoval?
atlan
Příspěvky: 3382
Registrován: 7. 2. 2011, 9:12

26. 1. 2016, 5:15

Nepoznam strukturu uP. Ale na tych nizkych radach mas jeden prevodnik a multiplexer. Tak ze musis vybrat vstup,pockat,spustit prevod, nacitat data,zase prepnut vstup pockat a spustit prevod. A to vsetko trva, o tom zeby to bolo rychle sa povedat neda. Predpokladam ze asemblerom neziskas ovela rychlejsie spracovanie. Ale pochval sa z vysledkom.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22915
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

26. 1. 2016, 6:10

no jde o to ze ten procesor sam o sobe pri maximalni teoreticke rychlosti je o neco pomalejsi nez potrebuju ale mohlo by to stacit
tedy kazda jedna usetrena instrukce teda hraje velikou roli
zas tak optimalni ten kompilator nebude, resil jsem tohle parkrat u atmegy

napr na 8M krystalu u atmegy vygenerovat na pinu seriove 800KHz data vyctene z pameti
tj. mas 10 taktu na zpracovani 1 byte
jeden by rekl ze to nejde

v c to nejde na 100%
Vsechna prava na chyby vyhrazena (E)
bronek999
Příspěvky: 521
Registrován: 6. 3. 2014, 6:50

26. 1. 2016, 6:12

Mex pisal "dobre napisany program". Takze ziadne cakanie. Koniec adc prevodu vyvola prerusenie, netreba nan necinne cakat a ten cas sa da vyuzit namiesto pisania loop smycky v asembleri. Stm32 je velka rodina, napis podrobnosti.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22915
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

26. 1. 2016, 6:20

jak jsem psal i 1 instrukce spozdeni muze byt problem, nemam konkretni predstavu kolik instrukci to zabere protoze u techhle procesoru je tam spouta prace navic
cpu na testy dorazi stm32f103c8t6

potrebuju z toho vytahnout to maximum tj datasheetove to jsou 2M samply na dvou kanalech (staci 8 bitova informace) kazdou sekundu porovnat s tabulkou o 256 hodnotach a nastavit tri vystupy podle toho
Vsechna prava na chyby vyhrazena (E)
bronek999
Příspěvky: 521
Registrován: 6. 3. 2014, 6:50

26. 1. 2016, 7:12

robokop píše:jak jsem psal i 1 instrukce spozdeni muze byt problem, nemam konkretni predstavu kolik instrukci to zabere protoze u techhle procesoru je tam spouta prace navic
cpu na testy dorazi stm32f103c8t6

potrebuju z toho vytahnout to maximum tj datasheetove to jsou 2M samply na dvou kanalech (staci 8 bitova informace) kazdou sekundu porovnat s tabulkou o 256 hodnotach a nastavit tri vystupy podle toho
datasheet F103 pise:
ADC conversion time: STM32F103xx performance line devices: 1 μs at 56 MHz (1.17 μs at 72 MHz) ...paradoxne pri nizsej frekvencii je rychlejsi?? :D
Rychlost je pri plnom 12 bitovom rozliseni takze pri 8 bitoch to zaberie asi menej casu. Ale kedze to ma jeden adc prevodnik a vstup je multiplex tak 2x2M nevidim realne

STM32F4.... ma rychlejsi ADC
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22915
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

26. 1. 2016, 7:41

tak to nevim kam jsem koukal
mel mit 2 adc a max sample rate 2M pri 16 bitech
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22915
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

26. 1. 2016, 7:59

ted ctu v datasheetu
2 x 12-bit, 1 µs A/D converters (up to 16 channels)

tedy 2x 1 mega sampl/s

jeste mam v zaloze reseni - 8bit prevodnik se seriovym vystupem a asi 80M samplu/s urceny na prevod analogoveho video signalu
http://www.analog.com/media/en/technica ... AD9057.pdf" onclick="window.open(this.href);return false;

hradlove pole do ktereho se to nasune a porovna
tam by nemel byt problem se dostat na mozne maximum vstupu ktere by mohlo vyzadovat az 8M samplu
ale v beznem provozu by mohl stacit ten 1M
Vsechna prava na chyby vyhrazena (E)
pavel-gravos
Příspěvky: 321
Registrován: 27. 1. 2008, 4:30

26. 1. 2016, 9:16

Jde zrejme o rychlou reakci sejmuty proud na bocniku->nastaveni FETu mustku,
tam je latence opravdu zajimava. Aby se nereagovalo na stav, ktery je uz pryc.
Nejvyhodnejsi by byl stm32f303, ktery ma 5MSa, fcpu 80MHz, za cca 4euro.
Vstup do preruseni trva minimalne 12 cyklu CPU, coz pri 80MHz predstavuje 150n.
Pri tom vstupu ulozi i registry R0-R3 a R12, takze se nemusi uz prepinat kontext , a za nejakych 15 cyklu by mel jit vycist Adc,
vyhodnotit z tabulky a nastavit piny.
Pokud opravdu rychleji, nezbyde nez nejake hradlo pole, reakce pod 300ns se da zaridt na uP opravdu tezko,
snad jen nekonecna loop, ale pak proc. nemuze delat nic jineho.
Pro F4 na 180MHz (10-15euro) by to bylo trochu rychleji.
vvitty
Příspěvky: 607
Registrován: 1. 12. 2008, 12:09

26. 1. 2016, 10:02

bronek999 píše: datasheet F103 pise:
ADC conversion time: STM32F103xx performance line devices: 1 μs at 56 MHz (1.17 μs at 72 MHz) ...paradoxne pri nizsej frekvencii je rychlejsi?? :D
Rychlost je pri plnom 12 bitovom rozliseni takze pri 8 bitoch to zaberie asi menej casu. Ale kedze to ma jeden adc prevodnik a vstup je multiplex tak 2x2M nevidim realne
STM32F4.... ma rychlejsi ADC
Protoze prescaler a max ADC frequency = 14MHz.
Pri 56MHz frekvenci jadra tak ADC bezi na plnych 14MHz, pri 72MHz pobezi ADC "jen" na 12MHz.
Detaily jsou popsane v kapitole (RCC).

A STM32F103 ma fyzicky DVA AD prevodniky. Dokonce umi bezet synchronne. Ale 2x2MS opravdu nedaji, kdyz vzorek trva 1us....
V F1 jsou jeste "stare" verze ADC ktere neumely nizsi rozliseni. To umi az novejsi rady.
vvitty
Příspěvky: 607
Registrován: 1. 12. 2008, 12:09

26. 1. 2016, 10:22

robokop píše: potrebuju z toho vytahnout to maximum tj datasheetove to jsou 2M samply na dvou kanalech (staci 8 bitova informace) kazdou sekundu porovnat s tabulkou o 256 hodnotach a nastavit tri vystupy podle toho
To zadani je zatim pomerne vagni, ale pokud chcete data porovnavat kazdou sekundu tak tam ten procesor musi pul casu prospat, ne? Nebo se neda prubezne behem mereni provadet predzpracovani dat a na konci te kazde sekundy jen dopocitat finalni vysledek, porovnat a nastavit?

PS: Pokud jde o par desitek kusu, vyjde levneji dohnat neznalost assembleru vetsim vykonem, treba zrovna te F3. Ano, nestoji $2 ale $6...

PPS: Dobrych programatoru schopnych psat efektivni assembler Cortexu znam (mimo ARM...) asi tolik ze bych je spocital na prstech... a jeste mel rezervu na nesikovnost u cirkularky.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22915
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

26. 1. 2016, 12:26

Nene potrebuju to 8 milionkrat za sekundu
Jde o vyhodnoceni sin cos encoderu a rozinterpolovani sinusovky na dalsich 40 stavu v kazde periode vystup kvadraturni ttl jako u klasickyho encoderu
Ted potrebuju ja dva sety pro 3 osy a lubos jeden set
Bezne stoji prevodnik heidenhain 16 000,-
U tech 9 kusu to ma smysl resit to uz je cena slusneho ojeteho auta

Samozrejme silnejsi cpu nehraje v cene roli
Nema smysl setrit na nespravnem miste
Vsechna prava na chyby vyhrazena (E)
vvitty
Příspěvky: 607
Registrován: 1. 12. 2008, 12:09

26. 1. 2016, 2:01

To uz ponekud odporuje puvodnimu "prepis z C do ASM za jednu hodinu". Na tohle je potreba spis nez tupe prepsat C do ASM (to zvladne i kompilator dost slusne) uchopit matematiku za tim a navrhnout algoritmus primo v ASM.
Pokud to v C chodi a chybi "neco malo vykonu", dejte tam vykonnejsi verzi a ubyde starosti. Nejaky Nucleo s F3 bych asi i nasel...

TIP: F3/F4 maji DSP instrukcni set a FPU. To by mohlo pri dane aplikaci pomoci?
Naposledy upravil(a) vvitty dne 26. 1. 2016, 2:10, celkem upraveno 1 x.
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

26. 1. 2016, 2:03

Tady bude záležet spíš na chytrosti algoritmu, než na hrubé rychlosti procesoru.
Pokud se to navrhne dobře, tak by to i ten STM32F1 podle mě měl dát.
Ale nebude to úkol pro IRQ, nýbrž pro přesně načasovaný superloop.
Odpovědět

Zpět na „Ostatní software“