GCC处理ARM中断

 

前天把ADS1.2下地代码移植完到Linux下,但是发现vsprintf用不了,用了库函数,最后就是重定向截断的问题,因为这个问题出现在库函数里,所以我不知道该如何解决,于是放弃使用vsprintf,还是使用原本的uart_puts。但是问题又来了,我测试外部中断,但是只能产生一次中断,再让它产生中断就没有反应。前天晚上我条了一个晚上都没有找到原因,以为是自己gcc编译器的参数没有配好,结果把我认为能写上去的编译参数都写了,还是老样子。昨天,把ADS下的中断函数反汇编和gcc下的同一个函数的反汇编抄下来慢慢研究,显然发现是很不一样的。

ADS:

1           stmfd r13, {r0-r3, r12,r14}

2           add r0, pc,#0x24

 

3           bl uart_printf

4            mov r0,#1

5            ldr r1, 0x0c7002c0

6            str r0,[r1,#0x54]

7            mov r0,#0x200000

8             mov r1,#0x1e0000

9             str r0, [r1,#0x24]

 

10           ldmfd r13!, {r0-r3,r12,r14}

11           subs pc,r14,#4

上面的汇编代码中1、2两行是中断现场保护,3~9是中断处理,10、11是中断现场恢复。下面再看看gcc产生的代码。

GCC:

1            mov ip,sp

2     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值