|
本帖最后由 tengye 于 2022-1-5 14:22 编辑
通用的一般格式:帧头+data+校验+帧尾
demo如下:
#include "Console.h"
#include "cQueue.h"
#include "CalculationTimeDelay.h"
#include "CommonProtocol.h"
#if USE_CONSOLE
tyu8Queue sTxQueue;
tyu8Queue sRxQueue;
#ifdef USE_UCOS_III
static OS_MUTEX Logmutex;
#define TaskCONSOLETCBSTAK_SIZE 128u
#define TASK_CONSOLE_PRIO 10
static OS_MUTEX printflogmutex;
static OS_TCB TASKCONSOLETCB;
static CPU_STK TaskCONSOLEWRLOCALTCBSTAK[TaskCONSOLETCBSTAK_SIZE];
static void ConsoleTaskUser(void *p_arg);
static void CreatTask(void);
static ProtocolData _p;
static unsigned char consolegetbuf[128];
static void consoleOnGetFrame(U8* buf, U32 bufLen, void* lParam);
#endif
#endif
void Init_ConsoleSerial(void)
{
#if USE_CONSOLE
InitQueue(sTxQueue);
InitQueue(sRxQueue);
SERIALPORTINIT;
#ifdef USE_UCOS_III
U16 stx = CONSOLE_STX;
U16 etx = CONSOLE_ETX;
Init_CP(&_p,consolegetbuf,128,CheckSum_CP,consoleOnGetFrame,NULL);
SetSTX_CP(&_p, (CPU_INT08U *)&stx, sizeof(stx));
SetETX_CP(&_p, (CPU_INT08U *)&etx, sizeof(etx));
SetCK_CP(&_p, 2, 4);
OS_ERR err;
OSMutexCreate ((OS_MUTEX *)&Logmutex, (CPU_CHAR *)"MutexForlog", (OS_ERR *)&err);
OSTaskCreate((OS_TCB *)&TASKCONSOLETCB,
(CPU_CHAR *)"Taskconsole",
(OS_TASK_PTR )ConsoleTaskUser,
(void *)0,
(OS_PRIO )TASK_CONSOLE_PRIO,
(CPU_STK *)&TaskCONSOLEWRLOCALTCBSTAK[0],
(CPU_STK_SIZE )TaskCONSOLETCBSTAK_SIZE / 10,
(CPU_STK_SIZE )TaskCONSOLETCBSTAK_SIZE,
(OS_MSG_QTY )5,
(OS_TICK )0,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
#endif
#endif
}
void ConsoleTaskUser(void *p_arg)
{
while(1)
{#ifdef USE_UCOS_III
OS_ERR err;
OSTimeDly(2, OS_OPT_TIME_DLY, &err);
#endif
uint8_t getdata;
while(1)
{
if(!QueueEmpty(sRxQueue))
{
PopQueue(sRxQueue,getdata);
PutDataSingleByte_CP(&_p,getdata);
}
else
{
AnalyzeData_CP(&_p);
break;
}
}
}
}
//这里就是解析成功后的回调函数
void consoleOnGetFrame(U8* buf, U32 bufLen, void* lParam)
{
u8 bufer[128];
for(int a=0; a<bufLen; a++)
{
bufer[a]=buf[a];
}
}
|
评分
-
查看全部评分
|