本帖最后由 ndx1986 于 2020-5-25 09:18 编辑
Ozone不识别中文路径。好像如果在中文路径下建立了Ozone调试工程,即使后面更改了路径,Ozone仍然会提示路径错误找不到文件(c文件、h文件)。所以推荐在IDE建立工程时就不使用中文路径,或者在Ozone建立调试工程时,已经更改为不含中文的路径。
Ozone使用Keil编译生成的axf也可以正常工作,不过注意打开方式,因为直接Download的运行模式(默认)有时是有Bug的,目前不知道这个bug产生的原因,因为按理说时通过keil生成的axf文件,Ozone也不会去更改,而且axf在运行时解析应该是直接按照指令集进行解析的。
一开始觉得黄了,以后只能双工程了。但是如果使用keil的RTE生成工程,后续会及其难搞(移植到ES的困难会比较大)。后来问了硬汉之后,发现有这个解决方案:
开始不知道这个问题的时候,曾经比对过这个问题:
同一个程序,在keil在进行编译生成axf文件,在Ozone中新建工程,导入axf文件,再通过Ozone直接进行Download,如下图
开始运行时一切正常,但是每当操作我设备的按键时(会进入Ente_Key_Dispose函数),就会进入Hardfault(通过Ozone的trace或者通过Keil的Call Statck窗口跳转回去查询到是该函数跳转进入了HardFault)。一开始怀疑是程序问题,后来觉得不对,因为这种写法在之前不论是Keil、ES编译、调试都是没有任何问题的。
然后通过仔细比对后发现,尽管使用的是同一个axf文件,但是在反汇编窗口,看到得汇编指令是不同的。
Keil调试时的汇编指令:(Enter_Key_Dispose函数),如下图:
Ozone选取Keil生成的axf文件,直接Download后,相同位置汇编指令如下图:
Ozone选取ES(Segger本家IDE工具)生成的elf文件就不会有任何问题(废话,如果本家都有问题,Segger可以不用混了),可以看到入栈时的指令是不同的
选取第二个选项后,则不会出现上述奇葩问题
注意即使已经选取了Attach的方式,一旦在Ozone下点击复位按钮,也会出现相同问题(进入HardFault)
查询了下Ozone的手册,也没仔细说有啥区别,现在只能说通过这种方法来规避。不知道Download与否会对Debug有什么样子影响
|