搜索
bottom↓
回复: 14

TKScope多核调试LPC4300系列操作指南

[复制链接]

出0入0汤圆

发表于 2012-9-23 11:09:00 | 显示全部楼层 |阅读模式
本帖最后由 lishutong 于 2012-9-23 11:11 编辑

1. 多核调试带来的挑战今天您可能还未尝试过多核开发,但很快您就会涉足这一领域。近年来,电子技术、半导体技术已经取得突飞猛进的发展,多核架构也已逐渐从高端服务器走向个人PC,并且在嵌入式领域崭露头角。由于多核系统能达到单核系统同等性能,并且前者主频更低、高集成化、占用较小空间特点使得其能够提供更多的功能。越来越多的半导体厂商开始设计多核芯片,开发人员也已经尝试在其产品中应用多核系统。
2010年11月1日,恩智浦半导体(NXP)宣布推出LPC4300系列微控制器,该系列产品是全球首次采用ARM Cortex-M4和Cortex-M0双核架构的非对称数字信号控制器。
对于LPC4300系列这种片上多核系统,开发人员不得不面对多核系统所特有的“资源分配与抢占”、“并行运行”、“多核同时调试”的问题。这些问题都使得问题的查找变得复杂和不易重现。此时开发人员无法再采用传统的手段进行单一内核的调试,而是希望能够同时调试各个内核,独立地控制每个内核的运行状态,观察各内核的运行状态。
传统仿真器已经很难给用户提供完整的调试支持。并且由于LPC4300系列芯片仅提供一组外部调试接口,无法同时使用多台仿真器分别调试各内核,使得同时进行多核调试成为不可能。而TKScope则已经率先突破此种障碍,用户可同时将多个IDE连接到一台仿真器分别调试LPC4300系列的Cortex-M4和Cortex-M0内核

图1.1  仿真器连接示意图
1.1 LPC4300系列双核调试难点LPC4300系列数字信号控制器(DSC)是NXP发布的业界首个带有Cortex-M0协处理器的双核非对称架构DSC。该系列采用独特的非对称双核架构,内置双ARM核:Cortex-M4内核用于实时处理,Cortex-M0内核用于实时控制,两个内核均可在204MHz下运行。由于门数极少的Cortex-M0内核能分担大量的控制与I/O处理任务,减少Cortex-M4处理器的带宽占用,从而使Cortex-M4可以全力以赴地处理数字信号控制应用中的数字计算。LPC4300系列将成为各类应用的理想之选,包括嵌入式音频、高端马达控制、工业自动化、POS机、医疗器械及汽车配件等。
在芯片内部,Cortex-M4和Cortex-M0共享片上Flash、RAM和外设资源。外部引脚仅提供了一组JTAG/SWD调试接口为两个内核共享,即仅允许外接一台仿真器。传统的仿真器仅仅能支持一次调试一个内核,无法同时调试另一内核
1.2 传统仿真器对LPC4300系列的支持在使用传统仿真器调试LPC4300系列时,每次只能打开一个IDE环境并连接到仿真器。例如要单独仿真Cortex-M0内核,需要在仿真器的JTAG扫描链配置中根据Cortex-M0核的IDCODE选择M0核,然后保存进行调试。该项配置在某传统仿真器的配置如图1.2所示。
图1.2  某传统仿真器仿真LPC4300系列的Cortex-M0核
而如果要仿真Cortex-M4内核,必须退出调试、重新配置JTAG扫描链,根据Cortex-M4核的IDCODE选择M4核,再次进入调试状态。该项配置在某传统仿真器的配置如图1.3所示。

图1.3  某传统仿真器仿真LPC4300系列的Cortex-M4核
可以看到,使用传统仿真器进行调试最大的问题是:无法同时调试Cortex-M4和Cortex-M0内核。而实际系统运行时必定是两个内核同时运行,如果运行中出现问题,采用此种调试模式是非常难以复现和查出问题。
1.3 TKScope对LPC4300系列的支持既然LPC4300系列外部只提供了一组JTAG/SWD调试接口,如果要实现双内核的同时调试,必须采用支持至两个IDE同时连接至一台仿真器,并且支持分别选择JTAG链上多个器件中某个内核进行仿真。TKScope支持这种双核系统调试,不仅支持单独调试LPC4300系列的Cortex-M4和Cortex-M0;也支持在两个IDE环境中同时连接同一台仿真器分别调试Cortex-M4和Cortex-M0,使得用户具有相对于使用传统仿真器时更好的调试手段
另外,TKScope广泛支持主流IDE环境,使得用户可以在诸如TKStudio、Keil、IAR、Eclipse、RVDS等环境中进行LPC4300系列双核系统的开发
图1.4  在Keil和TKStudio下同时调试Cortex-M4和Cortex-M0
2. TKScope仿真LPC4300系列操作指南本小节详细介绍如何使用一台TKScope系列的AK100Pro仿真器调试LPC4350的Cortex-M4和Cortex-M0内核。注意,为方便起见,下文按小节分别介绍如何调试Cortex-M4和Cortex-M0内核。TKScope用户完全可以打开两个IDE,同时进行各内核的调试
2.1 仿真Cortex-M4内核2.1.1 硬件选择打开【硬件选择】,如图2.1所示。在右上角的器件过滤窗口中输入LPC4350,系统会自动找到芯片,选择LPC4350_Cortex_M4下相应的仿真器型号AK100Pro即可。

图2.1  TKScope硬件选择
2.1.2 附加设置在【附加设置】中,选择使用JTAG接口进行仿真,如图2.2所示。
图2.2  附加设置
2.1.3 TAP设置点击仿真器设置界面的【TAP设置】,仿真器会自动检测出芯片的内核及其IDCODE,如图2.3所示。TKScope仿真器读出两个内核,Cortex-M4和Cortex-M0,选择Cortex-M4内核。

图2.3  TAP设置
2.1.4 程序烧写由于LPC4350_Cortex_M4内核没有片内Flash,要将程序烧写到SST39VF1601上,需要手动添加SST39VF1601的编程算法。
打开【程序烧写】界面,如图2.4所示。点击【添加算法】按钮,添加算法文件:TKScope安装目录\configuration\SST\SST39VF160x_16BIT_x1.FLM。
图2.4  程序烧写1
添加SST39VF160x_16BIT_x1.FLM算法文件后,要修改编程算法的起始地址,不同目标板上的NorFlash起始地址不完全相同。本文使用的开发板上SST39VF1601器件挂接在EMC的Bank0处,即器件的起始地址为0x1C000000。相应的配置如图2.5所示。
图2.5  程序烧写2
2.1.5 初始化宏配置在添加完算法文件事,需要添加外部初始化宏文件,该文件初始化打开EMC总线,为Flash烧写创造必要的环境。点击   按钮,打开【初始化宏】配置界面,添加文件:..\TKScope安装目录\configuration\NXP\LPC4300_ExtFlash_0.ini。
图2.6  Cortex-M4初始化宏配置1
由于当前是在片外Flash中调试,而实际的硬件电路可能未配置LPC4300系列的Cortex-M4内核从片外Flash启动。所以需要设置进入调试状态后的复位矢量,以告知仿真器主动调整正确的PC值和SP值;同时需要设置内核的VTOR寄存器(地址:0xE000ED08),以重映射中断向量表。具体中断向量表的位置取值取决于实际的工程配置,当前工程配置的地址为0x1C000000起始处。配置如图2.7所示。
图2.7  Cortex-M4初始化宏配置2
2.1.6 硬件自检最后执行【硬件自检】,检查仿真器与硬件电路是否正常连接。如果确信硬件连接正常,则此步可跳过。TKScope仿真器在硬件自检的时候,会根据用户选择的芯片的RAM区域进行检查;当目标板上有外扩RAM时,TKScope也可以检查该RAM是否正常工作。

图2.8  硬件自检
2.1.7 仿真调试在完成前面的配置后,即可在IDE环境下仿真和调试。在Keil环境下的仿真效果界面如图2.9所示。
图2.9  Cortex-M4内核调试效果
2.2 仿真Cortex-M0内核2.2.1 硬件选择打开【硬件选择】,如图2.10所示。在右上角的器件过滤窗口中输入LPC4350,左边系统会自动找到该芯片型号,选择LPC4350_Cortex_M0下相应的仿真器型号AK100Pro。
图2.10  硬件选择
2.2.2 附加设置在【附加设置】中,选择使用JTAG接口进行仿真,如图2.11所示。
图2.11  附加设置
2.2.3 TAP设置点击仿真器设置界面的【TAP设置】,仿真器会自动检测出芯片的内核及其IDCODE,如图2.3所示。TKScope仿真器读出两个内核,Cortex-M4和Cortex-M0,选择Cortex-M0内核。
图2.12  TAP设置
2.2.4  初始化宏配置由于是在RAM中调试,因而可跳过【程序烧写】配置而直接进入【初始化宏】配置。在初始化宏配置中需进行复位矢量的配置,以告知仿真器主动调整正确的PC值和SP值;同时需要设置内核的VTOR寄存器(地址:0xE000ED08),以重映射中断向量表。配置如图2.13所示。具体中断向量表的位置取值取决于实际的工程配置,当前工程配置的地址为0x10080000起始处。
图2.13  Cortex-M0初始化宏配置
2.2.5 硬件自检最后执行【硬件自检】,检查仿真器与硬件电路是否正常连接。如果确信硬件连接正常,则此步可跳过。TKScope仿真器在硬件自检的时候,会根据用户选择的芯片的RAM区域进行检查;当目标板上有外扩RAM时,TKScope也可以检查该RAM是否正常工作。
图2.14  硬件自检
2.2.6 仿真调试在完成前面的配置后,即可在IDE环境下仿真和调试。在TKStudio环境下的仿真效果界面如图2.15所示。
图2.15  Cortex-M0内核调试效果
3. 总结多核系统的引入给调试带来了不小的挑战,开发人员已经很难再使用传统的仿真器辅助调试,必须慎重地考虑并选择合适的工具。即便是现在您还未调试LPC4300这种多核系统,也需要从长远的角度出发选择合适的工具,以避免后期额外购买此类工具的成本。作为专业的仿真器品牌,TKScope不仅及时地支持新内核、新芯片种类;而且也一如既往的关注用户需求,为多核调试提供着全面的支持。TKScope仿真器后续会不断地创新和发展,保持与嵌入式处理器同步发展和进步,敬请关注。

关于TKScope对Cortex-M4内核的具体支持,请见这篇文章TKScope仿真器新增对Cortex-M4内核的支持
原始文章请见:http://lishutong.me/1931.html

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-9-23 11:11:31 | 显示全部楼层
论坛的编辑器不是太好用啊,排版全变样了

出0入20汤圆

发表于 2012-9-23 15:35:05 | 显示全部楼层
广告贴!早期做过多MCU系统,共用RAM。调试也是一样的!

出0入0汤圆

 楼主| 发表于 2012-9-23 21:12:53 | 显示全部楼层
mon51 发表于 2012-9-23 15:35
广告贴!早期做过多MCU系统,共用RAM。调试也是一样的!

那你之前是怎么调试的,两个MCU的调试接口用菊花链的方式连接还是用两台仿真器各调各的?

出0入0汤圆

 楼主| 发表于 2012-9-23 21:38:19 | 显示全部楼层
mon51 发表于 2012-9-23 15:35
广告贴!早期做过多MCU系统,共用RAM。调试也是一样的!

注意噢,现在是同时打开两个IDE,用一台仿真器,同时调试两个核。

出0入31汤圆

发表于 2012-9-23 22:13:36 | 显示全部楼层
LPC4300的程序怎么写的?两个核各写各的吗?

出0入0汤圆

 楼主| 发表于 2012-9-23 22:30:03 | 显示全部楼层
zchong 发表于 2012-9-23 22:13
LPC4300的程序怎么写的?两个核各写各的吗?

两个内核,各写各的。要是用Keil,建立两个Keil工程,各调各的。当然两个核之间有一个消息通道,可以传递命令。
芯片只有一个JTAG/SWD调试接口,只能连一台仿真器。用J-Link和U-Link的话一次只能调一个,而我们的仿真器可以同时调两个,只用一台仿真器。

出0入20汤圆

发表于 2012-9-24 07:15:34 | 显示全部楼层
lishutong 发表于 2012-9-23 22:30
两个内核,各写各的。要是用Keil,建立两个Keil工程,各调各的。当然两个核之间有一个消息通道,可以传递 ...

再多的核,对于程序员来说,也是一个一个地写程序。写完一个后,再调试。为何一定要同时调试?早期在DOS下,我们设计的2MCU系统,难道可以同时打开2个DIE?对于程序源来说,不光要有完善的程序结构和算法!还要有巧妙的调试技巧!例如现在的LPC4300双核,实际的问题在MO与M3的通讯。它们各自的程序难道不能独立调试?

出0入0汤圆

发表于 2012-9-24 08:24:43 | 显示全部楼层
太麻烦。。。。

出0入0汤圆

 楼主| 发表于 2012-9-24 09:21:46 | 显示全部楼层
mon51 发表于 2012-9-24 07:15
再多的核,对于程序员来说,也是一个一个地写程序。写完一个后,再调试。为何一定要同时调试?早期在DOS ...

我的意思并不是只有多个IDE同时调试才能解决问题。

是否需要仿真器来调,并且是否需要同时打开两个IDE同时调试,取决于你愿意在调试技巧本身上花费多少时间。仿真器本身只是工具,用来辅助开发,提供开发的效率。如果没有仿真器,或者是像你说的,一次调一个,不是不可以,只不过会更麻烦。工具本身并不是解决问题的唯一方案,而只不过是提供一种更好的、更快速的解决方案而已。最终选哪种方案,不只是看能不能解决问题,也要看看从时间、效果等因素上看看所要付出代价吧?

LPC4300双核调试,你当然可以一次调一个。比如说我只调试M4,让M0一直全速运行。OK,M4发个消息给M0,然后观察M0的运行或者返回的结果。要是M0返回的结果不是预期的,可以通过在M0里面加点Printf,或者通过IDE观察存储区中变量的变化等等。这也可以,只不过要费较多的力气而已。
但是如果可以同时控制M0、M4,在M4发消息后,能够单步观察M0的运行过程、M0程序的变量变化,不是更有效率?

出0入0汤圆

发表于 2012-9-24 10:33:07 | 显示全部楼层
一定需要仿真器吗?

出0入0汤圆

 楼主| 发表于 2012-9-24 11:10:07 | 显示全部楼层
hygbeyond 发表于 2012-9-24 10:33
一定需要仿真器吗?

前面的帖子已经说的很明白了,如果你有很强的毅力,有时间,有精力,可以不用仿真器。工具只不过是辅助开发,提高效率的手段而已。就像现在还是有不少人用类似于以前搞51的方式,直接下代码看结果,不用仿真器也行,只不过比较费力气

出0入0汤圆

发表于 2012-10-10 22:05:22 | 显示全部楼层
我不是这个意思,双核就和跑操作系统一样,靠仿真器远远不能满足实际的需求。
可以参考有一篇文章《编程精粹》的方式来调试,增加断点,打印调试信息。把需要的东西通过串口打印出来,可以通过选项来打开,或通过命令来定时输出……等方式来实现。
通过仿真器来调试操作系统,基础的驱动程序。

出0入0汤圆

发表于 2012-10-23 16:39:20 | 显示全部楼层
问一下你是哪个公司的,现在有LPC43xx开发板么

出0入0汤圆

 楼主| 发表于 2012-10-23 21:08:29 | 显示全部楼层
wsj150 发表于 2012-10-23 16:39
问一下你是哪个公司的,现在有LPC43xx开发板么

ZLG,我不负责LPC43xx开发板。ARM开发板问题你可以问下ARm技术那边:020-22644383,或者邮件nxparm@zlgmcu.com
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-23 22:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表