打印
[N32G45x]

请教软延时的问题

[复制链接]
3006|47
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qeeuly|  楼主 | 2024-4-19 15:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
ma, 341, We, HIL, 455, AC
在main起始就用软延时powerup_delay(),实测延时是8秒。
用的是IAR,优化为none。
看了仿真的汇编,while是3个指令,按理G455上电是HSI 8M时钟,这延时8秒怎么算的?



使用特权

评论回复
沙发
qintian0303| | 2024-4-24 17:17 | 只看该作者
HSI 8M时钟,你得看后面是不是是否还有分频或者倍频,最后看系统时钟是多少

使用特权

评论回复
板凳
timfordlare| | 2024-5-1 21:27 | 只看该作者
一般来说,软延时函数会使用一个计数器,在循环中逐渐增加计数器的值,直到达到某个预设的目标值。

使用特权

评论回复
地板
jobszheng| | 2024-5-1 22:51 | 只看该作者
这个是一个虚值!

使用特权

评论回复
5
maudlu| | 2024-5-2 14:38 | 只看该作者
尽管优化选项为"None",但编译器可能仍然对代码进行了一定程度的优化。

使用特权

评论回复
6
hudi008| | 2024-5-2 16:16 | 只看该作者
如果 powerup_delay() 函数中的 while 循环体只包含了一个 nop(无操作指令),那么在一个周期为 1/8MHz(即 0.125μs)的硬件时钟下,每个 nop 指令将消耗 0.125μs。

使用特权

评论回复
7
mickit| | 2024-5-2 17:06 | 只看该作者
在8MHz的时钟频率下,每个时钟周期是1/8MHz = 125ns。

使用特权

评论回复
8
uytyu| | 2024-5-2 17:54 | 只看该作者
优化设置为None,但编译器仍然可能进行一些基本的指令重排或优化,这可能会影响循环的实际执行时间。

使用特权

评论回复
9
burgessmaggie| | 2024-5-2 20:10 | 只看该作者
如果循环体只有一个 nop,那么 3 个指令将表示 3 个周期,即 0.375μs。

使用特权

评论回复
10
sesefadou| | 2024-5-2 21:49 | 只看该作者
在延时期间,如果有中断发生或其他外部事件影响了处理器的执行流程,那么实际的延时时间可能会受到影响。

使用特权

评论回复
11
benjaminka| | 2024-5-3 09:11 | 只看该作者
IAR编译优化设置为None,这通常意味着编译器不会对代码进行额外的优化,因此我们可以假设汇编代码与C代码的执行效率大致相当。

使用特权

评论回复
12
pmp| | 2024-5-3 12:14 | 只看该作者
仿真环境可能与实际硬件环境不同,例如,仿真器可能使用不同的时钟源或执行速度。

使用特权

评论回复
13
lzbf| | 2024-5-3 15:15 | 只看该作者
需要查看 powerup_delay() 函数中 while 循环体内的所有指令,并计算它们在一个周期内的执行时间。

使用特权

评论回复
14
juliestephen| | 2024-5-3 18:15 | 只看该作者
需要将时钟频率转换为周期数。对于8MHz的时钟,每个周期是1/8MHz = 0.125μs。

使用特权

评论回复
15
macpherson| | 2024-5-4 11:23 | 只看该作者
一个非常粗略的估计               

使用特权

评论回复
16
nomomy| | 2024-5-4 22:28 | 只看该作者
如果每次while循环迭代消耗3个指令周期,那么在8MHz的时钟下,每次迭代会消耗3个时钟周期的时间。如果我们知道powerup_delay()函数总共执行了多少次这样的迭代,我们就可以用下面的公式来计算总延时:

总延时 = 迭代次数 × 每次迭代的时钟周期数 / 时钟频率

使用特权

评论回复
17
chenjun89| | 2024-5-5 14:31 | 只看该作者
看一下powerup_delay函数里面的代码

使用特权

评论回复
18
plsbackup| | 2024-5-6 09:31 | 只看该作者
将循环体中每个指令的时钟周期数相加,得到每次循环所需的总时钟周期数。然后,乘以循环的次数,得到总时钟周期数。

使用特权

评论回复
19
nomomy| | 2024-5-6 12:38 | 只看该作者
IAR优化设置为none,意味着编译器不会对代码进行优化,这可能会影响执行速度。

使用特权

评论回复
20
sdlls| | 2024-5-6 15:46 | 只看该作者
while循环体包含3个指令。每个指令的执行时间取决于具体的处理器架构和时钟周期。

使用特权

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

本版积分规则

9

主题

25

帖子

0

粉丝