定时器Demo
```OSATimerRef timerRef;
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
#include <ctype.h>
#include <stddef.h>
#include <stdio.h>
#include <stdint.h>
#include "osa.h"
#include "UART.h"
#include "sockets.h"
#include "ip_addr.h"
#include "netdb.h"
#include "sys.h"
#include "sdk_api.h"
#undef printf
#define printf(fmt, args...) do { fatal_printf("[sdk]"fmt, ##args); } while(0)
#define UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )
#define sleep(x) OSATaskSleep((x) * 200)//second
extern UART_Port gATUARTIntPortNum;
#define DATA_MODE 0
#define AT_MODE 1
#define MAX_LINE_SIZE 260
#define AT_CMD_NAME_MAX_LEN 16
typedef enum {
DSAT_CMD_PREP_STATE_HUNT,
DSAT_CMD_PREP_STATE_FOUND_A,
DSAT_CMD_PREP_STATE_FOUND_AT,
} dsat_cmd_prep_state_enum_type;
typedef struct dsat_sio_info_s {
char cmd_line_buffer[MAX_LINE_SIZE];
char *build_cmd_ptr;
dsat_cmd_prep_state_enum_type at_cmd_prep_state;
} dsat_sio_info_s_type;
typedef enum {
DSAT_OK = 0,
DSAT_NO_CARRIER = 3,
DSAT_ERROR = 4,
} dsat_result_enum_type;
typedef struct {
int result;
char *response;
} AtCmdResponse;
static dsat_sio_info_s_type g_sio_info;
extern OSMsgQRef MsgUartData_sdk;
extern void set_UartDataSwitch_sdk(BOOL flag);
extern BOOL get_UartDataSwitch_sdk(void);
static void uartdata_thread(void);
// Device bootup hook before Phase1Inits.
// If you have some work to be init, you may implete it here.
// ex: you may start your task here. or do some initialize here.
extern void Phase1Inits_enter(void);
// Device bootup hook after Phase1Inits.
// If you have some work to be init, you may implete it here.
// ex: you may start your task here. or do some initialize here.
extern void Phase1Inits_exit(void);
// Device bootup hook before Phase2Inits.
// If you have some work to be init, you may implete it here.
// ex: you may start your task here. or do some initialize here.
extern void Phase2Inits_enter(void);
// Device bootup hook after Phase2Inits.
// If you have some work to be init, you may implete it here.
// ex: you may start your task here. or do some initialize here.
extern void Phase2Inits_exit(void);
void Phase1Inits_enter(void)
{
}
void Phase1Inits_exit(void)
{
}
void Phase2Inits_enter(void)
{
}
void Phase2Inits_exit(void)
{
OSA_STATUS status;
printf("%s[%d]: starting...\n", __FUNCTION__, __LINE__);
status = OSAMsgQCreate(&MsgUartData_sdk, "MsgUartData_sdk", sizeof(MsgUartDataParam_sdk), 500, OS_FIFO);
DIAG_ASSERT(status == OS_SUCCESS);
sys_thread_new("uartdata_thread", uartdata_thread, NULL, DEFAULT_THREAD_STACKSIZE*2, 161);
}
/* This function send data to uart. */
static void send_to_uart(char *toUart, int length)
{
char *sendData = NULL;
printf("%s[%d]:toUart=%s, length=%d\n", __FUNCTION__, __LINE__, toUart, length);
sendData = (char *)malloc(length+1);
ASSERT(sendData != NULL);
memset(sendData, 0, length+1);
memcpy(sendData, toUart, length);
sendData[length] = '\0';
printf("%s[%d]:send to uart data=%s, length=%d\n", __FUNCTION__, __LINE__, sendData, length);
send_data_2uart(gATUARTIntPortNum, (UINT8 *)sendData, length);
printf("%s[%d]:sendData==NULL = %d\n", __FUNCTION__, __LINE__, (sendData==NULL));
if (sendData)
free(sendData);
}
static void uartdata_thread(void)
{
MsgUartDataParam_sdk uart_temp;
OSA_STATUS status;
set_UartDataSwitch_sdk(1); // open pass-through
while (1) {
memset(&uart_temp, 0, sizeof(MsgUartDataParam_sdk));
status = OSAMsgQRecv(MsgUartData_sdk, (UINT8 *)&uart_temp, sizeof(MsgUartDataParam_sdk), OSA_SUSPEND);//recv data from uart
if (status == OS_SUCCESS) {
if (uart_temp.UArgs) {
printf("%s[%d]: uart_temp len:%d, data:%s\n", __FUNCTION__, __LINE__, uart_temp.len, (char *)(uart_temp.UArgs));
send_to_uart((char *)(uart_temp.UArgs),uart_temp.len);
free(uart_temp.UArgs);
}
}
}
}
```