AVR混合式调度系统(源代码)
没想到我们肇庆学院在这里也有讨论区,真惊喜!我来上传一个我前年改编的混合式调度系统,说白了也就是分时切换任务的小系统。很好用的,我在很多产品上的程序都是用它。很稳定!
点击此处下载 ourdev_265722.rar(文件大小:21K) (原文件名:AVR混合式调度系统.rar) UP! 先顶一下~~~~师兄们,有空多来逛逛呀~~ 这是个用时钟做任务轮转的吧!
都几好啊! 如果用于需要时间比较长的任务应该不太好吧。
这个调度系统可以用于步进电机的控制么,比如说要持续1秒时间给步进电机驱动器脉冲,中间不能间断,但是还有其它任务需要每10MS运行一次。。。比如数码管扫描等等任务,如果可以使用,那该如何处理呢?谢谢。 楼主是不是发错了呀?我看了应该是一个合作式调度器,不是混合式的呀。《时间触发嵌入式系统设计模式》,这本书我正在看,我把我的看法大概说一下:
1) 由于一个稍长的任务得分级完成,以前写的驱动之类都得完全改写;从void SCH_Update(void) 这个刷新函数来看,如果任务执行时间超过刷新时间的话很肯可能在下次刷新时把等待执行的任务当成是已经执行完的任务而“忽略”掉了。所以调度器适合任务执行时间远小于调度刷新间隔的情况下。
2) 该调度器限制对中断的使用;因为如果有其他中断在执行的话调度器的时标就会因为其他中断的执行时间而打乱造成调度时间延长。虽然在中断次数不多的情况下这个延时可以忽略,但是多次调用后将会找到误差累计,如果其他中断函数修改调度器的话更是可能会出现无法预计的错误使系统变得非常不稳定。
使用这样的调度器需要精确的处理好所有函数的进出时间,同时尽可能的少用dalay()这样的函数来延迟函数调用时间,还要主要程序中出现的挂起问题等。个人认为使用的范围受到比较大的限制,实用性不是很突出,不过他的思想对我影响挺大的 回答一下“shabby”,给步进电机发脉冲,你还敢在main里面?真佩服,如果你要这样做的话,那真没有办法,我想也没有什么所谓的实时性的系统能满足你的要求,我觉得这种发脉冲的东西应该是用一个独立的定时器发,每两次中断发一个脉冲比较好,我们的有个项目要控制5个步进电机和一个伺服电机,发脉冲的事情全部是在中断里,没有人说会停下来发脉冲的。
其实那个时间任务轮询的调度方式是有一定的缺点,我觉得它只能用在一些实时要求不高的任务上,比如说按键,液晶刷新等,像数码管刷新,在定时中断里做比较好吧!但就别用delay()之类的函数了。
“mojinpan”说这个系统不稳定我也不觉得,在没有延时等待程序的情况下,如果任务处理要超过调度时间比如说1ms,哪这个程序我想也不会太简单,比如说FFT,FIR哪肯定会超过。 一般的任务,我想两三千条指令也应该可以搞定嘞吧! 不觉得写单片机程序最好不要等待,像有些通讯控制的东西,如果你发完数据后,就在等待对方回应的话,我想你什么事情都不用干了,大量的时间就是花在while(?)里面。所以最好还是自己想想办法,不要等待。 学习中~~~ 【6楼】 hubaihe 柏和
我是说在:如果其他中断函数修改调度器的话更是可能会出现无法预计的错误使系统变得非常不稳定。
这个调度器用的好的话其实挺稳定的,但是两方面的制约导致调度器实用价值不高:限制中断,任务时间限制。 楼上mojinpan 所说的:
---------------------------------------------------------------------------------------------------
这个调度器用的好的话其实挺稳定的,但是两方面的制约导致调度器实用价值不高:限制中断,任务时间限制。
---------------------------------------------------------------------------------------------------
对你所说的缺点其实可以更改的,只要你对时间调度器有深入的了解,不一定要只按原作者的方式只开一个中断.
任务时间的限制不知你要最少控制在多少???1MS的时标最快能有1MS的响应时间你还不够用吗??OS也差不多是这样子的. 【6楼】 hubaihe 柏和
呵呵,让你见笑啦。
那如果用这个调度器的话做步进电机的驱动,怎么做呢?另外再开一个中断么,那会不会影响调度器的任务执行?
像【9楼】 mojinpan 说的:
如果其他中断函数修改调度器的话更是可能会出现无法预计的错误使系统变得非常不稳定。
这个调度器用的好的话其实挺稳定的,但是两方面的制约导致调度器实用价值不高:限制中断,任务时间限制。
“限制中断”这样的话是不是不能另开一个中断,不适合做这方面的东西呢? 限制中断的意思就是说只能有定时器中断,而且这个中断是用来给调度器使用的,其他中断基本上是都不允许的 按【6楼】 hubaihe 柏和 说的:
“我觉得这种发脉冲的东西应该是用一个独立的定时器发,每两次中断发一个脉冲比较好,我们的有个项目要控制5个步进电机和一个伺服电机,发脉冲的事情全部是在中断里,没有人说会停下来发脉冲的。”
那这样就不能将些调度器用于步进电机的控制里了。 【10楼】 dejun
中断执行的时候导致时标漂移怎么办?必须非常小心处理这个,时标非常重要 支持师兄!学习学习 ”mojinpan“其它地方怎么会修改调度函数里面的变量呢?除非是故意的。
不知道你们看懂了程序没有!那个所谓的调度只是在每1ms中断的时候对相应的任务至一个运行标志,在死循环里的程序判断到相应的任务标志置上了就运行该任务,所以在中断里只是一丁点的程序,任务不是在中断里执行。
关于步进电机的问题,我就不知道你是怎么弄,说出来听听。驱动步进电机难道发一个脉冲,然后delay一下,又发另外一个啊?等到全部脉冲发完? 不会吧? 【16楼】 hubaihe 柏和
1)对于调度器的修改很正常的,有的人想暂时停下调度器做其他事情,一会回来在打开,或者有的人想在某种特定条件下强制删除调度器里的某些任务,这个不是很正常的想法嘛?
2)我不是说这个调度器不好,我只是提出里面可能会造成不稳定的因素,没有哪个系统是无懈可击的,要用就必须明白系统稳定运行的条件
3)你发的真的是一个合作式的调度器,不是一个混合式的调度器…… 虽然看晕了,但是绝对支持师兄!置COOL!!! 仁者见仁,智者见智!!
查询的高可靠性是不容置疑的,加中断就要自己去把握了,中断对时标的漂移不知那位兄弟的要求有多高??
你先做个实例仔细慢慢分析吧。做得最短的漂移也只有两次中断嵌套的时间?很长吗?? 肇庆学院绝对牛过什么傻什么西南什么XXX 各位大侠 恳求邦忙:
本人用AVR128芯片在编制320x240液晶程序时(1335芯片),在编制显示方面有下述问题未能解决:
(1)在编参数设置中,要求只用上,下键和修改键、确认键来决定那一行修改的参数设置的值(三位数字),和显示。
(2)把测量参数的显示的值通过通讯传到上位机和把上位机的参数设置通过通讯到到单片机中(不需要上位编程)的通讯程序。
(3)最好有3-4个页面的。
本人看过一些AVR的320x240液晶程序如本网站的模拟定位机程序,还有哓奇工作室演示程序,可惜没上述功能,加之本人菜鸟一个,
编不好上述程序部分,望编过上述类似程序的各位大侠,能否把这段程序拷给本人参考一下(最好有注释)
回报:提供市面上要花费2万多元查询机构庄稼控盘的大小的炒股用的法宝,能知道机构庄稼控盘的大小。可送些元器件四运放324,单向可控硅12A/800V,
双向可控硅40A/800V,西班牙进口电位器(中间空的,用小塑料棒插到中间空的地方来调节),全是进口名牌的。
本人懂强电和弱电,对电路理论较精可提供实际项目分析邦助。如要其条件也可提出发信到wuqing2005@yahoo.com.cn 热贴,UP一下 合作式,建议楼主改掉主题 以下蓝色文字由坛主:armok 于:2010-02-14,20:24:56 加入。<font color=black>请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:“肇庆学院电子信息与机电工程”技术讨论区
即将移去的分区:AVR (原ourAVR.com) 技术论坛
移动执行时间:自本贴发表0小时后
任何的疑问或咨询,请可随时联系站长。谢谢你的支持!</font> 最近也在纠结框架问题~~~顶一下 学习一下....
页:
[1]