已经几次遇到这个问题了,目前分为两类。
原因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微秒的意思,一般用于等待硬件或其他进程。
1176

被折叠的 条评论
为什么被折叠?



