ฉันเพิ่งเริ่มเรียนรู้การชุมนุมและรู้เกี่ยวกับตัวเชื่อมโยงสคริปต์และรายละเอียดในระดับต่ำอื่น ๆ ของการเขียนโปรแกรมฮาร์ดแวร์ ฉันยังสอนสถาปัตยกรรมคอมพิวเตอร์ด้วยตัวเองและบางแห่งตามแนวที่ฉันกลัวว่ารูปภาพของฉันในแบบจำลองหน่วยความจำอาจจะผิดตลอดไป
ตามสิ่งที่ฉันเข้าใจในปัจจุบันรหัสและข้อมูลทั้งหมดอยู่ในหน่วยความจำแบบไม่ลบเลือนหลังจากที่เรา 'เผา' ไบนารีลงบนหน่วยประมวลผล - RAM ที่มีความผันผวนจะไม่มีอะไรเกิดขึ้นเมื่อรีเซ็ต เมื่อโปรแกรมเริ่ม 'เรียกใช้งาน' โปรแกรมจะทำเช่นนั้นจากที่อยู่ 0x0000 ซึ่งเกือบตลอดเวลา (AFAIK) ที่อยู่ต่ำที่สุดใน Flash ดังนั้นคำแนะนำจะถูกสลักลงบนบัสที่เชื่อมต่อแฟลชกับซีพียูหลักและนั่นคือจุดที่เกิดการดำเนินการจริง อย่างไรก็ตามเมื่อเราพูดถึงการดึงหรือเก็บข้อมูลจากหน่วยความจำของ CPU เรามักจะพูดถึง RAM - ฉันรู้ว่าเราสามารถอ่าน / เขียนข้อมูลจากหน่วยความจำของโปรแกรมได้เช่นกัน (ฉันเคยเห็นสิ่งนี้ทำบน AVR) แต่มันไม่เป็นเรื่องธรรมดาเหรอ? เป็นเพราะแรมเร็วกว่า ROM ที่เราต้องการเก็บข้อมูลหรือไม่
คำตอบที่ได้รับการยอมรับสำหรับคำถามนี้บอกว่าส่วนใหญ่ของรหัสรันออกจาก RAM
นี่หมายความว่ารหัสรันไทม์เริ่มต้น (ซึ่งเรียกใช้จาก Flash) ต้องคัดลอกโปรแกรม opcodes ทั้งหมดจาก Flash ไปยัง RAM และแมปที่อยู่ใด ๆ ใน Flash ให้ชี้ไปที่ RAM เพื่อให้ CPU ดึง opcodes จากที่นั่น มันคล้ายกับกระบวนการที่เราย้ายส่วน. data จาก ROM ไปยัง RAM เมื่อเริ่มต้นหรือไม่
ฉันสามารถจินตนาการว่าสิ่งนี้จะง่ายกว่าในสถาปัตยกรรม von Neumann ที่โปรแกรมและความทรงจำของข้อมูลแชร์รถบัส แต่ในสถาปัตยกรรม Harvard ไม่ได้หมายความว่ารหัสและข้อมูลทั้งหมดจะต้องผ่านการลงทะเบียน CPU ก่อนหรือไม่
อย่างที่คุณคงเดาได้ฉันสับสนกับธุรกิจทั้งหมดนี้เล็กน้อย การตั้งโปรแกรมให้อยู่ในระดับที่สูงกว่านามธรรมฉันมักจะมีความสุขกับรายละเอียดดังกล่าว ความช่วยเหลือใด ๆ ที่ชื่นชม