2025-01-15 11:01:26 +03:00
/**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* @ dir . . / MCU_Wrapper
* @ brief < b > П а п к а с и с х о д н ы м к о д о м о б о л о ч к и М К . < / b >
* @ details
В э т о й п а п к е с о д е р ж а т ь с я о б о л о ч к а ( а н г л . wrapper ) д л я з а п у с к а и к о н т р о л я
э м у л я ц и и м и к р о к о н т р о л л е р о в в MATLAB ( л ю б о г о М К , н е т о л ь к о STM ) .
О б о л о ч к а п р е д с т а в л я е т с о б о й S - Function - б л о к в Simulink , к о т о р ы й р а б о т а е т
п о с к о м п и л и р о в а н о м у к о д у . К о м п и л я ц и я п р о и с х о д и т с п о м о щ ь ю MSVC - к о м п и л я т о р а .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* @ file mcu_wrapper_conf . h
* @ brief З а г о л о в о ч н ы й ф а й л д л я о б о л о ч к и М К .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@ details
Г л а в н ы й з а г о л о в о ч н ы й ф а й л д л я м а т л а б а . В к л ю ч а е т д е й ф а й н ы д л я S - Function ,
о б ъ я в л я е т б а з о в ы е ф у н к ц и и д л я с и м у л я ц и и М К и п о д к л ю ч а е т б а з о в ы е б и б л и о т е к и :
- д л я с и м у л я ц и и " stm32fxxx_matlab_conf.h "
- д л я S - Function " simstruc.h "
- д л я п о т о к о в < process . h >
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef _WRAPPER_CONF_H_
# define _WRAPPER_CONF_H_
// Includes
# include "simstruc.h" // For S-Function variables
# include <process.h> // For threads
# include "mcu_app_includes.h"
/**
* @ defgroup MCU_WRAPPER MCU Wrapper
* @ brief В с я к о е д л я о б о л о ч к и М К
*/
/**
* @ addtogroup WRAPPER_CONF Wrapper Configuration
* @ ingroup MCU_WRAPPER
* @ brief П а р а м е т р ы к о н ф и г у р а ц и и д л я о б о л о ч к и М К
* @ details З д е с ь д е ф а й н а м и з а д а е т с я п а р а м е т р ы о б о л о ч к и , к о т о р ы е о п р е д е л я ю т к а к о н а б у д е т р а б о т а т ь
* @ {
*/
// Parametrs of MCU simulator
//#define RUN_APP_THRREAD
# define CREATE_SUSPENDED 0x00000004 ///< define from WinBase.h. We dont wanna include "Windows.h" or smth like this, because of HAL there are a lot of redefine errors.
# define DEKSTOP_CYCLES_FOR_MCU_APP 0xFFFF ///< number of for() cycles after which MCU thread would be suspended
// Parameters of S_Function
# define NPARAMS 1 ///< number of input parametrs (only Ts)
# define IN_PORT_WIDTH 20 ///< width of input ports
# define IN_PORT_NUMB 1 ///< number of input ports
2025-01-16 16:31:32 +03:00
# define OUT_PORT_WIDTH 51 ///< width of output ports
2025-01-15 11:01:26 +03:00
# define OUT_PORT_NUMB 1 ///< number of output ports
# define DISC_STATES_WIDTH OUT_PORT_WIDTH*OUT_PORT_NUMB ///< width of discrete states array
# define RWORK_0_WIDTH 5 //width of the real-work vector
# define IWORK_0_WIDTH 5 //width of the integer-work vector
# define MCU_CORE_CLOCK 150000000
/** WRAPPER_CONF
* @ }
*/
/**
* @ addtogroup MCU_WRAPPER
* @ {
*/
typedef void * HANDLE ; ///< MCU handle typedef
/**
* @ brief MCU handle Structure definition .
* @ note Prefixes : h - handle , s - settings , f - flag
*/
typedef struct {
// MCU Thread
HANDLE hMCUThread ; ///< Хендл для потока М К
int idMCUThread ; ///< id потока М К (unused)
// Flags
unsigned fMCU_Stop : 1 ; ///< флаг для выхода из потока программы М К
2025-01-15 12:35:47 +03:00
double SimSampleTime ; ///< sample time of simulation
2025-01-15 11:01:26 +03:00
double SystemClockDouble ; ///< Счетчик в формате double для точной симуляции системных тиков С промежуточными значений
long SystemClock ; ///< Счетчик тактов для симуляции системных тиков (в целочисленном формате)
double SystemClock_step ; ///< Шаг тиков для их симуляции, в формате double
2025-01-15 12:35:47 +03:00
double SimTime ; ///< Текущее время симуляции
2025-01-15 11:01:26 +03:00
} SIM__MCUHandleTypeDef ;
extern SIM__MCUHandleTypeDef hmcu ; // extern для видимости переменной во всех файлах
//-------------------------------------------------------------//
//------------------ SIMULINK WHILE DEFINES -----------------//
/* DEFINE TO WHILE WITH SIMULINK WHILE */
/**
* @ brief Redefine C while statement with sim_while ( ) macro .
* @ param _expression_ - expression for while .
* @ details Э т о while к о т о р ы й б у д е т и с п о л ь з о в а т ь с я в с и м у л и н к е @ ref sim_while д л я п о д р о б н о с т е й .
*/
# define while(_expression_) sim_while(_expression_)
/* SIMULINK WHILE */
/**
* @ brief While statement for emulate MCU code in Simulink .
* @ param _expression_ - expression for while .
* @ details Д а н н ы й while н е о б х о д и м , ч т о б ы в к о н ц е с и м у л я ц и и , з а в е р ш и т ь п о т о к М К :
* П р и в ы с т а в л е н и и ф л а г а о к о н ч а н и я с и м у л я ц и и , в с е while б у д у т п р о п у с к а т ь с я
* и п о т о к с м о ж е т д о й т и д о к о н ц а ф у н к ц и и main и з а в е р ш и т ь с е б я .
*/
# define sim_while(_expression_) while((_expression_)&&(hmcu.fMCU_Stop == 0))
/* DEFAULT WHILE */
/**
* @ brief Default / Native C while statement .
* @ param _expression_ - expression for while .
* @ details Д а н н ы й while - а н а л о г о б ы ч н о г о while , б е з д о п о л н и т е л ь н о г о ф у н к ц и о н а л а .
*/
# define native_while(_expression_) for(; (_expression_); )
/***************************************************************/
//------------------ SIMULINK WHILE DEFINES -----------------//
//-------------------------------------------------------------//
//-------------------------------------------------------------//
//---------------- SIMULATE FUNCTIONS PROTOTYPES -------------//
/* Step simulation */
void MCU_Step_Simulation ( SimStruct * S , time_T time ) ;
/* MCU peripheral simulation */
void MCU_Periph_Simulation ( void ) ;
/* Initialize MCU simulation */
void SIM_Initialize_Simulation ( void ) ;
/* Deinitialize MCU simulation */
void SIM_deInitialize_Simulation ( void ) ;
/* Read inputs S-function */
void MCU_readInputs ( SimStruct * S ) ;
/* Write pre-outputs S-function (out_buff states) */
void MCU_writeOutputs ( SimStruct * S ) ;
/* Write outputs of block of S-Function*/
void SIM_writeOutput ( SimStruct * S ) ;
//---------------- SIMULATE FUNCTIONS PROTOTYPES -------------//
//-------------------------------------------------------------//
/** MCU_WRAPPER
* @ }
*/
# endif // _WRAPPER_CONF_H_
//-------------------------------------------------------------//
//---------------------BAT FILE DESCRIBTION--------------------//
/**
* @ file run_mex . bat
* @ brief Б а т н и к д л я к о м п и л я ц и и о б о л о ч к и М К .
* @ details
* В ы з ы в а е т с я в м а т л а б е и з mexing . m .
*
* И с х о д н ы й к о д б а т н и к а :
* @ include F : \ Work \ Projects \ MATLAB \ matlab_stm_emulate \ MCU_Wrapper \ run_mex . bat
*/