Markdown source

# Cortex-M di ARM

<div class="abstract">
Un breve articolo sui Cortex-M le loro differenze, ed una guida a come scegliere!
</div>

<img src="./cloud_word.PNG" class="img-responsive center-block" width="50%">

## Le differenze tra i modelli di Cortex-M

Prima di tutto un po' di storia. Il primo modello di Cortex-M rilasciato da ARM è stato il **Cortex-M3** nel 2004. 
A seguire arrivarono i **Cortex-M4** ed i **Cortex-M0+** nel 2010, e nel 2014 il top della gamma: il **Cortex-M7**

<img src="./Cortex-Mx_slide5.PNG" class="img-responsive center-block" width="50%">

## Collocazione dei Cortex-M nel mercato.

La ARM colloca i Cortex-M in due fasce principali: "8/16 bit Traditional application space" e "16/32 Traditional application space". <br>
Nella prima area, quella delle applicazioni 8/16 bit, colloca i Cortex-M0 e Cortex-M0+, che come vedremo di seguito, sono effettivamente
"low cost" e "low power" destinati quindi al mercato dei grandi volumi ed in sostituzione delle MCU ad 8bit.<br>
I Cortex-M3,M4 ed M7 riempiono invece la fascia delle applicazioni 16/32, ma con una cosa distinzione in più: per i Cortex-M4 ed M7 
ARM introduce la "Digital Signal Control application space". Un'area in cui queste MCU, pur non essendo DSP veri, possono essere usate per
compiti di **Digital Signal Processing** (DSP) con estrema versatilità. Questi due modelli di Cortex possono vantare un'ampia varietà di interfacce
di vario tipo, dall'Audio alle comunicazioni: QSPI, Fast Ethernet e HS USB, o specifiche per LCD, RAM o FLASH esterne.
Il Cortex-M7 in particolare, ha al suo interno tecnologie del tutto simili alla famiglia Cortex-A.

<img src="./Cortex-Mx_Instruction.png" class="img-responsive center-block" width="50%">

## Comparazione tra i vari Cortex-M.

Una tra le principali differenze tra i Cortex-M riguarda il set di istruzioni.<br>
Il Cortex-M0 ha un piccolo subset delle istruzioni del Cortex-M3, che a sua volta è un subset dei Cortex-M4 ed M7. <br>
Un set di istruzioni ridotto si traduce per il compilatore, che sta convertendo il nostro programma in C, in unsa serie più lunga di istruzioni 
assembler. E quindi più tempo a svolgere e portare a termine un determinato task.

@include='bio_clemente_dicaprio'