Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: E-x8 - 18 Temmuz 2017, 21:19:16

Başlık: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: E-x8 - 18 Temmuz 2017, 21:19:16
Merhaba

Tekrar ifade edeyim.
"Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?"

Bunu sormamın nedeni dün ilk defa Datasheet'ten kod yazmış olmam. Daha önceden 5 sn mi alan Arduino ile Serial.println("abc"); kodunu STM32'de denemek istedim. Registerlara bir bakiyim derken sırf USART1 i ile zamazingo yapmak için 3-4 saatimi heba ettim günün sonunda olayların mantığını kavradım. Register neymiş çok daha yakından öğrendim.

İşte tam olarak burada aklıma takılan bir çelişki var, sizlere de danışmak istedim.
Register seviyesinde kod yazmak tamamen bağımsız olmak demek datasheet dışında bir argümana ihtiyacın yok demek bu harika bir his. Fakat kötü yanıda her bir modül için tekrar datasheete dönmek zorunda olunması. Usart için Timer için ADC için vs.. bu çoğaltılabilir.
Ya da bir işlemcinin tüm özellikleri için daha önceden hazır notlarınız var hepsi örnek kodlarıyla duruyor ama işlemciyi değiştirdiğinizde dımdızlak kalmıyor musunuz?
Kendimden örnek vereyim STM32F1 serisi ile çalışıyorum USART için REG tanımlamalarını çıkarttım STM32F4'e STM32F7'ye geçtiğimde dımdızlak kalmıcak mıyım? :)


Hal lib kütüphanesi bunun önüne geçiyor hatta Java gibi tüm seriler için tek bir kod yazıyorsunuz. Acaba REG seviyesinden çıkılmalı mı? Ya da bazı yerler için Hal kullanılmalı mı? Hal lib işlemciyi Arduino lib gibi yoruyor mu?


Bunlar sadece soru görüşlerinizi merak ediyorum. Sizler nasıl kod yazıyorsunuz?
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: sovalye - 18 Temmuz 2017, 21:40:02
Mantikli mi olayi sizin isteginiz ve mecburiyetinize gore degisen birsey. C mi python mi tartismalari gibi sonucsuz kalir. Dusunun ki kod yazarken o register lari bulamayip, FPGA da herseyi flipflop'dan, gatelerden insa etmek zorunda olanlar da var.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: baran123 - 18 Temmuz 2017, 22:58:44
ASM ile yazılan kodlar kodun taşınablirliğini zorlaştırıyor. Ben PIC de registerler ile uğraşmaktan bile sıkıldım (C de)
Spesifik durumlarda ASM ile müdahale edebilirsiniz. ASM de yazabilirsin bu sana kalmış.
Ama kodu taşımak istersen ne yapacaksın ? :)
Heleki farklı bir çipe.
Abooo şenlik var desene !
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: Okan AKÇA - 18 Temmuz 2017, 23:30:00
 Register Seviyesinde  kod yazmak cok mantıklı değil  ancak  biraz daha zaman gerekli derleyicilerin  daha gelişmesi lazım
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: E-x8 - 19 Temmuz 2017, 10:39:38
Alıntı yapılan: sovalye - 18 Temmuz 2017, 21:40:02
Mantikli mi olayi sizin isteginiz ve mecburiyetinize gore degisen birsey. C mi python mi tartismalari gibi sonucsuz kalir. Dusunun ki kod yazarken o register lari bulamayip, FPGA da herseyi flipflop'dan, gatelerden insa etmek zorunda olanlar da var.
FPGA nedir hiç bilmiyorum bir bakayım dedim üff.. Anlattığınıza bakılırsa işleri baya bi zor.


Alıntı yapılan: baran123 - 18 Temmuz 2017, 22:58:44
ASM ile yazılan kodlar kodun taşınablirliğini zorlaştırıyor. Ben PIC de registerler ile uğraşmaktan bile sıkıldım (C de)
Spesifik durumlarda ASM ile müdahale edebilirsiniz. ASM de yazabilirsin bu sana kalmış.
Ama kodu taşımak istersen ne yapacaksın ? :)
Heleki farklı bir çipe.
Abooo şenlik var desene !
ASM ile hiç kod yazmadım zor gibi dözüküyor. Sanırım farklı çipe geçince ASM'de oluşan zorluk REG'de de oluşabilir sonuçta farklı çipler bilgileri bambaşka yerlere kaydedebilirler. İşte bende bu yüzden bu konuyu açtım:)

Alıntı yapılan: Okan AKÇA - 18 Temmuz 2017, 23:30:00
Register Seviyesinde  kod yazmak cok mantıklı değil  ancak  biraz daha zaman gerekli derleyicilerin  daha gelişmesi lazım
Sanırım HAL Lib ile STM32 için bir gelişmişlik var diyebilir miyiz?


Aynı kodun Reg ve Hal seviyesi

Kullanımları :

usart1_print("Hello World!\r\n");



void usart1_print(volatile char* s){
while(*s){
USART1->DR=*s;
while(!(USART1->SR&0x00000080));
*s++;
}
while(!(USART1->SR&0x00000040));
}



int pointer_uzunlugu(char* str){
int sayac = 0;
while(*str++ != 0){
sayac++;
}
return sayac;
}

void usart1_print(char* str){
HAL_UART_Transmit_IT(&huart1, (uint8_t*)str, pointer_uzunlugu(str));
}
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: CLR - 19 Temmuz 2017, 13:50:09
ince iş yapanlar için mantıklı, hobiciler/basit işler yapanlar için mantıksız,


Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: OptimusPrime - 19 Temmuz 2017, 19:15:11
Bence hobicide olsan profesyonelde olsan register seviyesine inip kod yazmak vakit kaybindan baska birsey getirmez. zorunda olmadikca o seviyeye inme. yani uretici kullandigin cipin suruculerini vermiyorsa ve illaki o islemci ile calismak zorundaysan tabiki isler degisir. kaldiki cogu uretici artik ucretsiz derleyiciler ve suruculeri bedava temin edip gelistiricilerin isini kolaylastirmaya calisiyor. (kaz gelecek yerden tavuk esirgemiyorlar yani kisacasi) bundan faydalanmak lazim.

fpga de durum biraz daha farkli. ozellikle xilinx ust duzey amaclara hizmet eden (video , haberlesme vb gibi) modulleri kendisi gelistimeyi birakti. bunlari artik farkli firmalar ile anlasip onlar uzerinden lisans satma isine cevirdi. dolayisi ile bu moduller artik ucretsiz degiller. Bu tip modulleride zaten satin almak tekrar tasarlamaktan daha ucuza gelecektir. orasi ayri bir hikaye.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: sovalye - 19 Temmuz 2017, 19:51:06
Alıntı yapılan: OptimusPrime - 19 Temmuz 2017, 19:15:11
hobicide olsan profesyonelde olsan register seviyesine inip kod yazmak vakit kaybindan baska birsey getirmez.


Forumda kavga çıkarmak için bundan daha güzel bir cümle hayal edemiyorum.
Asm cephesinden gelecek ilk savunma da kesin "Gerçek elektronikçiler donanım seviyesinde kod yazar olur.".
Sonra yüksek seviye diller "Sizin 500 satırda yaptığınız işi ben tek satırda yapıyorum" yazar.
"Yazıyosun da arka planda olanları bilmiyorsun." argümanı ile düşük seviye diller tekrar saldırıya geçer.
"Bilip ne yapacam dünya'da artık kimse bilmiyor" savunması gelir.


Bu noktada tahminen kavga çıkar. Moderatorlerden biri mesajları temizler konu kapanır. Bir amaç için çıkmış her dilin, yöntemin o işi güzelce yaptığını eğer yapamazsa yok olduğu başından kabul etsek de herkes canının istediği gibi kod yazsa ne güzel olur.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: E-x8 - 19 Temmuz 2017, 20:33:26
Kavga çıkmaz niye çıksın.
O zaman önlemi alalım konuyu Hal Lib ile REG seviyesini STM32 için değerlendirelim ki konunun etki alanı biraz daralsın.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: OptimusPrime - 19 Temmuz 2017, 21:08:18
@sovalye
Bence ekledim basina bu parlamayi geciktirir :)
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: frederic - 19 Temmuz 2017, 21:57:13
Herkes bence desin yoksa yanar ortalık.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: Okan AKÇA - 19 Temmuz 2017, 23:12:19
Derleyici sorunsuz sekilde derledigi sürece gerekbile duymayiz. Stm için şu an böyle derleyici varmı bilmiyorum.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: muhittin_kaplan - 19 Temmuz 2017, 23:26:01
Reglerin neler oldugunu gerektiginde nasil yazacagimi bilerek son kutuphaneyi kullanmaya calisirim.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: mert3162 - 19 Temmuz 2017, 23:43:29
Alıntı yapılan: sovalye - 19 Temmuz 2017, 19:51:06

Forumda kavga çıkarmak için bundan daha güzel bir cümle hayal edemiyorum.
Asm cephesinden gelecek ilk savunma da kesin "Gerçek elektronikçiler donanım seviyesinde kod yazar olur.".
Sonra yüksek seviye diller "Sizin 500 satırda yaptığınız işi ben tek satırda yapıyorum" yazar.
"Yazıyosun da arka planda olanları bilmiyorsun." argümanı ile düşük seviye diller tekrar saldırıya geçer.
"Bilip ne yapacam dünya'da artık kimse bilmiyor" savunması gelir.


Bu noktada tahminen kavga çıkar. Moderatorlerden biri mesajları temizler konu kapanır. Bir amaç için çıkmış her dilin, yöntemin o işi güzelce yaptığını eğer yapamazsa yok olduğu başından kabul etsek de herkes canının istediği gibi kod yazsa ne güzel olur.


Hocam forumda cıkacak kavgayı önceden görmüşsünüz ohoo işin bütün heyecanı kaçtı şimdi :)

ASM'ciler ki hepimiz kim olduğunu biliyoruz gelip döşeyecekti 2 sayfa yazıyı buraya şimdi o adam yazmaz bu saatten sonra bu konunun altına
Sonra C'ciler geliceklerdi onlarda asm yazanlar hamal diyecekti.


Kendi yorumum şudur profesyonel iş yapan şirketler(vestel,arçelik,bosch ev aleti üreticileri benim tanıdıklarım en azından) hala register seviyesinde yazar neden ? kullandıkları işlemcinin geliştirilmesi için oluşturulan ekipler bizzat üreticiler tarafından eğitime alınır bu kişi ingilizce olarak eğitimini görür.Gelir kodunu yazmaya başlar hatta üretici kodların büyük çoğunluğunu bile yazar.Artık şirket o kişiden bir revizyon istediğinde kişi bunu yapamaz ise üretici ile direkt temasa geçip işlemcinin yazdığı koda tepki vermediğini söylediğinde işlemcinin hataları tespit edildiğinde üretici işlemciyi bu istekler üzerine revizyona bile alabilir.

Bu şirketler kurumsal bazda anlaşmalı oldukları için üretici bizzat kendi çalışanlarını dönemsel yada uzun süreli çalışma için size tahsis bile edebilir.Kodlar tamamıyle paylaşılabilir aralarında birbirlerinden kod gizleme pek olmaz sebebi yapacağınız yazılımın çekirdek bölümünün zaten onlar tarafından geliştirilmiş olmasıdır.

Ha şöyle bir durum var bu kodlar extra güvenli metodlar ile paylaşılır.ziplenip gönderilmez anlatamayacağım metodlar içerir.Biz ölümlüler bu kodların nasıl döndüğünü pek göremeyiz.

Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: tekosis - 19 Temmuz 2017, 23:44:01
Bence ;) register düzeyinde konuya hakim olabilmek ve gerektiğinde bu bilgileri kullanabilmek önemli. Kodlama tercihi işin durumuna göre değişir ama takıldığınız yerde kayıtcılara bakabilmek ve yorumlayabilmek gerek.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: muhittin_kaplan - 20 Temmuz 2017, 01:10:06
O asm, yada lowlevel yazan firmalar denilen firmalar bence c bile yazmiyor c++ la kodluyorlar.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: muhittin_kaplan - 20 Temmuz 2017, 01:10:59
Bence  ;D
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: RaMu - 20 Temmuz 2017, 02:44:51
İşin mutfağını bilmek iyidir,
zararıda yoktur, faydası çok olur,
gerekirse kullanırsın,
o zaman mantıklı olur.


Aslında kod yazmak mantıklımı ki
neyle yazdığımız mantıklı olsun,
Çinde aynısı daha ucuza var :)
Amerika da keşfedilmiş zaten.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: mert3162 - 20 Temmuz 2017, 03:46:14
Alıntı yapılan: RaMu - 20 Temmuz 2017, 02:44:51
İşin mutfağını bilmek iyidir,
zararıda yoktur, faydası çok olur,
gerekirse kullanırsın,
o zaman mantıklı olur.


Aslında kod yazmak mantıklımı ki
neyle yazdığımız mantıklı olsun,
Çinde aynısı daha ucuza var :)
Amerika da keşfedilmiş zaten.


hocam 4lük yazmışsınız ilk anda şiir gibi okudum :)
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: Okan AKÇA - 20 Temmuz 2017, 08:37:48
Register seviyesi derken hi-level derleyici de register ler tanımlı tek tek, buda aslında register Seviyesinde kod yazmamiz anlamina geliyor. 3 sınıf derleyici üreticileri hariç bu işe sicak bakmasada artık gördüğüz gibi kolaylık sağlayan programlar gün gün artarak devam edecektir.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: XX_CİHAN_XX - 20 Temmuz 2017, 08:52:56
Yaklaşık 7 sene asm ile kod yazdım. Sonra C ye bir geçtim, geçiş o geçiş :) Her halde C'de de bir 6-7 sene devirmişimdir. Bu süre zarfında bir elin parmağını geçmeyecek kadar az projede asm kullanma ihtiyacı duydum. Asm bilmek elbette çok güzel ama artık MCU'lar, kaynak ve kütüphaneler eskisi gibi sınırlı değil. Benim görüşüm C yi ne kadar iyi öğrenirsen senin için kardır. C nin yanına ikinci bir dil öğrenmek istiyorsan daha yüksek seviyeli dillere yönel ama bunu C de iyi bir seviyeye geldikten sonra yap.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: Epsilon - 20 Temmuz 2017, 09:16:23
Tartışılan konuda mantıksız olarak görülen neresidir çokda anlamış değilim.

Programlamanın püf noktalarına ait olan " belki en çok 100 satır kodu her MCU için farklı  kod yazmak  size ağırmı  geliyor yoksa gelmemeli mi ?" sorunun özeti bu sanırım.

Bence bunu tartışmak yerine MCU yu seçtiğimde hangi interruptları kullanacaksam hangi özellikleri istiyorsam /aktif edeceksem texti  bana otomatik oluşturan programı nasıl yaparım demek araştırmak daha  verimli olurdu.
Aslında excel le bile çok kolayca yapılabilir  seç  kopyala olması gereken yere yapıştır.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: RaMu - 21 Temmuz 2017, 14:55:45
@mert3162
teşekkür ederim hocam,
yazı dilinin optimizasyonlusuda şiir değil mi zaten.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: CLR - 21 Temmuz 2017, 15:29:31
Arada şöyle bir fark var, hazır kütüphaneleri herkes kullananabilir bu durumda iyi bilenle bilmeyen kolayca ayırt edilemez. Register seviyesinde kod yazamayanlar, sürekli hazır kütüphane arama arayışı içine girer. Bazı özel durumlarda tıkanabilirler ayrıca hazır kod kullandıklarından, alışırlar ve  tüketici mühendis/tekniker durumuna düşerler. Mesela arm cortex m3'lerde bit reverse ve byte reverse gibi asm komutları var, eğer bu komutlar C'ye çıkarılmasaydı, çoğu embedded yazılımcı, 8/16/32 biti ters çevirmesi gerekse tonlarca işlem yapacaktı.  Veya bazı registerlerin bazı bitleri C'ye çıkarılmamış olabilir bu durumda işlemcinin o özelliğini bilmiyor olacaksınız.

Bu bilgiler ancak asm komutlarını okuyabilmek ve registerleri iyi tanımakla öğrenilebilir.


Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: kimlenbu - 21 Temmuz 2017, 17:01:10
Assembly ile veya c'de register'lara direkt müdahale ederek kod yazmayı bilmek önemli, arka planda neler oluyor bilirsin. Yalnız projelerde kullandığım çok çok nadirdir. Enerjimi ve zamanımı "lan hangi registerin hangi bitiydi" diye harcamak yerine yapılacak işe ayırmak daha verimli oluyor. Bunun sakıncası henüz oturmamış kütüphanelerde buglar yüzünden günlerini harcayabilirsin.



Ayrıca hazır kütüphane kullanımına da karşı değilim, tekerleği yeniden icat etmeye gerek yok. Zamanla işine yarayacak şekilde modifiye ediyorsun zaten.
Başlık: Ynt: Acaba Register Seviyesinde Kod Yazmak Hala Mantıklı Mı?
Gönderen: magic_gun - 21 Temmuz 2017, 18:21:54
sadece sahsi fikrim ,,( yıllarca saf ASM yazan biri olarak )
hala asm yi kullanırım ama nerede ? tabiki programın kritik olan kısımlarında gerisi ise hangi high level dil işimi görüyorsa

herhangi bir High level derleyiciye karsı mıyım hayır --işimi kolaylastırıyor
ASM  ye karsı mıyım hayır işimi dahada kolaylastırıyor