Genel

CMSIS-RTOS 5

RTOS çalışırken ilk olarak main fonksiyonu otomatik olarak aktif bir thread olarak oluşturulur. Main fonksiyonunun bu özelliği ile onu ayrı bir thread olarak kullanabiliriz. Main fonksiyonunu bir thread olarak kontrol etmek ve yönetmek istiyorsak daha önce de bu iş için kullanıldığından bahsettiğim threadID kimliğini almamız gerekmektedir. Bu nedenle çağırmamız gereken ilk RTOS fonksiyonu, o anda çalışan threadın kimliğini döndüren osThreadGetId () ‘dir. Main Threadın genelkullanımı aşağıdaki gibidir.

osThreadId main_id; //main fonksiyonunun thradID tutacak değişkeni tanımladık.
void main (void)
{

main_id = osThreadGetId ();//Main fonksiyonunun Thread kimliğini atadık.

}

Şimdi bir önceki dersteki programımızda eklediğimiz Init_Thread kısımlarını yorum haline getirelim.  projeoluşturma14

Burada Thread oluşturmak için Init_Thread fonksiyonu yerine bu fonksiyonun oluşturulmasında kullanılan osThreadCreate() fonksiyonunu kullanacağım.  Bu fonksiyon ilişkisini Thread.c içinde tanımlanmıştır. osThreadCreate fonksiyonunu tanımını ise CMSIS->RTX_Conf_CM.c(RTOS:Keil RTX)->cmsis_os.h başlık dosyası içinde bulunur. projeoluşturma15

Şimdi daha fazla uzatmadan öncelikle cihazımızın kullanımını sağlayan stm32f4xx.h başlık dosyasını Threadlarımızın kimliklerini tutacak değişkenleri tanımlayalım.

projeoluşturma16

Artık daha önce bahsettiğim şekilde Threadlarım oluşturmaya başlayalım.

projeoluşturma17

16. satırda void veri tipinde Thread1 Threadını tanımladıkvoid const *argument thread oluşturulurken dışarıdan alınan argümanı temsil eder. 17. satırda GPIO_Init_TypeDef yapısını taşıyan GPIO_InitStructure adındaki yapıyı tanımladık.18. satırda GPIOD portuna bağlı pinleri kullanabilmek için bu porta giden clock sinyali aktif edilmiştir. Eğer bunu yapmasaydık bu portu kullanamazdık 19. satırda GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; komutyla GPIO çıkış olarak atanmıştır.  20. satırda GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;  komutuyla pin yapısı Push-Pull yapısında tanımlanmıştır. Burada dışarıya sinyal verileceği için pull-down/up ayarı yapılmasına gerek görmedim.  21. satırda GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;  komutuyla GPIO_InitStructure nesnesine ait pini 13. pin olarak atanmıştır. 22. satırda GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;Komutuyla GPIO hızı 100MHz olarak tanımlanmıştır.23. satırda GPIO_Init(GPIOD,&GPIO_InitStructure); komutuyla GPIO_InitStructure nesnesinin içindekiler GPIOD(D portu)’ye atanır. 24. satırda while(1) ile sonsuz bir döngü oluşturulmuştur.25. satırda GPIO_SetBits(GPIOD,GPIO_Pin_13); komutuyla D portuna bağlı 13. pin HIGH seviyesine çıkarılır. 26. satırda yeni bir fonksiyonla karşılaşıyoruz. osDelay() fonksiyonu 100 milisaniye kadar bekleme sağlar.26. satırda GPIO_ResetBits(GPIOD,GPIO_Pin_13); komutuyla 13. pin LOW seviyesine indirilir. Tekrar 100 milisaniye beklenir.projeoluşturma18

Yukarıda Thread2 ve main thread bulunmaktadır. Bunların açıkklaması Thread1’in açıklamasıyla aynıdır. Sadece pinler farklıdır. Bundan sonra yapmamız gereken iş Threadların yapılarının isimlerini, önceliklerini(ileride bunun üzerinde duracağım.),örnek-kopya sayısını ve hafıza alanını tanımlayalım.RTOS main fonksiyonunu Threadını otomatik oluşturup ,önceliğini (priority) osPriorityNormal olarak oluşturur.

projeoluşturma19

osPriorityNormal;Öncelik normal .

1;Thread’tan bir tane oluşturulmuştur.

0;kB hafıza alanı kaplar.

Threadlarımızı oluşturup onları çalıştırmaya başlayan fonksiyonumuz. osThreadCreate fonksiyonumuzdur. Bu fonksiyon ayrıca Threadlara argüman göndermemizi sağlar. Bu fonksiyonun genel tanımı aşağıdaki gibidir.

thread1_id = osThreadCreate(osThread(threadx), NULL);

osThread ilgili thread’e ulaşmamızı sağlayan bir makrodur. Şimdi aşağıdaki gibi Threadlarımızı oluşturalım. projeoluşturma20

Bütün bunları yapıp derleyip karta(stm32f4 discovery) yüklerseniz. Mavi,kırmızı ve turuncu ledlerin hızlı hızlı yanıp söndüğünü göreceksiniz.

 

 

CMSIS-RTOS 5&rdquo için 1 yorum

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

%d blogcu bunu beğendi: