program belleği

Başlatan EMKE, 29 Ekim 2014, 22:18:47

EMKE

Arkadaşlar ve büyüklerim sizlerden öğrenmek istediğim bir konu var  program belleği parçalı olan pıc'lerde  pıcbasıc ile program yazarken başka bir program sayfasına geçiş nasıl yapılıyor bununla ilgili basit herhangi bir örnek varsa paylaşabilirmisiniz ?

ete

Öğrenmeye çalıştığın şey Assembler ile alakalı bir konudur. Basic bütün hafızayı tek hafıza gibi kullanmanı sağlıyor.
Yalnızca derleme esnasında  1.sınırı aştın , 2. sınırı aştın gibi ikazlar (Code Cross Boundary) vererek kullanıcıyı uyarır.
Bu konuda dikkat edilmesi gerken tek şey BRANCH komutunun kullanılmasındadır. Şayet kullanılan işlemci ikişer K lık banklar halinde ise ve program bir den fazla ban'a yayılmış ise Branch komutu da ikinci bankta bir adresi gösteriyor ise komut doğru çalışmayabilir. Bu gibi hususlara dikkat ettikten sonra basic kullanımında bank denilen hafıza bloklarına kafa yormak gerekmiyor.

Ete

EMKE

Ete hocam cevap için teşekkür ederim kullandığım işlemciler genelde hep büyük hafızalı tek program belleğine sahip olduğu için bu gibi program belleği parçalı işlemcilere ihtiyacım olmadı ama şimdi tasarlamam sistemde çokda büyük hafızalı bir işlemciye ihtiyacım olmuyacak gibi bunun için öğrenmek istemiştim benim öğrenmek istediğime cevap vermişsiniz sağolun ama bir sorum daha olucak size şimdi program belleği dediğiniz gibi 2kb dilimlere ayrılmış bir işlemci seçicem ve programı yazarken 2 kb sınırı aştığımda branch yada branchl komutlarını kullanmama gerek varmı mesela 1. sayfadyken 2. sayfadaki  bir alt program çalıştırmak istediğimde ?.

ete

2048 byte geçen  hafızaya sahip hemen her işlemcide hafıza parçalı zaten. Parçalı derken , Bank denilen  ayrı birimler halinde dir. Derleyici bu işi hallediyor. Sende çok zorda kalmadıkça branch komutunu kullanmayıver.

Ete

EMKE

hocam cevap için teşekkür ederim sağolun allah razı olsun bilgilerinizi paylaştığınız için .

aoe

#5
Alıntı yapılan: ete - 30 Ekim 2014, 07:49:08
2048 byte geçen  hafızaya sahip hemen her işlemcide hafıza parçalı zaten. Parçalı derken , Bank denilen  ayrı birimler halinde dir. Derleyici bu işi hallediyor. Sende çok zorda kalmadıkça branch komutunu kullanmayıver.

Ete
merakımdan soruyorum; niçin 2kb hafızalı bi işlemci kullanıyoruzki? veya hani neden bu işlemciler üretilmeye devam ediliyor çokmu ucuzlar tek avatajı bumu yani. hani bu devirde ne gerek var 2kb hafızamı kaldı diye düşünüyorum ama kullanıldığı alanlar amaçlar farklıysa bilemem.böyle düşünmem yanlışmı doğrumu bu konuda beni aydınlatırsanız sevinirim

ete

Seni tutanmı var? İstediğini kullanırsın elbette. Ancak bu soruyu biraz araştırma yaptıktan sonra sormanı isterdim.
Pek işlmecide hafıza bile olmuyordu eskiden. Harici hafızalara program ve data yerleştiriliyordu. Hala günümüzde bunun örnekleri de vardır sanırım. Çok araştırmadım. Öncelikle kendine sorman lazım ben neden buradayım diye.
Biz Mikrodenetleyici programlayarak devreler yapmak için buradayız. Tercih ettiğimiz mikrodenetleyici aileside şimdilik Microchip firmasının üretim serisinden piyasamızda bulunabilen denetleyiciler. Neden bu tercihi yaptık onuda söyleyeyim. Öncekle piyasada bulunuyor. İşimize yarayacak güzel özellikleri var. ADC- USART - HPWM ve benzer özellikleri kolaylıkla projelerimizde kullanabiliyoruz. En önemlisi gerek derleme işlemlerinde gerek program yazma ve sonunda denetleyiciye program atma işlemlerinde alt yapı mevcut.  Program desteği çok fazla. Eh burada örneklerde üretiyoruz. Daha başka ne lazım? biraz akıl biraz ilgi ve fiziki olarak devre yapma becerisi. Bunlar burada bir araya toplandığı için bu az hafızalı denetleyiciler ile uğraşıyoruz. Hafıza az gibi gözükebilir yetmediği zamanda 32K lara kadar çıkabilen denetleyiciler var. Daha büyüklerini araştırmadım onlarda vardır elbette. Sonuçta bu hafızalar fazlası ile yetiyor yapılan işlere. Şimdiye kadar yüzlerce program yazdım , devre yaptım yalnızca bir veya iki kere hafıza sıkıntısı çektim. Onda da hemen bir üst denetleyiciye geçerek sorunu çözdüm.  Toparlarsak bir sorunumuz yok şimdilik çok şükür. Yanlışmı düşünmüşüm diye sormuşsun bence yanlış düşünmüşün. Muhtemelen bir 2K yı az bir hafıza olarak nitelendirip neden 100K değil gibi bir mantık kurdun galiba.  Ama bir düşün bakalım gerek varmı? Bence yok. zira kullanılan hafıza genelde endüstriyel bir tasarım için kullanılıyor. Biraz konuyu geniş kapsamlı olarak düşünürsen seninde aklın yatar sanırım.

Ete

aoe

#7
Alıntı yapılan: ete - 30 Ekim 2014, 17:17:51
Seni tutanmı var? İstediğini kullanırsın elbette. Ancak bu soruyu biraz araştırma yaptıktan sonra sormanı isterdim.
Pek işlmecide hafıza bile olmuyordu eskiden. Harici hafızalara program ve data yerleştiriliyordu. Hala günümüzde bunun örnekleri de vardır sanırım. Çok araştırmadım. Öncelikle kendine sorman lazım ben neden buradayım diye.
Biz Mikrodenetleyici programlayarak devreler yapmak için buradayız. Tercih ettiğimiz mikrodenetleyici aileside şimdilik Microchip firmasının üretim serisinden piyasamızda bulunabilen denetleyiciler. Neden bu tercihi yaptık onuda söyleyeyim. Öncekle piyasada bulunuyor. İşimize yarayacak güzel özellikleri var. ADC- USART - HPWM ve benzer özellikleri kolaylıkla projelerimizde kullanabiliyoruz. En önemlisi gerek derleme işlemlerinde gerek program yazma ve sonunda denetleyiciye program atma işlemlerinde alt yapı mevcut.  Program desteği çok fazla. Eh burada örneklerde üretiyoruz. Daha başka ne lazım? biraz akıl biraz ilgi ve fiziki olarak devre yapma becerisi. Bunlar burada bir araya toplandığı için bu az hafızalı denetleyiciler ile uğraşıyoruz. Hafıza az gibi gözükebilir yetmediği zamanda 32K lara kadar çıkabilen denetleyiciler var. Daha büyüklerini araştırmadım onlarda vardır elbette. Sonuçta bu hafızalar fazlası ile yetiyor yapılan işlere. Şimdiye kadar yüzlerce program yazdım , devre yaptım yalnızca bir veya iki kere hafıza sıkıntısı çektim. Onda da hemen bir üst denetleyiciye geçerek sorunu çözdüm.  Toparlarsak bir sorunumuz yok şimdilik çok şükür. Yanlışmı düşünmüşüm diye sormuşsun bence yanlış düşünmüşün. Muhtemelen bir 2K yı az bir hafıza olarak nitelendirip neden 100K değil gibi bir mantık kurdun galiba.  Ama bir düşün bakalım gerek varmı? Bence yok. zira kullanılan hafıza genelde endüstriyel bir tasarım için kullanılıyor. Biraz konuyu geniş kapsamlı olarak düşünürsen seninde aklın yatar sanırım.

Ete
ben program belleğinden bahsediyordum ama ram bellek değil. ayrı şeylerden bahsediyoruz değilmi :S ?

ete

Evet aynı şeyden bahsediyoruz.

Ete

EMKE

örnek veriyorum karaşimşek devresi yapıcaksan 32 kb lık bir işlemciye ihtiyacın yok ama çamaşır makinası için bir program yazıcaksan ve grafik lcd vs gibi donanımlar kullanıcaksanda  2 kb lık bir işlemcide işini görmez bunları ayırt edebildiğinde olayı anlarsın ,ha karaşimşek derken küçümsemek için söylemedim  kb lık işlemcileri ben 16f628A ile oda  kb lık bir işlemcidir ,ticari bir projede yaptım bayada fonksiyonel bir cihaz oldu özetle hayal gücüne kalmış olay  ;)

est32

2Kb bellek ile neler yapılabilir?
16f628A işlemci ile şu devreyi yaptım:

42 kullanıcılı şifreli kilit
-16*2 lcd ekranlı(ayrıca Türkçe karakterler de tanımlı)
-4*3 keypad tarama
-42 kullanıcılı(42 farklı kullanıcı birbirinden farklı şifre kullanabiliyor)
-şifreler eepromda tutuluyor
-kullanıcılar kendi şifrelerini değiştirebiliyor
-yetkili kişi istediği kullanıcıyı yetkilendiriyor, istediğinin yetkisini alıyor(şifre değişmiyor)
-yetkili kişi istediği kullanıcının veya aynı anda hepsinin şifresini silebiliyor(hem yetkisizleştiriyor hem de şifresini default yapıyor)
-şifre doğru girildiğinde kapı ardındaki 12f675 ile seri haberleşip kapıyı açtırıyor

Çok zor oldu ama tüm bunları 2KB belleğe sığdırmayı başarabildim. ASM yazan arkadaşlar eminim daha fazlasını da sığdırır.
Ayrıca aşağıdaki cihaz üzerinde de 1KB bellekli 12f675 var.Hem 3310 ekrana yazıyor, hem de DS18B20 ile haberleşiyor.

http://etepic.com/index.php?topic=1427.0,

Reklam gibi olduğunun farkındayım ama bu kadarcık bellekle ben bile bunları yapmışsam, ETE hoca gibi bu işin üstadları  daha neler yapar.

~ENES~

#11
hocam yeni konu açmak istemediğim için buradan sorayım soruyu dedim zira program hafızasıyla alakalı gibi geliyor...
18f452 ile program yazıyorum hayli uzun oldu 1800 satır falan hafıza dolduğundanmıdır nedir kesme için on interrupt goto kesme komutunu verince mcs ekteki hataları veriyor on interrupt konutunu silince bir sorun yok sizce hafıza mı doluyor yoksa baska sebebi var  mıdır yardım ederseniz minnettar kalırım...
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

Program hafızasını doldurmuşsun.
Ete

~ENES~

Hocam ama kesme komutunu vermeden yazdigim  zaman error vermiyor ? Sadece on interrupt goto kesme yazinca bu hataları veriyor hatta kesme alt programı bile dururken sadece on interrupt satirini pasif edince yine sorunsuz derliyor ??
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

ete

her hangi bir LCD komut satırını kapat ama On interrupt satırı kalsın derle bakalım ne olacak?

Ete

Powered by EzPortal