关于定义(延时函数)的问题

bandaoyu 2012-05-07 11:14:09
//---精确延时函数---------
#define CPU_F ((double)22118400) //晶振
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

我定义了上面的延时函数,然后再main里面调用:

delay_ms(80);
发现过不了,卡主了,是怎么回事?
...全文
388 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshi_ziyu 2012-05-14
  • 打赏
  • 举报
回复
试试delay_ms(1);然后一点一点的加

bandaoyu 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
兄弟,你干吗用浮点数啊?这种定点cpu做浮点运算是几何级数的耗时的。

你的除数倒不如用1024,可以直接做移位呢。

真要是需要精确到极致的定时,就该用汇编去优化的。
[/Quote]

管他什么浮点不浮点的,反正是宏定义,又不要单片机算,编译的时候算好,自动展开给单片机用,所以你说的问题不存在
shuiyan 2012-05-13
  • 打赏
  • 举报
回复
兄弟,你干吗用浮点数啊?这种定点cpu做浮点运算是几何级数的耗时的。

你的除数倒不如用1024,可以直接做移位呢。

真要是需要精确到极致的定时,就该用汇编去优化的。
bandaoyu 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
__delay_cycles(long cycles)

这个函数你帖出来
[/Quote]这个是IAR 内部函数,CPU_F*(double)x/1000.0 也没有超过long的范围呀
bandaoyu 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
__delay_cycles(long cycles)

这个函数你帖出来
[/Quote]
void _ _delay_cycles(unsigned long cycles);
dceacho 2012-05-12
  • 打赏
  • 举报
回复
__delay_cycles(long cycles)

这个函数你帖出来
bandaoyu 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
你要把原函数__delay_cycles((long)(CPU_F*(double)x/1000.0))贴出来啊
[/Quote]
大哥,这个是宏定义……
dceacho 2012-05-11
  • 打赏
  • 举报
回复
你要把原函数__delay_cycles((long)(CPU_F*(double)x/1000.0))贴出来啊
bandaoyu 2012-05-09
  • 打赏
  • 举报
回复
MSP 430 5438
yoveldf 2012-05-08
  • 打赏
  • 举报
回复
__delay_cycles((long)(CPU_F*(double)x/1000.0))这个是怎么定义的?
dsoyy 2012-05-08
  • 打赏
  • 举报
回复
什么叫卡住了?死了,跑飞了?
zrzr334 2012-05-08
  • 打赏
  • 举报
回复
什么单片机

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧