1. sayfa
Yanıt veren herkese teşekkürler, Dolaylı adreslemeyle erişilebilen harici veri hafızası bölgesine erişmek istemekteki tek amacım, dizi tanımlarken kullanılan tüm alanın 128 karakteri geçememesiydi yani bir diziyi sadece RAM de tanımlıyodu tabi 128 byte ram yetmiyordu. cevaplarınızı görmeden biraz daha araştırma yapmıştım. ve 64kbyte lık alana erişebilmek için olan C kodlarını buldum. Sorunumu çözdüm. aynı problemi olacak arkadaşlar olabilir diye paylaşıyorum. buyrun. öncelikle <absacc.h> başlık dosyasını yüklemek gerekiyor(bu başlık dosyası keil kütüphanesinde mevcut indirmeden sadece programın başına eklemek yetiyor) Dizi tanımlamak için char xdata dizi[boyut]; boyut 0-65535 (0000-FFFF) arası değişebiliyor tabi C de yazarken 0xFFFF veya 0x0000 yazmak gerekiyor. XBYTE [0x0002] = 5; // 0002 h adresli data belleğe 5 bilgisini yaz Oku = XBYTE [0x0002]; // 0002 h adresli code bellekten 1 byte oku bunlar en temelleri bikaç kod daha şurada mevcut. bütün bunları yaptıktan sonra bahsettiğiniz #pragma komutunu denedim. Keil tanıdı yani komutun rengi değişti ama derleme anında şu hatayı verdi. aktif olabilmesi için src nin kontrol edilmesi gerekiyor diyo ama anlamadım tabi ne demek istediğini D:.d error C272: 'asm/endasm' requires src-control to be active Herkese tekrar teşekkürler.. |
Error C272 : ASM Requires SRC Directive Kaynak dosyasında asm-endasm kullanılırsa, SRC (compiler directive) ile derlemek gerekiyor. Derleyici asembler kaynak dosyası oluşturuyor. Bundan sonra asm.kaynak dosyasını kullanabiliyorsunuz.. http://www.keil.com/support/man/docs/c51/c51_c272.htm === keil'in "inline asm" özelliğine ilişkin bazı uyarılar var. Bu yapının biraz hatalı oduğu ama düzeltilebileceği söyleniyor. Bu yüzden projeni daha fazla ilerletmeden aşağıdaki forumda özellikle 2 yorumcuyu okumalısın ("#9 : how to store in memory keil" ve "#11 : extern char end asm") http://www.edaboard.com/thread5666.html |
Çok çok teşekkür ederim. Adres vermekle kalmamış bide oradaki yorumların da işe yarar olanlarını çekip çıkarmışsın resmen :D akümülatöre veya başka bi kaydediciye nasıl veri itileceğini anlatmış adam. Tabi sorunları aştıkça yenileri çıkıyor ortaya :) Başka bi sorum da: Şimdi yaptığım projede değerini kullanıcının belirleyeceği bazı bilgiler olacak. tabi işlemci beslemesi kesildiğinde kullanıcının belirlediği bu bilgiler tamamen sıfırlanıp default değerlerine geri dönecek. Misal şimdi yaptığım proje şifreli kilit benzeri bişey olarak düşündüğümüzde kullanıcının sonradan değiştirdiği bu şifreyi nasıl daima saklarız. veya kilitin o zamana kadar kaç kere açılıp kapandığını tutan bi kaydedicimiz varsa. işlemcinin elektriği kesildiğinde bu bilgilerin kaybolmamasını nasıl sağlarız. Hafıza pili benzeri bir durum şart mıdır? yoksa tıpkı flash belleklerimizdeki gibi bi düzenek kurmak mümkün müdür? Bu konuda yardımcı olabilecek arkadaşlara şimdiden teşekkür ederim. |
Gösterdiğin ilgi için gerçekten çok teşekkür ederim. Elimde oldukça fazla kaynak var. hepsine de gözattım konuyla ilgili. hepsi türkçe kaynaklardı tabi. verdiğin edaboard sitesine de şu andaki problemimi sormak için bi konu açtım orda da yardımcı olan kişiler var. Birisi "The final word on 8051" isimli bi kitap önerdi, buldum bakıyorum. Türkçe kaynaklarda olmayan C notları mevcut. tabi benim sorunuma halen bi çare bulamadım. Projeyi kodlamayı durdurdum zaten. Elimde şu anda ne 8051 var ne de programlayıcı. sadece proteus ve Keil ile yürütüyodum. tabi orda da dediğin gibi keil her başlangıçta belleği komple temizlemeyi seçiyor. Yarın okuldaki imkanlarla sorunumu deniycem değişik alanlara(segmentlere) veri atıp, cihazı kapatıp açıp verinin halen oralarda olup olmadıklarını kontrol edicem. hem C de hem de asm de deniycem hepsini. eğer işi C de değil de asm de başarabilirsem C kodlarını aynen asm ye çevirip tüm programa asm ile devam edicem. Bu arada verdiğin kaynaklara da tek tek inceliycem tabiki. Tabi bu sırada programlamak için bi alet de arıycam. Çok çeşitli programlama cihazları var ama kafama göre bulamadım bi türlü. bunu programlamak pic ler kadar kolay olmuyor anlaşılan :D |
1. sayfa
şimdi 8051 işlemcisini asm ile kodlarken dolaylı adresleme yapabiliyoruz.
mesela
MOVC DPTR,1000
MOV A,00
MOVC @A+DPTR,FF
DPTR + A nın gösterdiği harici bellek adresine FF değerini atıyor.
Şimdi ben bi eşşeklik ettim ve projeyi C kodlarıyla hazırlamaya başladım. şimdi yazdığım satırlarca kodu da silip tümünü baştan ASM ile yazmak da istemiyorum :D
Bu işin kolay bi yolu var mı? yani yukarıdaki olayı C kodlarıyla yapmamız mümkünmü? nolur birisi yarıdm etsin deli olcak saatlerdir onunla uğraşıyorum :)
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.