Gereksiz Arduino kodlarını ayıklayıp kullanmak

One Face

Üye
Katılım
5 Temmuz 2024
Mesajlar
30
Bu Arduino IDE'nin olayı kod işini kolaylaştırması ya. Hazır kod kütüphaneleri içeriyor. Ama bunun da eksisi hantallık.
Mesela x işini yaptıracağız. Kodda y işini de yaptırıyor. O yüzden programlama dilini bilip yeterli komutu yazmamız daha sağlıklı.
Ama gömülü programlamada kodlar aşağı yukarı belli. Arduino kütüphanesinden gerekli olan kısımları kopyala yapıştır yaparak kullansak olur mu?
 
Ne yaptığınızı biliyorsanız olur.
Diğer bir husus derleyiciler sahip oldukları optimizasyonlar sayesinde, kodda veya kütüphanede olan ama kullanılmayan kısımları zaten dahil etmezler.
 
Arduino IDE ile C++ dilinde kod yazıyorsun zaten. Eğer Arduino IDE kullanmayıp işlemcinin kendi IDE sini kullanırsan, C veya C++ da program yazmış oluyorsun. Gene bir sürü ilave kod ve kütüphane otomatik yükleniyor. Arada çok da fazla fark yok yani.
 
Arduino IDE ile C++ dilinde kod yazıyorsun zaten. Eğer Arduino IDE kullanmayıp işlemcinin kendi IDE sini kullanırsan, C veya C++ da program yazmış oluyorsun. Gene bir sürü ilave kod ve kütüphane otomatik yükleniyor. Arada çok da fazla fark yok yani.
Hocam şu videoda öyle diyor da. Oradan aklıma geldi de. Gereksiz işlemler şişiriyormuş.
10. dakikalarda diyordu herhalde.
 
Bazı insanlar Arduino IDE ile yazılan programın farklı bir dil olduğunu zannediyor. Bu doğru değil. Arduino ile C++ standardının ve dilin standart kütüphanelerinin sağladığı tüm imkanları kullanabilirsin.

Ama Arduino IDE, standart IDE lerde kullanılan Makefile gibi build sistemleri ile uyumlu değil. Programları ino uzantılı text dosyalarına yazıyorsun ve IDE bunların hepsini birleştirip derliyor. Dolayısıyla kapsamlı, büyük ve birçok kaynak kodundan oluşan bir programı Arduino IDE ile yazmak hiç verimli olmaz. Arduino UNO ile program yazıyorsan Arduino IDE, bir UART portunu kod yüklemek için kullanıyor, senin programın bu UART portunu kullanmaması gerekir. Arduino IDE ile JTAG/SWD kullanarak debug yapamazsın. Mesela boot loader yazmak için Arduino IDE hiç uygun bir ortam olmaz.
 
Bazı insanlar Arduino IDE ile yazılan programın farklı bir dil olduğunu zannediyor. Bu doğru değil. Arduino ile C++ standardının ve dilin standart kütüphanelerinin sağladığı tüm imkanları kullanabilirsin.

Ama Arduino IDE, standart IDE lerde kullanılan Makefile gibi build sistemleri ile uyumlu değil. Programları ino uzantılı text dosyalarına yazıyorsun ve IDE bunların hepsini birleştirip derliyor. Dolayısıyla kapsamlı, büyük ve birçok kaynak kodundan oluşan bir programı Arduino IDE ile yazmak hiç verimli olmaz. Arduino UNO ile program yazıyorsan Arduino IDE, bir UART portunu kod yüklemek için kullanıyor, senin programın bu UART portunu kullanmaması gerekir. Arduino IDE ile JTAG/SWD kullanarak debug yapamazsın. Mesela boot loader yazmak için Arduino IDE hiç uygun bir ortam olmaz.
Hocam aynı olduğunu söylüyor zaten videoda. Ama gereksiz işlemler de varmış. 12. dakikada kodu yazıyor.
Ama işte illa elle yazmaya gerek var mı? İstemediğimiz kısımları ayıklayarak modifiye edemez miyiz?
Çünkü low level kod yazması zor zaten.
Ama aşağı yukarı belli ne olduğu da.
Hani ChatpGPT'ye falan kod yazdırılıyor ama hata yapabiliyor ya. Yine de kontrol etmek lazım. Ama low level dillerde gömülü yazılım tarafında sürekli sürekli bi dil çıkmıyor. Bir framework vs çıkıp durmuyor sürekli. Daha durağan. Sınırları daha belirgin. O yüzden AI'ya yazdırılan kod diğer alanlara göre daha sıkıntısız olur gibime geliyor. İşte bu yüzden copy paste yaparak da halledilebilir gibime geliyor.
ChatGPT'den de rahat yürünürmüş aslında.
 
Sorduğun soruyu anlamadım. ChatGPT ile bir gömülü sistem projesi yapılır mı diye soruyorsan, bu mantıklı bir beklenti değil. ChatGPT ye spesifik teknik sorular sorarak yararlanmak lazım. Mesela "Arduino UNO SPI porttan nasıl veri gönderebilirim?" veya "8 tane pin kullanarak 7 segment display nasıl sürebilirim?" gibi sorular sormak lazım. "Arduino UNO ile benim işyeri için PIR sensor, darbe sensör, manyetik sensör destekleyen bir alarm sistemi tasarla" veya "Arduino UNO ile PID kontrollü ısıtıcıları çalıştıran, yumurta kaplarını sallayan, gece gündüz efekti veren lambaları kontrol eden kuluçka makinası tasarla" gibi soru sormamak lazım.

ChatGPT teknik ayrıntılar konusunda sana zaman kazandırsın, TASARIM işini sen yap.
 
O videoyu daha önce izledim. Hatta o kanalın tüm videolarını sık sık izledim. Kendsi konuya hakim biri.

Kısaca orada diyor ki eğer Arduino IDE ile "Merhaba Dünya" yazarsan, bu MCU da 2kb yer kaplar,. Ama aynı yazıyı Atmelin kendi IDE'si ile yazarsan (Atmel Studio muydu, AVR Studio muydu neydi) 1kb yer kaplar. Çünkü Arduino ide kütüphane kullanır. Atmelin kendi idesinde direk en temel kodları yazarsın.
Ve bence haklı. Zaten videoda da haklı olduğunu ıspatlıyor.

Bu aynı benim PHP de şikayet ettiğim konuya benziyor. Ben PHP yi kendi çapımda en temelden öğrendim. echo "Merhaba Dünya"; yazıyorsun bitiyor olay.
Ama mesela laravel diye bir framework çıkartmışlar. Orada echo yerine (Atıyorum) Ekrana yaz "Merhaba Dünya" gibi bir durum var.
Sen kodlarken "Ekrana yaz" dediğinde o aslında arka planda kütüphanede yine "echo" komutunu kullanıyor.
 
C ve C++'ta kullanılmayan fonksiyonlar linker tarafından görmezden gelinir. Arduino kütüphane fonksiyonları da buna dahildir.

Ancak bir fonksiyon içinde hem gerekli hem gereksiz kısımlar varsa hepsi hex (veya masaüstü için exe) dosyasına girer. Böyle durumlar için opsiyonel özellikleri devredışı bırakan DISABLE_XYZ veya ENABLE_XYZ gibi macrolar kullanılabilir.
 
Bu yüzden; "I ♥ Eclipse."
 
Arduino kütüphanesinden gerekli olan kısımları kopyala yapıştır yaparak kullansak olur mu?
Kaynak kodu değiştirmeden kopyalarsanız sonuç aynı olur...
Kütüphanelerde kodlar arasında bağımlılık var (hiyerarşi şeklinde üst seviyeden alt seviyede kütüphanenin temelini oluşturan baz kodlara kadar), üst seviyede kod dosyaları kopyalayınca derleme sırasında linker bağimli kodları bulmayınca hata verir, bağımlı kodları eklemeye kalkarkasın, Arduino'nun tüm ilişkili kaynaklarının kopyalanmasına varırsınız.
 
Bunun en düzgün yolu sanırım kütüphaneyi alıp ihtiyaca göre tek tek fonksiyonları düzenlemek ve yeni bir kullanıcı kütüphanesi oluşturmak. Yine de hafızayı verimli kullanacağız diye kafayı bozmamak gerekli diye düşünüyorum.
 
Eğer amaç, hiçbir ilave kod olmayan, sadece SENİN yazdığın kodları içeren bir program ise, bunu Arduino IDE ile yapmak mantıklı olmaz, çünkü bir sürü alt seviyeli IDE konfigürasyon dosyasını ameliyat etmen lazım. Bunun için işlemcinin üreticisinin verdiği IDE yi (mesela STM için Cube) kullanmak daha mantıklı olur, çünkü bu tip ayarların yer aldığı diyaloglar var.

İki tane ayar yapmak gerekiyor. "standard runtime library" yi programa eklemeyi engellemen lazım. GCC için "-nostdlib".

Linker script'i değiştirip standart "startup" kaynak kodunu çıkarman lazım. Bunu yapınca işlemcide resetten sonra çalışan kod, kesme vektörleri, herşey kalkmış olur. Hepsini kendin yeniden yazman lazım. Yani tamamen boş bir executable elde edersin.
 
O videoyu daha önce izledim. Hatta o kanalın tüm videolarını sık sık izledim. Kendsi konuya hakim biri.

Kısaca orada diyor ki eğer Arduino IDE ile "Merhaba Dünya" yazarsan, bu MCU da 2kb yer kaplar,. Ama aynı yazıyı Atmelin kendi IDE'si ile yazarsan (Atmel Studio muydu, AVR Studio muydu neydi) 1kb yer kaplar. Çünkü Arduino ide kütüphane kullanır. Atmelin kendi idesinde direk en temel kodları yazarsın.
Ve bence haklı. Zaten videoda da haklı olduğunu ıspatlıyor.

Bu aynı benim PHP de şikayet ettiğim konuya benziyor. Ben PHP yi kendi çapımda en temelden öğrendim. echo "Merhaba Dünya"; yazıyorsun bitiyor olay.
Ama mesela laravel diye bir framework çıkartmışlar. Orada echo yerine (Atıyorum) Ekrana yaz "Merhaba Dünya" gibi bir durum var.
Sen kodlarken "Ekrana yaz" dediğinde o aslında arka planda kütüphanede yine "echo" komutunu kullanıyor.
Hocam adam bayağı hakim harbiden. Keşke video üretmeyi bırakmasa. 500k olurdu herhalde.

Arduino IDE ile yazarsak değil de Arduino'nun olayı ekosistem ya. Sıfırdan kendin yazmıyorsun hazır bulunduruyor.
Bİlmeyen adamı rahat ettiriyor.
Adam da videoda diyor ki mesela x işi yaptırdın mikrokontrolcüye. İşte kütüphanesinde hazır var kodu. Ama istenmeyen işlemler de oluyormuş.
Kodda sadece x işi yok y işlemi de dahil hazır kod olduğu için. Kolaylık sağladığı için.
Ben de madem öyle hazır koddan istenmeyen kısımları silsek olmuyor mu demek istemiştim de olmuyormuş. Yukarıda bi abi kodların bağımlı olduğunu söyledi düzenlemek gerekiyormuş. Yani yenidn yazmak işte.
Gerçi ben de videoyu anlamamaşım.
Öyle olsa zaten adam sıfırdan kod yazmaz gerekli yerleri kopyalardı düzenlerdi herhalde.
 
Yine de hafızayı verimli kullanacağız diye kafayı bozmamak gerekli diye düşünüyorum.
Kesinlikle bu kısma katılıyorum.

Bu konu aslında birazda optimizasyona ne zaman ihtiyaç var gibi bir konu. Eğer çok ileri gidip projeyi bir ürün haline getirmedikçe veya bir yarışmaya katılmak için değilse veya ne bilim hafızayı daha da azaltmak için değil ise çokta gerek yok. Sadece hafızada boş yer kaplayacaklar. Kullanmadığımız hafıza biraz daha az olsa ne olur. Bir gün sonra başka bir proje için tekrar kullanacağız ne de olsa.

Ayrıca bir kütüphaneyi küçültmek hiç kolay bir iş değil.
 
Son düzenleme:
Arduino IDE ile program yazarsan, benim bildiğim şu fazlalıklar oluyor:

IDE den UNO'ya kod atabilmek için bootloader olması lazım. Bu bir miktar yer kaplıyor.

Arduino programından Serial.write yaptığın zaman IDE'deki serial monitörde görmen için, UART ile iştigal eden sabit bir program parçası senin programa dahil ediliyor. Bunun dışında delay fonksiyonu için zamanı sayan bir fonksiyon var.

Arduino IDE kullanırken bütün bu kodları çıkarabilirsin ilgili yapılandırma dosyalarını değiştirerek, ama o zaman Arduino IDE nin kullanım komforunu ortadan kaldırmış olursun. İşlemcinin kendi IDE si ile çalışıyorken muhtemelen bir JTAG/SWD debug adaptörün olacak zaten, o yüzden ne bootloader, ne serial.write, nede hazır delay fonksiyonlarına ihtiyacın var. Ama IDE'nin de kendi startup kodu olacak, C runtime library olacak, şu olacak, bu olacak. Aradaki farklar kayda değer farklar değil. 256 byte bellek olan bir PIC işlemci ile çalışmadıktan sonra bunların hiçbir önemi yok. Artık işlemcilerde yeterince bellek var, sen yapılacak işin algoritmasına odaklan.
 
Bootloader yaklaşık 1K, serial kütüphanesi yaklaşık 2K. 32K mcuda çok önemsiz alan. Ama 8K ile çözümlenecek uygulamalarda bu 3K önemli.
Hoş, artık neredeyse ATMega328, ATMega8'den daha ucuz. Fazla da şey etmeye gerek yok bence. Çalışıyorsa dokunma.
 

Forum istatistikleri

Konular
7,950
Mesajlar
131,155
Üyeler
3,177
Son üye
bassaran

Son kaynaklar

Son profil mesajları

erdemtr55 taydin erdemtr55 wrote on taydin's profile.
Merhaba Taydin bey,
Gruba spms serisi yapıcak mısınız?
ben 3 sargılı toroid ile 2 adet flyback sürücek bir devre yapmayı düşünüyorum.size soracak sorularım vardı?
Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Back
Top