renew

换了个板子了,那个板子太不好用了

还换了个发行版,换成了ubuntu,所以不太熟,昨天就遇到ip的问题,ifconfig eth0 用不了 ifconfig eth4也用不了,百度得知可以:sudo gedit /etc/network/interfaces  然后就去修改ip,然后再:sudo ifup -a 更新设置,ip就设置好了。还好今天解决了,下面这个网址

https://blog.csdn.net/fengyee_zju/article/details/8306189

 

 

tmd,一个led流水灯搞了一上午,我去,怎么调都不对,用了少了个 .dls 链接文件。下午继续。下午就得起飞了。

 

下午,来说说下午,要吐血了,又调了一下午。

key_led.bin : crt0.S  key_led.c
    arm-linux-gcc -g -c -o crt0.o crt0.S
    arm-linux-gcc -g -c -o key_led.o key_led.c
    arm-linux-ld -Ttext 0x0000000 -g key_led.o crt0.o -o key_led_elf

 

就这个Makefile 都有大名堂, 就这句key_led.o crt0.o -o key_led_elf   中的 crt0.o非要放在key_led.o的前面才可以,哎,你说说,这有什么区别吗?无语了都!!!!  哎,其实还是有区别的,别人是初始化是要放前面,以后注意一下!

/****************************Makefile**********************************************************************/

all:led.o uart.o init.o main.o start.o

    arm-linux-ld -T sdram.lds $^ -o sdram.elf
    arm-linux-objcopy -O binary -S sdram.elf sdram.bin
    arm-linux-objdump -D sdram.elf > sdram.dis
clean:
    rm *.bin *.o *.elf *.dis
    
%.o:%.c
    arm-linux-gcc -c -o $@ $<    
    
%.o:%.S
    arm-linux-gcc -c -o $@ $<

说一下这个: $< 表示第一个依赖——%.S  

$^——所有依赖——all:led.o uart.o init.o main.o start.o中的led.o uart.o init.o main.o start.o   

%.S——所有.S文件   %.o也一样

/**************************start.S**********************************************/

.text
.global _start

_start:

    b   reset                        //这2个是异常向量表,还有其他的,没写了
    b    do_und                  //跳转到他的地址


do_und:
        /*sp_und 未设置,还有设置它*/
        ldr sp, =0x34000000
        stmdb sp!, {r0-r12,lr}  /*在und异常处理函数中有可能会修改r0-r12,所以保存r0-r12*/
      

 /*保存现场*/

                                            @说下{} 视频上反正是{r0-r12,lr}:把r0到r12的寄存器,和lr寄存器保存 发生异常地址会保存在lr寄存器
        /*处理Und异常*/          @stmdb 先减后存  ldmia先读后加
        mrs r0, cpsr                 @把cpsr的值读人r0        
        ldr r1,    =und_string
        bl printException
        
        /*恢复现场*/
        ldmia sp!, {r0-r12, pc}^  @把r0-r12的值读取出来          ^会把spsr的值恢复到cpsr里面
        
        
        und_string:
            .string "undefined instruction exception"       //汇编里面定义字符串 相当于c: char und_sting[]="undefined instruction exception"

 

 

说说arm架构里面的这个图

 

 

cond:状态,不用管  27,26,25不知道   24-21:表示指令(如:mov,ldr....) 20-12不知道  11-0:立即数。

ldr r0, =#0x100    #0x100 就是立即数      说到这,我们得先说说0-11,分为前4位代表rotato,后8位

立即数=(后8位 右移rotato*2位) 

 

这是0x100的表示形式。   1100 =12   所以右移24位,1>>1变成 100000(31个0),然后右移23位0....0100000000

100000000=0x100。

如果要表示0x400呢   0x400=400000000,   对于二进制右移左移,值分别改变2的移动的位数的次方。所以右移动22位就好了

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值