ปัญหาสำคัญ
ปัญหานี้มีผลต่อรหัสที่ตั้งใจจะดําเนินการในพริบตา
โดยการใช้ alt_load()
เพื่อคัดลอกส่วนที่เขียนได้ไปยัง RAM
หากจะคัดลอกส่วน ELF (เช่น .bss
)
แฟลชไปยัง RAM โดยใช้ alt_load()
เครื่องมือสร้างซอฟต์แวร์
ตรวจสอบว่าส่วนนั้นพอดีกับ RAM แต่ไม่เหมาะกับใน
หน่วยความจําแฟลชที่จะตั้งโปรแกรม เครื่องมือสร้าง
ไฟล์การเขียนโปรแกรมที่ไม่มีการระบุข้อผิดพลาดด้านขนาดโค้ด
ปัญหานี้มีแนวโน้มที่จะส่งผลกระทบต่อคุณหากหน่วยความจําเป้าหมายของคุณ
คือแฟลช MAX 10 onchip ซึ่งมีขนาดค่อนข้างเล็ก ปัญหานี้
จะส่งผลกระทบกับคุณก็ต่อเมื่อคุณกําลังใช้ alt_load()
เท่านั้น
คุณสามารถระบุได้ด้วยตนเองว่าโค้ดของคุณเหมาะกับการมองหรือไม่ ที่จุดเริ่มต้นของไฟล์ .objdump จะถูกสร้างขึ้นเมื่อ คุณสร้างแอปพลิเคชันของคุณ ไฟล์นี้มีข้อมูลที่ คุณสามารถใช้เพื่อตรวจสอบว่าแต่ละส่วนพอดีกับแฟลชของคุณหรือไม่ ดังที่แสดงในตัวอย่างต่อไปนี้
ไฟล์ .objdump ถูกสร้างขึ้นในแอปพลิเคชัน
ไดเรกทอรีระดับบนสุดของแอปพลิเคชัน คุณสามารถสร้างได้จาก
บรรทัดคําสั่งโดยพิมพ์ make app
ในแอปพลิเคชัน
ได เรก ทอรี
ใกล้กับด้านบนสุดของไฟล์ .objdump เป็นรายการ ในส่วนที่คล้ายกับต่อไปนี้:
Sections: | ||||||
Idx | Name | Size | VMA | LMA | File off | Algn |
0 | .entry | 00000020 | 00028000 | 00028000 | 00001000 | 2**5 |
| | CONTENTS, ALLOC, LOAD, READONLY, CODE | ||||
1 | .exceptions | 00000220 | 00028020 | 00028020 | 00001020 | 2**2 |
| | CONTENTS, ALLOC, LOAD, READONLY, CODE | ||||
2 | .text | 00006504 | 00028240 | 00028240 | 00001240 | 2**2 |
| | CONTENTS, ALLOC, LOAD, READONLY, CODE | ||||
3 | .rodata | 0000005c | 00040000 | 0002e744 | 00008000 | 2**2 |
| | CONTENTS, ALLOC, LOAD, READONLY, DATA | ||||
4 | .rwdata | 00001b78 | 0004005c | 0002e7a0 | 0000805c | 2**2 |
| | CONTENTS, ALLOC, LOAD, DATA, SMALL_DATA | ||||
5 | .bss | 00000154 | 00041bd4 | 00030318 | 00009bd4 | 2**2 |
| | ALLOC, SMALL_DATA |
แต่ละส่วนจะมีค่าขนาด VMA และ LMA VMA คือ ที่อยู่รันไทม์ และ LMA คือที่อยู่การโหลด หากส่วนไม่ใช่ คัดลอก, VMA = LMA หากมีการคัดลอกส่วน ข้อมูลดังกล่าวจะถูกคัดลอกมาจาก LMA ถึง VMA
ในกรณีนี้ ซึ่งใช้ alt_load()
.entry
และ.text
ไม่ได้คัดลอก (VMA = LMA) .rodata
, .rwdata
,
และ.bss
คัดลอกจากแฟลชแอดเดรส (LMA) ไปยัง RAM
ที่อยู่ (VMA)
แฟลชในตัวอย่างนี้มี0x28000มากมายให้0x30000
ส่วน .rwdata
ถูกตั้งโปรแกรมให้เริ่มกะพริบ
ที่ VMA = 0x2e7a0 และขยายเป็นขนาด VMA = 0x2e7a0 0x1b78 =
0x30518 ดังนั้นจึงไม่สามารถใช้งานได้ทันที