加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161

SIEMENS山东省威海市 西门子代理商——西门子华北一级总代理

更新时间
2024-07-02 07:00:00
价格
请来电询价
西门子总代理
PLC
西门子一级代
驱动
西门子代理商
伺服电机
联系电话
15903418770
联系手机
15915421161
联系人
张经理
立即询价

详细介绍



















  • /* 软件定时器结构体 */typedef struct tmrTimerControl{    const char *pcTimerName;            /* 定时器名字 */    ListItem_t xTimerListItem;          /* 定时器列表项 */    TickType_t xTimerPeriodInTicks;     /* 定时器定时时间 */    UBaseType_t uxAutoReload;           /* 定时器周期模式 */    void *pvTimerID;                    /* 定时器ID */    TimerCallbackFunction_t pxCallbackFunction; /* 定时器回调函数 */     #if (configUSE_TRACE_FACILITY == 1)        UBaseType_t uxTimerNumber;    #endif     #if ((configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1))        uint8_t ucStaticallyAllocated; /*标记定时器使用的内存, 删除时判断是否需要释放内存*/    #endif}xTIMER;typedef xTIMER Timer_t;


    4.2 创建一个软件定时器





























  • #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )TimerHandle_t xTimerCreate( const char * const pcTimerName,        /* 定时器名字 */                           const TickType_t xTimerPeriodInTicks,   /* 定时器定时时间 */                           const UBaseType_t uxAutoReload,         /* 定时器周期模式 */                           void * const pvTimerID,                 /* 定时器ID */                           TimerCallbackFunction_t pxCallbackFunction ) /* 定时器回调函数 */{    Timer_t *pxNewTimer;
       /*为软件定时器申请内存*/    pxNewTimer = ( Timer_t * ) pvPortMalloc( sizeof( Timer_t ) );
       if( pxNewTimer != NULL )    {        prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );
           #if( configSUPPORT_STATIC_ALLOCATION == 1 )        {            /* 定时器可以静态创建,也可以动态创建,注意这个计时器是动态创建的,以防稍后删除计时器 */            pxNewTimer->ucStaticallyAllocated = pdFALSE;        }        #endif /* configSUPPORT_STATIC_ALLOCATION */    }
       return pxNewTimer;}#endif /* configSUPPORT_STATIC_ALLOCATION */


    成功申请定时器后, 定时器并没有开始工作, 需要调用启动或复位等API函数将该定时器中的 xTimerListItem 插入到定时器管理链表中, Daemon 任务才能在该定时器设定的溢出时刻调用其回调函数。

    4.3 启动定时器

    当用户创建并启动一个软件定时器时, FreeRTOS会根据当前系统时间及用户设置的定时确定该定时器唤醒时间,并将该定时器控制块挂入软件定时器列表

    下面来看一下当启动多个软件定时器时,软件定时器列表是如何来管理这些定时器的:

    例如:系统当前时间xTimeNow值为0,注意:xTimeNow其实是一个局部变量,是根据xTaskGetTickCount()函数获取的,实际它的值就是全局变量xTickCount的值,表示当前系统时间。

    4.3.1 例子1
  • 在当前系统中已经创建并启动了1个定时时间为200定时器Timer1

  • 当系统时间xTimeNow为20的时候,用户创建并且启动一个定时时间为100的定时器Timer2,此时Timer2的溢出时间xTicksToWait就为定时时间+系统当前时间(100+20=120),然后将Timer2按xTicksToWait升序插入软件定时器列表中



  • 相关产品

    联系方式

    • 电  话:15903418770
    • 联系人:张经理
    • 手  机:15915421161
    • 微  信:15915421161