Verfasst am: 13.07.2015, 00:15
Titel: Lookuptable Array für C Code generieren
Hallo zusammen,
ich habe jetzt schon eine halbe Stunde Google bemüht, aber keine Antwort auf meine eigentlich recht simple Frage bekommen.
Ich habe Matlab genutzt um eine 127x127 Matrix namens x zu berechnen, deren Werte ich als Lookuptable in einem Mikroprozessor benutzen werde, damit der kleine Kerl nicht so viel zu rechnen hat
Nun würde ich gerne ein Header File erstellen mit einem Array der Form
const float xlut[127][127]={ {x(1,1), x(1,2), ... x(1,127)},
{x(2,1), x(2,2), ... x(2,127)},
{...},...
{x(127,1), x(127,2), ..., x(127, 127)}
};
dabei stehen jetzt x(n,m) für die entsprechenden Werte in meiner Matlab Matrix x.
Da ich mir kaum vorstellen kann, dass ich der Erste bin der so etwas machen möchte, würde ich gerne wissen ob Matlab dafür irgendeine coole Funktion an Bord hat oder ob es sonst eine einfache Möglichkeit gibt Matlab beizubringen den Text so zu exportieren?
Also wenn x dann im Lookup-Table Block eines Simulink Modells ist, und dann C Code generiert wird, was ist dann das Problem? Sieht der Code nicht "gut" aus?
Ähm Simulink war bis jetzt gar nicht im Spiel
Bis jetzt handelt es sich um eine simple Matrix im Matlab Workspace die ich in C Code gießen möchte.
Interpretiere ich mit deiner Antwort dass ich das also mit Simulink erledigen kann? Ich muss zugeben, dass ich bisher fast nix mit Simulink gemacht habe.
Hab mich gerade mal kurz in Simulink umgeschaut und die Lookuptable Blöcke gefunden. Darauf habe ich mich nicht bezogen, daher war der Titel jetzt vielleicht auch etwas irreführend.
Mit Lookuptable meinte ich das Array, welches ich in meinen Prozessor packen möchte, damit dieser ein Lookuptable hat welches ihm aus einem Paar von 7 Bit Integers einen Float Wert rausgibt. Dass es Simulink Blöcke namens Lookuptable gibt wusste ich bis jetzt gar nicht.
Dennoch, falls da über Simulink ein einfacher Weg führt, nehme ich auch gerne den!
Na ja, auf lange Sicht ist modellbasierte Entwicklung gewiss besser und einfacher. Üblicherweise baut man sich halt ein Simulink Modell, z.B. eine Komponente für den Regler und eine für die Strecke, testet und generierte dann automatischen C Code für den Mikrocontroller.
Aber hier scheint es ja ein auf alter Väter Art handcodiertes Projekt zu sein und nur der C Code des LUT soll dazu gepackt werden. Kann natürlich sein, dass das auch mit MATLAB Coder geht. Wenn man im Hochschulumfeld arbeitet und alle Produkte eh da sind - einfach mal ausprobieren.
Na ja, auf lange Sicht ist modellbasierte Entwicklung gewiss besser und einfacher. Üblicherweise baut man sich halt ein Simulink Modell, z.B. eine Komponente für den Regler und eine für die Strecke, testet und generierte dann automatischen C Code für den Mikrocontroller.
Andreas
Ich denke es gibt sicher viele Projekte wo diese Herangehensweise effektiv ist, nur bin ich gerade dabei einen Protokollkonverter zu programmieren, der sich aus Midi Befehlen vom Quellgerät UDP Pakete fürs Zielgerät generiert und versendet. Der größte Teil des Codes ist das verwalten der Schnittstellen. An sich glaube ich keine typische MATLAB/Simulink Anwendung (oder unterschätze ich da MATLAB?).
Nur ist mir dann aufgefallen, dass mein Quellgerät mir für einen Punkt Kugelkoordinaten in 7Bit Auflösung gibt, mein Zielgerät aber 3 kartesische Koordinaten als Float Werte erwartet. Und das war auch erst der Punkt wo MATLAB zum ersten mal ins Spiel kam.
Der MATLAB Coder war ein interessantes Stichwort, den kannte ich noch nicht. Leider besitze aber auch weder ich noch meine Hochschule eine entsprechende Lizenz :/
Ich habe aber das Gefühl dass ich hier viel zu kompliziert denke. Also z.B. beim DSP programmieren ist es doch eigentlich eine alltägliche Aufgabe, Koeffizienten in MATLAB zu berechnen und dann diese als Header in den Code einzubinden, oder? Das muss doch ohne große, teure Toolboxschlacht machbar sein?
So, nach 2 Kaffe heute morgen hab ich mir dann gedacht: Kann man doch auch eigentlich selbst programmieren. Folgendes ist rausgekommen, ich bin mir sicher dass Experten das noch eleganter formulieren könnten, aber es funktioniert!
Code:
function str = mat2header( filename, mat)
%MAT2HEADER generates a c header file, defining all elements of mat as an
%array of constant floats
% mat is a 2 dimensional numeric Matrix, filename is the name of the % Headerfile without .h
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.