{"app":"Zonal gateway ECU","soc":"NXP S32G3","cpu":"4× Cortex-A53","sink":"ETR, circular","session":"01_ZonalGateway_ETR_SCT_QuadA53","status":"2,695 packets, 1,552 elements, 6,650 instructions in 0.16 s","health":{"decode":"OpenCSD 1.8.3. Framing: ETB / ETR / ETF buffer (16-byte aligned frames). 8,192 / 8,192 bytes decoded in 0.16 s. 2,695 packets, 1,552 elements.","fill":"Buffer: 8,176 bytes of trace out of 8,192 (99.8 % used, 16 bytes never written).","demux":"6,873 bytes to decoded IDs, 0 to IDs without decoder, 3 before first ID, 20 reserved IDs (all-zero frames: the part of the buffer the trace never wrote), 1,296 framing overhead.","advice":[],"log":[]},"profile_info":"26 functions executed, 34.1 % of their code covered","calls_info":{"gaps":0,"incomplete":5,"unexplained":0},"buffer":{"bytes":8192,"fill":0.998},"decoded_instructions":6650,"cores":[{"id":1,"role":"CAN gateway","bad":0,"name":"A53_0","protocol":"etmv4","core":"Cortex-A53","bytes":1556,"unsynced_bytes":37,"ranges":275,"instructions":1417,"exceptions":0,"no_sync":1,"overflows":0,"nacc":0,"mismatch":0,"has_cc":false,"has_ts":true},{"id":2,"role":"Sensor fusion","bad":0,"name":"A53_1","protocol":"etmv4","core":"Cortex-A53","bytes":1684,"unsynced_bytes":32,"ranges":221,"instructions":1450,"exceptions":0,"no_sync":1,"overflows":0,"nacc":0,"mismatch":0,"has_cc":false,"has_ts":true},{"id":3,"role":"Motor control","bad":0,"name":"A53_2","protocol":"etmv4","core":"Cortex-A53","bytes":1514,"unsynced_bytes":25,"ranges":202,"instructions":2116,"exceptions":0,"no_sync":1,"overflows":0,"nacc":0,"mismatch":0,"has_cc":false,"has_ts":true},{"id":4,"role":"Safety monitor","bad":0,"name":"A53_3","protocol":"etmv4","core":"Cortex-A53","bytes":2119,"unsynced_bytes":48,"ranges":528,"instructions":1667,"exceptions":0,"no_sync":1,"overflows":0,"nacc":0,"mismatch":0,"has_cc":false,"has_ts":true}],"profile":[{"name":"SafetyMonitor_MainFunction","addr":"0x3400210c","size":116,"instr":1438,"pct":21.62,"entries":10,"coverage":0.655},{"name":"Pwm_SetDuty","addr":"0x34001ebc","size":168,"instr":700,"pct":10.53,"entries":10,"coverage":1.0},{"name":"MotorCtrl_MainFunction","addr":"0x34001f64","size":256,"instr":590,"pct":8.87,"entries":11,"coverage":0.844},{"name":"Pi_Update","addr":"0x34001e68","size":84,"instr":441,"pct":6.63,"entries":21,"coverage":1.0},{"name":"SensorFusion_MainFunction","addr":"0x34001d90","size":84,"instr":430,"pct":6.47,"entries":20,"coverage":1.0},{"name":"Imu_ReadGyroZ","addr":"0x34001cec","size":72,"instr":360,"pct":5.41,"entries":20,"coverage":1.0},{"name":"Kalman_Update","addr":"0x34001d48","size":72,"instr":360,"pct":5.41,"entries":20,"coverage":1.0},{"name":"Lfsr_Next","addr":"0x34001820","size":32,"instr":352,"pct":5.29,"entries":44,"coverage":1.0},{"name":"BusSim_ReceiveFrame","addr":"0x340018c4","size":284,"instr":333,"pct":5.01,"entries":4,"coverage":1.0},{"name":"CanIf_Transmit","addr":"0x34001b88","size":96,"instr":217,"pct":3.26,"entries":3,"coverage":1.0},{"name":"Foc_ParkTransform","addr":"0x34001e20","size":72,"instr":198,"pct":2.98,"entries":11,"coverage":1.0},{"name":"Crc_CalculateCRC8","addr":"0x34001890","size":52,"instr":172,"pct":2.59,"entries":4,"coverage":1.0},{"name":"Adc_ReadPhaseCurrents","addr":"0x34001de4","size":60,"instr":165,"pct":2.48,"entries":11,"coverage":1.0},{"name":"CanGw_LookupRoute","addr":"0x34001a7c","size":52,"instr":158,"pct":2.38,"entries":4,"coverage":0.923},{"name":"CanGw_RouteFrame","addr":"0x34001be8","size":212,"instr":150,"pct":2.26,"entries":4,"coverage":0.849},{"name":"Mon_CheckYawPlausibility","addr":"0x340020c8","size":48,"instr":120,"pct":1.8,"entries":10,"coverage":1.0},{"name":"main","addr":"0x34002300","size":436,"instr":114,"pct":1.71,"entries":0,"coverage":0.138},{"name":"Kalman_Predict","addr":"0x34001d34","size":20,"instr":100,"pct":1.5,"entries":20,"coverage":1.0},{"name":"E2E_P01Check","addr":"0x34001ab0","size":148,"instr":55,"pct":0.83,"entries":2,"coverage":0.865},{"name":"CanGw_MainFunction","addr":"0x34001cbc","size":48,"instr":54,"pct":0.81,"entries":4,"coverage":1.0},{"name":"Wdg_Trigger","addr":"0x340020f8","size":20,"instr":50,"pct":0.75,"entries":10,"coverage":1.0},{"name":"Wdg_CheckAliveSupervision","addr":"0x34002064","size":100,"instr":39,"pct":0.59,"entries":1,"coverage":1.0},{"name":"Com_UpdateVehicleSignals","addr":"0x34001b44","size":68,"instr":21,"pct":0.32,"entries":3,"coverage":0.647},{"name":"Dem_ReportErrorStatus","addr":"0x340019e0","size":156,"instr":19,"pct":0.29,"entries":1,"coverage":0.487},{"name":"ChipTrace_Close","addr":"0x34004ae0","size":3624,"instr":9,"pct":0.14,"entries":1,"coverage":0.01},{"name":"ChipTrace_ETM_Disable","addr":"0x34002500","size":56,"instr":5,"pct":0.08,"entries":1,"coverage":0.357}],"profile_by_core":{"1":[{"name":"BusSim_ReceiveFrame","addr":"0x340018c4","size":284,"instr":333,"pct":23.5,"entries":4,"coverage":1.0},{"name":"CanIf_Transmit","addr":"0x34001b88","size":96,"instr":217,"pct":15.31,"entries":3,"coverage":1.0},{"name":"Lfsr_Next","addr":"0x34001820","size":32,"instr":192,"pct":13.55,"entries":24,"coverage":1.0},{"name":"Crc_CalculateCRC8","addr":"0x34001890","size":52,"instr":172,"pct":12.14,"entries":4,"coverage":1.0},{"name":"CanGw_LookupRoute","addr":"0x34001a7c","size":52,"instr":158,"pct":11.15,"entries":4,"coverage":0.923},{"name":"CanGw_RouteFrame","addr":"0x34001be8","size":212,"instr":150,"pct":10.59,"entries":4,"coverage":0.849},{"name":"E2E_P01Check","addr":"0x34001ab0","size":148,"instr":55,"pct":3.88,"entries":2,"coverage":0.865},{"name":"CanGw_MainFunction","addr":"0x34001cbc","size":48,"instr":54,"pct":3.81,"entries":4,"coverage":1.0},{"name":"main","addr":"0x34002300","size":436,"instr":32,"pct":2.26,"entries":0,"coverage":0.138},{"name":"Com_UpdateVehicleSignals","addr":"0x34001b44","size":68,"instr":21,"pct":1.48,"entries":3,"coverage":0.647},{"name":"Dem_ReportErrorStatus","addr":"0x340019e0","size":156,"instr":19,"pct":1.34,"entries":1,"coverage":0.487},{"name":"ChipTrace_Close","addr":"0x34004ae0","size":3624,"instr":9,"pct":0.64,"entries":1,"coverage":0.01},{"name":"ChipTrace_ETM_Disable","addr":"0x34002500","size":56,"instr":5,"pct":0.35,"entries":1,"coverage":0.357}],"2":[{"name":"SensorFusion_MainFunction","addr":"0x34001d90","size":84,"instr":430,"pct":29.66,"entries":20,"coverage":1.0},{"name":"Imu_ReadGyroZ","addr":"0x34001cec","size":72,"instr":360,"pct":24.83,"entries":20,"coverage":1.0},{"name":"Kalman_Update","addr":"0x34001d48","size":72,"instr":360,"pct":24.83,"entries":20,"coverage":1.0},{"name":"Lfsr_Next","addr":"0x34001820","size":32,"instr":160,"pct":11.03,"entries":20,"coverage":1.0},{"name":"Kalman_Predict","addr":"0x34001d34","size":20,"instr":100,"pct":6.9,"entries":20,"coverage":1.0},{"name":"main","addr":"0x34002300","size":436,"instr":40,"pct":2.76,"entries":0,"coverage":0.138}],"3":[{"name":"Pwm_SetDuty","addr":"0x34001ebc","size":168,"instr":700,"pct":33.08,"entries":10,"coverage":1.0},{"name":"MotorCtrl_MainFunction","addr":"0x34001f64","size":256,"instr":590,"pct":27.88,"entries":11,"coverage":0.844},{"name":"Pi_Update","addr":"0x34001e68","size":84,"instr":441,"pct":20.84,"entries":21,"coverage":1.0},{"name":"Foc_ParkTransform","addr":"0x34001e20","size":72,"instr":198,"pct":9.36,"entries":11,"coverage":1.0},{"name":"Adc_ReadPhaseCurrents","addr":"0x34001de4","size":60,"instr":165,"pct":7.8,"entries":11,"coverage":1.0},{"name":"main","addr":"0x34002300","size":436,"instr":22,"pct":1.04,"entries":0,"coverage":0.138}],"4":[{"name":"SafetyMonitor_MainFunction","addr":"0x3400210c","size":116,"instr":1438,"pct":86.26,"entries":10,"coverage":0.655},{"name":"Mon_CheckYawPlausibility","addr":"0x340020c8","size":48,"instr":120,"pct":7.2,"entries":10,"coverage":1.0},{"name":"Wdg_Trigger","addr":"0x340020f8","size":20,"instr":50,"pct":3.0,"entries":10,"coverage":1.0},{"name":"Wdg_CheckAliveSupervision","addr":"0x34002064","size":100,"instr":39,"pct":2.34,"entries":1,"coverage":1.0},{"name":"main","addr":"0x34002300","size":436,"instr":20,"pct":1.2,"entries":0,"coverage":0.138}]},"calls":{"1":{"total":1417,"children":[{"name":"main","calls":0,"jumps":0,"complete":0,"total":1363,"own":32,"min":null,"max":null,"children":[{"name":"CanGw_MainFunction","calls":4,"jumps":0,"complete":4,"total":1317,"own":48,"min":298,"max":387,"children":[{"name":"CanGw_RouteFrame","calls":4,"jumps":0,"complete":4,"total":658,"own":142,"min":128,"max":193,"children":[{"name":"CanIf_Transmit","calls":3,"jumps":0,"complete":3,"total":177,"own":177,"min":59,"max":59,"children":[]},{"name":"E2E_P01Check","calls":2,"jumps":0,"complete":2,"total":160,"own":55,"min":70,"max":90,"children":[{"name":"Crc_CalculateCRC8","calls":2,"jumps":0,"complete":2,"total":86,"own":86,"min":43,"max":43,"children":[]},{"name":"Dem_ReportErrorStatus","calls":1,"jumps":0,"complete":1,"total":19,"own":19,"min":19,"max":19,"children":[]}]},{"name":"CanGw_LookupRoute","calls":4,"jumps":0,"complete":4,"total":158,"own":158,"min":8,"max":71,"children":[]},{"name":"Com_UpdateVehicleSignals","calls":3,"jumps":0,"complete":3,"total":21,"own":21,"min":6,"max":9,"children":[]}]},{"name":"BusSim_ReceiveFrame","calls":4,"jumps":0,"complete":4,"total":611,"own":333,"min":121,"max":187,"children":[{"name":"Lfsr_Next","calls":24,"jumps":0,"complete":24,"total":192,"own":192,"min":8,"max":8,"children":[]},{"name":"Crc_CalculateCRC8","calls":2,"jumps":0,"complete":2,"total":86,"own":86,"min":43,"max":43,"children":[]}]}]},{"name":"ChipTrace_Close","calls":1,"jumps":0,"complete":0,"total":14,"own":9,"min":null,"max":null,"children":[{"name":"ChipTrace_ETM_Disable","calls":1,"jumps":0,"complete":0,"total":5,"own":5,"min":null,"max":null,"children":[]}]}]},{"name":"CanIf_Transmit","calls":0,"jumps":0,"complete":0,"total":40,"own":40,"min":null,"max":null,"children":[]},{"name":"CanGw_RouteFrame","calls":0,"jumps":0,"complete":0,"total":8,"own":8,"min":null,"max":null,"children":[]},{"name":"CanGw_MainFunction","calls":0,"jumps":0,"complete":0,"total":6,"own":6,"min":null,"max":null,"children":[]}]},"2":{"total":1450,"children":[{"name":"main","calls":0,"jumps":0,"complete":0,"total":1440,"own":40,"min":null,"max":null,"children":[{"name":"SensorFusion_MainFunction","calls":20,"jumps":0,"complete":19,"total":1400,"own":420,"min":70,"max":70,"children":[{"name":"Imu_ReadGyroZ","calls":20,"jumps":0,"complete":20,"total":520,"own":360,"min":26,"max":26,"children":[{"name":"Lfsr_Next","calls":20,"jumps":0,"complete":20,"total":160,"own":160,"min":8,"max":8,"children":[]}]},{"name":"Kalman_Update","calls":20,"jumps":0,"complete":20,"total":360,"own":360,"min":18,"max":18,"children":[]},{"name":"Kalman_Predict","calls":20,"jumps":0,"complete":20,"total":100,"own":100,"min":5,"max":5,"children":[]}]}]},{"name":"SensorFusion_MainFunction","calls":0,"jumps":0,"complete":0,"total":10,"own":10,"min":null,"max":null,"children":[]}]},"3":{"total":2116,"children":[{"name":"main","calls":0,"jumps":0,"complete":0,"total":2105,"own":22,"min":null,"max":null,"children":[{"name":"MotorCtrl_MainFunction","calls":11,"jumps":0,"complete":10,"total":2083,"own":579,"min":199,"max":199,"children":[{"name":"Pwm_SetDuty","calls":10,"jumps":0,"complete":10,"total":700,"own":700,"min":70,"max":70,"children":[]},{"name":"Pi_Update","calls":21,"jumps":0,"complete":21,"total":441,"own":441,"min":21,"max":21,"children":[]},{"name":"Foc_ParkTransform","calls":11,"jumps":0,"complete":11,"total":198,"own":198,"min":18,"max":18,"children":[]},{"name":"Adc_ReadPhaseCurrents","calls":11,"jumps":0,"complete":11,"total":165,"own":165,"min":15,"max":15,"children":[]}]}]},{"name":"MotorCtrl_MainFunction","calls":0,"jumps":0,"complete":0,"total":11,"own":11,"min":null,"max":null,"children":[]}]},"4":{"total":1667,"children":[{"name":"main","calls":0,"jumps":0,"complete":0,"total":1525,"own":20,"min":null,"max":null,"children":[{"name":"SafetyMonitor_MainFunction","calls":10,"jumps":0,"complete":9,"total":1505,"own":1313,"min":151,"max":192,"children":[{"name":"Mon_CheckYawPlausibility","calls":9,"jumps":0,"complete":9,"total":108,"own":108,"min":12,"max":12,"children":[]},{"name":"Wdg_Trigger","calls":9,"jumps":0,"complete":9,"total":45,"own":45,"min":5,"max":5,"children":[]},{"name":"Wdg_CheckAliveSupervision","calls":1,"jumps":0,"complete":1,"total":39,"own":39,"min":39,"max":39,"children":[]}]}]},{"name":"SafetyMonitor_MainFunction","calls":0,"jumps":0,"complete":0,"total":142,"own":125,"min":null,"max":null,"children":[{"name":"Mon_CheckYawPlausibility","calls":1,"jumps":0,"complete":1,"total":12,"own":12,"min":12,"max":12,"children":[]},{"name":"Wdg_Trigger","calls":1,"jumps":0,"complete":1,"total":5,"own":5,"min":5,"max":5,"children":[]}]}]}},"timeline":{"span_us":21551.398,"cores":{"1":[{"fn":"CanGw_MainFunction","lvl":1,"t":828.378,"d":4046.422,"n":298},{"fn":"BusSim_ReceiveFrame","lvl":2,"t":883.431,"d":1792.614,"n":121},{"fn":"CanGw_RouteFrame","lvl":2,"t":2706.602,"d":2086.646,"n":165},{"fn":"CanGw_MainFunction","lvl":1,"t":4956.353,"d":4149.621,"n":305},{"fn":"BusSim_ReceiveFrame","lvl":2,"t":5010.721,"d":1796.007,"n":121},{"fn":"CanGw_RouteFrame","lvl":2,"t":6837.516,"d":2189.815,"n":172},{"fn":"CanGw_MainFunction","lvl":1,"t":9184.617,"d":4826.291,"n":327},{"fn":"BusSim_ReceiveFrame","lvl":2,"t":9237.046,"d":2525.803,"n":187},{"fn":"CanGw_RouteFrame","lvl":2,"t":11797.178,"d":2129.25,"n":128},{"fn":"CanGw_MainFunction","lvl":1,"t":14095.388,"d":5761.725,"n":387},{"fn":"BusSim_ReceiveFrame","lvl":2,"t":14151.708,"d":2556.508,"n":182},{"fn":"CanGw_RouteFrame","lvl":2,"t":16740.286,"d":2998.955,"n":193}],"2":[{"fn":"SensorFusion_MainFunction","lvl":1,"t":79.599,"d":1143.631,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":193.962,"d":81.688,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":291.988,"d":424.777,"n":26},{"fn":"Kalman_Update","lvl":2,"t":765.778,"d":294.076,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":1255.905,"d":1040.094,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":1370.268,"d":73.471,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":1458.433,"d":382.048,"n":26},{"fn":"Kalman_Update","lvl":2,"t":1884.563,"d":264.495,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":2325.387,"d":1046.081,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":2428.246,"d":73.471,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":2516.411,"d":384.477,"n":26},{"fn":"Kalman_Update","lvl":2,"t":2946.428,"d":273.24,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":3401.828,"d":1059.294,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":3508.088,"d":75.9,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":3599.168,"d":394.68,"n":26},{"fn":"Kalman_Update","lvl":2,"t":4039.388,"d":271.115,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":4491.246,"d":1054.336,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":4596.68,"d":75.31,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":4687.052,"d":391.61,"n":26},{"fn":"Kalman_Update","lvl":2,"t":5123.848,"d":271.115,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":5575.706,"d":998.859,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":5675.592,"d":71.347,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":5761.208,"d":371.005,"n":26},{"fn":"Kalman_Update","lvl":2,"t":6175.021,"d":256.849,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":6603.104,"d":1003.965,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":6702.989,"d":71.347,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":6788.606,"d":372.513,"n":26},{"fn":"Kalman_Update","lvl":2,"t":7204.276,"d":258.938,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":7635.839,"d":1028.647,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":7736.537,"d":71.927,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":7822.85,"d":374.022,"n":26},{"fn":"Kalman_Update","lvl":2,"t":8240.028,"d":272.866,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":8694.805,"d":1061.145,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":8800.919,"d":75.796,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":8891.875,"d":394.14,"n":26},{"fn":"Kalman_Update","lvl":2,"t":9331.492,"d":272.866,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":9786.268,"d":1020.386,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":9888.307,"d":72.885,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":9975.768,"d":379.0,"n":26},{"fn":"Kalman_Update","lvl":2,"t":10398.5,"d":262.385,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":10835.808,"d":996.033,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":10937.847,"d":72.885,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":11025.308,"d":367.892,"n":26},{"fn":"Kalman_Update","lvl":2,"t":11435.65,"d":254.695,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":11860.141,"d":955.873,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":11959.189,"d":70.749,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":12044.087,"d":367.892,"n":26},{"fn":"Kalman_Update","lvl":2,"t":12454.428,"d":232.447,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":12841.841,"d":930.559,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":12932.237,"d":64.569,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":13009.72,"d":335.758,"n":26},{"fn":"Kalman_Update","lvl":2,"t":13384.218,"d":232.448,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":13803.546,"d":1090.135,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":13912.56,"d":77.867,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":14006.0,"d":404.907,"n":26},{"fn":"Kalman_Update","lvl":2,"t":14457.627,"d":280.32,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":14924.828,"d":1031.905,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":15033.841,"d":77.867,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":15126.278,"d":378.804,"n":26},{"fn":"Kalman_Update","lvl":2,"t":15548.79,"d":262.249,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":15985.871,"d":1033.567,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":16087.857,"d":72.847,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":16175.274,"d":378.804,"n":26},{"fn":"Kalman_Update","lvl":2,"t":16597.786,"d":271.063,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":17049.557,"d":1054.132,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":17154.97,"d":75.295,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":17245.324,"d":391.535,"n":26},{"fn":"Kalman_Update","lvl":2,"t":17682.036,"d":271.063,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":18133.911,"d":1061.395,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":18240.051,"d":75.814,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":18331.027,"d":394.233,"n":26},{"fn":"Kalman_Update","lvl":2,"t":18770.748,"d":272.93,"n":18},{"fn":"SensorFusion_MainFunction","lvl":1,"t":19225.632,"d":946.029,"n":70},{"fn":"Kalman_Predict","lvl":2,"t":19331.772,"d":75.814,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":19422.748,"d":341.609,"n":26},{"fn":"Kalman_Update","lvl":2,"t":19803.774,"d":236.499,"n":18},{"fn":"Kalman_Predict","lvl":2,"t":20289.911,"d":65.694,"n":5},{"fn":"Imu_ReadGyroZ","lvl":2,"t":20368.744,"d":341.609,"n":26},{"fn":"Kalman_Update","lvl":2,"t":20749.769,"d":236.499,"n":18}],"3":[{"fn":"MotorCtrl_MainFunction","lvl":1,"t":0.0,"d":2249.03,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":64.729,"d":194.186,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":530.774,"d":233.023,"n":18},{"fn":"Pi_Update","lvl":2,"t":828.526,"d":271.86,"n":21},{"fn":"Pi_Update","lvl":2,"t":1203.951,"d":257.156,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":1498.186,"d":648.877,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":2267.569,"d":1913.899,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":2313.917,"d":139.045,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":2647.626,"d":166.854,"n":18},{"fn":"Pi_Update","lvl":2,"t":2860.828,"d":205.433,"n":21},{"fn":"Pi_Update","lvl":2,"t":3144.521,"d":205.433,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":3389.084,"d":684.776,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":4204.023,"d":2072.002,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":4260.41,"d":169.16,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":4666.394,"d":202.992,"n":18},{"fn":"Pi_Update","lvl":2,"t":4925.772,"d":236.824,"n":21},{"fn":"Pi_Update","lvl":2,"t":5252.815,"d":236.824,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":5534.748,"d":640.61,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":6294.328,"d":1964.316,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":6340.086,"d":137.273,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":6669.542,"d":164.728,"n":18},{"fn":"Pi_Update","lvl":2,"t":6880.028,"d":214.451,"n":21},{"fn":"Pi_Update","lvl":2,"t":7176.175,"d":214.451,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":7431.475,"d":714.838,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":8279.068,"d":1957.077,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":8326.947,"d":143.635,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":8671.671,"d":172.362,"n":18},{"fn":"Pi_Update","lvl":2,"t":8891.912,"d":201.089,"n":21},{"fn":"Pi_Update","lvl":2,"t":9169.607,"d":201.089,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":9408.999,"d":707.992,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":10257.809,"d":2095.127,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":10311.97,"d":162.483,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":10701.928,"d":194.979,"n":18},{"fn":"Pi_Update","lvl":2,"t":10951.068,"d":218.068,"n":21},{"fn":"Pi_Update","lvl":2,"t":11252.21,"d":218.068,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":11511.815,"d":726.895,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":12373.705,"d":2086.365,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":12425.626,"d":168.383,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":12829.744,"d":202.059,"n":18},{"fn":"Pi_Update","lvl":2,"t":13087.931,"d":235.736,"n":21},{"fn":"Pi_Update","lvl":2,"t":13413.471,"d":235.736,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":13694.108,"d":661.942,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":14478.982,"d":1983.955,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":14526.263,"d":141.845,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":14866.691,"d":170.214,"n":18},{"fn":"Pi_Update","lvl":2,"t":15084.186,"d":214.472,"n":21},{"fn":"Pi_Update","lvl":2,"t":15380.362,"d":214.472,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":15635.686,"d":714.908,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":16483.363,"d":1921.547,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":16534.428,"d":140.206,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":16870.922,"d":168.247,"n":18},{"fn":"Pi_Update","lvl":2,"t":17085.904,"d":196.288,"n":21},{"fn":"Pi_Update","lvl":2,"t":17356.969,"d":196.288,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":17590.645,"d":688.163,"n":70},{"fn":"MotorCtrl_MainFunction","lvl":1,"t":18427.838,"d":2203.446,"n":199},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":18485.158,"d":171.958,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":18897.857,"d":206.35,"n":18},{"fn":"Pi_Update","lvl":2,"t":19161.527,"d":240.742,"n":21},{"fn":"Pi_Update","lvl":2,"t":19488.515,"d":226.398,"n":21},{"fn":"Pwm_SetDuty","lvl":2,"t":19758.036,"d":754.659,"n":70},{"fn":"Adc_ReadPhaseCurrents","lvl":2,"t":20706.751,"d":161.713,"n":15},{"fn":"Foc_ParkTransform","lvl":2,"t":21090.33,"d":188.619,"n":18},{"fn":"Pi_Update","lvl":2,"t":21331.343,"d":220.055,"n":21}],"4":[{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":1658.406,"d":161.865,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":1847.249,"d":67.444,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":1968.648,"d":2039.46,"n":151},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":3724.188,"d":162.24,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":3913.468,"d":67.6,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":4035.148,"d":2665.574,"n":192},{"fn":"Wdg_CheckAliveSupervision","lvl":2,"t":5791.727,"d":571.787,"n":39},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":6392.837,"d":175.934,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":6598.093,"d":73.306,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":6730.044,"d":2037.982,"n":151},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":8476.342,"d":166.677,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":8670.798,"d":69.449,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":8795.806,"d":2056.929,"n":151},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":10571.796,"d":160.537,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":10759.089,"d":66.89,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":10879.491,"d":1987.768,"n":151},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":12586.733,"d":160.301,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":12773.751,"d":66.792,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":12893.976,"d":2023.263,"n":151},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":14635.14,"d":161.2,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":14823.206,"d":67.167,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":14944.106,"d":1946.814,"n":151},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":16595.868,"d":168.601,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":16792.569,"d":70.25,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":16919.02,"d":2100.788,"n":151},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":18731.267,"d":164.88,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":18923.627,"d":68.7,"n":5},{"fn":"SafetyMonitor_MainFunction","lvl":1,"t":19047.288,"d":1957.56,"n":151},{"fn":"Mon_CheckYawPlausibility","lvl":2,"t":20732.886,"d":153.159,"n":12},{"fn":"Wdg_Trigger","lvl":2,"t":20911.572,"d":63.816,"n":5}]}},"source":{"file":"ZonalGateway.c","path":"Showcase/01_ZonalGateway_ETR_SCT_QuadA53/ZonalGateway.c","lines":[{"n":1,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":2,"c":"/* Project:                S32G3 debug applications                                    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":3,"c":"/* ProjectNumber:         000                                                         */","s":"","k":0,"i":0,"e":0,"x":0},{"n":4,"c":"/* Version:                1.00                                                        */","s":"","k":0,"i":0,"e":0,"x":0},{"n":5,"c":"/* FileName:               ZonalGateway.c                                                */","s":"","k":0,"i":0,"e":0,"x":0},{"n":6,"c":"/* Date:                   October 2026                                                   */","s":"","k":0,"i":0,"e":0,"x":0},{"n":7,"c":"/* Author:                 MOVE.B                                                      */","s":"","k":0,"i":0,"e":0,"x":0},{"n":8,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":9,"c":"/* Revision history","s":"","k":0,"i":0,"e":0,"x":0},{"n":10,"c":"    Version:            1.00","s":"","k":0,"i":0,"e":0,"x":0},{"n":11,"c":"    Date:                October 2026","s":"","k":0,"i":0,"e":0,"x":0},{"n":12,"c":"    Revision by:        MOVE.B","s":"","k":0,"i":0,"e":0,"x":0},{"n":13,"c":"    Description:        Creation. Showcase application for ChipTrace and ChipTraceAnalyser:","s":"","k":0,"i":0,"e":0,"x":0},{"n":14,"c":"                        a zonal gateway ECU on the four Cortex-A53 of cluster 0, one role per core,","s":"","k":0,"i":0,"e":0,"x":0},{"n":15,"c":"                        traced continuously into the ETR (scatter-gather, circular).","s":"","k":0,"i":0,"e":0,"x":0},{"n":16,"c":"                          core 0: CAN gateway (AUTOSAR E2E profile 1 check, routing, transmit)","s":"","k":0,"i":0,"e":0,"x":0},{"n":17,"c":"                          core 1: sensor fusion (IMU sampling, Kalman filter, yaw-rate estimate)","s":"","k":0,"i":0,"e":0,"x":0},{"n":18,"c":"                          core 2: motor control (FOC: Clarke / Park transforms, PI current loops, PWM)","s":"","k":0,"i":0,"e":0,"x":0},{"n":19,"c":"                          core 3: safety monitor (heartbeats, plausibility checks, DTC log, watchdog)","s":"","k":0,"i":0,"e":0,"x":0},{"n":20,"c":"                        Bus traffic, sensors and phase currents are simulated in RAM: the application","s":"","k":0,"i":0,"e":0,"x":0},{"n":21,"c":"                        runs on the bare S32G3 RDB with no peripheral initialised. One frame in 37","s":"","k":0,"i":0,"e":0,"x":0},{"n":22,"c":"                        carries a stale E2E alive counter, so the error path shows up in the trace.","s":"","k":0,"i":0,"e":0,"x":0},{"n":23,"c":"*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":24,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":25,"c":"#ifdef AARCH64","s":"","k":0,"i":0,"e":0,"x":0},{"n":26,"c":"#include \"..\\..\\..\\..\\Csp\\Aarch64\\Headers\\CortexA53_CSP.h\"","s":"","k":0,"i":0,"e":0,"x":0},{"n":27,"c":"#endif","s":"","k":0,"i":0,"e":0,"x":0},{"n":28,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":29,"c":"#ifdef AARCH32","s":"","k":0,"i":0,"e":0,"x":0},{"n":30,"c":"#include \"..\\..\\..\\..\\Csp\\Aarch32\\Headers\\CortexA53_CSP.h\"","s":"","k":0,"i":0,"e":0,"x":0},{"n":31,"c":"#endif","s":"","k":0,"i":0,"e":0,"x":0},{"n":32,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":33,"c":"#include \"..\\..\\..\\..\\..\\CoreSight\\Headers\\ChipTrace_S32G3.h\"","s":"","k":0,"i":0,"e":0,"x":0},{"n":34,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":35,"c":"/*----------------------------------------------------------------------------------*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":36,"c":"/* Configuration                                                                    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":37,"c":"/*----------------------------------------------------------------------------------*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":38,"c":"#define        GATEWAY_FRAMES_TO_ROUTE                112        /* core 0 stops the capture after these: frame 110 is a faulty one */","s":"","k":0,"i":0,"e":0,"x":0},{"n":39,"c":"#define        CAN_TX_QUEUE_LEN                    16","s":"","k":0,"i":0,"e":0,"x":0},{"n":40,"c":"#define        ROUTE_TABLE_LEN                        10","s":"","k":0,"i":0,"e":0,"x":0},{"n":41,"c":"#define        E2E_FAULT_PERIOD                    37        /* one frame in 37 carries a stale alive counter */","s":"","k":0,"i":0,"e":0,"x":0},{"n":42,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":43,"c":"#define        BUS_CHASSIS                            0","s":"","k":0,"i":0,"e":0,"x":0},{"n":44,"c":"#define        BUS_POWERTRAIN                        1","s":"","k":0,"i":0,"e":0,"x":0},{"n":45,"c":"#define        BUS_BODY                            2","s":"","k":0,"i":0,"e":0,"x":0},{"n":46,"c":"#define        BUS_ETHERNET_BACKBONE                3","s":"","k":0,"i":0,"e":0,"x":0},{"n":47,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":48,"c":"#define        DEM_EVENT_E2E_COUNTER                0x0101","s":"","k":0,"i":0,"e":0,"x":0},{"n":49,"c":"#define        DEM_EVENT_E2E_CRC                    0x0102","s":"","k":0,"i":0,"e":0,"x":0},{"n":50,"c":"#define        DEM_EVENT_ROUTE_UNKNOWN                0x0103","s":"","k":0,"i":0,"e":0,"x":0},{"n":51,"c":"#define        DEM_EVENT_YAW_IMPLAUSIBLE            0x0201","s":"","k":0,"i":0,"e":0,"x":0},{"n":52,"c":"#define        DEM_EVENT_CURRENT_LIMIT                0x0301","s":"","k":0,"i":0,"e":0,"x":0},{"n":53,"c":"#define        DEM_EVENT_CORE_STALLED                0x0401","s":"","k":0,"i":0,"e":0,"x":0},{"n":54,"c":"#define        DEM_LOG_LEN                            16","s":"","k":0,"i":0,"e":0,"x":0},{"n":55,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":56,"c":"#define        Q15_ONE                                32767","s":"","k":0,"i":0,"e":0,"x":0},{"n":57,"c":"#define        PI_INTEGRAL_LIMIT                    (1 << 22)","s":"","k":0,"i":0,"e":0,"x":0},{"n":58,"c":"#define        PWM_PERIOD_TICKS                    4000","s":"","k":0,"i":0,"e":0,"x":0},{"n":59,"c":"#define        PHASE_CURRENT_LIMIT                    30000","s":"","k":0,"i":0,"e":0,"x":0},{"n":60,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":61,"c":"/*----------------------------------------------------------------------------------*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":62,"c":"/* Types                                                                            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":63,"c":"/*----------------------------------------------------------------------------------*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":64,"c":"typedef struct","s":"","k":0,"i":0,"e":0,"x":0},{"n":65,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":66,"c":"    uint32_t        Id ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":67,"c":"    uint32_t        Dlc ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":68,"c":"    uint8_t            Data[8] ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":69,"c":"} CanFrame_t ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":70,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":71,"c":"typedef struct","s":"","k":0,"i":0,"e":0,"x":0},{"n":72,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":73,"c":"    uint32_t        RxId ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":74,"c":"    uint32_t        TxId ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":75,"c":"    uint32_t        BusOut ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":76,"c":"    BOOL            E2EProtected ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":77,"c":"} CanRoute_t ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":78,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":79,"c":"typedef struct","s":"","k":0,"i":0,"e":0,"x":0},{"n":80,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":81,"c":"    int32_t            Estimate ;            /* Q16 */","s":"","k":0,"i":0,"e":0,"x":0},{"n":82,"c":"    int32_t            Variance ;            /* Q16 */","s":"","k":0,"i":0,"e":0,"x":0},{"n":83,"c":"    int32_t            ProcessNoise ;        /* Q16 */","s":"","k":0,"i":0,"e":0,"x":0},{"n":84,"c":"    int32_t            MeasureNoise ;        /* Q16 */","s":"","k":0,"i":0,"e":0,"x":0},{"n":85,"c":"} Kalman1D_t ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":86,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":87,"c":"typedef struct","s":"","k":0,"i":0,"e":0,"x":0},{"n":88,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":89,"c":"    int32_t            Kp ;                /* Q15 */","s":"","k":0,"i":0,"e":0,"x":0},{"n":90,"c":"    int32_t            Ki ;                /* Q15 */","s":"","k":0,"i":0,"e":0,"x":0},{"n":91,"c":"    int32_t            Integral ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":92,"c":"    int32_t            OutMin ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":93,"c":"    int32_t            OutMax ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":94,"c":"} PiController_t ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":95,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":96,"c":"typedef struct","s":"","k":0,"i":0,"e":0,"x":0},{"n":97,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":98,"c":"    uint32_t        EventId ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":99,"c":"    uint32_t        Data ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":100,"c":"    uint32_t        Occurrences ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":101,"c":"} DemEntry_t ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":102,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":103,"c":"/*----------------------------------------------------------------------------------*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":104,"c":"/* Calibration and constant data                                                    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":105,"c":"/*----------------------------------------------------------------------------------*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":106,"c":"const CanRoute_t    CanGw_RoutingTable[ROUTE_TABLE_LEN] =","s":"","k":0,"i":0,"e":0,"x":0},{"n":107,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":108,"c":"    { 0x0C1, 0x4C1, BUS_ETHERNET_BACKBONE,    TRUE  },    /* brake pressure            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":109,"c":"    { 0x0C5, 0x4C5, BUS_ETHERNET_BACKBONE,    TRUE  },    /* wheel speeds                */","s":"","k":0,"i":0,"e":0,"x":0},{"n":110,"c":"    { 0x120, 0x220, BUS_POWERTRAIN,            TRUE  },    /* torque request            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":111,"c":"    { 0x128, 0x228, BUS_POWERTRAIN,            TRUE  },    /* gear selector            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":112,"c":"    { 0x1A0, 0x2A0, BUS_BODY,                FALSE },    /* door status                */","s":"","k":0,"i":0,"e":0,"x":0},{"n":113,"c":"    { 0x1A4, 0x2A4, BUS_BODY,                FALSE },    /* exterior lights            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":114,"c":"    { 0x260, 0x360, BUS_CHASSIS,            TRUE  },    /* steering angle            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":115,"c":"    { 0x264, 0x364, BUS_CHASSIS,            TRUE  },    /* yaw rate (from fusion)    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":116,"c":"    { 0x300, 0x400, BUS_ETHERNET_BACKBONE,    FALSE },    /* battery state of charge    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":117,"c":"    { 0x3F0, 0x4F0, BUS_ETHERNET_BACKBONE,    FALSE },    /* ambient temperature        */","s":"","k":0,"i":0,"e":0,"x":0},{"n":118,"c":"} ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":119,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":120,"c":"const int16_t        Foc_SinTable[64] =","s":"","k":0,"i":0,"e":0,"x":0},{"n":121,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":122,"c":"         0,   3212,   6393,   9512,  12539,  15446,  18204,  20787,","s":"","k":0,"i":0,"e":0,"x":0},{"n":123,"c":"     23170,  25329,  27245,  28898,  30273,  31356,  32137,  32609,","s":"","k":0,"i":0,"e":0,"x":0},{"n":124,"c":"     32767,  32609,  32137,  31356,  30273,  28898,  27245,  25329,","s":"","k":0,"i":0,"e":0,"x":0},{"n":125,"c":"     23170,  20787,  18204,  15446,  12539,   9512,   6393,   3212,","s":"","k":0,"i":0,"e":0,"x":0},{"n":126,"c":"         0,  -3212,  -6393,  -9512, -12539, -15446, -18204, -20787,","s":"","k":0,"i":0,"e":0,"x":0},{"n":127,"c":"    -23170, -25329, -27245, -28898, -30273, -31356, -32137, -32609,","s":"","k":0,"i":0,"e":0,"x":0},{"n":128,"c":"    -32767, -32609, -32137, -31356, -30273, -28898, -27245, -25329,","s":"","k":0,"i":0,"e":0,"x":0},{"n":129,"c":"    -23170, -20787, -18204, -15446, -12539,  -9512,  -6393,  -3212,","s":"","k":0,"i":0,"e":0,"x":0},{"n":130,"c":"} ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":131,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":132,"c":"/*----------------------------------------------------------------------------------*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":133,"c":"/* Shared data (one writer per variable)                                            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":134,"c":"/*----------------------------------------------------------------------------------*/","s":"","k":0,"i":0,"e":0,"x":0},{"n":135,"c":"volatile BOOL         SharedVar_Core0_Ready ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":136,"c":"volatile BOOL         SharedVar_Core1_Ready ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":137,"c":"volatile BOOL         SharedVar_Core2_Ready ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":138,"c":"volatile BOOL         SharedVar_Core3_Ready ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":139,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":140,"c":"volatile uint32_t    Heartbeat_Gateway ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":141,"c":"volatile uint32_t    Heartbeat_Fusion ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":142,"c":"volatile uint32_t    Heartbeat_MotorCtrl ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":143,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":144,"c":"volatile int32_t    VehicleState_YawRate ;            /* from core 1, mdeg/s        */","s":"","k":0,"i":0,"e":0,"x":0},{"n":145,"c":"volatile int32_t    VehicleState_WheelSpeedDelta ;    /* from core 0, mm/s        */","s":"","k":0,"i":0,"e":0,"x":0},{"n":146,"c":"volatile int32_t    VehicleState_TorqueRequest ;    /* from core 0, Q15            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":147,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":148,"c":"uint8_t                Crc8_Table[256] ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":149,"c":"uint32_t            BusSim_Lfsr ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":150,"c":"uint32_t            BusSim_FrameCount ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":151,"c":"uint8_t                E2E_LastCounter[ROUTE_TABLE_LEN] ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":152,"c":"CanFrame_t            CanGw_TxQueue[CAN_TX_QUEUE_LEN] ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":153,"c":"uint32_t            CanGw_TxHead ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":154,"c":"uint32_t            CanGw_FramesRouted ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":155,"c":"uint32_t            CanGw_FramesDropped ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":156,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":157,"c":"DemEntry_t            Dem_Log[DEM_LOG_LEN] ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":158,"c":"uint32_t            Dem_LogCount ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":159,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":160,"c":"Kalman1D_t            Fusion_YawFilter ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":161,"c":"uint32_t            Imu_Lfsr ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":162,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":163,"c":"PiController_t        Foc_PiD ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":164,"c":"PiController_t        Foc_PiQ ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":165,"c":"uint32_t            Foc_Angle ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":166,"c":"uint32_t            Pwm_Duty[3] ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":167,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":168,"c":"uint32_t            Wdg_LastBeat[3] ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":169,"c":"uint32_t            Wdg_Triggers ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":170,"c":"uint32_t            Wdg_SupervisionCycle ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":171,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":172,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":173,"c":"/* Pseudo-random source for the simulated bus and sensors (Galois LFSR, 32 bits)    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":174,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":175,"c":"uint32_t Lfsr_Next(uint32_t *State)","s":"","k":0,"i":0,"e":0,"x":0},{"n":176,"c":"{","s":"exec","k":44,"i":44,"e":0,"x":0},{"n":177,"c":"    uint32_t    lsb ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":178,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":179,"c":"    lsb                                                                            = *State & 1u ;","s":"exec","k":44,"i":44,"e":0,"x":0},{"n":180,"c":"    *State                                                                        >>= 1 ;","s":"exec","k":44,"i":44,"e":0,"x":0},{"n":181,"c":"    if ( lsb )","s":"exec","k":44,"i":176,"e":0,"x":0},{"n":182,"c":"        *State                                                                    ^= 0xA3000000u ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":183,"c":"    return( *State ) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":184,"c":"}","s":"exec","k":44,"i":44,"e":44,"x":0},{"n":185,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":186,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":187,"c":"/* CRC-8 SAE J1850 (AUTOSAR E2E profile 1), table driven                            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":188,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":189,"c":"void Crc_InitTable8(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":190,"c":"{","s":"not","k":0,"i":0,"e":0,"x":0},{"n":191,"c":"    uint32_t    i, bit ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":192,"c":"    uint8_t        crc ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":193,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":194,"c":"    for ( i=0; i<256; i++ )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":195,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":196,"c":"        crc                                                                        = (uint8_t)i ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":197,"c":"        for ( bit=0; bit<8; bit++ )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":198,"c":"            crc                                                                    = (crc & 0x80) ? (uint8_t)((crc << 1) ^ 0x1D) : (uint8_t)(crc << 1) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":199,"c":"        Crc8_Table[i]                                                            = crc ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":200,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":201,"c":"}","s":"not","k":0,"i":0,"e":0,"x":0},{"n":202,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":203,"c":"uint8_t Crc_CalculateCRC8(const uint8_t *Data, uint32_t Length, uint8_t StartValue)","s":"","k":0,"i":0,"e":0,"x":0},{"n":204,"c":"{","s":"exec","k":4,"i":4,"e":0,"x":0},{"n":205,"c":"    uint8_t        crc ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":206,"c":"    uint32_t    i ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":207,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":208,"c":"    crc                                                                            = StartValue ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":209,"c":"    for ( i=0; i<Length; i++ )","s":"partial","k":28,"i":68,"e":24,"x":8},{"n":210,"c":"        crc                                                                        = Crc8_Table[crc ^ Data[i]] ;","s":"exec","k":28,"i":92,"e":0,"x":0},{"n":211,"c":"    return( crc ^ 0xFF ) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":212,"c":"}","s":"exec","k":4,"i":8,"e":4,"x":0},{"n":213,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":214,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":215,"c":"/* Core 0 -- CAN gateway                                                            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":216,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":217,"c":"/* Simulated reception: the next frame of a periodic schedule, E2E protected where the","s":"","k":0,"i":0,"e":0,"x":0},{"n":218,"c":"   routing table says so. One frame in E2E_FAULT_PERIOD repeats its alive counter.    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":219,"c":"void BusSim_ReceiveFrame(CanFrame_t *Frame)","s":"","k":0,"i":0,"e":0,"x":0},{"n":220,"c":"{","s":"exec","k":4,"i":24,"e":0,"x":0},{"n":221,"c":"    uint32_t    route, i ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":222,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":223,"c":"    route                                                                        = BusSim_FrameCount % ROUTE_TABLE_LEN ;","s":"exec","k":4,"i":32,"e":0,"x":0},{"n":224,"c":"    Frame->Id                                                                    = CanGw_RoutingTable[route].RxId ;","s":"exec","k":4,"i":28,"e":0,"x":0},{"n":225,"c":"    Frame->Dlc                                                                    = 8 ;","s":"exec","k":4,"i":8,"e":0,"x":0},{"n":226,"c":"    for ( i=2; i<8; i++ )","s":"exec","k":24,"i":56,"e":20,"x":4},{"n":227,"c":"        Frame->Data[i]                                                            = (uint8_t)Lfsr_Next(&BusSim_Lfsr) ;","s":"exec","k":24,"i":80,"e":24,"x":0},{"n":228,"c":"    if ( CanGw_RoutingTable[route].E2EProtected )","s":"exec","k":4,"i":28,"e":2,"x":2},{"n":229,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":230,"c":"        Frame->Data[1]                                                            = (uint8_t)((E2E_LastCounter[route] + 1) & 0x0F) ;","s":"exec","k":2,"i":12,"e":0,"x":0},{"n":231,"c":"        if ( (BusSim_FrameCount % E2E_FAULT_PERIOD) == (E2E_FAULT_PERIOD - 1) )","s":"exec","k":2,"i":14,"e":1,"x":1},{"n":232,"c":"            Frame->Data[1]                                                        = E2E_LastCounter[route] ;","s":"exec","k":1,"i":5,"e":1,"x":0},{"n":233,"c":"        Frame->Data[0]                                                            = Crc_CalculateCRC8(&Frame->Data[1], 7, 0xFF) ;","s":"exec","k":2,"i":10,"e":2,"x":0},{"n":234,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":235,"c":"    BusSim_FrameCount++ ;","s":"exec","k":4,"i":16,"e":0,"x":0},{"n":236,"c":"}","s":"exec","k":4,"i":20,"e":4,"x":0},{"n":237,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":238,"c":"void Dem_ReportErrorStatus(uint32_t EventId, uint32_t Data)","s":"","k":0,"i":0,"e":0,"x":0},{"n":239,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":240,"c":"    uint32_t    i ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":241,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":242,"c":"    for ( i=0; i<Dem_LogCount; i++ )","s":"partial","k":1,"i":6,"e":0,"x":1},{"n":243,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":244,"c":"        if ( Dem_Log[i].EventId == EventId )","s":"exec","k":1,"i":3,"e":1,"x":0},{"n":245,"c":"        {","s":"","k":0,"i":0,"e":0,"x":0},{"n":246,"c":"            Dem_Log[i].Occurrences++ ;","s":"exec","k":1,"i":8,"e":0,"x":0},{"n":247,"c":"            Dem_Log[i].Data                                                        = Data ;","s":"exec","k":1,"i":1,"e":0,"x":0},{"n":248,"c":"            return ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":249,"c":"        }","s":"","k":0,"i":0,"e":0,"x":0},{"n":250,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":251,"c":"    if ( Dem_LogCount < DEM_LOG_LEN )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":252,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":253,"c":"        Dem_Log[Dem_LogCount].EventId                                            = EventId ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":254,"c":"        Dem_Log[Dem_LogCount].Data                                                = Data ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":255,"c":"        Dem_Log[Dem_LogCount].Occurrences                                        = 1 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":256,"c":"        Dem_LogCount++ ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":257,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":258,"c":"}","s":"exec","k":1,"i":1,"e":1,"x":0},{"n":259,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":260,"c":"int32_t CanGw_LookupRoute(uint32_t RxId)","s":"","k":0,"i":0,"e":0,"x":0},{"n":261,"c":"{","s":"exec","k":4,"i":4,"e":0,"x":0},{"n":262,"c":"    int32_t        i ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":263,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":264,"c":"    for ( i=0; i<ROUTE_TABLE_LEN; i++ )","s":"exec","k":18,"i":84,"e":18,"x":0},{"n":265,"c":"        if ( CanGw_RoutingTable[i].RxId == RxId )","s":"exec","k":22,"i":66,"e":4,"x":18},{"n":266,"c":"            return( i ) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":267,"c":"    return( -1 ) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":268,"c":"}","s":"exec","k":4,"i":4,"e":4,"x":0},{"n":269,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":270,"c":"/* AUTOSAR E2E profile 1: byte 0 = CRC-8 of bytes 1..7, byte 1 low nibble = alive counter */","s":"","k":0,"i":0,"e":0,"x":0},{"n":271,"c":"BOOL E2E_P01Check(uint32_t Route, const CanFrame_t *Frame)","s":"","k":0,"i":0,"e":0,"x":0},{"n":272,"c":"{","s":"exec","k":2,"i":10,"e":0,"x":0},{"n":273,"c":"    uint8_t        counter, delta ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":274,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":275,"c":"    if ( Crc_CalculateCRC8(&Frame->Data[1], 7, 0xFF) != Frame->Data[0] )","s":"partial","k":2,"i":14,"e":2,"x":2},{"n":276,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":277,"c":"        Dem_ReportErrorStatus(DEM_EVENT_E2E_CRC, Frame->Id) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":278,"c":"        return( FALSE ) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":279,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":280,"c":"    counter                                                                        = Frame->Data[1] & 0x0F ;","s":"exec","k":2,"i":4,"e":0,"x":0},{"n":281,"c":"    delta                                                                        = (uint8_t)((counter - E2E_LastCounter[Route]) & 0x0F) ;","s":"exec","k":2,"i":8,"e":0,"x":0},{"n":282,"c":"    if ( delta == 0 )","s":"exec","k":2,"i":4,"e":1,"x":1},{"n":283,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":284,"c":"        Dem_ReportErrorStatus(DEM_EVENT_E2E_COUNTER, Frame->Id) ;","s":"exec","k":1,"i":3,"e":1,"x":0},{"n":285,"c":"        return( FALSE ) ;","s":"exec","k":1,"i":2,"e":1,"x":0},{"n":286,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":287,"c":"    E2E_LastCounter[Route]                                                        = counter ;","s":"exec","k":1,"i":3,"e":0,"x":0},{"n":288,"c":"    return( TRUE ) ;","s":"exec","k":1,"i":1,"e":0,"x":0},{"n":289,"c":"}","s":"exec","k":2,"i":6,"e":2,"x":0},{"n":290,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":291,"c":"void Com_UpdateVehicleSignals(const CanFrame_t *Frame)","s":"","k":0,"i":0,"e":0,"x":0},{"n":292,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":293,"c":"    switch ( Frame->Id )","s":"exec","k":3,"i":13,"e":3,"x":2},{"n":294,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":295,"c":"        case 0x0C5:    VehicleState_WheelSpeedDelta                                    = (int32_t)Frame->Data[2] - (int32_t)Frame->Data[3] ;","s":"exec","k":1,"i":5,"e":0,"x":0},{"n":296,"c":"                    break ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":297,"c":"        case 0x120:    VehicleState_TorqueRequest                                        = ((int32_t)Frame->Data[2] << 7) - 16384 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":298,"c":"                    break ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":299,"c":"        default:    break ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":300,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":301,"c":"}","s":"partial","k":3,"i":3,"e":3,"x":0},{"n":302,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":303,"c":"void CanIf_Transmit(uint32_t Bus, uint32_t TxId, const CanFrame_t *Frame)","s":"","k":0,"i":0,"e":0,"x":0},{"n":304,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":305,"c":"    CanFrame_t    *tx ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":306,"c":"    uint32_t    i ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":307,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":308,"c":"    tx                                                                            = &CanGw_TxQueue[CanGw_TxHead] ;","s":"exec","k":3,"i":6,"e":0,"x":0},{"n":309,"c":"    tx->Id                                                                        = TxId | (Bus << 12) ;","s":"exec","k":3,"i":18,"e":0,"x":0},{"n":310,"c":"    tx->Dlc                                                                        = Frame->Dlc ;","s":"exec","k":3,"i":9,"e":0,"x":0},{"n":311,"c":"    for ( i=0; i<8; i++ )","s":"exec","k":31,"i":99,"e":27,"x":4},{"n":312,"c":"        tx->Data[i]                                                                = Frame->Data[i] ;","s":"exec","k":31,"i":65,"e":0,"x":0},{"n":313,"c":"    CanGw_TxHead                                                                = (CanGw_TxHead + 1) % CAN_TX_QUEUE_LEN ;","s":"exec","k":4,"i":16,"e":0,"x":0},{"n":314,"c":"}","s":"exec","k":4,"i":4,"e":4,"x":0},{"n":315,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":316,"c":"void CanGw_RouteFrame(const CanFrame_t *Frame)","s":"","k":0,"i":0,"e":0,"x":0},{"n":317,"c":"{","s":"exec","k":4,"i":20,"e":0,"x":0},{"n":318,"c":"    int32_t        route ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":319,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":320,"c":"    route                                                                        = CanGw_LookupRoute(Frame->Id) ;","s":"exec","k":4,"i":12,"e":4,"x":0},{"n":321,"c":"    if ( route < 0 )","s":"partial","k":4,"i":8,"e":0,"x":4},{"n":322,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":323,"c":"        Dem_ReportErrorStatus(DEM_EVENT_ROUTE_UNKNOWN, Frame->Id) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":324,"c":"        CanGw_FramesDropped++ ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":325,"c":"        return ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":326,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":327,"c":"    if ( CanGw_RoutingTable[route].E2EProtected && !E2E_P01Check((uint32_t)route, Frame) )","s":"exec","k":4,"i":36,"e":5,"x":3},{"n":328,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":329,"c":"        CanGw_FramesDropped++ ;","s":"exec","k":1,"i":4,"e":0,"x":0},{"n":330,"c":"        return ;","s":"exec","k":1,"i":1,"e":1,"x":0},{"n":331,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":332,"c":"    Com_UpdateVehicleSignals(Frame) ;","s":"exec","k":3,"i":6,"e":3,"x":0},{"n":333,"c":"    CanIf_Transmit(CanGw_RoutingTable[route].BusOut, CanGw_RoutingTable[route].TxId, Frame) ;","s":"exec","k":3,"i":27,"e":3,"x":0},{"n":334,"c":"    CanGw_FramesRouted++ ;","s":"exec","k":4,"i":16,"e":0,"x":0},{"n":335,"c":"}","s":"exec","k":5,"i":20,"e":5,"x":0},{"n":336,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":337,"c":"void CanGw_MainFunction(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":338,"c":"{","s":"exec","k":4,"i":8,"e":0,"x":0},{"n":339,"c":"    CanFrame_t    frame ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":340,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":341,"c":"    BusSim_ReceiveFrame(&frame) ;","s":"exec","k":4,"i":8,"e":4,"x":0},{"n":342,"c":"    CanGw_RouteFrame(&frame) ;","s":"exec","k":4,"i":8,"e":4,"x":0},{"n":343,"c":"    Heartbeat_Gateway++ ;","s":"exec","k":5,"i":20,"e":0,"x":0},{"n":344,"c":"}","s":"exec","k":5,"i":10,"e":5,"x":0},{"n":345,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":346,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":347,"c":"/* Core 1 -- sensor fusion                                                            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":348,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":349,"c":"int32_t Imu_ReadGyroZ(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":350,"c":"{","s":"exec","k":20,"i":60,"e":0,"x":0},{"n":351,"c":"    /* simulated gyro: a slow sine plus noise, mdeg/s */","s":"","k":0,"i":0,"e":0,"x":0},{"n":352,"c":"    return( ((int32_t)Foc_SinTable[(Heartbeat_Fusion >> 2) & 63] >> 4) + (int32_t)(Lfsr_Next(&Imu_Lfsr) & 0xFF) - 128 ) ;","s":"exec","k":20,"i":220,"e":20,"x":0},{"n":353,"c":"}","s":"exec","k":20,"i":80,"e":20,"x":0},{"n":354,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":355,"c":"void Kalman_Predict(Kalman1D_t *Kf)","s":"","k":0,"i":0,"e":0,"x":0},{"n":356,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":357,"c":"    Kf->Variance                                                                += Kf->ProcessNoise ;","s":"exec","k":20,"i":80,"e":0,"x":0},{"n":358,"c":"}","s":"exec","k":20,"i":20,"e":20,"x":0},{"n":359,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":360,"c":"void Kalman_Update(Kalman1D_t *Kf, int32_t Measurement)","s":"","k":0,"i":0,"e":0,"x":0},{"n":361,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":362,"c":"    int32_t        gain ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":363,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":364,"c":"    gain                                                                        = (int32_t)(((int64_t)Kf->Variance << 16) / (Kf->Variance + Kf->MeasureNoise)) ;","s":"exec","k":20,"i":120,"e":0,"x":0},{"n":365,"c":"    Kf->Estimate                                                                += (int32_t)(((int64_t)gain * (Measurement - Kf->Estimate)) >> 16) ;","s":"exec","k":20,"i":120,"e":0,"x":0},{"n":366,"c":"    Kf->Variance                                                                = (int32_t)(((int64_t)(65536 - gain) * Kf->Variance) >> 16) ;","s":"exec","k":20,"i":100,"e":0,"x":0},{"n":367,"c":"}","s":"exec","k":20,"i":20,"e":20,"x":0},{"n":368,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":369,"c":"void SensorFusion_MainFunction(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":370,"c":"{","s":"exec","k":20,"i":60,"e":0,"x":0},{"n":371,"c":"    Kalman_Predict(&Fusion_YawFilter) ;","s":"exec","k":20,"i":80,"e":20,"x":0},{"n":372,"c":"    Kalman_Update(&Fusion_YawFilter, Imu_ReadGyroZ()) ;","s":"exec","k":20,"i":80,"e":40,"x":0},{"n":373,"c":"    VehicleState_YawRate                                                        = Fusion_YawFilter.Estimate ;","s":"exec","k":21,"i":63,"e":0,"x":0},{"n":374,"c":"    Heartbeat_Fusion++ ;","s":"exec","k":21,"i":84,"e":0,"x":0},{"n":375,"c":"}","s":"exec","k":21,"i":63,"e":21,"x":0},{"n":376,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":377,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":378,"c":"/* Core 2 -- motor control (field-oriented control, fixed point Q15)                */","s":"","k":0,"i":0,"e":0,"x":0},{"n":379,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":380,"c":"void Adc_ReadPhaseCurrents(int32_t *Ia, int32_t *Ib)","s":"","k":0,"i":0,"e":0,"x":0},{"n":381,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":382,"c":"    /* simulated sinusoidal phase currents, 120 degrees apart */","s":"","k":0,"i":0,"e":0,"x":0},{"n":383,"c":"    *Ia                                                                            = Foc_SinTable[Foc_Angle & 63] >> 1 ;","s":"exec","k":11,"i":88,"e":0,"x":0},{"n":384,"c":"    *Ib                                                                            = Foc_SinTable[(Foc_Angle + 43) & 63] >> 1 ;","s":"exec","k":11,"i":66,"e":0,"x":0},{"n":385,"c":"}","s":"exec","k":11,"i":11,"e":11,"x":0},{"n":386,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":387,"c":"void Foc_ClarkeTransform(int32_t Ia, int32_t Ib, int32_t *Alpha, int32_t *Beta)","s":"","k":0,"i":0,"e":0,"x":0},{"n":388,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":389,"c":"    *Alpha                                                                        = Ia ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":390,"c":"    *Beta                                                                        = (int32_t)(((int64_t)(Ia + 2 * Ib) * 18919) >> 15) ;    /* 1/sqrt(3) */","s":"partial","k":11,"i":66,"e":0,"x":0},{"n":391,"c":"}","s":"not","k":0,"i":0,"e":0,"x":0},{"n":392,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":393,"c":"void Foc_ParkTransform(int32_t Alpha, int32_t Beta, uint32_t Angle, int32_t *Id, int32_t *Iq)","s":"","k":0,"i":0,"e":0,"x":0},{"n":394,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":395,"c":"    int32_t        s, c ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":396,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":397,"c":"    s                                                                            = Foc_SinTable[Angle & 63] ;","s":"exec","k":11,"i":11,"e":0,"x":0},{"n":398,"c":"    c                                                                            = Foc_SinTable[(Angle + 16) & 63] ;","s":"exec","k":11,"i":44,"e":0,"x":0},{"n":399,"c":"    *Id                                                                            = (int32_t)(((int64_t)Alpha * c + (int64_t)Beta * s) >> 15) ;","s":"exec","k":11,"i":88,"e":0,"x":0},{"n":400,"c":"    *Iq                                                                            = (int32_t)(((int64_t)Beta * c - (int64_t)Alpha * s) >> 15) ;","s":"exec","k":11,"i":44,"e":0,"x":0},{"n":401,"c":"}","s":"exec","k":11,"i":11,"e":11,"x":0},{"n":402,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":403,"c":"int32_t Pi_Update(PiController_t *Pi, int32_t Error)","s":"","k":0,"i":0,"e":0,"x":0},{"n":404,"c":"{","s":"exec","k":21,"i":21,"e":0,"x":0},{"n":405,"c":"    int32_t        out ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":406,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":407,"c":"    Pi->Integral                                                                += Error * Pi->Ki ;","s":"exec","k":21,"i":63,"e":0,"x":0},{"n":408,"c":"    if ( Pi->Integral > PI_INTEGRAL_LIMIT )","s":"","k":0,"i":0,"e":0,"x":0},{"n":409,"c":"        Pi->Integral                                                            = PI_INTEGRAL_LIMIT ;","s":"exec","k":21,"i":84,"e":0,"x":0},{"n":410,"c":"    else if ( Pi->Integral < -PI_INTEGRAL_LIMIT )","s":"exec","k":21,"i":63,"e":0,"x":0},{"n":411,"c":"        Pi->Integral                                                            = -PI_INTEGRAL_LIMIT ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":412,"c":"    out                                                                            = ((Error * Pi->Kp) + Pi->Integral) >> 15 ;","s":"exec","k":21,"i":63,"e":0,"x":0},{"n":413,"c":"    if ( out > Pi->OutMax )","s":"partial","k":21,"i":63,"e":0,"x":21},{"n":414,"c":"        out                                                                        = Pi->OutMax ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":415,"c":"    else if ( out < Pi->OutMin )","s":"exec","k":21,"i":63,"e":0,"x":0},{"n":416,"c":"        out                                                                        = Pi->OutMin ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":417,"c":"    return( out ) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":418,"c":"}","s":"exec","k":21,"i":21,"e":21,"x":0},{"n":419,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":420,"c":"void Pwm_SetDuty(int32_t Vd, int32_t Vq, uint32_t Angle)","s":"","k":0,"i":0,"e":0,"x":0},{"n":421,"c":"{","s":"exec","k":10,"i":10,"e":0,"x":0},{"n":422,"c":"    int32_t        s, c, va, vb, vc ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":423,"c":"    int32_t        phase[3] ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":424,"c":"    uint32_t    i ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":425,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":426,"c":"    s                                                                            = Foc_SinTable[Angle & 63] ;","s":"exec","k":10,"i":10,"e":0,"x":0},{"n":427,"c":"    c                                                                            = Foc_SinTable[(Angle + 16) & 63] ;","s":"exec","k":10,"i":40,"e":0,"x":0},{"n":428,"c":"    va                                                                            = (int32_t)(((int64_t)Vd * c - (int64_t)Vq * s) >> 15) ;","s":"exec","k":10,"i":70,"e":0,"x":0},{"n":429,"c":"    vb                                                                            = (int32_t)(((int64_t)Vd * s + (int64_t)Vq * c) >> 15) ;","s":"exec","k":10,"i":30,"e":0,"x":0},{"n":430,"c":"    vc                                                                            = -(va + vb) ;","s":"exec","k":10,"i":20,"e":0,"x":0},{"n":431,"c":"    phase[0]                                                                    = va ;","s":"exec","k":10,"i":10,"e":0,"x":0},{"n":432,"c":"    phase[1]                                                                    = vb ;","s":"exec","k":10,"i":10,"e":0,"x":0},{"n":433,"c":"    phase[2]                                                                    = vc ;","s":"exec","k":10,"i":20,"e":0,"x":0},{"n":434,"c":"    for ( i=0; i<3; i++ )","s":"exec","k":30,"i":90,"e":20,"x":10},{"n":435,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":436,"c":"        int32_t    duty                                                            = (PWM_PERIOD_TICKS / 2) + ((phase[i] * (PWM_PERIOD_TICKS / 2)) >> 15) ;","s":"exec","k":30,"i":190,"e":0,"x":0},{"n":437,"c":"        if ( duty < 0 )","s":"","k":0,"i":0,"e":0,"x":0},{"n":438,"c":"            duty                                                                = 0 ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":439,"c":"        if ( duty > PWM_PERIOD_TICKS )","s":"exec","k":30,"i":70,"e":0,"x":0},{"n":440,"c":"            duty                                                                = PWM_PERIOD_TICKS ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":441,"c":"        Pwm_Duty[i]                                                                = (uint32_t)duty ;","s":"exec","k":30,"i":110,"e":0,"x":0},{"n":442,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":443,"c":"}","s":"exec","k":10,"i":20,"e":10,"x":0},{"n":444,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":445,"c":"void MotorCtrl_MainFunction(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":446,"c":"{","s":"exec","k":11,"i":22,"e":0,"x":0},{"n":447,"c":"    int32_t        ia, ib, alpha, beta, id, iq, vd, vq ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":448,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":449,"c":"    Adc_ReadPhaseCurrents(&ia, &ib) ;","s":"exec","k":11,"i":33,"e":11,"x":0},{"n":450,"c":"    if ( (ia > PHASE_CURRENT_LIMIT) || (ia < -PHASE_CURRENT_LIMIT) )","s":"partial","k":11,"i":88,"e":0,"x":11},{"n":451,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":452,"c":"        Pwm_SetDuty(0, 0, Foc_Angle) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":453,"c":"        Heartbeat_MotorCtrl++ ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":454,"c":"        return ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":455,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":456,"c":"    Foc_ClarkeTransform(ia, ib, &alpha, &beta) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":457,"c":"    Foc_ParkTransform(alpha, beta, Foc_Angle, &id, &iq) ;","s":"exec","k":11,"i":77,"e":11,"x":0},{"n":458,"c":"    vd                                                                            = Pi_Update(&Foc_PiD, 0 - id) ;","s":"exec","k":11,"i":66,"e":11,"x":0},{"n":459,"c":"    vq                                                                            = Pi_Update(&Foc_PiQ, VehicleState_TorqueRequest - iq) ;","s":"exec","k":11,"i":77,"e":11,"x":0},{"n":460,"c":"    Pwm_SetDuty(vd, vq, Foc_Angle) ;","s":"exec","k":10,"i":40,"e":10,"x":0},{"n":461,"c":"    Foc_Angle++ ;","s":"exec","k":11,"i":33,"e":0,"x":0},{"n":462,"c":"    Heartbeat_MotorCtrl++ ;","s":"exec","k":11,"i":66,"e":0,"x":0},{"n":463,"c":"}","s":"exec","k":11,"i":22,"e":11,"x":0},{"n":464,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":465,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":466,"c":"/* Core 3 -- safety monitor                                                            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":467,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":468,"c":"BOOL Wdg_CheckAliveSupervision(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":469,"c":"{","s":"exec","k":1,"i":1,"e":0,"x":0},{"n":470,"c":"    uint32_t    beat[3], i ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":471,"c":"    BOOL        alive ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":472,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":473,"c":"    beat[0]                                                                        = Heartbeat_Gateway ;","s":"exec","k":1,"i":3,"e":0,"x":0},{"n":474,"c":"    beat[1]                                                                        = Heartbeat_Fusion ;","s":"exec","k":1,"i":3,"e":0,"x":0},{"n":475,"c":"    beat[2]                                                                        = Heartbeat_MotorCtrl ;","s":"exec","k":1,"i":3,"e":0,"x":0},{"n":476,"c":"    alive                                                                        = TRUE ;","s":"exec","k":1,"i":1,"e":0,"x":0},{"n":477,"c":"    for ( i=0; i<3; i++ )","s":"exec","k":3,"i":10,"e":2,"x":1},{"n":478,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":479,"c":"        if ( beat[i] == Wdg_LastBeat[i] )","s":"exec","k":3,"i":6,"e":0,"x":0},{"n":480,"c":"            alive                                                                = FALSE ;","s":"exec","k":3,"i":7,"e":0,"x":0},{"n":481,"c":"        Wdg_LastBeat[i]                                                            = beat[i] ;","s":"exec","k":3,"i":3,"e":0,"x":0},{"n":482,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":483,"c":"    return( alive ) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":484,"c":"}","s":"exec","k":1,"i":2,"e":1,"x":0},{"n":485,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":486,"c":"BOOL Mon_CheckYawPlausibility(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":487,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":488,"c":"    int32_t        expected, error ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":489,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":490,"c":"    /* the yaw rate implied by the wheel speed difference must match the fused yaw rate */","s":"","k":0,"i":0,"e":0,"x":0},{"n":491,"c":"    expected                                                                    = VehicleState_WheelSpeedDelta * 16 ;","s":"exec","k":10,"i":30,"e":0,"x":0},{"n":492,"c":"    error                                                                        = VehicleState_YawRate - expected ;","s":"exec","k":10,"i":20,"e":0,"x":0},{"n":493,"c":"    if ( error < 0 )","s":"","k":0,"i":0,"e":0,"x":0},{"n":494,"c":"        error                                                                    = -error ;","s":"exec","k":10,"i":30,"e":0,"x":0},{"n":495,"c":"    return( error < 20000 ) ;","s":"exec","k":10,"i":20,"e":0,"x":0},{"n":496,"c":"}","s":"exec","k":10,"i":20,"e":10,"x":0},{"n":497,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":498,"c":"void Wdg_Trigger(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":499,"c":"{","s":"","k":0,"i":0,"e":0,"x":0},{"n":500,"c":"    Wdg_Triggers++ ;","s":"exec","k":10,"i":40,"e":0,"x":0},{"n":501,"c":"}","s":"exec","k":10,"i":10,"e":10,"x":0},{"n":502,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":503,"c":"void SafetyMonitor_MainFunction(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":504,"c":"{","s":"exec","k":10,"i":30,"e":0,"x":0},{"n":505,"c":"    uint32_t    settle ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":506,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":507,"c":"    /* pacing of the monitor task */","s":"","k":0,"i":0,"e":0,"x":0},{"n":508,"c":"    for ( settle=0; settle<40; settle++ )","s":"exec","k":432,"i":864,"e":422,"x":10},{"n":509,"c":"        __asm__ volatile(\"nop\") ;","s":"exec","k":432,"i":432,"e":0,"x":0},{"n":510,"c":"    /* alive supervision every 8 monitor cycles: long enough for every task to have run */","s":"","k":0,"i":0,"e":0,"x":0},{"n":511,"c":"    if ( (++Wdg_SupervisionCycle & 7) == 0 )","s":"exec","k":10,"i":60,"e":1,"x":9},{"n":512,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":513,"c":"        if ( !Wdg_CheckAliveSupervision() )","s":"exec","k":1,"i":2,"e":2,"x":0},{"n":514,"c":"            Dem_ReportErrorStatus(DEM_EVENT_CORE_STALLED, Wdg_Triggers) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":515,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":516,"c":"    if ( !Mon_CheckYawPlausibility() )","s":"partial","k":10,"i":20,"e":10,"x":10},{"n":517,"c":"        Dem_ReportErrorStatus(DEM_EVENT_YAW_IMPLAUSIBLE, (uint32_t)VehicleState_YawRate) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":518,"c":"    Wdg_Trigger() ;","s":"exec","k":10,"i":10,"e":10,"x":0},{"n":519,"c":"}","s":"exec","k":10,"i":20,"e":10,"x":0},{"n":520,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":521,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":522,"c":"/* Initialisation                                                                    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":523,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":524,"c":"void App_InitSharedData(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":525,"c":"{","s":"not","k":0,"i":0,"e":0,"x":0},{"n":526,"c":"    uint32_t    i ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":527,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":528,"c":"    Crc_InitTable8() ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":529,"c":"    BusSim_Lfsr                                                                    = 0xACE1u ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":530,"c":"    Imu_Lfsr                                                                    = 0x1D2Cu ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":531,"c":"    BusSim_FrameCount                                                            = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":532,"c":"    for ( i=0; i<ROUTE_TABLE_LEN; i++ )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":533,"c":"        E2E_LastCounter[i]                                                        = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":534,"c":"    CanGw_TxHead                                                                = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":535,"c":"    CanGw_FramesRouted                                                            = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":536,"c":"    CanGw_FramesDropped                                                            = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":537,"c":"    Dem_LogCount                                                                = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":538,"c":"    Heartbeat_Gateway                                                            = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":539,"c":"    Heartbeat_Fusion                                                            = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":540,"c":"    Heartbeat_MotorCtrl                                                            = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":541,"c":"    VehicleState_YawRate                                                        = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":542,"c":"    VehicleState_WheelSpeedDelta                                                = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":543,"c":"    VehicleState_TorqueRequest                                                    = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":544,"c":"    Fusion_YawFilter.Estimate                                                    = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":545,"c":"    Fusion_YawFilter.Variance                                                    = 65536 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":546,"c":"    Fusion_YawFilter.ProcessNoise                                                = 64 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":547,"c":"    Fusion_YawFilter.MeasureNoise                                                = 4096 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":548,"c":"    Foc_PiD.Kp                                                                    = 9830 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":549,"c":"    Foc_PiD.Ki                                                                    = 655 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":550,"c":"    Foc_PiD.Integral                                                            = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":551,"c":"    Foc_PiD.OutMin                                                                = -Q15_ONE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":552,"c":"    Foc_PiD.OutMax                                                                = Q15_ONE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":553,"c":"    Foc_PiQ                                                                        = Foc_PiD ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":554,"c":"    Foc_Angle                                                                    = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":555,"c":"    for ( i=0; i<3; i++ )","s":"","k":0,"i":0,"e":0,"x":0},{"n":556,"c":"        Wdg_LastBeat[i]                                                            = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":557,"c":"    Wdg_Triggers                                                                = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":558,"c":"    Wdg_SupervisionCycle                                                        = 0 ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":559,"c":"}","s":"not","k":0,"i":0,"e":0,"x":0},{"n":560,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":561,"c":"/* Same ETM programming for every traced core */","s":"","k":0,"i":0,"e":0,"x":0},{"n":562,"c":"BOOL App_StartEtm(volatile struct ChipTrace_ETM_Regs *EtmPtr)","s":"","k":0,"i":0,"e":0,"x":0},{"n":563,"c":"{","s":"not","k":0,"i":0,"e":0,"x":0},{"n":564,"c":"    ChipTrace_ETM_SetExceptionLevels(                                                EtmPtr,","s":"not","k":0,"i":0,"e":0,"x":0},{"n":565,"c":"                                                                                ADDR_CMP_CTXT_EXCLVL_0_S_ENABLED     | ADDR_CMP_CTXT_EXCLVL_1_S_ENABLED         |  ADDR_CMP_CTXT_EXCLVL_2_S_ENABLED     | ADDR_CMP_CTXT_EXCLVL_3_S_ENABLED ,","s":"","k":0,"i":0,"e":0,"x":0},{"n":566,"c":"                                                                                ADDR_CMP_CTXT_EXCLVL_0_NS_ENABLED     | ADDR_CMP_CTXT_EXCLVL_1_NS_ENABLED     |  ADDR_CMP_CTXT_EXCLVL_2_NS_ENABLED     | ADDR_CMP_CTXT_EXCLVL_3_NS_ENABLED ) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":567,"c":"    if ( !ChipTrace_ETM_SetTraceWindow(                            EtmPtr,","s":"not","k":0,"i":0,"e":0,"x":0},{"n":568,"c":"                                                                                EVENT_SELECTOR_1_ALWAYS_TRUE,","s":"","k":0,"i":0,"e":0,"x":0},{"n":569,"c":"                                                                                EVENT_TYPE_SINGLE_RESOURCE) )","s":"","k":0,"i":0,"e":0,"x":0},{"n":570,"c":"        return( FALSE ) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":571,"c":"    ChipTrace_ETM_SetStarted(                                                    EtmPtr) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":572,"c":"    ChipTrace_ETM_Enable(                                                            EtmPtr) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":573,"c":"    return( TRUE ) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":574,"c":"}","s":"not","k":0,"i":0,"e":0,"x":0},{"n":575,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":576,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":577,"c":"/* main() function                                                                    */","s":"","k":0,"i":0,"e":0,"x":0},{"n":578,"c":"/*    Inputs:        none                                                                 */","s":"","k":0,"i":0,"e":0,"x":0},{"n":579,"c":"/*     Outputs:    uint32_t                                                            */","s":"","k":0,"i":0,"e":0,"x":0},{"n":580,"c":"/************************************************************************************/","s":"","k":0,"i":0,"e":0,"x":0},{"n":581,"c":"int main(void)","s":"","k":0,"i":0,"e":0,"x":0},{"n":582,"c":"{","s":"not","k":0,"i":0,"e":0,"x":0},{"n":583,"c":"    #ifdef AARCH64","s":"","k":0,"i":0,"e":0,"x":0},{"n":584,"c":"    union    MPIDR_EL1_Access    Mpidr ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":585,"c":"    Mpidr.global                                                                 = ExecMRS(MPIDR_EL1) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":586,"c":"    #endif","s":"","k":0,"i":0,"e":0,"x":0},{"n":587,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":588,"c":"    #ifdef AARCH32","s":"","k":0,"i":0,"e":0,"x":0},{"n":589,"c":"    union    MPIDR_Access        Mpidr ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":590,"c":"    Mpidr.global                                                                 = ExecMRC_THUMB2(MPIDR_THUMB2) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":591,"c":"    #endif","s":"","k":0,"i":0,"e":0,"x":0},{"n":592,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":593,"c":"    /* one role per core of cluster 0 (Aff1 = cluster, Aff0 = core); cluster 1 parks in default */","s":"","k":0,"i":0,"e":0,"x":0},{"n":594,"c":"    switch ( (Mpidr.bitfield.Aff1 * 4) + Mpidr.bitfield.Aff0 )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":595,"c":"    {","s":"","k":0,"i":0,"e":0,"x":0},{"n":596,"c":"        case 0:            /* Core 0: CoreSight, shared data, then the CAN gateway */","s":"","k":0,"i":0,"e":0,"x":0},{"n":597,"c":"                        ChipTrace_Config_ETR_AllCores(    &S32G3_CoreSight_Configuration) ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":598,"c":"                        S32G3_CoreSight_Configuration.Etm_Cl0_CortexA53_0            = ETM_ON ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":599,"c":"                        S32G3_CoreSight_Configuration.Etm_Cl0_CortexA53_1            = ETM_ON ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":600,"c":"                        S32G3_CoreSight_Configuration.Etm_Cl0_CortexA53_2            = ETM_ON ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":601,"c":"                        S32G3_CoreSight_Configuration.Etm_Cl0_CortexA53_3            = ETM_ON ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":602,"c":"                        SharedVar_Core0_Ready                                        = FALSE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":603,"c":"                        SharedVar_Core1_Ready                                        = FALSE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":604,"c":"                        SharedVar_Core2_Ready                                        = FALSE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":605,"c":"                        SharedVar_Core3_Ready                                        = FALSE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":606,"c":"                        App_InitSharedData() ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":607,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":608,"c":"                        if ( !ChipTrace_Init(                                &S32G3_CoreSight_Configuration ) )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":609,"c":"                            FOREVER ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":610,"c":"                        if ( !App_StartEtm(CT_ETM_Cl0_Core0) || !App_StartEtm(CT_ETM_Cl0_Core1)","s":"not","k":0,"i":0,"e":0,"x":0},{"n":611,"c":"                          || !App_StartEtm(CT_ETM_Cl0_Core2) || !App_StartEtm(CT_ETM_Cl0_Core3) )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":612,"c":"                            FOREVER ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":613,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":614,"c":"                        SharedVar_Core0_Ready                                        = TRUE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":615,"c":"                        while ( ! (SharedVar_Core1_Ready & SharedVar_Core2_Ready & SharedVar_Core3_Ready) )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":616,"c":"                        {} ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":617,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":618,"c":"                        while ( CanGw_FramesRouted + CanGw_FramesDropped < GATEWAY_FRAMES_TO_ROUTE )","s":"partial","k":5,"i":25,"e":4,"x":1},{"n":619,"c":"                            CanGw_MainFunction() ;","s":"exec","k":4,"i":4,"e":4,"x":0},{"n":620,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":621,"c":"                        ChipTrace_Close(                                    &S32G3_CoreSight_Configuration) ;","s":"exec","k":1,"i":3,"e":1,"x":0},{"n":622,"c":"                        break ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":623,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":624,"c":"        case 1:            while ( !SharedVar_Core0_Ready )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":625,"c":"                        {} ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":626,"c":"                        SharedVar_Core1_Ready                                        = TRUE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":627,"c":"                        FOREVER","s":"exec","k":20,"i":20,"e":20,"x":0},{"n":628,"c":"                            SensorFusion_MainFunction() ;","s":"exec","k":20,"i":20,"e":20,"x":0},{"n":629,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":630,"c":"        case 2:            while ( !SharedVar_Core0_Ready )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":631,"c":"                        {} ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":632,"c":"                        SharedVar_Core2_Ready                                        = TRUE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":633,"c":"                        FOREVER","s":"exec","k":11,"i":11,"e":11,"x":0},{"n":634,"c":"                            MotorCtrl_MainFunction() ;","s":"exec","k":11,"i":11,"e":11,"x":0},{"n":635,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":636,"c":"        case 3:            while ( !SharedVar_Core0_Ready )","s":"not","k":0,"i":0,"e":0,"x":0},{"n":637,"c":"                        {} ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":638,"c":"                        SharedVar_Core3_Ready                                        = TRUE ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":639,"c":"                        FOREVER","s":"exec","k":10,"i":10,"e":10,"x":0},{"n":640,"c":"                            SafetyMonitor_MainFunction() ;","s":"exec","k":10,"i":10,"e":10,"x":0},{"n":641,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":642,"c":"        default:        FOREVER ;","s":"not","k":0,"i":0,"e":0,"x":0},{"n":643,"c":"    }","s":"","k":0,"i":0,"e":0,"x":0},{"n":644,"c":"","s":"","k":0,"i":0,"e":0,"x":0},{"n":645,"c":"    return( TRUE ) ;","s":"","k":0,"i":0,"e":0,"x":0},{"n":646,"c":"}","s":"not","k":0,"i":0,"e":0,"x":0}],"functions":[{"name":"Lfsr_Next","line":175},{"name":"Crc_InitTable8","line":189},{"name":"Crc_CalculateCRC8","line":203},{"name":"BusSim_ReceiveFrame","line":219},{"name":"Dem_ReportErrorStatus","line":238},{"name":"CanGw_LookupRoute","line":260},{"name":"E2E_P01Check","line":271},{"name":"Com_UpdateVehicleSignals","line":291},{"name":"CanIf_Transmit","line":303},{"name":"CanGw_RouteFrame","line":316},{"name":"CanGw_MainFunction","line":337},{"name":"Imu_ReadGyroZ","line":349},{"name":"Kalman_Predict","line":355},{"name":"Kalman_Update","line":360},{"name":"SensorFusion_MainFunction","line":369},{"name":"Adc_ReadPhaseCurrents","line":380},{"name":"Foc_ClarkeTransform","line":387},{"name":"Foc_ParkTransform","line":393},{"name":"Pi_Update","line":403},{"name":"Pwm_SetDuty","line":420},{"name":"MotorCtrl_MainFunction","line":445},{"name":"Wdg_CheckAliveSupervision","line":468},{"name":"Mon_CheckYawPlausibility","line":486},{"name":"Wdg_Trigger","line":498},{"name":"SafetyMonitor_MainFunction","line":503}],"summary":{"lines":249,"hit":156,"partial":10}}}