ตัวเลือกที่ 1: ภาษาที่ตีความ
นี่ไม่ได้ตอบคำถามโดยตรง (ซึ่งเป็นคำถามที่ยอดเยี่ยม BTW และฉันหวังว่าจะเรียนรู้จากคำตอบที่ตอบโดยตรง) แต่เป็นเรื่องปกติมากเมื่อทำโครงการที่สามารถโหลดโปรแกรมภายนอกเพื่อเขียนโปรแกรมภายนอกใน ภาษาที่ตีความ หากทรัพยากรมี จำกัด (ซึ่งจะอยู่ในโปรเซสเซอร์นี้คุณคิดว่าจะใช้ PIC32 หรือโปรเซสเซอร์ ARM ขนาดเล็กสำหรับสิ่งนี้หรือไม่) เป็นเรื่องปกติที่จะ จำกัด ภาษาไว้ที่ส่วนย่อยของข้อมูลจำเพาะทั้งหมด ยิ่งไปกว่านั้นเครือข่ายเป็นภาษาเฉพาะโดเมนที่ทำบางสิ่งเท่านั้น
ตัวอย่างเช่นโครงการ eluaเป็นตัวอย่างของภาษาตีความต่ำทรัพยากร (64 kB RAM) คุณสามารถบีบ RAM นี้ลงเหลือ 32k หากคุณลบคุณสมบัติบางอย่าง (หมายเหตุ: มันจะไม่ทำงานกับโปรเซสเซอร์ปัจจุบันของคุณซึ่งเป็นสถาปัตยกรรม 8 บิตการใช้ RAM ภายนอกอาจช้าเกินไปสำหรับกราฟิก) มันให้ภาษาที่รวดเร็วและยืดหยุ่นซึ่งผู้ใช้ใหม่สามารถตั้งโปรแกรมเกมได้อย่างง่ายดายหากคุณมี API น้อยที่สุด มีเอกสารมากมายสำหรับภาษาออนไลน์ มีภาษาอื่น ๆ (เช่น Forth และ Basic) ซึ่งคุณสามารถใช้ในลักษณะที่คล้ายกัน แต่ฉันคิดว่า Lua เป็นตัวเลือกที่ดีที่สุดในขณะนี้
ในหลอดเลือดดำที่คล้ายกันคุณสามารถสร้างภาษาเฉพาะโดเมนของคุณเอง คุณจะต้องจัดทำ API แบบเต็มรูปแบบและเอกสารภายนอกเพิ่มเติม แต่ถ้าเกมคล้ายกันทั้งหมดนี้จะไม่ยากเกินไป
ไม่ว่าในกรณีใดก็ตาม PIC18 อาจไม่ใช่โปรเซสเซอร์ที่ฉันใช้สำหรับสิ่งที่เกี่ยวข้องกับการเขียนโปรแกรม / สคริปต์และกราฟิกแบบกำหนดเอง คุณอาจคุ้นเคยกับโปรเซสเซอร์ระดับนี้ แต่ฉันขอแนะนำว่านี่จะเป็นเวลาที่ดีในการใช้บางอย่างกับไดรเวอร์การแสดงผลและหน่วยความจำเพิ่มเติม
ตัวเลือกที่ 2: เพียงแค่ reprogram สิ่งทั้งหมด
อย่างไรก็ตามหากคุณวางแผนที่จะเขียนโปรแกรมเกมทั้งหมดด้วยตัวเองใน C แล้วอย่ากังวลกับการโหลดเฉพาะลอจิกเกมจากการ์ด SD คุณมี Flash เพียง 32kB ในการ reprogram และสามารถรับการ์ด microSD ขนาด 4 GB ได้อย่างง่ายดาย (หมายเหตุ: การ์ดขนาดใหญ่มักจะเป็น SDHC ซึ่งยากต่อการเชื่อมต่อด้วย) สมมติว่าคุณใช้ทุกไบต์สุดท้ายของ 32 kB ที่เหลืออยู่ในการ์ด SD สำหรับเฟิร์มแวร์ 131,072 สำเนาของคุณด้วยตรรกะของเกมที่คุณต้องการ
มีมากมายของ appnotes มีการเขียน bootloaders สำหรับภาพเช่นAN851 คุณจะต้องออกแบบ bootloader ของคุณเพื่อครอบครองพื้นที่ของหน่วยความจำที่เฉพาะเจาะจง (อาจด้านบนของพื้นที่หน่วยความจำคุณจะระบุสิ่งนี้ใน linker) และระบุว่าโครงการเฟิร์มแวร์เต็มไม่ถึงภูมิภาคนี้ Appnote สะกดรายละเอียดนี้ให้ชัดเจนยิ่งขึ้น เพียงแค่แทนที่ "ส่วนการบูตของ PIC18F452" ด้วย "ส่วนการบูตที่ฉันระบุในตัวเชื่อมโยง" และมันจะสมเหตุสมผล
จากนั้น bootloader ของคุณเพียงต้องการอนุญาตให้ผู้ใช้เลือกโปรแกรมที่จะเรียกใช้จากการ์ด SD และคัดลอกสิ่งทั้งหมด UI อาจเป็นไปได้ว่าผู้ใช้ต้องกดปุ่มค้างไว้เพื่อเข้าสู่โหมดการเลือก ตามปกติแล้ว bootloader จะตรวจสอบสถานะของปุ่มนี้เมื่อทำการรีเซ็ตและหากยังไม่ถูกระงับให้ทำการบูทเข้าสู่เกม หากถูกระงับมันจะต้องอนุญาตให้ผู้ใช้เลือกไฟล์บนการ์ด SD คัดลอกโปรแกรมไปและทำการบู๊ตในเกม [ใหม่] ต่อไป
นี่คือคำแนะนำปัจจุบันของฉัน
ตัวเลือก 3: เวทย์มนตร์ลึกที่เกี่ยวข้องกับการจัดเก็บเฉพาะส่วนหนึ่งของไฟล์ฐานสิบหก
ปัญหาเกี่ยวกับกลไกการมองเห็นของคุณคือโปรเซสเซอร์ไม่ได้จัดการกับ API และการเรียกใช้ฟังก์ชั่นมันเกี่ยวข้องกับตัวเลข - ที่อยู่ที่ตัวชี้คำสั่งสามารถกระโดดได้และคาดว่าจะมีรหัสซึ่งประมวลผลการเรียกใช้ฟังก์ชัน ถ้าคุณพยายามที่จะรวบรวมเป็นเพียงแค่ส่วนหนึ่งของโปรแกรมที่เป็นลิงเกอร์จะไม่ทราบว่าจะทำอย่างไรเมื่อคุณโทรหรือcheck_button_status()
toggle_led()
คุณอาจรู้ว่ามีฟังก์ชั่นเหล่านั้นอยู่ในไฟล์ hex บนโปรเซสเซอร์ แต่จำเป็นต้องรู้อย่างแม่นยำว่ามีที่อยู่ใด
ตัวเชื่อมโยงแบ่งรหัสของคุณออกเป็นหลายส่วนแล้ว ในทางทฤษฎีคุณสามารถแยกส่วนนี้ออกเป็นส่วนเพิ่มเติมด้วยบางส่วน-section
และ#pragma
คาถา ฉันไม่เคยทำสิ่งนี้และไม่รู้วิธีการ จนกว่าทั้งสองวิธีข้างต้นจะทำให้ฉันล้มเหลว (หรือมีคนโพสต์คำตอบที่ดีที่สุดที่นี่) ฉันอาจจะไม่เรียนรู้กลไกนี้และดังนั้นฉันจึงไม่สามารถสอนคุณได้