software reset

Başlatan taytis, 21 Ağustos 2006, 23:45:21

taytis

Arkadaşlar selam , güvenlik programları için genelinde belli sürelerde reset atılıyormuş ki program daha sağlık çalışşın ve de kilitlenmeler yaşanmısın diye ,diyelimki  aşağıda ki gibi bir program  yaptım ,böyle bi yapıda nasıl reset attırabilirim ,reset attıtdığım zaman programdaki değişkenler silinmesi lazım ,umarım açıklayıcı bi soru sormuşumdur yardımlarınınz için şimdiden teşekkürler saygılarımla taytis


main (void )

for (; ; )

{
for (; ; )
{

}
}

Erkan Gench

ccs'de reset attırmak için

reset_cpu();

komutunu kullanıyorsunuz.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

PhD

Selam,

Bu dediğiniz reset olayını ilk defa duydum yani düzgün çalışan bir programa reset atma işini ilk defa duydum. Bence eğer programınızda bir sorun yoksa reset atmak bana biraz mantıksız geldi. Ama belli bir şeyi kontrol ediyorsunuzdur mesela voltaj seviyesi falan  istediğiniz değere gelmediyse ve size reset gerekiyorsa o zaman mantıklı olabilir. Ama çoğu kez bu durumda bile reset atmak değil programın istediğiniz bir yerine gitmek daha uygun olabilir.

Ayrıca yazdığınız programın kilitlenmesi durumunda işlemciye reset atmak gerekebilir bu amaçlada WatchDog Timer kullanılabilir. Ama bu yöntemde de programın değişik yerlerine reset atmak değil WDT ın reset atmaması için WDT ı sıfırlarsınız ki WDT ın süresi dolmasın ve düzgün çalışan bir programa reset atılmasın. Ama program kilitlendiği zaman WDT nin süresi dolar ve işlemciye reset atabilirsiniz.

İnşallah düzgün anlatabilmişimdir. Yani benim bildiğim işlemciye reset atma mevzusu bundan ibaret eğer ayrıca sizin dediğiniz gibi bir mantığı varsa ve bilen arkadaşlarımız yardımcı olursa sevinirim.

Kolay gelsin. :)
...hiç...

argeci

selamün aleyküm arkadaşlarında dediği gibi reset atmak için iki yöntem var birisi eğer diyelim belli bir süre dolsun reset atılsın dersen reset_cpu(); komutunu
programın belirlediğin bir yerinden sen çağırısın bu durumda sen komutu verdiğin an hemen işlenir yanlız bir noktayı hatırlatmak isterim reset_cpu(); komutu sadece 18 serisinde çalışan bir komut eğer 16 serisinde çalışacaksan kullanamazsın bu durumda ikinci yöntemi hem 18 hemde 16 serisi için uygulayabilirsin zaten senin vermiş olduğun örnekte o yöntemi kullanıyor.
for (;; )
{ 
} 
veya 
while(true)
{
}

gibi kodlar işlemciyi sonsuz döngüye sokar bu durumda senin watch dog timeri önceden kurmuş olman lazım
#fuses WDT     // PCB/PCM example

               // See setup_wdt for a PIC18 example

main() {

   setup_wdt(WDT_2304MS);

   while (TRUE) {

    restart_wdt();

    perform_activity();

   }

}

bu koda şöyle   bir ekleme yaparsan sanırım örnek teşkil edecektir
#fuses WDT     // PCB/PCM example

               // See setup_wdt for a PIC18 example

main() {

   setup_wdt(WDT_2304MS);

   while (TRUE) {

    restart_wdt();
    if (gun==1)
       {
     for (;; )
          { 
          } 
       }
    }
    perform_activity();
   }
}


bu durumda mesela bir gün geçince reset işlemi gerçekleşmiş olur ama 2. saniye sonra reset atılır watch dog timeri açınca sık sık restart_wdt(); komutu programın belli yerlerinde çağırmalısın
esselamü aleyküm ve rahmetüllahi ve berekatühü Allahın selamı rahmeti bereketi hepinizin ve hepimizin üzerine olsun

Erkan Gench

Alıntı yapılan: "argeci"reset_cpu(); komutu sadece 18 serisinde çalışan bir komut eğer 16 serisinde çalışacaksan kullanamazsın

reset_cpu(); komutu bütün piclerde kullanılabilir.

Moderator Eki:
Alıntı YapRESET_CPU( )
--------------------------------------------------------------------------------
Syntax:  reset_cpu()

Parameters: None

Returns: This function never returns

Function: This is a general purpose device reset.  It will jump to location 0 on PCB and PCM parts and also reset the registers to power-up state on the PIC18XXX.

Availability: All devices

Requires: Nothing

Examples:
if(checksum!=0)
  reset_cpu();

Example Files:  None

Also See:  None
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

argeci

selamün aleyküm haklısınız düzeltiyorum
18 serisi için 
...................    reset_cpu();
0052:  RESET
16 serisi için
....................    reset_cpu();
000C:  CLRF   0A
000D:  BCF    03.5
000E:  GOTO   000


yanlız kast ettiğim yanlış anlaşılmasın
pic datasheetinde bunlar yazıyor
Alıntı Yap
Reset all registers and flags that
are affected by a MCLR Reset.
1K from the current location. First,
This instruction provides a way to
execute a MCLR Reset in software.
benim sadece 18 serisinde kullanılabilir derken kast ettiğim 18 serisinde reset komutu ile yapılan reset mclr ile yapılan resetle aynı anlama geliyor yani bir nevi donanım reseti 16 serisinde ise asm kodundanda anlaşıldığı gibi software tarzı bi reset register temizlemek ve adres pointerını başa almaktan ibaret
esselamü aleyküm ve rahmetüllahi ve berekatühü Allahın selamı rahmeti bereketi hepinizin ve hepimizin üzerine olsun

piedos

void reset_for_16Fseries()
{
setup_wdt(WDT_18MS);
for(;;);
}



CPU 18ms içinde resetlenir.

WDT resette ram silinir mi bilmiyorum, silinmezse

void clear_all_ram_banks();


fonksiyonu ile tam reset yapılır.
Einstein: "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former."