打印

编程思想请教.

[复制链接]
2206|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ihafd|  楼主 | 2008-1-2 11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近老是觉得自己的程序效率低.
在这里查看到许多有关这方面的东西,学到不少东西.但有些地方还是不太明白想请教一下.

我现在这样写程序的.
1.用TIME0做个定时器.第隔5mS就置一个运行标位.轮流顺序置位.
2.编写一个任务调度器函.查测这些标志位的状态,有位被置1就运行想应的任务.任务运行完.就反回调度函数.等下一个标志位的到来.....
3.把各种功能编写成函数,作为任务被调度器调度.
4.在主函数里无限循环调用调度函数.

请问这样的方法编写程序行不行,效率高吗?
还有个任务优先级的问题.我想把一些任务设置成高的优先级,在调度函数里应该怎样写啦?

相关帖子

沙发
machunshui| | 2008-1-2 11:33 | 只看该作者

不高

不高.
任务不能抢占.

有自己倒腾的精力,不如好好研究研究ucos.

使用特权

评论回复
板凳
Swd21ic| | 2008-1-2 11:42 | 只看该作者

额..

.这样效率是很高的..
不过这是典型的前后台吧

使用特权

评论回复
地板
gyt| | 2008-1-2 11:54 | 只看该作者

觉得效率不是最重要的

重要的是可靠性和可读性

使用特权

评论回复
5
mxh0506| | 2008-1-2 12:19 | 只看该作者

任务没有优先级,不能抢占的话

确实和前后台没什么区别
任务间的同步互斥和通信也很重要

使用特权

评论回复
6
dld2| | 2008-1-2 13:00 | 只看该作者

给“效率”下个定义先

使用特权

评论回复
7
ihafd|  楼主 | 2008-1-2 14:28 | 只看该作者

效率定义

我的效率定义是指尽量让MCU不要做多余的等待.
我不知道优先级这个东西是怎样编写的.请指点.谢谢.

使用特权

评论回复
8
dld2| | 2008-1-2 14:58 | 只看该作者

Re楼主

如果每个任务执行完之后就返回调度函数,那么基于优先级的调度在调度器中很好实现。调度器按照一定优先顺序检查哪一个任务可以运行即可。
这样虽然引入了优先级,但是不能抢占。

如果任务是紧凑执行的,不支持抢占并不影响效率。
如果任务执行中有延时等待,那么在等待期间不能干响应中断之外的任何事,那么就出现了楼主所说的效率问题。
那么,把任务变成一个状态机:
    延时时,任务进入状态A,返回调度器。
    当延时时间到达时,调度器再次调度该任务。
    该任务发现自己处于状态A时,则进行延时后的处理。
以上处理就能提高处理器的效率。缺点是,如果任务中的延时比较多,状态就会很多,处理起来比较麻烦。解决这个问题的一个办法是对状态进行分类和归并。
另外,如果是小延时,比如ms数量级以下,就没有必要采用这样的方法了。

抢占操作系统的解决方法是taskDelay。这个系统调用导致任务切换。taskDelay的分辨率是一个tick(例如10ms),比较方便地解决了大延时状态下的效率问题。代价是上下文切换。

使用特权

评论回复
9
ihafd|  楼主 | 2008-1-3 14:15 | 只看该作者

我要好好学习

我不太明白状态机的编程方法.
怎样才是状态机?

使用特权

评论回复
10
ayb_ice| | 2008-1-3 15:31 | 只看该作者

LZ的思路不错

使用特权

评论回复
11
shanweichao| | 2010-11-4 22:15 | 只看该作者
数据结构,,学学。

使用特权

评论回复
12
Etual| | 2010-11-5 08:39 | 只看该作者
实际使用的,也就这个样子。

使用特权

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

本版积分规则

290

主题

844

帖子

3

粉丝