Hangi mikrodenetleyici yazılım dili tercih ediliyor?

Başlatan Recep METE, 31 Ocak 2022, 15:11:15

Recep METE

Değerli arkadaşlar, eskiden ccs c,pic c vb... yazılım dilleri kullanılırdı. Bunlardan ccs c çok popülerdi. Günümüzde hangi microdenetleyci dili daha çok tercih edilyor, öğrenebilir miyim?
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Tagli

Yazılım dili mi soruyorsun, yoksa derleyici mi?

Mikrodenetleyicilerde dil olarak hala C ağır basıyor. Cortex M gibi 32 bit işlemciler için C++ da bir seçenek ve eğer imkan varsa ben C++ kullanmayı tercih ediyorum. Nadiren bazı cihazlarda MicroPython da kullanılabiliyor, ancak bence bununla ciddi bir iş yapılması pek mümkün olmaz. 32 bit işlemcilerde Rust'ın da adı geçmeye başladı, ama tutup tutmayacağı belli değil. Günümüzde assembly kullanımının çok azaldığını tahmin ediyorum. Diğer dillerde yazılmış projelerin zamanlama açısından kritik bazı fonksiyonları assembly ile yazılıp projeye eklenebilir. Diğer türlüsü (tamamen assembly ile proje yapmak) mantıklı değil.

Derleyici konusuna gelirsek, başta Cortex M olmak üzere pek çok işlemcide piyasaya GCC ve türevleri hakim. Bunlar çoğu zaman Eclipse tabanlı bir IDE'ye entegre edilerek kullanılıyorlar. Zaman zaman üreticilerin kendi derleyicileri de olabiliyor, nedense aklıma ilk gelenler TI'ın kendi derleyicisi (adını hatırlamıyorum) ve Keil-MDK. Başkaları da vardır muhtemelen. RISC-V tarafını hiç bilmiyorum, ama muhtemelen GCC gelecekte onu da destekleyecektir. Son yıllarda clang de yaygınlaşmaya başladı sanırım, ama ben kullanmadım (galiba).

8 bit dünyası derleyici konusunda daha çeşitli çünkü genelde her işlemci kendi mimarisini kullanıyor ve derleyicisini de genelde çip üreticisi sağlıyor. PIC için sanırım XC8 doğru bir tercih olacaktır. STM8 & 8051 başta olmak üzere birkaç tane daha farklı mimariyi destekleyen SDCC de ücretsiz bir seçenek olarak düşünülebilir, ancak kullanımı biraz uğraştırıcı anladığım kadarıyla.

Yukarıda yazdıkları dışında başka firmaların da derleyici çözümleri olabilir. Aklıma ilk gelen IAR oldu. Birden fazla mimari için oldukça pahalı fiyatlarla profesyonel derleyiciler satıyorlar diye biliyorum.

CCS C gibi standart dışı bir C deneyimi sunan garip derleyicilerin kullanımını tavsiye etmiyorum. Benzer şekilde PicBasic veya JAL gibi dillerin de profesyonel işlerde pek yeri olmadığını düşünüyorum.

Bu arada, diller ve derleyicilerin yanı sıra değinilmesi gereken bir konu daha var: Yazılım altyapıları (framework'ler). Örneğin ST'nin Cube & HAL kütüphaneleri. Bunların projenin yapısında çok ciddi etkileri var. Pek çok üretici, çipleri ile kullanılmak üzere bu tür kütüphaneler/framework'ler de sağlıyor. Ben şahsen pek sevmiyorum hiç birini. Sadece CMSIS kullanıyorum, o da zaten tam anlamıyla bir framework sayılmaz.

Bir diğer aklıma gelen şey de mimari konusu. Bilmiyorum, belki framework'e bağlı bir derece. Ancak sistemde FreeRTOS gibi bir RTOS kullanımı da bambaşka bir önem taşıyor. Ayrıca RTOS kullanmadan, olay tabanlı (event based) bir kodlama yöntemi de projenin yazılma şeklini tamamen değiştirebilir.

Fazla ve karmaşık yazdım, kusura bakmayın. Kendi adıma tercihlerimi özetlersem:

Küçük projeler: 8 bit işlemci, C, klasik master loop mimarisi

Orta projeler: (8 bit & C) veya (32 bit & C++), gerektiği yerde nesne yönelimli programlama, basit olay tabanlı mimari

Büyük projeler: 32 bit işlemci, C++, nesne yönelimli programlama, RTOS (klasik veya olay tabanlı kullanım)
Gökçe Tağlıoğlu

bsenguler

Hocam, kullanacağınız mikro denetleyici, hangi dilleri destekliyorsa onlardan iyi bildiğiniz bir tanesini seçip yolunuza deva edebilirsiniz. Ne kadar eskiden bahsettiğinizi bilmediğimden dolayı tam olarak bir şey diyemiyorum ama C hala evrensel olduğunu söyleyebilirim. Pythonla bile geliştirme yapabilirsiniz :)

mr.engineer

Alıntı yapılan: Tagli - 31 Ocak 2022, 16:06:50Küçük projeler: 8 bit işlemci, C, klasik master loop mimarisi

Orta projeler: (8 bit & C) veya (32 bit & C++), gerektiği yerde nesne yönelimli programlama, basit olay tabanlı mimari

Büyük projeler: 32 bit işlemci, C++, nesne yönelimli programlama, RTOS (klasik veya olay tabanlı kullanım)

Küçük projelerde C++ tercih etmemenizin sebebi nedir?

Tagli

8 bit işlemciler için C++ derleyicisi yok. Olsa onlarda da C++ kullanırım. AVR için epey kırpılmış da olsa bir C++ derleyicisi var, GCC (g++) tabanlı. İstisnai bir durum. AVR dışında C++ derleyicisi olan 8 bit işlemci bilmiyorum.

Yukarıdaki yazımda AVR'den bahsetmeyi ihmal ettim. Sadece tek bir projede kullandım, o da C ile. AVR konusunda da beni durduran şey ucuz bir debug cihazının olmaması oldu. Bazıları VC Code ve PlatformIO ile bir şekilde debug yapıyorlar ama nasıl olduğunu anlamadım. Microchip artık XC8 ile AVR desteği veriyor ama sadece C var. Bu arada, derleyicinin adı XC8 ama aslında daha çok isim benzerliği gibi. Anladığım kadarıyla PIC-XC8 ile AVR-XC8 farklı derleyiciler. Zaten dokümanları da farklı. MPLAB X'de AVR için C++ projesi oluşturabilsek (adı XC8++ olsa mesela), sonra da ucuz bir debugger ile cihaza atabilsek güzel olurdu. Neden yapmıyorlar anlamıyorum. Halihazırda beleş derleyici de var.

Aslında proje boyutu dil seçiminden ziyade (C / C++), kodun ne kadar object oriented (OOP), ne kadar "düz" (fonksiyonel mi desek?) yazılacağını belirliyor.

Küçük ölçekli bir projede, imkan varsa yine C++ tercih ederim, ama her şeyi OOP mantığı ile düşünmem. C++ OOP'den ibaret değil. C'de olmayan başka faydalı özellikleri de var: constexpr, namespace, template, overloading, arttırılmış type safety gibi. Bu özellikler OOP kullanılmayan küçük bir projede bile fayda sağlayacaktır. C++ kullanıyor olmak tüm özelliklerini kullanmak gerektiği anlamına gelmiyor.

Benzer şekilde, orta ölçekli bir projede, o işlemci için sadece C derleyici varsa bile OOP mantığı ile düşünmeye çalışırım. Elbette C'de OOP yapmaya çalışmak bir eziyet ve ancak bir noktaya kadar yapılabiliyor. O nokta da şahsi görüşüme göre tam olarak polymorphism noktası (C++'ta virtual function gerektiren kısım). O noktaya varıp da kendinizi C'de vtable falan kodlamaya çalışırken bulursanız bir durup kendinize "Ne yapıyorum ya ben?" diye sormanız lazım. Dünyada deli çok ama, bu noktayı aşanlar da var elbette.

Sonucu tekrar özetlersek, proje boyutu büyüdükçe:
1) Fonksiyonel düz programlama -> nesne yönelimli programlama
2) Super (master) loop -> yalın event driven state machine -> RTOS (klasik veya event driven)
şeklinde kayma gerekiyor. C / C++ arasında seçim yapmak ikinci planda. Belirtmekte fayda var, event driven state machine mantığı bir RTOS üzerinde de kurulabilir, ki RTOS'u da bu şekilde kullanmak klasik RTOS mantığına göre daha iyi bir seçim olabilir.
Gökçe Tağlıoğlu

brandice5

@Tagli AVR en eski ve en ucuz JTAG'e sahip olan işlemcilerden biri. "AVR JTAG ICE" diye Aliexpress veya muadil sitelerden aratırsan ST-LINK fiyatına 5 dolar civarı bulabilirsin.

Hatta JTAG ICE firmware'i internette mevcut, kendin bile yapabilirsin. Ben kendim yapıp kullanmıştım, AVR Studio ve IAR ile gayet güzel çalışıyordu.

brandice5

Alıntı yapılan: mr.engineer - 31 Ocak 2022, 22:19:14Küçük projelerde C++ tercih etmemenizin sebebi nedir?

Küçük projelerde kullanılan 8 bit işlemcilerin genelde saat hızı ve RAM kapasitesi düşük olur.
Eğer C++ derleyici ile C style kodalama yaparsanız çok sorun olmaz, aşağı yukarı C ile aynı kodu üretir.
Ama C++'ın OOP özelliğini kullanmak isterseniz normalden daha fazla RAM'e ihtiyacınız olur, çünkü OOP çoğunlukla dinamik hafıza kullanımı üzerine kuruludur.
Eğer 8 bit ile 128,256,512K gibi RAM kapasiteniz varsa eyvallah, ama 8 bit olupta 16/32K dan büyük RAM'i olan işlemciler istisnadır :D

Tagli

@brandice5 , AVR modelleri hakkında bilgim çok sınırlı. Ancak bildiğim kadarıyla her modelde JTAG yok. Mesela özellikle Arduino ile popüler olan ve yaygınlaşan ATmega328P'de JTAG yok diye biliyorum, ismini hatırlayamadığım başka bir programlama ve debug arayüzü kullanıyor. AVR JTAG ICE bu tür işlemcileri de debug edebiliyor mu?
Gökçe Tağlıoğlu

ilyas KAYA

Bana visual studio code ile kullanabileceğim c ++  benzeri pic derleyici öneriniz var mı?

Eklentiler kısmında arama yapıyorum ama çıkmıyor. VSCode bana baya iyi geldi.

Kılıç

#9
PIC desteği var mı bilmiyorum
https://www.visualmicro.com/

Alıntı YapVisual Micro is an extension (plugin/add-on) for Microsoft Visual Studio 2017 and 2019 and for Atmel Studio 7, that allows any Arduino project to be developed, compiled, and then uploaded to any Arduino board, while taking benefit of the powerful features of Visual Studio and Atmel Studio.

Visual Micro is works alongside and is compatible with the Arduino development environment, using the same libraries, source code, and development tools. The difference lies in Visual Micro's user interface which provides an advanced and professional development environment, and allows for more advanced development than the existing Arduino IDE.

ilyas KAYA

Alıntı yapılan: Kılıç - 01 Şubat 2022, 11:20:08PIC desteği var mı bilmiyorum
https://www.visualmicro.com/


Teşekkür ederim community için ama community de ücretsiz oldu onu da kursam olur ayni yapı.
Ben hep vscode için aradım aklıma hiç vs community gelmedi 😆

Tagli

8 ve 16 bit PIC'ler için bildiğim birkaç derleyiciyi ilk mesajımda saydım. Orada bahsetmediğim iki derleyici daha sonradan aklıma geldi: mikroC ve SDCC. Evet SDCC bazı PIC modellerini de destekliyordu ancak sonra desteği sonlandırdılar. 

8 bit PIC'ler için derleyicileri tekrar özetlersek:

1) HI-TECH: Microchip satın alıp XC8'e dönüştürdü. Ölmüş sayabiliriz. Yani artık XC8'in içinde yaşıyor.
2) C18: Bu da XC8'in içine katıldı. Ölmüş sayabiliriz.
3) PicBasic Pro: Bazılarınız bana kızacak belki ama gömülü yazılım dünyasında Basic'in yeri olmadığını düşünüyorum. İroniktir ki ben bununla başlamıştım PIC ve elektronik macerama.
4) Proton Basic: Yukarıdaki ile aynı durum...
5) JAL 1 & 2: Yorumsuz...
6) SDCC: Artık PIC'leri desteklemiyor.
7) CCS C: Muhtemelen o malum kitap sebebiyle Türkiye'de fazla popüler. Ben tavsiye etmiyorum ama.
8) mikroC: Hakkında pek bilgim yok.
9) Flowcode: Görsel bir derleyici. Çocukları elektroniğe ısındırmak için faydalı olabilir.
10) IAR'ın PIC derleyicisi var mı?
11) XC8: Bence en doğru seçenek

Bence 8 & 16 bit PIC'ler için XC8 & XC16 harici bir derleyici ile uğraşmak zaman kaybı olur.

XC8 & XC16 derleyicileri için VS Code entegrasyonu varsa kullanılabilir. İnternette aratınca birkaç repo çıktı ama kullanılabilir durumdalar mı bilmiyorum. Ben şahsen VS Code'a alışamadım bir türlü. O yüzden her ne kadar çok eksiği ve sıkıntısı olsa da PIC projelerime MPLAB X ile devam ediyorum.
Gökçe Tağlıoğlu

Kılıç

#12
8 bit PIC için xc8 kullanılabilse de  c++ değil. (acaba sadece bazı 8 bit PIC ler için öyle midir?)

mikroC for PIC galiba c++ idi. 
https://www.mikroe.com/mikroc-pic

ilyas KAYA

#13
Alıntı yapılan: Kılıç - 01 Şubat 2022, 11:47:238 bit PIC için xc8 kullanılabilse de  c++ değil. (acaba sadece bazı 8 bit PIC ler için öyle midir?)

mikroC for PIC galiba c++ idi. 
https://www.mikroe.com/mikroc-pic


Ona baktım ama ide sini beğenmedim. Intellisense özelliği yok. Vs şart değil intellisense özelliği olan başka derleyici yada ide de olabilir.
Asıl istediğim şey intellisense kısaca.
Mesela atmega MCU ları VSCODE nin platformio su ile çok kolay programlıyorum. Bir çok atmega yı da destekliyor.


brandice5

Alıntı yapılan: Tagli - 01 Şubat 2022, 09:17:14@brandice5 , AVR modelleri hakkında bilgim çok sınırlı. Ancak bildiğim kadarıyla her modelde JTAG yok. Mesela özellikle Arduino ile popüler olan ve yaygınlaşan ATmega328P'de JTAG yok diye biliyorum, ismini hatırlayamadığım başka bir programlama ve debug arayüzü kullanıyor. AVR JTAG ICE bu tür işlemcileri de debug edebiliyor mu?

@Tagli ben ATmega128 kullanıyordum, bu modelde bildiğimiz anlamda JTAG portu var.
Bahsettiğin ATmega328P modelini inceledim. Bu modelde "debugWIRE" denilen JTAG'in light versiyonu diyebileceğimiz bir debug arabirimi var.
AVR JTAG ICE modeli "debugWIRE"ı da destekliyor görünüyor. Şu dökümanda nasıl kullanılacağı anlatılmış.

http://ww1.microchip.com/downloads/en/DeviceDoc/doc2562.pdf