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

[复制链接]
4857|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,所以动态扫描显示就自己玩吧~~~

hotpower 发表于 2007-12-1 22:44 | 显示全部楼层

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

 楼主| wimhy 发表于 2007-12-1 23:21 | 显示全部楼层

占了定时器啊.

将定时器T1与扫描程序关联,偶合多了不好啊
不用RTOS时将ScanLed()挂在while中就行了,.
 楼主| wimhy 发表于 2007-12-2 00:30 | 显示全部楼层

大家来说说哦

hotpower 发表于 2007-12-2 00:35 | 显示全部楼层

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

athlon64fx 发表于 2007-12-2 10:27 | 显示全部楼层

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

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

void tick_isr(void)
{
    ISR_ENTER();
    led_handler();
    os_tick_handler();
    ISR_EXIT();
}
 楼主| wimhy 发表于 2007-12-2 10:29 | 显示全部楼层

以上写错了

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

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 楼主| wimhy 发表于 2007-12-2 10:41 | 显示全部楼层

回athlon64fx

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


 楼主| wimhy 发表于 2007-12-2 12:54 | 显示全部楼层

不的不再发一贴

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

哈哈,琢磨啊.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

96

帖子

0

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