博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USB CDC & 可变形参
阅读量:6947 次
发布时间:2019-06-27

本文共 3865 字,大约阅读时间需要 12 分钟。

控制台的三种连接方式:

  1、IP网络

  2、USB

  3、UART

  

一:介绍USB CDC方式:

  

1、控制台配置如下:

  

2、USB

    Product ID 可以是:0x0000/0x5300/0x0238

    不同的值代表不同的COM口

  

3、CDC配置

  

 二:介绍UART配置:

  

  注意UART配置通道、波特率以及中断优先级,如下:

  

 

#include "g_testThread.h"void led_toggle_callback(sf_console_cb_args_t * p_args);const sf_console_command_t g_sf_console_commands[] ={ { .command = (uint8_t *)"TOGGLE",              //CMD   .help = (uint8_t *)"Toggle an LED",   .callback = led_toggle_callback,             //控制台命令回调   .context =  NULL }, {     .command  = (uint8_t *)"cell",     .help     = (uint8_t *)"Cell Provisioning info to be saved\r\n"               "             Usage:\r\n"               "               cell 
", .callback = led_toggle_callback, .context = NULL },};/* 1. Create Menu Structure */const sf_console_menu_t g_sf_console_root_menu ={ .menu_prev = NULL, .menu_name = (uint8_t *)"Command", .num_commands = (sizeof(g_sf_console_commands)) / (sizeof(g_sf_console_commands[0])), .command_list = &g_sf_console_commands[0]};/************************************************************************************************************************ Function Name: led_toggle_callback* Description : Implement Callbacks* Callback function provided to g_sf_console_commands[0]. Function is invoked when user inputs* TOGGLE
in the Console* Arguments : p_args -* Pointer to an instance type sf_console_cb_args_t* Return Value : None***********************************************************************************************************************/void led_toggle_callback(sf_console_cb_args_t * p_args){ bsp_leds_t leds; ioport_level_t level; /* Get LED list from BSP */ R_BSP_LedsGet(&leds); /* Read current level */ g_ioport.p_api->pinRead(leds.p_leds[0], &level); /* Invert level */ g_ioport.p_api->pinWrite(leds.p_leds[0], (ioport_level_t)!level);}/* Test Thread entry function */void g_testThread_entry(void){ /* TODO: add your own code here */ while (1) { g_sf_console0.p_api->prompt(g_sf_console0.p_ctrl, NULL, TX_WAIT_FOREVER);//TX_WAIT_FOREVER//TX_NO_WAIT //tx_thread_sleep (50); }}

测试如下:

  控制台支持CMD:  

    “TOGGLE”

    “CELL”

    “?”

    “?”:为帮助信息

    

 可变形参:

  1、_vsnprintf,_vsnprintf是C库函数之一,属于可变参数。用于向字符串中打印数据、数据格式用户自定义。头文件是#include <stdarg.h>。

    头文件:
    #include <stdarg.h>
    函数声明:
    int _vsnprintf(char* str, size_t size, const char* format, va_list ap);

 

    1.   char *str [out],把生成的格式化的字符串存放在这里.
    2.   size_t size [in], str可接受的最大字符数
       [1]  (非字节数,UNICODE一个字符两个字节),防止产生越界.
    3.   const char *format [in], 指定输出格式的字符串,它决定了你需要提供的可变参数的类型、个数和顺序。
    4.   va_list ap [in], va_list变量. va:variable-argument:可变参数
    函数功能:将可变参数格式化输出到一个字符数组。
    用法类似于vsprintf,不过加了size的限制,防止了内存溢出(size为str所指的存储空间的大小)。
    返回值:执行成功,返回最终生成字符串的长度,若生成字符串的长度大于size,则将字符串的前size个字符复制到str,同时将原串的长度返回(不包含终止符);执行失败,返回负值,并置 .
 [2] 
  2、va_star
    va_start,函数名称,读取可变参数的过程其实就是在 中,使用 ,遍历 中的参数列表,从低地址到高地址一个一个地把参数内容读出来的过程·
  具备了上述两个API,可变形参到控制台如下:
void print_to_console(const char *pFmt, ...){    UINT status;    char str[128];    uint8_t u8Len;    va_list args;    memset(str,0,128);    status = tx_mutex_get(&g_console_print_mutex, TX_WAIT_FOREVER);    if (status != TX_SUCCESS)        return;    va_start(args, pFmt);    u8Len = (uint8_t)vsnprintf(str, 128, pFmt, args);    va_end(args);    if (u8Len > 0)    {        g_sf_console0.p_api->write(g_sf_console0.p_ctrl, (const uint8_t *)str, TX_WAIT_FOREVER);    }    tx_mutex_put(&g_console_print_mutex);}

如使用宏实现:

//#define SEMI_HOSTING#ifdef SEMI_HOSTING#ifdef __GNUC__extern void initialise_monitor_handles (void);#endif#endif#ifdef SEMI_HOSTING#define xp_log(format, args...)             printf(format, ##args)#else#define xp_log(format, args...)             print_to_console(format, ##args)#endif

 

转载地址:http://xwenl.baihongyu.com/

你可能感兴趣的文章
pfSense各版本对应FreeBSD核心情况
查看>>
X3-02 gprs 设置
查看>>
单例模式
查看>>
Exchange 2010 禁用通讯组后,如何再启用。
查看>>
从hiredis使用出core谈谈redis多线程的使用
查看>>
leetcode解题报告:198 House Robber
查看>>
Spring @Value 无法获取到properties文件中的值
查看>>
Win8 采用受信任启动保障用户安全
查看>>
linux 安装 jdk bin
查看>>
数据库原理 西安电子科技大学(第三版) 付婷婷 第三章 课后习题答案
查看>>
一个透明色的左三角
查看>>
架构图
查看>>
查看计算机信息
查看>>
编程基础(哑元、内联)
查看>>
hadoop2.8的namenode节点用jps发现没有jobtracker 和tasktracke
查看>>
history 显示时间
查看>>
视频帧率对人眼主观感受的影响 2
查看>>
postfix+dovecot+foxmail虚拟用户配置
查看>>
【中国互联网不眠夜】Struts2漏洞百出,OneRASP鼎力相助
查看>>
C语言之main函数传参
查看>>