-
[Simulink, Tip] C로 S function 작성시 input signal이 제대로 전달되지 않을때.리뷰/유용한 Tips 2012. 1. 12. 13:55
문제 요약
mdlOutput 에서 input signal 이 제대로 나오지 않을 때 or input signal 을 가리키는 pointer 를
사용시에, 값이 제대로 나오지 않는 경우가 있다.
mdlInitializeSizes 에서 문제가 없이 simstruct 에 변수값들을 제대로 저장했는데도,
simulink engine 이 mdlOutput 에서 input signal을 참조할 때 무언가 값에 오류가 있었다.
원인 분석 및 해결 방안
나의 경우는 두가지 원인이 있었다.
A. ssSetInputPortRequiredContiguous 을 호출 하지 않은점.
==> 이녀석이 없으면 input port 에 해당하는 버퍼가 virtual memory에 연속적으로 위치하지 않게된다. default setting 이 false 이므로 input signal 을 가리키는 pointer 가 있을 시에는 mdlInitializeSizes 에서 이함수를 반드시 호출해야 한다.
B. optional call back function을 사용시 MDL_XXXX 매크로를 반드시 지정해야한다.
==> Simulink Engine 이 해당 함수를 호출해야하는 여부를 결정하는 요소인것 같다. 나의 경우 mdlStart 에 dynamic memory allocation 이 있었는데, MDL_START 를 정의하지 않아서 engine 이 mdlStart 를 호출하지 않더라. document 상에서 이 함수는 simulation 시작시 반드시 한번 불린다고 나와있지만, define 이 없는 경우, 호출하지 않더라(현재 사용하는 matlab version은 2010a 임)
#define MDL_START /* Change to #undef to remove function */#if defined(MDL_START)static void mdlStart(SimStruct *S){.....}#endif
이렇게 되어 있어서 #define과 #if 를 모두 날렸더니 호출하지 않았음 -_-"