Benim işlemcim seninkini, benim C senin ASM yi döver.

Başlatan z, 13 Kasım 2009, 16:01:07

gallavi

C deki taşınabilirlik sizinde önceki mesajınızdaki gibi asembler de A=B; ifadesinin bile farklı yazılması gereğinin çok çok ilerisindedir ama noktasına virgülüne dokunamdan taşımak tabiki söz konus değil PC ortamında bile
Birde benim dikatinizi çekmek istediğim konu proje boyutları asembler ile uğraşan arkadaşların yazdıkları en karmaşık ve uzun proje nedir. PIC için çokfazla bu sınır belli olmasada örneğin ARM gibi kod boyutunun çok uzun olduğu karmaşık işler yapan büyük projelerde bazen C nin bile yetersiz kalıp projeyi içinde çıkılmaz hale getirdiği onun yerine nesne tabanlı özelliklerinde dolayı C++ kodlarının yazılmasının nerdeyse zorunluluk olduğu düşünüldüğünde sanırım bu tarz uzun soluklu projelerden uzak duruyorlardır.
DemirHan=gallavi;

bigbey

Evet XX_CİHAN_XX ulaşmak istediğim sonuçlar dan biri işlemcinin çalışmasına, programın adım adım yürütülmesi esnasında ne şekilde işlediğini bilerek hareket etmek. Daha doğrusu çekincelerimden biri bu (hani hesap makinesi kullanmaya alışırsınız ya)
Ben zaten C konusunda öğrenme zahmetine katlanamayacağım durumda görüyorum.(zaman olarak hazır değilim) ve mutlaka ASM yi aratmayacak şekilde bir C editörü kullanmayı epeydir düşünüyorum.
Dediğim gibi bazı çekincelerim var. henüz bu çekinceyi anlatabilimiş değilim.
Bilindiği gibi işlemciilerimiz. bir işi bir birim zamanda yapabiliyor. bir iş yapılırken diğer işi yapma yeteneği işlemcimizde yok o halde bu işi yani bir zaman dilimi içinde bir iş yaparken diğer bir koşulu da denetleme konusunda C dilinin nasıl davranacağını anlamaya çalışıyorum. Bu konuyu ASM nasıl davranacağını zaten biliyorum.
Ben bu konu başlığında konular ilerledikçe sorularıma cevap bulacağımı sanıyorum.
Bu vesile ile bende kafayı bozup zamansızlıkla ilgili sorunu arkaya atıp C ye giriş yapabilirim sanırım ama dediğim gibi C yi öğrenmeye harcayacağım zamanı, bu C olmadı ASM siz yapamıyorum diye bir duruma düşmek beni oldukça bozar.
Konu dağılmıyorsa bir yaşanmış örnek vereceğim.
Bu vereceğim örnekte lütfen PICBASIC kullananlar alınmasın ve cevap hakkı doğmasın. PICBASIC kullanmaya başladım eskiden bildiğim Qbasic bilgilerimden dolayı kolayca adapte oldum. Interrupt kullanmak istediğimde bir hüsranla karşılaştım. PICBASIC yapısı gereği GIE yi kapatıp kendisi satır aralarında kullanmak istediğimiz Interrup'un flağını sorguluyor ve reel bir Interrupt uyguşaması erçekleşmiyor.(program satırları da ayrıca uzuyor) hemen vazgeçtim. Şimdi ya C de de benzeri şekilde yetersiz bir koşul ile karşılaşırsam halim nice olur dedim ve ASM ye devam dedim.
TA6R

z

@Gallavi

Haklısın ama şu sorgulamayı yapmalıyız.

Bir elektronikçi olarak elektronik devre mi yapıyoruz yoksa cep telefonunun görsel, sesli,  süslü püslü menülerinin, database uygulamalarının, sesle komut algılama sağlayan rutinlerinin ve telefonun codec yazılımlarının gömülü olduğu uygulamaları mı?

Ben burada elektronik devrelerin yerini alan denetleyicili temel uygulamaları konuşmak istiyordum.

Eğer C de yazılmış bir programı taşırken programın sağını solunu gıdıklıyorsak, üstü kapalı olarak C içine gömdüğümüz asm de yazılmış bazı rutinleri de gıdıklayabileceğimizi söylemeye çalıştım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Bir uygulama programını iki parçaya bölebiliriz.

1. Özü
2. Süsü

Uç noktalarda bir örnek verelim.

Vektör kontrollu 3 fazlı motor hız kontrol cihazını ele alalım.

Bu cihazın içindeki denetleciye gömülmüş programın özü, üretilen PWM sinyale senkron şekilde motor akımlarını ölçülmesi, Alfa Beta verilerinin oluşturulması, D/Q dönüşümlerinin yapılması, giriş hız verisiyle ölçülen yada hesap edilen hız verisiyle farkını alıp bunu PI yada benzeri kontrol algoritmasına sokulması ve daha sonra Ters D/Q dönüşümü ile ABC ye geçilmesi, bu değerlerle space vector algoritması yada sinusel modulasyon algoritmasının işletilmesi,  ardından PWM değerlerinin hesaplanması ve denetleyicinin duty değiştiren registerlerine yüklenmesidir.

Programın özüne, aşırı akım denetleyen yazılımlar yada kesmeler de eklenebilir.

Bunun dışında kalanlar ise işin süsleme kısmıdır.

Örneğin klavye ve LCD display üzerinden menüler vasıtasıyla parametrelerin okunması yada gösterilmesi, parametrelerin EEproma yazılması yada okunması, parametrelerin seri porta, USB ye yada CAN busa yazılarak uzaga tasınması, yanlıs girilen verilerde düdük öttürülmesi işin sanatsal kısmını oluşturur.


Aynı projede hem C hemde asm kullanarak program yazmaya başladıysak asm sever olarak süsleme sanatından uzak durmak gerekir.

C sever olarak da işin özünü oluşturan rutinlerden bazılarını asm yazıp yazmama konusunda sezgi ve şartlanmalardan arınmış olarak karar vermek önemlidir.

Bir üst hız seviyesinde denetleyici seçmek işin en kolay kaçamak yoludur.
Bu durumda ASM ile debelenmeye gerek kalmaz.

Fakat üreticiler bizleri bu kaçamak yola itelemekteler. Çünkü denetleyici fiyatlarını onlar belirliyorlar ve çoğu zaman 8 bit işlemci ile 16 bit işlemci hemen hemen aynı paraya alınabiliyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

XX_CİHAN_XX

bigbey hocam,
İnanın iyiki C ye geçmişim diyeceksiniz. Beni biliyorsunuz asm yi sizden öğrendim ve 6 sene kullandım halada gerektiğinde C ile beraber kullanıyorum asm bırakılmaz :D
C ye geçmek demek bunca yıllarınızı verdiğiniz hakim olduğunuz bir dili bırakmak demek değil zaten.
BASIC te bahsettiğiniz olay hi tech c de yok :)
Ek olarak (Hi Tech C den bahsediyorum)
Kesme asm de neyse C de de o
pwm asm de neyse c de de o
usart asm de neyse c de de o
siz usart için asm de txcon a , txreg e  ve diğer tüm reglere ne yüklüyorsanız C de de aynı işlemi yapıyorsunuz ve arkaplanda aynı asm üretiliyor aynı işlem yine yapılıyor
BASIC yada CCS de gördüğünüz tonla özel fonksiyon sizin gözünüzü korkutmuş gayet doğal çünkü onlardan bende korkuyorum :D
Ama standart C, Hi Tech C öyle değil. ASM neyse orada bir donanımsal modülü kullanmak için ne yapman gerekiyorsa aynı işlemi C de yapıyorsun tek farkı MOV ile txreg e 10 yüklemiyorsun txreg = 10 diyorsun gibi... :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

fatihkuzucu

Ben 2 söz söyliyeyim tam buradan....

Aynı paraya alınabilen 2 mcu arasında bariz performans farkı varken neden "asm de yazmak" gerek gibi düşüncelere kapılıyorsunuz. İşin özü hızlı ve güvenilir bitirmek ise daha iyi arabaya binmemek için neden bu kadar uğraş veriliyor.

Adamlar ayda su bulmak için yıllarını ve zamanını harcarken burada yazılım acısından en iyi olduklarını düşünen arkadaşlar; Asm ile ugrasırım sayfalar dolusu yazarım en iyisi budur diye tutturmanın manası nedir? Bu manasızlıkla ayda su bulma gibi hedeflere kafamızı kaldıramayacağımızı görmeniz gerek.

Hani beğenmediğimiz çin varya, kopyacı dandik ürün üretn çinli arkadaşlar uzaya çıktılar. Ayı gözlerine kestiriyorlar. Yanımızdaki iran neler yapıyor.  Bu ülkerleri örnek verdim çünkü en tepeden en aşapıya bir brokratik engellerle doldurmuşuz kafalarımızın içini. Sisteme yukarıdakilere saydıranlar bile aynı kalıptan çıktıklarını göremiyorlar. genlerimizde oynama yapmamız gerek.

En hızlısı en kolayı ve güvenililiri hangisi ise o kullanılır. Bu kolaya kaçma ve diğerlerinin becerilemeyeceği anlamına hiç gelmez. Kafalardaki katı kuralları yıkmak gerek.
Exp.Kits http://tinyurl.com/3qhs8pm   Küçük adamların, küçük fikirleri... Büyük adamların, büyük hayalleri...

z

@Fatihkuzucu

Ben çocukken dönemin başbakanlarından birisi, TV ye çıkar ağır sanayi kuracağız ağır sanayide ilerleyeceğiz derdi.

Açık oturumlarda da bu siyasetçinin üstüne üstüne gidip ne gerek var dünyada bu iş çok ucuza yapılıyor biz pahalıya yapacağız da ne olacak vs vs dediler.

Halbuki bu tüm ülke çapında önemli bir hamle olacaktı. Çok eleştiri aldı. Proje ülke çapında değil de Konya da uygulanabildi. Bunda devlet desteği oldumu bilmiyorum.

Sonuç, ağır sanayide ülke olarak çok ileri gidemedik fakat Konya aldı başını gitti.

Halbuki ağır sanayi yarıiletken sanayinin de alt yapı taşları demekti.

Şu anda inanıyorumki Türkiye'de hiç bir şey Konya'dan daha ucuza daha iyiye yapılamaz.

Gelelim konumuza.

C dilinde program yazmak, eger 2'li sistem, matematik, mantık altyapınız yeterli değilse "el ..iyle gerdeğe girmek" gibidir.

ASM yazan herşeyi kendisi yapmak zorundadır. Çoğu zaman hazır kütüphane desteğinden mahrumdur.

Şimdi size soruyorum. Çok değerli C bilginizle bana sign magnitude gösteriminde işaret biti de dahil olmak üzere 4 tam biti, 252 tane kesirli biti olan sayının sinüs değerini hesaplayan fonksiyon yazabilirmisin?

Sayı hassasiyetini bu denli genişletmek ve standart dışına çıkarmamdaki amaç elbetteki seni C kütüphanelerinden mahrum bırakmak.

Konuyu buraya getirmek istemezdim ama evet bu soruyu C aşığı birisi sana soruyorum. Eğer yazarım dersen hemen bit uzunluğunu iki katına çıkartıp tekrar soracağım.

Bu programı asm aşığı bir arkadaş istenen herhangi bir bit uzunluğu için gözü kapalı yazar.

Ne demek istediğimi lütfen düşün.

Ağır sanayi örneği ile olan alakayı  kurdunmu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatihkuzucu

Siz olayları yanlış algılıyorsunuz bence.
Öncelikle ben C aşığı değilim. İstediğiniz koduda yazmayacağım.

Ağır sanayi kişilerin yada küçük firmaların yapamayacağı işlerin yapılabildiği bir sanayi dalıdır. Kolayca ağır sanayi işi ile uğraşılamaz. Emeğinin çok olduğu ile alakalı değil. Çok para gitmesi gerek, bilgili insanları yetiştirmek gerek. Uzun ve zorlu bir süreç. Yüzlerce, binlerce kişinin çalışması gereken bir toplu iştir.

Ağır sanayi= Asm diyorsanız  çok yanlış olur.  Burada yazılımdan bahsediyoruz. Klasik asembler yazılımı nasıl oluşur. Bir yazılımcı oturur baştan sonra tüm yazılımı yazar bitirir. Eğer assembler gibi bir kod yazılacaksa bir füzeyi 10 metre bile havalandıramazsınız. Bir füze havalandırmak için gerekli yazılımların hepsini assemblerda yazmaya çalışırsanız 100 senede bitirirsiniz herhalde.
Yok hedefte bir motor kontrolü ile basit bir makine elektronik donanımını yapılacaksa elbette yapar bir arkadaş. Burada insanların kapasitesi zekası öne çıkıyor.

İstemişsiniz bir formul. "O formulu nasıl cıkarılacagını bilmeyen bir yazılımcı, o kodu yazamazmı ?" demek istiyorsunuz ? Yoksa o kod C de yazılamazmı demek istiyorsunuz ?

Ağır sanayi= Bence bu konu ile alakalandırınca; en üst seviyede dilde yazan yazılımcıları ve donanımcıları bir araya toparlayıp bir füze havalandırıp tekrar düzgünce yere indirebilecek çalışmaları en kısa zamanda yapabilmek demektir.
Exp.Kits http://tinyurl.com/3qhs8pm   Küçük adamların, küçük fikirleri... Büyük adamların, büyük hayalleri...

fatihkuzucu

Burada yazılımcılar olaya kişisel bakıyor. Ve fazla bencil fazla egoist davranıyor. Bir çok yazılımcı tanıdığım aynı bencillikte davranışlar sergiliyor. Sebebi türkiyede yazılım ile uğraşanların sayısının az olması. İhtiyacın da çok olması.

Bir işte ihtisaslaşmak küçük işlerde kişisel işlerde başarı getirebilir. Extreme örneklerde çıkabilir. Mesele buradanmı işe devam edileceğidir. Yoksa işlerin toplu olarak takımların insan guruplarının yaptığı noktadan mı yapılacağı ile çok alakalıdır.

Çoğunlukla yazılanlar, bir assembler kodunu kodu yazan kişi bile bir süre sonra tekrar okumaya kalktıgında bir anda okuyamadığı yönündedir.  Büyük hedefler var ise büyük hedeflere kişiler tek başına ulaşamaz. bir araya gelinip daha üst topluluklar kurulmalıdır. Burada C devreye giriyor. İnsanları bir araya getiriyor. Bir işi bir çok parçaya bölüyor. Bir çok fonksiyon yazılıyor kişiler ve firmalar tarafından. Bunların optimize olup olmadığı her zaman araştırılabilir. Ancak kod calısıyorsa optimize olup olmadıgının önemi sadece kodun derlendigi ortam için sınırları ne kadar zorladıgı ile ilişkilendirilebilir.

Yani Optimize olmayan bir kod. Bir cok yerden toparlanmış fonksiyonlarla olusturulmus olsun. En sonucta işi düzgünce yapabiliyorsa sorun yoktur. Ama o kodu F877 sokamıyorsunuzdur. F452 ye sokarsınız. O olmadı 16 bit lere bakarsınız. Oda olmadı arm7 arm9 bakarsınız. Aralarında cok büyük fiyat farkları olmadıgını siz kendinizde belirtiyorsunuz. Zaten assembler ile ugrasanları en cok üzende budur.İşlevlerini kaybettiren yada daha az degerli olmasını sağlayan piyasa baskısı bulunmaktadır. Daha üst seviyeli diller çıkıp daha çok örnek fonksiyon yaygınlaştıkca bebeler bile bu işi yapabilmeye başlıyor. Bu iyimidir kötümüdür? Olayın tüm özü burada....
Exp.Kits http://tinyurl.com/3qhs8pm   Küçük adamların, küçük fikirleri... Büyük adamların, büyük hayalleri...

z

Alıntı Yapİstemişsiniz bir formul. "O formulu nasıl cıkarılacagını bilmeyen bir yazılımcı, o kodu yazamazmı ?" demek istiyorsunuz ? Yoksa o kod C de yazılamazmı demek istiyorsunuz ?

Hayır hiç birini demek istemiyorum.

C içine asm gömme fikri ortaya atılınca C severlerin ayaklanmaması gerektiğini söylüyorum.

C de CPU flagları ile ilgilenmeye başlarsanız C anlayışının dışına taşar ve taşınabilir kod felsefesinden ayrılmış olursunuz.

Halbuki sorduğum soru bu flaglara bakmayı gerektiren rutinlerle yazılmak zorunda. Zorunda diyorum çünkü bu flaglara bakmak yerine C nin if komutundan medet umarsanız yazılan kod asm koda göre hızla şişmeye başlar. Hızlı olması gereken bir fonksiyonu C sevdasına yavaşlatamazsınız.

C kütüphanelerindeki fonksiyonlar en hızlı çalışacak şekilde yazılırlar. Bunlar hızlı olmalıdırki C programlar hızlı çalışsın.

Görüyorumki asm severler C ye, C severlerin asmye baktıından çok daha hoş görülü bakıyorlar.

Bu sadece sizin şu anda verdiğiniz tepkiye bakarak vardığım sonuç değil.

Ağır sanayiye gelince, 30 sene önce ağır sanayide atılım yapsaydık şimdilerde yarıiletken sanayide söz sahibi olacaktık.

Neyse İnşallah bir sonraki nesillere artık.

C de alt planda ne oluyor bitiyordan habersiz y=sin(x) hesaplatmak size nasıl bilmem ama bana çok garip geliyor.  

Forumda bir arkadaş C ile inanılmaz bir cihazın üzerindeki işlemciye kod  yazıyor ardından bir başka başlık altında Mos transistör ısınıyor ne yapabilirim diye soruyor.

Alsana kel alaka diyeceğin örnek. Şimdi nerden çıktı dimi bu...

Bu arkadaş şimdi asm ye dil uzatırsa olmaz tabiki.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bigbey

Peki bir soru sormak istiyorum.
C deki kütüphane içeriklerini ASM de zaten oluşturmuş (Kullanma ihtiyacında olduklarımızı) ve gerektiğinde içeriklerine de değişen ihtiyaca göre modifiye ediyorsak ASM nin kullanılabilirliği cazip olmazmı?
Ayrıca editörümüz ne kadar iyi olursa olsun kişinin program yazma mantığı işin esas noktasını teşkil etmezmi.
Birde ben şahsen z=a+b dediğimde ne yaptığını bilmek istiyorum. C derleyicisi bi şekilde bu işlevi gerçekleştiriyor ama ben bunu nasıl yaptığını bilmiyorsam bu beni ilerleyen zamanlarda tedirgin ediyor.İpin ucun elimden kaçacağını sanıyorum.
TA6R

azimli

en kısa yol en iyi bildiğin yoldur
ayağını yorganına göre uzat kış yakındır
komşunun tavuğu komşuya kaz gibi gelir

burada olay dönüp dolaşıp bir projeyi-işi bitirmeye-çıkarmaya gelir.

kim bir işi-projeyi elindeki bilgi ve imkanlarla kullanabildiği ekipmanlarla çıkarabiliyorsa onun için en iyi en değerli elindeki imkan ve ekipmanlarla birlikte bunları kullanabilme becerisi-kabiliyetidir.gerisi laf kalabalığıdır.

ama kanıtsanmış bazı gerçeklerde vardır.işlemcilerin kendi arasındaki üstünlükleri dillerin birbirine göre üstünlükleri gibi.

arm ve renesas işlemciler dsPIC ve PIC32 den daha iyiler kabul ediyorum
C# dilide C++ ve ansi C89 dilinden daha iyi bunuda kabul ediyorum

ama yalnızca kabul ediyorum bunlardan ansiC89 ve dsPIC ile PIC32 haricindekilerin bulunduğum konumda bana bir faydası yok demekki benim için en iyisi elimdeki imkanlar

benim açımdan yola dsPIC30F,PIC32 ile devam dil olarakda C# 'a zamanla geçiş asm renesas,arm yerinde güzel öyle kalsınlar.

azimli

dsPIC ler için bazı C derleyicilerini inceledim bunlarda Cpu flag ve işlemci modül konfigürasyon bitleri hazır olarak planlanmış düzenlenmiş olarak veriliyor bunlar banada garip geliyor.C30 ve C32 de bu işler diğer derleyiciler gibi kolay ve hazır sunulmuyor cpu flag larını ve müdüllerin konfigürasyon bitlerini tek tek elden geçirmeniz gerekiyor hazır bir kodda kullansanız yapılanlar bu derleyici için açık kod olarak ortada duruyor.
asm yi bilmiyorum daha alt düzey 8 bitlik 16F ve 18F serilerinide bilmiyorum ama kullandığım dille ve derleyiciyle kullandığım işlemciye asm kadar etkin ve hızlı kodlar yazdığıma inanıyorum.
çünkü yazdığım kodları derlediğimde asm komut kümesinide gözden geçirir ve gerekli gördüğüm yerde c kod yazımıma müdahale eder ve tekrar düzenlerim C nin bit bazında makine diline yakın komutları ile işaretçi ve adres oparatörlerinide genelde kullanırım bunların bazı yerlerde asm dönüşümü daha uygun görünüyor gözüme.

bigbey

Ben ASM ile C'yi bir örnekle benzeştireceğim. Bilmem ne kadar uyacak.
5*9=45 tir değilmi? cevap_ evet
9+9+9+9+9=45 tir değilmi? cevap_ evet
aslında C editörü de nihayetinde ASM olarak dönüşüm yapıyor yani yukarda bahsettiğimiz işlemi arka planda oluşturuyor.(işin hammaliyesini üzerine alıyor)
TA6R

hasangurlek

z hocam senin yazılarını gerçekten büyük bir zevkle okuyorum ve bu bölümünde devamını bekliyorum.

Yazmayı unuttuğunuz birde benim gibi cinslerin oluşturduğu bir gurup var ki, amacım kesinlikle kimseyi küçümsemek veya yargılamak veyahut kendimi övmek değil. Amacım arkadaşlarımızın düşünme boyutunu biraz ilerletmek. Lütfen üyelerimiz bunu kötü bir biçinde algılamasın. Bu başlığı kirletmek istemediğim için konuyu ayrı bir başlık altında yazmayı uygun gördüm. Kısaca bu ekstra guruptan bahsetmek gerekirse dedim ve buraya yeni bir başlık açtım.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!