[AIROC™ 蓝牙]【英飞凌CYW20829测评】基础任务:串口调试


基础任务:串口调试
一、说明
    在嵌入式领域,在没有GUI情况下,串口调试很重要,如输入“ver”查询版本号,输入“chip”回应芯片信息等等。由于C的可移植性,先简单在PC模拟一下,再移植到MCU:

二、编码
    可直接在例程UART_Transmit_and_Receive基础上进行修改,新建cmd.h:
复制
#ifndef __CMD_H__

#define __CMD_H__

typedef void (*pCmd)(void);

typedef struct{

    char *cmdName;

    pCmd cmdHandler;

}cmdTab_t;

extern cmdTab_tcmdList[];

extern int cmdNum;

#endif
Cmd.c:
复制
#include <stdio.h>

#include "cmd.h"

void verHandler(void);

void chipHandler(void);

cmdTab_t cmdList[]=

{

    {"ver",verHandler},

    {"chip",chipHandler}

};

int cmdNum=sizeof(cmdList)/sizeof(cmdTab_t);

void verHandler()

{

    printf("%s%s\n",__DATE__,__TIME__);

}

void chipHandler()

{

    printf("Infineon CYW20829\n");

}
主函数添加shell指令处理流程:
复制
#include "cmd.h"

#include <string.h>

#defineBUFF_SIZE                  (64)

char txBuff[BUFF_SIZE];

char rxBuff[BUFF_SIZE];

volatile bool rxEnd = 0;

volatile int txBuffIndex= 0;

volatile int rxBuffIndex= 0;
主循环:
复制
    for (;;)

    {

        if (CY_RSLT_SUCCESS == cyhal_uart_getc(&cy_retarget_io_uart_obj,

                                              (uint8_t *)&rxBuff[rxBuffIndex],0))

        {

         if(rxBuff[rxBuffIndex]=='\r'||rxBuff[rxBuffIndex]=='\n')

         {

            rxEnd=1;

         }

         else

            rxBuffIndex++;

         if(rxEnd==1&&rxBuffIndex!=0)

         {

            rxBuff[rxBuffIndex]='\0';

            inti=0;

            for(;i<cmdNum;i++)

            {

                if(strcmp(rxBuff,cmdList.cmdName)==0)

                {

                    printf("%s\n",rxBuff);//回显

                    cmdList.cmdHandler();

                    break;

                }

            }

                if (i==cmdNum)

                {

                   printf("Cmd not found\n");

                }

               rxBuffIndex=0;

         }

         rxEnd=0;

        }

        else

        {

           handle_error();

        }

    }
三、效果
    可以看到单线程死循环能很好执行指令并返回结果,和PC上效果一致:


---------------------
作者:mingxiangjun
链接:https://bbs.21ic.com/icview-3389364-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值