你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

分享个时间片任务调度内核

[复制链接]
技术范儿 发布时间:2016-11-21 13:27
       初来乍到,意外弄了一份代码,还挺好用。懂的朋友拿走,废话不多说直接撸代码!
  1. #include "timesysto.h"
    % s  N  i7 f' C/ F" b0 \0 l5 T
  2. 7 \3 O6 U# A, z1 x/ M5 m% T
  3. struct Timer timer1;+ C6 {& M% c) x7 F9 O/ x
  4. struct Timer timer2;
    0 I: G$ u) @) C
  5. ' d0 y! y: f& N2 k. W
  6. void timer1_callback()- c6 n# S: ?) H, P$ @
  7. {6 M4 U1 x0 Q! F* p9 }. R( O" d2 W8 U
  8.     printf("timer1 timeout!\r\n");" y/ X5 i+ m$ B' q/ u+ Q! F  J
  9. }; K& p% L) m! q9 a
  10. / C& @$ j7 p, S
  11. void timer2_callback()5 @1 }" z! Z, a' m% Y: u
  12. {! c0 h) o) ?' z  S2 v) h& X
  13.     printf("timer2 timeout!\r\n");
    7 w8 z+ \! S% }- E- @3 G. s
  14. }
    ! m( R( S+ p* W" t

  15. 3 @/ k  V4 L# ^3 j, V& a
  16. int main()
    % _, E6 I8 U4 m  t8 |8 g, f
  17. {. _- u& O4 ]! j: g" r9 c: P  p- ^7 l
  18.         timer_init(&timer1, timer1_callback, 1000, 1000); //1s loop
    7 n, ^4 |( [! }% @
  19.         timer_start(&timer1);
    # r0 G! a4 Y1 i7 Q6 b* n
  20.         
    " b7 f6 d9 `" [+ B2 ~& |
  21.         timer_init(&timer2, timer2_callback, 50, 0); //50ms delay
    - K# o+ T4 J7 s' \2 G  C% e
  22.         timer_start(&timer2);
    : I; o+ c( h& k/ @) y: f9 d0 q! J
  23.         & Y$ B" n8 C# l: ?  O& I. h6 v3 m, H% [
  24.         while(1) {
    8 O) a6 K3 F9 G: \  ?
  25.             
    5 ]: j/ ]! x# v3 l+ ~
  26.             timer_loop();
    9 D5 Y5 w! Z; }! g' z  u' l+ H( ^
  27.         }4 z" V, u& l/ @% T
  28. }
    / }# }1 E( [+ y- K) z5 k) r: F
复制代码
7 A+ D% j& A; O, Y; ?

. x! h8 I; C& @

timesysto.zip

下载

1.1 KB, 下载次数: 338

源代码

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

赞 收藏 2 评论12 发布时间:2016-11-21 13:27

举报

12个回答
zero99 回答时间:2016-11-21 13:29:19
学习了
Inc_brza 回答时间:2016-11-21 13:43:42
原创?$ V/ q7 e+ M, o% {. V
这个定时器模块在amobbs看过。1 y* p4 }' h8 v( n2 E- H5 [" X
原理就是使用单链把所有用户定时器串联起来!
! \. e( D( v0 M$ b! _其实个人觉得应该加多一个尾链比较好!因为每次增加一个定时器,你必须要查询到链的末端才能完成init6 K: s, e. \! u  Q4 Q
功能,如果加多一个尾节点,只需要对尾节点的前一个链的末端进行接驳就好了!
技术范儿 回答时间:2016-11-21 13:48:55
本帖最后由 技术范儿 于 2016-11-21 13:50 编辑
% v9 n% B/ U) a( M
Inc_brza 发表于 2016-11-21 13:436 |5 g* s. o. m1 y
原创?
$ n5 n" C; T4 W4 w. f. E这个定时器模块在amobbs看过。
+ i- \. a5 f2 ]原理就是使用单链把所有用户定时器串联起来!

$ f! U2 X1 k6 c. }8 h# i谢谢建议,意外收获自阿莫,你说的那个我也有,过段时间发
andypanfan 回答时间:2016-12-12 09:07:17
写的非常好,谢谢分享
斜阳 回答时间:2016-12-12 09:13:28
每个任务都用一个定时器太浪费了吧
技术范儿 回答时间:2016-12-12 10:18:48
斜阳__ 发表于 2016-12-12 09:133 a# w* {; o- a( V
每个任务都用一个定时器太浪费了吧

& F7 v. `6 V; c6 `看好,共用一个
5265325 回答时间:2016-12-12 10:40:27
wolfgang 回答时间:2016-12-12 10:46:21
这个代码还缺东西,回调函数的定义等等,这是RTOS最初级的东东,不过要完善还要经过漫长的路要走.
, }! {2 n7 `" E
nat-牛 回答时间:2017-8-22 16:09:17
技术范儿 发表于 2016-11-21 13:48* \) F# D; F/ K5 @) ?3 `% G
谢谢建议,意外收获自阿莫,你说的那个我也有,过段时间发
6 \; Z. U' E' i* o$ G
另外一份完善一些的代码你有吗?麻烦发一下,谢谢谢谢
明天 回答时间:2017-8-22 17:59:04
这和时间片没啥关系  就是个任务队列
s00750-213025 回答时间:2018-10-29 15:00:08
下来研究一下,谢谢
Amaker 回答时间:2020-5-20 17:31:43
谢谢分享!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版