Sistemi di sviluppo per ARM

Esistono diversi ambienti di sviluppo basati sul microcontrollore ARM, ognuno con proprie caratteristiche e specifici strumenti di lavoro, ma tutti condividono, le stesse funzionalità, magari svolte in modo diverso.

IAR Embedded Workbench per ARM o mVision della Keil sono degli ambienti di sviluppo di tipo IDE realizzati per permettere a un progettista software lo sviluppo e il debug di applicazioni embedded per diverse architetture hardware tra cui il  microprocessore ARM. Questi sono due esempi di proposte commerciali, ma esistono anche soluzioni basate su architetture di tipo open-source a un prezzo decisamente inferiore o anche completamente libere da costi. Tutti questi pacchetti includono un compilatore C/C++ con la possibilità, intervenendo sulle opzioni di compilazione, di generare un codice binario compatto ed efficiente. Con la diffusione dei linguaggi strutturati come il C e con la sempre minore importanza dei linguaggi meno evoluti, ma altrettanto utili per scrivere porzioni di codice che permettono di controllare dispositivi hardware (come l’assembly), diventa importante, e di estremo interesse, la presenza di strumenti flessibili e prestazionali che possono dare un valido aiuto nel lavoro quotidiano di sviluppo e collaudo del software embedded. Sono presenti, nel panorama commerciale, ambienti di lavoro che assicurano la necessaria flessibilità per essere utilizzati e integrati in soluzioni dedicate; ma esistono, al contrario, anche architetture chiuse che non permettono l’interoperabilità tra diversi ambienti di test o di compilazione. In ogni caso, ogni proposta presenta degli accorgimenti tecnici che la rendono sicuramente interessante. La tabella 1 mostra un confronto tra i tre diversi ambienti maggiormente utilizzati nel panorama tecnico: IAR Embedded Workbench, mVision e iSystem.

Tabella 1 comparazione di tre ambienti commerciali di sviluppo

Tabella 1: comparazione di tre ambienti commerciali di sviluppo

Non solo, esistono anche soluzioni basate su architetture GNU come la proposta Microcross. Questa propone un ambiente di lavoro integrato con soluzioni hardware (emulatori) che permettono di utilizzare un sistema misto tra editor e cross-factory GCC. Questa soluzione ha il merito di mettere in evidenza che anche le soluzioni open sono mature per essere impiegate in applicazioni commerciali. Microcross non rappresenta l’unica proposta di tipo open-source. Un’altra valida proposta è Gnu ARM. Gnu ARM è suggerita con CygWin, Linux o MacOS e questa toolchain è fornita insieme alla suite GNU come binutils, il compilatore GCC con il relativo debugger (Insight per ambiente Windows e Linux, mentre GDB è proposto per MacOS). In Gnu ARM sono proposti entrambi i  compilatori C e C++, e come libreria C è utilizzata NewLib. L’aspetto negativo, forse, di Gnu ARM è l’assenza di un’interfaccia grafica. Gnu ARM ha comunque il merito di proporre una serie di librerie open continuamente aggiornate dal team di sviluppo.

keil mVision

La figura 1 mostra il kit di sviluppo della Keil realizzato per ARM7, AMR9 e CortexM3.

Figura 1: product overview.

Figura 1: product overview.

Il tool, integrato con RealView, fornisce un vero ambiente di lavoro denominato Microcontroller Development Kit (MDK) ed è composto da uVision, un’interfaccia grafica che prevede un simulatore e un debugger, RealView, un ambiente di sviluppo C/C++ per ARM, e MicroLib, una libreria ottimizzata e caratteristiche prestazionali effettivamente interessanti. Completano la proposta la presenza di un Real-Time Tracer, di RTX, un sistema operativo di tipo real-time deterministico. Esistono poi diversi strumenti a corredo che permettono di agevolare il  lavoro di ogni progettista, tra questi un flash file system, una libreria CAN, un’interfaccia USB e una suite basata su TCP. L’ambiente µVision include ARM Real View compiler, un debugger software in grado di testare tutte le principali periferiche; una libreria con le specifiche di tutti i microcontrollori  con CPU ARM e validi esempi di codice tra cui anche un Kernel. Una volta scelto il tipo di dispositivo sul quale si intende lavorare, l’IDE fornisce, in automatico, un comodo file chiamato “startup.s” nel quale è possibile fare una prima configurazione del sistema impostando, per esempio, il PLL e clock del sistema, il clock del bus (VPBDIV),  il MAM e configurare la memoria di stack. La figura 2 mette in evidenza le scelte impostate in fase di configurazione.

Figura 2: configurazione iniziale.

Figura 2: configurazione iniziale.

Una volta terminata questa attività preliminare è possibile iniziare a scrivere  il codice che sarà quindi eseguito dopo il file di “startup.s”. Il listato 1 propone una possibile configurazione dei vari registri interni.

// Initial PLL & VPB Clock
// Start of Initial PLL for Generate Processor
Clock
// PLL Configuration Setup
// X-TAL = 19.6608MHz
// M(Multiply) = 3
// P(Divide) = 2
// Processor Clock(cclk) = M x OSC
// = 3 x 19.6608MHz
// = 58.9824MHz
// FCCO = cclk x 2 x P
// = 58.9824 x 2 x P
// = 235.9296 MHz
// VPB Clock(pclk) = 29.4912MHz
// Start of Initial PLL for
// Generate Processor Clock
PLLCFG &= 0xE0; // Reset MSEL0:4
PLLCFG |= 0x02; // MSEL(PLL Multiply) = 3
PLLCFG &= 0x9F; // Reset PSEL0:1
PLLCFG |= 0x20; // PSEL(PLL Devide) = 2
PLLCON &= 0xFC; // Reset PLLC,PLLE
PLLCON |= 0x01; // PLLE = 1 = Enable PLL
PLLFEED = 0xAA; // Start Update PLL Config
PLLFEED = 0x55;
while (!(PLLSTAT & 0x00000400));
// Wait PLL Lock bit
PLLCON |= 0x02; // PLLC = 1 (Connect PLL
Clock)
PLLFEED = 0xAA; // Start Update PLL Config
PLLFEED = 0x55;
VPBDIV &= 0xFC; // Reset VPBDIV
VPBDIV |= 0x02; // VPB Clock(pclk) = cclk / 2
// End of Initial PLL for Generate Processor Clock
// Start of Initial MAM Function
MAMCR = 0x00; // Disable MAM Function
MAMTIM = 0x03; // MAM Timing = 3 Cycle of cclk
MAMCR = 0x02; // Enable MAM = Full Function
// End of Initial MAM Function
// Start of Main Function Here
Listato 1 – Valori iniziali per LPC2119

Esiste anche la possibilità di utilizzare risorse hardware, appositamente predisposte, per condurre sessioni di collaudo del software o dell’hardware. Keil propone a questo riguardo Ulink. Questa opzione si basa su JTAG ed è mediante questo modulo hardware che diventa possibile programmare le memorie flash, condurre sessioni di test e fare il cosiddetto Real-Time Trace. Attraverso MDK l’utente dispone di una serie di interfacce che consentono di integrare in Ulink differenti soluzioni, quali Signum Systems. Non solo, Keil offre anche diverse evaluation board e starter kit per i vari microcontrollori come ARM9 o Cortex-M3. Il simulatore  presente nell’ambiente uVision consente, oltre a effettuare classiche simulazioni degli stati logici dei pin esterni (Logic Analyzer), anche di visualizzare, in maniera real-time, gli stati dei registri interni alla CPU, gli accessi alla memoria flash e gli stati di tutte le periferiche e dei registri connessi, interni al microcontrollore.

iSYSTEM

La figura 3 mostra la soluzione di iSystem, ancora più evidente in figura 4.

Figura 3: iSystem.

Figura 3: iSystem.

 

Figura 4: architettura di iSystem.

Figura 4: architettura di iSystem.

Dalla figura si nota che l’ambiente di lavoro è facilmente interoperabile con differenti soluzioni. Possiamo per esempio utilizzare un plugin con MS Visual Studio 2008. Accanto alle già citate possibilità offerte da mVision, iSystem permette di integrare in winIDEA delle applicazioni di terze parti sfruttando una serie di API presenti nel sistema. winIDEA è l’interfaccia di lavoro che comprende l’IDE grafico e un debugger insieme ai compilatori C/C++. Esistono poi un insieme di strumenti che permettono di rendere il lavoro del progettista più immediato e flessibile. Questi sono rappresentati da un project manager, un build manager e un HLL-Source Debugger. Con il project manager  il progettista ha un controllo più efficiente sul proprio progetto; può organizzare le attività e interfacciarsi in maniera più “user friendly” con gli altri progettisti. Il  progetto è organizzato come una struttura ad albero, ogni informazione riferita al progetto, codice sorgente o quant’altro, è archiviata in modo efficiente. In questo modo l’utente può navigare facilmente nella struttura del progetto. Al contrario, con il build manager si può definire e mettere a punto la propria configurazione di lavoro. In questo modo è possibile inserire un debugger o un diverso compilatore. L’interoperabilità è garantita da iSystem per mezzo di isystem.connect, API presenti in iConnect.DLL.

Microcross

La casa americana Microcross propone GNU X-Tools™. X-Tools è una toolsuite comprendente un compilatore C/C++, assembler, un gestore di archivio, utilitiy per la gestione dei file binari, librerie C/C++ e un debugger. Questi strumenti fanno parte di GNU, ambiente di cross-compilazione e debugging di tipo open source. Microcross distribuisce la GNU cross-tools insieme a diversi porting di una decina di architetture, un tool grafico (IDE) per la loro gestione e for nisce, in più, il  necessario supporto tecnico. A questo riguardo Microcross si impegna a fornire patch, build, debug, e documenti. L’ambiente IDE è garantito da SlickEdit® con le relative modifiche di Microcross. Inoltre, X-Tools è integrato in una varietà di emulatori e debugger commerciali. Per esempio è utilizzato con EPI MAJIC™ debug agent con supporto ARM7TDMI e Visual X-Tools. L’uso dell’ambiente Microcross è estremamente agevole, grazie anche alla presenza di file di configurazione allegati alla distribuzione.  I listati 2 e 3 mostrano un esempio; questi script devono essere utilizzati in DOS.

+q // Enter quiet mode
+mon
//________________________________________________________
// startice.cmd: Created by MAJIC Setup Wizard version 3.2
//________________________________________________________
dv “Reading startice.cmd file\n”
//
// Software Settings
//
eo semi_hosting_enabled= on // Semihosting support
eo top_of_memory = 0xffffffff// top of available memory on target
eo semi_hosting_vector = 0x8 // Use default vector for Semihosting
eo vector_catch = 0x3b // Set Vector Catch
//
// Target Information Options
//
eo trgt_resets_jtag = yes // Target reset will also reset JTAG controller
//
// MAJIC Settings
//
eo ice_jtag_clock_freq= 20 // JTAG clock frequency (MHz)
eo ice_jtag_use_trst = on // Use TRST* to reset JTAG controller
eo ice_reset_output = off // reset command does not pulse MAJICs reset output
eo ice_power_sense = VREF // Sense target voltage level on VREF pin
//
// Trace aliases (MAJIC-Plus or MAJIC-mx only)
//
ea etinst fr c etrace.cmd // set up Trace options for instructions
ea etdata fr c eview.cmd // set up Trace options for Data
//
ea dts do ice_trig*; do trace* // display trace control settings
ea kts eo tt=auto; eo tta=stop; eo tg=none; // kill trace settings (set defaults)
//
-mon
dv “Finished reading startice.cmd\n”
Listato 2 – startice.cmd
// Created by MAJIC Setup Wizard version 3.2
// Creation Date: 9/2/2003 20:8:40
// Processor type: ARM7TDMI
// Project: eb40a
// Description: This example starts up an Atmel EB40A Board
//
// A full description of the this files syntax can be found in the sample file
// located at: C:\Program Files\EPITools\edta20\bin\mdi\epimdi.cfg
// and also in the “MDI for MAJIC User’s Guide”
//
Define Global
  EDTPATH               “C:\\Program Files\\EPITools\\edta20\\bin”
  CommandFile           “startice.cmd”
Define Device “ARM7TDMI”
  Class                  ARM
  Endian                 little
  EPIcpuid               “arm7tdmi”

Define Controller “ethernet_192_168_0_131”
  Port                   “192.168.0.131:e”
  Speed                   7

Define MDIDeviceList
  DevName     “ARM7TDMI via 192.168.0.131”
      Device      “ARM7TDMI”
      Controller  “ethernet_192_168_0_131”
Listato 3 – Configuration file
Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend