DSP DELAY_US与实际延时对应不上原因

【1024程序员节征文】以 1024 之名,写我与代码的「双向奔赴」 10w+人浏览 1.2k人参与

已经几次遇到这个问题了,目前分为两类。

原因1:

        函数没有放置在RAM区而是在FLASH区域。一般函数默认放在.text,处于FLASH区域。在这个区域使用函数会比在RAM中满很多。

        一般对于频繁调用或者中断类的函数需要放在RAM区域,这里再加入一类,时间敏感类函数,例如DELAY_US。

        可以参考C2000论坛关于DELAY_US总结

        由于DELAY_US是宏定义,因此实际只需要加入这段

#pragma CODE_SECTION(F28x_usDelay,".TI.ramfunc")//只需要加入这一行


//下面是DELAY_US的原定义
//
// DO NOT MODIFY THIS LINE.
//
#define DELAY_US(A)  F28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)
原因2:

        DELAY_US被中断打断,这是以前遇到的,当时用示波器测试了中断服务函数的执行语句数量对DELAY_US的延时影响,具体数据现在没有,但结论是对的。

        对于需要较严格时序的延时尽量不要使用DELAY_US,建议使用较为准确的定时计数累加或采用系统自带时钟或两者结合,不能依赖DELAY_US。

注:DELAY_US(10)就是延时10微秒的意思,一般用于等待硬件或其他进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值