Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: bicer - 29 Haziran 2021, 02:16:18

Başlık: FreeRtos stm32f103c8
Gönderen: bicer - 29 Haziran 2021, 02:16:18
Ö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?
Başlık: Ynt: FreeRtos stm32f103c8
Gönderen: Tagli - 29 Haziran 2021, 02:53:55
Hangi aşamada takıldın? Projene FreeRTOS'un gerekli dosyalarını ekledin mi?
Başlık: Ynt: FreeRtos stm32f103c8
Gönderen: bicer - 29 Haziran 2021, 03:20:05
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
Başlık: Ynt: FreeRtos stm32f103c8
Gönderen: mr.engineer - 29 Haziran 2021, 12:38:13
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.
Başlık: Ynt: FreeRtos stm32f103c8
Gönderen: foseydon - 29 Haziran 2021, 14:06:25
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.
Başlık: Ynt: FreeRtos stm32f103c8
Gönderen: Tagli - 29 Haziran 2021, 14:28:18
Alıntı yapılan: mr.engineer - 29 Haziran 2021, 12:38:130 en yüksek oluyordu.
Yok, tam tersi. FreeRTOS'ta 0 en düşük öncelik.

Alıntı yapılan: foseydon - 29 Haziran 2021, 14: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.
Başlık: Ynt: FreeRtos stm32f103c8
Gönderen: bicer - 29 Haziran 2021, 14:38:13
Alıntı yapılan: Tagli - 29 Haziran 2021, 14: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?
Başlık: Ynt: FreeRtos stm32f103c8
Gönderen: bicer - 04 Temmuz 2021, 03:33:24
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ı