5.5.20 · D1 · Coding › Embedded Systems & Real-Time Software › Software testing in embedded — unit tests on host, HIL testi
Embedded code ke do hisse hote hain jo saath jude rehte hain: pure thinking (math, decisions, parsing) aur duniya ko touch karna (sensors padhna, motors chalana). Agar tum un dono hisson ko alag-alag boxes mein rakhte ho, toh thinking-half ko apne laptop pe fast test kar sakte ho aur real hardware pe tabhi jaate ho jab sach mein duniya ki zaroorat ho. Yeh poora topic usi dividing line ko kheenchne aur sahi side pe test karne ki craft hai.
Parent note padhne se pehle, tumhe uske har word aur symbol ki ownership leni hogi. Hum unhe ek-ek karke banate hain — har ek apni jagah earn karta hai, phir agli aati hai.
Parent note baar baar "host" aur "target" kehta hai. Ye sirf do alag computers hain.
Definition Host aur Target
Host woh computer hai jis par tum develop karte ho — tumhara laptop ya desktop. Bada screen, badi memory, fast.
Target woh computer hai jis par tumhara program finally run karega — ek tiny chip jo circuit board par chipki hoti hai.
Neeche diye do boxes dekho. Same program, lekin do bilkul alag ghar.
Yeh topic ko kyun chahiye: parent ka har sentence is baare mein hai ki in dono machines mein se kaun sa ek given test run karta hai. "Test on host" matlab left box; "HIL" matlab right box jo real sensors se connected ho.
Definition Microcontroller (MCU)
Ek microcontroller ek poora tiny computer hota hai — processor, memory, aur input/output pins — sab ek hi chip par. Yeh woh "brain" hai jo target board par baitha hota hai.
Parent likhta hai "32KB RAM ". Har piece earn karte hain:
Definition RAM aur KB / KB=1024 ka idea
RAM (Random-Access Memory) woh scratch paper hai jis par MCU kaam karte waqt likhta hai. Power off karo aur yeh saaf ho jaata hai.
KB matlab kilobyte ≈ 1000 bytes (exactly 1024 ). Ek byte 8 on/off switches hoti hai, ek letter store karne ke liye kaafi.
32 KB = 32 × 1024 = 32768 bytes — lagbhag 32 hazaar letters ki scratch space. Tumhare laptop mein isse lakho guna zyada hai.
Intuition Kyun "tum bas printf debug nahi kar sakte"
printf text ko screen par print karta hai. Ek bare MCU mein na screen hai aur na hi koi khaas scratch paper . Ek message print karna utni memory le sakta hai jitni poore program ke paas ho. Yahi scarcity exactly woh reason hai kyun hum thinking-half ko roomy host par test karna prefer karte hain.
Parent GPIO, ADC, PWM, UART, CAN, timer, interrupt, ISR use karta hai. Ye sab peripherals hain — MCU ke andar ya uske paas chhote helper circuits jo use physical world se connect karte hain. Inhe ek-ek karke lete hain.
Definition Peripheral zoo (simple words mein)
GPIO (General-Purpose Input/Output): ek single wire jise MCU ya toh read kar sakta hai (kya yeh pin high hai ya low?) ya drive kar sakta hai (is pin ko high ya low karo). Ek button ya LED yahaan rehta hai.
ADC (Analog-to-Digital Converter): ek smooth voltage (jaise temperature sensor se 1.65 volts) ko ek whole number mein badalta hai jis par MCU compute kar sake.
DAC (Digital-to-Analog Converter): ulta — ek number ko wapas ek wire par real voltage mein badalta hai.
PWM (Pulse-Width Modulation): ek pin ko bahut fast on aur off karke "in-between" power level fake karne ka tarika. 50% time on ≈ half power. Yeh motors drive karta hai aur LEDs dim karta hai.
Timer : ek counter jo fixed rate par tick karta hai, time measure karne ya PWM generate karne ke liye use hota hai.
UART / CAN : chips ke beech wires par bytes bhejne ke do tarike. UART = simple two-wire chat; CAN = tough multi-device bus jo cars mein use hoti hai.
Definition Interrupt aur ISR
Ek interrupt hardware ka "kandhe par thapki" hai: jab koi event hota hai (ek byte aata hai, ek timer tick karta hai), MCU jo bhi kar raha tha use pause karta hai aur use handle karne ke liye jump karta hai.
ISR (Interrupt Service Routine) woh chhoti function hai jo us thapki par run hoti hai.
Yeh topic ko kyun chahiye: ye peripherals exactly woh parts hain jo tumhare laptop par exist nahi karte . Yahi woh poori problem hai jo yeh topic solve karta hai — aur agli idea ka reason bhi yahi hai.
Parent ka "BAD" code ADC1->DR aur TIM2->CCR1 likhta hai. Ye registers hain.
Ek register ek special memory slot hai jo directly ek peripheral se wired hota hai . Usme ek number likhna physically hardware change karta hai ; use padhna physically hardware padhta hai .
ADC1->DR = ADC ka D ata R egister padhna → latest converted number lena.
TIM2->CCR1 = timer 2 ka C ompare register likhna → PWM level set karna.
Intuition Kyun registers host testing impossible banate hain
Tumhare laptop par koi ADC1 nahi hai. Woh address kuch bhi point nahi karta. Isliye koi bhi function jo register touch karta hai host par compile ya run hi nahi ho sakta — jab tak hum use ek aisi layer ke peeche nahi chhupa lete jo hum swap kar sakein. Woh layer next hai.
Ye chaar words "unit tests on host" ka beating heart hain.
Abstraction matlab complicated machinery ke saamne ek simple named door rakhna, taaki callers door use karein aur machinery kabhi na dekhein. hal_adc_read(channel) ek door hai; register poking uske peeche chhup jaata hai.
Definition HAL — Hardware Abstraction Layer
HAL un saari doors ka collection hai — hal_... functions ka ek tidy set jo code ka har doosra part registers touch karne ki jagah use karta hai. Dekho Hardware Abstraction Layer (HAL) Design .
Ab trick: kyunki har koi door knock karta hai, machinery ko nahi, hum same door ke peeche alag machinery rakh sakte hain depending on kahan run ho raha hai.
Ek stub ek fake function hai jo bas ek fixed, hardcoded answer return karta hai taaki code compile aur run ho sake (jaise hal_adc_read hamesha 0 return kare).
Ek mock ek smarter fake hai jise tum program kar sakte ho: tum use batate ho "jab channel 1 ke liye pucha jaaye, 4095 return karo", phir baad mein check karo ise kaise call kiya gaya . Dekho Mocking and Stubbing in C .
Yeh topic ko kyun chahiye: poora "test on host" tier sirf isliye kaam karta hai kyunki har HAL door ke peeche hum real register-poker ki jagah ek mock swap kar sakte hain jo hum apne test se control karte hain.
Parent ke worked examples do real control algorithms use karte hain. Tumhe inhe master nahi karna, lekin tumhe inke symbols pehchanne chahiye.
Ek PID controller ek measured value ko target ki taraf steer karta hai. Uski update line ye symbols use karti hai:
Definition PID symbols simple words mein
setpoint — woh value jo tum chahte ho (target temperature 25 ).
measured — woh value jo abhi hai .
error = setpoint − measured — tum kitne off ho.
K p , K i , K d — teen tuning knobs (gains ) jo decide karte hain kitni hard react karna hai.
integral — past error ka running sum (yaad hai ki "hum kaafi der se low hain").
derivative — abhi error kitni tezi se change ho raha hai.
dt — do updates ke beech ka tiny time gap.
Yeh topic ko kyun chahiye: parent ka PID test fabs(pid.integral) < 0.01 check karta hai. fabs sirf absolute value hai (zero se doori, sign hata ke). Test kehta hai: perfect tracking ke baad, past-error ki memory drift nahi karni chahiye — ek pure-math property jo host par prove ho sakti hai.
HIL example ek throttle voltage ko PWM percentage mein map karta hai. Do conversions aate hain:
Yeh topic ko kyun chahiye: parent assert karta hai ki pwm_duty 50.0 ke 2.0 ke andar hona chahiye, aur ADC = 4095 PWM ko 1000 par cap kare. Ye exactly woh numbers hain jo hum neeche verify karte hain.
Definition Real-time aur deadlines
Real-time ka matlab "fast" nahi hota — matlab "time par, har baar". Ek response tabhi correct hai jab woh apni deadline se pehle ho jaaye.
T deadline — woh vaada: "itne time mein react karo".
T measured — woh reality jo tumne actually hardware par observe ki.
Parent ki rule: T measured < T deadline har test case ke liye.
1 ms (millisecond) = 1000 1 second.
1 μ s (microsecond) = 1 , 000 , 000 1 second = 1000 1 ms .
Toh "100 μ s mein respond karo" ek millisecond ka daswan hissa hai — aankhon se dekhne ke liye bahut chhota; tumhe use dekhne ke liye ek oscilloscope chahiye.
Yeh topic ko kyun chahiye: host tests time mock karte hain — yeh pretend karte hain ki time beetta hai — isliye yeh physically real microseconds measure nahi kar sakte. Yahi gap exactly woh reason hai kyun HIL exist karta hai.
Definition HIL ke characters
DUT (Device Under Test): woh real board jo tumhara firmware run kar rahi hai — woh cheez jo test ho rahi hai.
Test controller : ek PC jo test script run karta hai jo DUT ko poke karta hai aur uske answers padhta hai.
Stimulus : fake sensor signals jo andar daale jaate hain (ek DAC / signal generator ke zariye).
Response capture : DUT ke outputs ko wapas padhna (ADC / logic analyzer ke zariye).
Poora arrangement ek loop banata hai: controller → stimulus → DUT → response → controller. Isliye hardware-in-the-loop .
Related tools jo baad mein milenge: Real-Time Operating Systems (RTOS) (un tasks ko schedule karta hai jinki timing HIL check karta hai), Fault Injection Testing (deliberately inputs todna), aur Continuous Integration for Embedded (yeh sab automatically run karna).
Peripherals GPIO ADC PWM UART
Mocks and Stubs swap machinery
Interrupts and ISR timing
Real-time deadlines in us and ms
HIL testing on real board
Two-tier testing strategy
Parent note padhne se pehle har ek cheez zor se answer karo.
Host aur target mein kya fark hai? Host = woh roomy computer jis par tum develop karte ho; target = woh tiny MCU jis par tumhara firmware finally run karta hai.
32KB mein kitne bytes hote hain? 32 × 1024 = 32768 bytes.
ADC kya karta hai? Ek real smooth voltage ko ek whole number mein badalta hai jis par MCU compute kar sake.
DAC kya karta hai? Ulta — ek number ko ek wire par real voltage mein badalta hai.
PWM ek line mein kya hai? Ek pin ko fast on/off karna taaki average ek in-between power level ki tarah kaam kare.
Koi function jo ADC1->DR padhta hai woh tumhare laptop par kyun run nahi kar sakta? Host par aisa koi register nahi hai; woh address kuch bhi point nahi karta.
HAL kya hai? hal_... "doors" ka ek tidy set taaki code kabhi directly registers touch na kare, jisse hum implementations swap kar sakein.
Mock vs stub? Stub ek fixed hardcoded value return karta hai; mock programmable hota hai aur record karta hai kaise call kiya gaya.
fabs kya hai?Absolute value — zero se doori, sign hata ke.
Kya real-time ka matlab fast hota hai? Nahi — matlab deadline se pehle, time par, har baar.
Ek millisecond mein kitne microseconds hote hain? 1000 .
3.3V supply ka 50% kitna voltage hai? 1.65 V .
Full scale par 12-bit ADC kaunsa number deta hai? 4095 (yeh 2 12 − 1 hai).
HIL rig mein DUT kya hai? Device Under Test — woh real board jo tumhara firmware run kar rahi hai.