资源描述:
《5实验五gnu-arm裸奔程序设计实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验五GNU-ARM裸奔程序设计【实验目的】I了解在linux下编写ARM裸奔程序的步骤2掌握GNU下arm汇编程序设计的方法3了解链接脚本的作用4了解arm-linux-objdump,arm-linux-objcopy等工具的使用方法【实验内容】1编写汇编程序led.s-闪烁开发板上的LED灯2编写链接脚本3编写一个包含多文件的Makefileo4烧写到开发板中,运行查看情况【实验步骤】1LED灯的裸奔程序(1)新建一个项目目录:$mkdirled$cdled(2)编写汇编程序文件geditled.s内容如下:・text・global_start_start:bresetb.b.b
2、.b・b.b.b.reset:@closedogldrrO,=0x53000000movrl,#0strrl,[rO]@ldrsp,=(0x40000000+4096)・externdelayldrrO,=0x2fffbl_delay@setgpf4,5,6,7outputldrrO,=0x56000050ldrrl,=0x5500strrl,[rO]@setupoffldrrO,=0x56000058ldrrl,二OxfO;loop:ldrrO,=0x56000054ldrrl,=0x0strrl,[rO]ldrrO,=0x2ffffbl_delayldrrO,=0x56000054
3、ldrrl,二Oxffstrrl,[rO]ldrrO,=0x2ffffbldelaybloopb..end编写另一汇编文件:geditdelay.s•globaldelay•text_delay:subr0,rO,#1cmprO,#0x0bnedelaymovpc,Ir•end(1)编写连接脚本geditled.IdsOUTPUT_FORMAT(elf32-littlearm)OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{.=0x00000000;.text:{led.o(.text)*(.text)}.data:{*(.data)*(.bss)(1)编写
4、Makefileled.bin:delay.oled.oled.Idsarm-linux-ld-Tied」dsdelay.oled.o-oled.elfarm-linux-objcopy-Obinaryled.elfled.bindelay.o:delay.sarm-linux-gcc-cdelay,s・odelay.oled.o:led.sarm-linux-gcc-cled.s-oled.o(2)编译,得到led.bin烧写到开发板中,查看LED灯2调用C函数实验(I)新建另外一个目录$cd〜$mkdirboot$cdboot⑵编辑启动汇编程序start.s•text•global
5、_start_start:bresetb.b.b・b.b.b・b・reset:@设置sp指针ldrsp,=(0x40000000+4096)⑪关闭看门狗・externdisablewatchdogbldisable_watchdog@调用led_loop函数・externled_loopblledloopb・.end(3)编辑C程序init.c#defineGPFCON(*(volatileunsignedlong*)0x56000050)ttdefineGPFDAT(*(volatileunsignedlong*)0x56000054)ttdefineGPFUP(*(volatile
6、unsignedlong*)0x56000058)^definerWTCON(*(volat订eunsigned*)0x53000000)voiddisable_watchdog(void){rWTCON=0x0;return;}voiddelay(unsignedlongd){inti;for(i=0;i7、(0x55«8);GPFUP
8、=OxfO;wh订e⑴{delay(3000);GPFDAT&「(Oxf«4);delay(3000);GPFDAT
9、=(0xf«4);
10、(4)编写链接脚本boot.ldsOUTPUTFORMAT(elf32-littlearm)OUTPUT_ARCH(arm)ENTRYCstart)SECTIONS{.=0x40000000;•text:{}•datastart.o(.text)*(.text):{}•bss*(.data):{}}*(.bss)(5)编写Makefileobjs=start,oinit.oboot,bin:$(objs)boot.Idsarm-linux-ld