Haberler:

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

Ana Menü

FreeRtos stm32f103c8

Başlatan bicer, 28 Haziran 2021, 23:16:18

bicer

Öncelikle merhaba arkadaşlar formda yeniyim. Stm32f103c8 ile (blue pill olarak satılan)HAL kütüphanesini ve cubemx kullanmadan register seviyesinde basit bir Rtos uygulaması yapmak istiyorum. İlk thread  Analog okuma yapacak. İkinci thread bir giriş pininden gelen veriye göre (0 veya 1 olmasından) bir çıkış pini on off yapacak son thread ise pc13 deki ledi 1sn blink yaptıracak. Keil uvision 5 de bunu nasıl yapabilirim?

Tagli

Hangi aşamada takıldın? Projene FreeRTOS'un gerekli dosyalarını ekledin mi?
Gökçe Tağlıoğlu

bicer

Projede başlangıç aşamasındayım hocam. rtosda task ların nasıl çalıştığını anlamaya çalışıyorum. Yapmak istediğim şey task önceliklerini ve sürelerinin nasıl ayarlandığını öğrenmek. Örneğin öncelik adc okumada olucak sonra gpio kontrolünde.
kullandığım software pack ler ise:
Keil::STM32F1xx_DFP
ARM::CMSIS
ARM::CMSIS-Driver
ARM::CMSIS-FreeRTOS
Keil::ARM_Compiler

mr.engineer

FreeRTOS'da yanlış hatırlamıyorsam sadece preemptive scheduling var. Tam hatırlamamakla birlikte CreateTask gibi bir fonksiyon vardı, bu fonksiyon ile task oluşturacaksın. Fonksiyonun parametrelerinden bir tanesi öncelik ayarı. 0,1,2...7 ye kadar öncelik ataması yapabilirsin. 0 en yüksek oluyordu. FreeRTOS'un sitesinde kendi hazırladığı bir kitap var onu okursan iyi olur.

foseydon

hocam freertos içerisined demo projeler var. öncelikle, o projelerden kendine uygun olanı değiştirip çalışır hale getir. çalıştığını gördükten sonra istediğin fonksiyonu eklemeye başlarsın.

freertos sitesinde mastering freertos diye bir manual var. orda adım adım ilk taskını yazmaktan başlayıp, tasklar arasi senkronizasyona(mutex, semaphore vs.) herşeyi anlatıyor. task önceliği için freertos config dosyasında max_pritorities gibi bir macro var onu ayarlıyorsun. ona göre tasklarına öncelik atayabiliyorsun. task süresi ayarlayamıyorsun diye hatırlıyorum. en yüksek önceliği olan task gelince işini bitirene kadar tüm kaynakları kullanır. eş öncelikli tasklar zamanı paylaşırlar.

bu arada freertos deterministik değil, yani zamanlamyı tamı tamına yapmıyor. o yüzden adc okumasına bağlı kontrol tarzında birşey yapacaksan uygulaman aksayabilir.

Tagli

Alıntı yapılan: mr.engineer - 29 Haziran 2021, 09:38:130 en yüksek oluyordu.
Yok, tam tersi. FreeRTOS'ta 0 en düşük öncelik.

Alıntı yapılan: foseydon - 29 Haziran 2021, 11:06:25bu arada freertos deterministik değil, yani zamanlamyı tamı tamına yapmıyor. o yüzden adc okumasına bağlı kontrol tarzında birşey yapacaksan uygulaman aksayabilir.
ADC verilerini DMA ile bir yere çekip, zamanlamayı ve bir ihtimal hesaplamaları FreeRTOS task'i değil de kesme içinde yaparsan oldukça deterministik bir kontrol elde edebilirsin.
Gökçe Tağlıoğlu

bicer

Alıntı yapılan: Tagli - 29 Haziran 2021, 11:28:18Yok, tam tersi. FreeRTOS'ta 0 en düşük öncelik.
ADC verilerini DMA ile bir yere çekip, zamanlamayı ve bir ihtimal hesaplamaları FreeRTOS task'i değil de kesme içinde yaparsan oldukça deterministik bir kontrol elde edebilirsin.
ADC verilerini Dma ya aktarmayla ilgili örnek kodunuz var mı hocam .Birde adc okumanın frekansını değiştirerek de programda aksamayı engelleyebilir miyim?

bicer

https://github.com/dogukan-bicer/freertos_adc_dma_stm32f103c8/tree/main
Projeyi tamamladım. Adc den gelen veriyi dma ya aktarıp o veri ile pwm kontrol özelliği de ekledim herhangi bir aksama olmadı