Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: baran123 - 23 Haziran 2015, 21:52:01

Başlık: [Çözüldü]extern "C" void ve STM32 timer hesabı
Gönderen: baran123 - 23 Haziran 2015, 21:52:01
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 ?
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: justice_for_all - 23 Haziran 2015, 22:39:46
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.
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: baran123 - 23 Haziran 2015, 22:57:35
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 ?
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: justice_for_all - 23 Haziran 2015, 23:03:06
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.
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: mufitsozen - 23 Haziran 2015, 23:04:16
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
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: justice_for_all - 23 Haziran 2015, 23:05:42
ben arkadasin extern "C" yi sordugunu sonra farkettim yalnis bilgi vermek istemem kimseye.
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: baran123 - 23 Haziran 2015, 23:07:41
Hmmm tamam.Hocam c++ derleyici kullanmıyorum da internette araştırırken karşıma çıktı merak ettim sağ olun.
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: justice_for_all - 23 Haziran 2015, 23:11:44
baran yukarida timer icin ornek degerler verdim onlari denermisin bi.
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: baran123 - 23 Haziran 2015, 23:15:43
Yaklaşık 10 saniyelik kesme oluştu.
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: justice_for_all - 23 Haziran 2015, 23:21:25
pardon prescaler 1000 olacak. 48000 * 1000 / 48000000 = 1 saniye
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: baran123 - 23 Haziran 2015, 23:24:52
Tamam oldu :) Yani formül ;

Period * prescaler
-------------------
   Clock Speed

Oluyor o zaman ?
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: justice_for_all - 23 Haziran 2015, 23:35:01
aynen  :)
Başlık: Ynt: extern "C" void ve STM32 timer hesabı
Gönderen: baran123 - 23 Haziran 2015, 23:37:16
Bu kadar kolay olacağını sanmıyordum.Dün gece neredeyse bütün cebiri kullandım. :D
Teşekkürler :)
Başlık: Ynt: [Çözüldü]extern "C" void ve STM32 timer hesabı
Gönderen: justice_for_all - 23 Haziran 2015, 23:42:26
kolay gelsin Egitimlerin guzel bu arada devamini bekliyoruz.
Başlık: Ynt: [Çözüldü]extern "C" void ve STM32 timer hesabı
Gönderen: baran123 - 23 Haziran 2015, 23:45:43
Sıfırdan düzenliyorum hepsini.Elimden geldiğimce paylaşmaya çalışacağım.Buralarda olun arada takılıyorum böyle . :)