2020. 8. 19. 19:00ㆍ03. Resources/Matlab & Simulink
Simulink에서 C 함수 실행시키는 법 (2)
1. 목적
이전 포스팅에서는 하나의 디렉토리에 있는 하나의 헤더파일과 하나의 소스파일을 시뮬링크에 넣어서 실행시켰다.
그런데, 프로젝트의 사이즈가 더 커지는 경우, 여러 폴더에 있는 파일들을 참조해서 이용하게 된다.
이러한 부분에 대한 정리를 위해 이 문서를 작성한다!
2. 테스트용 소스파일 작성
여러 함수를 여러 폴더에 나누어 작성하였다. 총 3개의 폴더에서 3개의 함수를 참조하여 최상위 디렉토리에서 복합적인 연산을 처리한 결과를 출력으로 내준다.
작성한 함수
- add
- subtract
- multiply
작성된 함수를 참조하여 복합적인 연산을 처리하는 함수
- complexCalc
위의 함수들은 아래의 디렉터리 구조에 맞게 위치한다.
각각의 파일들은 아래와 같이 작성했다.
2.1.1 참조하는 소스파일 (./Test_1/Test_1_1.c)
#include "Test_1_1.h"
double add(double u1, double u2)
{
return u1 + u2;
}
2.1.2 참조하는 헤더파일 (./Test_1/Test_1_1.h)
#ifndef _TEST_1_1_H_
#define _TEST_1_1_H_
extern double add(double u1, double u2);
#endif
2.2.1 참조하는 소스파일 (./Test_2/Test_2_1.c)
#include "Test_2_1.h"
double subtract(double u1, double u2)
{
return u1 - u2;
}
2.2.2 참조하는 헤더파일 (./Test_2/Test_2_1.h)
#ifndef _TEST_2_1_H_
#define _TEST_2_1_H_
extern double subtract(double u1, double u2);
#endif
2.3.1 참조하는 소스파일 (./Test_3/Test_3_1.c)
#include "Test_3_1.h"
double multiply(double u1, double u2)
{
return u1 * u2;
}
2.3.2 참조하는 헤더파일 (./Test_3/Test_3_1.h)
#ifndef _TEST_3_1_H_
#define _TEST_3_1_H_
extern double multiply(double u1, double u2);
#endif
2.4.1 시뮬링크에서 실행하는 소스파일 (./Test.c)
#include "Test.h"
double complexCalc(double u1, double u2, double u3, double u4)
{
double tmp, tmp2, tmp3;
tmp = add(u1,u2);
tmp2 = subtract(tmp, u3);
tmp3 = multiply(tmp2, u4);
return tmp3;
}
2.4.2 시뮬링크에서 실행하는 헤더파일 (./Test.h)
#ifndef _TEST_H_
#define _TEST_H_
// 다른 디렉토리의 함수를 불러오는 부분
#include "./Test_1/Test_1_1.h"
#include "./Test_2/Test_2_1.h"
#include "./Test_3/Test_3_1.h"
// 매트랩에서 실행시킬 함수
extern double complexCalc(double u1, double u2, double u3, double u4);
#endif
3. Simulink 세팅
시뮬링크는 역시나 간단하게 만들었다. 함수를 불러와서 지정된 입력을 제공하여 결과를 보는 형식이다.
이전과 마찬가지로 C 함수를 불러오기 위해서 C caller 블락을 이용했다.
이전과 마찬가지로 직접 작성한 C 코드를 실행시키기 위해서 시뮬링크 설정을 바꿔줘야한다.
Simulation Target
탭에서 두 개의 체크박스를 모두 체크해주고, Headerfile
에 #include "Test.h"
를 작성해준다.
이번 작업에서는 여러 디렉토리에서 함수를 참조해야하기 때문에, 이전과는 달리 Include directories
에 값을 추가해준다.
참조할 경로를 설정해줬으니, 참조할 소스파일을 Source files
탭에 추가해준다.
위와 같이 설정한 뒤에 C Caller 블락을 새로고침 해보면 아래와 같이 extern 한 함수들을 다 확인할 수 있다.
4. 결과
complexCalc
는 4개의 값을 받아서 순서대로 더하고(add), 빼고(subtract), 곱하는(multiply) 연산을 한 뒤 결과값을 출력으로 내보내주는 함수이다.
세팅한 시뮬링크에서 입력이 5,2,3,4가 들어가기 때문에 예상되는 결과 값은 아래와 같이 16이 된다.
C Caller 블락을 거쳐서 나온 결과 값은 아래와 같다.
계산한 대로 16이 나오는 것을 볼 수 있다.
5. 결론
Include directories
에 추가 주소를 넣어주고, 함수들이 작성된 파일을 참조한다면, 규모가 큰 프로젝트라도 필요한 함수들을 불러와서 빌드하고 실행시킬 수 있음을 확인했다.
'03. Resources > Matlab & Simulink' 카테고리의 다른 글
[Simulink 개발] Moving Average Filter (이동 평균 필터) (0) | 2021.04.02 |
---|---|
[Simulink 개발] 시뮬링크 센서 축 회전변환 (0) | 2021.03.30 |
[Simulink 개발] C언어로 작성된 코드를 Simulink에서 실행시키는 방법 (1) (0) | 2020.08.19 |
[Matlab 개발] Moving Average Filter (이동 평균 필터) (0) | 2020.06.25 |