Chinaunix首页 | 论坛 | 博客
  • 博客访问: 213369
  • 博文数量: 10
  • 博客积分: 346
  • 博客等级: 一等列兵
  • 技术积分: 322
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 11:04
文章分类
文章存档

2012年(10)

我的朋友

分类: 嵌入式

2012-05-28 09:47:08

 

分别用汇编和C写了两个点灯程序用来在程序起始阶段判断程序运行状态,影响代表点灯时可能会将寄存器其它位修改,造成不可预知的错误。这里写出两种版本的程序是为了相互比较。

我自己用过的,所以保证能用。


反汇编命令:/home/opt/FriendlyARM/toolsch
ain/4.4.3/bin/arm-linux-objdump -DT u-boot > temp.txt


汇编无影响
loop:
  ldr r0,=0x56000050//GPFCON地址为0x56000050

         mov r1,#0xffff00ff
  ldr r2,[r0]
 and r2,r2,r1//将GPFCON的8-15位清零,并保持其它位不变


 mov r1,#0x00005500
 orr r2,r2,r1 

        str r2,[r0]//GPFCON写入0x00005500,即GFP4-7设置为输出功能

    
 ldr r0,=0x56000054//GPFDAT地址为0x56000054
 mov r1,#0x000000d0//将5灯置亮
 ldr r2,[r0]
 orr r2,r2,r1
 str r2,[r0]

     b loop


汇编影响
loop1:
  ldr r0,=0x56000050
     mov r1,#0x00005500
  str r1,[r0]
           
  ldr r0,=0x56000054
  mov r1,#0x000000e0
  str r1,[r0]
  b loop1


C语言影响
#define GPFCON    (*(volatile unsigned long *)0x56000050)    //GPFCON地址为0x56000050

       #define GPFDAT    (*(volatile unsigned long *)0x56000054)    //GPFDAT地址为0x56000054

       GPFCON=0x00005500;    //GPFCON写入0x00005500,即GFP4-7设置为输出功能

       while(1)
    {      
       
        GPFDAT=0x000000e0;    //GPFDAT写入0x000000e0,即GPFDAT[7:4]=1110,LED4点亮

           }
C语言不影响

        #define GPFCON    (*(volatile unsigned long *)0x56000050)    //GPFCON地址为0x56000050

        #define GPFDAT    (*(volatile unsigned long *)0x56000054)    //GPFDAT地址为0x56000054
 GPFCON&=0xffff00ff;
 GPFCON|=0x00005500;    //GPFCON写入0x00005500,即GFP4-7设置为输出功能

        while(1)
 {           
  GPFDAT|=0x000000e0;    //GPFDAT写入0x000000e0,即GPFDAT[7:4]=1110,LED4点亮
}


 

阅读(4018) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~