轻若尘 发表于 2015-12-23 09:27:33

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

本帖最后由 轻若尘 于 2015-12-23 10:14 编辑

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

lcw_swust 发表于 2015-12-23 09:36:27

先做个记号   

lw2012 发表于 2015-12-23 09:40:45

支持,但是没见到附件

轻若尘 发表于 2015-12-23 09:45:10

lw2012 发表于 2015-12-23 09:40
支持,但是没见到附件

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

Vmao 发表于 2015-12-23 09:52:37

轻若尘 发表于 2015-12-23 09:45
我的火狐浏览器传不了附件,稍后再试试

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

powermeter 发表于 2015-12-23 09:55:40

上传时取消右边的“纯文本”

asbzhang 发表于 2015-12-23 10:00:17

楼主很执着。

zsmbj 发表于 2015-12-23 10:08:06

一看到while(1)之外的TASK_START和TASK_END就猜想是用了pt。

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

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

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

asbzhang 发表于 2015-12-23 10:00
楼主很执着。

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

changer15309 发表于 2015-12-23 10:47:24

其实楼主可以参考QP架构,合作式事件触发,能够实现简单的数据结构和方法继承,用起来应该比 eTOS更灵活

轻若尘 发表于 2015-12-23 10:52:56

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

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

ayumi8 发表于 2015-12-23 10:54:28

唉看了很多这种调度器就是 用不来理解不了   现在还是用的 while代码写的一点逼格也没有惭愧啊

changer15309 发表于 2015-12-23 10:57:53

轻若尘 发表于 2015-12-23 10:52
对QP架构不了解,能否提供些资料看下

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

changer15309 发表于 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写的,耐心点肯定能理解{:smile:}

轻若尘 发表于 2015-12-23 11:21:57

changer15309 发表于 2015-12-23 10:59
对应的电子书下载 http://www.state-machine.com/psicc2/

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

wmm20031015 发表于 2015-12-23 18:03:06

不错,明天试试点个灯{:lol:}

轻若尘 发表于 2015-12-23 20:39:02

wmm20031015 发表于 2015-12-23 18:03
不错,明天试试点个灯

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

mypear 发表于 2015-12-23 21:05:50

先mark         

ztg328 发表于 2015-12-23 21:08:52

先mark跑起来需要多少ram?

轻若尘 发表于 2015-12-23 21:35:27

ztg328 发表于 2015-12-23 21:08
先mark跑起来需要多少ram?

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

dgtg 发表于 2015-12-24 08:50:04

关注关注…

mvip 发表于 2015-12-24 09:06:27

学习学习。感谢分享

sunnyczp 发表于 2015-12-24 09:26:49

eTOS,学习一下,感谢楼主分享!!

轻若尘 发表于 2015-12-24 12:06:28

sunnyczp 发表于 2015-12-24 09:26
eTOS,学习一下,感谢楼主分享!!

多谢支持

lin2013 发表于 2015-12-24 13:47:40

mark,学习啊。

minier 发表于 2016-1-16 10:39:46

状态机编程的兼容性是关键

sinxcosytana 发表于 2016-1-16 10:53:51

mark!谢谢楼主分享

308594151 发表于 2016-1-16 22:48:06

mark一下

轻若尘 发表于 2016-1-26 08:59:09

minier 发表于 2016-1-16 10:39
状态机编程的兼容性是关键

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

308594151 发表于 2016-1-26 09:05:25

mark一下

vivi_cq1982 发表于 2016-1-26 09:31:29

收藏了,谢谢楼主

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

最近根据项目中的实际使用,对信号量做了部分修改,并加入了获取任务指针功能等。。。。

neqee 发表于 2016-2-1 17:32:21

现在这么多人搞os?

轻若尘 发表于 2016-2-1 17:36:53

neqee 发表于 2016-2-1 17:32
现在这么多人搞os?

自己写着玩{:lol:}

heimareed 发表于 2016-2-14 16:35:15

Protothreads结构……

Bicycle 发表于 2016-2-14 23:24:08

支持楼主,精神可嘉

wang1216 发表于 2016-3-9 14:36:22

类似于proto的系统,局限性很强

int 发表于 2016-10-21 13:37:53

学习一个,最近正在学习纯C的调度器,比RTOS来说移植简单不少,资源也很省。楼主自己做的调eTOS已经用在项目中了?

HalenYU 发表于 2016-10-24 20:29:02

支持创新

jia_xuan 发表于 2017-2-22 09:59:06

其实楼主的调度器,很适合用于项目,比裸奔清晰,又比rtos简单,大部分中小型项目非常适合。希望楼主能出一个使用说明和注意事项

jia_xuan 发表于 2017-2-22 10:12:37

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

jia_xuan 发表于 2017-2-22 10:15:14

楼主的方案,非常好,准备试试。

轻若尘 发表于 2017-2-22 14:56:54

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

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

轻若尘 发表于 2017-2-22 14:59:24

wang1216 发表于 2016-3-9 14:36
类似于proto的系统,局限性很强

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

jia_xuan 发表于 2017-3-10 14:40:23

轻若尘 发表于 2017-2-22 14:59
确实有些局限性,可以用在资源少简单的系统,复杂的直接上FreeRTOS之类的了
...

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

jia_xuan 发表于 2017-3-10 19:26:24

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

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

eddia2012 发表于 2019-11-20 11:46:58

楼主,这个可以调用子运务吗?{:smile:}

wgainn 发表于 2020-4-5 20:41:45

MARK,学习
页: [1]
查看完整版本: 自己写的一个合作调度器内核