debug - MCUXpresso - 导入NXP工程做的makefile工程并单步调试
文章目录
- debug - MCUXpresso - 导入NXP工程做的makefile工程并单步调试
- 概述
- 笔记
- 前置
- 从nxp向导生成的工程中导出内存配置
- 如何导入makefile工程,配置,单步调试?
- 导入makefile工程
- 配置
- 去看看本地正常的调试配置
- 备注
- END
debug - MCUXpresso - 导入NXP工程做的makefile工程并单步调试
概述
想研究一个开源工程(基于arm-gcc工具链的makefile工程),想试试能不能导入MCUXpresso进行单步调试。
实验分2步,现在第一步完成了一半,准备完成第一步的另一半。
现在已经从NXP向导做的工程中,抠出了一个makefile工程(debug - MCUXpresso - 从NXP工程做一个makefile工程出来), 现在就将这个nxp工具链的makefile工程导入MCUXpresso, 看看能不能单步调试。
如果能单步调试,实验的第一步就完成了。
当然,我既然写这个笔记,当然是已经能单步调试了,实验的第一步已经完成。
在此,仅是记录实验过程和要点。
笔记
前置
需要从nxp向导做的工程中,将memory设置导出来。在导入makefile工程后,需要导入这个配置,否则无法单步调试。
为啥不能在NXP的UI中选择正确的内存调试配置?答案是不能。MCUXpresso有bug, 即使是选了和MCU对应的内存配置和FLASH下载算法文件,只能是内存配置改了,但是FLASH算法文件始终都是旧的或者默认的,只能用导入正确的内存配置文件来解决这个问题。
从nxp向导生成的工程中导出内存配置
这个工程一定要是正常工程(nxp向导生成的c++工程),已经正常编译过,可以对自己的板子进行单步调试了。
一般,nxp向导生成的c++工程,不需要进行啥设置,就可以直接对板子进行单步调试。调试目标和调试选项都是根据MCU预先设置好的。
打开导出的内存配置文件,可以看到里面有FLASH算法文件的名称,这在导入makefile工程后,无法设置的(是MCUXpresso的bug).
如果自己熟悉MCUXpresso, 也可以从不好使的导入后的工程,导出内存配置,然后将FLASH算法文件名称改成正确的,再导入,就可以单步调试了。
如何导入makefile工程,配置,单步调试?
导入makefile工程
先确认自己的makefile工程,是可以通过nxp工具链正常编译通过的。然后清掉工程输出。
开一个新的工作区(磁盘目录没有这个工作区目录),我们从头做实验。
我这个makefile工程是nxp工具链整理出来的,所以导入的时候,也选择nxp工具链,点击完成。
配置
刚导入完成,MCU,内存,库这些都是空的,如果单步调试,必然失败。因为MCUXpresso的Linkserver都不知道用什么FLASH算法下载程序,也不知道目标MCU和内存布局。
但是,现在我们也设置不了,没有菜单可以设置。
因为现在工程的配置文件格式都不对,即使去设置,也会报错,导致无法设置。
实验了一下,只能是强行假装单步调试,等失败后,关掉MCUXpresso, 再启动MCUXpresso, 再进入工程时,工程配置文件就有了。此时,就可以设置了。
现在就按照上面那这行实验记录来一遍。
在MCUXpresso中,先将程序编译一下,此时,也是调用的我们自己工程的makefile来编译的。
现在,先来一次失败的单步调试。
MCUXPresso支持3种硬件调试器,CMSIS-DAP是其中一种,我们不用选板子上是哪种硬件调试器,MCUXPresso会自己侦测。
如果自己清楚,也可以将不是的那2种勾掉,然后确定。
这次是必然失败的,因为什么都没有设置。默认设置的参数和我们的板子大概率不一样。
点击确定,关闭报错框。
在控制台里面看报错信息,往上翻,可以看到,是因为FLASH下载算法文件不对,因为程序下载失败。
现在去工程树中去看,已经看到MCUXpresso已经帮我们填了错误的MCU型号。
这时,我们就可以自己用菜单去改了(改成我们板子的MCU, 导入正确的内存配置文件)
去除勾选(保留内存配置),然后选MCU为自己板子的MCU,点击应用。
因为MCUXpresso的bug, 我们无法通过选择FLASH算法文件,来更改工程实际要使用的算法文件。(即使选了,应用,关掉对话框,再打开对话框,还是旧的FLASH算法文件,导致单步调试失败)。
所以,我们现在就要导入前面从正常工程导出的内存配置文件。
现在FLASH算法和内存配置,都对了。点击应用,应用并关闭。关掉对话框。
根据自己需要,将库设置为Newlib(nohost)
现在将工程再重新编译一遍。
开始调试。
这次单步调试是失败的,关掉报错框。
杀掉可能存在的调试器进程。
去调试配置中,删除可能存在的旧调试配置。
关闭调试配置对话框。
再开始单步调试。
因为我们已经删除了所有的调试配置,调试开始后,会让我们自己来选。
选择侦测到的CMSIS-DAP调试器,点击确定。
现在单步调试就正常了,按F6就可以单步调试,美美的 😛
去看看本地正常的调试配置
中止单步调试。
主要是这2个页。
一个页指定要调试的是哪个elf
一个页指定是使用SWD调试方式和reset和断开连接时发出的信号,是否支持半主机方式。
如果上述调试配置还不能正常调试(我没遇到过),可以看看具体的调试配置和NXP向导正常工程的区别,如果有区别,就能比对出来。
备注
这个实验不是我最终要的效果。
因为谁没事也不会从一个正常的nxp工程中,导出makefile工程,再导入MCUXpresso当作makefile工程来用。这不是脱裤子放屁么?
这个实验只是验证我的调试想法: 导入最理想的makefile工程(MCUXpressso向导生成工程的等价makefile工程,源码,工具链都相同),是否能在MCUXpresso中单步调试,这只是第一步。
下一步实验,将普通的arm-gcc工具链的makefile工程导入MCUXpresso,是否能单步调试?
这才是我要的效果。等下一步来做这个实验.
因为开源工程,如果不采用IDE来编程,那么大概率用的都是arm-gcc工具链的makefile(CMAKE)工程。
通过本实验,验证了MCUXpresso确实支持导入makefile工程并单步调试。心里踏实多了。
是否普通的arm-gcc的makefile固件工程,也能导入MCUXpresso, 这要通过实验来验证。预期大概率是可以的(原因:MCUXpresso导入makefile工程后,只是加了调试配置,别的和原来的makefile工程都无关。所以导入普通的makefile工程到MCUXpresso, 大概率也是能单步调试的)。