Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => RTOS Uygulamaları => Konuyu başlatan: mr.engineer - 11 Haziran 2022, 12:08:50

Başlık: vTaskDelay
Gönderen: mr.engineer - 11 Haziran 2022, 12:08:50
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
Başlık: Ynt: vTaskDelay
Gönderen: MrDarK - 11 Haziran 2022, 14:34:18
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.
Başlık: Ynt: vTaskDelay
Gönderen: mr.engineer - 11 Haziran 2022, 14:43:10
Bu idle task mı oluyor peki? Değilse priority'si nedir?
Başlık: Ynt: vTaskDelay
Gönderen: 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.
Başlık: Ynt: vTaskDelay
Gönderen: mr.engineer - 11 Haziran 2022, 19:40:57
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)
Başlık: Ynt: vTaskDelay
Gönderen: Tagli - 11 Haziran 2022, 20:20:52
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.
Başlık: Ynt: vTaskDelay
Gönderen: mr.engineer - 11 Haziran 2022, 21:34:47
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ı.