FLEX-FORD-OBC-BM/Source/include/BrsMain.h

808 lines
52 KiB
C
Raw Permalink Normal View History

2026-03-19 11:49:16 +01:00
/**********************************************************************************************************************
* COPYRIGHT
* -------------------------------------------------------------------------------------------------------------------
* \verbatim
* Copyright (c) 2025 by Vector Informatik GmbH. All rights reserved.
*
* This software is copyright protected and proprietary to Vector Informatik GmbH.
* Vector Informatik GmbH grants to you only those rights as set out in the license conditions.
* All other rights remain with Vector Informatik GmbH.
* \endverbatim
* -------------------------------------------------------------------------------------------------------------------
* FILE DESCRIPTION
* -----------------------------------------------------------------------------------------------------------------*/
/** \file File: BrsMain.h
* Project: Vector Basic Runtime System
* Module: BrsMain
*
* \brief Description: Main header of BRS contains
* - Main function (called from StartUpCode and calls stack entry EcuM_Init())
* - Call of BrsHw HW initialization routines
* - 1ms handler, with support of cycle functions with several cycle times
* - Default_Init_Task, Main and Background Task which can be used by the operating system
*
* \attention Please note:
* The demo and example programs only show special aspects of the software. With regard to the fact
* that these programs are meant for demonstration purposes only, Vector Informatik liability shall be
* expressly excluded in cases of ordinary negligence, to the extent admissible by law or statute.
*********************************************************************************************************************/
/**********************************************************************************************************************
* REVISION HISTORY
* -------------------------------------------------------------------------------------------------------------------
* Version Date Author Change Id Description
* -------------------------------------------------------------------------------------------------------------------
* 01.00.00 2018-03-20 visbwa Initial creation of new BRS code basis
* 2018-03-27 visbwa Renamed BrsAsrStartup into BrsStartup, added version check, reworked
* includes, added example code text in BrsMainStartup.c
* 2018-05-08 visbwa Introduced support for Generic Testsuite
* (BRS_ENABLE_TESTSUITE_SUPPORT), removed support for all other
* testsuites, introduced BRS_ENABLE_1MS_HANDLER and
* brsMain_CallCounter1sec
* 2018-05-16 visbwa Added extern declaration of brsHwZeroRamAreaSet and
* brsHwInitRamAreaSet in BrsMainStartup.c
* 01.00.01 2018-06-22 visbwa Added CAN stack exclusive area workaround from former
* BswInit_Callout_Stubs.c
* 01.00.02 2018-06-25 visbwa Added configuration check for OS_MS2TICKS_SystemTimer into BrsMain.h
* 01.00.03 2018-07-02 visces Removed outdated brsHwZeroRamAreaSet and brsHwInitRamAreaSet in
* BrsMainStartup.c
* 01.00.04 2018-07-18 visbwa Moved BrsHwDisableInterruptAtPowerOn() from BrsMainInit() into main()
* (OS specifies, this has to be called before Os_Init() and for every
* Core)
* 01.00.05 2018-07-26 visbwa No changes in sourcecode, only within ALM package
* 01.00.06 2018-07-30 visbwa Encapsuled call of BrsHwDisableInterruptAtPowerOn() with
* usecase != VTT
* 01.01.00 2018-08-16 visbwa Replaced include of RamInitSections.h by vLinkGen_RamInitSections.h in
* BrsMainStartup.c to support vLinkGen
* 01.02.00 2018-10-04 visbwa No changes in sourcecode, only within ALM package
* 01.03.00 2018-10-08 visbwa Changed include of BrsCfg.h into vBrsCfg.h (vBaseEnv 1.1.0)
* 01.03.01 2018-10-10 visbwa Moved BrsTestsuiteInit() from BrsMainInit() into Default_Init_Task(),
* removed usage of BRS_ENABLE_HLPTEST_SUPPORT
* (generic Testsuite concept!)
* 01.03.02 2018-11-05 visbwa Fixed include order (Can.h previous to BrsTestsuite.h)
* 01.03.03 2018-11-13 visbwa Implemented Default_Init_Tasks for projects with up to 6 Cores,
* fixed VTT support within IdleTasks (CANoeAPI_ConsumeTicks)
* 01.04.00 2018-11-21 visbwa Added testsuite callouts into every function
* 01.04.01 2018-11-30 visbwa Removed include of Rte_Main.h (Rte_Start() not called any more)
* 01.05.00 2018-12-21 visbwa Added call of new API Os_InitialEnableInterruptSources() within every
* core Default_Init_Task
* 01.05.01 2019-03-06 visbwa Added hint for DrvCan using infix, added wrapper for Can_30_Mcan
* 01.06.00 2019-05-06 visbwa Support for vLinkGen 1.04; renamed struct names of vlinkGen areas in
* BrsMainStartup.c
* - added support for zero init blocks
* - renamed Brs_RamZeroInit() to Brs_MemoryZeroInit() and
* Brs_RomToRamInit() to Brs_MemoryInit()
* - check for missing hard reset detection
* 01.06.01 2019-05-10 visbwa Changed include of vLinkGen header to support new vLinkGen file
* structure in BrsMainStartup.c
* 01.06.02 2019-06-13 vismaa Added additional Default_Init_Task_Core6
* 01.06.03 2019-06-26 visbwa Moved call of BrsMainInit() previous to call of Os_Init()
* 01.07.00 2019-07-02 visbwa Enhanced FBL support (encapsulations, call of fblmain())
* 01.07.01 2019-07-22 visbwa Added check for VLINKGEN_ZERO_INIT_BLOCK_COUNT_HARD_RESET in
* BrsMainStartup.c
* 01.07.02 2019-07-29 visbwa Added implementation of BrsMainExceptionStartup() for calls from
* assembly StartUpCode
* 01.08.00 2019-08-08 visbwa Implemented support for different FBL usecases Legacy,
* WithoutOSScheduling and OSScheduling, added BrsMainExceptionHandler
* module code for BrsMainStartup, changed FBL call from fblmain() to
* FblMain() for legacy mode, removed include of fbl_main.h,
* added InitPattern parameter to Brs_MemoryZeroInit() and added the
* new configuration values for the init pattern to the depending calls
* in BrsMainStartup.c, added sample implementation for Hard-reset blocks
* and areas in BrsMainStartup.c
* 01.09.00 2019-08-28 visbwa Changed encapsulation of task implementations (not used for FBL
* usecases Legacy and WithoutOSScheduling any more)
* 2019-10-07 visbwa Added support of platform individual ZeroInit function
* BrsHw_AsmMemoryZeroInitLoop() in Brs_MemoryZeroInit() in
* BrsMainStartup.c
* 2019-10-09 visbwa Enhanced support for VTT platform
* 01.09.01 2019-11-04 visbwa Changed include of Can.h into CanIf.h (get rid of DrvCan with infix
* (Can_30_Mcan.h)), enhanced MemMap + SchM exclusive area abstraction
* for Mcan driver (uses infixes)
* 01.09.02 2020-11-04 visbwa No changes in sourcecode, only within ALM package
* 01.10.00 2019-11-25 visbwa Implemented Default_Init_Task_Trusted and
* Default_Init_Task_Corex_Trusted to allow the SafeContext partitioning
* UseCase
* 2019-11-27 visbwa Changed include structure for vBrsCfg.h in BrsMain.h (does now also
* exist for VTT)
* 2019-11-29 visbwa Enhanced encapsulation with _MICROSOFT_C_VTT_ for DualTarget UseCase
* (no BrsHw!)
* 2019-12-04 visbwa Fixed encapsulation of DrvCan parts
* 01.11.00 2020-02-11 visbwa Support for UseCase HSM (BRS_ENABLE_HSM_SUPPORT, no EcuM),
* added filtering of MultiCore parts through
* C_BRSASR_USECASE_SINGLECORE_COMMENT,
* support for generated DrvCan macros to support modules with infix
* names, removed error directive at usage of BrsHwGetResetReason() in
* BrsMainStartup.c
* 01.12.00 2020-03-12 visbwa Encapsulation of SchM implementation with MemMap defines for UseCase
* FBL, encapsulation of struct brsMain_Cyclic_Callbacks with MemMap and
* 1ms-handler defines
* 01.12.01 2020-04-22 visbwa Added conditional call of BrsHwDisableEccErrorReporting() for FBL
* UseCase
* 02.00.00 2020-05-29 visbwa Major updates for vBaseEnv 2.0.0
* - added BrsMainTogglePin() (moved from BrsHw.c BrsHwTogglePin())
* - introduction of BrsMain_Callout_Stubs.c
* - updated vLinkGen define and struct names to new vLinkGen 2.0 naming
* schema, added version check for vLinkGen version in BrsMainStartup.c
* 02.01.00 2020-06-29 visbwa Added support for preferred PLL and Watchdog init in BrsMainInit() and
* BrsMain_MemoryInit_StageOne_Hook(), reduced calls of BrsHw_GetCore()
* inside Brs_PreMainStartup() of BrsMainStartup.c to a single call
* 02.01.01 2020-07-24 visbwa Soft increase for FBL_Legacy support
* 02.02.00 2020-08-10 visbwa Support for FBL Legacy UseCase w/o OS, usage of new FBL UseCase
* defines;
* MemMap encapsulation of BrsMainExceptionHandler(), enabled 1ms handler
* also for FBL, BrsMainCyclic1ms() usable from extern, removed usage of
* BrsAsrApplCanInterruptLockCtr for FBL (FBL is always in polling mode),
* added BrsMain_SoftwareResetECU_Hook() in BrsMain_Callout_Stubs.c,
* encapsuled memPtr in Brs_MemoryZeroInit() of BrsMainStartup.c
* (compiler warnings)
* 02.02.01 2020-10-29 visbwa No changes in sourcecode, only within ALM package
* 02.02.02 2020-10-29 visbwa No changes in sourcecode, only within ALM package
* 02.02.03 2020-10-30 visbwa Added include of Os.h for VTT (usage of ShutdownOS()), removed
* AUTHOR IDENTITY
* 02.02.04 2020-12-07 visbwa Increased for loop variable in Brs_MemoryZeroInit() and
* Brs_MemoryInit() from uint8
* to uint32 (depending datatypes are increased in vLinkGen) in
* BrsMainStartup.c
* 02.02.05 2021-01-14 visbwa Adapted main() to also call Os_Init() for FBL with VTT
* 02.03.00 2021-03-17 visbwa Moved revision history of all .c and .h files into BrsMain.h,
* elimination of BrsMainStartup.h, added support for new OS
* UseCase INTERRUPT_ONLY and call of BrsMainExceptionHandler() at the
* end of main() for IllegalReturnFromMain
* 02.03.01 2021-03-22 visbwa Added definition of _BRSMAIN_C_ in BrsMain.c, to solve issues in
* vBrsCfg.h if DIO
* channels are used for TogglePin functionality
* 02.04.00 2021-04-07 visbwa Added implementation of BrsMainSuspendAllInterrupts() and
* BrsMainResumeAllInterrupts() for new OS UseCase INTERRUPT_ONLY
* 02.04.01 2021-04-13 visbwa Encapsulation of int main(void) declaration to not appear for VTT, as
* VTT expects void main(void)
* 02.05.00 2021-07-02 visbwa Added support for upcoming Brs_Template 1.03:
* - call of BrsHw_ExceptionTable_Init() in main()
* - introduction of BrsMain_Types.h
* - new MainExceptionHandler ErrorCode kBrsInvalidCoreConfig
* 02.05.01 2021-07-19 visbwa ESCAN00109765 Fixed VTT encapsulation in main() to solve compiler error
* 02.05.02 2021-08-02 visbwa Fixed BrsHw_ExceptionTable_Init() call in main() for FBL Ram exception
* table
* 02.05.03 2021-08-02 visbwa Fixed BRSMAIN_BUGFIX_VERSION in several files of the package
* 02.06.00 2021-08-05 visjhr HALBE-5072 In BrsMain_Types.h: Renamed StartupStackLabel -> StartupStackEndLabel,
* added StartupStackSize
* 2021-10-11 visbwa Introduction of Brs_ApplicationEntry(), BRS_FIRST_INSTANCE usage and
* MemMap concept in BrsMainStartup.c; brsMain_ResetReasonType in
* BrsMain_Types.h;
* moved BrsMainExceptionStartup() from BrsMain.c into BrsMainStartup.c
* and map it into StartupCode section; swap order of HardResetOnly and
* InitOne in BrsMainStartup.c, moved preferred PLL and Watchdog init
* from InitOne hook into HardResetOnly hook to fit with vLinkGen 2.04;
* several small adaptions to reduce compiler warnings;
* introduction of Brs_memMap.h
* 02.06.01 2021-10-20 visbwa Brs_memMap.h fix for GHS
* 02.06.02 2021-10-28 visbwa Encapsulation of _Brs_ExcVectRam_START extern declaration, for better
* VTT support
* 02.07.00 2021-11-09 visbwa Encapsulation of BrsHw_ExceptionTable_Init() in main() for FBL UseCase
* with new parameter BRS_FBL_EXCEPTIONTABLE_IN_RAM
* (vBRSFblSupportExceptionTableInRam);
* use DrvCan MemMap for mapping of BrsAsrApplCanInterruptLockCtr and
* module specific MemMap sections for exclusive area implementation in
* BrsMain.c (including CAN driver name infix wrapper, provided by vBRS
* generator in vBrsCfg.h)
* 02.07.01 2021-11-25 virjas Added missing function prototypes
* 02.07.02 2021-12-02 visbwa Added support for Arm6/TI and warning for GccGnu/Generic compiler in
* Brs_MemMap.h
* 02.08.00 2022-01-12 visbwa Changed call of BrsHw_ExceptionTable_Init() in main() for FBL UseCase
* (_Brs_ExcVectRam_START is now generated into BrsMain_CoreConfig),
* added a check for the vBrs generator version
* (BRS_GENERATED_HW_CONFIG_VERSION)
* 02.08.01 2022-02-04 visrgm Added support for Renesas compiler in Brs_MemMap.h
* 02.08.02 2022-02-18 visbwa Enhanced encapsulation of uint32 i in main() to prevent compiler
* warnings
* 02.08.03 2022-02-18 visbwa Added encapsulation to BrsMainExceptionStartup() (1st execution
* instance)
* 02.08.04 2022-03-23 visbpz Added support for Microchip compiler in Brs_MemMap.h
* 02.08.05 2022-03-23 visbpz Incrementing software version
* 02.08.06 2022-03-30 visbwa Added _BRSMAINSTARTUP_C_ to BrsMainStartup.c
* 02.08.07 2022-04-06 visjhr HALBE-6489 Added Default_Init_Task_Core0 and Default_Init_Task_Core0_Trusted
* 02.08.08 2022-05-12 visbwa Added functionality to override BRSMAIN_CYCLIC_MAX_CALLBACKS in
* BrsMain.c
* 02.09.00 2022-05-05 visbwa Added sections for mapping of exception table const/code in
* Brs_MemMap.h
* 2022-05-30 visbwa Added support for LlvmDiab/LlvmTI compiler and fixed support for
* GccGnu (to allow at least correct mapping for all brsExcVect) in
* Brs_MemMap.h
* 02.09.01 2022-05-31 visbwa Fixed LlvmDiab support in Brs_MemMap.h
* 02.09.02 2022-07-04 visbwa Removed call of BrsHwDisableEccErrorReporting() in BrsMainInit()
* (is called from FBL)
* 02.09.03 2022-07-07 visbwa Readded call of BrsHwDisableEccErrorReporting() and adapted
* encapsulation of BrsHw
* init function calls for FBL UseCases in BrsMainInit()
* 02.10.00 2022-07-14 visbwa Changes in ALM content settings only (usage type partly set to
* external)
* 02.10.01 2022-08-04 visbwa Added LlvmHightec support in Brs_MemMap.h
* 02.11.00 2022-12-07 visbwa Removed support for BrsHw packages with
* BRSHW_SOURCECODE_TEMPLATE_VERSION < 0x0103u;
* brsMain_ResetReason in Brs_PreMainStartup() only set by initCore;
* introduction of BrsMain_Appl.c, call of BrsMain_Appl_Init() from
* BrsMainInit(), moved UserDefined ExclusiveArea handling for CAN
* channels into BrsMain_Appl.c, implementation of FBL Instance Presence
* Pattern in BrsMain_Appl.c;
* support for Ansi/Gnu compiler with VTT/CANoeEmu in Brs_MemMap.h
* 2022-12-13 visdri Fixed LlvmTI compiler support in Brs_MemMap.h
* 02.11.01 2023-01-11 visbwa Fixed single core platform support in Brs_PreMainStartup() of
* BrsMainStartup.c
* 02.11.02 2023-01-11 visbwa Fixed MemMap defines for initialized variables in BrsMainTogglePin()
* 02.12.00 2023-02-16 visjhr HALBE-8511 Removed unused IdleTask{_CoreX},removed filtering ifdefs for
* C_BRSASR_USECASE_STARTAPPLICATION_COMMENT and C_BSWMODULE_ASR_*
* 2023-02-24 visbwa Introduction of BRS_MEMMAP_INLINE_ASSEMBLER_USED in Brs_MemMap.h for
* GHS compiler
* 2023-02-27 visbwa Added call to BrsHwApplicationInit() at beginning of
* Brs_ApplicationEntry() in
* BrsMainStartup.c, to support platform specific initialization per
* execution instance
* 2023-03-07 visbwa Added usage of BrsMain_Appl for UseCase VTT as well
* 02.13.00 2023-03-08 visjhr Added BRS_START/STOP_SEC_BRSAPPLENTRY_CODE for locating
* Brs_ApplicationEntry() to
* the new section "brsApplicationEntry"
* 02.13.01 2023-05-10 sgj Introduction of BRS_MEMMAP_INLINE_ASSEMBLER_USED in Brs_MemMap.h for
* DIAB compiler
* 02.13.02 2023-05-17 visbwa Fixed MemMap defines of brsMain_CallCounter1ms,
* brsMain_CallCounter1sec and brsMain_SuspendAllCounter
* 02.14.00 2023-05-17 visbwa Support of new execution instance HSM_Updater
* (BRS_ENABLE_HSM_UPDATER_SUPPORT)
* 02.14.01 2023-06-02 visbwa Added a check an valid Brs_Template version for USeCase HSM_Updater
* 02.15.00 2023-06-28 visbwa Changed implementation of BrsMainTask (from extended to basic task),
* setting of BrsCyclicAlarm_1ms moved into Default_Init_Task; small
* fixes for HSM-Updater support
* 2023-07-14 visbwa Fixed BRS_START_SEC_EXCVECTRAM_CONST in Brs_MemMap.h
* 02.15.01 2023-07-21 visjhr Added support for CCAC compiler (Brs_MemMap.h)
* 02.15.02 2023-09-13 visbwa Fixed include of CANoeApi.h, to support key sensitive environments (Linux)
* 02.16.00 2023-09-27 visbwa Support for new Can_30_Core and vCan drivers in BrsMain_Appl.c
* 02.16.01 2023-10-25 visbwa Fixed DrvCan header include encapsulation in BrsMain_Appl.c
* 02.16.02 2023-11-13 visbwa Fixed DrvCan header include encapsulation in BrsMain_Appl.c
* 02.16.03 2023-11-28 visbwa Introduction of BRSMAINAPPL_DISABLE_CAN_EXCLUSIVEAREA_HANDLING to
* disable CAN exclusive area handling in BrsMain_Appl.c
* visbwa BASEENV-10659 Added support for Can_30_Core_MemMap.h in BrsMain_Appl.c
* 02.17.00 2023-11-20 visjhr BASEENV-10133 Add support for multiple DrvCan instances in BrsMain_Appl.c
* 2023-11-21 visbwa Added "Change Id" to revision history
* 2023-12-05 visbwa BASEENV-11107 Added sample implementation of DrvCan HardwareCancelByAppl
* functionality to BrsMain_Appl.c as new default, as a replacement of
* the custom defined exclusive area handlings (still available as
* sample, but with danger notice)
* 02.17.01 2024-02-12 vissgj Fixed section pragma of brsSharedVar for DIAB (istring "" ,
* ustring "uninitialised section") in Brs_MemMap.h
* 02.17.02 2024-02-23 vissgj Added pragmas ghs start/enddata of brsSharedVar for GHS in
* Brs_MemMap.h to force variables to data area bss
* (excludes data from a special data area sda)
* Added section encapsulation of extern volatile brsMain_ResetReasonType
* brsMain_ResetReason in BrsMain.c
* 02.17.03 2024-02-29 visjhr BASEENV-11377 Changed IAR pragma used for BRS_START/STOP_SEC_FBL_PP_CONST
* (FblPresencePatternSection)
* 02.17.04 2024-03-06 visbwa BASEENV-3450 Added support for QNX QCC compiler in Brs_MemMap.h
* 02.17.05 2024-04-16 visbwa BASEENV-11813 Added BRSMAIN_POSTBRSMAININIT_CALLOUT
* BrsTestsuite_BrsMain_PostBrsMainInit()
* 02.17.06 2024-04-24 vissgj Changed alignment for brsSharedVar section for GccHightec from 8 to 4
* (else additional space is consumed)
* 02.18.00 2024-06-24 visbwa BASEENV-11442 Fixed Brs_MemoryInit() mechanism in BrsMainStartup.c, to better work
* with vLinkGenVarSectionGroupEndAlignment;
* BASEENV-11563 Enhanced Brs_MemoryZeroInit() mechanism in BrsMainStartup.c, to work
* with different ECC alignment values and implemented 8-Byte aligned
* initailization in Brs_MemoryInit(), encapsulated with
* BRSMAINSTARTUP_64BIT_MEMORYINIT;
* BASEENV-12149 Updated BrsMain_Appl.c for better FBL usage (Appl_30_CoreCanTimer*
* APIs already implemented by fbl_cw)
* 02.19.00 2024-07-08 kal BASEENV-11508 Replaced all _MICROSOFT_C_VTT_ defines with newer VVIRTUALTARGET, to
* also support VTT with GccGnu and CLANG compiler
* 02.19.01 2024-07-29 visbwa Introduced BRS_DUMMY_STATEMENT and usage in BrsMainExceptionHandler()
* 02.20.00 2024-08-06 mna BASEENV-12327 Updated main() for HypervisorMaster support
* 2024-08-19 mna BASEENV-12265 Update Brs_ApplicationEntry() for initialization of groups in new init
* stage POWER_ON
* 2024-08-21 mna BASEENV-12285 Update main() for support of non-Autosar Cores
* 02.20.01 2024-08-29 visbwa ESCAN00118129 Added workaround for vLinkGen Tasking linker issue of empty ROM blocks
* for ROM to RAM copy groups, which triggers error checks in
* Brs_MemoryInit()
* 02.20.02 2024-08-30 visbwa Fix for VTTonly in main(), as BrsMain_NonAsrCore_Hook() not available
* for VTTonly
* 02.21.00 2024-09-02 visbwa BASEENV-12323 Enhanced support for Hypervisor, introduction of BRS_DISABLE_OS_USAGE
* 2024-09-04 mna BASEENV-12291 Enhanced support for non-Autosar cores
* 2024-09-12 visbwa TAR-61084 Fixed RamConstSection for IAR compiler in Brs_MemMap.h
* 2024-09-13 visbwa Added support for new DrvCanGen3_Core@Implementation[4.00.00]
* (CAN_30_CORE_SW_MAJOR_VERSION) in BrsMain_Appl, introduction of
* BRSMAIN_CAN_30_CORE_SPECIFIC_MEMMAP
* 2024-09-17 visbwa TAR-57340 Added workaround for usage of CanGen3 HW driver with CanGen2 VTT
* driver in Dualtarget setups in BrsMain_Appl
* 02.21.01 2024-10-23 visbwa TAR-62725 Fixed vCan header include in BrsMain_Appl.h
* 02.21.02 2024-11-28 kal TAR-68820 Added prototype for local function BrsHw_AsmMemoryZeroInitLoop_64bit()
* 02.22.00 2024-11-22 mna BASEENV-12737 MemoryInit to support 64bit addressing
* 2024-12-09 visrgm BASEENV-12889 Fixed MemMap encapsulation for BrsAsrApplCanTimerCount in
* BrsMain_Appl.c
* 2024-12-11 sgj BASEENV-12534 Removed workaround for ESCAN00118129 Tasking compiler (requires
* vLinkGen >= 15)
* 2025-01-10 visbwa BASEENV-9206 Introduction of BRSMAIN_MEMINIT_FUNC_PREFIX and BrsMain_Cfg.h,
* removed include of BrsHw.h in BrsMain_Callout_Stubs.c as its redundant
* 2025-01-15 mna BASEENV-13024 Hypervisor Multicore support in BrsMain_Appl_HypervisorApi();
* Conditional presence and call of BrsHw_UnlockCores() with
* Brs_Template 1.03.13
* 2025-01-23 visbwa BASEENV-13024 Introduction of BrsMain_Appl_HypervisorStartCoreApi()
* 02.22.01 2025-02-20 visbwa Fixed ALM compiler filter rule for Brs_MemMap.h with VTT DualTarget
* environments
* 02.22.02 2025-02-21 visbwa Fixed definition of BRSMAIN_CAN_30_CORE_SPECIFIC_MEMMAP in
* BrsMain_Appl.h for newer DrvCanGen3_Core versions
* 02.23.00 2025-03-21 vismaa BASEENV-13397 Introduced BRS_DISABLE_MEMORY_INIT_GLOBALLY in Brs_ApplicationEntry()
* 02.23.01 2025-05-27 kal BASEENV-13873 Added support for ArmTfE compiler (Brs_MemMap.h)
* 02.24.00 2025-06-24 kal BASEENV-13740 Revision according to C coding guidelines and improved MISRA-C
* BASEENV-13830 compliance
* 2025-07-22 visbwa Removed outdated hint for ESCAN00078832 in Default_Init_Task()
* 02.24.01 2025-07-23 visbwa TAR-91131 Enhanced support for new Gen3 Vtt DrvCan in BrsMain_Appl.c
* 02.25.00 2025-08-29 visjhr BASEENV-14263 Introduction of BrsMain_Appl_SuspendAllInterrupts() and
* BrsMain_Appl_ResumeAllInterrupts() in BrsMain_Appl.c for changed
* functionality of vBrs generated SchM stub
* 02.26.00 2025-10-27 sgj BASEENV-14708 Added support for RiscV Tasking compiler (Brs_MemMap.h)
* 02.27.00 2025-11-20 visbwa BASEENV-14777 Added compiler check (DaVinci config to buildenvironment) in
* BrsMain_Appl.c
*********************************************************************************************************************/
#ifndef _BRSMAIN_H_
#define _BRSMAIN_H_
/**********************************************************************************************************************
* INCLUDES
*********************************************************************************************************************/
#include "Compiler.h"
#include "vBrsCfg.h"
#if !defined (VVIRTUALTARGET)
#include "BrsMain_Cfg.h"
#include "BrsMain_Types.h"
#include "BrsHw.h"
#endif
#if defined (BRS_ENABLE_FBL_SUPPORT) || defined (BRS_ENABLE_HSM_UPDATER_SUPPORT) || \
defined (BRS_ENABLE_HYPERVISOR_SUPPORT)
#define BRS_DISABLE_OS_USAGE
#else
#include "Os.h"
#endif
#if defined (BRS_ENABLE_HSM_SUPPORT) || defined (BRS_ENABLE_HSM_UPDATER_SUPPORT)
#include "vHsm.h"
#elif defined (BRS_ENABLE_HYPERVISOR_SUPPORT)
#include "vHyp.h"
#else
# if !defined (BRS_FBL_NO_ECUMINIT)
/* Ecu State Manager has to be available in system (BSW module or BRS Stub) */
#include "EcuM.h"
# endif
#endif
/**********************************************************************************************************************
* MODULE VERSION
*********************************************************************************************************************/
/*
* Description: This is the BrsMain major, minor and patch version. The version numbers are decimally encoded.
* E.g. a version of 02.23.01 is encoded with major 2u, minor 23u and patch version 1u.
* No leading zeroes shall be used, as they would be treated as octal numbers.
*/
#define BRSMAIN_MAJOR_VERSION 2u
#define BRSMAIN_MINOR_VERSION 27u
#define BRSMAIN_PATCH_VERSION 0u
#define BRSMAIN_VERSION_COMBINED ((BRSMAIN_MAJOR_VERSION) * 10000 + (BRSMAIN_MINOR_VERSION) * 100 + \
(BRSMAIN_PATCH_VERSION))
/*
* Description: This is the legacy BrsMain main and bug fix version. The version numbers are BCD encoded.
* Nothing to do here, as the version numbers will be generated by macro.
*/
#define BRSMAIN_VERSION (((BRSMAIN_MAJOR_VERSION / 10u) << 12u) | ((BRSMAIN_MAJOR_VERSION % 10u) << 8u) | \
((BRSMAIN_MINOR_VERSION / 10u) << 4u) | ((BRSMAIN_MINOR_VERSION % 10u)))
#define BRSMAIN_BUGFIX_VERSION (((BRSMAIN_PATCH_VERSION / 10u) << 4u) | (BRSMAIN_PATCH_VERSION % 10u))
/**********************************************************************************************************************
* CONFIGURATION CHECK
*********************************************************************************************************************/
/**********************************************************************************************************************
* GLOBAL TYPE DEFINITIONS
*********************************************************************************************************************/
#if defined (BRS_ENABLE_TESTSUITE_SUPPORT) || defined (BRS_ENABLE_SUPPORT_LEDS) || \
defined (BRS_ENABLE_SUPPORT_TOGGLE_WD_PIN) || defined (BRS_ENABLE_SUPPORT_TOGGLE_CUSTOM_PIN)
#define BRS_ENABLE_1MS_HANDLER
#endif
#if defined (BRS_ENABLE_1MS_HANDLER)
typedef enum
{
BRSMAIN_CYCLETIME_BACKGROUND,
BRSMAIN_CYCLETIME_1MS,
BRSMAIN_CYCLETIME_10MS,
BRSMAIN_CYCLETIME_100MS,
BRSMAIN_CYCLETIME_250MS,
BRSMAIN_CYCLETIME_500MS,
BRSMAIN_CYCLETIME_1000MS
}brsMain_Cyclic_Cycletime;
#endif
/**********************************************************************************************************************
* GLOBAL CONSTANT MACROS
*********************************************************************************************************************/
/*
* Expression that is used to determine whether the current core requires re-programming of the Exception Table.
* For application cores, Exception Table shall be re-programmed only for cores configured as AUTOSAR.
*/
#if defined (BRS_DISABLE_OS_USAGE)
#define BRS_EXCEPTIONTABLE_INIT_NEEDED(i, coreID) (BrsMain_CoreConfig[(i)].PhysicalCoreId == (coreID))
#else
#define BRS_EXCEPTIONTABLE_INIT_NEEDED(i, coreID) ((BrsMain_CoreConfig[(i)].CoreIsAsr == ASR) && \
(BrsMain_CoreConfig[(i)].PhysicalCoreId == (coreID)))
#endif
/* Expression that is used for dummy statements to avoid compile warnings about unused identifiers */
#define BRS_DUMMY_STATEMENT(x) (void)(x)
/*******************************************************************************
* ModuleCode for BrsMainExceptionHandler
******************************************************************************/
#define BRSERROR_MODULE_BRSHW 0x01u
#define BRSERROR_MODULE_BRSMAIN 0x02u
#define BRSERROR_MODULE_BRSSTARTUP 0x03u
#define BRSERROR_MODULE_BRSMAINSTARTUP 0x04u
/*******************************************************************************
* ErrorCodes for BrsMainExceptionHandler
* 0x00 to 0x7f are assigned to the BRS
* 0x80 to 0xff are assigned to the application
******************************************************************************/
/* General error which is not assigned to a special error class */
#define kBrsUndefinedError 0x00u
/* No handler is installed in interrupt vector table for given interrupt */
#define kBrsInterruptHandlerNotInstalled 0x01u
/* A GenTool setting is different to the excepted value */
#define kBrsWrongGenToolSettings 0x02u
/* BrsHwRestoreInterrupt is called more often than BrsHwDisableInterrupt */
#define kBrsIllegalInterruptRestoration 0x03u
/* Hardware configuration like clock setting is wrong */
#define kBrsIllegalHardwareConfiguration 0x04u
/* Illegal parameter used like wrong channel parameter */
#define kBrsIllegalParameter 0x05u
/* Illegal TCC channel used */
#define kBrsTccChannelOutOfRange 0x06u
/* Interrupt from unknown source occurred */
#define kBrsUnknownInterrupt 0x07u
/* CAN1 and CAN2 interrupts cannot be distinguished from each other */
#define kBrsAmbiguousInterruptSource 0x08u
/* Execution of library version check in Common_SipVersionCheck failed */
#define kBrsLibraryVersionCheckFailed 0x09u
/* OS ErrorHook called */
#define kBrsOsErrorHookCall 0x0Au
/* BRS not properly initialized */
#define kBrsConfigUninit 0x0Bu
/* Application software returned to main */
#define kBrsIllegalReturnFromMain 0x0Cu
/* Assembler code reached, which should never be handled */
#define kBrsIllegalAssemblerReached 0x0Du
/* No Core config found for actual physical core */
#define kBrsInvalidCoreConfig 0x0Eu
/* Configuration is using a functionality, that is not supported yet */
#define kBrsMissingFunctionality 0x0Fu
/* A non-Autosar-Core could not be started although it is configured */
#define kBrsFailedNonAsrCoreStart 0x10u
/**********************************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************************/
/**********************************************************************************************************************
* GLOBAL FUNCTION PROTOTYPES
*********************************************************************************************************************/
#if !defined (VVIRTUALTARGET)
#define BRS_START_SEC_STARTUP_CODE
#include "Brs_MemMap.h"
/*****************************************************************************/
/* @brief Unified routine for Pre Main() Startup.
* @pre Stack pointer needs to be initilialized in StartUpCode before.
* @param[in] -
* @param[out] -
* @return -
* @context Function is called from assembler startup code.
* Called by all cores from the booting execution instance.
* Through Brs_MemMap.h, the API is mapped into section
* brsMainStartup, which allows a fix memory allocation.
*****************************************************************************/
void Brs_PreMainStartup(void); /* implemented in BrsMainStartup.c */
#define BRS_STOP_SEC_STARTUP_CODE
#include "Brs_MemMap.h"
#define BRS_START_SEC_BRSAPPLENTRY_CODE
#include "Brs_MemMap.h"
/*****************************************************************************/
/* @brief Unified application entry for Pre Main() Startup.
* @pre Stack pointer needs to be initilialized in StartUpCode before,
* brsMain_ResetReason needs to be initialized by booting execution
* instance (see Brs_PreMainStartup()).
* @param[in] -
* @param[out] -
* @return -
* @context Function is called from Brs_PreMainStartup() of the booting
* execution instance or is the direct application entry of
* non-booting execution instances (e.g. FBL, with a previously
* running BootManager). Through Brs_MemMap.h, the API is mapped
* into section brsApplicationEntry, which allows a fix memory
* allocation. All APIs are called with current Core ID.
*****************************************************************************/
void Brs_ApplicationEntry(void); /* implemented in BrsMainStartup.c */
#define BRS_STOP_SEC_BRSAPPLENTRY_CODE
#include "Brs_MemMap.h"
# if defined (BRS_ENABLE_SUPPORT_LEDS)
void BrsMainWrapperTogglePinLED(void); /* implemented in BrsMain.c */
# endif
# if defined (BRS_ENABLE_SUPPORT_TOGGLE_WD_PIN)
void BrsMainWrapperTogglePinWD(void); /* implemented in BrsMain.c */
# endif
# if defined (BRS_ENABLE_SUPPORT_TOGGLE_CUSTOM_PIN)
void BrsMainWrapperTogglePinCustom(void); /* implemented in BrsMain.c */
# endif
#endif /* !VVIRTUALTARGET */
/*****************************************************************************/
/* @brief Main initialization routine.
* Contains configuration specific initialization of BrsHw parts
* and BrsMain specific mechanisms.
* @pre -
* @param[in] -
* @param[out] -
* @return -
* @context Function is called from main
*****************************************************************************/
void BrsMainInit(void);
#if !defined (VVIRTUALTARGET)
/*****************************************************************************/
/* @brief This API is an optional callout
* @pre -
* @param[in] coreID must declare the ID of the actual running core
* @param[out] -
* @return -
* @context Function is called from Brs_ApplicationEntry() during StartUp,
* previous to the memory initialization, stage zero.
*****************************************************************************/
void BrsMain_MemoryInit_StageZero_Hook(uint32 coreId); /* implemented in BrsMain_Callout_Stubs.c */
/*****************************************************************************/
/* @brief This API is an optional callout
* @pre -
* @param[in] coreID must declare the ID of the actual running core
* @param[out] -
* @return -
* @context Function is called from Brs_ApplicationEntry() during StartUp,
* previous to the memory initialization, stage hard reset.
*****************************************************************************/
void BrsMain_MemoryInit_StageHardReset_Hook(uint32 coreId); /* implemented in BrsMain_Callout_Stubs.c */
/*****************************************************************************/
/* @brief This API is an optional callout
* @pre -
* @param[in] coreID must declare the ID of the actual running core
* @param[out] -
* @return -
* @context Function is called from Brs_ApplicationEntry() during StartUp,
* previous to the memory initialization, stage one.
*****************************************************************************/
void BrsMain_MemoryInit_StageOne_Hook(uint32 coreId); /* implemented in BrsMain_Callout_Stubs.c */
/*****************************************************************************/
/* @brief This API is an optional callout
* @pre -
* @param[in] coreID must declare the ID of the actual running core
* @param[out] -
* @return -
* @context Function is called from Brs_ApplicationEntry() during StartUp,
* previous to the memory initialization, stage two.
*****************************************************************************/
void BrsMain_MemoryInit_StageTwo_Hook(uint32 coreId); /* implemented in BrsMain_Callout_Stubs.c */
/*****************************************************************************/
/* @brief This API is an optional callout
* @pre -
* @param[in] coreID must declare the ID of the actual running core
* @param[out] -
* @return -
* @context Function is called from Brs_ApplicationEntry() during StartUp,
* previous to the memory initialization, stage three.
*****************************************************************************/
void BrsMain_MemoryInit_StageThree_Hook(uint32 coreId); /* implemented in BrsMain_Callout_Stubs.c */
/*****************************************************************************/
/* @brief This API is an optional callout
* @pre -
* @param[in] coreID must declare the ID of the actual running core
* @param[out] -
* @return -
* @context Function is called from Brs_ApplicationEntry() during StartUp,
* previous to the memory initialization, stage Power_On.
*****************************************************************************/
void BrsMain_MemoryInit_StagePowerOn_Hook(uint32 coreId); /* implemented in BrsMain_Callout_Stubs.c */
/*****************************************************************************/
/* @brief This API is an optional callout
* @pre -
* @param[in] coreID must declare the ID of the actual running core
* @param[out] -
* @return -
* @context Function is called from Brs_ApplicationEntry() during StartUp,
* after the memory initialization was done.
*****************************************************************************/
void BrsMain_PreMainHook(uint32 coreId); /* implemented in BrsMain_Callout_Stubs.c */
/*****************************************************************************/
/* @brief This API is an optional callout
* @pre -
* @param[in] -
* @param[out] -
* @return -
* @context Function is called from BrsHwSoftwareResetECU(), before a
* SW reset is triggered. Implement code here to also reset
* peripherals, if necessary for your UseCase.
*****************************************************************************/
void BrsMain_SoftwareResetECU_Hook(void); /* implemented in BrsMain_Callout_Stubs.c */
/*****************************************************************************/
/* @brief This API is mandatory callout, if non-ASR cores are configured in OS.
* Project specific implementation for non-ASR cores should be added here.
* @pre non-ASR cores are configured in OS
* @param[in] -
* @param[out] -
* @return -
* @context Function is called from main() for non-Autosar-cores.
*****************************************************************************/
void BrsMain_NonAsrCore_Hook(void); /* implemented in BrsMain_Callout_Stubs.c */
#endif /* !VVIRTUALTARGET */
#if defined (BRS_ENABLE_1MS_HANDLER)
/*****************************************************************************/
/* @brief Routine to register cyclic callbacks.
* @pre Initialization of BrsMain was done threw call of BrsMainInit().
* @param[in] FunctionPointer has to be a pointer to a function of type
* void function(void).
* @param[in] Cycletime described the cycletime, the callback should be triggered.
* @param[out] -
* @return -
* @context Function is called from modules that need cyclic callbacks.
*****************************************************************************/
void BrsMainRegisterCyclic(void (*FunctionPointer)(void), brsMain_Cyclic_Cycletime Cycletime);
/*****************************************************************************/
/* @brief One millisecond handler for BrsMain
* - Executes retransmission of BRS TCC messages
* - Toggling of LED (alive signal)
* - BRS Test code (1s cyclic negative TCC response message)
* @pre Initialization of BrsMain was done threw call of BrsMainInit().
* @param[in] -
* @param[out] -
* @return -
* @context Function is called each millisecond either from the main loop
* or from the BRS main task (TASK(mainTask))
*****************************************************************************/
void BrsMainCyclic1ms(void);
# if !defined (BRS_DISABLE_OS_USAGE) && (!defined (BRS_ENABLE_OS_INTERRUPT_ONLY))
TASK(BrsMainTask);
TASK(BrsMainBackgroundTask);
# endif
#endif
#if !defined (BRS_DISABLE_OS_USAGE) && (!defined (BRS_ENABLE_OS_INTERRUPT_ONLY))
TASK(Default_Init_Task);
TASK(Default_Init_Task_Trusted);
#endif /* !BRS_DISABLE_OS_USAGE && !BRS_ENABLE_OS_INTERRUPT_ONLY */
#if defined (BRS_ENABLE_SUPPORT_LEDS) || \
defined (BRS_ENABLE_SUPPORT_TOGGLE_WD_PIN) || \
defined (BRS_ENABLE_SUPPORT_TOGGLE_CUSTOM_PIN)
typedef enum
{
BRSMAIN_TOGGLEPIN_LED,
BRSMAIN_TOGGLEPIN_WD,
BRSMAIN_TOGGLEPIN_CUSTOM
} brsMain_TogglePin;
# if defined (BRS_ENABLE_FBL_SUPPORT)
#define BRS_START_SEC_RAM_CODE
#include "Brs_MemMap.h"
# endif
/*****************************************************************************/
/* @brief This API is used to toggle a PortPin.
* Per default, the following parameters are available:
* BRSMAIN_TOGGLEPIN_LED
* BRSMAIN_TOGGLEPIN_WD
* BRSMAIN_TOGGLEPIN_CUSTOM
* Depending pins must be configured and initialized within BrsHw.
* @pre -
* @param[in] Pin to be toggled
* @param[out] -
* @return -
* @context Function is called from all modules to set or clear a PortPin
*****************************************************************************/
void BrsMainTogglePin(brsMain_TogglePin Pin);
# if defined (BRS_ENABLE_FBL_SUPPORT)
#define BRS_STOP_SEC_RAM_CODE
#include "Brs_MemMap.h"
# endif
#endif /* BRS_ENABLE_SUPPORT_LEDS || BRS_ENABLE_SUPPORT_TOGGLE_WD_PIN || BRS_ENABLE_SUPPORT_TOGGLE_CUSTOM_PIN */
#if defined (BRS_ENABLE_FBL_SUPPORT) || defined (BRS_ENABLE_HSM_UPDATER_SUPPORT)
#define BRS_START_SEC_RAM_CODE
#include "Brs_MemMap.h"
#endif
void BrsMainExceptionHandler(uint8 ErrorCode, uint8 ModuleCode, uint16 LineNumber);
#if defined (BRS_ENABLE_FBL_SUPPORT) || defined (BRS_ENABLE_HSM_UPDATER_SUPPORT)
#define BRS_STOP_SEC_RAM_CODE
#include "Brs_MemMap.h"
#endif
#if !defined (VVIRTUALTARGET)
# if defined (BRS_FIRST_EXECUTION_INSTANCE)
/* This code is only needed for the first instance in the system */
#define BRS_START_SEC_STARTUP_CODE
#include "Brs_MemMap.h"
/*****************************************************************************/
/* @brief This is the central exeption/issue handler of BRS, in startup
* phase.
* @pre -
* @param[in] -
* @param[out] -
* @return -
* @context This function implements an endless loop. The recommendation is
* to set a breakpoint on top of this function to see if any check
* has failed during the startup code execution.
*****************************************************************************/
void BrsMainExceptionStartup(void);
#define BRS_STOP_SEC_STARTUP_CODE
#include "Brs_MemMap.h"
# endif /* BRS_FIRST_EXECUTION_INSTANCE */
/*****************************************************************************/
/* @brief Get reset reason
* @pre BrsHwGetResetReasonStartup() is called first and the rest reason
* is saved in global variable brsMain_ResetReason.
* @param[in] -
* @param[out] -
* @return Reset reason
* @context This is a wrapper function for previous BrsHwGetResetReason().
* This is to prevent multiple selection of reset reason
* registers, as this is not supported on all platforms.
* The HW registers for the reset reason are evaluated via a call
* of BrsHwGetResetReasonStartup() in Brs_PreMainStartup().
* The result is stored by BrsMainStartup in the global variable
* brsMain_ResetReason.
*****************************************************************************/
brsMain_ResetReasonType BrsMainGetResetReason(void);
int main(void);
#endif /* !VVIRTUALTARGET */
#if defined (BRS_ENABLE_OS_INTERRUPT_ONLY)
void BrsMainSuspendAllInterrupts(void);
void BrsMainResumeAllInterrupts(void);
#endif
#endif /* _BRSMAIN_H_ */