搜索
bottom↓
楼主: smset

再出个调度器,极小资源单片机值得一用

  [复制链接]

出0入0汤圆

发表于 2014-8-9 15:25:55 | 显示全部楼层
潜水关注好久了,新手坐等教程

出0入4汤圆

发表于 2014-8-9 17:55:02 | 显示全部楼层
再出个调度器,极小资源单片机值得一用,学习!

出0入0汤圆

发表于 2014-8-12 21:04:31 | 显示全部楼层
楼主的程序我都看了从1楼看到1010楼,我发现这个程序不好嵌套啊:假如有一个Beep();,有两个任务都有可能嵌套它,那怎么办?如果TaskA中嵌套了TaskB和Beep,并且TaskB里也嵌套了Beep,那怎么办啊?

出0入0汤圆

发表于 2014-8-12 23:13:47 | 显示全部楼层
smset 发表于 2014-4-24 13:37
顶到1000楼,就写详细的中文教程。

楼主啊,1000楼到啦

出0入0汤圆

发表于 2014-8-14 10:48:00 | 显示全部楼层
这都满楼了

出0入0汤圆

发表于 2014-8-14 20:27:14 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2014-8-14 22:46:58 | 显示全部楼层
也来再加一楼,希望能够早日看到教程!

出0入0汤圆

发表于 2014-8-16 08:12:23 | 显示全部楼层
我也想要教程  真心求教  楼主 加油!!!

出0入0汤圆

发表于 2014-8-16 15:39:25 | 显示全部楼层
本帖最后由 wmm20031015 于 2014-8-16 15:55 编辑

移植了一个到新唐的NuTiny-SDK-MINI54FDE上



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-16 17:52:24 | 显示全部楼层
非常好, 学习一下

出0入0汤圆

发表于 2014-8-16 18:47:56 | 显示全部楼层
支持一下         

出0入0汤圆

发表于 2014-8-16 22:08:30 | 显示全部楼层
好贴,mark先

出0入0汤圆

发表于 2014-8-17 08:26:07 | 显示全部楼层
收藏看看

出0入0汤圆

发表于 2014-8-17 18:28:02 | 显示全部楼层
请教一下。
程序不能嵌套,如果你做运行了一TASK1,另一个task里调用的话就乱套了。
另外CallSub做什么用,调用两个TASK,因为task里面都有while(1);在一个里面出不来了。 运行不了两个。失去调用的意义,还不如直接写进去。
不知道对不对。

出0入0汤圆

发表于 2014-8-20 12:32:46 | 显示全部楼层
mute 发表于 2014-7-16 12:23
每个任务的开头都有 _SS,里面就是switch。
碰到了wait,就return了tick回去。
等tick时间完了后,main就 ...

这个要mark      

出0入0汤圆

发表于 2014-8-20 12:35:29 | 显示全部楼层
楼主正在编教程

出0入0汤圆

发表于 2014-8-20 12:57:42 | 显示全部楼层
mark           

出0入0汤圆

发表于 2014-8-20 12:58:06 | 显示全部楼层
可以参考原理                       

出0入0汤圆

发表于 2014-8-20 20:43:47 | 显示全部楼层

你怎么知道楼主在编教程

出0入0汤圆

发表于 2014-8-21 09:48:23 | 显示全部楼层
学习了,谢谢分享!

出0入36汤圆

发表于 2014-8-23 09:25:54 | 显示全部楼层
8错   够小

出0入0汤圆

发表于 2014-8-23 09:53:32 | 显示全部楼层
ycping 发表于 2014-8-17 18:28
请教一下。
程序不能嵌套,如果你做运行了一TASK1,另一个task里调用的话就乱套了。
另外CallSub做什么用, ...

你怎么知道不能? 想当然, 从头再细看一遍贴子。

出0入0汤圆

发表于 2014-8-23 10:46:56 | 显示全部楼层
eddia2012 发表于 2014-7-17 11:21
顶楼主到1000楼,加油!

你有 STM8 的版本 放出吗  这个值得期待

毕竟STM8S003 做到1.21的价格

出0入0汤圆

发表于 2014-8-23 22:11:58 | 显示全部楼层
Kwangsi 发表于 2014-8-23 10:46
你有 STM8 的版本 放出吗  这个值得期待

毕竟STM8S003 做到1.21的价格

这里来了,STM8S103的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-23 22:33:51 | 显示全部楼层
本帖最后由 Kwangsi 于 2014-8-23 22:41 编辑
jesen_2010 发表于 2014-8-23 22:11
这里来了,STM8S103的。


谢谢  我今天在用 极小资源调度器 做松翰的一个案子的时候  
我开了 两个 timer中断  

T1每 32us产生一次中断  反转一个 io口的电平  
TC0 每 4ms产生一次 中断  UpdateTimers(); 放在 TC0中

MAXTASKS ==3
用示波器 发现 T1 中反转的 io口  周期性出现 宽于 32us的 波形  可见UpdateTimers();只放了三个数组 在32us里还是 跑不完 造成T1中断 执行延后

用 数组方式还是太低效的

随着 MAXTASKS的增多  必然执行 越来越耗时

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出10入0汤圆

发表于 2014-8-23 23:38:06 来自手机 | 显示全部楼层
这个要学习学习!!

出0入0汤圆

发表于 2014-8-24 09:35:32 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2014-8-24 10:28:01 | 显示全部楼层
求详细教程

出0入0汤圆

发表于 2014-8-24 11:14:58 | 显示全部楼层
楼主去哪儿了

出0入0汤圆

发表于 2014-8-24 11:24:05 | 显示全部楼层
好难 学习学习 先标记下 等教程

出0入0汤圆

发表于 2014-8-24 11:52:18 | 显示全部楼层
这更多的是给我们提供一种思维,楼上那些想着拿来就用的,只能说非得服务一条龙么

出0入0汤圆

发表于 2014-8-24 13:16:53 | 显示全部楼层
等楼主教程,耐心等待中。。。。。。。

出0入0汤圆

发表于 2014-8-25 22:32:28 | 显示全部楼层
寻找楼主,你的教程好了吗

出0入0汤圆

发表于 2014-8-25 23:06:31 | 显示全部楼层
收藏先,谢谢分享

出0入0汤圆

发表于 2014-8-25 23:29:49 | 显示全部楼层
学习,谢谢!!!

出0入0汤圆

发表于 2014-8-26 21:34:10 | 显示全部楼层
Kwangsi 发表于 2014-8-23 22:33
谢谢  我今天在用 极小资源调度器 做松翰的一个案子的时候  
我开了 两个 timer中断  

你的松翰MCU 1us能跑几条指令 ?

出0入0汤圆

发表于 2014-8-26 22:20:08 | 显示全部楼层
顶一下楼主

出10入0汤圆

发表于 2014-8-30 22:49:54 | 显示全部楼层
不能用switch感觉不太习惯啊

出0入0汤圆

发表于 2014-8-31 08:57:27 | 显示全部楼层
好东西必须要MARK

出0入0汤圆

发表于 2014-8-31 09:42:50 | 显示全部楼层
先收藏,总有用得着的时候哦!

出0入0汤圆

发表于 2014-8-31 13:09:16 | 显示全部楼层
smset 发表于 2012-11-27 15:35
写程序本来就是精细活,写成死循环本来就是程序员的问题啊,谁让你去写个死循环呢?

哪怕是抢 ...

确实有这样的思路,不过是重启任务,建立个最高优先级任务监视每一个任务,超时则重启

出0入0汤圆

发表于 2014-9-4 16:53:39 | 显示全部楼层
顶,楼主加油!

出0入0汤圆

发表于 2014-9-6 23:29:59 | 显示全部楼层
  1. #define _SS static unsigned char _lc=0; switch(_lc){default:
  2. #define _EE ;}; _lc=0; return 255;
  3. unsigned char  task2(){
  4. _SS
  5.   while(1){
  6.    WaitX(100);
  7.    LED2=!LED2;   
  8.   }
  9. _EE
  10. }
复制代码

替换一下

  1. unsigned char  task2()
  2. {
  3.         static unsigned char _lc=0;
  4.         switch(_lc)
  5.         {
  6.                 default:
  7.                   while(1)
  8.                 {
  9.                            WaitX(100);
  10.                            LED2=!LED2;   
  11.                   }
  12.         ;};
  13. _lc=0;
  14. return 255;
  15. }
复制代码

这个有什么意义呢,特别是这个switch和这个_lc,干什么用的呢?望各位老大指点一下

出0入0汤圆

发表于 2014-9-7 10:15:40 | 显示全部楼层
不错!!!支持一下!

出0入0汤圆

发表于 2014-9-7 15:47:56 | 显示全部楼层

  1. unsigned char  task2()
  2. {
  3.         static unsigned char _lc=0;
  4.         switch(_lc)
  5.         {
  6.                 default:
  7.                   while(1)
  8.                 {
  9.                            //WaitX(100);
  10.                            do {_lc=(__LINE__+((__LINE__%256)==0))%256; return 100;} while(0); case (__LINE__+((__LINE__%256)==0))%256:
  11.                            LED2=!LED2;   
  12.                   }
  13.          ;};
  14. _lc=0;
  15. return 255;
  16. }
复制代码

出0入0汤圆

发表于 2014-9-7 15:55:42 | 显示全部楼层
本帖最后由 hehao9051 于 2014-9-7 15:59 编辑

RunTask(Task2,2)进行宏替换
#define RunTask(TaskName,TaskID) do { if (timers[TaskID]==0) timers[TaskID]=TaskName(); }  while(0);


  1. do
  2. {
  3.         if (timers[2]==0)
  4.         {
  5.                 timer[2] = Task2();                //时间减为0时执行一次,同时给Timer[2]重新赋值
  6.         }
  7. }while(0);
复制代码

  1. unsigned char  task2()
  2. {
  3.         static unsigned char _lc=0;
  4.         switch(_lc)
  5.         {
  6.                 default:
  7.                   while(1)
  8.                 {
  9.                            //WaitX(100);
  10.                            do {_lc=(__LINE__+((__LINE__%256)==0))%256; return 100;} while(0); case (__LINE__+((__LINE__%256)==0))%256:
  11.                            LED2=!LED2;   
  12.                   }
  13.          ;};
  14. _lc=0;
  15. return 255;
  16. }
复制代码

出0入0汤圆

发表于 2014-9-7 16:19:43 | 显示全部楼层
本帖最后由 hehao9051 于 2014-9-7 16:25 编辑

终于有点小懂了,原来是switch{}里面的如果有CASE且满足条件,就执行case下的代码,而且无论case和default处于什么地方,都会执行。

出0入0汤圆

发表于 2014-9-7 16:22:31 | 显示全部楼层
整体还是每个任务函数定时调用,只是如果任务多了,可能中断中执行的代码太多,效率可能变低

出0入0汤圆

发表于 2014-9-7 16:31:04 | 显示全部楼层
我只想问一个问题,如果完成任务1需要执行30ms,但是任务2不允许等待这么长时间,楼主怎么办?

出0入0汤圆

发表于 2014-9-7 18:52:12 | 显示全部楼层
标记学习一下

出0入0汤圆

发表于 2014-9-7 20:03:22 | 显示全部楼层
学习了!!!!!!!

出0入0汤圆

发表于 2014-9-16 15:11:25 | 显示全部楼层
楼主该兑现承诺 ——> 写个详细教程了!
楼主该兑现承诺 ——> 写个详细教程了! 哈哈..求教程..

出0入0汤圆

发表于 2014-9-16 15:27:26 | 显示全部楼层
多谢lz分享!

出0入0汤圆

发表于 2014-9-16 18:23:59 | 显示全部楼层
很好很好很好很好很好很好

出0入0汤圆

发表于 2014-9-17 03:09:24 | 显示全部楼层
我擦,厉害,lz为何这么叼.

出0入0汤圆

发表于 2014-9-17 08:28:02 | 显示全部楼层
十分感谢楼主!

出0入0汤圆

发表于 2014-9-17 09:02:58 | 显示全部楼层
mark







出0入0汤圆

发表于 2014-9-17 09:20:07 | 显示全部楼层
收藏,谢谢分享

出0入0汤圆

发表于 2014-9-17 10:17:07 | 显示全部楼层
smset 发表于 2012-11-27 15:35
写程序本来就是精细活,写成死循环本来就是程序员的问题啊,谁让你去写个死循环呢?

哪怕是抢 ...

说的是,受教了。再次谢谢。

出0入0汤圆

发表于 2014-9-17 21:27:25 | 显示全部楼层
本帖最后由 sweet_136 于 2014-9-17 21:31 编辑
smset 发表于 2012-12-18 18:29
优化无止境!呵呵,330楼看似不能再优化了,但我再尝试做一次优化:

敬请评测该版本,看是否还能优化:在k ...


楼主.我在PIC CCS里面用这个调度器..发现如下错误



这个编译qi的意思的是,不能够这么写吧..




这个编译器不能这样写额..

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-24 17:40:13 | 显示全部楼层
建议楼主加个开始延时时间,如果多个task都是一样的延时时间的话,就会冲突。
在函数开始时可以自定义一个延时时间,就不会冲突。

出0入0汤圆

发表于 2014-9-24 17:45:05 | 显示全部楼层
就是错开开始运行时间,那么大家都可以获得比较准的运行周期。

出0入0汤圆

发表于 2014-9-28 13:20:09 | 显示全部楼层
ycping 发表于 2014-9-24 17:45
就是错开开始运行时间,那么大家都可以获得比较准的运行周期。

怎么错都是错不开的! 任何系统也不能保证这一点。

出0入0汤圆

发表于 2014-9-28 15:03:05 | 显示全部楼层
我程序基本就是这样的架构写的,没做成模块,但还是有很多局限性;正在学习QM架构,以后准备上他了

出0入0汤圆

发表于 2014-9-28 20:18:11 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2014-9-28 21:33:29 | 显示全部楼层
这种东西应该再多一些。

出0入0汤圆

发表于 2014-9-28 21:38:46 | 显示全部楼层
前排留名啊、、、、、、、我来的太晚了啊

出0入0汤圆

发表于 2014-9-28 23:18:42 | 显示全部楼层
学习一下,很不错

出0入0汤圆

发表于 2014-9-28 23:38:59 | 显示全部楼层
在一起启动几个任务后,比如其中一个任务是250MS反转一个LED。
你就会发现LED并无固定的时间间隔,时间偏散很大,一会两次闪灯很近,一会又很久闪一次。
除非你把这任务放中断。
所有的系统都是这样吗?

出0入0汤圆

发表于 2014-10-15 12:22:20 | 显示全部楼层
还没细看 mark一下

出0入0汤圆

发表于 2014-10-21 10:04:42 | 显示全部楼层
关注中....................

出0入0汤圆

发表于 2014-10-21 10:36:10 | 显示全部楼层
好东西,一定要顶,mark

出0入0汤圆

发表于 2014-10-31 15:35:28 | 显示全部楼层
感谢楼主 极小资源调度器
备用啊

出0入0汤圆

发表于 2014-11-4 17:55:07 | 显示全部楼层
今天又过来读一遍

出0入0汤圆

发表于 2014-11-4 23:47:26 | 显示全部楼层
ycping 发表于 2014-9-28 23:38
在一起启动几个任务后,比如其中一个任务是250MS反转一个LED。
你就会发现LED并无固定的时间间隔,时间偏散 ...

按我的理解,精确计时的任务要放在任务循环的首位,同时在一次任务循环里所有任务的总执行时间不能超出系统时间片长度。满足这两点的话应该不会出现你说的这种情况的。

出0入0汤圆

发表于 2014-11-5 07:03:10 | 显示全部楼层
收藏先,谢谢分享

出0入0汤圆

发表于 2014-11-6 12:22:27 | 显示全部楼层
和djyos差不多

出0入0汤圆

发表于 2014-11-6 13:35:56 | 显示全部楼层
调度器 时间调度 系统

出0入0汤圆

发表于 2014-11-6 13:55:50 | 显示全部楼层
支持,这个确实很好

出0入0汤圆

发表于 2014-11-15 00:12:46 | 显示全部楼层
这个要顶八周调度器

出0入0汤圆

发表于 2014-11-26 23:13:42 | 显示全部楼层
不懂,帮定顶顶顶顶顶顶顶顶

出0入0汤圆

发表于 2014-11-27 00:42:23 | 显示全部楼层
好贴,学习了

出0入0汤圆

发表于 2014-11-27 08:19:21 | 显示全部楼层
这个很牛叉,收藏慢慢研究。。。

出0入0汤圆

发表于 2014-11-27 08:27:29 | 显示全部楼层
观摩一下

出0入0汤圆

发表于 2014-11-27 08:33:25 | 显示全部楼层
这个调度器的切换原理跟UCOS是一样的吗?

出0入0汤圆

发表于 2014-11-27 08:46:28 | 显示全部楼层
MARK!感谢分享

出0入0汤圆

发表于 2014-11-27 08:49:36 | 显示全部楼层
先收藏啊!

出0入0汤圆

发表于 2014-11-27 09:11:47 | 显示全部楼层
多谢分享  好资料

出0入0汤圆

发表于 2014-11-27 16:52:57 | 显示全部楼层
这个不错,很好,值得推广!

出0入0汤圆

发表于 2014-11-27 19:14:23 | 显示全部楼层
正是需要这样的东西啊啊

出0入0汤圆

发表于 2014-11-27 21:28:57 | 显示全部楼层
取PT之精华,又有自己的创新,顶楼主!

出0入0汤圆

发表于 2014-11-27 23:06:20 | 显示全部楼层
好热闹啊

出0入0汤圆

发表于 2014-12-28 14:22:09 | 显示全部楼层
厉害啊。

出0入0汤圆

发表于 2014-12-29 09:50:01 | 显示全部楼层
坐等楼主教程

出0入0汤圆

发表于 2014-12-29 10:31:35 | 显示全部楼层
占用空间蛮少的

出0入0汤圆

发表于 2014-12-29 10:54:16 | 显示全部楼层
收藏留用

出0入0汤圆

发表于 2015-2-4 16:10:01 | 显示全部楼层
建议出一个完整的文档和程序。

出0入0汤圆

发表于 2015-2-4 16:14:40 | 显示全部楼层
lfgc 发表于 2015-2-4 16:10
建议出一个完整的文档和程序。

把贴子从头到尾看三编,自然有收获

出0入0汤圆

发表于 2015-2-15 18:50:39 | 显示全部楼层
楼主必须要出教程啊!

出0入0汤圆

发表于 2015-2-15 19:26:57 | 显示全部楼层
mikeliujia 发表于 2015-2-15 18:50
楼主必须要出教程啊!

楼主已经失联
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 06:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表