ARM
Moderátori: psichac, Moderátori
- Peťus
- Ultimate člen
- Príspevky: 3940
- Dátum registrácie: 07 Mar 2009, 00:00
- Bydlisko: Praha
- Vek: 34
- Kontaktovať používateľa:
Re: ARM
arm neznám, ale v céčku třeba rotace a pak vymaskování?
0
https://chiptron.cz - novinky ze světa elektro (Arduino, Raspberry Pi, STM32, ESP8266, ESP32,...)
Re: ARM
Neovplyvnis nic.xmilos napísal:mno tak rotacia O.K., ale ovplyvnis ostatne. Nake riesenie mam, hladam ine, chcem porovnat svoje, pripadne ASM.
Pokial mas porty nasekane do struktury po jednom bite, tak asi takto:
Kód: Vybrať všetko
if (PORT.BIT_A) PORT.BIT_B = 1;
else PORT.BIT_B = 0;
Kód: Vybrať všetko
if (PORT & (1<<BIT_A)) PORT = PORT | (1<<BIT_B);
else PORT = PORT & ( ~ (1<<BIT_B) );
Pripadne ak mas registre na atomicke operacie na portoch (clear, set, invert), tak pouzijes tie podobnym sposobom.
0
- logan105
- Stály člen
- Príspevky: 222
- Dátum registrácie: 06 Mar 2008, 00:00
- Vek: 34
- Kontaktovať používateľa:
Re: ARM
Tak je samozrejme veľa možností ako to spraviť.
Logickú hodnotu pinu zistíš:
a trebárs cez if nastavíš príslušný pin:
Logickú hodnotu pinu zistíš:
Kód: Vybrať všetko
GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_x)
Kód: Vybrať všetko
GPIO_SetBits(GPIOx,GPIO_Pin_x);
GPIO_ResetBits(GPIOx,GPIO_Pin_x)
0
Re: ARM
Mno k rotacii: ukaz priklad.
Tak neviem, ci ARM ma bitorvy pristup, preto som to bachol sem. Mam dojem, ze nie.
Mno tak ako si uviedol priklady (dakujem za ne) to mam vyriesene teraz. Rotaciou ktoru si pouzil v druhom priklade len pohodlne vytvoris masku. Je zaujimave, ze prekladac vytvori rovnaky klod s pouzitim tvojej zyntaxe aj pouzitim "hotovej" masky.
Zaujimaju ma dalsie riesenia, s dorazom na rychlost.
Tak neviem, ci ARM ma bitorvy pristup, preto som to bachol sem. Mam dojem, ze nie.
Mno tak ako si uviedol priklady (dakujem za ne) to mam vyriesene teraz. Rotaciou ktoru si pouzil v druhom priklade len pohodlne vytvoris masku. Je zaujimave, ze prekladac vytvori rovnaky klod s pouzitim tvojej zyntaxe aj pouzitim "hotovej" masky.
Zaujimaju ma dalsie riesenia, s dorazom na rychlost.
0
Re: ARM
logan105 napísal:Tak je samozrejme veľa možností ako to spraviť.
Logickú hodnotu pinu zistíš:a trebárs cez if nastavíš príslušný pin:Kód: Vybrať všetko
GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_x)
Kód: Vybrať všetko
GPIO_SetBits(GPIOx,GPIO_Pin_x); GPIO_ResetBits(GPIOx,GPIO_Pin_x)
mno predpokladam, ze GPIO_ReadInputData() je funkcia. To sa kod zbytocne nabaluje. Hladam najkratsie (najrychlejsie) riesenie.
0
- logan105
- Stály člen
- Príspevky: 222
- Dátum registrácie: 06 Mar 2008, 00:00
- Vek: 34
- Kontaktovať používateľa:
Re: ARM
Ja som si myslel že používaš knižnice od ST, no a keby si sa do nej pozrel tak tam je to krásne spravené a veľmi jednoduché, nieje čo špekulovať. Aký používaš uC ??
A pri ARM sa až tak nemusíš báť že zaplníš celú pamäť mne sa to nestalo zatiaľ ani pri AVR čo mali oveľa oveľa menšiu pamäť
Kód: Vybrať všetko
if ((GPIOx->IDR & GPIO_Pin) != 0
{
... set pin ...
}
else
{
... reset pin ...
}
0
Re: ARM
Nechce sa mi studovat instrukcnu sadu tvojho ARM-u, ani s nimi nerobim, ale nezda sa mi, ze by boli urobene tak debilne, ze by nemali bitovy pristup... Ja pouzivam PIC32, tak take problemy nemamxmilos napísal:Tak neviem, ci ARM ma bitorvy pristup, preto som to bachol sem. Mam dojem, ze nie.
Samozrejme, kompilator nie je taky blby aby nevidel ze ta rotacia je len barlicka pre programatora a netreba ju pocitat pocas behu programu, ale staci vypocitat raz pocas kompilacie a pouzit pri behu programu konstantu. Tomu sa hovori optimalizacia.xmilos napísal: Mno tak ako si uviedol priklady (dakujem za ne) to mam vyriesene teraz. Rotaciou ktoru si pouzil v druhom priklade len pohodlne vytvoris masku. Je zaujimave, ze prekladac vytvori rovnaky klod s pouzitim tvojej zyntaxe aj pouzitim "hotovej" masky.
Ak je bitovy pristup na porty, tak to.xmilos napísal: Zaujimaju ma dalsie riesenia, s dorazom na rychlost.
Ak nie, tak maska. Nic rychlejsie nevymyslis.
Btw. ked uz mas ARM-y, davaj si pozor na to, ako rychlo mozes mavat s nejakym pinom - ono pri ARMoch sa moze ukazat, ze rychlost jadra je zbytocna ak chces robit rychle operacie na IO pinoch.
0
Re: ARM
Tak pouzivam Keil, ST kniznice pouzivam, ale nie vsetky.logan105 napísal:Ja som si myslel že používaš knižnice od ST, no a keby si sa do nej pozrel tak tam je to krásne spravené a veľmi jednoduché, nieje čo špekulovať. Aký používaš uC ??
A pri ARM sa až tak nemusíš báť že zaplníš celú pamäť mne sa to nestalo zatiaľ ani pri AVR čo mali oveľa oveľa menšiu pamäťKód: Vybrať všetko
if ((GPIOx->IDR & GPIO_Pin) != 0 { ... set pin ... } else { ... reset pin ... }
Mozna sa nechapeme. Nepotrebujem napisat najkratsi kod v C, potrebujem napisat kod tak, aby vysledny prelozeny kod v ASM bol co najkratsi, resp. najrychlejsi.
0
Re: ARM
Toto je principialne zly prisutp. Ak chces maly kod v asm, tak si ho napis v asm. Ak chces pisat v C, pis v C ale nepozeraj sa na parcialne vysledky.xmilos napísal:Nepotrebujem napisat najkratsi kod v C, potrebujem napisat kod tak, aby vysledny prelozeny kod v ASM bol co najkratsi, resp. najrychlejsi.
Budes si ten kod v asm kontrolovat vzdy pri upgrade kompilatora? Vzdy, ked zmenis nieco v inej casti programu? Ako to zmenia optimalizacie?
Sledovat vysledok v asm je casta chyba zaciatocnikov s C kompilatormi. Je treba naucit sa ako C kompilatory funguju, ako interaguje virtualny stroj C kompilatora s realnych strojom (HW) na ktorom to bezi, na co je volatile, co je pamatova bariera, ake su pravomoci kompilatora na preusporiadanie kodu atd.
Pri lowendovych architekurach, ako su AVR alebo PIC18 toto nie je take evidentne, ale pri vyssich ako je ARM, MIPS alebo x86 je to badatelnejsie a dolezitejsie.
Takze ak chces nieco naozaj rychlo tak si to napis ako kus asm integrovany do C kodu.
0
Re: ARM
Tak s tymto nesuhlasim.jaromir napísal:Toto je principialne zly prisutp. Ak chces maly kod v asm, tak si ho napis v asm. Ak chces pisat v C, pis v C ale nepozeraj sa na parcialne vysledky.xmilos napísal:Nepotrebujem napisat najkratsi kod v C, potrebujem napisat kod tak, aby vysledny prelozeny kod v ASM bol co najkratsi, resp. najrychlejsi.
Budes si ten kod v asm kontrolovat vzdy pri upgrade kompilatora? Vzdy, ked zmenis nieco v inej casti programu? Ako to zmenia optimalizacie?
Sledovat vysledok v asm je casta chyba zaciatocnikov s C kompilatormi. Je treba naucit sa ako C kompilatory funguju, ako interaguje virtualny stroj C kompilatora s realnych strojom (HW) na ktorom to bezi, na co je volatile, co je pamatova bariera, ake su pravomoci kompilatora na preusporiadanie kodu atd.
Pri lowendovych architekurach, ako su AVR alebo PIC18 toto nie je take evidentne, ale pri vyssich ako je ARM, MIPS alebo x86 je to badatelnejsie a dolezitejsie.
Takze ak chces nieco naozaj rychlo tak si to napis ako kus asm integrovany do C kodu.
Ked som prechadzal z ASM na C, sledoval som vysledny kod. Prve prekladace mali tak mizernu optimalizaciu, ze som prechod na C odlozil. Az neskor bol ten kod sluslnejsi a aj napriek tomu som volil vhodnu syntax pisania, abych dosiahol lepsi vysledok.
Moderne prekladace su niekde inde.
Nie je problem do C vsadit cast v ASM. Ak by niekto vedel tento problem napisat kratsim ako 0x12 bytovym kodom sem s nim, necham tuto cast v ASM, co moj prekladac umoznuje.
0
Re: ARM
Ved si potvrdil presne to, co som pisalxmilos napísal: Tak s tymto nesuhlasim...
...
V asm pre 32-bity vela ludi nepise. Snad to suvisi s prirodzenou distribuciou dusevne zdravych ludi medzi programatormi
Je pomerne mala pravdepodobnost, ze na svetelektro take nieco/niekoho najdes. Aj ja mam rozne technicke problemy a klucom k uspechu je vyberat si kde sa spytas a co sa spytas.
Skusal si googlit?
http://pygmy.utoh.org/riscy/cortex/led-lpc17xx.html
http://e2e.ti.com/support/microcontroll ... 45978.aspx
http://mbed.org/cookbook/Assembly-Language
http://www.eecs.umich.edu/~prabal/teach ... labs/lab2/
0
Re: ARM
s tymto nesuhlasim, pisal som preco.nepozeraj sa na parcialne vysledky.
Googlit som este negooglil, zatial mi staci co ste vsetci pisali, vysledok ze nie som mimo misy.
Mam este jedno riesenie, odladim, dam vediet.
A dam dalsi problem:
ako nakonfigurovat onu STM32, aby sli externe prerusenia od pinov.
0
Re: ARM
tak tie uz mam za sebou a cakal som prispevok niekoho, kto to rozbehal.jaromir napísal:Netusim ako nastavit prerusenie od externeho pinu, ale ak by som takuto informaciu potreboval, zacnem citat datasheety a reference manuals. Urcite to tam je.
Ono to totiz v Keil simulacii nak nejde mno a chcel som zistit, ci som daco prehliadol, alebo ide o K-bug.
0
- logan105
- Stály člen
- Príspevky: 222
- Dátum registrácie: 06 Mar 2008, 00:00
- Vek: 34
- Kontaktovať používateľa:
Re: ARM
odporúčam ti pozrieť stránku www.mcu.cz je tam seriál s STM32 Discovery kitom. Samotný pin síce vyvolá prerušenie ale ty ešte musíš zistiť ktorý pin ho vyvolal, aspoň tak som to pochopil ja. Neostáva ti nič iné ako pozrieť datasheet
0