İlk FreeRTOS uygulaması

Başlatan Kırambor, 23 Haziran 2023, 16:18:54

Kırambor

RTOS konseptini öğrenmeye çalışıyorum. Elimde Nuvoton'un M032SG8AE mikroişlemcisi var. Ulaşılabilir olduğu için FreeRTOS'u seçtim. Çok basit bir ledi toggle eden bir task oluşturmaya çalıştım. Gerekli source kodları import ettim projeme. LED_Task diye bir task ayarladım. Fakat led yanıyor ama sönmüyor. Debug girdim. Kod ledi yaktıktan sonra M031Series.s dosyasında PendSV_Handler'da kalıyor. Bunun sebebini araştırdım ve vTaskDelay() fonksiyonu ile ilgili olabileceğini farkettim. vTaskDelay() fonksiyonunu yorum yaptım. Elimle basit bir delay fonksiyonu yazdım bu sefer olması gerektiği gibi led toggle oluyor. RTOS olayına ilk defa giriyorum o yüzden çok temel seviyede bilgim var. Bu sorunun sebebi nedir?

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

Main() fonksiyonu:

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);
}

mr.engineer

Bu kodda ben bir hata göremiyorum. Arka planda ne ayarlar yapıldı onu bilmiyorum tabi.

Bu koddan gördüğüm kadarı ile çalışması gerekiyor. TaskDelay fonksiyonu Led_Task'ını askıya alır o sırada idle task çalışır daha sonra tekrar senin task'ın çalışmaya devam eder. Scheduler ayarını değiştirmediysen böyle çalışması gerekiyor diye düşünüyorum.

Bir de task'ın önceliğini yükseltip dener misin?

Kırambor

Alıntı yapılan: mr.engineer - 23 Haziran 2023, 21:19:48Bu kodda ben bir hata göremiyorum. Arka planda ne ayarlar yapıldı onu bilmiyorum tabi.

Bu koddan gördüğüm kadarı ile çalışması gerekiyor. TaskDelay fonksiyonu Led_Task'ını askıya alır o sırada idle task çalışır daha sonra tekrar senin task'ın çalışmaya devam eder. Scheduler ayarını değiştirmediysen böyle çalışması gerekiyor diye düşünüyorum.

Bir de task'ın önceliğini yükseltip dener misin?
task önceliğini artırdım fakat değişen bir şey olmadı. Hatta kod tam burada tıkanıyor. Ben idle task gibi bir tanımlama vs bir şey yapmadım ondan dolayı olabilir mi?