完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
MplabX模拟器,处理器dsPIC33EP256GP50216位MCU和DSC程序员的参考手册和MplabX模拟器周期之间存在一些差异。说明:sl w1,w1手册:1周期模拟器:2周期指令:mov w1,LATB手册:2周期模拟器:1周期值对的?最好的问候
|
|
相关推荐
9个回答
|
|
|
这两个周期是1个周期。
|
|
|
|
|
|
我们实际上有一个JSUB测试来验证SL是一个周期。我只是重新运行这个测试,SL需要1个指令周期来执行。(实际上我们每晚都运行数千个JUnit测试。)我们必须更详细地检查您如何测量周期。模拟器团队在测量循环时间方面有很多经验,我可以告诉你,它比你想象的要复杂得多。特别是在处理真实硬件时。你必须担心断点滑移、调试器等待时间等问题。
|
|
|
|
|
|
我可以告诉你我是怎么做到的。也许它会使它更容易。我有一个测试程序,它是一个长串的“NoP”,它跨越擦除页面的长度。程序在进入“NOPS”字符串之前设置定时器,并通过“NOPS”字符串读入定时器。它通过UART将读数发送到PC,PC的工作原理是:它通过ICSP连接到PIC,擦除“nops”字符串,然后用我想测量的测试用例重新编程。测试用例是相同的“NOP”字符串,但在开始时插入测试命令(或命令)。一旦测试被编程,PC程序运行PIC,然后读取通过UART发送的数据,然后停止PIC并为下一个测试用例做好准备。使用测试命令的定时器读数与纯“nops”的已知读数(加上由命令替换的“nops”的数目)之间的差别告诉我执行测试命令需要多长时间。这样,我可以在几分钟内测试数千个情况。当然,您需要使用具有良好闪存耐读性的部件。我使用类似的设置来测试在执行不同命令时如何调用中断,只是,除了时间测量之外,我还收集了有关延迟的数据。
|
|
|
|
|
|
修正:我使用MPLABX V3.40为Ubuntu Linux。我使用秒表。我一步一步地执行指令,看看循环如何有每个指令。其他说明是正确的。例如,“bset LATB”指令有2个周期,“bra”指令有4个周期等。问题是“sl”和“mov w1,LATB”指令。我的程序是时间关键的,我必须知道有“mov w1,LATB”指令1或2个周期。
|
|
|
|
|
|
在《16位MCU和DSC程序员参考手册》DS70157F:第39页,3.2.1多周期指令,有几个注释是关于根据被访问的家庭和存储器区域被注入的额外周期的。ity(PSV)将导致PIC24F、PIC24H、dsPIC30F和dsPIC33F设备的一个或两个周期延迟,而在dsPIC33E和PIC24E设备中使用PSV将导致基于闪存访问时间的4周期延迟。然而,无论使用哪个设备,当REPEAT循环的目标指令作为数据访问程序存储器时,只有目标指令的第一次执行受到延迟。有关详细信息,请参阅特定设备族参考手册。2:根据闪存访问时间,所有指令在某些设备族上可能导致额外的延迟。例如,PIC24E和DSPIC33 E器件具有3周期快闪存储器存取时间。然而,指令流水线增加了有效指令执行吞吐量。请参阅第2节。关于指令定时的详细信息,特定设备系列参考手册的“CPU”3:PIC24E和dsP中的非CPU特殊功能寄存器(例如,I/O端口、外围控制或状态寄存器;中断标志等)上的所有读和读-修改-写操作(包括位操作)。IC33器件需要2个指令周期来执行。然而,CPU和非CPU特殊功能寄存器上的所有写操作,以及CPU特殊功能寄存器上的所有读和读-修改-写操作都需要一个指令周期。PORTx、TRISx和LATx是非CPU特殊功能寄存器。例如“MOV W1,LATB”状态。模拟器应该计算一个指令周期。数据表上写到非CPU特殊功能寄存器需要一个周期。对于“MOV LATB,W0”语句,模拟器应该为dsPIC33EP256GP502计算两个指令周期。dsPIC33EP256GP502数据表还建议延迟PORT的读操作。在写到PORT、LAT或TRIS寄存器之后执行一个指令周期。有可能,甚至有可能在模拟器中存在导致指令周期计数错误的错误。如果希望Microchip修复模拟错误,则需要提供使用最新版本构建的项目T版本的MPLABX和编译器。这个代码应该尽可能短。如果该示例能够检测到模拟故障和分支到断点位置,这将是有益的。检测模拟故障的例子更容易集成到单元测试中。
|
|
|
|
|
|
正确的解释。这里只是个问题,为什么指令“sl w1,w1”在我的模拟器中有2个周期,但对我来说并不重要。谢谢。
|
|
|
|
|
|
SasiVoje,正如我之前所说的,我们在Chandler的测试中没有看到这一点。您能提供一个简单的示例项目来显示这种行为吗?我们进行了类似的测试(虽然通常不太详细)。但我认为你要指出的是,测量不一定是简单的。格林先生:这个方法很可疑。每次您停止真实设备时,设备都会经历相当大的状态改变,并且执行数千条指令以将数据返回到MPLAB。一个更好的方法是使用一个定时器,并在本地变量中记录执行前后的定时器值。运行整个序列(计时器记录和指令),然后检查存储的值。
|
|
|
|
|
|
这里是我的代码的一部分:RA0,RA1,RA2,RA3和RA4 -输入。MOVα0B11111,W0 MOV W0,TrISA;RB0输入,RB1-RB15输出。mov#0b1、w0 mov w0、TRISB mov#0b110100000000、w13 clr w12 clr w1 btst PORTA、0bsw.z w1、w12 sl w1、w1加w13、w1、w1 mov w1、LATB nop
|
|
|
|
|
|
如果我们继续寻找足够长的时间,我们最终会找到一些东西!看起来,模拟器可能对什么构成了许多dsPIC33E和PIC24E设备的非核心目的地址感到困惑。特别是,“sl w1,w1”错误地添加了附加指令,因为它愚蠢地认为所有可能的目标是非核心寄存器。我们正在调查此事。可能存在这个问题的指令是:
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1122浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 21:26 , Processed in 1.294248 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2339