stm32 in delay

programski jeziki in programiranje

Moderator: tilz0R

stm32 in delay

OdgovorNapisal/-a japina » 15 Avg 2016, 12:00

Pišem knjižnico za delay na stm32f030 (Cortex M0), ki podpira tudi RTC (real time clock).
Ali je smiselno delati delay z interupti, kot to dela Tilen Majerle ali raje uporabim RTC?
japina
 
Prispevkov: 273
Pridružen: 28 Jan 2015, 21:16
Kraj: Šentrupert na Dolenjskem
Zahvalil se je: 45 krat
Prejel zahvalo: 21 krat
Uporabnika povabil: aly
Število neizkoriščenih povabil: 4

Re: stm32 in delay

OdgovorNapisal/-a TilenS » 15 Avg 2016, 13:04

Odvisno od dolžine delaya, časa izvajana celotnega programa ter koliko ti je pomembno, da se neka zadeva izvede točno ob nekem času. Jaz za splošne časovne rutine kot so recimo prižiganje ledic, proženje rutin, ki niso časovno kritične,... uporabljam samo en timer, ki ima resolucijo toliko kolikor mi zahteva najbolj časovno zahtevna rutina in potem gledam, kdaj zadeva poteče. Če mi poteče na 10ms potem ponavadi tam še prištevam druge varijable, da pridem do 100ms in 1sec zastavice potem pa z temi zastavicami opravljam vse druge časovne funkcije. Interrupt-a dejansko niti ne rabiš razen, če res imaš neke zadeve katere se morajo narediti točno ob nekem trenutku.

Problem se pojavi pri zelo kratkih delay-ih (resolucije do enega cikla). Recimo z "NOP" si pri 8051 zelo lepo naredil en delay dolg 1 cikel pri ARM se pa stvar zakomplicira.
Zadnjič spremenil TilenS, dne 15 Avg 2016, 13:14, skupaj popravljeno 1 krat.
TilenS
 
Prispevkov: 304
Pridružen: 05 Feb 2015, 00:40
Zahvalil se je: 0 krat
Prejel zahvalo: 42 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 8

Re: stm32 in delay

OdgovorNapisal/-a s54mtb » 15 Avg 2016, 13:09

uporabiš lahko systick
s54mtb
 
Prispevkov: 8166
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1055 krat
Prejel zahvalo: 2601 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 62

Re: stm32 in delay

OdgovorNapisal/-a japina » 15 Avg 2016, 14:10

Saj systick uporabljam. No, saj zadeva je že narejena, pa sem pozabil, da sem na začetku dal init_timer() funkcijo in mi ni delalo :D ... koda na https://github.com/japina/timing_lib_m0
japina
 
Prispevkov: 273
Pridružen: 28 Jan 2015, 21:16
Kraj: Šentrupert na Dolenjskem
Zahvalil se je: 45 krat
Prejel zahvalo: 21 krat
Uporabnika povabil: aly
Število neizkoriščenih povabil: 4

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 16 Avg 2016, 23:39

Jaz (Tilen Majerle) uporabljam Systick timer za delay z ms resolucijo, ter opcijsko drug timer za us resolucijo (brez IRQ). Us se da tudi naštudirat s štetjem ukazov asemblerja ter je odvisno od prevajalnika in optimizacij.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a TilenS » 17 Avg 2016, 00:46

Je pa tečno, da niso v arm v7-m vključili "NOP". Težko prideš do zanesljivega delay-a resolucije parih ciklov.
TilenS
 
Prispevkov: 304
Pridružen: 05 Feb 2015, 00:40
Zahvalil se je: 0 krat
Prejel zahvalo: 42 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 8

Re: stm32 in delay

OdgovorNapisal/-a japina » 17 Avg 2016, 05:53

@tilz0R sem se spraševal, če in kakšen nick imaš na forumu :)
Hvala za odgovor.
japina
 
Prispevkov: 273
Pridružen: 28 Jan 2015, 21:16
Kraj: Šentrupert na Dolenjskem
Zahvalil se je: 45 krat
Prejel zahvalo: 21 krat
Uporabnika povabil: aly
Število neizkoriščenih povabil: 4

Re: stm32 in delay

OdgovorNapisal/-a Kroko » 17 Avg 2016, 10:33

Namesto nop uporabi for zanko in volatile spremenljivko. Se da narediti delat s resolucijo skoraj enega cikla.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4046
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1304 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 240

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 17 Avg 2016, 10:35

Kroko je napisal/-a:Namesto nop uporabi for zanko in volatile spremenljivko. Se da narediti delat s resolucijo skoraj enega cikla.


Žal sem bil razočaram s tem pristopom. MDK-ARM in GCC sta delala različne ASM inštrukcije glede na optimizacije in podobno, koda podobna spodnji:

Koda: Izberi vse
volatile int a = 1000;
while (a--);


Zgornja koda ni vedno trajala isto število inštrukcij, v razloge se nisem poglabljal.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a Kroko » 17 Avg 2016, 10:46

Verjetno tole res ni portabilno. Bi bilo zanimivo ugotoviti zakaj.
Jaz sem sicer za svoje potrebe tole precej dobro uporabil.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4046
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1304 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 240

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 17 Avg 2016, 10:47

Kroko je napisal/-a:Verjetno tole res ni portabilno. Bi bilo zanimivo ugotoviti zakaj.
Jaz sem sicer za svoje potrebe tole precej dobro uporabil.


Rešitev, ki mi pade na pamet je le ta, da se ta del while zanke napiše izključno v ASM. Potem bo zadeva portabilna pomoje.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a mujo » 17 Avg 2016, 11:57

Verjetno je problem v optimizaciji.
Poskusi jo izklopit (#pragma optimize=none)

Indirektno povezano: ARM Cortex jedra (nevem katera vsa!) imajo števec izvedenih ciklov. To je del DWT. Primer uporabe (žal v ruščini, ampak se vidi poanta).
mujo
 
Prispevkov: 732
Pridružen: 21 Jan 2015, 10:50
Kraj: MB
Zahvalil se je: 1 krat
Prejel zahvalo: 145 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 17

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 17 Avg 2016, 11:59

mujo je napisal/-a:Verjetno je problem v optimizaciji.
Poskusi jo izklopit (#pragma optimize=none)

Indirektno povezano: ARM Cortex jedra (nevem katera vsa!) imajo števec izvedenih ciklov. To je del DWT. Primer uporabe (žal v ruščini, ampak se vidi poanta).


Jaz uporabljam DWT za "fake" CPU porabo, razmerje med cikli spanja in delovanja.

Klik

CM3/4/7 mislim da imajo samo. Za prvega nisem prepričan, ostala 2 imata zagotovo. Pri CM7 je potrebno v DWT->xxx register vpisat 0xC5ACCE55 vrednost, da se odklene dostop do registrov.
Zadnjič spremenil tilz0R, dne 17 Avg 2016, 12:35, skupaj popravljeno 1 krat.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a mujo » 17 Avg 2016, 12:33

CM3 pa jaz uporabljam in DWT je.
mujo
 
Prispevkov: 732
Pridružen: 21 Jan 2015, 10:50
Kraj: MB
Zahvalil se je: 1 krat
Prejel zahvalo: 145 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 17

Re: stm32 in delay

OdgovorNapisal/-a zanka » 16 Feb 2018, 16:47

Obstaja kakšen makro ali static inline za zakasnitev nekaj us? Tako kot ima AVR svoj _delay_us, ki v račun vzame F_CPU.
Uporabniški avatar
zanka
 
Prispevkov: 1809
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 16 Feb 2018, 16:51

zanka je napisal/-a:Obstaja kakšen makro ali static inline za zakasnitev nekaj us? Tako kot ima AVR svoj _delay_us, ki v račun vzame F_CPU.



Ne. To rešiš z for zanko in NOP ukazi.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a TilenS » 16 Feb 2018, 21:44

Kot že omenjeno, NOP ni zanesljiv ASM ukaz za porabo časa v CortexM.

Še opis NOP ukaza. Link
NOP does nothing. NOP is not necessarily a time-consuming NOP. The processor might remove it from the pipeline before it reaches the execution stage.


Če rabiš cycle-to-cycle resolucijo potem je DWT najboljša opcija (CYCCNT). Če nimaš DWT pa najdeš CPI (count per instruction) od neke inštrukcije in jo ponavljaš dokler ne dosežeš tvojega željenega cycle counta oz. časovnega delay-a (varijable na volatile ter po možnosti še izklopi optimizacije okoli te kode). Če imaš dosti hiter timer pa lahko tudi tega uporabiš za uS zakasnitev.

Če rabiš pa max. prenosljivost pa naredi eno izmed teh opcij v ASM.
TilenS
 
Prispevkov: 304
Pridružen: 05 Feb 2015, 00:40
Zahvalil se je: 0 krat
Prejel zahvalo: 42 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 8

Re: stm32 in delay

OdgovorNapisal/-a zanka » 16 Feb 2018, 23:05

Že to, kako se C prevede in vrstni red ukazov preveč vpliva na dejanski razplet.
Recimo, če hočem točen zamik med ukazom A in ukazom B, lahko register z željenim razmikom napolnim že pred ukazom A. Število ukazov je tudi različno od vrednosti, recimo, z 10 lahko register napolni z enim MOV. Če želim 480, bo naredil en MOV z 240 in en LSL, da pomnoži z 2. To sta takoj dva ukaza več, če bi bila med A in B.
Uporabniški avatar
zanka
 
Prispevkov: 1809
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: stm32 in delay

OdgovorNapisal/-a TilenS » 16 Feb 2018, 23:37

Ja, cikel resolucija ter deterministično obnašanje teh delay-jev je na žalost v novejših jedrih veliko bolj težavo za naredit kot v starih. Več cevovodov, podatkovni ter inštrukcijski chache še zna pa dodatno otežit izvedbo. Pri teh "cevovodnih" zadevah si lahko pomagaš z DMB , DSB ter ISB ukazi, da prideš do dejanskega časovno potratnega "NOP" (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/CIHGHHIE.html. Pri zaporednih ukazih včasih uporabim kar ISB, da naredim vsaj par ciklov dolg zamik pred naslednjim ukazom, uporabno ravno pri stm32, po vklopu ure periferije preko RCC se zahteva/priporoča (milsim da je to celo v errata pri nekaterih uc-jih) vsaj 1 cikel pavze pred pisanjem v registre te periferije.
TilenS
 
Prispevkov: 304
Pridružen: 05 Feb 2015, 00:40
Zahvalil se je: 0 krat
Prejel zahvalo: 42 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 8

Re: stm32 in delay

OdgovorNapisal/-a zanka » 17 Feb 2018, 00:02

Zanimiva mi je naslednja akrobacija s shranjevanjem, če je spremenljivka volatile.
Koda: Izberi vse
 186:   9405         str   r4, [sp, #20]
 188:   9b05         ldr   r3, [sp, #20]
 18a:   3b01         subs   r3, #1
 18c:   9305         str   r3, [sp, #20]
 18e:   2b00         cmp   r3, #0
Uporabniški avatar
zanka
 
Prispevkov: 1809
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: stm32 in delay

OdgovorNapisal/-a Kroko » 17 Feb 2018, 01:18

Kaj se ti zdi tu zanimivo in zakaj?
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4046
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1304 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 240

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 17 Feb 2018, 01:21

Meni deluje popolnoma ok.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a zanka » 17 Feb 2018, 09:49

Kroko je napisal/-a:Kaj se ti zdi tu zanimivo in zakaj?

Iz registra da na stack, potem iz njega v drug register, zmanjša in zopet shrani, čeprav se ve, da se vrednost uporablja le tu, v zanki, katerega jedro sem prilepil. Če ni volatile, potem nič ne shranjuje.
Uporabniški avatar
zanka
 
Prispevkov: 1809
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 17 Feb 2018, 09:51

zanka je napisal/-a:
Kroko je napisal/-a:Kaj se ti zdi tu zanimivo in zakaj?

Iz registra da na stack, potem iz njega v drug register, zmanjša in zopet shrani, čeprav se ve, da se vrednost uporablja le tu, v zanki, katerega jedro sem prilepil. Če ni volatile, potem nič ne shranjuje.


Volatile meni da se uporablja še kje drugje, ne le tukaj. Pravilno delovanje.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a zanka » 17 Feb 2018, 10:50

To že, če je vidna več funkcijam, ampak če spremenljivko uporabim znotraj funkcije in samo v zanki. Kaj mi jo lahko še spremeni?
Uporabniški avatar
zanka
 
Prispevkov: 1809
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 17 Feb 2018, 10:53

zanka je napisal/-a:To že, če je vidna več funkcijam, ampak če spremenljivko uporabim znotraj funkcije in samo v zanki. Kaj mi jo lahko še spremeni?


Teoretično a možno. Lahko ti kakšen HW piše/bere po isti lokaciji, recimo DMA.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a MitjaN » 17 Feb 2018, 12:15

Lahko bi/si kazalec na to spremenljivko poslal v kak drug proces (prekinitev, task, ...).
MitjaN
 
Prispevkov: 63
Pridružen: 24 Feb 2015, 12:45
Zahvalil se je: 2 krat
Prejel zahvalo: 28 krat
Uporabnika povabil: aly
Število neizkoriščenih povabil: 5

Re: stm32 in delay

OdgovorNapisal/-a igo » 17 Feb 2018, 17:03

tilz0R je napisal/-a: Žal sem bil razočaram s tem pristopom. MDK-ARM in GCC sta delala različne ASM inštrukcije glede na optimizacije in podobno, koda podobna spodnji:
Koda: Izberi vse
volatile int a = 1000;
while (a--);

Zgornja koda ni vedno trajala isto število inštrukcij, v razloge se nisem poglabljal.

Koda verjetno traja predvideno število ciklov, a moraš pred tem onemogočiti vse prekinitve.

En odbit način, da to storiš, je pavza v prekinitvi. V spremenljivko Cas vpišeš od 0 različno vrednost in v Timer vpišeš maksimalno vrednost, da v naslednjem koraku skoči v "overflow" prekinitev. Tam pa preveriš, če je Cas != 0. Če ni, takoj leti ven. Če je, oddrdra ustrezno zakasnitev in pred izhodom vrže Cas = 0, da lahko Timer ves čas kroži.
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
igo
 
Prispevkov: 1149
Pridružen: 11 Apr 2015, 13:38
Kraj: Krško
Zahvalil se je: 145 krat
Prejel zahvalo: 265 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 25

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 17 Feb 2018, 17:38

V času svojega učenja (3-4 leta nazaj) sem precej zadev probal, takrat nisem točno vedel kaj in zakaj. Vsaj prevajalnik je delal po svoje, recimo v MDK-ARM-u (ne glede na optimizacijo) je zgornja zanka trajala 4-cikle.

Sem pa priporočal "__NOP" prej zato, ker je to nekaj kar so tudi sami dečki iz ARM-a predlagali na enem izmed seminarjev. Seveda, ne sme biti interrupta vmes.

Kakorkoli, 1us delay rešujem tako, da imam timer, ki se reload-a na 1us. Kasneje štejem downtime.

PS: Quote se pusti v originalni obliki :)

Na koncu, tudi AVR's _delay_us funkcija dela vse prej kot natančno.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a Kroko » 17 Feb 2018, 17:54

Potrebno je razlikovati dve stvari.
1. ali moramo počakati točno N ciklov
2. ali pa vsaj N ciklov pri čemer je manj boljše
Če imamo prvi primer potem pri tako občutljivem timingu pozabi na interupte. V drugem primeru so interupti nepomembni.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4046
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1304 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 240

Re: stm32 in delay

OdgovorNapisal/-a zanka » 17 Feb 2018, 18:00

Najbolje je v ASM; za takt 16 MHz, za druge bo potrebno spremeniti faktor 2.65 in prilagoditi število NOP.
Koda: Izberi vse
static inline void __attribute__((always_inline)) _delay_us(float us)
{
  volatile uint32_t _us = us * 2.65 - 1;
  volatile uint32_t i;
  __asm volatile(
  "nop\n\t"
  "nop\n\t"
  "mov %0, %1\n\t"
  "delay_%=:\n\t"
  "sub %0, #1\n\t"
  "nop\n\t"
  "cmp %0, #0\n\t"
  "bne delay_%=\n\t"
  "nop\n\t"
  "nop\n\t" : : "l" (i), "l" (_us) ); 
}

V večini takšne ASM kode na koncu opazimo "r", vendat tu je "l, kar pomeni, da za i in _us uporabi spodnjih 8 registrov, sicer zajamra.
Lovil sem čase 1us, 10us, 50us in 100us, tako da sem preklaplal stanje na izhodu. V obzir je potrebno vzeti tudi čas tega preklopa.

Če naredim zgolj while() z __NOP, se prevajalnik sam odloči, da bo za majhne vrednosti (npr. us=1) zanko razvil in našopal notri recimo 4-krat __NOP. Nisem pa našel ukaza, ki mu bi to dejanje izrecno prepovedal.

AVR ima vsaj nekaj.
Uporabniški avatar
zanka
 
Prispevkov: 1809
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: stm32 in delay

OdgovorNapisal/-a Kroko » 17 Feb 2018, 18:04

volatile uint32_t _us = us * 2.65 - 1;

Ampak tole me pa kar zmrazi.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4046
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1304 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 240

Re: stm32 in delay

OdgovorNapisal/-a zanka » 17 Feb 2018, 18:21

Kroko je napisal/-a:
volatile uint32_t _us = us * 2.65 - 1;

Ampak tole me pa kar zmrazi.

Je tako, ampak trik je v tem, da to izračuna (poenostavi) prevajalnik ;) Torej, če želim us = 100, bo prevajalnik ustvari kodo, ki bo v register za _us vpisala 264.
Uporabniški avatar
zanka
 
Prispevkov: 1809
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: stm32 in delay

OdgovorNapisal/-a tilz0R » 17 Feb 2018, 18:23

Koda: Izberi vse
float us = 4;
_us_delay(us);


Pa sedaj? ;)
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1461
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 355 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: stm32 in delay

OdgovorNapisal/-a zanka » 17 Feb 2018, 18:28

Težje.

Če koga to preveč moti in ker imamo 32-bitni luksus lahko pomnoži z 265 in nato zdeli z 100. Ali pa pomnoži s 173670 in nato naredi LSR za 16. Ampak te vragolije bodo ustvarile nek zamik. Kot sem že povedal, ta je odvisno tudi od števila.
Uporabniški avatar
zanka
 
Prispevkov: 1809
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29


Vrni se na Software

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 0 gostov