Matlab è un ambiente per la modellazione e lo sviluppo di algoritmi e processi di elaborazione di natura numerica, soprattutto di natura computazionalmente intensiva. Lo sviluppatore utilizza gli strumenti di programmazione e di simulazione che tale ambiente mette a disposizione per ottenere un modello computazionale e anche funzionale di un algoritmo o di un complesso processo di elaborazione dell’informazione. Il linguaggio di programmazione è simile al linguaggio C, ma non è compilabile come un codice sorgente C o C++. Oltre a non essere un linguaggio orientato alla compilazione (è interpretato), è anche un linguaggio che tratta varabili di natura vettoriale e non scalare come il linguaggio C. L’obiettivo primario di un ambiente di programmazione come Matlab è quello di pervenire nella maniera più rapida possibile alla verifica funzionale di un algoritmo o di un processo, senza preoccuparsi di come questi saranno da implementare sul target finale. Ciò rende particolarmente critica la fase di passaggio dall’ambiente di modellazione a quello di progettazione sul target finale. La codifica manuale del modello validato in ambiente Matlab, anche se possibile, è molto ardua e onerosa, anche per programmatori esperti sia del linguaggio di programmazione C e dell’architettura di computing del target finale, sia delle problematiche di natura strettamente numerica relative alla rappresentazione dei dati. La traduzione automatica del modello nel corrispondente codice C è ovviamente preferibile, anche se gli sviluppatori sono sempre diffidenti nei confronti dei processi automatici di generazione del codice sorgente. MathWorks ha recentemente introdotto uno strumento, Matlab Coder, che consente di generare automaticamente codice C e C++, leggibile e portabile, direttamente dagli algoritmi Matlab. Questo nuovo prodotto elimina la necessità di tradurre manualmente il codice dell’algoritmo Matlab in codice C e C++ per la prototipazione, l’implementazione e l’integrazione del software. Matlab Coder supporta un’ampia gamma di funzioni del linguaggio Matlab, tra cui gli operatori matematici matriciali e la gestione degli array dinamici, oltre a funzioni e system object.
Il generatore di codice
Matlab Coder è il generatore di codice C e C++ dal codice Matlab. Il codice generato può essere eseguito in modalità completamente autonoma dall’ambiente Matlab e quindi può essere integrato liberamente con qualsiasi altro codice, su piattaforme di computing diverse da quella host su cui gira l’ambiente Matlab stesso. Il codice generato è quindi portabile e leggibile allo stesso livello del codice Matlab da cui è stato derivato. Il coder, pur supportando un sottoinsieme del linguaggio Matlab, di fatto include tutti i costrutti delle strutture di controllo, le funzioni e le operazioni di natura vettoriale. La generazione del codice supporta un certo numero di funzioni dai alcuni Toolbox (Aerospace Toolbox, Image Processing Toolbox e Signal Processing Toolbox) e da molti System object presenti nel Communications System Toolbox, nel Computer Vision System Toolbox, e Dsp System Toolbox. Relativamente ai dati, vengono supportati dati tipici di Matlab come le matrici e gli array, le variabili persistenti, le variabili globali, le matrici multidimensionali e classi e i tipi di dati come i numeri complessi, la doppia precisione, i dati in virgola fissa, i caratteri, le strutture e i dati a dimensione variabile. Altre funzionalità supportate riguardano le funzioni, gli handler delle funzioni, le liste variabili di argomenti di ingresso e di uscita delle funzioni e la stessa capacità di chiamare funzioni Matlab. Il coder può generare anche le funzioni Mex (Matlab Executable), cioè porzioni di codice in versione eseguibile (non intepretata), da eseguire nel codice Matlab allo scopo di accelerare l’esecuzione del codice Matlab, soprattutto se di natura computazionalmente intensiva. Il codice C e C++ generato è compatibile Ansi/Iso. La generazione delle funzioni Mex è particolarmente utile in quanto consente di verificare che l’algoritmo scritto in linguaggio Matlab da cui si vuole derivare il codice C eseguibile sia compatibile con la generazione del codice stesso. La funzione Mex ingloba il codice compilato perché questo possa essere eseguibile da Matlab stesso. Matlab Coder produce un report che identifica gli errori che vanno rimossi perché il Coder possa completare il processo di generazione del codice. Eseguendo iterativamente la generazione del codice C e quindi la generazione della funzione Mex corrispondente fino alla completa rimozione degli errori, si perviene ad una versione del codice Matlab compatibile con la generazione del codice.
Modellare e prototipare
La modellazione è una fase importante dello sviluppo di applicazioni, soprattutto se queste si caratterizzano per una certa complessità. Passare dalla modellazione alla prototipazione è uno dei punti critici dell’intero processo di progettazione. Inoltre, i contesti di progettazione si sono differenziati, con il differenziarsi stesso della natura delle applicazioni. Le applicazioni embedded sono sempre più diffuse e implicano un ulteriore elemento di discontinuità del ciclo di progettazione, il target finale che non coincide con il sistema host su cui gira l’ambiente di modellazione. Il collegamento tra l’ambiente di modellazione e quello di emulazione del processore target dell’applicazione finale è stato in parte soddisfatto per varie famiglie di processori target particolarmente diffusi nelle applicazioni, soprattutto quelli di natura signal processing, ma la categoria dei microcontrollori, ormai molto utilizzati nelle applicazioni embedded, è ampiamente non supportata. La compilazione di codice sorgente C destinata a qualsiasi tipo di processore target è quindi un obiettivo particolarmente importante che consente di chiudere il ciclo di modellazione-emulazione, indipendentemente dalla natura del processore target. Embedded Coder genera codice C e C++ leggibile, compatto e veloce per essere eseguito su processori embedded, su schede di prototipazione rapid che ospitano il processore target, e sui microcontrollori tipicamente utilizzati in ambito industriale. Il codice generato è altamente ottimizzato e controllabile a grana fine relativamente alle funzioni, ai dati e ai file. In codice così ottimizzato risulta più efficiente e integrabile anche con software già certificato in ambito industriale. Embedded Coder offer un supporto per gli standard software Autosar and Asap2. Consente anche ottenere rapporti di tracing del codice, la documentazione del codice di interfaccia e la verifica automatica per supportare lo sviluppo software DO-178, IEC 61508, and ISO 26262.