最近在写一个新的项目,由以前的老项目代码Merge过来,在这个基础上修改。这是这个问题的引子。。。
刚开始进展很顺利,编译没有问题,download到目标板上运行也没有问题。似乎一切正常,在我测试软件过程中发现程序上逻辑需要做一些微调,很顺利成章的链接ULINK2进行Debug看看程序运行的细节。。。
问题便出来了,链接上Ulink2 build 没有问题,download没有问题,strat debug 。。。却发现程序不是从Main函数开始执的。。。
在一个××.C的文件执行了一个很正常的初始化函数,便跳进了 71x_init.s 文件
卡在;* Macro Name : PERIPHERAL_INIT 中,很奇怪的现象。。。不管怎么reset,总是执行这个。。。
NextInst
NOP ; Wait for OSC stabilization
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MSR CPSR_c, #Mode_ABT:OR:F_Bit:OR:I_Bit
LDR SP, =ABT_Stack
MSR CPSR_c, #Mode_UNDEF:OR:F_Bit:OR:I_Bit
LDR SP,= UNDEF_Stack
MSR CPSR_c, #Mode_SVC:OR:F_Bit:OR:I_Bit
LDR SP, =RAM_Limit
; Uncomment next ligne if you need to reset all device pripherals
PERIPHERAL_INIT ; Reset all device peripherals
; Uncomment next ligne if you need to enable the EMI Bank
EMI_INIT ; Initialize EIM Bank 1
;Uncomment next ligne if you need to initialize the EIC
EIC_INIT ; Initialize EIC
这让人很汗颜。。。
木有办法出来问题,只能去分析解决:
Step1,compare... 比较原工程与现在工程直接的区别,看在初始化方面是否存在问题。。。
结果是否定了,两个工程初始化相似没有什么问题。
Step2,再观察现象。。。
检测设置,是否是设置的问题,原以为是没有勾选 Run to main() 选项。
Step3,Run to main() 选项 已经勾选,但是仍然存在这个问题。再次检查设置项发现Use:项中Debugger选择有问题,选的是ULINK pro...
我实际使用的是ULINK2,难道这就是传说中的乌龙事件。。。。
立马修正,更正结果如下:
Step4,build, debug Ok,能够顺利进入main()函数。
教训:很多故障并不是技术本身造成的,细枝末节的东西也需要注意。。。工程师是马虎不得的。。。