003_linux之点灯(C语言版)

2021-06-19 17:06

阅读:496

linux点灯在汇编版中说明了硬件中点灯的原理,C语言中不再陈述,说白了就是控制GPXCONGPXDTA寄存器就行了,芯片是S3C2440A芯片,查看芯片手册就能懂了,其他芯片也是一样的。C语言版就只说明了程序,共三个。LED.c是主程序运行的,start.s是汇编启动文件,makefile是编译时候为了快捷的编译(这个以后再说)。当然,这里只说明了如何编写C的运行程序,具体编译之后生成什么样的文件,里面是什么东西就没必要说明了,可以去了解一下,编译之后生成反汇编码,然后生成机器码文件,C语言的程序具体还是会生成机器码才能运行,中间过程就不说了,这个涉及的范围有点广了。

一: 简单C语言点灯:

需要建立三个文件:

                     Led.c文件   

                     Start.S文件 

                     Makefile文件

技术分享图片

解析led.c文件,由汇编指令中进一步进行C语言的开发,汇编编程只是为了了解内部如何进行的,C语言能够快速的开发,废话不多说,解析C文件

int main()

{

    unsigned int *pGPFCON = (unsigned int *)0x56000050;

    unsigned int *pGPFDAT = (unsigned int *)0x56000054;

 

   

    *pGPFCON = 0x100;

   

   

    *pGPFDAT = 0;

 

    return 0;

}

技术分享图片

解析Start.S文件

 

.text

.global _start

_start:

   

    ldr sp, =4096 

//  ldr sp, =0x40000000+4096 

   

    bl main

halt:

    b halt

Makefile文件

这个指令后面再讲:

all:

    arm-linux-gcc -c -o led.o led.c

    arm-linux-gcc -c -o start.o start.S

    arm-linux-ld -Ttext 0 start.o led.o -o led.elf

    arm-linux-objcopy -O binary -S led.elf led.bin

    arm-linux-objdump -D led.elf > led.dis

clean:

    rm *.bin *.o *.elf *.dis

 


评论


亲,登录后才可以留言!