Arama butonu
Bu konudaki kullanıcılar: 1 misafir
21
Cevap
2582
Tıklama
0
Öne Çıkarma
8051 yardıım C kullanmaya çalışıyorum
T
15 yıl
Yüzbaşı
Konu Sahibi

Arkadaşlar yardıma ihtiyacım var.

ş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 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.

Üye Ol Şimdi Değil



S
15 yıl
Yarbay

C kodunun içine direkt olarak

asm
{

}

Şeklinde assembly kodu yazabilirsin.


Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: sehlor

C kodunun içine direkt olarak

asm
{

}

Şeklinde assembly kodu yazabilirsin.



haha php de script tagı yazar gibi yani :D
deniycem şimdi eğer bu olursa abi dile benden ne dilersen :D:D


Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

olmadı hocam tanımıyor derleyici. ne diyon len sen diyo resmen bana :)


Bu mesaja 1 cevap geldi.
S
15 yıl
Yarbay

derleyiciden derleyiciye değişebilir birde şunu dene:

_asm
{
}


Bu mesaja 1 cevap geldi.
G
15 yıl
Yarbay

Genelde keil kullanırlar. keil derleyicisinde şu şekilde;

#pragma asm
...
...
#pragma endasm


Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

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..


Bu mesaja 1 cevap geldi.
I
15 yıl
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: ISIS

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.





< Bu mesaj bu kişi tarafından değiştirildi Th3r4p1sT -- 19 Aralık 2010; 19:29:55 >
Bu mesaja 1 cevap geldi.
G
15 yıl
Yarbay

8051 de dahili eeprom yok sanırım. Harici bir eeprom alıp mcu ile haberleştireceksin. Mcu da varsa i2c, yoksa isp veya uart protokolleri ile bağlanabilir.
Keil de bunları kullanmak için hazır fonksiyonlar vardır. Yoksa datasheet e bakıp kendin ayarlaman lazım.

Sonradan aklıma geldi flash belleğede yazılabilir. Hatta yukarıda yazdığın xdata sanırım bu işe yarıyor. Ama önemli bir nokta var. Eğer adresi kendin veriyorsan programın kapladığı alanın ötesine yazman lazım yoksa program kodunu bozar.





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 19 Aralık 2010; 19:59:21 >
Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: elektro_gadget

8051 de dahili eeprom yok sanırım. Harici bir eeprom alıp mcu ile haberleştireceksin. Mcu da varsa i2c, yoksa isp veya uart protokolleri ile bağlanabilir.
Keil de bunları kullanmak için hazır fonksiyonlar vardır. Yoksa datasheet e bakıp kendin ayarlaman lazım.

Sonradan aklıma geldi flash belleğede yazılabilir. Hatta yukarıda yazdığın xdata sanırım bu işe yarıyor. Ama önemli bir nokta var. Eğer adresi kendin veriyorsan programın kapladığı alanın ötesine yazman lazım yoksa program kodunu bozar.


Şimdi bildiğim kadarıyla xdata veri belleğe ulaşıyor. ve oraya da hangi verilerin hangi satıra koyulacağını biz programlarken belirliyoruz. Böylece işlemci voltajı alıp çalışmaya başladığında o belirlediğimiz yerdeki bütün değerlere ilk değerlerini yani bizim verdiğimiz ilk değerleri atmakla başlıyor işe.

code bellekte de program kodlarımız duruyor. ve tabi orası silinmiyor.
Tabi bu code bellek diyince kafamda şimşekler çakmaya başladı. acaba program çalışınca ilk işi ilk değer atamadan. code bellekteki benim belirlediğim noktalara bakıp eğer değer yoksa oralara ilk değer atayıp. içerde saklı bir değer varsa da bu işi yapmazsam olabilir.

tabi senin dediğin gibi o seçeceğim bellek satırları program kodlarının dışındaki bir yer olması lazım. Bu iş üzerinde biraz çalışayım bakalım code bellekte istediğim yere bilgi yazma/okuma yapabilecekmiyim.
olmadı başka bir arkadaş 24C64 entegresini tavsiye etti. tabi toplamda 20 satırı geçmeyecek bi ihtiyaç için o entegre en son bakacağım çare olacak. yer kaplama problemi yani.


Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

Yukarıdaki giriyi yazdıktan hemen sonra bikaç deneme yaptım

programı derleme yaparken aşağıdaki gibi program boyutunu keil bize veriyor. güzel bir özellik.


DBYTE [0xFFF0] = 20;

komutunu yazıp derlediğimde

Program Size: data=42.0 xdata=68 code=1921 şeklinde oluyor.

-----------------------------------

int code selo; //selo isminde bi değişken tanımladım. tabi kod bellekte olduğunu düşünüyorum. bu şekilde derlediğimde

Program Size: data=42.0 xdata=68 code=1919 şeklinde oluyor.

Tabi burda selo değişkenine değer atmak istediğimde bazen değiştirilemez hatasını alıyorum. sanırım bu anda kodların bulunduğu satıra denk geliyor.
-----------------------------------

bu komutların ikisini de kullanmayıp normal halde derlediğimde

Program Size: data=42.0 xdata=68 code=1917 şeklinde oluyor.


Burda,

Program kodlarınn olduğu, RAM belleğin ve harici veri belleğinin olduğu bölgeleri hangisi ifade ediyor bi türlü çözemedim :D

harici veri belleği sanırım xdata oluyor da diğer ikisini çözemedim bi türlü .D

Bilen biri yardımcı olsun lütfen.





< Bu mesaj bu kişi tarafından değiştirildi Th3r4p1sT -- 19 Aralık 2010; 21:00:07 >
Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

Yardım lütfeen bu konuda yardım edebilecek birisi varmı?


Bu mesaja 1 cevap geldi.
I
15 yıl
Yüzbaşı

Sorularına doğrudan çözüm olur mu emin değilim; paylaşmak istediğim
fikir ve kaynaklar var.

En son 8080 ile okulda uğraşmıştım.
Aradan epey zaman geçti. Şu an bir breadboard ile
joule-thief, TEC, güneş paneli +ledler gibi çok basit deneylerin
dışında elektronikle fazla bir uğraşım yok.

Ama internette istemediğin kadar kaynak var. Hele ingilizcen de
biraz iyiyse; her şey elinin altında.

Ben sana teorik bir kaç bilgi bulup göndermiştim,
ne yazık ki şimdi de öyle yapacağım - umarım yararı olur.

/* bu açıklama alanını okumayabilirsin

Bellek olarak çeşitli ortamları kullanabiliyorsun :
Program segmenti ve harici bellekler. Bunu zaten biliyoruz.
Ben pic ile biraz araştırma yapmıştım; kısıtlı bellek alanı var ve
program kendi kendini değiştirsin istedim (overlay mantığı).
Böylece ana belleğe sığmayan modülleri değiş-tokuş ile
program segmentine yüklemek istedim. Ama bu alanın belli bir yazma
kapasitesi varmış ve vazgeçtim.
Senin projende, yazma sıklığına göre karar vermelisin;
10.000, 100.000 kez yazılabilir bellek türleri var.
Ama yapılan işe göre bu adetler kolayca tükenebilir.
Sözgelimi, bir datalogger, 24 saatlik sinyalleri bu alana sürekli
kaydederse, kısa sürede artık yazamaz hale gelir. Bu durum programdan kaynaklanmıyor,
belleğe fiziksel olarak artık yazılamıyor...
Bir musluğu düşünürsek, aç-kapa yapıldıkça "yalama" oluyor ve
bir süre sonra bozuluyor - bu da onun gibi ne yazık ki.

Kullandığın keil derleyicisi, program alanını "protected" işaretliyor olabilir.
Normalde program ve data segmenti ayrı görünmüyor, ancak bazı okuduğum
notlarda program segmentini "data" olarak kullanıp,
bilgileri kalıcı olarak bu alana kaydetmekle ilgili uyarılar var.
Bunu anlayabiliyorum, ama yazma sırasında bu alana erişim yapılamaz deniliyor...
Bu, program sayacının gösterdiği blokta bir yazma işlemi yapılamayacağı anlamına mı geliyor
tam anlamadım. Çünkü öyleyse, bu çok kısıtlı bir erişime olanak
verir ve asm kodlarıyla çözmen gerekir. Bu da C gibi bir derleyici
kullanarak mikroişlemciyi programlayanlar için olanaksız bir durumdur.
(inline assembler'dan bahsetmiyorum; derleyiciyi "baypas" edip
doğrudan ASM yazmak gerekiyor.)

Bu arada, C derleyicisi, "boot" sırasında değişkenleri sıfırlıyor.
Çünkü örn.elektrik gidip-geldiği zaman eğer devreyi besleyen gerilim
kritik bir süre boyunca belirli bir değerin altına inerse bellekteki veri güvenilmez oluyor.
Derleyiciyi yazanlar, doğrudan sıfırlayarak bunu çözmüşler.
Aslında 3-5 saniyelik kesintide bellek içeriği korunur, hemen silinmez.
Bunu anlamak için (geçerlilik testi için) komutlar var.
C derleyicisi yazanlar ya bunu bilmiyor,
ya da "herşeyi sıfırlama" çözümü işlerine gelmiş - bilmiyorum.
Oysa yeni geliştirilen yarı-iletken teknolojisi ile bu süre
10-30 dakikaya kadar çıkabiliyor, ki bu da örn. pil değiştirmek için
yeterli bir süre demektir (bazı kaynaklar birkaç saate kadar varan sürelerden
bahsediyor ama ne gördüm ne de ayrıntılı bir makale okudum -yalan yok;
eğer doğruysa çok yeni bir ürün olmalı.
Burada, "volatile" yani kalıcı-olmayan-bellekten bahsediyorum).
Bu güzel bir gelişme ama, bir belleğin silinme süresinin uzaması
o alana yazma/okuma süresinin de uzaması anlamına geliyor.
Aradaki dengeyi nasıl koruyacaklar merak ediyorum.

Kullandığın çipe ilişkin dökümanların mutlaka olsun, bazı sorularından
kullanım klavuzu ya da mimari-çizelgesi gibi bir kaynağa sahip olmadığını düşünüyorum..
Yanılıyorsam bağışla.
Ben yeterli döküman olmadan yola çıkmam. Her ne kadar o an için lazım olmasa bile
üşenmeyip tümünü okurum. Hepsini anlar mıyım; hayır.

Son olarak, denemekten çekinme. Biraz da deneme-yanılma yapmak lazım.

*/

Aşağıdaki aramaları yaparsan bir çok kaynak çıkıyor :

"In Application Programming 8051"
- (bootloader http://www.8052.com/forum/read/145532
- toplam 7 tane post var. Aslında 1.soruyu soran kişi
- sonradan yine 1.soruya dönüp düzeltme yapmış;
- kafan karışabilir o yüzden tüm postlara gözatmanı öneririm.)

"8051 persistent memory"
- Forumda 8051/52 için bir kişi çok özet ama yararlı bilgiler vermiş :
- (sram, xram vb.) http://www.cygnal.org/ubb/Forum1/HTML/001648.html
- Yorumlar 2006 yılına ait.
- (Yeni 8051'lerde xram çip içine alınmış ve mimari biraz değişmiş olabilir.)

"keil compiler result"
- Çok fazla sonuç döndü; birçok forum var. Önerim, o forumlara gözatman.
- Bununla ilgili arama yaparken, doğrudan senin projenle ilgili değil ama
- ilginç bir makaleye rastladım;
- "Byte code Interpreter for 8051 Microcontroller"
- (cross-platform yorumlayıcı; bir kez yaz, bütün MCU'larda çalışsın)
- pic yerine mcu hedeflenmiş (risc yerine cisc!).
- www.iaeng.org/publication/IMECS2010/IMECS2010_pp1125-1129.pdf
- Makale 2010 yılına ait. Yakın bir gelecekte bunun benzerlerini görebiliriz...
- Fikir hoşuma gitti, paylaşmak istedim.


Son olarak, 8051 için C derleyicilerine genel bir bakışla ilgili
oldukça yararlı olacağını düşündüğüm bir yazı.
Derleyicilerin o kadar da hatasız olmadıkları, nerelerde programcının
optimizasyon yapması gerektiği gibi önemli noktalar var.

"Optimal C Constructs for 8051 Microcontrollers"
- http://www.netrino.com/node/174


Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: ISIS

Sorularına doğrudan çözüm olur mu emin değilim; paylaşmak istediğim
fikir ve kaynaklar var.

En son 8080 ile okulda uğraşmıştım.
Aradan epey zaman geçti. Şu an bir breadboard ile
joule-thief, TEC, güneş paneli +ledler gibi çok basit deneylerin
dışında elektronikle fazla bir uğraşım yok.

Ama internette istemediğin kadar kaynak var. Hele ingilizcen de
biraz iyiyse; her şey elinin altında.

Ben sana teorik bir kaç bilgi bulup göndermiştim,
ne yazık ki şimdi de öyle yapacağım - umarım yararı olur.

/* bu açıklama alanını okumayabilirsin

Bellek olarak çeşitli ortamları kullanabiliyorsun :
Program segmenti ve harici bellekler. Bunu zaten biliyoruz.
Ben pic ile biraz araştırma yapmıştım; kısıtlı bellek alanı var ve
program kendi kendini değiştirsin istedim (overlay mantığı).
Böylece ana belleğe sığmayan modülleri değiş-tokuş ile
program segmentine yüklemek istedim. Ama bu alanın belli bir yazma
kapasitesi varmış ve vazgeçtim.
Senin projende, yazma sıklığına göre karar vermelisin;
10.000, 100.000 kez yazılabilir bellek türleri var.
Ama yapılan işe göre bu adetler kolayca tükenebilir.
Sözgelimi, bir datalogger, 24 saatlik sinyalleri bu alana sürekli
kaydederse, kısa sürede artık yazamaz hale gelir. Bu durum programdan kaynaklanmıyor,
belleğe fiziksel olarak artık yazılamıyor...
Bir musluğu düşünürsek, aç-kapa yapıldıkça "yalama" oluyor ve
bir süre sonra bozuluyor - bu da onun gibi ne yazık ki.

Kullandığın keil derleyicisi, program alanını "protected" işaretliyor olabilir.
Normalde program ve data segmenti ayrı görünmüyor, ancak bazı okuduğum
notlarda program segmentini "data" olarak kullanıp,
bilgileri kalıcı olarak bu alana kaydetmekle ilgili uyarılar var.
Bunu anlayabiliyorum, ama yazma sırasında bu alana erişim yapılamaz deniliyor...
Bu, program sayacının gösterdiği blokta bir yazma işlemi yapılamayacağı anlamına mı geliyor
tam anlamadım. Çünkü öyleyse, bu çok kısıtlı bir erişime olanak
verir ve asm kodlarıyla çözmen gerekir. Bu da C gibi bir derleyici
kullanarak mikroişlemciyi programlayanlar için olanaksız bir durumdur.
(inline assembler'dan bahsetmiyorum; derleyiciyi "baypas" edip
doğrudan ASM yazmak gerekiyor.)

Bu arada, C derleyicisi, "boot" sırasında değişkenleri sıfırlıyor.
Çünkü örn.elektrik gidip-geldiği zaman eğer devreyi besleyen gerilim
kritik bir süre boyunca belirli bir değerin altına inerse bellekteki veri güvenilmez oluyor.
Derleyiciyi yazanlar, doğrudan sıfırlayarak bunu çözmüşler.
Aslında 3-5 saniyelik kesintide bellek içeriği korunur, hemen silinmez.
Bunu anlamak için (geçerlilik testi için) komutlar var.
C derleyicisi yazanlar ya bunu bilmiyor,
ya da "herşeyi sıfırlama" çözümü işlerine gelmiş - bilmiyorum.
Oysa yeni geliştirilen yarı-iletken teknolojisi ile bu süre
10-30 dakikaya kadar çıkabiliyor, ki bu da örn. pil değiştirmek için
yeterli bir süre demektir (bazı kaynaklar birkaç saate kadar varan sürelerden
bahsediyor ama ne gördüm ne de ayrıntılı bir makale okudum -yalan yok;
eğer doğruysa çok yeni bir ürün olmalı.
Burada, "volatile" yani kalıcı-olmayan-bellekten bahsediyorum).
Bu güzel bir gelişme ama, bir belleğin silinme süresinin uzaması
o alana yazma/okuma süresinin de uzaması anlamına geliyor.
Aradaki dengeyi nasıl koruyacaklar merak ediyorum.

Kullandığın çipe ilişkin dökümanların mutlaka olsun, bazı sorularından
kullanım klavuzu ya da mimari-çizelgesi gibi bir kaynağa sahip olmadığını düşünüyorum..
Yanılıyorsam bağışla.
Ben yeterli döküman olmadan yola çıkmam. Her ne kadar o an için lazım olmasa bile
üşenmeyip tümünü okurum. Hepsini anlar mıyım; hayır.

Son olarak, denemekten çekinme. Biraz da deneme-yanılma yapmak lazım.

*/

Aşağıdaki aramaları yaparsan bir çok kaynak çıkıyor :

"In Application Programming 8051"
- (bootloader http://www.8052.com/forum/read/145532
- toplam 7 tane post var. Aslında 1.soruyu soran kişi
- sonradan yine 1.soruya dönüp düzeltme yapmış;
- kafan karışabilir o yüzden tüm postlara gözatmanı öneririm.)

"8051 persistent memory"
- Forumda 8051/52 için bir kişi çok özet ama yararlı bilgiler vermiş :
- (sram, xram vb.) http://www.cygnal.org/ubb/Forum1/HTML/001648.html
- Yorumlar 2006 yılına ait.
- (Yeni 8051'lerde xram çip içine alınmış ve mimari biraz değişmiş olabilir.)

"keil compiler result"
- Çok fazla sonuç döndü; birçok forum var. Önerim, o forumlara gözatman.
- Bununla ilgili arama yaparken, doğrudan senin projenle ilgili değil ama
- ilginç bir makaleye rastladım;
- "Byte code Interpreter for 8051 Microcontroller"
- (cross-platform yorumlayıcı; bir kez yaz, bütün MCU'larda çalışsın)
- pic yerine mcu hedeflenmiş (risc yerine cisc!).
- www.iaeng.org/publication/IMECS2010/IMECS2010_pp1125-1129.pdf
- Makale 2010 yılına ait. Yakın bir gelecekte bunun benzerlerini görebiliriz...
- Fikir hoşuma gitti, paylaşmak istedim.


Son olarak, 8051 için C derleyicilerine genel bir bakışla ilgili
oldukça yararlı olacağını düşündüğüm bir yazı.
Derleyicilerin o kadar da hatasız olmadıkları, nerelerde programcının
optimizasyon yapması gerektiği gibi önemli noktalar var.

"Optimal C Constructs for 8051 Microcontrollers"
- http://www.netrino.com/node/174


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


Bu mesaja 1 cevap geldi.
G
15 yıl
Yarbay

Pic lerde basit bir hack ile program çalışırken flash belleğe yazılabiliyordu. Ben avr ile uğraşmıştım hobi olarak. Onda derleme esnasında sabit nesneleri flash'a atmak mümkündü. Yani rom belleğe atılacak nesnenin değişemez (const) olması gerekiyordu. Gördüğüm kadarıyla 8051 de de olay bu şekilde.

Zaten olması gereken de bu. Rom bellek program çalışırken salt okunur oluyor. Bu durumda senin ihtiyacını karşılamaz, harici eeprom a ihtiyaç var.

Eğer 8051 kullanman zorunlu değil ise avr öneririm. Programlayıcısı çok basittir. Ben breadboard üzerine usb programlayıcı kurmuştum. 2 saniyede programı atıyordu içine. Bütün avr larda dahili eeprom bulunur. Çoğu yerde bulabileceğin atmega8 çipinde 8k flash rom, 1k ram ve 512 byte eeprom var. Ayrıca c/c++ derleyicisi, simulatorü ve IDE ücretsizdir.


Bu mesaja 1 cevap geldi.
T
15 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: elektro_gadget

Pic lerde basit bir hack ile program çalışırken flash belleğe yazılabiliyordu. Ben avr ile uğraşmıştım hobi olarak. Onda derleme esnasında sabit nesneleri flash'a atmak mümkündü. Yani rom belleğe atılacak nesnenin değişemez (const) olması gerekiyordu. Gördüğüm kadarıyla 8051 de de olay bu şekilde.

Zaten olması gereken de bu. Rom bellek program çalışırken salt okunur oluyor. Bu durumda senin ihtiyacını karşılamaz, harici eeprom a ihtiyaç var.

Eğer 8051 kullanman zorunlu değil ise avr öneririm. Programlayıcısı çok basittir. Ben breadboard üzerine usb programlayıcı kurmuştum. 2 saniyede programı atıyordu içine. Bütün avr larda dahili eeprom bulunur. Çoğu yerde bulabileceğin atmega8 çipinde 8k flash rom, 1k ram ve 512 byte eeprom var. Ayrıca c/c++ derleyicisi, simulatorü ve IDE ücretsizdir.


Bununla ilgili programlayıcı ararken atmega8 adnı çok duydum. Ama paralel port, timer sayısı, kesme girişleri filan düşüdüğümde 8051 cazip geliyor. tabi atmega nın bilgilerini bilmiyorum. aslında bütün bunlardan ziyade programlanması nasıldır. yani komut seti?
bu projeyle ilgili şu ana kadar yazdığım fonksiyonlar sadece lcd ile haberleşme ve keypad ile haberleşme ile ilgili oldu. herhangi bir malzemeyi de halen almış değilim. İşte yarın okulda hafıza olayını bi denicem. işime uymazsa, atmega nın da programlaması kolaysa ona geçerim.
Tabi 8051 için programlayıcı da çok zor. dediğin giib board üzerine bile kurulabilen bi cihaz varsa cazip gelir. :D tabi board da yapmam pcb hazırlarım.


Bu mesaja 1 cevap geldi.
C
15 yıl
Yüzbaşı

Tam olarak kullandığın 8051'in modeli nedir? Bazı firmaların dahili EEPROM lu 8051 modelleri mevcut.

Ayrcıa ilk mesajındaki olayı hiç assembly karıştırmadan c de pointer ile yapabilirsin.


Bu mesaja 2 cevap geldi.
E
15 yıl
Onbaşı

arkadaşlar konuyla fazla alakalası yok ama size birşey sorucam bilişim teknolojileri 10.sınıfta okuyorum visual basic programını görüyoruz 2 hafta falan oldu başlayalı bundan önce algoritma örnekleri falan çözdük yarın ise visual basic ten ilk uygulama sınavı olucaz sizce hoca ne tip sorular sorabilir



T
15 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: controller_

Tam olarak kullandığın 8051'in modeli nedir? Bazı firmaların dahili EEPROM lu 8051 modelleri mevcut.

Ayrcıa ilk mesajındaki olayı hiç assembly karıştırmadan c de pointer ile yapabilirsin.



hocam kullandığım entegre 89c51rd2

bunda dahili bir eeprom olduğunu biliyorum. buralarda değişken tanımlayabiliyorum ama bana bu değişkenlerin adresi gerekli ve o adresin işlemci her açıldığında aynı olması gerekli. ama bildiğimiz kadarıyla işlemci, biz bir değişken tanımladığımıda ona bellekten herhangi bir satır ayırıyor yani adresi sabit kalmıyor.

ilk mesajdaki olayı yapmak için benim de ilk aklıma gelen pointer olmuştu ama pointer in içine direkt adress bilgisini atamadığımız için o iş yatmıştı.


quote:

Orijinalden alıntı: emincanekici

arkadaşlar konuyla fazla alakalası yok ama size birşey sorucam bilişim teknolojileri 10.sınıfta okuyorum visual basic programını görüyoruz 2 hafta falan oldu başlayalı bundan önce algoritma örnekleri falan çözdük yarın ise visual basic ten ilk uygulama sınavı olucaz sizce hoca ne tip sorular sorabilir

Hakikaten alakasız bi yazı olmuş. biz bu tür sorunlarımızı üst sınıftaki abilerimizle hallederdik halen de öyle yapıyoruz. tavisye ederim sana da..


Bu mesaja 1 cevap geldi.