MATLAB appelle les fonctions C

Il est possible d'appeler la bibliothèque de fonctions C dans MATLAB, mais vous devez d'abord configurer l'environnement et le compilateur, et écrire une fonction d'interface pour connecter C et MATLAB.

La fonction de cette fonction mex est d'appeler facilement la bibliothèque de fonctions C prête à l'emploi ou de réécrire le code MATLAB du département inefficace et consommateur d'énergie en un substitut C.

 

  1. Installer le compilateur C

MATLAB lui-même ne peut pas compiler le langage C et a besoin du support d'autres compilateurs.

MinGW-w64 utilisé ici, note: La version MATLAB doit correspondre à la version MinGW-w64. Introduction dans la communauté MATLAB:

https://ww2.mathworks.cn/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-cc-compiler

 

L'outil d'installation en ligne est très nul et je ne peux pas le télécharger, ni accrocher une échelle. Il peut également être installé avec un package hors ligne, il suffit de le décompresser dans le chemin souhaité, la version 6.3 du lien du package hors ligne:

https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/6.3.0/threads-posix/seh/x86_64-6.3.0-release-posix- seh-rt_v5-rev2.7z / Télécharger

Configuration de la variable d'environnement: (Le chemin doit être modifié en fonction de votre propre chemin de fichier)

 

 

 

Installez MinGW dans MATLAB:

Exécutez setenv ('MW_MINGW64_LOC', dossier) sur la ligne de commande Matlab. Le dossier est l'emplacement d'installation de MinGW (le même que le chemin de la variable d'environnement) et des guillemets simples sont requis;

 

Vérifiez si MinGW est installé avec succès:

Exécutez mex -setup sur la ligne de commande Matlab, ce qui suit est réussi

 

 

  1. Écriture, compilation, appel de fichiers d'interface

Éléments du fichier d'interface:

Le fichier d'interface est un fichier utilisé pour associer l'environnement C et l'environnement MATLAB. Le type de fichier est .c. Le modèle de fichier le plus vérifié est le suivant:

#include "mex.h"
void  mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
    return;
}

 

Le nom de la fonction mexFunction  et ses paramètres sont fixes et ne peuvent pas être modifiés La conversion d'interface se fait dans cette fonction, et la fonction C dont nous avons besoin est appelée pour terminer la fonction.

 

Compilation de fichiers:

S'il y a plusieurs fichiers C dans le chemin qui doivent être compilés, utilisez cette commande de compilation:

mex -output  mex_compress  *  .c % compile tous les fichiers C pour générer des fichiers binaires mex_compress

 

Appel de fonction d'interface:

Seule la fonction mexFunction du fichier peut être appelée dans MATLAB, puis d'autres fonctions de fonction peuvent être appelées dans cette fonction. Mais vous devez faire particulièrement attention: lorsque vous appelez cette fonction dans MATLAB, le nom de la fonction n'est pas mexFunction, mais le nom du fichier! Par exemple, lorsque le fichier est nommé hello.c, la commande appelante est [c, d] = hello (a, b);

 

Pour plus d'informations, veuillez consulter la description officielle de l'API du site Web

API :https://ww2.mathworks.cn/help/matlab/cc-mx-matrix-library.html?s_tid=CRUX_lftnav

 

 

  1. Transfert des paramètres d'interface

Concept de paramètre:

Les paramètres de l'interface peuvent être passés dans les deux sens (mode pointeur) tout comme C.Il y a 4 paramètres formels dans l'interface:

int  nlhs, mxArray * plhs [], int  nrhs, const mxArray * prhs []

Il est un peu difficile de comprendre ce paramètre, donc le concept est clair étape par étape

Appelez d'abord le niveau entrant: lorsque MATLAB appelle l'interface, les paramètres d'entrée ne sont pas mappés à ces 4 paramètres formels un par un

Définition des paramètres: numéro du paramètre de sortie nlhs , valeur du paramètre de sortie plhs [], numéro du paramètre d'entrée nrhs , paramètre d'entrée prhs []

(L signifie sortie gauche, R signifie entrée droite)

Forme de paramètre: les valeurs de paramètre plhs [] et prhs [] sont en fait une adresse, et l'adresse prend en charge plusieurs paramètres, et chaque paramètre peut être dans n'importe quel format, y compris une matrice multidimensionnelle, de sorte que les paramètres réels de l'interface sont Le nombre peut être étendu presque à l'infini.

 

Entrée de paramètre:

Les paramètres sont entrés via deux interfaces, nrhs entre une valeur = nombre total de paramètres, plhs [] entre un pointeur, le premier paramètre est plhs [0] et le second paramètre est plhs [1]. Chaque paramètre peut être de n'importe quel type, y compris les matrices. Lorsque nrhs = 2, cela signifie que plhs [0] et plhs [1] ont des données, et plhs [2] n'a aucune donnée. La méthode d'obtention des données de paramètres est la suivante:

non signé  char  * idata;

idata = mxGetPr (prhs [0]); // Récupère un pointeur vers la matrice

mexPrintf ( " idata [0]  =% d \ n" , idata [0] );

 

Sortie de paramètre:

La manière d'envoyer des données dans la fonction est similaire à l'entrée, plhs [] est l'adresse du paramètre sortant, mais nlhs n'a pas besoin de nous pour fonctionner. La méthode de transfert de données est la suivante:

Créez d'abord un type de données sur l'adresse plhs [0] (créez un type uint32 ici, veuillez vous référer au site officiel pour plus de détails)

plhs [0] = mxCreateUninitNumericMatrix (1, 1, mxUINT32_CLASS, mxREAL);

Ensuite, récupérez le pointeur de plhs [0] via mxGetPr;

unsigned  long  * out_ ptr  = mxGetPr (plhs [0]);

Ensuite, connectez le pointeur out_ptr du paramètre plhs [0] à la fonction C

Ma_fonction_C ( out_ ptr);

 

Récupérez les données de la fonction mexFunction dans le fichier MATLAB :

[ c, d ] = mex_ helloworld ( a, b );

c et d sont les deux paramètres sortants, correspondant à plhs [0] et plhs [1]

 

À propos de la fonction mexFunction :

Cette fonction n'est utilisée que pour l'interface entre MATLAB et C. Les fonctions telles que la conversion d'interface et l'inspection sont implémentées dans la fonction. Il n'est pas nécessaire d'écrire le programme de réalisation de la fonction C dans cette fonction. La manière correcte est d'appeler la fonction C pure dans cette fonction. Par exemple, cette fonction ne prend pas en charge la fonction printf , mais la fonction mexPrintf de la fonction mex de MATLAB est utilisée . La fonction C appelée dans la fonction prend en charge des fonctions C complètes.

 

Je suppose que tu aimes

Origine blog.csdn.net/a1254484594/article/details/109282955
conseillé
Classement