3.2.4 调试时的注意事项
(1)用户程序执行过程中复位
在用户程序执行期间如果发生内部复位,仿真器就不可能控制MCU。所以,请勿产生如看门狗定时器产生的内部复位。
当目标系统的执行过程中发生了引脚复位,用户程序可能会挂起。此时,需断开连接后,再重新连接。
在仿真系统操作MCU(如参考或者查看[Memory]窗口中的内容)的过程中,如果产生复位(通过引脚复位或者看门狗定时器产生的CPU复位),则显示错误消息“A timeout error. The MCU is in the reset state. The system was reset.”。此时,仿真器被初始化,用户程序被停止。系统复位后,跟踪记录也被初始化,可以继续调试。
(2)对用于调试的设备的处理
由于调试时设备内部的Flash会被多次擦写并且无法确保擦写的次数,因此,不要将用于调试的设备安装在量产的产品中。此外,也不要将调试监控程序编程至量产的产品中。
(3)高速时钟振荡器(HOCO)
调试器使用设备的内部高速时钟振荡器(以下简称HOCO),RX200系列和RX100系列MCU通过FINE接口来实现通信。因此,不管相关寄存器设置,HOCO始终处于振荡状态。
如果切换HOCO频率和仿真器对存储器进行存取操作之间发生冲突时,则不能保证存储器的存取操作。
如果通过用户程序或者仿真器切换HOCO频率,则仿真器和设备之间的通信可能发生错误。当发生通信错误时,请降低FINE波特率。
(4)用户程序的最终评价
进入大规模生产阶段,被用编程器写入到flash memory ROM之前,一定要进行程序的最终评估。请务必在不连接仿真器的情况下单独进行评估。
(5)多个EZ-CUBE3不能同时连接到仿真器调试器
(6)选项设定存储器
(a)选项功能选择寄存器1(OFS1)
OFS1寄存器的注释适用于特定类型的MCU。确认以下注释中适用于所使用的MCU。
• 适用MCU:RX71X、RX65X和RX64X
OFS1寄存器不能通过下载以外的操作进行修改(例如,通过[Memory]面板或[Memory]视图或行汇编进行编辑)。
不能使用电压检测0复位功能。当通过下载修改OFS1寄存器以启用电压检测0复位功能时,仿真器将强制修改寄存器值以禁用该功能。
由于使用了FINE通信,仿真器强制将OFS1寄存器中的位25和位24设置为10b。在这种情况下,请确保用户程序不会写入OFS1寄存器中的位25和位24。
• 适用MCU:RX72x
OFS1寄存器允许启用或禁用电压检测0复位功能并设置电压检测电平。该寄存器的值位于闪存中,可能无法由仿真器控制。这取决于设置。当通过操作(例如下载,或通过[Memory]面板/[Memory]视图编辑)修改闪存ROM的内容时,如果OFS1寄存器设置为产生电压监视0复位的条件,则将发生错误。有关OFS1寄存器的详细信息,请参见MCU的硬件手册。
由于使用FINE通信,仿真器强制将OFS1寄存器中的位25和位24设置为10b。在这种情况下,请确保用户程序不写入OFS1寄存器中的位25和位24。
• 适用MCU:RX200系列和RX130
当通过下载以外的操作修改OFS1寄存器时(例如,通过[Memory]面板或[Memory]视图或行汇编进行编辑),需要执行以下步骤才能使新设置生效。
👉 修改OFS1寄存器
👉 单步执行用户程序(这会导致对OFS1寄存器进行写入操作)
👉 复位CPU
👉 通过下载修改OFS1寄存器时,新设置将在此后复位CPU时生效。
OFS1寄存器允许启用或禁用电压检测0复位功能并设置电压检测电平。该寄存器的值位于闪存中,可能无法由仿真器控制。这取决于设置。当通过操作(例如下载,或通过[Memory]面板/[Memory]视图编辑)修改闪存ROM的内容时,如果OFS1寄存器设置为产生电压检测0复位的条件,则将发生错误。有关OFS1寄存器的详细信息,请参见MCU的硬件手册。
由于使用FINE通信,仿真器强制将OFS1寄存器中的位25和位24设置为10b。在这种情况下,请确保用户程序不写入OFS1寄存器中的位25和位24。
• 适用MCU:除RX130外的RX100系列
当通过下载以外的操作修改OFS1寄存器时(例如,通过[Memory]面板或[Memory]视图或行汇编进行编辑),需要执行以下步骤才能使新设置生效。
- 修改OFS寄存器。
- 单步执行用户程序(这会导致对OFS1寄存器进行写入操作)。
- 复位CPU:通过下载修改OFS1寄存器时,新设置将在此后复位CPU时生效。
不能使用电压检测1复位功能:当通过下载修改OFS1寄存器以启用电压检测1复位功能时,仿真器将强制修改寄存器值以禁用该功能。
当通过下载以外的操作修OFS1寄存器(例如,通过[Memory]面板或[Memory]视图或行汇编进行编辑)以启用电压检测1复位功能时,将发生错误。
由于使用FINE通信,仿真器强制将OFS1寄存器中的位25和位24设置为10b。在这种情况下,请确保用户程序不写入OFS1寄存器中的位25和位24。
(b)字节序选择寄存器(MDEB和MDES)
在仿真器调试器的属性设置中选择了字节序和运行模式后,MDEB和MDES寄存器即被写入。有关字节序或操作模式属性的设置,请参阅仿真器调试器的用户手册和帮助系统。
在单芯片模式下进行调试时,无法通过仿真器调试器操作修改MDES寄存器。在用户引导模式下进行调试时,无法通过仿真器调试器操作修改MDEB寄存器。
(c)闪存访问窗口寄存器(FAW)
• 适用MCU:RX65x
无法通过仿真器调试器操作切换FAW寄存器中的FSPR位以选择保护状态。
当FAW寄存器中的FAWS、FAWE和FSPR位设置了保护时,只能在闪存访问窗口区域下载值。在这种情况下,请在[Property]面板的[Download File Settings]选项卡页面的[Download]类别中为[Erase flash ROM before download]属性指定[No]。
(d)字节序选择寄存器(MDE)和Bank选择寄存器(BANKSEL)
• 适用MCU:具有1.5MB或更大代码闪存的RX65xMCU
写入MDE和BANKSEL寄存器将进入目标寄存器,其值对应于已在仿真器调试器中选择作为属性的字节序、存储区模式和启动存储区。
(7)记忆保护单元(MPU)
• 适用MCU:RX72x,RX71x,RX65x,RX64x,RX24x,RX23x和RX21A
只有在程序执行停止时才能引用和写 MPU区域。如果在程序执行期间尝试访问MPU区域,读取的数据将显示为0x00,或写入时会出错。
MPU区域中无法进行以下操作:
- 线汇编
- 内存搜索
- 内存复制
(8)闪存
(a)与闪存有关的寄存器
当写入闪存时(例如下载程序、设置软件断点或修改[Memory]面板或[Memory]视图中的值),请注意与闪存相关的寄存器的值也会被调试器盖写。
(b)锁定位
• 适用MCU:RX72x,RX71x,RX64x,RX22x和RX21x
下载前清除锁定位:如果要将用户程序下载到设置了锁定位的闪存ROM区域,则仿真器调试器会在开始下载之前清除要下载数据的块的锁定位。
下载后恢复锁定位:仿真器的行为取决于[Debug the program re-writing the on-chip PROGRAM ROM]的设置,该设置已被选为仿真器调试器的属性。
- 选择[Yes]时:下载后恢复锁定位。
- 选择[No]时:即使下载后锁定位仍保持清除状态。
(c)区域保护
• 适用MCU:RX65x,RX24x,RX23x和RX100系列
下载前禁用区域保护:当用户程序下载到受区域保护编程保护的闪存ROM区域时,仿真器调试器禁用区域保护。
下载后恢复区域保护:仿真器的行为取决于[Debug the program re-writing the on-chip PROGRAM ROM]的设置,该设置已被选为仿真器调试器的属性。
- 选择[Yes]时:下载后恢复区域保护。
- 选择[No]时:即使下载后,区域保护也会被禁用。
(d)启动程序保护功能
• 适用MCU:RX24x,RX23x和RX100系列
如果要调试涉及启动程序保护功能的用户程序,请将[Debug the program re-writing the on-chip PROGRAM ROM]选为[Yes]作为仿真调试器的属性。
如果仿真器在调试涉及启动程序保护功能的用户程序期间发出了复位信号,请在恢复调试之前再次下载用户程序。
在闪存中的用户代码运行期间,当使用闪存额外区域控制寄存器(FEXCR)控制在默认区域和备用区域之间切换时,不要通过操作仿真器调试器产生CPU中断,不要允许产生外部引脚复位或内部复位。
关闭并重新启动调试器后,可以调试切换后的引导区域。
在用户程序执行期间,当使用闪存初始化设定寄存器(FISR)切换默认区域和备用区域后,在程序执行停止时,禁止产生引脚复位。只有在程序运行时才能通过复位引脚输入复位信号。
在停止执行用户程序时,不要通过控制闪存初始设置寄存器(FISR)立即切换默认区域和备用区域。
(e)可信闪存
• 适用MCU:RX72x,RX71x,RX65x和RX64x
启用可信内存设施时,无法重写可信内存标识数据(TMINF)寄存器的值。即使在尝试下载到TMINF寄存器的情况下,也不会修改其值。
(f)ROM缓存功能
• 适用MCU:RX72x,RX65x和RX24x
在包括重写闪存的调试中,在执行程序期间发出引脚复位或内部复位可能会阻止更新[Disassemble]面板或[Memory]窗口中的显示。
在这种情况下,手动操作ROM高速缓存无效寄存器(ROMCIV)以在用户程序停止后使ROM高速缓存无效。
(g)以双模式进行调试
• 适用MCU:具有1.5MB或更多代码闪存的RX65xMCU
创建一个项目:创建项目时,为要使用的MCU选择带有“_DUAL”的类型名称。选择[Start bank]作为仿真器调试器的属性。
切换Bank:切换Bank后,调试信息将不一致。
当调试涉及切换后的bank时,需要提前准备一个使用切换后bank的项目。切换bank后,断开仿真器调试器,下载切换bank后的项目,然后重新连接仿真器调试器。
启用可信内存功能:当要调试启用可信内存功能的MCU时,如果在仿真器调试器的项目中指定的库模式与MCU的模式不匹配,则仿真器调试器的连接可能会失败。
(9)DMAC和DTC
即使用户程序停止,DMAC和DTC也将运行。
当满足以下任一条件并且在用户程序停止时执行下面列出的任何调试操作时,DMAC和DTC可能无法按预期运行。
[条件]
• 片上闪存ROM中的地址被指定为DMAC或DTC的传输源。
• 片上闪存ROM中的地址被指定为DMAC或DTC触发源的中断向量或DTC向量表的地址。
[调试操作]
• 在片上闪存ROM区域中设置软件断点
• 从[Memory]面板(或[Memory]视图)或[Python Console]面板写入片上闪存ROM区域
• 下载到片上闪存ROM区域
(10)调试功能
(a)存储器访问
低功耗模式下的存储器访问:如果要调试将器件置于低功耗模式的程序,请为作为仿真器调试器属性的[Update display during the execution]选择[No]。如果在仿真器调试器访问存储器时,MCU已进入低功耗模式,则MCU不响应,并且不更新仿真器调试器的显示。
如果在[Update display during the execution]选择[Yes]时MCU未响应,仿真器调试器将重置MCU以恢复与MCU的通信。
片内ROM中的存储器访问禁用扩展模式:当访问运行在片内ROM禁止扩展模式的MCU上的FCU固件区域或与内部闪存有关的I/O寄存器时,则会发生总线错误。
当调试片内ROM禁用扩展模式的MCU时,请勿在[Memory]面板或[IOR]面板中显示这些区域。
(b)事件
• 适用MCU:RX72x,RX71x,RX65x,RX64x,RX23x和RX24x
可以组合地址执行事件以用于连续中断等。当在目标MCU中选择[Sequential]作为事件组合条件时,不要为连续指令指定地址执行事件。在某些情况下可能无法检测到以这种方式设置的事件。
(c)Trace功能
在Trace功能中,当发生中断时,在中断处理进行之前显示来自发生中断的位置的下一个或第二个尚未执行的指令。
(d)覆盖功能
• 适用MCU:RX72x,RX71x,RX65x和RX64x
对于代码覆盖功能,当中断后的处理没有返回到中断发生点进行执行时,来自发生中断的位置的下一个或第二个尚未执行的指令被显示为执行指令。
(e)工作RAM区
指定为仿真器调试器属性的工作RAM区域必须始终是MCU的片上RAM中的有效区域。
(f)关于使用EZ-CUBE3的内部跟踪功能的注意事项
• 适用的MCU:RX71x,RX65x,RX64x,RX23x和RX24x
当使用EZ-CUBE3的内部跟踪功能时,如果满足特定条件,则无法正确获取跟踪信息或覆盖信息。请注意,此现象仅与使用仿真器进行调试有关,并且与芯片的独立操作无关。
[条件]
例:通过下面所示的分支指令(3)分支到小于(3)的地址(1)并且同时接受中断。
当发生这种现象时,将进行以下操作:
在跟踪获取中,输出的跟踪结果中中断处理前后都有的相同指令序列表明可能已经发生了这种现象。在覆盖范围获取中,没有迹象表明这种现象已经发生。
(11)与没有仿真器和调试相比较,MCU运行状态的差异
(a)寄存器的初始值
在调试期间启动仿真器时,它会初始化通用寄存器和一些控制寄存器。
PC初始化为上电复位向量表中PC的值。其他通用寄存器被清除为0。MCU的初始值未定义。
(b)低功耗状态
在调试期间,像通过一个释放源将MCU从低功耗模式释放一样,也可以通过按[STOP]或[Suspend]按钮来完成,从而导致中断。
(c)复位信号
如果在用户程序停止时通过引脚复位插入复位,则复位信号不会被屏蔽,并且MCU会在连接为FINE时复位。但请注意,如果连接是FINE,则不会屏蔽它并复位MCU。
警告:当RES#或WAIT#信号处于低电平时,不要在用户程序中造成中断。这样做会导致超时错误。如果在中断期间WAIT#信号被固定为低电平,则在访问存储器的情况下将发生超时错误。
(d)使用WDT
在执行中断期间,看门狗定时器的计数被暂停。当重新启动用户程序的执行时,也重新开始计数。
(e)修改与时钟发生器电路相关的寄存器和调试功能之间的争用
在用户程序运行时,请勿更改[Memory]窗口及其他界面中与时钟发生器电路相关的寄存器值。有关与时钟发生器电路相关的寄存器的详细信息,请参阅所用MCU的硬件手册。
(f)可屏蔽中断
即使用户程序停止(包括在运行时调试中),定时器和其他外围设备仍将运行。由于仿真器在用户程序停止时禁用中断(包括在运行时调试中),因此无法接受可屏蔽中断请求。在开始执行用户程序之后立即接受这样的中断请求。
请注意,在用户程序停止时(包括在运行时调试中),也不接受来自外围I/O模块的中断请求。
(g)将固件传输到FCU RAM
在调试期间,当仿真器启动时,固件将传输到FCU RAM。
(12)用于调试的MCU
使用EZ-CUBE3进行调试后,如果MCU与仿真器断开连接并自行运行,则无法保证正确的操作。要单独操作MCU,请使用编程软件重新编程MCU。
连接到EZ-CUBE3并用于调试的MCU在仿真期间,闪存被重复编程,闪存的性能将会下降。不要在最终批量生产的产品中使用调试用过的MCU。
(13)用户程序的最终评估
在进入批量生产阶段之前,请务必对通过编程软件写入闪存ROM的程序进行最终评估,而不要连接EZ-CUBE3。
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
未完待续
推荐阅读
EZ-CUBE3用户手册[2-3]如何在RL78微控制器上使用EZ-CUBE3
EZ-CUBE3用户手册[2-2]如何在RL78微控制器上使用EZ-CUBE3
EZ-CUBE3用户手册[2-1]如何在RL78微控制器上使用EZ-CUBE3