我正在阅读并尝试了解 DEM 的 Autosar 规范,并偶然发现了 Dem_EventStstusType 的定义方式。只说了案例,
但不存在这样一种状态可以代表既不预先通过也不预先失败的“灰色地带”。对于我的情况,定义灰色区域是为了确保明确通过或明确失败状态,并通过在失败阈值中使用单个边界来避免模糊状态。 所以,问题是,例如,传感器电压曾经处于失败区域(=预失败),然后变为灰色区域但不在通过区域,我如何表示这种状态?是否仍应预先失败,或预先通过?或者我应该使用保留位(0x05-0xFF)定义一个新的吗?甚至可以这样做吗?
我尝试通过谷歌搜索和GPT找到解决方案,但没有成功。
您应该能够在显示器中处理此问题:
// As defined in EFX libary
boolean Efx_HystCenterHalfDelta_u16_u8(uint16 X, uint16 center, uint16 halfDelta, boolean* state) {
boolean ret = state;
if (X > (center + halfDelta)) {
ret = TRUE;
} else if (X < (center - halfDelta)) {
ret = FALSE;
} else {
ret = state;
}
*state = ret;
return ret;
}
static boolean hyst_state = FALSE;
const uint16 center = 8000; // mV
const uint16 half = 500; // mV
void mon_func(void) {
uint16 v = IoHwAb_GetVoltageX();
boolean state = Efx_HystCenterHalfDelta_u16_u8(v, center, half, &hyst_state);
if (state == FALSE) {
Dem_SetEventStatus(DemEvt_VoltageX_LL, DEM_EVENT_STATUS_FAILED);
} else {
Dem_SetEventStatus(DemEvt_VoltageX_LL, DEM_EVENT_STATUS_PASSED);
}
}
因此,如果它确实在您的灰色区域
center-halfDelta < X < center-halfDelta
更改的状态之外,它只会报告通过/失败。
非常感谢您的宝贵反馈。此外,我很幸运地找到了 stackoverflow.com/questions/70556331/... 这也是你很久以前回答的。它已经解释了“0意味着,监视器还没有报告任何内容(既没有通过也没有失败)。”,所以我可以通过抑制(=不设置事件状态)监视器报告(既不是PrePassed也不是PreFailed)来保持计数器它表明信号处于灰色区域。