ฉันพบบทเรียนการทำขนมอบแต่พวกเขาใช้ภาษาแอสเซมบลีเท่านั้น ฉันติดตามบทเรียนแรก แต่ฉันก็สงสัยว่าจะใช้ C แทนได้อย่างไร ฉันหมายความว่ามีเหตุผลที่พวกเขาคิดค้นภาษาระดับสูงกว่า ฉันพยายามรวบรวมรหัส C กับ.o
ไฟล์object ( ) โดยรวบรวม
.section .init
.globl _start
_start:
bl main
loop$:
b loop$
ไปยังไฟล์อ็อบเจ็กต์อื่นและเชื่อมโยงเข้าด้วยกันและเพื่อให้ได้kernel.img
มา จากนั้นฉันก็เปลี่ยนเคอร์เนลที่มีอยู่แล้วด้วยตัวเอง แต่มันไม่ได้รันโค้ด C รหัส C ที่ฉันเขียนควรเปิด OK LED แล้วกลับมา (จากนั้นมาloop$: b loop$
) แต่ไฟ LED ตกลงจะกะพริบแบบสุ่มสองสามครั้งจากนั้นก็ปิดอยู่ นี่คือรหัส C ของฉัน:
int main(int argc, char ** argv) {
volatile unsigned *gpioAddr = (volatile unsigned *)0x20200000;
*(gpioAddr + 4) = 1 << 18;
*(gpioAddr + 40) = 1 << 16;
return 0;
}
ฉันจะใช้ C สำหรับการพัฒนาระบบปฏิบัติการบน Raspberry Pi ได้อย่างไร
ฉันสงสัยว่ามันเป็นข้อผิดพลาดในรหัส (แม้ว่าฉันจะเป็นแค่มือสมัครเล่น) ฉันรู้ว่าการตั้งค่า C อาจซับซ้อน แต่ฉันไม่ใช่คนแรกที่ทำสิ่งนี้ AFAIK ระบบปฏิบัติการที่โดดเด่นในปัจจุบันส่วนใหญ่ทั้งหมดเขียนด้วยภาษา C ดังนั้นจะต้องมีบทความอธิบายกระบวนการ ฉันจะมีความสุขมากกับรายการของขั้นตอนด้วยดังนั้นฉันสามารถ google สำหรับขั้นตอนเหล่านั้นและอาจถามคำถามที่กว้างกว่าเล็กน้อย
หมายเหตุ: แอสเซมบลี ARM เทียบเท่าของรหัส C ข้างต้นทำงานได้ดี มันเปิดไฟ LED (หลังจากกะพริบเล็กน้อย) ฉันคิดว่า (หวังว่า) ที่บ่งบอกว่า Raspberry Pi ของฉันดี