搜索
bottom↓
回复: 53

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

  [复制链接]

出0入0汤圆

发表于 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

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-12-23 09:36:27 | 显示全部楼层
先做个记号     

出0入8汤圆

发表于 2015-12-23 09:40:45 | 显示全部楼层
支持,但是没见到附件

出0入0汤圆

 楼主| 发表于 2015-12-23 09:45:10 | 显示全部楼层
lw2012 发表于 2015-12-23 09:40
支持,但是没见到附件

我的火狐浏览器传不了附件,稍后再试试

出0入0汤圆

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

是的,火狐对论坛的代码做了校验,对老的代码版本不支持,我以前提过建议,莫大说等动力升级后再说

出0入0汤圆

发表于 2015-12-23 09:55:40 | 显示全部楼层
上传时取消右边的“纯文本”

出0入0汤圆

发表于 2015-12-23 10:00:17 | 显示全部楼层
楼主很执着。

出0入0汤圆

发表于 2015-12-23 10:08:06 | 显示全部楼层
一看到while(1)之外的TASK_START和TASK_END就猜想是用了pt。

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

在ram很有限的mcu用这个协程调度,大大节省了ram。

出0入0汤圆

发表于 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();
}

出0入0汤圆

 楼主| 发表于 2015-12-23 10:12:24 | 显示全部楼层
zsmbj 发表于 2015-12-23 10:08
一看到while(1)之外的TASK_START和TASK_END就猜想是用了pt。

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

恩是参考了PT的方法

出0入0汤圆

 楼主| 发表于 2015-12-23 10:15:27 | 显示全部楼层
附件已上传,火狐上传不了,还是用IE上传

出0入0汤圆

 楼主| 发表于 2015-12-23 10:17:31 | 显示全部楼层

既然写了这东西,就尽量写的完善些,不能让自己之前白忙活

出0入0汤圆

发表于 2015-12-23 10:47:24 | 显示全部楼层
其实楼主可以参考QP架构,合作式事件触发,能够实现简单的数据结构和方法继承,用起来应该比 eTOS更灵活

出0入0汤圆

 楼主| 发表于 2015-12-23 10:52:56 | 显示全部楼层
changer15309 发表于 2015-12-23 10:47
其实楼主可以参考QP架构,合作式事件触发,能够实现简单的数据结构和方法继承,用起来应该比 eTOS更灵活 ...

对QP架构不了解,能否提供些资料看下

出0入0汤圆

发表于 2015-12-23 10:54:28 | 显示全部楼层
唉  看了很多  这种调度器  就是 用不来  理解不了     现在还是用的 while  代码写的一点逼格也没有  惭愧啊

出0入0汤圆

发表于 2015-12-23 10:57:53 | 显示全部楼层
轻若尘 发表于 2015-12-23 10:52
对QP架构不了解,能否提供些资料看下

参考链接  http://www.state-machine.com/index.html

出0入0汤圆

发表于 2015-12-23 10:59:14 | 显示全部楼层
轻若尘 发表于 2015-12-23 10:52
对QP架构不了解,能否提供些资料看下

对应的电子书下载 http://www.state-machine.com/psicc2/

出0入0汤圆

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

我这个还算比较简单,不涉及底层堆栈,都是用C写的,耐心点肯定能理解

出0入0汤圆

 楼主| 发表于 2015-12-23 11:21:57 | 显示全部楼层
changer15309 发表于 2015-12-23 10:59
对应的电子书下载 http://www.state-machine.com/psicc2/

粗略看了下,感觉挺不错,有时间好好研究下

出0入0汤圆

发表于 2015-12-23 18:03:06 | 显示全部楼层
不错,明天试试点个灯

出0入0汤圆

 楼主| 发表于 2015-12-23 20:39:02 | 显示全部楼层
wmm20031015 发表于 2015-12-23 18:03
不错,明天试试点个灯

直接用我传的例程改下端口就可以

出0入0汤圆

发表于 2015-12-23 21:05:50 | 显示全部楼层
先mark         

出20入118汤圆

发表于 2015-12-23 21:08:52 来自手机 | 显示全部楼层
先mark跑起来需要多少ram?

出0入0汤圆

 楼主| 发表于 2015-12-23 21:35:27 | 显示全部楼层
ztg328 发表于 2015-12-23 21:08
先mark跑起来需要多少ram?

具体看有几个任务,和裸奔差不多

出10入0汤圆

发表于 2015-12-24 08:50:04 来自手机 | 显示全部楼层
关注关注…

出0入0汤圆

发表于 2015-12-24 09:06:27 | 显示全部楼层
学习学习。感谢分享

出0入0汤圆

发表于 2015-12-24 09:26:49 | 显示全部楼层
eTOS,学习一下,感谢楼主分享!!

出0入0汤圆

 楼主| 发表于 2015-12-24 12:06:28 | 显示全部楼层
sunnyczp 发表于 2015-12-24 09:26
eTOS,学习一下,感谢楼主分享!!

多谢支持

出0入0汤圆

发表于 2015-12-24 13:47:40 | 显示全部楼层
mark,学习啊。

出0入0汤圆

发表于 2016-1-16 10:39:46 | 显示全部楼层
状态机编程的兼容性是关键

出0入0汤圆

发表于 2016-1-16 10:53:51 | 显示全部楼层
mark!谢谢楼主分享

出0入0汤圆

发表于 2016-1-16 22:48:06 | 显示全部楼层
mark一下

出0入0汤圆

 楼主| 发表于 2016-1-26 08:59:09 | 显示全部楼层
minier 发表于 2016-1-16 10:39
状态机编程的兼容性是关键

有哪些兼容性需要考虑,能说详细点吗?

出0入0汤圆

发表于 2016-1-26 09:05:25 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2016-1-26 09:31:29 | 显示全部楼层
收藏了,谢谢楼主

出0入0汤圆

发表于 2016-1-26 10:58:33 | 显示全部楼层
看了一下楼主的代码, 和 contiki 差别不大, 而且 contiki 有更多的资源, 建议楼主读一读 contiki

出0入0汤圆

 楼主| 发表于 2016-1-26 12:44:56 | 显示全部楼层
onepower 发表于 2016-1-26 10:58
看了一下楼主的代码, 和 contiki 差别不大, 而且 contiki 有更多的资源, 建议楼主读一读 contiki ...

好的,有时间看看

出0入0汤圆

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

本帖子中包含更多资源

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

x

出150入135汤圆

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

出0入0汤圆

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

自己写着玩

出0入0汤圆

发表于 2016-2-14 16:35:15 | 显示全部楼层
Protothreads结构……

出0入0汤圆

发表于 2016-2-14 23:24:08 来自手机 | 显示全部楼层
支持楼主,精神可嘉

出0入0汤圆

发表于 2016-3-9 14:36:22 | 显示全部楼层
类似于proto的系统,局限性很强

出0入0汤圆

发表于 2016-10-21 13:37:53 | 显示全部楼层
学习一个,最近正在学习纯C的调度器,比RTOS来说移植简单不少,资源也很省。楼主自己做的调eTOS已经用在项目中了?

出0入0汤圆

发表于 2016-10-24 20:29:02 | 显示全部楼层
支持创新

出0入0汤圆

发表于 2017-2-22 09:59:06 | 显示全部楼层
其实楼主的调度器,很适合用于项目,比裸奔清晰,又比rtos简单,大部分中小型项目非常适合。希望楼主能出一个使用说明和注意事项

出0入0汤圆

发表于 2017-2-22 10:12:37 | 显示全部楼层
项目并不是用了RTOS就高大上,合适才是硬道理。我现在的一个汽车电子项目,之前与领导建议上ucos,但领导告诉我:1.os要有汽车级认证,2.你本人要对os有深刻的认识,如果用不好,产品出了问题很难查找错误。我现在就用定时器做了一个极简单的任务调度。

出0入0汤圆

发表于 2017-2-22 10:15:14 | 显示全部楼层
楼主的方案,非常好,准备试试。

出0入0汤圆

 楼主| 发表于 2017-2-22 14:56:54 | 显示全部楼层
jia_xuan 发表于 2017-2-22 10:12
项目并不是用了RTOS就高大上,合适才是硬道理。我现在的一个汽车电子项目,之前与领导建议上ucos,但领导告 ...

我也是出于这种想法写的,很多时候并没必要用RTOS,为了提高编程效率和良好的代码结构,有一个占用资源少的通用的软件框架还是很有必要的

出0入0汤圆

 楼主| 发表于 2017-2-22 14:59:24 | 显示全部楼层
wang1216 发表于 2016-3-9 14:36
类似于proto的系统,局限性很强

确实有些局限性,可以用在资源少简单的系统,复杂的直接上FreeRTOS之类的了

出0入0汤圆

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

请问一下楼主,eTOS中,我有外部50ms溢出的看门狗,喂狗放在哪里合适。

出0入0汤圆

发表于 2017-3-10 19:26:24 | 显示全部楼层
轻若尘 发表于 2016-2-1 17:23
最近根据项目中的实际使用,对信号量做了部分修改,并加入了获取任务指针功能等。。。。
...

“加入获取任务指针功能等。。。。”。楼主,这个功能在那种情况下能用到?

出0入0汤圆

发表于 2019-11-20 11:46:58 | 显示全部楼层
楼主,这个可以调用子运务吗?

出20入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-26 04:56

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

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