Начата работа с документацией
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
/**************************************************************************
|
||||
Ãëàâíûé çàãîëîâî÷íûé ôàéë äëÿ ìàòëàáà. Âêëþ÷àåò äåéôàéíû äëÿ S-Function,
|
||||
îáúÿâëÿåò áàçîâûå ôóíêöèè äëÿ ñèìóëÿöèè ÌÊ è ïîäêëþ÷àåò áàçîâûå áèáëèîòåêè:
|
||||
äëÿ ñèìóëÿöèè "stm32fxxx_matlab_conf.h"
|
||||
äëÿ S-Function "simstruc.h"
|
||||
äëÿ ïîòîêîâ <process.h>
|
||||
Главный заголовочный файл для матлаба. Включает дейфайны для S-Function,
|
||||
объявляет базовые функции для симуляции МК и подключает базовые библиотеки:
|
||||
для симуляции "stm32fxxx_matlab_conf.h"
|
||||
для S-Function "simstruc.h"
|
||||
для потоков <process.h>
|
||||
|
||||
**************************************************************************/
|
||||
#ifndef _CONTROLLER_H_
|
||||
@@ -15,69 +15,87 @@
|
||||
#include <process.h> // For threads
|
||||
|
||||
|
||||
// Parametrs of MCU simulator
|
||||
#define CREATE_SUSPENDED 0x00000004 // define from WinBase.h
|
||||
// We dont wanna include "Windows.h" or smth like this, because a lot of redefine errors appear.
|
||||
/**
|
||||
* @addtogroup MCU_WRAPPER
|
||||
* @brief Stuff for running MCU app in MATLAB
|
||||
*/
|
||||
|
||||
#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
|
||||
/**
|
||||
* @addtogroup WRAPPER_CONF
|
||||
* @ingroup MCU_WRAPPER
|
||||
* @brief Configurations for wrapper to simulating MCU
|
||||
* @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
|
||||
#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
|
||||
|
||||
|
||||
// Externs
|
||||
extern double SIM_Sample_Time; // sample time
|
||||
|
||||
/** MCU HANDLE STRUCTURE */
|
||||
/**
|
||||
* @brief MCU handle Structure definition.
|
||||
* @vars MCU Thread - handle for MCUThread and id of MCUThread (unused).
|
||||
* @vars Flags and counters - flags and counter that control MCU app.
|
||||
*
|
||||
/** WRAPPER_CONF
|
||||
* @}
|
||||
*/
|
||||
typedef void* HANDLE;
|
||||
typedef struct _DEL_MCUHandleTypeDef {
|
||||
|
||||
|
||||
/**
|
||||
* @ingroup 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) */
|
||||
HANDLE hMCUThread; ///< Хендл для потока МК
|
||||
uint32_t idMCUThread; ///< id потока МК (unused)
|
||||
// Flags
|
||||
unsigned MCU_Stop : 1; /* ôëàã äëÿ âûõîäà èç ïîòîêà ïðîãðàììû ÌÊ */
|
||||
unsigned fMCU_Stop : 1; ///< флаг для выхода из потока программы МК
|
||||
double SIM_Sample_Time; ///< sample time of simulation
|
||||
|
||||
}SIM__MCUHandleTypeDef;
|
||||
extern SIM__MCUHandleTypeDef hmcu; /* extern äëÿ âèäèìîñòè ïåðåìåííîé âî âñåõ ôàéëàõ */
|
||||
extern SIM__MCUHandleTypeDef hmcu; ///< extern для видимости переменной во всех файлах
|
||||
|
||||
//-------------------------------------------------------------//
|
||||
//------------------ SIMULINK WHILE DEFINES -----------------//
|
||||
/** DEFINE TO WHILE WITH SIMULINK WHILE */
|
||||
/* DEFINE TO WHILE WITH SIMULINK WHILE */
|
||||
/**
|
||||
* @brief Redefine C while statement with sim_while() macro.
|
||||
* @param _expression_ - expression for while.
|
||||
* @note @ref sim_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_) /* while êîòîðûé áóäåò èñïîëüçîâàòüñÿ â ñèìóëèíêå */
|
||||
#define while(_expression_) sim_while(_expression_)
|
||||
|
||||
/** SIMULINK WHILE */
|
||||
/* SIMULINK WHILE */
|
||||
/**
|
||||
* @brief While statement for emulate MCU code in Simulink.
|
||||
* @param _expression_ - expression for while.
|
||||
* @note Äàííûé while íåîáõîäèì, ÷òîáû â êîíöå ñèìóëÿöèè, çàâåðøèòü ïîòîê ÌÊ:
|
||||
* Ïðè âûñòàâëåíèè ôëàãà îêîí÷àíèÿ ñèìóëÿöèè, âñå 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.MCU_Stop == 0))
|
||||
|
||||
/** DEFAULT WHILE */
|
||||
/* DEFAULT WHILE */
|
||||
/**
|
||||
* @brief Default/Native C while statement.
|
||||
* @param _expression_ - expression for while.
|
||||
* @note Äàííûé while - àíàëîã îáû÷íîãî while, áåç äîïîëíèòåëüíîãî ôóíêöèîíàëà.
|
||||
* @brief Default/Native C while statement.
|
||||
* @param _expression_ - expression for while.
|
||||
* @details Данный while - аналог обычного while, без дополнительного функционала.
|
||||
*/
|
||||
#define native_while(_expression_) for(; (_expression_); )
|
||||
/***************************************************************/
|
||||
@@ -89,59 +107,30 @@ extern SIM__MCUHandleTypeDef hmcu; /* extern
|
||||
|
||||
//-------------------------------------------------------------//
|
||||
//---------------- SIMULATE FUNCTIONS PROTOTYPES -------------//
|
||||
/** SIMULATE MCU STEP */
|
||||
/**
|
||||
* @brief Read from simulink S-Block Inputs and write to MCU I/O ports.
|
||||
* @param in - inputs of S-Function.
|
||||
* @param disc - discrete array of S-Function. Outputs would be written from disc.
|
||||
* @param time - current time of simulation (in second).
|
||||
* @note Çàïóñêàåò ïîòîê, êîòîðûé âûïîëíÿåò êîä ÌÊ è óïðàâëÿåò õîäîì ïîòîêà:
|
||||
* Åñëè ïðîøåë òàéìàóò, ïîòîê ïðåðûâàåòñÿ, ñèìóëèðóåòñÿ ïåðèôåðèÿ
|
||||
* è íà ñëåäóþùåì øàãå ïîòîê âîçîáíàâëÿåòñÿ.
|
||||
*/
|
||||
void MCU_Step_Simulation(SimStruct *S, time_T time); /* step simulation */
|
||||
/* step simulation */
|
||||
void MCU_Step_Simulation(SimStruct *S, time_T time);
|
||||
|
||||
/** SIMULATE MCU PERIPHERAL */
|
||||
/**
|
||||
* @brief Simulate peripheral of MCU
|
||||
* @note Ïîëüçîâàòåëüñêèé êîä, êîòîðûé ñèìóëèðóåò ðàáîòó ïåðèôåðèè ÌÊ.
|
||||
*/
|
||||
void MCU_Periph_Simulation(void); /* MCU peripheral simulation */
|
||||
/* MCU peripheral simulation */
|
||||
void MCU_Periph_Simulation(void);
|
||||
|
||||
/** MCU WRAPPER INITIALIZATION */
|
||||
/**
|
||||
* @brief Initialize structures and variables for simulating MCU.
|
||||
* @note Ïîëüçîâàòåëüñêèé êîä, êîòîðûé áóäåò íàñòðàèâàòü âñå ñòðóêòóðû.
|
||||
*/
|
||||
void SIM_Initialize_Simulation(void); /* initialize MCU simulation */
|
||||
/** MCU WRAPPER DEINITIALIZATION */
|
||||
/**
|
||||
* @brief Deinitialize structures and variables for simulating MCU.
|
||||
* @note Ïîëüçîâàòåëüñêèé êîä, êîòîðûé áóäåò î÷èùàòü âñå ñòðóêòóðû.
|
||||
*/
|
||||
void SIM_deInitialize_Simulation(void); /* SIM_deInitialize_Simulation MCU simulation */
|
||||
/** READ INPUTS S-FUNCTION */
|
||||
/**
|
||||
* @brief Read from simulink S-Block Inputs and write to MCU I/O ports.
|
||||
* @param in - inputs of S-Function.
|
||||
* @note Ïîëüçîâàòåëüñêèé êîä, êîòîðûé çàïèñûâàåò â ïîðòû ââîäà-âûâîäà èç disc.
|
||||
*/
|
||||
/* initialize MCU simulation */
|
||||
void SIM_Initialize_Simulation(void);
|
||||
|
||||
/* deinitialize MCU simulation */
|
||||
void SIM_deInitialize_Simulation(void);
|
||||
|
||||
/* read inputs S-function */
|
||||
void MCU_readInputs(real_T* in);
|
||||
/** WRITE OUTPUTS S-FUNCTION */
|
||||
/**
|
||||
* @brief Read from MCU I/O ports and write to simulink S-Block Outputs.
|
||||
* @param disc - discrete array of S-Function. Outputs would be written from disc.
|
||||
* @note Ïîëüçîâàòåëüñêèé êîä, êîòîðûé çàïèñûâàåò â disc ïîðòû ââîäà-âûâîäà.
|
||||
*/
|
||||
|
||||
/* write outputs S-function (disc states) */
|
||||
void MCU_writeOutputs(real_T* disc);
|
||||
/** WRITE OUTPUTS OF S-BLOCK */
|
||||
/**
|
||||
* @brief Write S-Function Output ports to inputs.
|
||||
* @param disc - discrete array of S-Function. Outputs would be written from disc.
|
||||
* @note Ïîëüçîâàòåëüñêèé êîä, êîòîðûé çàïèñûâàåò âûõîäû S-Function.
|
||||
*/
|
||||
|
||||
/* write outputs of block of S-Function*/
|
||||
void SIM_writeOutput(SimStruct* S);
|
||||
//---------------- SIMULATE FUNCTIONS PROTOTYPES -------------//
|
||||
//-------------------------------------------------------------//
|
||||
|
||||
/** MCU_WRAPPER
|
||||
* @}
|
||||
*/
|
||||
#endif // _CONTROLLER_H_
|
||||
Reference in New Issue
Block a user