打印

RTOS中数码管动态扫描程序怎么写

[复制链接]
3871|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wimhy|  楼主 | 2007-12-1 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RTOS使用KEIL自带的RTOS-TINY.

要求动态扫描8个数码管.扫描程序每执行一次扫描一个数码管.

系统时基:10ms,即:
;  Define Hardware-Timer tick time in 8051 machine cycles.
INT_CLOCK    EQU    10000    ; default is 10000 cycles

请问以上Task的数码管扫描程序该怎么写?

相关帖子

沙发
ayb_ice| | 2007-12-1 10:59 | 只看该作者

RTOS扫描数码管不太合适

首先扫描数码管时间较短1~2MS,而RTOS做到1~2MS的系统中断,效率很低,其次扫描任务必须及时,而TINY是轮转的,不能保证实时性。

tiny不管理中断,在中断中扫描即可。

使用特权

评论回复
板凳
wimhy|  楼主 | 2007-12-1 11:32 | 只看该作者

楼上的意思

楼上的意思是开定时器T1,定时器T1定时2ms中断一次,在定时器T1中断中扫描数码管?
刚看了KEIL自带的example中的BANKING例子.我想应该这样可以:

........_task_   .........
{
   ScanLed();        //
   os_switch_task ();// give other tasks CPU time*/                      
}

使用特权

评论回复
地板
hotpower| | 2007-12-1 12:19 | 只看该作者

OS的节拍不要低于10mS,所以动态扫描显示就自己玩吧~~~

使用特权

评论回复
5
hotpower| | 2007-12-1 22:44 | 只看该作者

isr_send_signal(2)激活Task2_ScanLed()很好呀~~~

使用特权

评论回复
6
wimhy|  楼主 | 2007-12-1 23:21 | 只看该作者

占了定时器啊.

将定时器T1与扫描程序关联,偶合多了不好啊
不用RTOS时将ScanLed()挂在while中就行了,.

使用特权

评论回复
7
wimhy|  楼主 | 2007-12-2 00:30 | 只看该作者

大家来说说哦

使用特权

评论回复
8
hotpower| | 2007-12-2 00:35 | 只看该作者

实际51用OS真是不太舒服~~~任务切换时间是个大问题~~~

使用特权

评论回复
9
athlon64fx| | 2007-12-2 10:27 | 只看该作者

不是所有的中断都必须受OS管理.

高频率的中断可以写个普通的ISR.
LED刷新最好放到节拍中断里.

void tick_isr(void)
{
    ISR_ENTER();
    led_handler();
    os_tick_handler();
    ISR_EXIT();
}

使用特权

评论回复
10
wimhy|  楼主 | 2007-12-2 10:29 | 只看该作者

以上写错了

始终觉得以下这用舒服,把定时器T1卷进.
该改成:

就是觉得以下这样用不舒服,别六,把定时器T1都搞进去了.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

使用特权

评论回复
11
wimhy|  楼主 | 2007-12-2 10:41 | 只看该作者

回athlon64fx

楼上几位大侠是对的.
不用RTOS时,想的是如何使用最少的资源,更大限度的发挥功能,因此都是在while中挂进ScanLed()处理函数.当然要兼顾其它处理函数的处理速度,防止影响到数码管闪烁.
现在稍微学习下TINY,感觉有点别六,主要是观念问题啊.....得适当的改变下自己观念.


使用特权

评论回复
12
wimhy|  楼主 | 2007-12-2 12:54 | 只看该作者

不的不再发一贴

对3楼的方法,把 CPU_IDLE_CODE  配置改成0,不要使能IDLE就对了.

哈哈,琢磨啊.

使用特权

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

本版积分规则

16

主题

96

帖子

0

粉丝