foxBMS  1.2.1
The foxBMS Battery Management System API Documentation
ftask_cfg.c
Go to the documentation of this file.
1 /**
2  *
3  * @copyright © 2010 - 2021, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright notice, this
12  * list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * 3. Neither the name of the copyright holder nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  * We kindly request you to use one or more of the following phrases to refer to
34  * foxBMS in your hardware, software, documentation or advertising materials:
35  *
36  * - ″This product uses parts of foxBMS®″
37  * - ″This product includes parts of foxBMS®″
38  * - ″This product is derived from foxBMS®″
39  *
40  */
41 
42 /**
43  * @file ftask_cfg.c
44  * @author foxBMS Team
45  * @date 2019-08-26 (date of creation)
46  * @updated 2021-11-09 (date of last update)
47  * @ingroup TASK_CONFIGURATION
48  * @prefix FTSK
49  *
50  * @brief Task configuration
51  * @details
52  */
53 
54 /*========== Includes =======================================================*/
55 #include "ftask_cfg.h"
56 
57 #include "HL_gio.h"
58 #include "HL_het.h"
59 
60 #include "adc.h"
61 #include "algorithm.h"
62 #include "bal.h"
63 #include "bms.h"
64 #include "can.h"
65 #include "contactor.h"
66 #include "database.h"
67 #include "diag.h"
68 #include "dma.h"
69 #include "fram.h"
70 #include "htsensor.h"
71 #include "i2c.h"
72 #include "imd.h"
73 #include "interlock.h"
74 #include "led.h"
75 #include "meas.h"
76 #include "pex.h"
77 #include "redundancy.h"
78 #include "sbc.h"
79 #include "sof.h"
80 #include "spi.h"
81 #include "sps.h"
82 #include "state_estimation.h"
83 #include "sys.h"
84 #include "sys_mon.h"
85 
86 /*========== Macros and Definitions =========================================*/
87 
88 /** counter value for 50ms in 10ms task */
89 #define TASK_10MS_COUNTER_FOR_50MS (5u)
90 
91 /** counter value for 1s in 100ms task */
92 #define TASK_100MS_COUNTER_FOR_1S (10u)
93 
94 /*========== Static Constant and Variable Definitions =======================*/
95 
96 /*========== Extern Constant and Variable Definitions =======================*/
97 
98 /**
99  * @brief Definition of the engine task
100  * @details Task is not delayed after the scheduler starts. This task must
101  * have the highest priority.
102  * @warning Do not change the configuration of this task. This will very
103  * likely break the system.
104  */
135 
136 /*========== Static Function Prototypes =====================================*/
137 
138 /*========== Static Function Implementations ================================*/
139 
140 /*========== Extern Function Implementations ================================*/
141 extern void FTSK_InitializeUserCodeEngine(void) {
142  /* Warning: Do not change the content of this function */
143  /* See function definition doxygen comment for details */
144  STD_RETURN_TYPE_e retval = DATA_Init();
145 
146  if (retval == E_NOT_OK) {
147  /* Fatal error! */
149  }
150 
151  retval = SYSM_Init();
152 
153  if (retval == E_NOT_OK) {
154  /* Fatal error! */
156  }
157 
158  /* Warning: Do not change the content of this function */
159  /* See function definition doxygen comment for details */
160 }
161 
162 extern void FTSK_RunUserCodeEngine(void) {
163  /* Warning: Do not change the content of this function */
164  /* See function definition doxygen comment for details */
165  DATA_Task(); /* Call database manager */
166  SYSM_CheckNotifications(); /* Check notifications from tasks */
167  /* Warning: Do not change the content of this function */
168  /* See function definition doxygen comment for details */
169 }
170 
172  /* user code */
174 
175  /* Init Sys */
177 
178  /* Init FRAM */
179  FRAM_Initialize();
180 
181  /* Init port expander */
182  PEX_Initialize();
183 
184  /* Set 3rd PE pin to activate temperature/humidity sensor */
187 
188  CONT_Initialize();
189  SPS_Initialize();
190  (void)MEAS_Initialize(); /* cast to void as the return value is unused */
191 
192  /* Initialize redundancy module */
193  (void)MRC_Initialize();
194 
195  /* This function operates under the assumption that it is called when
196  * the operating system is not yet running.
197  * In this state the return value of #SYS_SetStateRequest should
198  * always be #SYS_OK. Therefore we trap otherwise.
199  */
200  FAS_ASSERT(sys_retVal == SYS_OK);
201 
202  /* System started correctly -> Start toggling of debug LED */
204 }
205 
206 extern void FTSK_RunUserCodeCyclic1ms(void) {
207  /* Increment of operating system timer */
208  /* This must not be changed, add user code only below */
211  /* user code */
212  MEAS_Control();
214 }
215 
216 extern void FTSK_RunUserCodeCyclic10ms(void) {
217  static uint8_t ftsk_cyclic10msCounter = 0;
218  /* user code */
220  BMS_Trigger();
221  ILCK_Trigger();
222  ADC_Control();
223  SPS_Ctrl();
225  SOF_Calculation();
228  PEX_Trigger();
229  HTSEN_Trigger();
230  if (ftsk_cyclic10msCounter == TASK_10MS_COUNTER_FOR_50MS) {
233  ftsk_cyclic10msCounter = 0;
234  }
235  ftsk_cyclic10msCounter++;
236 }
237 
238 extern void FTSK_RunUserCodeCyclic100ms(void) {
239  /* user code */
240  static uint8_t ftsk_cyclic100msCounter = 0;
241 
242  /** Perform SOC and SOE calculations only every 1s. Not suited if analog
243  * integration of current sensor is NOT used. Manual integration of current
244  * requires a higher frequency.
245  */
246  if (ftsk_cyclic100msCounter == TASK_100MS_COUNTER_FOR_1S) {
248  ftsk_cyclic100msCounter = 0;
249  }
250 
251  BAL_Trigger();
252  IMD_Trigger();
253  LED_Trigger();
254 
255  ftsk_cyclic100msCounter++;
256 }
257 
259  /* user code */
260  static uint8_t ftsk_cyclicAlgorithm100msCounter = 0;
261 
263 
264  ftsk_cyclicAlgorithm100msCounter++;
265 }
266 
267 extern void FTSK_RunUserCodeIdle(void) {
268  /* user code */
269 }
270 
271 /*========== Externalized Static Function Implementations (Unit Test) =======*/
void ADC_Control(void)
controls ADC measurement sequence.
Definition: adc.c:97
Headers for the driver for the ADC module.
void ALGO_MainFunction(void)
handles the call of different algorithm functions when cycle time has expired
Definition: algorithm.c:111
void ALGO_MonitorExecutionTime(void)
monitors the calculation duration of the different algorithms
Definition: algorithm.c:143
Headers for the driver for the storage in the EEPROM memory.
Header for the driver for balancing.
void BAL_Trigger(void)
trigger function for the BAL driver state machine.
void BMS_Trigger(void)
trigger function for the SYS driver state machine.
Definition: bms.c:647
bms driver header
void CAN_MainFunction(void)
Calls the functions to drive the CAN interface. Makes the CAN timing checks and sends the periodic me...
Definition: can.c:232
void CAN_ReadRxBuffer(void)
Checks the data received per CAN. A receive buffer is used because CAN frames are received in an inte...
Definition: can.c:342
Header for the driver for the CAN module.
void CONT_Initialize(void)
initializes the contactor module
Definition: contactor.c:297
Headers for the driver for the contactors.
void DATA_Task(void)
trigger of database manager
Definition: database.c:153
STD_RETURN_TYPE_e DATA_Init(void)
Initialization of database manager.
Definition: database.c:103
Database module header.
Diagnosis driver header.
void DIAG_UpdateFlags(void)
update function for diagnosis flags
Definition: diag_cfg.c:223
Headers for the driver for the DMA module.
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
Definition: fassert.h:239
#define FAS_TRAP
Define that evaluates to essential boolean false thus tripping an assert.
Definition: fassert.h:110
void FRAM_Initialize(void)
Initializes the addresses to be written in the FRAM.
Definition: fram.c:88
Header for the driver for the FRAM module.
enum STD_RETURN_TYPE STD_RETURN_TYPE_e
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic100ms
Task configuration of the cyclic 100 ms task.
Definition: ftask_cfg.c:123
void FTSK_InitializeUserCodeEngine(void)
Initializes the database.
Definition: ftask_cfg.c:141
void FTSK_RunUserCodeEngine(void)
Engine task for the database and the system monitoring module.
Definition: ftask_cfg.c:162
OS_TASK_DEFINITION_s ftsk_taskDefinitionEngine
Definition of the engine task.
Definition: ftask_cfg.c:105
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic1ms
Task configuration of the cyclic 1 ms task.
Definition: ftask_cfg.c:111
#define TASK_100MS_COUNTER_FOR_1S
Definition: ftask_cfg.c:92
void FTSK_RunUserCodeIdle(void)
Idle task.
Definition: ftask_cfg.c:267
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclicAlgorithm100ms
Task configuration of the cyclic 100 ms task for algorithms.
Definition: ftask_cfg.c:129
void FTSK_RunUserCodeCyclic100ms(void)
Cyclic 100 ms task.
Definition: ftask_cfg.c:238
void FTSK_InitializeUserCodePreCyclicTasks(void)
Initialization function before all tasks started.
Definition: ftask_cfg.c:171
void FTSK_RunUserCodeCyclic10ms(void)
Cyclic 10 ms task.
Definition: ftask_cfg.c:216
#define TASK_10MS_COUNTER_FOR_50MS
Definition: ftask_cfg.c:89
void FTSK_RunUserCodeCyclic1ms(void)
Cyclic 1 ms task.
Definition: ftask_cfg.c:206
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic10ms
Task configuration of the cyclic 10 ms task.
Definition: ftask_cfg.c:117
void FTSK_RunUserCodeCyclicAlgorithm100ms(void)
Cyclic 100 ms task for algorithms.
Definition: ftask_cfg.c:258
Task configuration header.
#define FTSK_TASK_ENGINE_STACK_SIZE
Stack size of engine task.
Definition: ftask_cfg.h:64
#define FTSK_TASK_CYCLIC_10MS_PV_PARAMETERS
pvParameters of the 10ms task
Definition: ftask_cfg.h:106
#define FTSK_TASK_CYCLIC_1MS_CYCLE_TIME
Cycle time of 1ms task.
Definition: ftask_cfg.h:85
#define FTSK_TASK_ENGINE_CYCLE_TIME
Cycle time of engine task.
Definition: ftask_cfg.h:70
#define FTSK_TASK_CYCLIC_100MS_STACK_SIZE
Stack size of cyclic 100 ms task.
Definition: ftask_cfg.h:109
#define FTSK_TASK_CYCLIC_1MS_STACK_SIZE
Stack size of cyclic 1 ms task.
Definition: ftask_cfg.h:79
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_CYCLE_TIME
Cycle time of 100ms task for algorithms.
Definition: ftask_cfg.h:130
#define FTSK_TASK_CYCLIC_100MS_PV_PARAMETERS
pvParameters of the 100ms task
Definition: ftask_cfg.h:121
#define FTSK_TASK_CYCLIC_10MS_CYCLE_TIME
Cycle time of 10 ms task.
Definition: ftask_cfg.h:100
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_STACKSIZE
Stack size of cyclic 100 ms task for algorithms.
Definition: ftask_cfg.h:124
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_PV_PARAMETERS
pvParameters of the 100ms task for algorithms
Definition: ftask_cfg.h:136
#define FTSK_TASK_ENGINE_PV_PARAMETERS
pvParameters of the engine task
Definition: ftask_cfg.h:76
#define FTSK_TASK_CYCLIC_10MS_STACK_SIZE
Stack size of cyclic 10 ms task.
Definition: ftask_cfg.h:94
#define FTSK_TASK_CYCLIC_1MS_PV_PARAMETERS
pvParameters of the 1ms task
Definition: ftask_cfg.h:91
#define FTSK_TASK_CYCLIC_100MS_CYCLE_TIME
Cycle time of 100ms task.
Definition: ftask_cfg.h:115
#define FTSK_TASK_CYCLIC_100MS_PHASE
Phase of cyclic 100 ms task.
Definition: ftask_cfg.h:112
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_PHASE
Phase of cyclic 100 ms task for algorithms.
Definition: ftask_cfg.h:127
#define FTSK_TASK_CYCLIC_1MS_PHASE
Phase of cyclic 1ms task.
Definition: ftask_cfg.h:82
#define FTSK_TASK_CYCLIC_10MS_PHASE
Phase of cyclic 10 ms task.
Definition: ftask_cfg.h:97
#define FTSK_TASK_ENGINE_PHASE
Phase of engine task.
Definition: ftask_cfg.h:67
void HTSEN_Trigger(void)
triggers a measurement of the I2C humidity/temperature sensor.
Definition: htsensor.c:223
Header for the driver for the Sensirion SHT35-DIS I2C humidity/temperature sensor.
Header for the driver for the I2C module.
API header for the insulation monitoring device.
void IMD_Trigger(void)
trigger function for the IMD driver state machine.
Definition: no-imd.c:86
void ILCK_Trigger(void)
trigger function for the ILCK driver state machine.
Definition: interlock.c:264
Headers for the driver for the interlock.
void LED_SetToggleTime(uint32_t onOffTime_ms)
Set debug LED with defined frequency.
Definition: led.c:109
void LED_Trigger(void)
Trigger function to periodically toggle debug LED. Frequency can be set via function LED_SetToggleTim...
Definition: led.c:87
Header file of the debug LED driver.
#define LED_NORMAL_OPERATION_ON_OFF_TIME_ms
Definition: led.h:72
void MEAS_Control(void)
Control function that is called from the task every 1ms.
Definition: meas.c:73
STD_RETURN_TYPE_e MEAS_Initialize(void)
Definition: meas.c:115
Headers for the driver for the measurements needed by the BMS (e.g., I,V,T).
void OS_IncrementTimer(void)
Increments the system timer os_timer.
Definition: os.c:90
@ OS_PRIORITY_HIGH
Definition: os.h:91
@ OS_PRIORITY_NORMAL
Definition: os.h:89
@ OS_PRIORITY_REAL_TIME
Definition: os.h:95
@ OS_PRIORITY_ABOVE_HIGH
Definition: os.h:92
@ OS_PRIORITY_ABOVE_NORMAL
Definition: os.h:90
void PEX_SetPin(uint8_t portExpander, uint8_t pin)
sets pin to high.
Definition: pex.c:320
void PEX_SetPinDirectionOutput(uint8_t portExpander, uint8_t pin)
sets pin to input.
Definition: pex.c:393
void PEX_Initialize(void)
initialize local variable containing state of port expander.
Definition: pex.c:279
void PEX_Trigger(void)
implements reading/writing to the port expander registers.
Definition: pex.c:301
Header for the driver for the NXP PCA9539 port expander module.
#define PEX_PIN00
Definition: pex_cfg.h:80
#define PEX_PORT_EXPANDER3
Definition: pex_cfg.h:75
STD_RETURN_TYPE_e MRC_Initialize(void)
Function to initalize redundancy module.
Definition: redundancy.c:1092
STD_RETURN_TYPE_e MRC_ValidateAfeMeasurement(void)
Function to validate the measurement between redundant measurement values for cell voltage and cell t...
Definition: redundancy.c:1117
STD_RETURN_TYPE_e MRC_ValidatePackMeasurement(void)
Function to validate the measurements of pack values (string values, pack values)
Definition: redundancy.c:1158
Header fileS for handling redundancy between redundant cell voltage and cell temperature measurements...
void SBC_Trigger(SBC_STATE_s *pInstance)
trigger function for the SYS driver state machine.
Definition: sbc.c:236
SBC_STATE_s sbc_stateMcuSupervisor
Definition: sbc.c:75
Header for the driver for the SBC module.
void SOF_Calculation(void)
triggers SOF calculation
Definition: sof.c:358
Header for SOX module, responsible for current derating calculation.
Headers for the driver for the SPI module.
void SPS_Initialize(void)
Initialize IOs for the SPS driver.
Definition: sps.c:592
void SPS_Ctrl(void)
Control function for the CONT driver state machine.
Definition: sps.c:475
Headers for the driver for the smart power switches.
void SE_StateEstimations(void)
Main function to perform state estimations.
Header for state-estimation module responsible for the estimation of state-of-charge (SOC),...
struct for FreeRTOS task definition
Definition: os.h:125
SYS_RETURN_TYPE_e SYS_SetStateRequest(SYS_STATE_REQUEST_e stateRequest)
sets the current state request of the state variable sys_state.
Definition: sys.c:550
SYS_STATE_s sys_state
Definition: sys.c:92
STD_RETURN_TYPE_e SYS_Trigger(SYS_STATE_s *pSystemState)
tick function, call this to advance the state machine
Definition: sys.c:607
Sys driver header.
@ SYS_OK
Definition: sys.h:151
@ SYS_ILLEGAL_REQUEST
Definition: sys.h:154
enum SYS_RETURN_TYPE SYS_RETURN_TYPE_e
@ SYS_STATE_INIT_REQUEST
Definition: sys.h:144
void SYSM_CheckNotifications(void)
overall system monitoring
Definition: sys_mon.c:72
STD_RETURN_TYPE_e SYSM_Init(void)
initialization function for system monitoring
Definition: sys_mon_cfg.c:117