ARM启动代码中的中断向量里有 "b HandlerSWI".执行后将跳到下面。(按照规则,用R0来传递参数,用来选择要执行的函数)
HandlerSWI
cmp r0 ,#4
ldrlo pc ,[pc,r0,lsl #2]
movs pc , lr
swiFunction
DCD fu1
DCD fu2
DCD fu3
DCD fu4
fu1
........
movs pc , lr
fu2
........
movs pc , lr
fu3
........
movs pc , lr
fu4
........
movs pc , lr
请问代码中的DCD怎么理解?书上说是分配一段字的内存单元。不过好像没法和上面的用法联系起来啊?请高人指教。谢谢。
DCD是用来分配一段内存单元
这里实现了类似程序菜单的功能
根据r0中传递进来的索引号,调用fu1、fu2、fu3、fu4中的一个函数
这个分配了的内存单元是函数的地址?他是怎么跳转到函数执行的?
这个还真不太好解释
存储的是fu1的值,而fu1的值就是函数的地址
在指令中通过LDR指令将地址加载到PC中就实现了函数跳转
引用: 引用 3 楼 arnold9009 的回复:
这个还真不太好解释
存储的是fu1的值,而fu1的值就是函数的地址
在指令中通过LDR指令将地址加载到PC中就实现了函数跳转
可是这里没有,ldr指令,所以才很费解。不过也无所谓了。能用就行。
楼主可以买本书或者直接google一堆一堆的。可以系统学习下。