foxBMS  1.2.1
The foxBMS Battery Management System API Documentation
main.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 main.c
44  * @author foxBMS Team
45  * @date 2019-08-27 (date of creation)
46  * @updated 2021-11-23 (date of last update)
47  * @ingroup GENERAL
48  * @prefix TODO
49  *
50  * @brief Main function
51  *
52  * @details TODO
53  */
54 
55 /*========== Includes =======================================================*/
56 #include "main.h"
57 
58 #include "HL_can.h"
59 #include "HL_etpwm.h"
60 #include "HL_gio.h"
61 #include "HL_het.h"
62 #include "HL_pinmux.h"
63 #include "HL_spi.h"
64 #include "HL_sys_core.h"
65 
66 #include "adc.h"
67 #include "checksum.h"
68 #include "diag.h"
69 #include "dma.h"
70 #include "foxmath.h"
71 #include "i2c.h"
72 #include "led.h"
73 #include "masterinfo.h"
74 #include "os.h"
75 
76 /*========== Macros and Definitions =========================================*/
77 
78 /*========== Static Constant and Variable Definitions =======================*/
79 
80 /*========== Extern Constant and Variable Definitions =======================*/
81 
82 /*========== Static Function Prototypes =====================================*/
83 
84 /*========== Static Function Implementations ================================*/
85 
86 /*========== Extern Function Implementations ================================*/
87 int main(void) {
88  MINFO_SetResetSource(getResetSource()); /* Get reset source and clear respective flags */
89  _enable_IRQ_interrupt_();
90  muxInit();
91  gioInit();
92  canInit();
93  spiInit();
94  adcInit();
95  hetInit();
96  etpwmInit();
102  const STD_RETURN_TYPE_e checkTimeHasPassedSelfTestReturnValue = OS_CheckTimeHasPassedSelfTest();
103  FAS_ASSERT(checkTimeHasPassedSelfTestReturnValue == STD_OK);
104 
106  if (OS_INIT_PRE_OS != os_boot) {
107  while (1) {
108  /* Could not create Queues, Mutexes, Events and Tasks
109  do not boot further from this point on*/
110  }
111  }
112 
113  if (STD_OK != CHK_ValidateChecksum()) {
115  while (1) {
116  /* Could not validate checksum do not boot further from this point on */
117  }
118  }
119  }
120 
122 
124  while (1) {
125  }
126 }
127 
128 /*========== Externalized Static Function Implementations (Unit Test) =======*/
Headers for the driver for the ADC module.
STD_RETURN_TYPE_e CHK_ValidateChecksum(void)
Definition: checksum.c:69
checksum module header
DIAG_RETURNTYPE_e DIAG_Handler(DIAG_ID_e diag_id, DIAG_EVENT_e event, DIAG_IMPACT_LEVEL_e impact, uint32_t data)
DIAG_Handler provides generic error handling, based on diagnosis group.
Definition: diag.c:226
STD_RETURN_TYPE_e DIAG_Initialize(DIAG_DEV_s *diag_dev_pointer)
DIAG_Init initializes all needed structures/buffers.
Definition: diag.c:111
Diagnosis driver header.
@ DIAG_HANDLER_RETURN_OK
Definition: diag.h:64
DIAG_DEV_s diag_device
Definition: diag_cfg.c:213
@ DIAG_SYSTEM
Definition: diag_cfg.h:248
@ DIAG_EVENT_NOT_OK
Definition: diag_cfg.h:236
@ DIAG_ID_FLASHCHECKSUM
Definition: diag_cfg.h:157
void DMA_Initialize(void)
Enables the DMA module.
Definition: dma.c:73
Headers for the driver for the DMA module.
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
Definition: fassert.h:239
void MATH_StartupSelfTest(void)
: self test for math functions that can be called at startup
Definition: foxmath.c:79
math library for often used math functions
@ STD_OK
Definition: fstd_types.h:81
enum STD_RETURN_TYPE STD_RETURN_TYPE_e
void I2C_Initialize(void)
Definition: i2c.c:74
Header for the driver for the I2C module.
void LED_SetDebugLED(void)
Turn debug LED on.
Definition: led.c:83
Header file of the debug LED driver.
int main(void)
main function of foxBMS
Definition: main.c:87
Main function header.
void MINFO_SetResetSource(resetSource_t resetSource)
Set reason for last reset.
Definition: masterinfo.c:78
General foxBMS-master system information.
uint32_t os_schedulerStartTime
Scheduler "zero" time for task phase control.
Definition: os.c:70
STD_RETURN_TYPE_e OS_CheckTimeHasPassedSelfTest(void)
Does a self check if the OS_CheckTimeHasPassedWithTimestamp works as expected.
Definition: os.c:144
void OS_InitializeOperatingSystem(void)
Initialization the RTOS interface.
Definition: os.c:78
volatile OS_BOOT_STATE_e os_boot
Definition: os.c:68
Declaration of the OS wrapper interface.
@ OS_INIT_PRE_OS
Definition: os.h:103
void OS_StartScheduler(void)
Starts the operating system scheduler.
Definition: os_freertos.c:71
uint32_t OS_GetTickCount(void)
Returns OS based system tick value.
Definition: os_freertos.c:129