Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

vTaskDelay

Başlatan mr.engineer, 11 Haziran 2022, 12:08:50

mr.engineer

Merhaba,
Aşağıdaki linkte esp-idf'e ait bir örnek kod var. Açıklama kısmında şu yazıyor: "Starts a FreeRTOS task to print "Hello World".
Ben burada task nerede create ediliyor ve task fonksiyonu nerede anlamadım. Main içinde vTaskDelay fonksiyonu çağrılmış. Bir task olmadan bu fonksiyonu nasıl çağırıyor? FreeRTOS dökümanlarında böyle bir şey göremedim. vTaskDelay çağıran fonksiyonu block state'e sokuyor, burada nasıl bir davranış sergiliyor?



https://github.com/espressif/esp-idf/blob/master/examples/get-started/hello_world/main/hello_world_main.c

MrDarK

Esp-idf freertos ile portlanmış bir sdkdır. app_main fonksiyonu başka bir yerde create edilmektedir. O sebeple create fonksiyonunu göremiyoruz. Burada da app main taskı dediginiz gibi delay ile blocklanıyor. Eğer delay kullanmaz ise watchdog sebepli reset alacaktır. Çünkü feed işi idle task içinde yapılıyor.
Picproje Eğitim Gönüllüleri ~ MrDarK

mr.engineer

Bu idle task mı oluyor peki? Değilse priority'si nedir?

foseydon

@MrDarK in dedigi, aslinda esp uzerinde freertos kosuyor. sen o kisimlari pek gormuyorsun. freertos manualini okursan daha iyi kavrarsin olayi.

taskdelay verince, islemci baska taska geciyor. burada idle_task diye tanimli bir task var, freertos'ta, normalde bu task baska hicbir task'in cpu time'a ihtiyaci yoksa aktif olur. yani priosu en dusuktur. hatta normalde freertos config dosyasinda bu task'i kullanip kullanmayacagina da karar verebilirsin. ama idf'yi yapanlar, bu taski kullanmis. orada kendi islerini goruyor.

mr.engineer

Alıntı yapılan: foseydon - 11 Haziran 2022, 18:53:11@MrDarK in dedigi, aslinda esp uzerinde freertos kosuyor. sen o kisimlari pek gormuyorsun. freertos manualini okursan daha iyi kavrarsin olayi.

taskdelay verince, islemci baska taska geciyor. burada idle_task diye tanimli bir task var, freertos'ta, normalde bu task baska hicbir task'in cpu time'a ihtiyaci yoksa aktif olur. yani priosu en dusuktur. hatta normalde freertos config dosyasinda bu task'i kullanip kullanmayacagina da karar verebilirsin. ama idf'yi yapanlar, bu taski kullanmis. orada kendi islerini goruyor.

Yani main fonksiyonu idle task mı oluyor? (esp-idf için)

Tagli

ESP-IDF'yi pek bilmiyorum ama anladığım kadarıyla durumu özetleyeyim:

1) Kendi kodunu yazdığın main aslında gerçek bir main değil, IDF tarafından oluşturulmuş bir task fonksiyonu
2) Arka planda çalışması gereken kullanıcıdan gizli, IDF içine gömülü, düşük öncelikli bir task daha var. Bu task'i boğarsan, yani çalışmasına uzun süre boyunca fırsat vermezsen işlemci reset yiyor.
Gökçe Tağlıoğlu

mr.engineer

Alıntı yapılan: Tagli - 11 Haziran 2022, 20:20:52ESP-IDF'yi pek bilmiyorum ama anladığım kadarıyla durumu özetleyeyim:

1) Kendi kodunu yazdığın main aslında gerçek bir main değil, IDF tarafından oluşturulmuş bir task fonksiyonu
2) Arka planda çalışması gereken kullanıcıdan gizli, IDF içine gömülü, düşük öncelikli bir task daha var. Bu task'i boğarsan, yani çalışmasına uzun süre boyunca fırsat vermezsen işlemci reset yiyor.

Anladım, teşkkürler. Evet, idle task çalışmazsa watchdog timer reset attırıyor. Zaten bildiğim kadarıyla tüm sistemlerde idle task'a çalışması için bir miktar zaman ayrılmalı.