programator stm32 assembler
- robokop
- Site Admin
- Příspěvky: 22915
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
- Kontaktovat uživatele:
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
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)
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?
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?
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.
- robokop
- Site Admin
- Příspěvky: 22915
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
- Kontaktovat uživatele:
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%
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)
- robokop
- Site Admin
- Příspěvky: 22915
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
- Kontaktovat uživatele:
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
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)
datasheet F103 pise: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
ADC conversion time: STM32F103xx performance line devices: 1 μs at 56 MHz (1.17 μs at 72 MHz) ...paradoxne pri nizsej frekvencii je rychlejsi??

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
- robokop
- Site Admin
- Příspěvky: 22915
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
- Kontaktovat uživatele:
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
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)
-
- Příspěvky: 321
- Registrován: 27. 1. 2008, 4:30
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.
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.
Protoze prescaler a max ADC frequency = 14MHz.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??
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
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.
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?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
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.
- robokop
- Site Admin
- Příspěvky: 22915
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
- Kontaktovat uživatele:
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
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)
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?
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.