5. Uso del temporizador M601

1 API relacionada con el temporizador


La API presentada en este artículo puede hacer referencia al archivo zyf_timer.h del SDK.


1.1 ZYF_CreateTimer
Esta función se utiliza para crear un temporizador.Cada tarea admite hasta 10 temporizadores.
· Prototipo de función
ZYF_Timer_t * ZYF_CreateTimer (devolución de llamada ZYF_TimeOutCallback, void * param);
· Devolución de llamada de parámetro
: la función de devolución de llamada del temporizador
param: se utiliza para pasar parámetros de usuario.
· Valor de retorno La
instancia de temporizador creada. NULL cuando hay memoria insuficiente o parámetros no válidos


1.3.2 ZYF_DeleteTimer
Esta función se utiliza para borrar el temporizador especificado
· Prototipo de función
int32_t ZYF_DeleteTimer (ZYF_Timer_t * timerId);
· Parámetro
timerId: el ID del temporizador a borrar
· El valor de retorno
ZYF_RET_OK indica que el registro es normal;
ZYF_RET_ERR_PARAM indica que se han usado todos los timbres_ERR_PARAM Terminar.


1.3.3 ZYF_StartTimer
Esta función se utiliza para iniciar un temporizador con un ID específico
. Prototipo de función

ZYF_StartTimer (ZYF_Timer_t * timerId, uint32_t interval);
· Parámetro
timerId: ID del temporizador
Intervalo: establece el intervalo de tiempo del temporizador, en ms
· Valor de retorno
ZYF_RET_OK éxito
ZYF_RET_ERR_PARAM indica error de parámetro


ZYF_StopTime 1.3.4 R & lt
Esta función se utiliza para detener el ID especificado por el temporizador.
· Prototipo de función
int32_t ZYF_StopTimer (ZYF_Timer_t * timerId);
· Parámetro
timerId: ID de temporizador
· Valor de retorno
ZYF_RET_OK Éxito
ZYF_RET_ERR_PARAM indica error de parámetro
Nota: Si registra el ID del temporizador en la tarea u opencpu, solo puede iniciar o detener el temporizador En la misma tarea, de lo contrario, el temporizador no se puede iniciar ni detener.

2 Introducción a las rutinas del temporizador


Este capítulo presenta principalmente cómo usar el ejemplo en el SDK para probar la función del temporizador por separado.
Método de compilación:. \ Examples \ build \ corresponde al archivo .bat haciendo doble clic para ejecutarlo o abriéndolo para compilar.
Archivo generado:. \ Out \ directorio correspondiente \ hex \ M601_example _ **. Pac

Cómo utilizar:
1. Utilice ZYF_CreateTimer () para crear un temporizador.
2. Utilice ZYF_StartTimer () para iniciar este temporizador.

#define OSI_LOG_TAG OSI_MAKE_LOG_TAG('T', 'I', 'M', 'E')

#include <stdint.h>
#include <string.h>

#include "zyf_trace.h"
#include "zyf_time.h"
#include "zyf_thread.h"
#include "zyf_app.h"
#include "zyf_uart.h"

static Uart_Param_t g_uart1param;

void ZYF_TimeTest(void)
{
    uint64_t utcsec = 0;
    ZYF_Time_t toutTime;
    ZYF_Time_t tTime = {
        .year = 2020,   
        .month = 02,    
        .day = 28,
        .hour = 19,
        .minute = 30,
        .second = 0,
        .timezone = 0
    };

    ZYF_SetLocalTime(&tTime);
    ZYF_ThreadSleep(2000);
    memset(&tTime, 0, sizeof(ZYF_Time_t));
    ZYF_GetLocalTime(&tTime);
    ZYF_LOG("time => %04d/%02d/%02d,%02d:%02d:%02d", tTime.year, tTime.month, tTime.day, tTime.hour, tTime.minute, tTime.second);
//    utcsec = ZYF_MakeTime(&tTime);
//    ZYF_LOG("total seconds => %ll",utcsec);
//    ZYF_Time2CalendarTime(utcsec,&toutTime);
//    ZYF_LOG("time => %04d/%02d/%02d,%02d:%02d:%02d", toutTime.year, toutTime.month, toutTime.day, toutTime.hour, toutTime.minute, toutTime.second);
}



void TimeThread_Example(void * Param)
{
    ZYF_MsgQ_t *ptMsg;
    ZYF_AppMsg_t tMsg;
    int iRet = -1;
    ptMsg = ZYF_MsgQCreate(10, sizeof(ZYF_AppMsg_t));
    ZYF_LOG("thread enter!");

    ZYF_TimeTest();
    
    while (1) {
        ZYF_LOG("in while.");
        iRet = ZYF_MsgQGet(ptMsg, (void *)&tMsg);
        if (iRet < 0) {
            ZYF_LOG("Failed to get msg");
            ZYF_ThreadSleep(1000);
        }
    }

}


void UartWriteCallBack(void* Param) // general com
{
    Uart_Param_t *uartparam = (Uart_Param_t *)Param; 
    if(Param == NULL)
    {
        return;
    }    

    ZYF_UartWrite(uartparam->port,(uint8_t *)"UartWrite succeed\r\n",strlen("UartWrite succeed\r\n"));
    ZYF_UartWriteCallbackSwitch(uartparam->port,false);

}

void UartReadCallBack(void* Param) // 
{
    uint32_t recvlen = 0;
    Uart_Param_t *uartparam = (Uart_Param_t *)Param; 

    ZYF_LOG("Uart%d recv",uartparam->port);

    while(ZYF_UartRead(uartparam->port, &(uartparam->uartbuf[recvlen]), 1))
    {
        ZYF_LOG("recv :%02x",uartparam->uartbuf[recvlen]);
        recvlen++;
    }
    ZYF_UartWrite(uartparam->port,uartparam->uartbuf,recvlen);
    ZYF_UartWriteCallbackSwitch(uartparam->port,true);
}


static void AppUartInit(void)
{
    int32_t ret;
    g_uart1param.port = DEBUG_PORT;
    ZYF_UartRegister(g_uart1param.port, UartReadCallBack,&g_uart1param);
    ZYF_UartWriteCbRegister(g_uart1param.port,UartWriteCallBack,&g_uart1param);
    ZYF_UartOpen(g_uart1param.port, 115200, ZYF_FC_NONE);

    ZYF_LOG("AppUartInit");
    return;
}


static void prvInvokeGlobalCtors(void)
{
    extern void (*__init_array_start[])();
    extern void (*__init_array_end[])();

    size_t count = __init_array_end - __init_array_start;
    for (size_t i = 0; i < count; ++i)
        __init_array_start[i]();
}


int appimg_enter(void *param)
{
    AppUartInit();
    ZYF_LOG("application image enter, param 0x%x", param);

    prvInvokeGlobalCtors();

    ZYF_ThreadCreate("UartThread_Example", TimeThread_Example, NULL, ZYF_PRIORITY_HIGH, 10*1024);
    return 0;
}

void appimg_exit(void)
{
    OSI_LOGI(0, "application image exit");
}



 

Supongo que te gusta

Origin blog.csdn.net/w_hizyf_m/article/details/107083755
Recomendado
Clasificación