@c6000246 (Y takaaki)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Simulinkを用いたArduinoの外部割込み実装について

解決したいこと

SimulinkのS-function BuilderでArduinoに1相のエンコーダを接続して、それのパルスを外部割込みで読み取るものを作ろうとしています。
S-function Builderは正常にビルドできるのですがSimulinkをエクスターナルモードで実行するとエラーが発生しました。
解決法を教えてください。

発生している問題・エラー

C:\Users\User name\Desktop\kenkyuu\MATLAB\bi-kuru\Enc_test\Enc_test_ert_rtw/Enc_test.c:7: undefined reference to `Enc_Read_Outputs_wrapper'
C:\Users\User name\Desktop\kenkyuu\MATLAB\bi-kuru\Enc_test\Enc_test_ert_rtw/Enc_test.c:8: undefined reference to `Enc_Read_Update_wrapper'
collect2.exe: error: ld returned 1 exit status
gmake: *** [../Enc_test.elf] Error 1
The make command returned an error of 2
'An_error_occurred_during_the_call_to_make' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

該当するソースコード(wrapperファイル)

/*
 * Include Files
 *
 */
#if defined(MATLAB_MEX_FILE)
#include "tmwtypes.h"
#include "simstruc_types.h"
#else
#include "rtwtypes.h"
#endif



/* %%%-SFUNWIZ_wrapper_includes_Changes_BEGIN --- EDIT HERE TO _END */
#include <math.h>
#ifndef MATLAB_MEX_FILE
#include <Arduino.h>

volatile byte count = 0;
volatile byte y0 = 0;

void Enc_Read(){
    count = 1;
    y0 = count;
}
#endif
/* %%%-SFUNWIZ_wrapper_includes_Changes_END --- EDIT HERE TO _BEGIN */
#define y_width 1

/*
 * Create external references here.  
 *
 */
/* %%%-SFUNWIZ_wrapper_externs_Changes_BEGIN --- EDIT HERE TO _END */
/* extern double func(double a); */
/* %%%-SFUNWIZ_wrapper_externs_Changes_END --- EDIT HERE TO _BEGIN */

/*
 * Output function
 *
 */
void Enc_Read_Outputs_wrapper(uint8_T *y0,
            const real_T *xD)
{
/* %%%-SFUNWIZ_wrapper_Outputs_Changes_BEGIN --- EDIT HERE TO _END */
/* このサンプルは、出力を入力と等しく設定します
 y0[0] = u0[0]; 
 複素信号の場合は、次を使用します: y0[0].re = u0[0].re; 
 y0[0].im = u0[0].im;
 y1[0].re = u1[0].re;
 y1[0].im = u1[0].im;
 */
if (xD[0]==1){
    #ifndef MATLAB_MEX_FILE
    //count = 0;
    *y0 = count;
#endif   
}
/* %%%-SFUNWIZ_wrapper_Outputs_Changes_END --- EDIT HERE TO _BEGIN */
}

/*
 * Updates function
 *
 */
void Enc_Read_Update_wrapper(uint8_T *y0,
            real_T *xD)
{
/* %%%-SFUNWIZ_wrapper_Update_Changes_BEGIN --- EDIT HERE TO _END */
/*
 * コード例
 * xD[0] = u0[0];
 */
if (xD[0]!=1){    
    #ifndef MATLAB_MEX_FILE
    attachInterrupt(digitalPinToInterrupt(2),Enc_Read,RISING);
    #endif 

  xD[0]=1;
}
/* %%%-SFUNWIZ_wrapper_Update_Changes_END --- EDIT HERE TO _BEGIN */
}

自分で試したこと

Enc_test\Enc_test_ert_rtw/Enc_test.cとエラーメッセージにあるので該当ファイルを探してみても見つかりませんでした。自動生成されるファイルだと思うのですがどうすれば生成されるのか分かりません。

0 likes

No Answers yet.

Your answer might help someone💌