Why do I get 'undefined reference to "c-method" ' error when trying to load my matlab function to arduino uno?

조회 수: 2 (최근 30일)
Hi, I have a Simulink model containing a matlab function block. In this function two methods from my .c file are called, hc595_Init and hc595_SendData. These should set the selected pins as outputs and set them to low/high. When I try to download the simulink model to my arduino Uno I get the following error:
Error(s) encountered while building "Fan": ### Failed to generate all binary outputs
In the code generation report it says:
C:\Program Files\MATLAB\R2017b\Fan_ert_rtw/Fan.c:61: undefined reference to `hc595_Init' C:\Program Files\MATLAB\R2017b\Fan_ert_rtw/Fan.c:134: undefined reference to `hc595_SendData' collect2.exe: error: ld returned 1 exit status gmake: * [../Fan.elf] Error 1 C:\Program Files\MATLAB\R2017b\Fan_ert_rtw>echo The make command returned an error of 2 The make command returned an error of 2 C:\Program Files\MATLAB\R2017b\Fan_ert_rtw>An_error_occurred_during_the_call_to_make Der Befehl "An_error_occurred_during_the_call_to_make" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Can anybody tell me why this error occurs?
Thanks!
  댓글 수: 2
Shashank
Shashank 2018년 2월 12일
Hi Tina,
Did you use the coder.ceval function to call your C function ?
Tina
Tina 2018년 2월 12일
yes I do, this is my code of the mask:
function sendToHC595(data, serPin, sckPin, rckPin, gPin)
persistent initflag;
if strcmp(coder.target, 'rtw'),
if isempty(initflag),
% initialise output pins and send data to HC595 ic
coder.ceval('hc595_Init', serPin, sckPin, rckPin, gPin);
initflag = 1;
% send data to HC595 ic
coder.ceval('hc595_SendData', data, serPin, sckPin, rckPin);
else
% send data to HC595 ic
coder.ceval('hc595_SendData', data, serPin, sckPin, rckPin);
end
end

댓글을 달려면 로그인하십시오.

채택된 답변

Shashank
Shashank 2018년 2월 13일
You need to add the your .c and .h files in the Simulation Target pane of the Configuration parameters of the model. Here is the exact procedure you need to follow:
Hope this helps.
- Shashank
  댓글 수: 2
Tina
Tina 2018년 2월 13일
Thanks for your answer... I don't have a .h file but I directly included the .c file, I think this should work, too. Do I really need a .h file? In which directory do I have to save them? In the same as my Simulink Model?
I got another error now but still don't know how to solve it:
IC:/ProgramData/MATLAB/SupportPackages/R2017b/toolbox/target/shared/externalmode_daemon/include -o Fan.o Fan.c Fan.c:24:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token ShiftRegister.c ^ Fan.c: In function 'Fan_initialize': Fan.c:201:3: error: 'ShiftRegister' undeclared (first use in this function) ShiftRegister.c ^ Fan.c:201:3: note: each undeclared identifier is reported only once for each function it appears in Fan.c:202:1: error: expected ';' before '}' token } /* Model terminate function / ^ gmake: ** [Fan.o] Error 1 C:\Program Files\MATLAB\R2017b\Fan_ert_rtw>echo The make command returned an error of 2 The make command returned an error of 2 C:\Program Files\MATLAB\R2017b\Fan_ert_rtw>An_error_occurred_during_the_call_to_make Der Befehl "An_error_occurred_during_the_call_to_make" ist entweder falsch geschrieben oder konnte nicht gefunden werden. ### Creating HTML report file Fan_codegen_rpt.html ### Build procedure for model: 'Fan' aborted due to an error. Error(s) encountered while building "Fan": ### Failed to generate all binary outputs.
It looks like MATLAB can't create a .c file to download it to my arduino...
Noam Greenboim
Noam Greenboim 2020년 10월 21일
If you generate C code from the simulink model, be sure to check "Use the same custom code settings as Simulation Target" under Code generation --> Custom code (in Configuration Parameters window).

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 I2C Devices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by