147 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**************************************************************************
 | 
						|
Ãëàâíûé çàãîëîâî÷íûé ôàéë äëÿ ìàòëàáà. Âêëþ÷àåò äåéôàéíû äëÿ 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
 | 
						|
 | 
						|
 | 
						|
// 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.
 | 
						|
 | 
						|
#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
 | 
						|
 | 
						|
 | 
						|
// 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.
 | 
						|
  * 
 | 
						|
  */
 | 
						|
typedef void* HANDLE;
 | 
						|
typedef struct _DEL_MCUHandleTypeDef {
 | 
						|
    // MCU Thread
 | 
						|
    HANDLE          hMCUThread;                 /* Õåíäë äëÿ ïîòîêà ÌÊ */
 | 
						|
    uint32_t        idMCUThread;                /* id ïîòîêà ÌÊ (unused) */
 | 
						|
    // Flags
 | 
						|
    unsigned        MCU_Stop : 1;               /* ôëàã äëÿ âûõîäà èç ïîòîêà ïðîãðàììû ÌÊ */
 | 
						|
 | 
						|
}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.
 | 
						|
  * @note   @ref sim_while äëÿ ïîäðîáíîñòåé.
 | 
						|
  */
 | 
						|
#define while(_expression_)                          sim_while(_expression_) /* while êîòîðûé áóäåò èñïîëüçîâàòüñÿ â ñèìóëèíêå */
 | 
						|
 | 
						|
/** SIMULINK WHILE */
 | 
						|
/**
 | 
						|
  * @brief  While statement for emulate MCU code in Simulink.
 | 
						|
  * @param  _expression_ - expression for while.
 | 
						|
  * @note   Äàííûé while íåîáõîäèì, ÷òîáû â êîíöå ñèìóëÿöèè, çàâåðøèòü ïîòîê ÌÊ:
 | 
						|
  *         Ïðè âûñòàâëåíèè ôëàãà îêîí÷àíèÿ ñèìóëÿöèè, âñå while áóäóò ïðîïóñêàòüñÿ 
 | 
						|
  *         è ïîòîê ñìîæåò äîéòè äî êîíöà ñâîåé ôóíêöèè è çàâåðøèòü ñåáÿ. 
 | 
						|
  */    
 | 
						|
#define sim_while(_expression_)                     while((_expression_)&&(hmcu.MCU_Stop == 0))
 | 
						|
 | 
						|
/** DEFAULT WHILE */
 | 
						|
/**
 | 
						|
  * @brief  Default/Native C while statement.
 | 
						|
  * @param  _expression_ - expression for while.
 | 
						|
  * @note   Äàííûé while - àíàëîã îáû÷íîãî while, áåç äîïîëíèòåëüíîãî ôóíêöèîíàëà.
 | 
						|
  */
 | 
						|
#define native_while(_expression_)                   for(; (_expression_); )
 | 
						|
  /***************************************************************/
 | 
						|
 | 
						|
//------------------  SIMULINK WHILE DEFINES  -----------------//
 | 
						|
//-------------------------------------------------------------//
 | 
						|
 | 
						|
 | 
						|
 | 
						|
//-------------------------------------------------------------//
 | 
						|
//---------------- 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 */
 | 
						|
 | 
						|
/** SIMULATE MCU PERIPHERAL */
 | 
						|
/**
 | 
						|
  * @brief  Simulate peripheral of MCU
 | 
						|
  * @note   Ïîëüçîâàòåëüñêèé êîä, êîòîðûé ñèìóëèðóåò ðàáîòó ïåðèôåðèè ÌÊ.
 | 
						|
  */
 | 
						|
void MCU_Periph_Simulation(void);                               /* MCU peripheral simulation */
 | 
						|
 | 
						|
/** 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.
 | 
						|
  */
 | 
						|
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 ïîðòû ââîäà-âûâîäà.
 | 
						|
  */
 | 
						|
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.
 | 
						|
  */
 | 
						|
void SIM_writeOutput(SimStruct* S);
 | 
						|
//---------------- SIMULATE FUNCTIONS PROTOTYPES  -------------//
 | 
						|
//-------------------------------------------------------------//
 | 
						|
 | 
						|
#endif // _CONTROLLER_H_
 |