มีค่าคงที่ตัวประมวลผลล่วงหน้าสำหรับขนาดหน่วยความจำหรือไม่


13

ฉันต้องการคอมไพล์ของฉันเพื่อแยกรหัสบางอย่างขึ้นอยู่กับพื้นที่แฟลช / โปรแกรมที่มีอยู่ เพื่อใช้ในโค้ดตัวอย่างของไลบรารีที่ฉันสนับสนุน ในขณะที่โซลูชันปัจจุบันของฉันคือใช้ #ifdef ของประเภทโปรเซสเซอร์ แต่ฉันต้องการที่จะเป็นทั่วไปและไม่ต้องระบุชิปต่างๆทั้งหมด ค่อนข้างจะดีถ้ามีค่าคงที่ pre-processor ที่ระบุขนาดที่พร้อมใช้งาน

ที่ฉันไม่คล่องพอใน gcc และหรือ avr-gcc ฉันอาจคาดหวังว่าจะพบค่าคงที่บางอย่างที่คล้ายกันที่กำหนดจุดเริ่มต้นและจุดสิ้นสุดของกอง

ในกรณีตัวอย่าง คือทั้ง UNO และ Leo มี Flash 32K แต่ไลบรารี่หลักของ Leo ใช้ 4K สำหรับการรองรับ USB ทำให้มีเพียง 28K เท่านั้น การสาธิตห้องสมุดของฉันใกล้ถึงขีด จำกัด สูงสุดของ UNO และฉันต้องการตัดออกโดยอัตโนมัติตามพื้นที่ว่างของโปรแกรมที่มีอยู่


ฉันเคยเห็นโปรแกรมที่ทำสิ่งนี้แล้ว แต่ฉันไม่พบเลย
TheDoctor

คำตอบ:


10

ค้นหาio__.hไฟล์สำหรับไมโครคอนโทรลเลอร์ของคุณบน Linux ที่ตั้งอยู่/usr/lib/avr/include/avrบน Windows จะอยู่ในตำแหน่งที่ค่อนข้างคล้ายกัน

/* Constants */เลื่อนลงไปที่ส่วนที่ระบุว่า มีการกำหนดมาโครที่น่าสนใจไว้สองอันโดยFLASHENDเป็นอันที่คุณควรสนใจคุณสามารถใช้มันเป็นตัวอย่างได้ดังนี้:

#if FLASHEND > 0x8000
/* Include some extra code when sufficient flash is available. */

#endif
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.