硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1626|回复: 6
收起左侧

[μCOS-III] 开源一个通用通讯协议解析代码

  [复制链接]

8

主题

26

回帖

55

积分

初级会员

积分
55
发表于 2021-12-29 10:57:27 | 显示全部楼层 |阅读模式
本帖最后由 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];
    }

}


评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

8

主题

26

回帖

55

积分

初级会员

积分
55
 楼主| 发表于 2021-12-29 11:04:58 | 显示全部楼层
此解析算法可以处理粘包,分包,滤除无用数据。易用,稳定,可靠。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2021-12-29 11:18:47 | 显示全部楼层
感谢楼主分享。
回复

使用道具 举报

15

主题

73

回帖

118

积分

初级会员

积分
118
发表于 2021-12-30 10:30:15 | 显示全部楼层
插个眼
回复

使用道具 举报

4

主题

286

回帖

298

积分

高级会员

积分
298
发表于 2021-12-30 14:34:30 | 显示全部楼层
很好用的架构。学习一下。
回复

使用道具 举报

26

主题

50

回帖

128

积分

初级会员

积分
128
发表于 2021-12-30 15:05:27 | 显示全部楼层
学习一下
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2023-1-31 00:26:19 | 显示全部楼层
插个眼
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 05:13 , Processed in 0.283920 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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