打印

请教一个我自己感觉比较难的问题!

[复制链接]
1985|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bhsdlmj|  楼主 | 2011-12-9 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送数据4000多个

INT16U    num= 0;//数据个数

for (num = 0; num < 4095; num++) {
          send_data(i);
}


void send_data(i)
{
            //初始化
            while(!ready)//等待直到准备好
            //发送数据
}

现在的问题是这个for循环运行时间太长了,请教如何让运行时间变短??
已知情况是
(1)这个不能设置成为中断发送
(2)运行一次send_data(i);耗时大概1ms。其中大部分时间都耗费在了“等待”上

相关帖子

沙发
bhsdlmj|  楼主 | 2011-12-9 18:02 | 只看该作者
是个51单片机 是不是递归能解决 还是只有多进程能搞定?

使用特权

评论回复
板凳
teddeng| | 2011-12-9 18:41 | 只看该作者
是不是往液晶模块写数据?

使用特权

评论回复
地板
bhsdlmj|  楼主 | 2011-12-9 18:42 | 只看该作者
不是

使用特权

评论回复
5
NE5532| | 2011-12-9 21:56 | 只看该作者
先分清楚主要矛盾,是程序执行时间长,还是波特率低造成的发送时间长,程序的,优化语句,不行上汇编;波特率的,提高波特率。其实最好的办法就是用中断来写,这条路又被楼主给堵死了。

使用特权

评论回复
6
ayb_ice| | 2011-12-10 08:05 | 只看该作者
这种慢速的任务最好用中断驱动,或将其它任务用中断驱动
或用RTOS,或用状态机,总之原理是类似的,必须想办法利用这等待的时间,否则严重影响整个系统的实时性

使用特权

评论回复
7
Ryanhsiung| | 2011-12-10 08:07 | 只看该作者
先分清楚主要矛盾,是程序执行时间长,还是波特率低造成的发送时间长,程序的,优化语句,不行上汇编;波特率的,提高波特率。其实最好的办法就是用中断来写,这条路又被楼主给堵死了。 ...
NE5532 发表于 2011-12-9 21:56

那只能这么慢了

使用特权

评论回复
8
谈的元| | 2011-12-10 10:38 | 只看该作者
状态:每一MS查询执行一次最好

使用特权

评论回复
9
forrest11| | 2011-12-10 11:48 | 只看该作者
建议在等的过程中,做其它事情:
num=0;
while(1)
{
          //发送数据
      num++;
         if (num==4095) num=0;
         //所有其它事情;
         while(!ready)//等待直到准备好
}

使用特权

评论回复
10
原野之狼| | 2011-12-10 13:58 | 只看该作者
好奇中  为啥不让用中断

使用特权

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

本版积分规则

55

主题

351

帖子

0

粉丝