请问如何理解DCD指令?

2019-07-14 17:42发布

   dcd指令可以一片连续的空间,并初始化?
   
   问题1:
   那么这块空间在哪?
   例如:
“标签+dcd+表达式(常数)”
   所分配的空间的位置写在了哪里?
   问题2:
   在M3系列的startup.s 文件当中,所有的中断函数都进行了DCD,这样有什么用?为什么要这么做
   比如
“     DCD UserCodeArea
     DCD SystemUndefinedHandler
     DCD SystemSwiHandler
     DCD SystemPrefetchHandler
     DCD SystemAbortHandler
     DCD SystemReserv
     DCD SystemIrqHandler
     DCD SystemFiqHandler

   其意义是什么
为什么中断函数需要这样子声明,而普通的函数却不需要呢?(起码不写在startup里面)
   问题3:
   在建立堆栈的时候:“
FiqStackSpace SPACE FIQ_Stack_Legth  
FiqStack DCD FiqStackSpace + FIQ_Stack_Legth

   这里使用dcd指令有什么用,指明栈顶的位置?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
深海零下一度1
2019-07-15 10:47
在中断向量表中不直接LDR PC,"异常地址".而是使用一个标号,然后再在后面使用DCD定义这个标号,其原因是:
LDR 指令只能跳到当前PC 4kB 范围内,而B 指令能跳转到32MB 范围,而现在这样在LDR PC, "xxxx"这条指令不远处用"xxxx"DCD 定义一个字,而这
个字里面存放最终异常服务程序的地址,这样可以实现4GB 全范围跳转。

一周热门 更多>