打印
[应用相关]

keil模拟仿真方面的问题

[复制链接]
623|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onlycook|  楼主 | 2024-7-29 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位大神有没有发现在keil中用for循环进行延时时,有这样的一种问题
            for(i=0;i<848;i++);与for(i=848;i>0;i++);
这两种写法在keil中进行模拟仿真时,这两个的运行时间是不同的。
请问大佬们这是为什么呢?

使用特权

评论回复
沙发
kzlzqi| | 2024-7-29 15:01 | 只看该作者
如果编译器认为某些代码不会影响最终的结果,它可能会将其删除。编译器可能会优化循环结构,特别是当循环中没有实际的操作(例如,循环体为空)时。这样的优化可能导致不同的执行时间。

使用特权

评论回复
板凳
申小林一号| | 2024-7-29 22:52 | 只看该作者
感谢分享

使用特权

评论回复
地板
一秒落纱| | 2024-8-22 21:49 | 只看该作者
在理论上,它们应该产生相同的延时效果,因为它们都执行了848次循环。然而,在实际的编译和仿真过程中,可能会出现运行时间不同的情况,这通常是由编译器优化导致的

使用特权

评论回复
5
远山寻你| | 2024-8-22 23:00 | 只看该作者
Keil编译器可能会对代码进行优化,不同的循环条件可能会触发不同的优化策略。例如,编译器可能会认为i<848i>0在处理上有细微的差别,从而产生不同的汇编代码。

使用特权

评论回复
6
光辉梦境| | 2024-8-23 01:00 | 只看该作者
在某些情况下,编译器处理i<848i>0的方式可能会有所不同。例如,对于i>0,编译器可能需要额外处理当i0时的情况,这可能会导致额外的指令执行。

使用特权

评论回复
7
三生万物| | 2024-8-23 02:00 | 只看该作者
在仿真环境中,如果有中断或其他任务在运行,可能会影响循环的执行时间

使用特权

评论回复
8
三生万物| | 2024-8-23 04:00 | 只看该作者
在仿真环境中,如果有中断或其他任务在运行,可能会影响循环的执行时间

使用特权

评论回复
9
淡漠安然| | 2024-8-23 06:00 | 只看该作者
我觉得不同的循环条件可能会在中断处理时产生不同的行为

使用特权

评论回复
10
暖了夏天蓝了海| | 2024-8-23 07:00 | 只看该作者
在某些架构上,循环变量的更新可能会影响流水线的执行。例如,i++i--可能会导致不同的数据依赖性,从而影响循环的执行时间。

使用特权

评论回复
11
夜阑风雨| | 2024-8-23 08:00 | 只看该作者
为了验证这一点,你可以使用Keil的调试功能,查看生成的汇编代码,并比较两种循环条件下的指令执行情况。

使用特权

评论回复
12
江河千里| | 2024-8-23 11:00 | 只看该作者
你也可以尝试关闭编译器优化,看看是否会影响循环的执行时间

使用特权

评论回复
13
别乱了阵脚| | 2024-8-23 13:00 | 只看该作者
虽然理论上这两种循环应该产生相同的延时效果,但在实际的编译和仿真过程中,由于编译器优化、循环条件的处理、中断和上下文切换、数据依赖性等因素,可能会导致运行时间不同。

使用特权

评论回复
14
冰春彩落下| | 2024-8-23 14:00 | 只看该作者
估计就是编译器优化的结果吧,而且跟芯片也有关系,就是好像减减会快点?不记得了

使用特权

评论回复
15
梵蒂冈是神uy| | 2024-8-23 14:38 | 只看该作者
在Keil中使用for循环进行延时时,你可能会发现不同的for循环写法在模拟仿真中表现出的运行时间不同。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

438

主题

1657

帖子

3

粉丝