Seçenek 1: Yorumlanan Diller
Bu doğrudan soruyu cevaplamıyor (bu mükemmel bir soru, BTW ve doğrudan doğruya cevap veren bir cevaptan öğrenmeyi umuyorum), ancak harici programları yazmak için harici programlar yükleyebilen projeler yaparken çok yaygındır. yorumlanmış bir dil. Kaynaklar sıkıysa (bu işlemcide olacaklar, bunun için bir PIC32 veya küçük ARM işlemcisi kullanmayı düşündünüz mü?), Dili tam spesifikasyonun bir alt kümesiyle sınırlamak yaygındır. Zincirin daha da ötesinde, sadece birkaç şey yapan etki alanına özgü diller vardır.
Örneğin, elua projesi düşük kaynaklı (64 kB RAM) yorumlanmış dil örneğidir. Bazı özellikleri kaldırırsanız bunu 32k RAM'e kadar sıkıştırabilirsiniz (Not: 8-bit mimari olan mevcut işlemcinizde çalışmaz. Harici RAM kullanmak muhtemelen grafikler için çok yavaş olacaktır). En az API sağlarsanız yeni kullanıcıların oyunları kolayca programlayabileceği hızlı ve esnek bir dil sağlar. Çevrimiçi dil için birçok doküman mevcut. Benzer bir şekilde kullanabileceğiniz diğer diller (Forth ve Basic gibi) vardır, ancak şu anda Lua'nın en iyi seçenek olduğunu düşünüyorum.
Benzer bir şekilde, alana özgü kendi dilinizi oluşturabilirsiniz. Daha kapsamlı bir API ve harici belgeler sağlamanız gerekir, ancak oyunların hepsi benzer olsaydı bu çok zor olmazdı.
Her durumda, PIC18 muhtemelen özel programlama / komut dosyası ve grafik içeren bir şey için kullanacağım işlemci değil. Bu işlemci sınıfına aşina olabilirsiniz, ancak bunun bir ekran sürücüsü ve daha fazla bellek ile bir şey kullanmak için iyi bir zaman olacağını öneririm.
2. Seçenek: Sadece her şeyi yeniden programlayın
Bununla birlikte, zaten tüm oyunları C'de programlamayı planlıyorsanız, sadece SD karttan oyun mantığını yüklemekle uğraşmayın . Yeniden programlamak için sadece 32kB Flash'a sahipsiniz ve bunun için kolayca 4 GB microSD kart alabilirsiniz. (Not: daha büyük kartlar genellikle SDHC'dir, bu da arayüzle daha zordur). 32 kB'nizin her son baytını kullandığınızı varsayarsak, SD kartta, ihtiyacınız olan herhangi bir oyun mantığına sahip yazılımınızın 131.072 kopyası için yer kalır.
AN851 gibi PIC'ler için önyükleyici yazmak için birçok uygulama vardır . Önyükleyicinizi belirli bir bellek bölgesini kaplayacak şekilde tasarlamanız gerekir (muhtemelen bellek bölgesinin en üstünde, bunu bağlayıcıda belirtirsiniz) ve tam bellenim projelerinin bu bölgeye ulaşmadığını belirtmeniz gerekir. Appnote bunu daha ayrıntılı olarak açıklıyor. Sadece "PIC18F452'nin önyükleme bölümünü" "bağlayıcıda belirttiğim önyükleme bölümünü" ile değiştirin ve hepsi anlamlı olacaktır.
Ardından, önyükleyicinizin kullanıcının SD karttan çalışacak bir program seçmesine ve her şeyi kopyalamasına izin vermesi yeterlidir. Kullanıcı arabirimi, kullanıcının seçim moduna girmek için bir düğmeyi basılı tutması olabilir. Normalde, önyükleyici sıfırlama sırasında bu düğmenin durumunu kontrol eder ve basılı tutulmuyorsa oyuna önyükleme yapar. Basılı tutulursa, kullanıcının SD kartta bir dosya seçmesine, programı kopyalamasına ve [yeni] oyuna önyüklemeye devam etmesine izin vermesi gerekir.
Bu benim şu anki tavsiyem.
Seçenek 3: Onaltılık dosyanın yalnızca bir bölümünü depolamayı içeren derin sihir
Öngörülen mekanizmanızla ilgili sorun, işlemcinin API'ler ve işlev çağrıları ile ilgilenmemesi , komut işaretçisinin atlayabileceği sayılarla ilgilenmesi ve bir API spesifikasyonuna göre bir işlev çağrısı yürüten kod olmasını beklemesidir. Programın sadece bir bölümünü derlemeye çalışırsanız, linker check_button_status()
veya aradığınızda ne yapacağını bilemez toggle_led()
. Bu işlevlerin işlemci üzerindeki hex dosyasında bulunduğunu biliyor olabilirsiniz, ancak tam olarak hangi adreste bulunduklarını bilmeleri gerekir.
Bağlayıcı, kodunuzu zaten birden çok bölüme ayırıyor; teorik olarak bunu bazı -section
ve #pragma
büyülerle ek bölümlere ayırabilirsiniz. Bunu hiç yapmadım ve nasıl yapacağımı bilmiyorum. Yukarıdaki iki yöntem başarısız olana kadar (ya da burada harika bir cevap gönderene kadar), muhtemelen bu mekanizmayı öğrenmeyeceğim ve bu yüzden size öğretemiyorum.