FreeRTOS Led Toggle

Bowman

Üye
Katılım
7 Ekim 2022
Mesajlar
98
Bu zamana kadar hep bare metal çalıştım. RTOS konseptlerini öğrenmek için de yeni yeni uygulama yapmaya başlamak istiyorum. Elimde Nuvoton'un bir developer kiti var. M032SG8AE mikroişlemci var üzerinde. FreeRTOS'un source kodlarını indirdim ve projeme import ettim. LED_Task diye bir task oluşturdum. Bu task içerisinde bir ledi toggle ediyorum.

LED_Task:
C:
void LED_Task( void *pvParameters )
{
    while(1)
    {
        PB14 ^= 1;
        
        vTaskDelay(500/portTICK_RATE_MS);
        // delay(500000);
    }
}

Main içerisinde de şu şekilde task oluşturdum:

C:
int main()
{
    SYS_Init();
    SysTick_Config(SystemCoreClock / 1000);
    UART0_Initial();
    GPIO_Initial();
    Timer0_Initial();
    
    xTaskCreate(LED_Task,"LED_Task",configMINIMAL_STACK_SIZE,NULL,1,NULL);
    vTaskStartScheduler();

    
    while(1);
}

Kodu çalıştırdığımda led yanıyor ama geri sönmüyor. Toggle olmuyor sadece 1 defa yanıyor o kadar. Debug girdiğimde kodun fotoğraftaki yerde kaldığını gördüm.

task.png


İnternette araştırma yaptım. Forumlarda xTaskDelay() fonksiyonu ile ilgili yorumlar yapıyorlardı. Bende xTaskDelay() fonksiyonunu yorum yapıp kendim bir delay fonksiyonu yazdım. Bunun sonucunda led toggle oldu. xTaskDelay() varken çalışmıyor. Yukarıdaki ekran görüntüsündeki yerde kalıyor kod. Fakat benim yazdığım delay kodu ile çalışıyor led toggle işlemi. Buradaki problem nedir?
 
Delay için şunu dene:

C:
vTaskDelay(pdMS_TO_TICKS(500));
 
Debugger ile adım adım çalıştırmayı dene. Belki de daha hardware yapılandırılırken en başlarda bir exception oluşuyor.
 
Saat 02.20 ve sonunda problemi çözmeyi başarabildim. Çok canımı sıktığı için bunu bir kenara atmıştım. :kotek1:

Problem şu sanırsam. Burada bir context switch var fakat onun handler'ının map edilmiş hali yok. Yani Nuvoton şunu bilmiyor.

C:
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler

Bu da aslında daha önce karşılaştığım bir tarz problemdi. Interrupt aktif edip handler fonksiyonunu yazmadığım zaman yine aynı şekilde kod takılıyordu. Neyse Nuvoton kullanıp bu problemle karşılaşan birisi olursa FreeRTOSConfig.h dosyasının sonuna bu 3 satırı eklesin. Şunu da farkettim. Nuvoton aslında kendi işlemcisi için FreeRTOSConfig.h dosyasını modifiye edip paylaşmış. Neyse böyle böyle tecrübeleneceğiz artık. :katil1:
 
Merhabalar..
FreeRTOS dosyalarında bu üç kesme özel olarak kullanılıyor rtosun yönetilmesinde payları çok büyük. Bu üç kesmenin nasıl çalıştığını anlarsanız büyük yol katedersiniz. Birde task create edilirken bir hata olursa diye assert fonskiyonu kullanılıyor eğer program oraya giderse taskcreatede bir hata olduğunı anlarsınız, debug yapmada büyük kolaylık sağlıyor
 

Forum istatistikleri

Konular
5,844
Mesajlar
99,687
Üyeler
2,481
Son üye
rfdog12

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top