Fixing RTE Checkpoint ID feature

* Add possibility to generate the data type in RteDummy.
* Scheduling functions should include Rte_Type.h when
  generateRteCheckpintIds is true.

Change-Id: I1a3d8f6f5cfe8bc431553a9a4d32f8c57c22a77a
This commit is contained in:
Henrik Wahlqvist 2025-01-16 14:00:36 +01:00
parent 55f9545791
commit 2a7fb908c4
3 changed files with 29 additions and 3 deletions
powertrain_build
tests/powertrain_build

@ -66,10 +66,19 @@ class RteDummy(ProblemLogger):
def _get_nvm_header_dummy(self):
"""Get NVM dummy header code."""
typedefs = []
struct_defines = []
function_declarations = []
include_name = self.build_cfg.get_composition_config("softwareComponentName")
function_name = self.build_cfg.get_composition_config("compositionName")
if function_name is None:
function_name = include_name
prefix = self.build_cfg.get_scheduler_prefix()
if self.build_cfg.get_code_generation_config("generateRteCheckpointIds"):
typedefs.append(f"typedef UInt8 {function_name}FctList;")
typedefs.append("")
for memory_area in self.nvm_def._nvm_memory_areas:
nvm_name = f"{prefix}{memory_area}"
function_prefix = f"Rte_Call_{self.nvm_port_pattern.format(NvName=nvm_name)}"
@ -102,7 +111,7 @@ class RteDummy(ProblemLogger):
)
struct_defines.append(f"}} dt_{nvm_name};\n")
return "\n".join(struct_defines + function_declarations)
return "\n".join(typedefs + struct_defines + function_declarations)
def _generate_nvm_source_dummy(self):
"""Generate NVM source dummy code."""

@ -90,7 +90,13 @@ class SchedFuncs(ProblemLogger):
else:
init_call_s += f' RESTART_{unit_name}();\n'
else:
includes = f'#include "Rte_{include_name}.h"\n\n' if generate_rte_checkpoint_calls else ""
includes = ""
if generate_rte_checkpoint_calls:
includes += f'#include "Rte_{include_name}.h"\n'
if generate_rte_checkpoint_ids:
includes += '#include "Rte_Type.h"\n'
if includes:
includes += '\n'
ext_def_str = ""
ext_def_rte_str = ""
call_str = f'#include "{build_defs.CVC_CODE_START}"\n'

@ -10,6 +10,15 @@ from unittest.mock import MagicMock, patch, mock_open
from powertrain_build.rte_dummy import RteDummy
def mock_get_composition_config(key):
"""Function to mock BuildProjConfig.get_composition_config."""
return {
"nvmPortPattern": "PS_DUMMY_SwcNv_{NvName}",
"compositionName": "testName",
"softwareComponentName": "testName_SC",
}[key]
def mock_get_nvm_areas_index(memory_area):
"""Return the index of the given memory area."""
return {"NVM_LIST_8": 0, "NVM_LIST_16": 1}[memory_area]
@ -22,7 +31,8 @@ class TestRteDummy(unittest.TestCase):
"""Set-up mocks and common variables and data structures for all tests in the test case."""
self.build_cfg = MagicMock()
self.build_cfg.get_scheduler_prefix.return_value = "DUMMY_"
self.build_cfg.get_composition_config.return_value = "PS_DUMMY_SwcNv_{NvName}"
self.build_cfg.get_composition_config.side_effect = mock_get_composition_config
self.build_cfg.get_code_generation_config.return_value = True
self.nvm_def = MagicMock()
self.nvm_def._get_nvm_areas_index.side_effect = mock_get_nvm_areas_index
self.nvm_def.struct_member_prefix = "e_"
@ -78,6 +88,7 @@ class TestRteDummy(unittest.TestCase):
"#define TRUE 1U\n\n"
),
( # header content
"typedef UInt8 testNameFctList;\n\n"
"typedef struct\n"
"{\n"
" UInt8 e_dummy;\n"