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

[复制链接]
 楼主| 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 | 显示全部楼层
不是
NE5532 发表于 2011-12-9 21:56 | 显示全部楼层
先分清楚主要矛盾,是程序执行时间长,还是波特率低造成的发送时间长,程序的,优化语句,不行上汇编;波特率的,提高波特率。其实最好的办法就是用中断来写,这条路又被楼主给堵死了。
ayb_ice 发表于 2011-12-10 08:05 | 显示全部楼层
这种慢速的任务最好用中断驱动,或将其它任务用中断驱动
或用RTOS,或用状态机,总之原理是类似的,必须想办法利用这等待的时间,否则严重影响整个系统的实时性
Ryanhsiung 发表于 2011-12-10 08:07 | 显示全部楼层
先分清楚主要矛盾,是程序执行时间长,还是波特率低造成的发送时间长,程序的,优化语句,不行上汇编;波特率的,提高波特率。其实最好的办法就是用中断来写,这条路又被楼主给堵死了。 ...
NE5532 发表于 2011-12-9 21:56

那只能这么慢了
谈的元 发表于 2011-12-10 10:38 | 显示全部楼层
状态:每一MS查询执行一次最好
forrest11 发表于 2011-12-10 11:48 | 显示全部楼层
建议在等的过程中,做其它事情:
num=0;
while(1)
{
          //发送数据
      num++;
         if (num==4095) num=0;
         //所有其它事情;
         while(!ready)//等待直到准备好
}
原野之狼 发表于 2011-12-10 13:58 | 显示全部楼层
好奇中  为啥不让用中断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

351

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部