Timer ile uğraşıyorum.Takıldığım bir nokta var.Şu hesaplama ile ilgili bir şeyi kaçırıyorum.Daha önce kullandığımda not aldım şöyle bir şey yapmıştım.Bu örnekde bir hata var mı ? Birde 1 saniyelik kesme için bir örnek yazabilirseniz çok iyi olur.:)
timer3 için örnek olabilir.
(16bitlik timer - işlemci 48mhz de çalışıyor)
Period = (1/Clock)*(65535-sayi)*Prescaler
5 = 1/48Mhz * Y * 65535
0,00000002083 * 65535 * Y = 5
0,0013653125 * Y = 5
Y = 3662
sayi = 64803
Bir diğer sorum ise fonksiyonların başına gelen şu tanımı gördüm;
extern "C" void TIM2_IRQHandler(void){ ... }
"extern "C" "nedir ne iş yapar ?
stm32lerde benim bildigim timer degeri verilene ulastiginda kesme uretir .65535 ten cikarmana gerek yok formulde.
extern ifadesi ile tanimlanan bir degisken,fonksiyon diger kutuphane dosyalarinin icinde kullanilabilir.
mesela main.c dosyan var sen burda
extern uint8_t data; diye bisey tanimladin.bunu
benim.h veya benim.c kodunda kullanabilirsin tek yapman gereken kodunun icine
uint8_t data; tanimlaman gerek.
Hocam teşekkür ederim. Extern'ü biliyorum ama "C" ifadesini bilmiyorum.
mesaj birleştirme:: 23 Haziran 2015, 23:01:21
C++ ile derlenen programda fonksiyon implementasyonu bu şekilde belirtilirse derleyici bu kısmı C olarak derliyor.Sonucuna ulaştım.Doğru mudur acaba ?
Alıntı Yapextern "C" is meant to be recognized by a C++ compiler and to notify the compiler that the noted function is (or to be) compiled in C style.
Timer icin periyoda 48000 prescaler icin 10000 verip bi denermisin.
sayin
@justice_for_all, yanlis bir cevap veriyorsunuz.
extern ile extern "C" iki farkli konudur.
simdi sayin
@Baran Ekrem sizin sordugunuz sorudan anladigim kadari ile bir c++ compiler kullaniyorsunuz. C++ derleyicileri fonksiyon isimlerini "mangle" ederler (ezip, bozar). Bu yuzden c++ derleyicilerindeki modullerde c derleyicisi ile derlenmis fonksiyonlari cagirmak isterseniz extern "C" ile bunu belirtirsiniz.
bkz: https://en.wikipedia.org/wiki/Name_mangling (https://en.wikipedia.org/wiki/Name_mangling)
mesaj birleştirme:: 23 Haziran 2015, 23:05:20
ben mesaj yazarken justice_for_all dogru cevabi belirtmis
ben arkadasin extern "C" yi sordugunu sonra farkettim yalnis bilgi vermek istemem kimseye.
Hmmm tamam.Hocam c++ derleyici kullanmıyorum da internette araştırırken karşıma çıktı merak ettim sağ olun.
baran yukarida timer icin ornek degerler verdim onlari denermisin bi.
Yaklaşık 10 saniyelik kesme oluştu.
pardon prescaler 1000 olacak. 48000 * 1000 / 48000000 = 1 saniye
Tamam oldu :) Yani formül ;
Period * prescaler
-------------------
Clock Speed
Oluyor o zaman ?
aynen :)
Bu kadar kolay olacağını sanmıyordum.Dün gece neredeyse bütün cebiri kullandım. :D
Teşekkürler :)
kolay gelsin Egitimlerin guzel bu arada devamini bekliyoruz.
Sıfırdan düzenliyorum hepsini.Elimden geldiğimce paylaşmaya çalışacağım.Buralarda olun arada takılıyorum böyle . :)