查看: 4065|回复: 9

[分享] 继续放大招,公开一个定时器任务调度内核,全系通用

[复制链接]
  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-6-28 08:22:38 | 显示全部楼层 |阅读模式
    本帖最后由 技术范儿 于 2016-6-28 08:26 编辑

    还在为不会用操作系统而烦恼吗?还在被写不出迸发任务的程序而烦恼吗?一个简单地定时器任务调度内核,屡试不爽,简单地移植过程,你值得拥有,拿走不谢!(以前从一个协议栈里面抠出来的)
    1. /*******************************************************
    2. * FileName: sys_to.h
    3. * Dependencies:
    4. * Processor:   PIC24F   
    5. * Complier:    C30,MPLAB IDE V8.0            
    6. * Company:      
    7. * Author               Date    Comment
    8. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    9. * Amayer                09/09/09 Wsn Stack v0.1
    10. * Amayer                04/31/10 Wsn Stack v1.0
    11. *******************************************************/


    12. #include "sys_to.h"


    13. //定义定时器时间队列的大小
    14. #define CntSysTOQueSize        8
    15. //定义定时器管理队列数组
    16. SYS_TO        SysTOQue[CntSysTOQueSize];

    17. /*******************************************************
    18. * 【函    数】void InitSetupSysTOTimer(void)
    19. * 【参    数】void,无      
    20. * 【返回值  】void,无
    21. * 【用    途】将定时器队列初始化,清空标志,各属性值默认为0
    22. * 【备    注】通常在主程序的初始化中调用
    23. * 【完成日期】2004-10-18   11:47
    24. * 【创建  者】XXXXXXX
    25. * 【修改记录】
    26. *  ※修改说明※
    27. *  ※修改时间※
    28. *  ※修改人※
    29. *  ※修改前源代码是否备份※
    30. ********************************************************/

    31. void InitSetupSysTOTimer(void)
    32. {
    33.         BYTE iIndex;

    34.         for (iIndex=0; iIndex<CntSysTOQueSize; iIndex++)
    35.         {
    36.                 SysTOQue[iIndex].start = 0;
    37.                 SysTOQue[iIndex].msecs = 0;
    38.                 SysTOQue[iIndex].bits.delay = 0;
    39.                 SysTOQue[iIndex].h = (sys_to_handler) 0;
    40.                 SysTOQue[iIndex].arg = (void *) 0;
    41.                 SysTOQue[iIndex].bits.sType = TO_CIR;
    42.                 SysTOQue[iIndex].bits.bInUse = 0;
    43.         }
    44. }

    45. /*******************************************************
    46. * 【函    数】WORD CreateSysTOTimer(DWORD msecs,sys_to_handler h,void *arg,BYTE type)
    47. * 【参    数】DWORD msecs:定时时间;sys_to_handler h:超时发生的事件;
    48. *                                                        void *arg,超时事件的参数;BYTE type:定时器使用类型,是只发生一次就
    49. *                                                        删除,还是循环使用     
    50. * 【返回值  】WORD,返回创建的定时器的句柄,也就是标识
    51. * 【用    途】建立一个定时器,需要制定定时时间,结束时触发的动作,及相关类型
    52. * 【备    注】在需要超时处理的位置调用
    53. * 【完成日期】2010-7-5 17:56
    54. * 【创建  者】
    55. * 【修改记录】
    56. *  ※修改说明※
    57. *  ※修改时间※
    58. *  ※修改人※
    59. *  ※修改前源代码是否备份※
    60. *  标注:只能处理无返回值的函数,有返回值的函数虽然能正常执行,但是是将其强制转换成了无返回值的函数了(sys_to_handler) taolang 20130925
    61. ********************************************************/

    62. BYTE CreateSysTOTimer(DWORD msecs, sys_to_handler h, void *arg, BYTE type)
    63. {
    64.         BYTE iIndex;

    65.         for (iIndex=0; iIndex<CntSysTOQueSize; iIndex++)
    66.         {
    67.                 if (!SysTOQue[iIndex].bits.bInUse)
    68.                 {
    69.                         SysTOQue[iIndex].start = GetTime();
    70.                         SysTOQue[iIndex].msecs = msecs;
    71.                         SysTOQue[iIndex].h = h;
    72.                         SysTOQue[iIndex].arg = arg;
    73.                         SysTOQue[iIndex].bits.sType = type;
    74.                         SysTOQue[iIndex].bits.delay = 0;
    75.                         SysTOQue[iIndex].bits.bInUse = 1;
    76.                         return iIndex;
    77.                 }
    78.         }

    79.         return InValHandle;        
    80. }

    81. /*******************************************************
    82. * 【函    数】void RemoveSysTOTimer(WORD Index)
    83. * 【参    数】WORD Index,需要删除的定时器的句柄  
    84. * 【返回值  】void,无
    85. * 【用    途】当定时器使用完毕,就删除,释放资源,供其它的
    86. *                                                        程序使用
    87. * 【备    注】在void RefreshSysTOTimer(void)函数中调用
    88. *                                                 通常是只调用一次的定时器处理
    89. * 【完成日期】2010-7-5 17:58
    90. * 【创建  者】
    91. * 【修改记录】
    92. *  ※修改说明※
    93. *  ※修改时间※
    94. *  ※修改人※
    95. *  ※修改前源代码是否备份※
    96. ********************************************************/

    97. void RemoveSysTOTimer(BYTE Index)
    98. {
    99.         if ((Index < CntSysTOQueSize) && (SysTOQue[Index].bits.bInUse))
    100.         {
    101.                 SysTOQue[Index].start = 0;
    102.                 SysTOQue[Index].msecs = 0;
    103.                 SysTOQue[Index].h = (sys_to_handler) 0;
    104.                 SysTOQue[Index].arg = (void *) 0;
    105.                 SysTOQue[Index].bits.bInUse = 0;               
    106.         }
    107. }


    108. /*******************************************************
    109. * 【函    数】WORD SearchSysTOTimer(sys_to_handler h,void *arg)
    110. * 【参    数】sys_to_handler h:定时结束后触发的事件
    111. *             void *arg,触发事件的参数  
    112. * 【返回值  】WORD,根据触发事件及参数查询定时器,返回句柄
    113. * 【用    途】查看定时器队列中,是否已经创建了触发该事件的定时器
    114. *                                                        
    115. * 【备    注】通常在创建定时器之前使用,防止重复
    116. *                                                
    117. * 【完成日期】2010-7-5 17:58
    118. * 【创建  者】
    119. * 【修改记录】
    120. *  ※修改说明※
    121. *  ※修改时间※
    122. *  ※修改人※
    123. *  ※修改前源代码是否备份※
    124. ********************************************************/

    125. BYTE SearchSysTOTimer(sys_to_handler h, void *arg)
    126. {
    127.         BYTE iIndex;

    128.         for (iIndex=0; iIndex<CntSysTOQueSize; iIndex++)
    129.         {
    130.                 if ((SysTOQue[iIndex].bits.bInUse) && (SysTOQue[iIndex].h == h)
    131.                                 && (SysTOQue[iIndex].arg == arg))
    132.                 {
    133.                         return iIndex;
    134.                 }
    135.         }

    136.         return InValHandle;
    137. }


    138. /*******************************************************
    139. * 【函    数】void RefreshSysTOTimer(void)
    140. * 【参    数】void,无
    141. *            
    142. * 【返回值  】void
    143. * 【用    途】定时器队列的处理事件,若是定时时间到就触发相应的动作
    144. *                                                        若是一次性定时器,则删除释放资源
    145. *             若是循环定时器,重新计时
    146. * 【备    注】通常在主函数中调用,在死循环中调用,不断轮询,实时检查
    147. *                                                
    148. * 【完成日期】2010-7-5 17:58
    149. * 【创建  者】
    150. * 【修改记录】
    151. *  ※修改说明※
    152. *  ※修改时间※
    153. *  ※修改人※
    154. *  ※修改前源代码是否备份※
    155. ********************************************************/

    156. void RefreshSysTOTimer(void)
    157. {
    158.         BYTE iIndex;
    159.         DWORD time;

    160.         for (iIndex=0; iIndex<CntSysTOQueSize; iIndex++)
    161.         {
    162.                 if (SysTOQue[iIndex].bits.bInUse)
    163.                 {
    164.                         time = DiffTime(SysTOQue[iIndex].start, GetTime());

    165.                         //若是定时到
    166.                         if ((time > SysTOQue[iIndex].msecs))
    167.                         {
    168.                                 //是否延时了
    169.                                 if (SysTOQue[iIndex].bits.delay > 0)
    170.                                 {
    171.                                         SysTOQue[iIndex].bits.delay--;
    172.                                         SysTOQue[iIndex].start = GetTime();
    173.                                 }
    174.                                 else
    175.                                 {
    176.                                         //若是没有延时
    177.                                         if (SysTOQue[iIndex].arg == NULL)
    178.                                         {
    179.                                                 (SysTOQue[iIndex].h)();
    180.                                         }
    181.                                         else
    182.                                         {
    183.                                                 (SysTOQue[iIndex].h)(SysTOQue[iIndex].arg);
    184.                                         }
    185.         

    186.                                         if (SysTOQue[iIndex].bits.sType == TO_CIR)
    187.                                         {
    188.                                                 SysTOQue[iIndex].start = GetTime();
    189.                                         }
    190.                                         else if (SysTOQue[iIndex].bits.sType == TO_ONY)
    191.                                         {
    192.                                                 RemoveSysTOTimer(iIndex);
    193.                                         }
    194.                                 }
    195.                         }
    196.                 }
    197.         }
    198. }


    199. /*******************************************************
    200. * 【函    数】void DelaySysTOTimer(WORD Index, BYTE delay)
    201. * 【参    数】WORD Index,需要延时的定时器的句柄
    202. *             BYTE delay,延时的时间,最大不超过定时的5倍
    203. * 【返回值  】void,无
    204. * 【用    途】将某个定时器延时,根据句柄来实现
    205. *                        
    206. * 【备    注】在需要将定时器队列延时的时候使用
    207. *                                                
    208. * 【完成日期】2010-7-5 17:58
    209. * 【创建  者】
    210. * 【修改记录】
    211. *  ※修改说明※ 增加了一个参数,可设定延时时间
    212. *  ※修改时间※ 2010-8-13 8:50
    213. *  ※修改人※  
    214. *  ※修改前源代码是否备份※
    215. ********************************************************/
    216. void DelaySysTOTimer(BYTE Index, BYTE delay)
    217. {
    218.         if ((Index < CntSysTOQueSize) && (SysTOQue[Index].bits.bInUse))
    219.         {
    220.                 SysTOQue[Index].bits.delay = delay;
    221.                 if (SysTOQue[Index].bits.delay >= CntMaxDelayTimes)
    222.                 {
    223.                         SysTOQue[Index].bits.delay = CntMaxDelayTimes;
    224.                 }
    225.         }        
    226. }
    复制代码
    1. #ifndef _SYS_TO_H
    2. #define _SYS_TO_H

    3. /*********************************************************************
    4.     tick调度移植:
    5.         tick调度包括:tick.c/h  sys_to.c/h 函数
    6.         移植CalacCounter();到2ms定时器中。
    7.         部署:
    8.             InitSetupSysTOTimer();        到系统初始化中
    9.             RefreshSysTOTimer();    到while循环中
    10.         接口函数:
    11.             CreateSysTOTimer();建立定时任务
    12.             DiffTime();  系统时间比较函数
    13.             GetTime();   系统时间获取函数
    14.    
    15.    

    16. **********************************************************************/


    17. /*******************************************************
    18. * FileName: sys_to.h
    19. * Dependencies:
    20. * Processor:   PIC24F   
    21. * Complier:    C30,MPLAB IDE V8.0            
    22. * Company:      
    23. * Author               Date    Comment
    24. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    25. *******************************************************/

    26. #include "common.h"
    27. #include "Tick.h"


    28. //定义函数指针
    29. typedef void (*sys_to_handler)();

    30. #define TO_ONY        0x01                //单次
    31. #define TO_CIR        0x02                //循环的
    32. #define CntMaxDelayTimes        5
    33. #ifndef NULL    //taolang 修改
    34.     #define NULL    (void *)0
    35. #endif
    36. typedef struct _SYS_TO
    37. {
    38.         DWORD start;                                //起始时间
    39.         DWORD msecs;                                //定时时间
    40.         sys_to_handler h;                        //事件触发
    41.         void *arg;                                        //参数
    42.         struct
    43.         {
    44.                 WORD sType:8;
    45.                 WORD bInUse:1;
    46.                 WORD delay:3;                //延时8倍
    47.                 WORD :4;        
    48.         }bits;        
    49. }SYS_TO;

    50. /*******************************************************
    51. * 【函    数】void InitSetupSysTOTimer(void)
    52. * 【参    数】void,无      
    53. * 【返回值  】void,无
    54. * 【用    途】将定时器队列初始化,清空标志,各属性值默认为0
    55. * 【备    注】通常在主程序的初始化中调用
    56. * 【完成日期】2004-10-18   11:47
    57. * 【创建  者】
    58. * 【修改记录】
    59. *  ※修改说明※
    60. *  ※修改时间※
    61. *  ※修改人※
    62. *  ※修改前源代码是否备份※
    63. ********************************************************/
    64. void InitSetupSysTOTimer(void);

    65. /*******************************************************
    66. * 【函    数】WORD CreateSysTOTimer(DWORD msecs,sys_to_handler h,void *arg,BYTE type)
    67. * 【参    数】DWORD msecs:定时时间;sys_to_handler h:超时发生的事件;
    68. *                                                        void *arg,超时事件的参数;BYTE type:定时器使用类型,是只发生一次就
    69. *                                                        删除,还是循环使用     
    70. * 【返回值  】WORD,返回创建的定时器的句柄,也就是标识
    71. * 【用    途】建立一个定时器,需要制定定时时间,结束时触发的动作,及相关类型
    72. * 【备    注】在需要超时处理的位置调用
    73. * 【完成日期】2010-7-5 17:56
    74. * 【创建  者】
    75. * 【修改记录】
    76. *  ※修改说明※
    77. *  ※修改时间※
    78. *  ※修改人※
    79. *  ※修改前源代码是否备份※
    80. ********************************************************/
    81. BYTE CreateSysTOTimer(DWORD msecs, sys_to_handler h, void *arg, BYTE type);
    82. /*******************************************************
    83. * 【函    数】void RemoveSysTOTimer(WORD Index)
    84. * 【参    数】WORD Index,需要删除的定时器的句柄  
    85. * 【返回值  】void,无
    86. * 【用    途】当定时器使用完毕,就删除,释放资源,供其它的
    87. *                                                        程序使用
    88. * 【备    注】在void RefreshSysTOTimer(void)函数中调用
    89. *                                                 通常是只调用一次的定时器处理
    90. * 【完成日期】2010-7-5 17:58
    91. * 【创建  者】
    92. * 【修改记录】
    93. *  ※修改说明※
    94. *  ※修改时间※
    95. *  ※修改人※
    96. *  ※修改前源代码是否备份※
    97. ********************************************************/
    98. void RemoveSysTOTimer(BYTE Index);

    99. /*******************************************************
    100. * 【函    数】WORD SearchSysTOTimer(sys_to_handler h,void *arg)
    101. * 【参    数】sys_to_handler h:定时结束后触发的事件
    102. *             void *arg,触发事件的参数  
    103. * 【返回值  】WORD,根据触发事件及参数查询定时器,返回句柄
    104. * 【用    途】查看定时器队列中,是否已经创建了触发该事件的定时器
    105. *                                                        
    106. * 【备    注】通常在创建定时器之前使用,防止重复
    107. *                                                
    108. * 【完成日期】2010-7-5 17:58
    109. * 【创建  者】
    110. * 【修改记录】
    111. *  ※修改说明※
    112. *  ※修改时间※
    113. *  ※修改人※
    114. *  ※修改前源代码是否备份※
    115. ********************************************************/
    116. BYTE SearchSysTOTimer(sys_to_handler h, void *arg);

    117. /*******************************************************
    118. * 【函    数】void RefreshSysTOTimer(void)
    119. * 【参    数】void,无
    120. *            
    121. * 【返回值  】void
    122. * 【用    途】定时器队列的处理事件,若是定时时间到就触发相应的动作
    123. *                                                        若是一次性定时器,则删除释放资源
    124. *             若是循环定时器,重新计时
    125. * 【备    注】通常在主函数中调用,在死循环中调用,不断轮询,实时检查
    126. *                                                
    127. * 【完成日期】2010-7-5 17:58
    128. * 【创建  者】
    129. * 【修改记录】
    130. *  ※修改说明※
    131. *  ※修改时间※
    132. *  ※修改人※
    133. *  ※修改前源代码是否备份※
    134. ********************************************************/
    135. void RefreshSysTOTimer(void);

    136. /*******************************************************
    137. * 【函    数】void DelaySysTOTimer(WORD Index, BYTE delay)
    138. * 【参    数】WORD Index,需要延时的定时器的句柄
    139. *             BYTE delay,延时的时间,最大不超过定时的5倍
    140. * 【返回值  】void,无
    141. * 【用    途】将某个定时器延时,根据句柄来实现
    142. *                        
    143. * 【备    注】在需要将定时器队列延时的时候使用
    144. *                                                
    145. * 【完成日期】2010-7-5 17:58
    146. * 【创建  者】
    147. * 【修改记录】
    148. *  ※修改说明※ 增加了一个参数,可设定延时时间
    149. *  ※修改时间※ 2010-8-13 8:50
    150. *  ※修改人※  
    151. *  ※修改前源代码是否备份※
    152. ********************************************************/
    153. void DelaySysTOTimer(BYTE Index, BYTE delay);
    154. #endif


    复制代码
    1. #include "tick.h"
    2. //#include "stm32f10x_lib.h"
    3. //设定一个时间片,每到中断,SysTick自增
    4. #define MAX_COUNT_VALUE 0xFFFFFFFF

    5. #define  CntTicksSize                (5)

    6. //用于实现定时器的中断次数累计
    7. //全局变量在哪个文件中定义,一定在相应文件中初始化
    8. DWORD         ASysTick = 0;  
    9. DWORD         SysTime = 0;

    10. //SysTime 的计时为每N个节拍,dwtimes增加1
    11. static WORD         nCounter = 0;


    12. TICK GetTime(void)
    13. {
    14.         return SysTime;
    15. }
    16. /*******************************************
    17.         功能:获取时间差
    18.         参数:        输入,两个时间点
    19.                         输出,时间差值
    20. ******************************************/
    21. TICK DiffTime(TICK start, TICK end)
    22. {
    23.         TICK dwValue;

    24.         if (end >= start)
    25.         {
    26.                 dwValue = end - start;
    27.         }
    28.         else
    29.         {
    30.                 dwValue = MAX_COUNT_VALUE + end - start;
    31.         }

    32.         return dwValue;
    33. }


    34. TICK GetTicks(void)
    35. {
    36.         return ASysTick;
    37. }


    38. TICK DiffTicks(TICK start, TICK end)
    39. {
    40.         TICK dwValue;

    41.         if (end >= start)
    42.         {
    43.                 dwValue = end - start;
    44.         }
    45.         else
    46.         {
    47.                 dwValue = (MAX_COUNT_VALUE - start) + end ;
    48.         }

    49.         return dwValue;
    50. }


    51. void CalacCounter(void)
    52. {
    53.         ASysTick++;
    54.         nCounter++;

    55.         if (nCounter >= CntTicksSize)
    56.         {
    57.                 SysTime++;
    58.                 nCounter = 0;
    59.         }
    60. }




    61. /*
    62. void __attribute__((interrupt,no_auto_psv)) _T1Interrupt(void)
    63. {
    64.         TMR1=0x0000;
    65.         SysTick++;
    66.         IFS0bits.T1IF=0;//这个一定要
    67. }

    68. int main(void)
    69. {
    70.         DWORD dwTemp=0;
    71.         InitSetup();
    72.         SysTick=0;
    73.         dwTemp=0xFFFFFFF0;
    74.         while(1)
    75.         {
    76.                 if(DiffTicks(dwTemp,GetTicks())>=30)
    77.                 {
    78.                         Nop();
    79.                 }
    80.                
    81.         }
    82.         return TRUE;
    83. }
    84. */
    复制代码
    1. #ifndef _TICK_H
    2. #define _TICK_H

    3. /***************************************************
    4.     tick调度移植:
    5.         tick调度包括:tick.c/h  sys_to.c/h 函数
    6.         移植CalacCounter();到2ms定时器中。
    7.         部署:
    8.             InitSetupSysTOTimer();        到系统初始化中
    9.             RefreshSysTOTimer();    到while循环中
    10.         接口函数:
    11.             CreateSysTOTimer();建立定时任务
    12.             DiffTime();  系统时间比较函数
    13.             GetTime();   系统时间获取函数



    14. ****************************************************/



    15. #include "common.h"
    16. //定义时间结构
    17. typedef DWORD TICK;


    18. /*******************************************************
    19. * 【函    数】TICK GetTime(void)
    20. * 【参    数】void,无      
    21. * 【返回值  】TICK,返回当前全局变量的值,也就是dwTimes
    22. * 【用    途】为长时间的计时,提供基础,提供时间片
    23. * 【备    注】利用硬件的定时器产生小的时间片,通过统计时间片的
    24. *             数量,实现计时
    25. * 【完成日期】2010-7-6   8:47
    26. * 【创建  者】
    27. * 【修改记录】
    28. *  ※修改说明※
    29. *  ※修改时间※
    30. *  ※修改人※
    31. *  ※修改前源代码是否备份※
    32. ********************************************************/
    33. TICK GetTime(void);
    34. /*******************************************************
    35. * 【函    数】TICK DiffTime(TICK start,TICK end)
    36. * 【参    数】TICK start:计算时间差的起始时间;
    37. *             TICK end:计算时间差的截止时间      
    38. * 【返回值  】TICK,返回时间差值
    39. * 【用    途】计算时间差
    40. * 【备    注】
    41. *            
    42. * 【完成日期】2010-7-6   8:47
    43. * 【创建  者】
    44. * 【修改记录】
    45. *  ※修改说明※
    46. *  ※修改时间※
    47. *  ※修改人※
    48. *  ※修改前源代码是否备份※
    49. ********************************************************/
    50. TICK DiffTime(TICK start, TICK end);

    51. /*******************************************************
    52. * 【函    数】TICK GetTicks(void)
    53. * 【参    数】void,无      
    54. * 【返回值  】TICK,返回当前全局变量的值,也就是dwSeconds
    55. * 【用    途】为长时间的计时,提供基础,提供时间片
    56. * 【备    注】利用硬件的定时器产生小的时间片,通过统计时间片的
    57. *             数量,实现计时
    58. * 【完成日期】2010-7-6   8:47
    59. * 【创建  者】
    60. * 【修改记录】
    61. *  ※修改说明※
    62. *  ※修改时间※
    63. *  ※修改人※
    64. *  ※修改前源代码是否备份※
    65. ********************************************************/
    66. TICK GetTicks(void);


    67. /*******************************************************
    68. * 【函    数】TICK DiffTicks(TICK start,TICK end)
    69. * 【参    数】TICK start:计算时间差的起始时间;
    70. *             TICK end:计算时间差的截止时间      
    71. * 【返回值  】TICK,返回时间差值
    72. * 【用    途】计算时间差
    73. * 【备    注】
    74. *            
    75. * 【完成日期】2010-7-6   8:47
    76. * 【创建  者】
    77. * 【修改记录】
    78. *  ※修改说明※
    79. *  ※修改时间※
    80. *  ※修改人※
    81. *  ※修改前源代码是否备份※
    82. ********************************************************/
    83. TICK DiffTicks(TICK start, TICK end);

    84. void CalacCounter(void);

    85. #endif
    复制代码


    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    43

    帖子

    0

    注册会员

    Rank: 2

    积分
    94
    最后登录
    2018-5-11
    发表于 2016-6-28 09:17:46 | 显示全部楼层
    这个实用
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    46

    帖子

    0

    注册会员

    Rank: 2

    积分
    166
    最后登录
    2016-10-24
    发表于 2016-6-28 09:19:51 | 显示全部楼层
    给力,向大神学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    13

    主题

    430

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1385
    最后登录
    2018-6-13
    发表于 2016-6-28 09:48:03 | 显示全部楼层
    之前想写一个这样的调度来着,没想到有大神已经完成了,谢谢啦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-4-15 09:17
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    219

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    445
    最后登录
    2024-8-28
    发表于 2016-6-28 10:00:55 | 显示全部楼层
    没用过系统,研究下。大赞
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
     楼主| 发表于 2016-6-28 10:30:22 | 显示全部楼层
    hellokity 发表于 2016-6-28 09:48
    之前想写一个这样的调度来着,没想到有大神已经完成了,谢谢啦

    不是调度,就是一个定时任务
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
     楼主| 发表于 2016-6-28 10:30:52 | 显示全部楼层
    farky 发表于 2016-6-28 10:00
    没用过系统,研究下。大赞

    不是操作系统,是一个定时任务调度器
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-4 16:56
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    602

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1842
    最后登录
    2020-8-25
    发表于 2016-6-28 10:39:47 | 显示全部楼层
    定时器任务调度不是OS的一部分那具体什么用途呢?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
     楼主| 发表于 2016-6-28 10:48:17 | 显示全部楼层
    moyanming2013 发表于 2016-6-28 10:39
    定时器任务调度不是OS的一部分那具体什么用途呢?

    不知道该咋描述了,我最近刚开始接触操作系统、、、
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    57

    帖子

    0

    注册会员

    Rank: 2

    积分
    197
    最后登录
    2020-7-14
    发表于 2016-6-28 15:12:41 | 显示全部楼层
    研究一下,又学到了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 02:03 , Processed in 0.102666 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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