62、在异常处理向量表的设置中,为什么不直接将异常向量的入口地址写入PC 中呢,为什么
非要用什么DCD 这些伪指令,到底有什么用啊
A:为了保证任何时候其累加和为零,不然改一次程序就要计算一次.
63 、单步调试i2cINT.C 在ISendStr 中启动总线后,程序怎么又跑到vectors.o 中,进行初始化了呢A:由于VIC 的限制,程序不能在0x18 停下来,否则执行非向量中断.如果没有设置,则非
向量中断为0,将从0 地址执行.
建议:有中断时不要单步执行程序,可以手动暂时关中断或设置断点代替单步.
(编者注:下载最新的驱动可以解决这个问题)
64、如何修改 ADS 的启动代码,从__main 到main,按道理应该有一个文件,修改这个小文件, 就可以修改 启动代码.
A:__main 是ADS 运行库,最好不要修改,要是不使用库就不要用main()函数,起个别的名
字.直接跳转过去就行了.
详见:《ARM 体系结构与编程》P328.
65、我在JTAG 仿真时出现的对话框,提示:
Warnning! interrupt vectors data is not correct!
Program you downloaded can not run freely!
A:参见《ARM 微控制器基础与实战》附录一第一个问题的第二部分,选择源代码的启动代
码文件夹下的vectors.s,并参照《ARM 微控制器基础与实战》图7.11 设置.
66、初始化代码中分配堆栈的问题MSR CPSR_c, #0xd3 ;进入特定的处理器模式
LDR SP, StackSvc ;给当前处理器模式的堆栈指针赋值,这只是一个值而已,
;他在接下去的DCD 语句赋值
SvcStackSpace SPACE SVC_STACK_LEGTH * 4
这个语句开辟一个SVC_STACK_LEGTH * 4 大小的内存,SvcStackSpace 是这块内存的标
号,我想应该就是内存的首地址,这样应该好理解了.
StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
这个语句就是把这个首地址加上堆栈大小值.
A:计算出堆栈指针来,我想这个堆栈是向下生长的,所以SP 赋值的是堆栈地址最高的那个. |