打印

我一菜鸟级自已写的时间片轮询程序

[复制链接]
6936|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fsngood|  楼主 | 2014-9-6 09:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在网上查找资料学习了时间片轮询的好处是可以并行执行任务,实时性也不错,但我花了一个月时间看出明白,现在我拿出我自己写的一个简单的时钟程序,仅仅是显示:小时、分钟、秒针,共6位数字,

我用的是时间片轮询的方法来实现时间的显示的,所以把显示弄成了6个任务,我的程序简单易懂,附件内附有:程序源码,和protues电路文件
欢迎大家批评指证;

但在编完这个程序后,我有一个小小的提问,中断服务函数中的那个void renwumark()  函数是如何实现精确的打标服务的。 时钟仿真SCH.zip (32.09 KB)

相关帖子

沙发
keer_zu| | 2014-9-6 11:18 | 只看该作者
本帖最后由 keer_zu 于 2014-9-6 11:20 编辑

很粗略看了一下程序,你这个称不上多任务,也称不上时间片轮询,也就是一个大循环。真正的多任务应该是这样的:
1. 时间片切换由中断触发(时钟中断)。
2.当时间片结束时,保存当前执行任务的运行上下文(压入堆栈),然后将下一个要执行任务的环境出栈。继而切换到下一个任务。



因为你的程序不是真正的多任务,不是并发的,所以所有“任务”在时间上相互影响,无法保证时间上的准确性(是准确性而不是精确性,准确都做不到哦)

使用特权

评论回复
板凳
fsngood|  楼主 | 2014-9-6 12:23 | 只看该作者
所以我的疑问就在这里,实时性…………。

使用特权

评论回复
地板
sxhhhjicbb| | 2014-9-6 13:51 | 只看该作者
大循环都算不上。就是一个中断程序

使用特权

评论回复
5
fsngood|  楼主 | 2014-9-6 14:06 | 只看该作者
能否帮我改动一下,变为实时的多任务的,

使用特权

评论回复
6
keer_zu| | 2014-9-6 16:48 | 只看该作者
fsngood 发表于 2014-9-6 14:06
能否帮我改动一下,变为实时的多任务的,

参考一下ucos的这部分实现吧。

使用特权

评论回复
7
逍遥派掌门| | 2014-9-6 18:38 | 只看该作者
每个子程序都有一个delay(x),感觉不好,霸道的延时严重浪费资源;
中断里面就不要做那么多的运算了,严重影响实时性,
象:
TH0=(65536-1000)/256;
                        TL0=(65536-1000)%256;

完全可以用 TH0 = xxx; TL0 = YYY; 代替了。

另外,在硬件上,用P2代替P3,程序还可以优化。软、硬结合才能高效。

使用特权

评论回复
8
叶伤| | 2014-9-6 18:46 | 只看该作者
逍遥派掌门 发表于 2014-9-6 18:38
每个子程序都有一个delay(x),感觉不好,霸道的延时严重浪费资源;
中断里面就不要做那么多的运算了,严重 ...

TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
这是给人看的,编译器在编译时会把常数换算为定值。

这程序没看,最近一直不敢看他人程序,所以,默默走过,嘿嘿。

使用特权

评论回复
9
mgf006| | 2014-9-6 18:56 | 只看该作者
同意楼上的 常数运算表达式编译器会处理的说法,没必要人为地的计算的。

使用特权

评论回复
10
fsngood|  楼主 | 2014-9-6 22:27 | 只看该作者
那这里有没有谁自己写过一个简单的实时操作的系统,要求简单,不要像UCOS一样复杂,

使用特权

评论回复
11
逍遥派掌门| | 2014-9-9 15:21 | 只看该作者
叶伤 发表于 2014-9-6 18:46
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
这是给人看的,编译器在编译时会把常数换算为定值。

从实用性来搞,应该弄成:
#define xx  (65536-1000)/256

TH0 =  xx ;

好处,你懂的。

使用特权

评论回复
12
逍遥派掌门| | 2014-9-9 15:23 | 只看该作者
fsngood 发表于 2014-9-6 22:27
那这里有没有谁自己写过一个简单的实时操作的系统,要求简单,不要像UCOS一样复杂, ...

简单的51调度系统,大概符合你的胃口,查以前的帖子。

使用特权

评论回复
13
keer_zu| | 2014-9-9 15:33 | 只看该作者
fsngood 发表于 2014-9-6 22:27
那这里有没有谁自己写过一个简单的实时操作的系统,要求简单,不要像UCOS一样复杂, ...

只借鉴入栈出栈部分即可。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
fsngood + 1 很给力!
14
fsngood|  楼主 | 2014-9-9 22:41 | 只看该作者
我找到了一个入栈出栈的例子,实时性不太清楚,还要考虑重入问题,感觉也是有些难懂,我想在我的程序的基础上面,把时间片切好,这一点希望有谁能够提供点指导

使用特权

评论回复
15
xlsbz| | 2014-10-20 21:19 | 只看该作者
都是从菜鸟过来的。

使用特权

评论回复
16
xlsbz| | 2014-10-21 08:59 | 只看该作者
格式非常整齐。做事认真。有高人的潜质啊。
但是可以考虑多看看别人的格式,

使用特权

评论回复
17
fsngood|  楼主 | 2014-10-22 18:46 | 只看该作者
谢谢指导

使用特权

评论回复
18
keer_zu| | 2014-10-22 19:27 | 只看该作者
fsngood 发表于 2014-10-22 18:46
谢谢指导

做得怎么样了?你的OS

使用特权

评论回复
19
jueji| | 2019-10-16 11:25 | 只看该作者
学习学习,谢谢分享

使用特权

评论回复
20
yzjyh1| | 2019-11-19 09:55 | 只看该作者
yyy71cj 发表于 2014-9-13 11:56
这个程序,逻辑结构变复杂了,倒确实是对多任务的一个有条理的组织,不过只有看头,没有用头。也就是说不但 ...

有准备出新的书籍吗?讲讲单片机操作系统的,买过你以前的书

使用特权

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

本版积分规则

2

主题

7

帖子

0

粉丝