Մտածում եմ շեմի ստուգման արդյունավետ միջոցի մասին (ըստ ցանկության հիստերեզի և ուշացման):
Պահանջը/իրավիճակը՝
Ես ուզում եմ ստուգել, օրինակ. ոչ բացասական արժեք (օրինակ՝ բացարձակ ճնշում) վերին և ստորին շեմերի նկատմամբ, ինչը հանգեցնում է համապատասխանաբար գերճնշման սխալի կամ ճնշման տակ սխալի բիտի: Կլինեն մի քանի սահմանված և վերակայման շեմեր: (Ես ուզում եմ կազմակերպել զանգվածով)
Հաշվի առնելով հիստերեզը, պետք է լինեն տարբեր սահմանման և վերակայման արժեքներ, օրինակ. գերճնշման դեպքում սահմանված է p_set
ճնշման շեմ (սխալի բիթը սահմանվում է) և վերակայման շեմ՝ p_reset <= p_set
: Նույնը վերաբերում է առանց ճնշման, բայց այստեղ p_reset >= p_set
, որը ստիպում է համեմատական օպերատորին շրջել.
// Over pressure detection
if (pressure > overPressureSetThld){
// Over pressure -> set error bit
else if (pressure < overPressureResetThld){
// Reset over pressure error bit
}
// Under pressure detection
if (pressure < underPressureSetThld){ // Inverted comparison operator
// Under pressure -> set error bit
else if (pressure > underPressureResetThld){ // Inverted comparison operator
// Reset under pressure error bit
Այլընտրանքները՝
Մտածելով այս մասին՝ ես տեսնում եմ երկու այլընտրանք.
- Իրականացրեք այն ուղիղ դեպի առաջ, ինչպես վերևում -> ավելի մեծ կոդի չափ/«կրկնօրինակ» կոդը (հատկապես հաշվի առնելով ուշացումը)
Համեմատեք հարաբերական արժեքները (հանում և abs, պահանջում է հղման ճնշում) -> կրճատված կոդի չափը, քանի որ անհրաժեշտ է միայն մեկ if-elseif, բայց գործարկման ավելի մեծ բեռ, օրինակ.
if (abs(pressure - REFRENCE_PRESSURE) > relSetThld){ // Threshold relative to reference and positive // Set over/under pressure error bit else if (abs(pressure - REFRENCE_PRESSURE) < relResetThld){ // Threshold relative to reference and positive // Reset over/under pressure error bit
Հարց.
Ես հակված եմ օգտագործել այլընտրանք 2-ը, բայց ես ինքս ինձ (և ձեզ) հարցնում եմ, թե արդյոք կա դա անելու ավելի լավ միջոց: Առաջարկությունները ողջունելի են:
Լավագույն Քրիստոֆ