amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 2989|回复: 52

自己写的一个合作调度器内核

  [复制链接]
发表于 2015-12-23 09:27:33 | 显示全部楼层 |阅读模式
本帖最后由 轻若尘 于 2015-12-23 10:14 编辑

        前段时间发表过一篇帖子《自己写的一个利用函数指针实现任务调度的内核》http://www.amobbs.com/thread-5636298-1-1.html 。坛友提出了很多问题,我自己也一直在改进,并且用在公司的新开发项目中。从我这段时间的使用来看,使用这个调度器内核比之前用前后台系统开发确实方便了不少,首先比前后台系统更容易实现模块化编程,可以充分利用CPU很大程度上提高了软件的效率,最重要还是节约了很多开发时间。
        通过这段时间的使用,我对之前的内核做了一些改进:
        1.增加了优先级,每个任务可以设置不同优先级,也可以不同任务设置相同优先级。
        2.每个任务都可以单独设置超时时间,和超时处理函数,这个功能在通信的时候比较有用。
        3.之前坛友提出不能在一个任务有多个挂起任务操作,通过改进现在这个问题已经解决。以下是我测试的一部分代码:
        不知道为什么用火狐浏览器上传不了附件,知道的告诉我下。

本帖子中包含更多资源

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

x
发表于 2015-12-23 09:36:27 | 显示全部楼层
先做个记号     
发表于 2015-12-23 09:40:45 | 显示全部楼层
支持,但是没见到附件
 楼主| 发表于 2015-12-23 09:45:10 | 显示全部楼层
lw2012 发表于 2015-12-23 09:40
支持,但是没见到附件

我的火狐浏览器传不了附件,稍后再试试
发表于 2015-12-23 09:52:37 | 显示全部楼层
轻若尘 发表于 2015-12-23 09:45
我的火狐浏览器传不了附件,稍后再试试

是的,火狐对论坛的代码做了校验,对老的代码版本不支持,我以前提过建议,莫大说等动力升级后再说
发表于 2015-12-23 09:55:40 | 显示全部楼层
上传时取消右边的“纯文本”
发表于 2015-12-23 10:00:17 | 显示全部楼层
楼主很执着。
发表于 2015-12-23 10:08:06 | 显示全部楼层
一看到while(1)之外的TASK_START和TASK_END就猜想是用了pt。

其实freertos不但是一个抢占式rtos,而且提供了协程的调度方法,就是利用了pt。

在ram很有限的mcu用这个协程调度,大大节省了ram。
发表于 2015-12-23 10:11:17 | 显示全部楼层
本帖最后由 zsmbj 于 2015-12-23 10:15 编辑


看看freertos的协程写法:

main里建立一个协程任务,优先级为0
#include "task.h"
#include "croutine.h"

#define PRIORITY_0 0

void main( void )
{
   // In this case the index is not used and is passed
   // in as 0.
   xCoRoutineCreate( vFlashCoRoutine, PRIORITY_0, 0 );

   // NOTE:  Tasks can also be created here!

   // Start the RTOS scheduler.
   vTaskStartScheduler();
}

任务的写法:
void vFlashCoRoutine( CoRoutineHandle_t xHandle,
                 UBaseType_t uxIndex )
{
   // Co-routines must start with a call to crSTART().
   crSTART( xHandle );

   for( ;; )
   {
      // Delay for a fixed period.
      crDELAY( xHandle, 10 );

      // Flash an LED.
      vParTestToggleLED( 0 );
   }

   // Co-routines must end with a call to crEND().
   crEND();
}
 楼主| 发表于 2015-12-23 10:12:24 | 显示全部楼层
zsmbj 发表于 2015-12-23 10:08
一看到while(1)之外的TASK_START和TASK_END就猜想是用了pt。

其实freertos不但是一个抢占式rtos,而且提供 ...

恩是参考了PT的方法
 楼主| 发表于 2015-12-23 10:15:27 | 显示全部楼层
附件已上传,火狐上传不了,还是用IE上传
 楼主| 发表于 2015-12-23 10:17:31 | 显示全部楼层

既然写了这东西,就尽量写的完善些,不能让自己之前白忙活
发表于 2015-12-23 10:47:24 | 显示全部楼层
其实楼主可以参考QP架构,合作式事件触发,能够实现简单的数据结构和方法继承,用起来应该比 eTOS更灵活
 楼主| 发表于 2015-12-23 10:52:56 | 显示全部楼层
changer15309 发表于 2015-12-23 10:47
其实楼主可以参考QP架构,合作式事件触发,能够实现简单的数据结构和方法继承,用起来应该比 eTOS更灵活 ...

对QP架构不了解,能否提供些资料看下
发表于 2015-12-23 10:54:28 | 显示全部楼层
唉  看了很多  这种调度器  就是 用不来  理解不了     现在还是用的 while  代码写的一点逼格也没有  惭愧啊
发表于 2015-12-23 10:57:53 | 显示全部楼层
轻若尘 发表于 2015-12-23 10:52
对QP架构不了解,能否提供些资料看下

参考链接  http://www.state-machine.com/index.html
发表于 2015-12-23 10:59:14 | 显示全部楼层
轻若尘 发表于 2015-12-23 10:52
对QP架构不了解,能否提供些资料看下

对应的电子书下载 http://www.state-machine.com/psicc2/
 楼主| 发表于 2015-12-23 10:59:28 | 显示全部楼层
ayumi8 发表于 2015-12-23 10:54
唉  看了很多  这种调度器  就是 用不来  理解不了     现在还是用的 while  代码写的一点逼格也没有  惭愧 ...

我这个还算比较简单,不涉及底层堆栈,都是用C写的,耐心点肯定能理解
 楼主| 发表于 2015-12-23 11:21:57 | 显示全部楼层
changer15309 发表于 2015-12-23 10:59
对应的电子书下载 http://www.state-machine.com/psicc2/

粗略看了下,感觉挺不错,有时间好好研究下
发表于 2015-12-23 18:03:06 | 显示全部楼层
不错,明天试试点个灯
 楼主| 发表于 2015-12-23 20:39:02 | 显示全部楼层
wmm20031015 发表于 2015-12-23 18:03
不错,明天试试点个灯

直接用我传的例程改下端口就可以
发表于 2015-12-23 21:05:50 | 显示全部楼层
先mark         
发表于 2015-12-23 21:08:52 来自手机 | 显示全部楼层
先mark跑起来需要多少ram?
 楼主| 发表于 2015-12-23 21:35:27 | 显示全部楼层
ztg328 发表于 2015-12-23 21:08
先mark跑起来需要多少ram?

具体看有几个任务,和裸奔差不多
发表于 2015-12-24 08:50:04 来自手机 | 显示全部楼层
关注关注…
发表于 2015-12-24 09:06:27 | 显示全部楼层
学习学习。感谢分享
发表于 2015-12-24 09:26:49 | 显示全部楼层
eTOS,学习一下,感谢楼主分享!!
 楼主| 发表于 2015-12-24 12:06:28 | 显示全部楼层
sunnyczp 发表于 2015-12-24 09:26
eTOS,学习一下,感谢楼主分享!!

多谢支持
发表于 2015-12-24 13:47:40 | 显示全部楼层
mark,学习啊。
发表于 2016-1-16 10:39:46 | 显示全部楼层
状态机编程的兼容性是关键
发表于 2016-1-16 10:53:51 | 显示全部楼层
mark!谢谢楼主分享
发表于 2016-1-16 22:48:06 | 显示全部楼层
mark一下
 楼主| 发表于 2016-1-26 08:59:09 | 显示全部楼层
minier 发表于 2016-1-16 10:39
状态机编程的兼容性是关键

有哪些兼容性需要考虑,能说详细点吗?
发表于 2016-1-26 09:05:25 | 显示全部楼层
mark一下
发表于 2016-1-26 09:31:29 | 显示全部楼层
收藏了,谢谢楼主
发表于 2016-1-26 10:58:33 | 显示全部楼层
看了一下楼主的代码, 和 contiki 差别不大, 而且 contiki 有更多的资源, 建议楼主读一读 contiki
 楼主| 发表于 2016-1-26 12:44:56 | 显示全部楼层
onepower 发表于 2016-1-26 10:58
看了一下楼主的代码, 和 contiki 差别不大, 而且 contiki 有更多的资源, 建议楼主读一读 contiki ...

好的,有时间看看
 楼主| 发表于 2016-2-1 17:23:50 | 显示全部楼层
最近根据项目中的实际使用,对信号量做了部分修改,并加入了获取任务指针功能等。。。。

本帖子中包含更多资源

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

x
发表于 2016-2-1 17:32:21 来自手机 | 显示全部楼层
现在这么多人搞os?
 楼主| 发表于 2016-2-1 17:36:53 | 显示全部楼层
neqee 发表于 2016-2-1 17:32
现在这么多人搞os?

自己写着玩
发表于 2016-2-14 16:35:15 | 显示全部楼层
Protothreads结构……
发表于 2016-2-14 23:24:08 来自手机 | 显示全部楼层
支持楼主,精神可嘉
发表于 2016-3-9 14:36:22 | 显示全部楼层
类似于proto的系统,局限性很强
发表于 2016-10-21 13:37:53 | 显示全部楼层
学习一个,最近正在学习纯C的调度器,比RTOS来说移植简单不少,资源也很省。楼主自己做的调eTOS已经用在项目中了?
发表于 2016-10-24 20:29:02 | 显示全部楼层
支持创新
发表于 2017-2-22 09:59:06 | 显示全部楼层
其实楼主的调度器,很适合用于项目,比裸奔清晰,又比rtos简单,大部分中小型项目非常适合。希望楼主能出一个使用说明和注意事项
发表于 2017-2-22 10:12:37 | 显示全部楼层
项目并不是用了RTOS就高大上,合适才是硬道理。我现在的一个汽车电子项目,之前与领导建议上ucos,但领导告诉我:1.os要有汽车级认证,2.你本人要对os有深刻的认识,如果用不好,产品出了问题很难查找错误。我现在就用定时器做了一个极简单的任务调度。
发表于 2017-2-22 10:15:14 | 显示全部楼层
楼主的方案,非常好,准备试试。
 楼主| 发表于 2017-2-22 14:56:54 | 显示全部楼层
jia_xuan 发表于 2017-2-22 10:12
项目并不是用了RTOS就高大上,合适才是硬道理。我现在的一个汽车电子项目,之前与领导建议上ucos,但领导告 ...

我也是出于这种想法写的,很多时候并没必要用RTOS,为了提高编程效率和良好的代码结构,有一个占用资源少的通用的软件框架还是很有必要的
 楼主| 发表于 2017-2-22 14:59:24 | 显示全部楼层
wang1216 发表于 2016-3-9 14:36
类似于proto的系统,局限性很强

确实有些局限性,可以用在资源少简单的系统,复杂的直接上FreeRTOS之类的了
发表于 2017-3-10 14:40:23 | 显示全部楼层
轻若尘 发表于 2017-2-22 14:59
确实有些局限性,可以用在资源少简单的系统,复杂的直接上FreeRTOS之类的了
...

请问一下楼主,eTOS中,我有外部50ms溢出的看门狗,喂狗放在哪里合适。
发表于 2017-3-10 19:26:24 | 显示全部楼层
轻若尘 发表于 2016-2-1 17:23
最近根据项目中的实际使用,对信号量做了部分修改,并加入了获取任务指针功能等。。。。
...

“加入获取任务指针功能等。。。。”。楼主,这个功能在那种情况下能用到?
发表于 2019-11-20 11:46:58 | 显示全部楼层
楼主,这个可以调用子运务吗?
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2020-2-22 14:19

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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