发 帖  
张飞软硬开源基于STM32 BLDC直流无刷电机驱动器开发视频套件, 👉戳此立抢👈
请问注册函数类型不一致问题该怎么解决?
205 韦东山 函数
分享
注意:如果点击空白处无法输入,则点击字会有输入提示符 | 则可以使用键盘进行输入!

此板块为  [ARM裸机加强版]
  • 问题所在章节: 第008节_定时器中断程序示例

中断章节最后优化程序,使用注册的方式

typedef void(*irq_func)(int);irq_func irq_array[32];但是注册的time函数是void类型的

void timer_irq(void)也就是说,在实际运行的时候

        /* 调用对应的处理函数 */        irq_array[bit](bit); 会运行 timer_irq(bit), 是不是就只是先将bit存入r0,然后跳转,反汇编这里看不太明白.
有什么办法在反汇编文件里添加上c文件的信息,就是类似ide的那种,上面一句c,下面好几个汇编
最后,打开编译器的所有警告,是会有这个警告的

arm-linux-gcc -c -o timer.o timer.c  -Walltimer.c: In function `timer_init':timer.c:40: warning: implicit declaration of function `register_irq'


最后,附上实际调用的dis

30000bec <handle_irq_c>:30000bec:        e1a0c00d         mov        ip, sp30000bf0:        e92dd800         stmdb        sp!, {fp, ip, lr, pc}30000bf4:        e24cb004         sub        fp, ip, #4        ; 0x430000bf8:        e24dd004         sub        sp, sp, #4        ; 0x430000bfc:        e3a0344a         mov        r3, #1241513984        ; 0x4a00000030000c00:        e2833014         add        r3, r3, #20        ; 0x1430000c04:        e5933000         ldr        r3, [r3]30000c08:        e50b3010         str        r3, [fp, #-16]30000c0c:        e59f2040         ldr        r2, [pc, #64]        ; 30000c54 <.text+0xc54>30000c10:        e51b3010         ldr        r3, [fp, #-16]30000c14:        e7923103         ldr        r3, [r2, r3, lsl #2]30000c18:        e51b0010         ldr        r0, [fp, #-16]30000c1c:        e1a0e00f         mov        lr, pc30000c20:        e1a0f003         mov        pc, r330000c24:        e3a0144a         mov        r1, #1241513984        ; 0x4a00000030000c28:        e3a02001         mov        r2, #1        ; 0x130000c2c:        e51b3010         ldr        r3, [fp, #-16]30000c30:        e1a03312         mov        r3, r2, lsl r330000c34:        e5813000         str        r3, [r1]30000c38:        e3a0244a         mov        r2, #1241513984        ; 0x4a00000030000c3c:        e2822010         add        r2, r2, #16        ; 0x1030000c40:        e3a01001         mov        r1, #1        ; 0x130000c44:        e51b3010         ldr        r3, [fp, #-16]30000c48:        e1a03311         mov        r3, r1, lsl r330000c4c:        e5823000         str        r3, [r2]30000c50:        e89da808         ldmia        sp, {r3, fp, sp, pc}30000c54:        30000fcc         andcc        r0, r0, ip, asr #31
0
2019-4-4 05:16:35   评论 分享淘帖 邀请回答
1个回答
找到了这个如何C和汇编混合的功能了
```
gcc -c -g -Wa,-adlhn ee.c >  ee.anno.s
```
或者反汇编o文件
objdump -S test.o
2019-4-4 15:56:01 评论

举报

只有小组成员才能发言,加入小组>>

104个成员聚集在这个小组

加入小组

热门话题

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表