Borrar filtros
Borrar filtros

How to import C #defines into MATLAB/ Simulink

5 visualizaciones (últimos 30 días)
Christopher Hack
Christopher Hack el 8 de Jun. de 2015
Respondida: Jianning Dong el 24 de Sept. de 2018
Hi,
I am trying to use Simulink and MATLAB coder to generate C code that I will use as MCU firmware on a product. I'm running into a couple of issues doing this, however. For the actual hardware interaction, I'm using some hand-written C functions, which I'm calling by using Simulink generated S-functions (I used the S-Function builder to create them). Some of these functions were written by the MCU manufacturer and they rely on things like #defines which occur in specific header files in order to work. Those defines are used in the function calls.
What I would like to be able to do is import the #defines into MATLAB so that when the code is generated it uses them appropriately. For instance, if I want to call the function
InitTimerFor1mSTimer(HFRCO_SpeedHz, Timer[0]);
and I want the MATLAB variable Timer[0] to contain TIMER0, TIMER1, etc.
I have defined the constants in a type def, however I get errors at compile time complaining that TIMER0 is undefined. Here is the typedef I'm referring to:
classdef TimerTypeDefs
properties(Constant)
Timer0 = TIMER0;
Timer1 = TIMER1;
Timer2 = TIMER2;
Timer3 = TIMER3;
end
end
Any ideas how to achieve this? Thanks in advance for your help.
-Chris Hack

Respuestas (2)

Drew Davis
Drew Davis el 9 de Jun. de 2015
The best way to do this is to use the custom code settings in a Simulink model to add any custom macros you may want to add. For instance if you wanted to add a #define macro to the generated header file, you can add the following line of code to "Model Configuration Parameters -> Code Generation -> Custom Code -> Header file":
#define MY_MACRO
  2 comentarios
Christopher Hack
Christopher Hack el 9 de Jun. de 2015
Drew,
Thank you for your reply. Unfortunately, this doesn't solve the problem I'm having of actually including the pre-defined macro in the simulink build. When I include
#define TIMER0
In the location you provided then try to generate the code for the model, I get the error
Invalid setting in 'GenTest/Constant34' for parameter 'Value'.
Error evaluating parameter 'Value' in 'GenTest/Constant34'
Undefined function or variable 'TIMER0'.
This is essentially the same problem that I am trying to rectify, as I want to use the pre-defined macro as one of the inputs in my state charts.
Specifically, I have a function that takes the Timer type as an input to determine which timer we're referring to. I want the generated code to pass that defined constant as a parameter to the custom C function so that it works correctly. Is this something that is possible in the current context?
Christopher Hack
Christopher Hack el 9 de Jun. de 2015
To be more specific, the input to the block is TIMER0, and the S-Function should generate this code to call the custom C function:
InitTimerFor1mSTimer(HFRCO_SpeedHz, TIMER0);

Iniciar sesión para comentar.


Jianning Dong
Jianning Dong el 24 de Sept. de 2018
Is the problem solved? I run into the same problem.

Categorías

Más información sobre Simulink Coder en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by