平台是F1C100S,想调试XBOOT,但查找了很多资料,都没看到XBOOT怎么调试的,难道都是烧录到板上printf来?
F1C100S的内置DDR没有配置前不能用,JLINK下载的程序只能SRAM?
离线
下了本论坛的MDK项目来研究下,原来MDK有脚本先初始化DDR,然后就可以下载到DDR里调试了相当于有32MB的内存可以用秒杀所有的单片机,已经成功的MDK+JLINK来调试裸机程序了
但是现在想用XBOOT的框架来搞,目前XBOOT支持的是ECLIPSE+GCC编译环境,思路是通过JLINK提供的GDB SERVER服务器通过IP网络来调试,这个思路已经调通,就是目前不知道ECLIPSE的类似MDK的初始化DDR脚本,还的再研究下.
离线
研究了一天,终于可以成功了
ECLIPSE要运行在UBUNTU虚拟机里,WIN10也可以,但是编译一次实在太慢(不知道有解决办法,机器已经是刚买的顶级机器+PCIE固态)? JLINK 运行在WIN10平台和平常一样,但是用的是JLINK GDBSERVER这个充当调试服务器. 两个平台通过网络通讯即可.
最近编辑记录 jiangchun9981 (2019-08-05 21:13:27)
离线
初始化DDR的代码,来源也是本论坛MDK里面的脚本,只是改成GDB命令
monitor MemU32 0x01c20200 0x000001ff
monitor MemU32 0x01c20204 0x000001ff
monitor MemU32 0x01c20050 0x00010000
monitor MemU32 0x01c20010 0x81004107
monitor MemU32 0x01c20028 0x80041800
monitor MemU32 0x01c20054 0x00003180
monitor MemU32 0x01c20100 0x05000000
monitor MemU32 0x01c20000 0x90001000
monitor MemU32 0x01c20050 0x00020000
monitor MemU32 0x01c20824 0x00007222
monitor MemU32 0x01c20ac0 0x00000aaa
monitor MemU32 0x01c20020 0x90100C00
monitor MemU32 0x01c20060 0x01004000
monitor MemU32 0x01c202c0 0x01000000
monitor MemU32 0x01c202c0 0x01004000
monitor MemU32 0x01C20ac4 0x00010501
monitor MemU32 0x01C01004 0xb7ceedc2
monitor MemU32 0x01C01008 0x00a70008
monitor MemU32 0x01C01000 0x0001b38a
monitor MemU32 0x01C0100C 0x00080048
monitor MemU32 0x01C0100C 0x00080049
monitor MemU32 0x01C0100C 0x00080008
monitor MemU32 0x01C01024 0x00090901
monitor MemU32 0x01C0100C 0x00080048
monitor MemU32 0x01C01024 0x00090931
monitor MemU32 0x01C0100C 0x00080088
monitor MemU32 0x01C01024 0x00090931
monitor MemU32 0x01C0100C 0x000800c8
monitor MemU32 0x01C01024 0x00090931
monitor MemU32 0x01C0100C 0x00080108
monitor MemU32 0x01C01024 0x00131301
monitor MemU32 0x01C0100C 0x00080148
monitor MemU32 0x01C01024 0x00131201
monitor MemU32 0x01C0100C 0x00080188
monitor MemU32 0x01C01024 0x00131231
monitor MemU32 0x01C0100C 0x000801C8
monitor MemU32 0x01C01024 0x00131231
monitor MemU32 0x01C20AC4 0x00010501
monitor MemU32 0x01C01010 0x000004C0
monitor MemU32 0x01C01000 0x0001318A
monitor MemU32 0x01C0100C 0x00080109
离线
JLINK的速度要设置到固定4000左右,高了不稳定,调试中ECLIPSE总是报莫名其妙的错误,找了半天才发现是这个问题
目前单步可以用,就是step in进入不了函数,不知道什么问题了
离线
这个老大帖子的初始化DDR的代码也能用,刚测试了下,JLINK有个选项是只接受本地网络连接,一定要去掉,刚开始在UBUNTU虚拟机里老连不上JLINK,WIN10默认防火墙好像也的更改规则,开2331这个端口!
monitor MemU32 0x01C20824 0x00007222
monitor MemU32 0x01C20AC0 0x00000AAA
monitor MemU32 0x01C20020 0x90100C00
monitor MemU32 0x01C20060 0x01004000
monitor MemU32 0x01C202C0 0x01000000
monitor MemU32 0x01C202C0 0x01004000
monitor MemU32 0x01C20AC4 0x00010501
monitor MemU32 0x01c01004 0xB7CEEDC2
monitor MemU32 0x01c01008 0x00A70008
monitor MemU32 0x01C01000 0x0001318A
monitor MemU32 0x01C0100C 0x000800c8
monitor MemU32 0x01C0100C 0x000800c9
monitor MemU32 0x01C01024 0x00161600
monitor MemU32 0x01C01010 0x000004C0
JLINK调试还要注意全志的JTAG口和SD口复用,开发板一般烧油程序了的,上电会初始化为SD口,这样JLINK就连不上了,解决办法就是短接8脚那个FLASH芯片的4(地),6(CLK)脚即可.
最近编辑记录 jiangchun9981 (2019-08-05 21:32:26)
离线
发现WIN10下慢的原因主要是ECLIPSE调用MAKE这个命令是做MINGW虚拟环境下,调用一次要20秒,相反在虚拟机里只要1秒多就OK了,暂时没找到解决的办法.
现在发现MDK竟然能支持GCC编译,见下面的连接
https://blog.csdn.net/lan120576664/article/details/46806991
我已经用XBOOT自带的GCC来测试过,在MDK下可以成功调用. 用最新的GCC编译XBOOT也能成功.
目前的主要问题是把XBOOT那么多文件一个个手工导入MDK项目实在太费劲了,找了个工具自动导入但是好像不成功,目前就卡在这步了.
离线
折腾了两天,上面的调试有个大坑,最后是发现XBOOT里面的START.S这个文件里有初始化DDR的代码,二次初始化容易跑飞.
目前最好的解决办法: 先正确的预先烧录的XBOOT启动一次,完全跑起来了,再调试(这个时候就不需要按楼上的帖子在ECLIPES里运行那些初始化DDR的代码了,按默认的留空即可),如图需要把初始化的这3个函数屏蔽掉,这样基本能调试起来,但是到初始化驱动的时候还有个"reset"的驱动引起整个系统挂起来.
离线
本身代码已经在DDR中了,再调用DDR初始化自己,这个有点矛盾,必然会跑飞
但是目前我还不知道如何简单的模拟CPU启动的过程,把XBOOT的启动代码的前几K加载到SRAM中,再由SRAM执行.但是这个思路又有点矛盾,因为XBOOT看了代码按上面的启动流程,XBOOT初始化DDR后,会从FLASH中加载余下的代码到DDR中,但是我们的代码没有写到FLASH中啊,如果写入FLASH倒没问题,但是这个调试流程也太麻烦了.
难道大家写代码都不调试直接下载到FLASH中跑看看?
目前的问题是我按照上面帖子的思路,先外部程序初始化DDR,屏蔽掉代码里自己的DDR相关的行,XBOOT目前启动到画面里就挂掉了,但是屏蔽掉xboot本身的框架,程序运行起来没有什么问题了.
离线
上传一个按照这个思路改的来自本论坛网友的精简裸奔程序,环境UBUNTU+ECLISPE 单步调试什么的都没有问题,编译出来的28K很精简,带FB等几个常用驱动,可以直接写屏非常好用,代码基础来自XBOOT,但是没用XBOOT的一套核心机制.
现在感觉XBOOT走偏了,追求高大全,标准版本编译出来的5M,下载调试的等1分钟,启动到图形界面的时间和LINUX差不多了,那还不如上LINUX了
离线
如果把驱动设备树的这个去掉就能完全正常启动了,目前还没看具体什么原因.
折腾了几天,现在XBOOT基本可以调试起来了,裁剪了下,保留大部分驱动,FB能用的情况下有500K左右,启动不到1S到基本的图形界面(FB状态),基本下载调试能满足要求了.原来的原版有5M下载调试什么的太困难了.
离线