Loading...
Searching...
No Matches
mcu_wrapper_conf.h
Go to the documentation of this file.
/**
**************************************************************************
* @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 _CONTROLLER_H_
#define _CONTROLLER_H_
// Includes
#include "stm32f4xx_matlab_conf.h" // For stm simulate functions
#include "simstruc.h" // For S-Function variables
#include <process.h> // For threads
/**
* @defgroup MCU_WRAPPER MCU Wrapper
* @brief Всякое для оболочки МК
*/
/**
* @addtogroup WRAPPER_CONF Wrapper Configuration
* @ingroup MCU_WRAPPER
* @brief Параметры конфигурации для оболочки МК
* @details Здесь дефайнами задается параметры оболочки, которые определяют как она будет работать
* @{
*/
// Parametrs of MCU simulator
#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
#define PORT_WIDTH 16 ///< width of one port
#define PORT_NUMB 3 ///< amount of ports
// Parameters of S_Function
#define NPARAMS 1 ///< number of input parametrs (only Ts)
#define IN_PORT_WIDTH (8) ///< width of input ports
#define IN_PORT_NUMB 1 ///< number of input ports
#define OUT_PORT_WIDTH PORT_WIDTH ///< width of output ports
#define OUT_PORT_NUMB PORT_NUMB ///< number of output ports
#define DISC_STATES_WIDTH PORT_WIDTH*PORT_NUMB ///< width of discrete states array
/** 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; ///< Хендл для потока МК
uint32_t idMCUThread; ///< id потока МК (unused)
// Flags
unsigned fMCU_Stop : 1; ///< флаг для выхода из потока программы МК
double SIM_Sample_Time; ///< sample time of simulation
}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 // _CONTROLLER_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
*/
MCU_readInputs
void MCU_readInputs(SimStruct *S)
Считывание входов S-Function в порты ввода-вывода.
Definition mcu_wrapper.c:88
SIM_Initialize_Simulation
void SIM_Initialize_Simulation(void)
Инициализация симуляции МК.
Definition mcu_wrapper.c:145
SIM_deInitialize_Simulation
void SIM_deInitialize_Simulation(void)
Деинициализация симуляции МК.
Definition mcu_wrapper.c:162
hmcu
SIM__MCUHandleTypeDef hmcu
Хендл для управления потоком программы МК
Definition mcu_wrapper.c:16
HANDLE
void * HANDLE
MCU handle typedef.
Definition mcu_wrapper_conf.h:71
MCU_Periph_Simulation
void MCU_Periph_Simulation(void)
Симуляция периферии МК
Definition mcu_wrapper.c:73
SIM_writeOutput
void SIM_writeOutput(SimStruct *S)
MCU_Step_Simulation
void MCU_Step_Simulation(SimStruct *S, time_T time)
Симуляция МК на один такт симуляции.
Definition mcu_wrapper.c:53
MCU_writeOutputs
void MCU_writeOutputs(SimStruct *S)
Запись портов ввода-вывода в буфер выхода S-Function.
Definition mcu_wrapper.c:102
stm32f4xx_matlab_conf.h
Заголовочный файл для конфигурации симулятора МК.
SIM__MCUHandleTypeDef
MCU handle Structure definition.
Definition mcu_wrapper_conf.h:77
SIM__MCUHandleTypeDef::idMCUThread
uint32_t idMCUThread
id потока МК (unused)
Definition mcu_wrapper_conf.h:80
SIM__MCUHandleTypeDef::SIM_Sample_Time
double SIM_Sample_Time
sample time of simulation
Definition mcu_wrapper_conf.h:83
SIM__MCUHandleTypeDef::fMCU_Stop
unsigned fMCU_Stop
флаг для выхода из потока программы МК
Definition mcu_wrapper_conf.h:82
SIM__MCUHandleTypeDef::hMCUThread
HANDLE hMCUThread
Хендл для потока МК
Definition mcu_wrapper_conf.h:79