dcd指令的疑惑

scutwyz 2012-07-11 11:09:49
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指令有什么用,指明栈顶的位置?
...全文
671 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
scutwyz 2012-07-11
  • 打赏
  • 举报
回复
其他的指令就不能进行全范围跳转?LDR PC +地址(应该就可以实现全范围跳转了吧,这个和DCD有什么关系呢?)(本人小白)

还有,
“FiqStackSpace SPACE FIQ_Stack_Legth
FiqStack DCD FiqStackSpace + FIQ_Stack_Legth”
那么堆栈的第一个数字就是用来表明堆栈的顶部在那个位置咯?
woshi_ziyu 2012-07-11
  • 打赏
  • 举报
回复 1
问题一 DCD伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化,也就是对地址写值。

问题二 DCD指令跳转范围比较大,可以实现4GB 全范围跳转

问题三 “FiqStackSpace是标号,相当于地址,实际上就是在FiqStackSpace SPACE FIQ_Stack_Legth 这个语句给分配的空间的首地址,FiqStackSpace+ FIQ_Stack_Legth 是这个地址空间的结束地址,将FiqStack指向这个地址,当做栈的顶部,该栈向下生长,长度FIQ_Stack_Legth ”
scutwyz 2012-07-11
  • 打赏
  • 举报
回复
什么叫做数据异常呢?
使用的时候,直接覆盖掉原先的数据不就可以了吗,为什么需要重新初始化?
关键是会不会引起MPU的反应

还有前面所提及dcd?那个到底是什么啊,感觉说明书中写的不明不白的
woshi_ziyu 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

而在其之中,初始化又是什么意思,访问没有初始化的内存会发生什么事情呢?会引起内存保护单元的fault吗,我指的是M3系列
[/Quote]
分配地址空间 并清除数据 没有进行初始化 数据会发生异常
scutwyz 2012-07-11
  • 打赏
  • 举报
回复
而在其之中,初始化又是什么意思,访问没有初始化的内存会发生什么事情呢?会引起内存保护单元的fault吗,我指的是M3系列
scutwyz 2012-07-11
  • 打赏
  • 举报
回复
非常感谢
scutwyz 2012-07-11
  • 打赏
  • 举报
回复
应该是使用B只能跳到4mb以内吧, 因为是24bit
woshi_ziyu 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

其他的指令就不能进行全范围跳转?LDR PC +地址(应该就可以实现全范围跳转了吧,这个和DCD有什么关系呢?)(本人小白)

还有,
“FiqStackSpace SPACE FIQ_Stack_Legth
FiqStack DCD FiqStackSpace + FIQ_Stack_Legth”
那么堆栈的第一个数字就是用来表明堆栈的顶部在那个位置咯……
[/Quote]
LDR 指令只能跳到当前PC 4kB 范围内

21,620

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧