WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Lookuptable Array für C Code generieren

 

Untitled.m
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2015, 00:15     Titel: Lookuptable Array für C Code generieren
  Antworten mit Zitat      
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 Wink

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?
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 13.07.2015, 08:23     Titel:
  Antworten mit Zitat      
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?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Untitled.m
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2015, 08:29     Titel:
  Antworten mit Zitat      
Ähm Simulink war bis jetzt gar nicht im Spiel Smile
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Untitled.m
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2015, 08:39     Titel:
  Antworten mit Zitat      
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!
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 13.07.2015, 09:22     Titel:
  Antworten mit Zitat      
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.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Untitled.m
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2015, 10:19     Titel:
  Antworten mit Zitat      
Andreas Goser hat Folgendes geschrieben:
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Untitled.m
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 01.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2015, 14:14     Titel:
  Antworten mit Zitat      
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

name=inputname(2);

name=[name, 'LUT'];
[m, n]=size(mat);
str=['#ifndef ' filename '_h ' char(13) ' #define ' filename, '_h ' char(13) char(13) ' const float ' name '[' num2str(m) '][' num2str(n) ']= {'];
leer=length(name);
for(i1=1:m)
    if(i1>1)
        str=[str blanks(26+leer)];
    end
    str=[str '{'];
    for(i2=1:n)
        str=[str num2str(mat(i1, i2)) ', '];
    end
    str=[str '},' char(13)];
end
str=[str(1:end-2) char(13) ' };' char(13) '#endif'];
fid=fopen([filename '.h'], 'wt+');
fprintf(fid, '%s', str);
fclose(fid);
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.