Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

hi-tech mi?

Başlatan Fixxer, 13 Ocak 2009, 00:35:24

KAZIMUGUR

Ustaların bu tür sohbetlerinden büyük keyif alıyorum.
Teşekkür ederim.
Sizleri bu tür sohbetlere teşvik için ne yapmamız gerektiği konusunda ip uçları verirseniz çok sevinirim.

camby

Assembly=Opcode dersek sanırım yeterli hasan beyi konuşturmak için:)

Hocam soracağım asm dışında bir yolla pic programladınız mı , ihtiyaç duydunuz mu hiç böyle birşeye , asm her şey için yeterli midir?

Bu soruyu pice Assembly ile başlamış ve çok büyük keyif alan biri olarak soruyorum , Assembly ile pice tamamen hakim olmak çok güzel bir olay, ccs de biraz uzun program yazınca "ram yetersiz" uyarısı alıyorduk, Assembly' ise ilk başladığımda bir grup ledi açıp kapamak için bu kadar kod mu yazmak lazım dedim ama artık alıştım , şimdi gözümde hiç mi hiç büyümüyor , ama ileride içinden çıkamadığım durumlar olup yüksek dillere geçmek zorunda kalacak mıyım? Geçersem hangisine geçmeliyim? Bu başlıktan önce ccs 'in popülerliği gözümü boyamıştı hatta biraz da ccs kullandım (en azından C dilini biliyorum) ama hi-tech de şimdi aklımı çeldi...

hasangurlek

Loaded 5944 program words assembly ile = 16F877 = 5.5 TL veya C, Basic vs. ile 18F4550 = 18 TL

Alıntı yapılan: "camby"Assembly=Opcode dersek sanırım yeterli hasan beyi konuşturmak için:)

Hocam soracağım asm dışında bir yolla pic programladınız mı , ihtiyaç duydunuz mu hiç böyle birşeye , asm her şey için yeterli midir?

Bu soruyu pice Assembly ile başlamış ve çok büyük keyif alan biri olarak soruyorum , Assembly ile pice tamamen hakim olmak çok güzel bir olay, ccs de biraz uzun program yazınca "ram yetersiz" uyarısı alıyorduk, Assembly' ise ilk başladığımda bir grup ledi açıp kapamak için bu kadar kod mu yazmak lazım dedim ama artık alıştım , şimdi gözümde hiç mi hiç büyümüyor , ama ileride içinden çıkamadığım durumlar olup yüksek dillere geçmek zorunda kalacak mıyım? Geçersem hangisine geçmeliyim? Bu başlıktan önce ccs 'in popülerliği gözümü boyamıştı hatta biraz da ccs kullandım (en azından C dilini biliyorum) ama hi-tech de şimdi aklımı çeldi...

MikroC ye aldandım bi aralar, sırf glcd için uğraşmayayım diye. MikroC kelimenin tam manasıyla PIC i koda boğdu, CCS yi denedim, biraz daha iyiydi ama yine çok fazla kod üretti. Basici hiç yazmaya gerek yok yani picBasici. Assembly = düşük seviyeli dil ve HI_TECH = adı üstünde yüksek teknoloji, birileri yazdıkları kütüphanelerini paylaşmaya başlayıncaya kadar bişeyler öğrenilebilir, sonra kopyala, yapıştır başlar. Htsoft bu konuda iyi, microC gibi boy boy örnekleri yayınlayıp, "benim program çok basit ayrıca hazır kodlara sahipsiniz ve ucuz fiyatla, gelin alın" diye göz boyamıyor. Bence microchip in picC sini geliştirende htsoft.

İlerde asm ile içinden çıkamayacağın bir şeyle karşılaşırsan şunu bilmelisinki asm ile içinden çıkamadığın bir şeyi başka dille hiç yapamazsın. Tabi burada kopyala yapıştırdan bahsetmiyorum, programcılıktan bahsediyorum. picBasic ve MicroC kullanan arkadaşlara sorarsanız pek çoğu asm ile i2c, adc vs. belli işleri yapamadıklarından (aslında sabredip öğrenmediklerinden) bu dillere başlamışlardır. Yaz printf(lcd_putc,"SYC=%d",sayi); iş bitti. Peki temeli nedir ? Kopyala, yapıştır, uyarla.

Peki ne öğrendiler ?

Besleme devresindeki %20lik değişimin farkında değil ve diyorki "877 çok kötü bir MCU, ADC ile bir pili ölçtüğümde bile sonuçlar zıplıyor" başka bir MCU e geçecem veya harici ADC kullanacağım.

i2c de start işlemi için hangi hat low a çekilir ? Cevap yok. çünkü I2CREAD, I2CWRITE ile bunu öğrenebilmek neredeyse imkansız.

Yaptığı basit bir hobi devresi ama vatandaş 16F877 den daha çok pine sahip mikrokontrol arıyor, veya port çoğullayıcı. 44780 sürücülü LCD nin 4 data pini ile kontrol edilebileceğini hiç duymamış, 4x4 tuş takımını sadece 4 port kullanarak kullanabileceğinide bilmiyor. Dahası aynı data hattında çok sayıda harici eleman kontrol edebileceğinide bilmiyor. Gerisini siz düşünün.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

FullMetal

Bende bazı şeyler söylemek istiyorum. Yazdıklarım saldırı gibi anlaşılmasın.
Alıntı YapNasıl Basic Ve picBasic gibi bir ayrım varsa, Assembly ve PicAssembly diye bir ayrımda vardır. Aslında üzerinde konuştuğumuz picAssembly dir. Gerçek Assembly de MOVF komutu yoktur MOV komutu vardır. SUBWF komutuda yoktur, SUB komutu vardır. Ayrıca MUL, DIV gibi MCU ların bazılarında kullanamadığımız çok sayıda komutda vardır. MCU ların sınırlı işletme kapasitesi nedeniyle çoğu assembly komutu picAssemblyde kullanılamaz. Picde kullandığımız W registerin windows altında hemen hemen karşılığı AX (16bit), EAX (32bit) ve EDX (64bit) tir.
Assembly genel anlamda mikroişlemci tabanlı sistemlerin (PIC16, X86, ARM7TDMI, NIOS II vs.) komut kümelerinin, adreslerin vs.  hex kodlar yerine komutları, adresleri, kaydedicileri vs. anlamca destekleyecek şekilde sembolize edilen (genellikle) harfler topluluğuyla programların yazılması işlemidir. Sizin bahsettiğiniz gerçek assembly x86 çekirdeği için kullanılan assembly dir. PIC16 assembly, X86 assembly, ARM7TDMI assembly herbiride gerçek assembly dir. X86 assembly gerçek diğerleri değil diyemezsiniz.

Assembly de ANSI C gibi standart yoktur. Olamazda. Burada bir standarttan bahsedilecekse ANSI C bir standarttır ve Hi-Tech C, Microchip C ve IAR C derleyiciler ANSI C standartındadır. Bunlardan biri için yazılan kod herbirinde neredeyse hiçbir değişiklik yapmadan derleyip çalıştırabilir. Hatta çevresel arayüz (ADC/DAC/UART vs.) için yazılan programlar haricindeki programlar Keil de derleyip 8051, ARM yada uygun bir ANSI C derleyici ile istediğiniz mikroişlemci tabanlı sistemde kullanabilir. Kısacası ANSI C evrensel bir dildir.

İlave: "5944 program words" PIC16F877 e yüklenebilir çünkü 8192 program words program hafıza kapasitesi vardır. Ayrıca bu karşılaştırma hangi derleyicilerin kullanıldığıda önemlidir. "Basic ve C" ifadesi karşılaştırma için yetersizdir.

arslan74

Merhaba,

Ben "hasangurlek" arkadaşıma bazı konular da katılmiyorum.
En başta şu sözüne bir itirazım var.
Alıntı Yapİlerde asm ile içinden çıkamayacağın bir şeyle karşılaşırsan şunu bilmelisinki asm ile içinden çıkamadığın bir şeyi başka dille hiç yapamazsın.

Bu yanlış bir cümle, nedenine geline ASM aslında insanlara hitab eden bir programlama dili. ASM kullandığın CPU göre değişen, CPU kendi dilidir. En basit ASM biri PIC'in ASM'si dir. Toplam 33 komutla sahip dir. Bu 33 komutu öğrenmek en fazla 1 hafta alır. O zaman bu 33 komutu bilen biri şeyi yapabilir anlamına geliyor ki, teoride öyle olsa da pratikte yanlış bir kavramdır.

Program yazmak için en başta programlama algoritmasını iyi bilmek gerek. Sorgular, döngüler, alt fonksiyonlar, kesme algotirmaları gibi işlemleri programında iyi kurgulayamaz ise o zaman program hangi dilde yazdığınız hiç bir önemi yoktur. Program verimsiz ve problemli çalışır.

Ben yıllardır PIC le uğraşiyorum, ilk önce ASM ile başadım progamlamaya şimdi ise C ile devam ediyorum. ASM sonuda kadar zorladım. Ama belli aşamadan sonra ASM cok yetersiz Kalıyor. Eğer o aşamaya gelmemiş ise programcı bunu iyi anlamiyor. Zannediyorki ASM ile herşeyi hallederim. Aslında daha öncede dediğim gibi teoride yanlış değil. Örnek vermek gerekirse PIC16f628 için ASM kod yazmanın hiç bir mahsuru yoktur. Bence de daha verimli kod yazılabilir. Sonucta 2k lik bir hafıza kontrol ediyorsun. Ama yapacağın için hacmi büyükse basid tuş okuma, ADC veya seri haberleşmeden ibaret değilse o zaman 2k hafıza yetmeyecek. Daha büyük hafızalara ihtiyaç gereksinimi olacak. Örneğin 34kb veya 64kb gibi yüksek kapasiteli bir işlemci ile çalışıyorsan ve RAM'ide 4kb olduğunu düşünürsen ve bunlardan RAM in %70 ini ve flashın %50 kullandığını düşünürsen. O zaman sen ortalam 3kbyte lik bir değişkene ve 20 kbytelik bir programı kontrol etmen gerek. Burada yapacağın en kücük 1 bytelik veya 1 bitlik bir hata tüm programın çökmesine neden olacak.
Ama işin daha vahim tarafın ise yaptığın bu program hatasını bulmakta zorlamacaksın. Cünkü ASM kodları öyle bir bakışta anlaşılan içinden hemen algoritmayı cıkartılabilen bir dil değil özellikle PIC'in ASM si. Aradan zaman gecdikce kendin bile daha önce ne yaptığını anlamak için kodu iyice bir incelemen gerekecek.

O yüzden ileri seviyede program yazanlar C kullanıyor. En başta okunabilirliği çok yüksek. Aynı program bir kaç kişi beraber çalışabilir, sonra bu kodlar birleştirilebilir. Hata bulması daha kolay. ihtiyaç duyulduğunda ASM kodları da ekleyebiliyorsun. Avantajları cok fazla.

Örneğin:

X = 0.032x0.00051/0.2

gibi işlemi C de yukarı da olduğu gibi yazabilirsin ve ilk bakışta neler yapıldığını bilirsin, ama ASM de bunu yazmak adamı bağayı kasar ve daha sonra bu kodlara bakan burada neler yapıldığını anlaması için bayağı bir yorum satırı eklemen gerek, oda ayrı bir görüntü kirliğine yol acar.

Sonuç olarak iyi bir Programcının dikkat etmesini gereken en önemli mesele şunlardır.


1. Kodun düzgün ve hatasız çalışması.
2. Kodunun okunabilirliği'in iyi olması.
3. Daha verimli kod yazması.



Selamlar

fahri-

C nin bir avantajı da programınızı çok hızlı şekilde bir microcontroller dan diğerine taşıyabilmektir. Örnekvereyim.  Ben bir projeye 16f873 ile başladım projeyi tamamladım. Bir süre sonra ek özellikler istendi. Hafıza yetmedi 16f876 ya geçtim. Projeyi tamamladım. Yine bir süre sonra yine mevcut sistemin özellikleri üzerine yeni ek özellikler istendi. Bu sefer de 18f252 ye geçtim. Ve bu geçiş süreleri sadece 1 dakikamı aldı :)
Zamanın çok kıymetli olduğu zamanlarda asmbler ile uğraşmak ne kadar verimli bir iştir bilmiyorum.
C yi biliyorsan kabiliyetin ölçüsünde her tür programı yazarsın. C ile ulaşamadığın kaynaklara asmbler komutları insert et bitsin. Matematik hesap ağırlıklı bir programı  asmbler da yazmak nasıl bir işkencedir deneyen var mı !!!

tayyar

Ben pic programlamaya basic ile başladım, başladım derken öyle yüksekşeyler beklemeyin tuşa bas led yansın vsvs... daha sonraaraya başka şeyler girdigi için pic i boşlamış oldum, yerigeldiginde pic ile basit devreler yapıp kenara atıyordum. Forumlarda okurken arastırırken iç mimariyi ögrenmek gerektigini kafama oturttum ve data sheeti inceledim bolca ve assembly kitabı bulup baştan sonra okudum mantıgı kafamda oturtmuştum. Cok sonralardan bir abimin tavsiyesiyle C ye başladım D. ibrahimin kitaplarını buldum kütüphaneden ve inceledim. Kitapların dili pek anlaşılır gelmedi, kitaplardaki projelerde birtakım entegrler kullanılmış ve bir kısmı piyasada bulunmayadan yada çok az bulunan entegrelerdi. Birazda kitaplarda c kodunu üstüne asm kodunu üstüne hex kodunu vermesi, her kitabın basında temel c yi anlatması biraz itici geldi (hex kodunu ve her kitabın başında olan standart kısımları attıgımızda gayet ince bir kitap kalıyordu elimizde)

bir sürede onlarla ugrastıktan sonra ccs c ye merak saldım s. çiçegin kitabını aldım ve anlatımların açıklamların gayet net oldugunu gördüm. Geçmiştede picin iç yapısını, komutların altında neler olup bittigini bolca inceledigim için problem yaşamadım.

Asm ye gelince; asm hakikaten temel dil ve pic in asm si gayet kolay. Ancak sizinde bahsettiginiz gibi matematiksel işlemlere gelince işler karısıyor ama ne yapmak istedigini bilen insan onuda halledebilir (saç baş yolmak serbest).

Zamanında okulda motorolla 6802 li bir egitim seti ile (http://www.beti.com.tr/index.php?firickey=urun_oku&urun_id=48&kategori_id=62) mikro işlemci dersi aldım (burada mikro işlemci ile mikro denetleyici arası fark gözden kaçırılmamalıdır.) bu dersi alırken elimizde komutların oldugu arkalı önlü bir sayfa vardı onlara bakarak hex karsılıgını yazardık. yani bir nevi kodları kafada derlerdik. Deney setinin içinde işlerin nasıl döndügünüde bilemedigimiz için çok fazla fikir yürütemedik biraz karambole oldu işler. Ve ben o dersin bana pek bir şey kattıgını güşünmüyorum (kattıgı şeylerin oldugunuda reddetmiyorum)
Burada anlatmak istedigim alt tarafta işlemci kısmında neler olup bittigini görmeden bişeyler yapılabilir gayet ezbere programlar yazılabilir. Bazılarımızın işini gayet güzel görebilir bu tip programlar. Ama alt tarafta ne olup bittigini görmek ayrıca bir kontrol saglar ve ne yaptıgımızı bilerek yaparız işimizi.


Bu yazıda bir çok kişinin söylediginden farklı bir şey söylemedim biliyorum.

Kendimden örnekler vererek anlatmak istedigim tam kontrollü bir program yazılması için işlemcinin nelere nasıl tepki verdigini yani altta neler oldugunu bilmemmiz gereklidir hatta şarttır. ikinci olarakta yüksek seviyeli bir dil işlemcide var olamyan algoritmaların üretimi ve işlemcinin kendisinin kontrolü için önelmidir bunun yanındada ams bilinmesi gayet yararlıdır.
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

hasangurlek

Sanırım asm ye uzak duruşun sebebi ileri seviye dillerdeki kod kısalığı ve yazım kolaylığı.

Ben yaklaşık 10 yıldır MCU programlama yapıyorum ve kendi kütüphanelerime ayrı ayrı dosyalar halinde sahibim. Örneğin 16x16bit/100 gibi bir işlem için, include ile gerekli dosyaları projeye dahil edip CALL C16x16Bdt çağrısıyla veya makro olarak tanımlayıp tek satırda işlemi yapıyorum yada MOVLW X, CALL LCD_KARAKTER veya LCD_KOMUT çağrısıyla işimi görüyorum LCD meşgulmüş değilmiş çağrı satırında hiç önemi yok, çünkü alt rutin gerekeni yapıyor. Bu şekilde bahsettiğiniz debug işlemide çok kolaydır. Tıpkı ileri seviyedeki tek satırlık komutlar gibi. Kütüphanelerim zaten problemsiz olduğu için, alt rutinde ne olduğuna bakmıyorum bile, sonuc en hızlı şekilde elimde. Tabi bunun için belli bir zamanın geçmesi ve arşivleme gerekiyor. Ben her yeni projede yeni yazdığım kodlardan ileriye dönük kullanmak üzere hala kütüphaneme kod ekliyorum, ve bence bunun sonu olmayacak.

Ayrıca 5944 program words PIC16F877 e yüklenebilir çünkü KOD ASSEMBLY. Eğer aynı programı Basic veya herhangi bir C ile yazmış olsaydım işte o zaman PIC16F877 e sığma problemi meydana gelirdi.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

serdararikan

Alıntı yapılan: "hasangurlek"Sanırım asm ye uzak duruşun sebebi ileri seviye dillerdeki kod kısalığı ve yazım kolaylığı.

Ben yaklaşık 10 yıldır MCU programlama yapıyorum ve kendi kütüphanelerime ayrı ayrı dosyalar halinde sahibim. Örneğin 16x16bit/100 gibi bir işlem için, include ile gerekli dosyaları projeye dahil edip CALL C16x16Bdt çağrısıyla veya makro olarak tanımlayıp tek satırda işlemi yapıyorum yada MOVLW X, CALL LCD_KARAKTER veya LCD_KOMUT çağrısıyla işimi görüyorum LCD meşgulmüş değilmiş çağrı satırında hiç önemi yok, çünkü alt rutin gerekeni yapıyor. Bu şekilde bahsettiğiniz debug işlemide çok kolaydır. Tıpkı ileri seviyedeki tek satırlık komutlar gibi. Kütüphanelerim zaten problemsiz olduğu için, alt rutinde ne olduğuna bakmıyorum bile, sonuc en hızlı şekilde elimde. Tabi bunun için belli bir zamanın geçmesi ve arşivleme gerekiyor. Ben her yeni projede yeni yazdığım kodlardan ileriye dönük kullanmak üzere hala kütüphaneme kod ekliyorum, ve bence bunun sonu olmayacak.

Ayrıca 5944 program words PIC16F877 e yüklenebilir çünkü KOD ASSEMBLY. Eğer aynı programı Basic veya herhangi bir C ile yazmış olsaydım işte o zaman PIC16F877 e sığma problemi meydana gelirdi.
dostum seni tebrik ediyorum işte olay bu.kendine bir kütüphane yapabilmek.makroları etkin kullanabilirsen ne basic nejal nede c hiçbirisini aramazsın.hani diyorlar ya donanıma hakim olmak işte donanıma %100 hakimsin.bu işin kralı assebler.ha şimdi bazıları ya uyum problemi diyecek! sanki millet pic haricinde 30 çeşit mcu kullanıyormuş gibi uyum probleminden bahsediyor.sadece pic kullanıyorsan hiçbir problemin yok demektir ha başka bi mcu kulalanıyorsan zaten derleyicinin hitech olamsının sana bi faydası yokki 8051 de OPTION_REG mi var? veya arm7 de OPTION_REG mi  var?kalkmış herkes bi uyumluluk türküsü tutturmuş gidiyor.ben neden hitech hastası olayımki her kullandığım chip için oturup driver kodu yazacaksam? ama forumda bi başlık açılsa ve oraya hitech dirver dosyaları konsa ve en iyi driverler oylanıp tesbit edilse millet tekrar tekrar aynı kodu yazmaz ve hitech kullanmanın bi anlamı olur.aynı olay assembler içinde geçerli.elinde fonksiyonel makrolar varsa dediğin gibi tek satırda makro ile birçok olayı halledebilirsin.zaten c nin getirdiği avantajın temelide bu fonksiyona dayalı programcılık......

arslan74

Alıntı yapılan: "serdararikan"dostum seni tebrik ediyorum işte olay bu.kendine bir kütüphane yapabilmek.makroları etkin kullanabilirsen ne basic nejal nede c hiçbirisini aramazsın.hani diyorlar ya donanıma hakim olmak işte donanıma %100 hakimsin.bu işin kralı assebler.ha şimdi bazıları ya uyum problemi diyecek! sanki millet pic haricinde 30 çeşit mcu kullanıyormuş gibi uyum probleminden bahsediyor.sadece pic kullanıyorsan hiçbir problemin yok demektir ha başka bi mcu kulalanıyorsan zaten derleyicinin hitech olamsının sana bi faydası yokki 8051 de OPTION_REG mi var? veya arm7 de OPTION_REG mi  var?kalkmış herkes bi uyumluluk türküsü tutturmuş gidiyor.ben neden hitech hastası olayımki her kullandığım chip için oturup driver kodu yazacaksam? ama forumda bi başlık açılsa ve oraya hitech dirver dosyaları konsa ve en iyi driverler oylanıp tesbit edilse millet tekrar tekrar aynı kodu yazmaz ve hitech kullanmanın bi anlamı olur.aynı olay assembler içinde geçerli.elinde fonksiyonel makrolar varsa dediğin gibi tek satırda makro ile birçok olayı halledebilirsin.zaten c nin getirdiği avantajın temelide bu fonksiyona dayalı programcılık......

Merhaba,
Sanırım siz uyumluluktan neyi kast ettiğimizi anlamadaınız, yada yazılan yazıları doğru düzgün okumadınız.
Kod uyumluluğu anlamı şudur; işlemciden bağımsız olarak aynı kodu yada algotirmeyi başka işlemcilere veya işletim sistemlerine taşıma anlamında kullanılıyor.
Mesela C bazı standart kütüphaneleri var. Örneğin istetiğin uzunlukta hafızayı byte olarak kartılaştırma veya kopya yapan memcmp() ve memcpy() veya yazı dizilerini karşılaştıran strcmp() ve strcpy() gibi hazır fonksiyonlar var. Buna benzer 100'lerce hazır fonksiyonlar standart C içinde hazır kütüphane olarak var. Bu kütüphanelerde test edilmiş güvenirliği yüksek fonsiyonlardır.

Mesela cok kullanılan printf fonksiyonu var. BU standart C en cok kullanılan bir fonksiyonudur ve bütün Ansi-C derleyicilerinde aynı kullaılır.
Mesela :
printf("Deger= %d", deger);

şeklinde ki kod her yerde ve her işlemcide aynı manayı verir. Kod taşınabilirliği bu manaya geliyor. Burada hangi işlemciyi kullandığının hiç bir önemi yoktur.
Mesela, işlemciden işlemciye göre arkda planda farklılık gösteren qsort()(quick sort) algoritmasını ele alalım. senin belirlediğin bir fonksiyona göre türden bağımsız diziyi istediğin uzunluğa göre sıralama yapar.
Şimdi bütün C bilenler  qsort() fonsiyonunu görünce burada ne yapıldığını anlar. Ama bunun aynısı ASM yazılmış olanı olsun bir başkası buna baktığında ne yapıldığını anlaması kolay değil. Ben mesela windows'lar için yazılan C derleyicisindeki bir fonksiyonu işimi yaradığında alıp PIC içinde kullanabiliyorum. i86 tabanına göre yazılmış bir ASM kodunu ben gidip PIC'e doğrudan uyarlama yapamam.
Kod taşınabilirdiğini sadece sizin kendi kodlarını başka bir işlemciye taşıma olarak görmeyin, ayrıca başka işlemciler için yapılmış olan C kodunu kendi PIC'inize uyarlama olarakta görebilirsiniz. Cünkü daha ziyada bu kullanıldığı için söylüyorum.

16F877 güzel bir işlemci Ama onun yetmediği yerlede gün gelince olacak. O zaman bile üst seviyeli bir PIC'e gectiğinde kodun daha verimli çalışması için eklenen bazı komutları kullanman gerekecek. En basidinden PIC18 serisinde çarpım yapan bir komut var. Çarpma işlemlerinde bu komutu kullanmaz isen kodun verimsiz çalışacak ve cok yer kaplayacak. Bu komutu sayısı PIC24 veya dsPIC ler en az iki kat daha fazla.

PIC'in bile komutları kullanılan PIC ailesine göre değişiyor. Bu durumda sen iyi bir ASM kodu yazabilmek için PIC16 serisinden başka serileri kullanman gerek ki , PIC16 serisi cok kısıtlı özelliklere sahip, o seriyle cok ileri seviye programcılık yapamassın. Ancak basid kontroller yapabilirsin.

Selamlar

controller

@KAZIMUGUR ustamızı biraz daha keyiflendirmek için bende katılayım dedim  :)

Burada önemli olan amacımıza uygun bir dil seçmek. Ben burada farklı bir örnekten yola çıkarak Ferrari ile tarla süremezsiniz, traktör ile hız yapamazsınız diyorum. Ancak 4x4 Jeep kullanarak ister araziye çıkıp dağları taşları gezersiniz, ister otoyola çıkıp hız yaparsınız. Burada Ferrari ve traktörü assembly ve basic'e benzetirsek (artık hangisini hangisine benzeteceğiniz size kalmış  :) ) Jeep c programlama dilidir. Yani hem assembly'de olduğu gibi donanımdan uzaklaşmayayım hem de basic'de olduğu gibi her programda kullanılan standart rutin ve işlemleri yazmak ile uğraşmayayım diyorsanız bu işin orta yolu c programlama dilidir. C kaynaklarda "orta seviyeli programlama dili" olarak geçer.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

fahri-

Basit uygulamalar için asembler kullanılabilir belki ...
Ama "Digital Signal Processing" ler için asm kullanıldığını hiç duymadım. (Yanlış anlaşılmasın duymadım demek olmaması manasına da gelmiyor tabiki)

Yani dillerin hepsini bilip uygulamaya bağlı dil tercihi yapmak sanırım en güzeli .

DumrulBey

Alıntı yapılan: "Tagli"
Alıntı yapılan: "hasangurlek"Şu varki çoğumuz ileri seviye dillerininde arka planda assembly komutlarını kullandığını zanneder. Oysa bu derleyiciler asm kodlarına çevrim yapmadan ve assembler kullanmadan kodları direk makine diline çevirirler.
Kesinlikle yanlış. Belki ortada görülebilir bir .asm dosyası oluşmuyor olabilir, ama makine dili zaten assembly dili ile hemen hemen aynı şeydir. Sadece gösterimi farklıdır. İşlemcinin içinde çalışabilecek her kod assembly komutları ile ifade edilmek zorundadır.
Bu duruma şöyle açıklık getirmek isterim...

MicroChip'in ürettiği mikrodenetleyicilere HEX kodlar yüklersiniz. Bu assembly dili ile yazılmış yazılımın derlenmiş yani makina diline çevrilmiş halidir. Sanırım buna kimsenin itirazı yoktur.

BASIC ve C gibi dillere geldiğimizde ise aslında işin içine assembly de girer. Zaten bu dillerin çıkış amacı o. Bu PC'de de böyle uC'de de. Her yazdığınız komutun bir assembly karşılığı vardır. PC'de yazdıklarınız debug.com yazılımı gibi şeyler ile assembly kodlarına bakabilir, uC'de ise uygun dissambler yazılımlarıyla da karşlığını oluşturabilirsiniz.

En son ne oldu bilmiyorum ama CCS C ve Proton gibi diller de dahil MicroChip derleyicisini (assembler) kullanıyor. Yani HEX kod oluşmuş olabilir ama arada önce assembly kodu oluşur, sonra HEX'e uygun mikrodenetleyicinin derleyicisi ile derlenerek makina dili kodu oluştur.

PC'de de aynı değil mi! Eğer siz i386 uyumlu bir işlemci kullanmıyorsanız yazdığınız programda bir iki değişiklik dışında farklı o CPU'nun derleyicisini kullanarak derlemelisiniz.

Son olarak Assembly ile ana sayfada ankette yer alan derleyici benzerleri kesinlikle farklı şeyler olduğunu söylemek istiyorum. Bunlar kabuk program gibi assembly'de kolay yazmanızı sağlıyor hepsi o kadar. Assembly ise başlı başına bir dil assembler (assembly derleyicisini) kullanır. PC'de çok farklı mı? Bence değil...:o

Alıntı yapılan: "arslan74"O yüzden ileri seviyede program yazanlar C kullanıyor. En başta okunabilirliği çok yüksek. Aynı program bir kaç kişi beraber çalışabilir, sonra bu kodlar birleştirilebilir. Hata bulması daha kolay. ihtiyaç duyulduğunda ASM kodları da ekleyebiliyorsun. Avantajları cok fazla.
Katılıyorum, özellikle kollektif çalışmada yüksek seviyeli dillerin ve hatta OOP'un önemi daha anlaşılır oluyor. Assembly'de yazdığınız kodu herhalde kolay kolay kimse çözemez. Bir aralar kod gizleme ve güvenlik konuları tartışılıyordu. KB'larca HEX kodu anlamsız değişkenler ile assembly'e çevirse ne olur, çevirmese ne olur. Baştan yazsa daha az zaman kayber. Herkes bilir yazılım dünyasında böyle bir olay vardır. Başkasının yazdığı yazılım kodlarını çözmek baştan yazmaktan daha çok zaman alır. Var mı aksini söyleyen...:)

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

DumrulBey

Konu gerçekten güzel, tartışmaya değer...:)

Peki arkadaşlar şu C'ye hep kafam takılır durur. CCS PIC C'de bir kütüphane yazdım diyelim. Biz bunu Hi-Tech C'de tekrar düzenlemeden kullanamıyor muyuz?

PC dünyasında öyledir ya. C'de bir kütüphane yazarsınız herkes ondan faydalanır. Bir uC'de OOP olayları ne kadar oturdu? Her şey yine eskisi gibi mi? Yani C++ uC derleyiciler var mı? Ben şahsen 5 sene önceki halden çok memnun değildim. 32 bit mikrodenetleyici dışında var mı yeni olaylar?

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

Erol YILMAZ

Alıntı yapılan: "DumrulBey"
Peki arkadaşlar şu C'ye hep kafam takılır durur. CCS PIC C'de bir kütüphane yazdım diyelim. Biz bunu Hi-Tech C'de tekrar düzenlemeden kullanamıyor muyuz?

C'yi bilmeden CCS de, Hi-tech IAR yada KEIL de te kod yazmamız neticesinde C nin birçok özelliğinden mahrum kalıyoruz.

Nasıl olsa kod yazabiliyoruz... Doğru ve bi okadar da yanlış bir mantık bu.

C'nin tasarımcısı Dennis Ritchie, C'nin herhangi bi ortama bağlı olmadığını belirtiyor. Kısaca "Kodlar Taşınabilir"

Tabi Taşınabilirlik konusunu yakından tanımamız gerekiyor.
int tanımı kaç bittir ?

8 bit mi 16 bit mi ?   bazen 8 bazen 16 veya daha başka :D

E o zaman iş bozuldu. mu?

MISRA C kod kurallarına göre direkt olarak "doğal" int kullanmamalıyız,
Typedef ile bunlar yeniden tanımlanmalı. ve öyle kullanılmalı. [Taşınabilirliğin 1. kuralı]

Yani taşınabilirlik tamamen Programcının denetiminde olan birşey.
C yi iyi bilmek gerekiyor. Ondan sonrası çok daha kolay...

**Aynı zamanda çok daha sağlam kodlar için
Assert denetimlerini kesinlikle yapmamız gerekiyor.  

2 yeni tanım:  Typedef, Assert
Lütfen araştırınız.


Ayrıca;
C nin ilk çıkış amaçlarından öncelikli olan "Sistem tasarlamaktı".
Hatta İstanbul'da "C ve Sistem Programcıları Derneği" var.

Çok net olarak söyleyebiliriz ki;

***C'nin Sistem ile olan ilişkisini anlamadığımız sürece, C, Syntax'ı C'ye benzeyen BASIC ten başka birşey olmayacaktır.

3. yeni tanım: Sistem
Lütfen araştırınız.

Programcının C dili hakkında tecrubesi arttıkça ona daha iyi imkanlar sağlamaya başlar.  
Dennis M. Ritchie


Kodlar Taşınabilir mi?
Ekranın sol alt tarafı merkez olsun.
1024x768. pixel benim ekranımın sağ üst köşesine denk gelirken, Senin ekranının ortasına bile denk gelebilir.
Taşınabilir kod;
Çözünürlükten bağımsız sağ üst köşedeki noktanın adresini tespit edebilmekle başlıyor :D