有点小闷,出个题,有兴趣的可以看看(添加了实际意义)

[复制链接]
xmar 发表于 2012-9-18 17:47 | 显示全部楼层
20# zhm8508 呵呵,错在哪里?
zhm8508 发表于 2012-9-18 18:03 | 显示全部楼层
21# xmar 闪烁间隔10ms,误差2ms,所以我说LZ坑爹。
lelee007 发表于 2012-9-18 19:53 | 显示全部楼层
这也谈得上调度?10ms拍的时间轮,准确无误轻松搞定
forrest11 发表于 2012-9-19 11:31 | 显示全部楼层
本帖最后由 forrest11 于 2012-9-20 20:30 编辑

1. 如果要求是闪烁必须处理,可以延后,类似消息排队处理时,还是比较方便的,方法如下:
用10ms的时间片,每过10ms,各灯计数变量的计时加1,并判断各计数变量值是否等于或超过对应阈值。如果超过,则设置灯的闪烁标志位,然后逐位检测各标志位。标志位如果为1,则闪烁对应灯一下,同时将该灯的标志位置零,计数变量置零。问题即可解决。

2.  和1相比,多了一个按键,由于要求按键后50ms内闪烁,也是比较好处理的。只要将时间片设为1ms即可(如果粗糙点,10ms的时间片应该也是可以的),未按键时的处理和1相同,如果某灯按键按下,则读此按键对应计数变量是否超过50。如果超过,则直接设置灯的闪烁标志位;如果没有超过,则设置此按键对应灯的计数阈值为50。这样又回到了和1相同的处理方式。唯一区别的是:该灯闪烁后,要恢复其阈值为默认阈值。问题也可解决。
lyjian 发表于 2012-9-19 12:42 | 显示全部楼层
吃饱了没事干去钓鱼岛坐坐
 楼主| 渤海三叠浪 发表于 2012-9-19 18:48 | 显示全部楼层
24# forrest11
你没看懂我说的,我也没看懂你说的。

看样子表达能力很重要啊。也可能你比较专业哈
forrest11 发表于 2012-9-20 08:56 | 显示全部楼层
本帖最后由 forrest11 于 2012-9-20 22:33 编辑
24# forrest11
你没看懂我说的,我也没看懂你说的。

看样子表达能力很重要啊。也可能你比较专业哈
渤海三叠浪 发表于 2012-9-19 18:48

我觉得我看懂了你1的要求,对于2的要求我理解错了。现在上面进行了调整。
你没有看懂我写的,那就没有办法了。你多看几遍吧。
不管怎么样,设定基本时间单位,在单片机中一般时Timer中断方式处理。然后设立各时间计数器。对应计数器做相应处理即可。这不只是我说的,楼上好多楼都建议你用这样的方法。
forrest11 发表于 2012-9-20 09:26 | 显示全部楼层
本帖最后由 forrest11 于 2012-9-20 20:35 编辑

举例说明一下,我的思路是:
第一题:
main()
{...
if(Flag_10ms==1)
{
Timer_150ms+=1;
Timer_250ms+=1;.....
Flag_10ms=0;

if (Timer_150ms>=15) Flag_150ms=1;
if (Timer_250ms>=25) Flag_250ms=1;......

if (Flag_150ms) {Pin_150ms=~Pin_150ms; Flag_150ms=0;Timer_150ms=0}
else if (Flag_250ms) {Pin_250ms=~Pin_250ms; Flag_250ms=0;Timer_250ms=0}
else if......
}
......
}
中断函数:
Timer_10ms() vector interrupt 1
{
/*单片机计数到了10ms;*/
Flag_10ms=1;
}
第一题我是分3段,实际上可以不要Flag_150ms这样的变量的,这样编程变为2段。只不过从编程思路而言,我偏向3段式。

第二题实际和一类似,当然如果时间片如果从10ms变为1ms的话,编程思路要调整的。
zhm8508 发表于 2012-9-20 11:37 | 显示全部楼层
LZ的举例让人更糊涂了,感觉LZ有一定工作经验,但是应该接触编程不久或者对通讯理解不深,直接说出这问题的技术难点吧。
cqwangsf 发表于 2012-9-22 20:18 | 显示全部楼层
1# 渤海三叠浪


这道题的实际意义是这样的:就拿RS485通信来说,假设通信速度500K,一个主,10个从。
灯状态改变一次表示主发送一帧数据。


其实基本上所有的485总线都不是这样解决的。485总线都是基本上都是由主机来控制哪个发,哪个收的。从机是不允许主动发送数据的。所以这个真没有意义。
misra 发表于 2012-9-22 20:40 | 显示全部楼层
本帖最后由 misra 于 2012-9-22 20:45 编辑

30# cqwangsf
没看到说是500KBPS么?  他的意思是为了让你明白点,担心你别的你看不懂。
所以说是“假设是。。”  其实任何通信  都差不多的。掌握一个 其他掌握很快。

所以就用普通的485举例。况且楼主没说 从主动发送

事实上主从方式仍是最完美的方式。
cjseng 发表于 2012-9-23 21:16 | 显示全部楼层
我觉得不可能实现,原因是:每到最小公倍数时间,所有的灯一起闪,而两个灯的间隔时间要求大于10毫秒,而对于每个灯的误差又要求小于2毫秒,10毫秒和2毫秒这是一对矛盾,所以无解。
forrest11 发表于 2012-10-10 18:41 | 显示全部楼层
我们在这里瞎起劲,楼主却再也不管了。
 楼主| 渤海三叠浪 发表于 2012-10-10 19:55 | 显示全部楼层
本帖最后由 渤海三叠浪 于 2012-10-10 19:56 编辑

哦  我这个题说的是CANOPEN的调度eventitime和inhibittime
第二个题是同步  比CANOPEN还厉害一点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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