หากต้องการเรียนรู้วิธีการทำงานคุณไม่ต้องการใช้สิ่งใดในข้างต้น รับ arm cross compiler และเอกสารจาก st, เสร็จสิ้น เริ่มการเข้ารหัส ชิปเหล่านี้มักจะเขียนโปรแกรมได้ง่ายจริงๆ เอกสารประกอบจะบอกคุณว่าบิตในสิ่งที่ลงทะเบียนทำอะไร
ใด ๆ / ทั้งหมดของห้องสมุดเหล่านี้มีวัตถุประสงค์เพื่อลบความเข้าใจ / ภาระ / งานออกจากคุณและทำให้มันรู้สึกเหมือนเพิ่งเรียก api เช่นประสบการณ์การเขียนโปรแกรมประยุกต์ ซึ่งเป็นสิ่งที่คนจำนวนมากต้องการ คุณสามารถใช้แหล่งข้อมูลทั้งหมดสำหรับไลบรารีเหล่านี้เพื่อช่วยให้เข้าใจ แต่เมื่อคุณเริ่มดีขึ้นคุณจะพบช่องโหว่และปัญหาในไลบรารีบางครั้งรหัสที่น่ากลัวมาก โค้ดที่ถูกโยนเข้าด้วยกันเขียนโดยทั่วไปและส่งต่อจากชิปหนึ่งไปอีกชิปหนึ่งอาจสนับสนุนคุณสมบัติที่ชิปของคุณไม่มี ฯลฯ และพวกเขาทั้งหมดมีจำนวนโอเวอร์เฮดมากเกินไป รหัสมากเกินไป 10 ถึง 100 เท่าสำหรับงานแน่ใจว่ามันมากอาจปรับไป แต่ทำไมมันมีในสถานที่แรก?
ไม่ว่าคุณจะไปเองหรือใช้หนึ่งในห้องสมุดเหล่านี้คุณยังควรดูแหล่งที่มาของห้องสมุดที่คุณใช้เพื่อดูว่าคุณพอใจกับสิ่งที่พวกเขากำลังทำอยู่หรือไม่ถ้ามันสมเหตุสมผล ผิดพลาดคุณมีแนวโน้มที่จะขุดสิ่งต่างๆให้มากที่สุดเพื่อค้นหาว่าทำไม
โปรดทราบว่าเอกสารชิปไม่ได้สมบูรณ์แบบนั่นเป็นส่วนหนึ่งของความสนุก
ฉันไม่เข้าใจว่าทำไมการชุมนุมเกิดขึ้นในการสนทนาเกี่ยวกับการเขียนโปรแกรมโลหะเปลือย คุณสามารถไปด้วยการชุมนุมน้อยมาก สำหรับชิป cortex-m เหล่านี้คุณต้องใช้ asm มากเท่านั้นในการบู๊ต:
.globl _start
_start:
.word 0x20001000
.word main
คุณไม่สามารถพึ่งพาข้อมูลหรือ bss และคุณไม่สามารถกลับจากหลักด้วย asm ที่น้อยที่สุด แต่นั่นคือทั้งหมดที่คุณต้องการสำหรับโลหะเปลือยเปล่า ตอนนี้ถ้าคุณต้องการขัดจังหวะคุณต้องมีรายการเพิ่มเติมในตารางเวกเตอร์ เพิ่มเติม. word lines ฉันแนะนำ asm มากขึ้น แต่อาจจะมากกว่า 10 หรือ 20 บรรทัด
นี่คือ asm ทั้งหมดที่ฉันใช้
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20001000
.word reset
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang: b .
.align
.thumb_func
.globl PUT16
PUT16:
strh r1,[r0]
bx lr
.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr
.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
.thumb_func
.globl GET16
GET16:
ldrh r0,[r0]
bx lr
.thumb_func
.globl dummy
dummy:
bx lr
.end
ใช่มันบอกว่า cortex-m0 แต่นี่เป็น bootstrap จริงสำหรับรหัส m4 ของฉัน ฉันชอบที่จะเป็นหัวแม่มือไม่ใช่ thumb2 และฉันเพิ่งใช้รหัสนี้อีกครั้งจาก cortex-m เป็นอีกอันหนึ่งโดยเปลี่ยนที่อยู่ตัวชี้สแต็กตามต้องการดังนั้นจึงใช้งานได้สำหรับ m0, m3 และ m4 ฉันยังไม่มี m7 และฉันก็ทำการวิจัยไม่มาก
การเปิดใช้งาน fpu อาจต้องการ asm อีกสองสามบรรทัดตามคำแนะนำเฉพาะ แต่ประเด็นคืออย่าสับสนการเขียนโปรแกรมระดับต่ำและ asm C มีสิ่งที่คุณต้องกำหนดค่าชิปเช่นเดียวกับการเขียนโปรแกรม ห้องสมุดที่คุณกำลังพูดถึงเขียนด้วยภาษา C ไม่ใช่ asm ดังนั้นแน่นอนว่าพวกเขาไม่จำเป็นต้องใช้ asm เช่นกัน
หากคุณต้องการเรียนรู้การทำงานภายในให้เขียนโค้ดของคุณเอง อย่าใช้ไลบรารีเหล่านี้นอกเหนือจากการอ้างอิง บางครั้งการแฮ็คมันง่ายกว่าการอ่านรหัสของพวกเขา (ไม่ใช่แค่ ST แต่เป็นของผู้ขายทั้งหมดหนึ่งในผู้ขายมีบรรทัดของรหัสดังนั้นน่ากลัวฉันใช้มันเป็นคำถามสัมภาษณ์ไม่ไม่โพสต์ที่นี่)
ST แน่นอน แต่ผู้ขายรายอื่นเช่นกันเพื่อประหยัดพลังงานมีนาฬิกาเปิดใช้งานสำหรับส่วนของชิปดังนั้นก่อนที่คุณจะเข้าไปในและพยายามที่จะกระพริบนำคุณต้องค้นหาบิตเปิดใช้งานสำหรับบล็อก gpio นั้นและดูว่ามันจะออกมา ของการเปิดใช้งานการรีเซ็ตหากไม่เปิดใช้งานการพูดคุยกับตรรกะ gpio นั้นโดยไม่ใช้นาฬิกาจะทำให้มันหยุดโปรเซสเซอร์เนื่องจากรอการตอบสนองจากตรรกะที่จะไม่ตอบสนอง พวกเขาไม่ได้บอกคุณเสมอเกี่ยวกับการเปิดใช้งานเหล่านี้ เมื่อเปิดใช้งานแล้วบางครั้งพวกเขาจะแนะนำคุณผ่าน init สำหรับอุปกรณ์ต่อพ่วงบางอย่าง เอกสาร ST ค่อนข้างดี มาจาก microchip ที่ได้เกรดไม่ดีนักสำหรับเอกสารคุณไม่ควรมีปัญหา
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
หรือDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
ตามลำดับ