Jak programovat ARM procesory?

flux

Jak programovat ARM procesory?
« kdy: 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.


Ladislav Michl

Re:Jak programovat ARM procesory?
« Odpověď #1 kdy: 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ší.

Mirek

Re:Jak programovat ARM procesory?
« Odpověď #2 kdy: 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.

m

Re:Jak programovat ARM procesory?
« Odpověď #3 kdy: 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.

Mirek

Re:Jak programovat ARM procesory?
« Odpověď #4 kdy: 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ě.


Mirek

Re:Jak programovat ARM procesory?
« Odpověď #5 kdy: 25. 03. 2017, 22:33:28 »
Tady je seznam podporovaných Dev kitů na mbed.org - https://developer.mbed.org/platforms/

flux

Re:Jak programovat ARM procesory?
« Odpověď #6 kdy: 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ší :-).

v

Re:Jak programovat ARM procesory?
« Odpověď #7 kdy: 26. 03. 2017, 11:50:44 »
cesta nejmenší odporu je IMHO Arduino Due

Mirek

Re:Jak programovat ARM procesory?
« Odpověď #8 kdy: 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.

borekz

  • ****
  • 493
    • Zobrazit profil
    • E-mail
Re:Jak programovat ARM procesory?
« Odpověď #9 kdy: 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í.

Mirek

Re:Jak programovat ARM procesory?
« Odpověď #10 kdy: 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.

flux

Re:Jak programovat ARM procesory?
« Odpověď #11 kdy: 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...

Mirek

Re:Jak programovat ARM procesory?
« Odpověď #12 kdy: 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í.

nobody(ten pravej)

Re:Jak programovat ARM procesory?
« Odpověď #13 kdy: 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

Neolker

Re:Jak programovat ARM procesory?
« Odpověď #14 kdy: 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 :)