'ถ่านที่ไม่ได้ลงชื่อใกล้' คืออะไร


12

ผมอ่านแผ่นข้อมูลunsigned char near Sample_Xและผมพบว่าตัวแปรที่กำหนดให้เป็น นี่คืออะไรและสิ่งนี้แตกต่างจากunsigned char Sample_Xอย่างไร


3
อาจช่วยให้คอมไพเลอร์ใช้ offsets ญาติขนาดเล็ก?
Neil_UK

6
จากประสบการณ์ส่วนหนึ่งกับ x86 ใน DOS ฉันคาดหวังสิ่งนี้กับตัวชี้บางประเภทและในสภาพแวดล้อมแบบ 16 บิต ทว่าสิ่งที่ OP อ้างถึงนั้นไม่เหมือนตัวชี้และลิงก์แผ่นข้อมูลก็มีความหมายว่า MCU บางตัว ค้นหาคำหลัก "ใกล้" ในลิงค์สองลิงก์ต่อไปนี้: microchip.com/forums/m549709.aspx barrgroup.com/Embedded-Systems/How-To/Effic-C-Code
frr

3
ควรสังเกตว่านี่เป็นส่วนขยายคอมไพเลอร์ไม่ใช่มาตรฐาน C
PlasmaHH

1
FYI คำหลักที่nearเป็นตัวอย่างของหนึ่งระบุระดับการจัดเก็บข้อมูล มันบอกคอมไพเลอร์เกี่ยวกับวิธีการหรือที่เก็บข้อมูลสำหรับตัวแปรควรถูกจัดสรร (ดูคำตอบของ filo ด้านล่างสำหรับข้อมูลเพิ่มเติมnear)
โซโลมอนช้า

1
นี่เป็นหัวข้อจริงๆหรือไม่
user541686

คำตอบ:


20

MCU ที่ระบุในที่นี้คือซีรี่ส์ Freescale MC9C08ซึ่งใช้สถาปัตยกรรม HC08 เวอร์ชันที่ปรับปรุงเล็กน้อย นี่คือคอร์ 8 บิตซึ่ง (คล้ายกันมาก) มีคำแนะนำที่สั้นกว่าและเข้าถึงที่อยู่ "ศูนย์หน้า" ได้เร็วกว่าที่อื่น ที่อยู่ศูนย์หน้ามีความยาวเพียง 8 บิตแทนที่จะเป็น 16 บิตดังนั้นคำแนะนำในการอ้างอิงสามารถเป็น 2 ไบต์แทน 3 และใช้เวลาน้อยกว่า 1 รอบในการดำเนินการตามผลลัพธ์

คำหลัก "ใกล้" สั่งให้คอมไพเลอร์ใส่ตัวแปรใน "ศูนย์หน้า" ถ้าเป็นไปได้เพื่อประสิทธิภาพที่ดีขึ้น คอมไพเลอร์ที่เขียนโดยเฉพาะสำหรับการพัฒนาแบบฝังตัวเช่นนี้มักจะนำส่วนขยายดังกล่าวไปใช้กับภาษา


ฉันชอบคำตอบนี้ แต่คุณมีแหล่งข้อมูลของคุณหรือไม่
Clonkex

1
ฉันแก้ไขคำตอบเพื่อให้รายละเอียดและข้อมูลอ้างอิงเพิ่มเติม อันที่จริงมันมาจากสถาปัตยกรรม HCS08 รุ่นใหม่ของ Freescale แต่นี่เป็นโค้ดที่เข้ากันได้กับสถาปัตยกรรม HC08 และ HC05 ที่เก่ากว่า (ตอนนี้เป็นโบราณในเชิงบวก) สถาปัตยกรรม 6800 และ 6502 นั้นก็มีความสัมพันธ์กันอย่างใกล้ชิด
Chromatix

ดีมาก!
Clonkex

ดังนั้นการใช้งานจะคล้ายกับregisterคำหลัก (สำหรับกรณีที่คุณแน่ใจจริงๆว่านี่คือที่ที่คุณต้องการเพิ่มประสิทธิภาพ) แต่รุนแรงน้อยกว่าเล็กน้อยหรือไม่
vsz

มากหรือน้อย. ความแตกต่างส่วนใหญ่เกิดจากข้อเท็จจริงที่ว่าโดยปกติแล้วซีพียู 8 บิตจะไม่มีธนาคารที่ลงทะเบียนต่อการสะสมเพียงหนึ่งเดียวและการลงทะเบียนดัชนีสองสามรายการ แต่ก็คล้ายกับการใช้ตัวชี้ "ใกล้" กับ "ไกล" ใน x86 ซึ่งมีความแตกต่างในขนาดของที่อยู่และระยะเวลาที่ใช้ในการเข้าถึง
Chromatix

15

ขึ้นอยู่กับสถาปัตยกรรมของ CPU อาจมีคำแนะนำที่แตกต่างกันในการเข้าถึงข้อมูลตามที่อยู่ต่าง นี่คือตัวอย่างจาก Keilสำหรับหนึ่งในคอมไพเลอร์

การเข้าถึงใกล้มีขีด จำกัด หน่วยความจำบางอย่างดังนั้นคุณอาจให้คำแนะนำแก่คอมไพเลอร์เพื่อวางตัวแปรที่ใช้บ่อยในพื้นที่ที่สามารถเข้าถึงได้โดยคำแนะนำที่สั้นกว่า (อธิบายอย่างชัดเจนถึงการเข้าถึงพื้นที่ที่อยู่แบบ 32- บิต พื้นที่) สิ่งนี้สามารถแปลเป็นรหัสที่เล็กลง / เร็วขึ้น



5
@AndrewMorton: คำถามนั้นเกี่ยวข้องfarและnearชี้ไปที่สถาปัตยกรรม 8086 ที่ล้าสมัยเป็นส่วนใหญ่ คำหลักเดียวกันนี้ใช้ในลักษณะที่เกี่ยวข้อง แต่แตกต่างกันในไมโครคอนโทรลเลอร์ 8 บิต
supercat

@supercat คำถามที่ถามโดยทั่วไปถึงแม้ว่าคำตอบจะมุ่งเน้นไปที่สถาปัตยกรรมเก่า ใครบางคนที่มีความรู้ควรเขียนคำตอบเพื่ออธิบายวิธีใช้ไมโครคอนโทรลเลอร์ 8 บิต
อยากรู้อยากเห็น dannii

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