Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: flux 25. 03. 2017, 17:22:21

Název: Jak programovat ARM procesory?
Přispěvatel: flux 25. 03. 2017, 17:22:21
Zdravím všechny, potřeboval vás poprosit o radu v souvislosti s ARM procesory.
Chtěl jsem se v nich jen tak lehce zorientovat a případně s nimi začít programovat. Ze začátku jsem si chtěl zjistit, jakým způsobem se do nich nahrává program. Jednak kvůli zájmu, ale taky třeba, abych si mohl případně vyrobit programátor. Prošel jsem několik datasheetů, ale nevšiml jsem si, že by někde byla kompletní architektura. Někde je jenom popsaný assembler a psaní programů, jinde periferie, ale přímo způsob nahrávání software do procesoru jsem nikde nenašel. Víte někdo, kde by se to dalo vyčíst?

Taky jsem se zběžně díval po ČR, kde by se daly koupit nějaké zajímavé (M3, M4, M7...), ale moc jsem toho nenašel. Dají se tyhle procesory v ČR běžně koupit nebo si v případě zájmu budu muset objednat nějaký ze zahraničí? Jaký procesor byste mi doporučili jako začátečníkovi? Prozatím se zběžně orientuji, takže jen hodně obecně vím, že bych se rád naučil s něčím výkonnějším, co umí 32 bitovou architekturu, takže tak nějak pořád hledám.

Díky všem za odpovědi.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: Ladislav Michl 25. 03. 2017, 20:32:57
ARM je jen (licencované) jádro, které spolu s periferiemi tvoří SoC (System on Chip). Pouze potom má smysl se bavit o způsobu programování, ap. Zkuste začít hledat třeba okolo STM32, začne to být jasnější.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: Mirek 25. 03. 2017, 20:38:04
Zdravím všechny, potřeboval vás poprosit o radu v souvislosti s ARM procesory.
Chtěl jsem se v nich jen tak lehce zorientovat a případně s nimi začít programovat. Ze začátku jsem si chtěl zjistit, jakým způsobem se do nich nahrává program. Jednak kvůli zájmu, ale taky třeba, abych si mohl případně vyrobit programátor. Prošel jsem několik datasheetů, ale nevšiml jsem si, že by někde byla kompletní architektura. Někde je jenom popsaný assembler a psaní programů, jinde periferie, ale přímo způsob nahrávání software do procesoru jsem nikde nenašel. Víte někdo, kde by se to dalo vyčíst?

Taky jsem se zběžně díval po ČR, kde by se daly koupit nějaké zajímavé (M3, M4, M7...), ale moc jsem toho nenašel. Dají se tyhle procesory v ČR běžně koupit nebo si v případě zájmu budu muset objednat nějaký ze zahraničí? Jaký procesor byste mi doporučili jako začátečníkovi? Prozatím se zběžně orientuji, takže jen hodně obecně vím, že bych se rád naučil s něčím výkonnějším, co umí 32 bitovou architekturu, takže tak nějak pořád hledám.

Díky všem za odpovědi.

Sežeň si vývojový kit (třeba tady: http://cz.mouser.com/Embedded-Solutions/Engineering-Tools/Embedded-Development-Tools/Embedded-Processor-Development-Kits/Development-Boards-Kits-ARM/ARM-Cortex-M4-Core/_/N-cxd2t?P=1yztkji) - typicky od ST Micro, NXP a podobně. Nainstaluj toolchain podle svých preferencí (buď založený na GCC, nebo Keil, případně IAR, ...). Programuje se přes USB prostřednictvím bootloaderu.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: m 25. 03. 2017, 20:40:10
Obecně ARM jako takový prodává pouze licence ostatním výrobcům, tudíž procesor přímo od nich žádný není.
Pro embedded věci se jako výchozí architektura na ARM doporučuje STM32. Být tebou začnu na nějakým STM32F1xx / STM32F4xx. Dá se dobře sehnat a je k tomu spousta informací na fórech + se ze začátku nemusíš patlat s ovladači periferií (hledej STMCube)
Program tam nahraješ přes SWD nebo JTAG rozhranní. Na to si stačí koupit STLink, stojí to pár korun, případně je rovnou embedovaný na vývojové desce. Mrkni na Conrad.cz nějaký dev kity pro STM32 tam mají i s embedovaným STLinkem.
V open source světě nastane trochu problém s nahráváním firmware a debuggovaním. Asi bych ti doporučil Keil demo, které je limitované velikostí výsledné binárky na pár kilobyte. Výhoda Keilu je, že nainstaluješ a debugguješ, všechno potřebné si nese v sobě.
Potom je tu možnost Eclipse + GCC + OpenOCD, na což je potřeba jistý skill to nastavit dohromady, ale potom už nejsi ničím omezovaný.

Druhé kategorie ARMů jsou komplexní a výkonné SoC, na kterých běží mobilní telefony, servery, routery nebo třeba Something Pi. Pro tebe bude nejschůdnější programovat na Raspberry Pi, jelikož tam máš zajištěnou podporu komunity a spoustu tutoriálů, co ti pomohou když se zasekneš. Navíc nemusíš vymýšlet jak dostat program do procesoru.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: Mirek 25. 03. 2017, 20:40:53
Pro základní seznámení můžeš použít i mbed.org - pořiď kompatibilní development kit a toolchain + ide máš na webu. Až se s tím trochu seznámíš, můžeš si své projekty vyexportovat v podobě třeba pro GCC toolchain k sobě.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: Mirek 25. 03. 2017, 22:33:28
Tady je seznam podporovaných Dev kitů na mbed.org - https://developer.mbed.org/platforms/
Název: Re:Jak programovat ARM procesory?
Přispěvatel: flux 26. 03. 2017, 11:02:13
Díky za odpovědi, dopoledne jsem strávil čtením nejrůznější dokumentace k nějakému STM32F4xx procesoru takže mi začíná být pomalu jasné, jak to funguje a co si nejspíše vyberu. Vzhledem k faktu, že pracuji na 100% pod Linuxem, tak nejspíše budu muset zkusit tu "drastičtější" cestu  Eclipse + GCC + OpenOCD. Ten mbed.org vypadá taky zajímavě, ale vyzkouším ho asi někdy později. Nějaké vývojové desky by možná mohly být užitečné, ale OS je pro mě prozatím poněkud overkill. Protože se do budoucna chci seznámit s tím, jak ty procesory vlastně vypadají a fungují, tak si nejsem jistý, jestli si to chci nechávat zprostředkovávat přes nějaké systémové volání.

Každopádně velké díky všem za podnětné příspěvky, které mi pomohly se zorientovat v problematice. Pátral jsem po těchhle věcech na netu celé odpoledne a původně jsem z toho měl akorát zmatek. Teď už je to mnohem lepší :-).
Název: Re:Jak programovat ARM procesory?
Přispěvatel: v 26. 03. 2017, 11:50:44
cesta nejmenší odporu je IMHO Arduino Due
Název: Re:Jak programovat ARM procesory?
Přispěvatel: Mirek 26. 03. 2017, 12:35:59
Díky za odpovědi, dopoledne jsem strávil čtením nejrůznější dokumentace k nějakému STM32F4xx procesoru takže mi začíná být pomalu jasné, jak to funguje a co si nejspíše vyberu. Vzhledem k faktu, že pracuji na 100% pod Linuxem, tak nejspíše budu muset zkusit tu "drastičtější" cestu  Eclipse + GCC + OpenOCD. Ten mbed.org vypadá taky zajímavě, ale vyzkouším ho asi někdy později. Nějaké vývojové desky by možná mohly být užitečné, ale OS je pro mě prozatím poněkud overkill. Protože se do budoucna chci seznámit s tím, jak ty procesory vlastně vypadají a fungují, tak si nejsem jistý, jestli si to chci nechávat zprostředkovávat přes nějaké systémové volání.

Každopádně velké díky všem za podnětné příspěvky, které mi pomohly se zorientovat v problematice. Pátral jsem po těchhle věcech na netu celé odpoledne a původně jsem z toho měl akorát zmatek. Teď už je to mnohem lepší :-).

mbed.org bych ti právě doporučil JEN pro ty začátky. Něco si v něm vyzkoušet a potom si nechat vygenerovat projekt pro gcc a už pokračovat ve svém vlastním toolchainu.

Svého času měla Univesity of Austin opravdu pěkně udělaný kurz embedded programování s Cortex M4 - https://courses.edx.org/courses/UTAustinX/UT.6.02x/1T2015/a827a8b3cc204927b6efaa49580170d1/ . Třeba to ještě pokračuje.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: borekz 26. 03. 2017, 14:26:43
Dotaz je trochu obecný. Pokud vím, např. Raspberry Pi má ARM a programovat se může třeba v KDE Developeru, který si i s celým Linuxem a XServerem instaluješ přímo do něj. Ostatní odpovědi zřejmě předpokládají, že chceš vyrobit plošňák a na něj naletovat samostatný embed procesor.
Samostatná kapitola jsou malé IPTV settopboxy s osekaným Linuxem a webovým prohlížečem (ICan, Motorola, Arris). Do nich se nevejde X-prostředí a prohlížeč je upraven pro DFBuffer. Aplikace se cross-compiluje na jiném počítači s Linuxem a balíkem crosstool. Potom se sestavuje firmware obsahující celý filesystém osekaného Linuxu včetně aplikace.
Dále může být použit RTOS nebo se (např. v případě toho Arduina) kompiluje celý "firmware" včetně případných handlerů přerušení.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: Mirek 26. 03. 2017, 14:38:22
Dotaz je trochu obecný. Pokud vím, např. Raspberry Pi má ARM a programovat se může třeba v KDE Developeru, který si i s celým Linuxem a XServerem instaluješ přímo do něj. Ostatní odpovědi zřejmě předpokládají, že chceš vyrobit plošňák a na něj naletovat samostatný embed procesor.
Samostatná kapitola jsou malé IPTV settopboxy s osekaným Linuxem a webovým prohlížečem (ICan, Motorola, Arris). Do nich se nevejde X-prostředí a prohlížeč je upraven pro DFBuffer. Aplikace se cross-compiluje na jiném počítači s Linuxem a balíkem crosstool. Potom se sestavuje firmware obsahující celý filesystém osekaného Linuxu včetně aplikace.
Dále může být použit RTOS nebo se (např. v případě toho Arduina) kompiluje celý "firmware" včetně případných handlerů přerušení.
Ano, je to trochu nejasné. Ale píše "Taky jsem se zběžně díval po ČR, kde by se daly koupit nějaké zajímavé (M3, M4, M7...)" a vzhledem k celkové mírné zmatenosti bych doporučil začít s jednodušším - tedy Cortex M4 (nebo M3). A M7 případně nechat na později. Na M4 nepotřebuje žádný OS, nebo si tam může nějaký RTOS dát (třeba FreeRTOS). M7 má i MPU a už se na něm dá provozovat nějaký ten např. Linux-like OS.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: flux 26. 03. 2017, 16:59:37
Díky za další info, co se Arduina týče, tak tam nevím, jestli nemám být trošku zdrženlivější. Je to sice perfektní projekt, ale člověku neumožní některé věci, které by si jinak udělal sám a neumožní pochopení některých zákonitostí (u 328P-PU třeba vytvoření zavaděče nebo přepisování šestnáctibitových registrů). Nerad bych byl něčím takovým omezovaný, když bych se zabýval nějakou jinou architekturou, případně bych si taky rád vybral vlastní typ procesoru. Ale budu na to pamatovat, kdybych potřeboval nějak otestovat M3...

Na kurzy se kdyžtak mrknu taky, ale teď se potřebuju nějak zorientovat - co, kde jak a proč funguje, jaké procesory jsou nejpoužívanější, nejdostupnější, abych věděl, co si vybrat. Jak říkám, co jsem hledal, měl jsem z toho jenom jeden zmatek. Ono to stejně nakonec dopadne, že se naučím programovat podle datasheetů a programovacích návodů od výrobce - teda pokud je k těm procesorům mají. Co jsem prozatím viděl, tak to, co má Atmel v jednom datasheetu, tak oni mají v nějakých odhadem cca 20 - 30 souborech (holt je to složitější než nějaké osmibiťáky), takže uvidím, jak se s tím vlastně pracuje.

Co se konrétnosti dotazu týče, obecně se nebráním ničemu, potřebuji teď hlavně poznat, jaké jsou možnosti (je to pro mě novinka), ale v podstatě přemýšlím asi tak nad tím, že bych si vyrobil nějaký plošňák, pokud to nebude moc komplikované (což snad až tak nebude) a na něm se to nějak naučil. Takže mi vůbec nevadí širší rozsah odpovědí, alespoň uvidím, co všechno můžu využít. Třeba by mě doteď ani nenapadlo přeprogramovat nějaký setobox...
Název: Re:Jak programovat ARM procesory?
Přispěvatel: Mirek 26. 03. 2017, 18:56:52
...ale teď se potřebuju nějak zorientovat - co, kde jak a proč funguje, jaké procesory jsou nejpoužívanější, nejdostupnější, abych věděl, co si vybrat.

V tom případě by to chtělo abys byl trochu konkrétnější v tom, co chceš. Ono Cortex M3, M4, M4F, M7, M7F je hodně široké spektrum a bez nějaké představy o tom, kam míříš, se dost těžko radí.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: nobody(ten pravej) 26. 03. 2017, 19:28:11
[...] Třeba by mě doteď ani nenapadlo přeprogramovat nějaký setobox...
asi te napadlo ani preprogramovat HDD ;) http://spritesmods.com/?art=hddhack
Název: Re:Jak programovat ARM procesory?
Přispěvatel: Neolker 26. 03. 2017, 20:54:42
STM32F4xxx je dobrá volba. ;)

Všichni výrobci vesměs počítají, že máš nastudováno jádro Cortex M4 (nejlepší zdroj je tato kniha: https://www.amazon.com/Definitive-Guide-Cortex-M3-Cortex-M4-Processors/dp/0124080820/)

V datasheetech od výrobce najdeš potom zbytek + periferie.

Pro začátek stačí buď DISCOVERY kit nebo NUCLEO - koupíš od 12 USD (Farnell, Mouser, sem tam i v ČR) a mají na desce přímo ST-Link, tedy není potřeba kupovat další programátor (ale i ten je levný - do 600 CZK). Doporučuji vybrat ten, který podporuje i mbed.org dle https://developer.mbed.org/platforms/?tvend=10 mbed není jen o OS (starší verze ho nemají a poskytne ti to stejný ekosystém a komfort jako Arduino, ale s lepšími knihovnami a několikanásobným výkonem při stejné nebo menší ceně.

Jako další materiály na nastudování je super tahle vznikající knížka: https://leanpub.com/mastering-stm32 špatná není ani tahle zdarma, která vznikla před půl rokem: http://www.cs.indiana.edu/~geobrown/book.pdf

Nejlepší komerční IDE je KEIL, které je komplet zdarma pro řadu STM32F0 a STM32L0 (které mají max. 256 kB), kde máš vše funkční out-of-the-box. Jinak jde použít celkem cokoliv s GCC a OpenOCD pro debug.

Nakonec, určitě si projdi i tenhle německý web: https://www.mikrocontroller.net/articles/STM32 je tam spousta užitečných informací, byť v němčině, tak google translator taky funguje :)


Název: Re:Jak programovat ARM procesory?
Přispěvatel: flux 26. 03. 2017, 22:56:54
Pro Mirka: Omlouvám se, asi jsem se špatně vyjádřil. V příspěvku jsem uvedl spíše své úvahy nad tím, jak budu do budoucna postupovat s výběrem procesoru, ale obecně jsem všechny rady, které jsem potřeboval, už dostal. Díky, jsou skvělé. Možná to vypadá divně, ale bez některých informací uvedených v diskusi jsem měl docela problém se zorientovat v ARM architektuře a způsobu, jakým se procesor vůbec programuje. Přečetl jsem si rozdíly mezi jednotlivými architekturami, ale nechápal jsem, jakým způsobem vlastně ty procesory fungují jako celek. Díky tomu, že jste mě nakopli, tak jsem teď v situaci, kdy už vím obecně nějaký typ procesoru, který se dá bezproblémově sehnat v ČR na SOS elektronic (tím, že jsem dostal info o typech procesorů mi to vyskočilo hned ve vyhledávání), na stránkách výrobce jsem se prohrabal datasheety, kdy jsem díky zmínkám o konkrétních portech a způsobech programování zjistil, na co se vlastně zaměřit, takže vím obecně, jak se s tím programuje, navíc jste mi tady postli několik odkazů na levné programátory, takže mám hned několik možností, jak začít. Takže v současné době jsem plně spokojený se vším, co jsem se dozvěděl a pokud budu v budoucnu potřebovat poradit s něčím konkrétním (konkrétní programátorský problém), tak zase napíšu nějaký obecný dotaz. Už teď jste mi poradili dobře, další užitečné rady jsou vítaný bonus.

Pro pravého nobody: Ne, to mě ještě nenapadlo ;-) sice jsem už slyšel o tom, že na HDD někdo nahrál OS Linux, ale v té době to ještě bylo zcela mimo mé možnosti představy, co ty chipy vlastně umí. Teď už na tom jsem obecně lépe, ale na hackování harddisku si asi budu muset ještě chvilku počkat. :-)

Pro Neolkera: Díky za rozcestník, ty knížky vypadají zajímavě. Ta, co je zdarma ke stažení po zběžném projití určitě. Na tu německou stránku mrknu - některé věci jdou pochopit i bez překladače, případně mi stačí názvy těch programů na zběžné zorientování.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: prezek 27. 03. 2017, 00:04:06
1. Kup si nejaky vyvojovy kit s debugerem napriklad STM32VLDISCOVERY.
Na netu je spousta navodu, jak do toho prelozit a nahrat program jak ve win, tak v Linuxu.
Obchody jsou treba tme.eu (postovne 40,-), sos, farnell, mouser, mausel, rs, pvelectronic,...
2. Porid si neco pro mereni a diagnostiku (multimetr, ttl seriovy prevodnik, LED diody, osciloskop, logicky analyzator ...)
3. Najdi si priklad, ktery u tveho kitu rozsviti diodu a vyzkousej ho.
4. Prozkoumej datasheet a schemata, abys mohl upravit program a rozsvitil jinou diodu
5. Napis program, ktery rozblika diodu.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: PetrM 27. 03. 2017, 09:39:16
K tomu STLINKu - je fajn, ale ve verzi 2 (= DISCOVERY s STM32F407 nebo STM32F429). Jedničková verze je decentně zabugovaná a pod Linuxem nejde rozjet.

Jinak DISCOVERY používám i jako emulátor/programátor vlastní desky, stačí vytáhnout dva jumpery a pžipojit kablíkem...
Název: Re:Jak programovat ARM procesory?
Přispěvatel: citatel 27. 03. 2017, 12:26:02
Mne docel pomahaji i prispevky na mistnich web portalech: forum.mcontrollers.com, mcu.cz, mikrozone.eu (kde je dle kamarada, i vesely chat - ale zatim jsme nezkousel).
Hlavne se nebat zeptat.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: sdcsc 27. 03. 2017, 15:18:34
Začněte s STM32Fxx

Důvod:
levný vývojový kit
s programatorem!!! v ceně
rozšířené řešení - hodně know how na Internetu (velký rozdíl od např. ATMEL SAM...)

Název: Re:Jak programovat ARM procesory?
Přispěvatel: tisnik 27. 03. 2017, 21:48:06
jj STM32... jsou dobre cipy na hrani. Ja bych asi zacal s radou Cortex-M0+, ty jsou minimalisticke, vsechno je tam jednoduche, kity existuji. V rade STM32 to jsou L0 a J.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: jenda 27. 03. 2017, 22:03:52
To same plati i pro NXP ARM procesory. Kity LPCXpresso maji debugger a jsou levne. Vyber od Cortex-M0 po M4. Dokumentace dobra, komunita taky. Koupite v kazde drogerii.
Název: Re:Jak programovat ARM procesory?
Přispěvatel: libor 28. 03. 2017, 10:56:46
STM32F4xx nebo obdobné (např. teď pracuji s STM32L476) lze programovat s využitím bootovacího programu v systémové paměti naprogramované z výroby (program se spustí po přivedení VDD na pin BOOT0, ev. GND na pin BOOT1 během RESETu). Program komunikuje po několika rozhraních, např. USB v protokolu DFU (používám dfu-util), UART (USART) v protokolu popsaném např. v dokumentu AN3155 dostupném na www.st.com, I2C, SPI, CAN. Programování přes UART dlouhodobě úspěšně používám. Výhodou je, že lze malý program nahrát i do RAM a pak jej spustit od zadané adresy. Osvědčilo se mi to pro drobné testy a počáteční osahání. Standardním rozhraním pro programování kontrolerů STM32 je dvoudrátové rozhraní SWI (SWD), potřebný interface ST-LINK/V2 je dnes součástí snad všech kitů od STM, podpora openocd dnes již funguje, používají je snad všichni, jen já mám zatím radši to programování přes UART  :)
Mimochodem, eclipse nepoužívám, k plné spokojenosti mi stačí vim, make a cross-compiler gcc.