watch dog คืออะไร ข้อควรระวังคืออะไรบ้าง
posted on 21 Aug 2008 16:37 by pandamaster in MCU
watch dog คืออะไร ข้อควรระวังคืออะไรบ้าง
watch dog แปลตรงตัวว่า สุนัขเฝ้ายาม ก็คือ ตัวตรวจสอบ cpu นั้นเองว่า cpu ทำงานเป็นปกติหรือไม่อย่างไร
ก่อนที่จะใช้งาน watch dog นั้นจะต้องมีการเลือกว่าจะกระตุ้นทุกๆ เวลาเท่าไหร่ เช่น ทุกๆ 1 วินาที
เราะจะต้องเขียนโปรแกรมกระตุ้น watch dog ทุกเวลาที่เราได้ตั้งไว้ (หากใช้ watch dog ภายนอกด้วยชิพ
ds1232 ต้องส่งพัลล์ 1 ลูกทุกๆเวลาที่เราตั้งไว้ออกไปยังขากระตุ้นของชิพ ds1232 หากใช้ watchdog
ภายในตัว cpu จะต้องกระตุ้นที่ registor watchdog นั้นๆ)
หากภายในกำหนดยังไม่มีการกระตุ้น ตัว watch dog จะทำหน้าที่ reset cpu ทันที
ตัวโปรแกรมจะเริ่มต้นทำงานใหม่ ดังนั้นค่าบางค่าจะหายไปครับ!!!!!!
หากเป็นโปรแกรมประเภท counter ค่าการนับชิ้นงานจะหายไปด้วย ดังนั้นแนะนำว่างานประเภท counter
นับชิ้นงานน่าจะมีการใช้งาน nonvalentile ram ด้วย เมื่อนับเสร็จแล้วก็เก็บข้อมูลลง nonvalentile ram
ซะหนึ่งครั้ง เวลา hang ก็ทำการ load ค่าจาก nonvalentile ram มานับต่อเช่น ตัวอย่างนี้ครับ
counter นับงานได้ 30 ชิ้น บังเอิญ ไฟดับหมด แต่เนื่องจากได้มีการเขียนโปรแกรม load ค่ามานับต่อ
ดังนั้นจึงสามารถ เอาค่า 30 มาเริ่มนับ ตัวต่อไป 31 ได้ทันที
ยกตัวอย่างการเขียนโปรแกรมคร่าวๆ ให้ดูนะครับ
void main(void)
{
unsigned int counter;
counter=nvram();//เอาค่าจาก nv ram
if (counter>65534)
{
showlcd("full counter 16 bit","line1");
showlcd("press button clear","line2");
waitpressclear();
counter=0;}
tik_watchdog();
while(1)
{
tik_watchdog();
if (sensor)
{
while(!sensor);
counter++;
savenvram();
showlcd(counter,"line1");
showlcd("","line2");
tik_watchdog();
}
}
}
watch dog แปลตรงตัวว่า สุนัขเฝ้ายาม ก็คือ ตัวตรวจสอบ cpu นั้นเองว่า cpu ทำงานเป็นปกติหรือไม่อย่างไร
ก่อนที่จะใช้งาน watch dog นั้นจะต้องมีการเลือกว่าจะกระตุ้นทุกๆ เวลาเท่าไหร่ เช่น ทุกๆ 1 วินาที
เราะจะต้องเขียนโปรแกรมกระตุ้น watch dog ทุกเวลาที่เราได้ตั้งไว้ (หากใช้ watch dog ภายนอกด้วยชิพ
ds1232 ต้องส่งพัลล์ 1 ลูกทุกๆเวลาที่เราตั้งไว้ออกไปยังขากระตุ้นของชิพ ds1232 หากใช้ watchdog
ภายในตัว cpu จะต้องกระตุ้นที่ registor watchdog นั้นๆ)
หากภายในกำหนดยังไม่มีการกระตุ้น ตัว watch dog จะทำหน้าที่ reset cpu ทันที
ตัวโปรแกรมจะเริ่มต้นทำงานใหม่ ดังนั้นค่าบางค่าจะหายไปครับ!!!!!!
หากเป็นโปรแกรมประเภท counter ค่าการนับชิ้นงานจะหายไปด้วย ดังนั้นแนะนำว่างานประเภท counter
นับชิ้นงานน่าจะมีการใช้งาน nonvalentile ram ด้วย เมื่อนับเสร็จแล้วก็เก็บข้อมูลลง nonvalentile ram
ซะหนึ่งครั้ง เวลา hang ก็ทำการ load ค่าจาก nonvalentile ram มานับต่อเช่น ตัวอย่างนี้ครับ
counter นับงานได้ 30 ชิ้น บังเอิญ ไฟดับหมด แต่เนื่องจากได้มีการเขียนโปรแกรม load ค่ามานับต่อ
ดังนั้นจึงสามารถ เอาค่า 30 มาเริ่มนับ ตัวต่อไป 31 ได้ทันที
ยกตัวอย่างการเขียนโปรแกรมคร่าวๆ ให้ดูนะครับ
void main(void)
{
unsigned int counter;
counter=nvram();//เอาค่าจาก nv ram
if (counter>65534)
{
showlcd("full counter 16 bit","line1");
showlcd("press button clear","line2");
waitpressclear();
counter=0;}
tik_watchdog();
while(1)
{
tik_watchdog();
if (sensor)
{
while(!sensor);
counter++;
savenvram();
showlcd(counter,"line1");
showlcd("","line2");
tik_watchdog();
}
}
}
Tags: cpu, nonvalentile, ram, reset, watch dog1 Comments
เพราะผมอาจจะไม่ได้จับด้านนี้มากก็ได้นะคร้าบ
#1 By !@!MaGGi_MaX!@! on 2008-08-28 21:38