USB CDC 可变形参
控制台的三种连接方式:
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 <APN> <Context ID> <PDP Type>",.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<CR> 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>。
- char *str [out],把生成的格式化的字符串存放在这里.
- size_t size [in], str可接受的最大字符数 [1] (非字节数,UNICODE一个字符两个字节),防止产生数组越界.
- const char *format [in], 指定输出格式的字符串,它决定了你需要提供的可变参数的类型、个数和顺序。
- va_list ap [in], va_list变量. va:variable-argument:可变参数
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
转载于:https://www.cnblogs.com/jiangzhaowei/p/8982172.html
USB CDC 可变形参相关推荐
- stm32f407 usb cdc设备无法启动问题
最新要做一个项目,要求基于STM32F407实现USB CDC设备,首先想到的就是直接用STM32CUBEMX工具来生成,OK,话不多说,直接上过程: RCC配置: Sys配置 USB_OTG_FS配 ...
- IOS之学习笔记六(可变形参)
1.实现函数的可变形参 1).va_list:这是一个可变类型,用于定义指向可变参数列表的指针变量 2).va_start:让argList指向一个可变参数列表的第一个参数 3).提取argList当 ...
- GD32F3x0 USB CDC应用案例
GD32F3x0 USB CDC应用 本文有点长,描述了从0开始移植驱动到应用的过程和思路 准备工作: 因项目需求这两天需要做个USB的虚拟COM口发卡器,实现双向通讯,由于功能较为简单我们选择GD3 ...
- 在进行USB CDC类开发时,无法发送64整数倍的数据(续)
1 前言 此文延续之前相同文章的话题,是对上篇文章的补充,之所以会有此文,主要是之前发现问题是在STM32F4上,解决方案也是基于CubeF4,但是,当相同问题出现在STM32F0上时,使用之前的代码 ...
- 在进行USB CDC类开发时,无法发送64整数倍的数据
1 前言 本文将基于STM32F4DISCOVERY板,介绍如何使用USB的CDC类进行开发,以及在开发过程中碰到发送64整数倍数据时会失败的问题分析及解决方案. 2 硬件介绍 在创建工程之前,我们首 ...
- TI CC2540 USB CDC Serial Port驱动安装失败原因及解决方法
TI CC2540 USB CDC Serial Port驱动安装失败原因及解决方法 参考文章: (1)TI CC2540 USB CDC Serial Port驱动安装失败原因及解决方法 (2)ht ...
- USB CDC从理论到实践
本文摘自ST官网的"USB CDC类入门培训".整理的内容是我能够看得懂的,认为比较实用的,记录下来,以便以后查阅,同时也把原文档中的笔误给更正了一下.若要看更详细的可以去ST技术 ...
- USB CDC 4G Module 调试问题总结
USB CDC 4G Module ESP32S2 自定义开发板 SIM7600C1 其他按照github USB CDC 4G Module 使用说明 确保硬件正确SIM卡正常 编译注意做好在4.4 ...
- 关于JAVA中的可变形参(多个参数)
说到可变参数,要先说一下函数的重载, 重载:函数名称,修饰符,返回值都一样,只有变量的个数,变量的类型不一样,才叫重载. 比如说声明一个类,People,对该类中的getNum()方法进行重载,如下图 ...
最新文章
- Flask 教程 第十三章:国际化和本地化
- 计算几个数相加和为16
- java版b2b2c社交电商springcloud分布式微服务 (九)服务链路追踪(Spring Cloud Sleuth)...
- 03-spring bean
- Android内核开发:学会分析系统的启动log
- 1.MySQL的安装(linux Ubuntu环境下)
- 又一国产开源微内核操作系统上线!源代码已开放下载
- Qt+OpenCV打开视频文件并在窗口界面上显示
- 【转】Azure 命令行工具大混战,都是什么,该选哪个?
- 信息奥赛一本通(1100:金币)
- 用Docker搭建Laravel开发环境
- 《Python入门到精通》流程控制语句
- 数据库设计中的14个技巧(转载)
- Safari中的代理设置(在【偏好设置中】)。
- TensorFlow安装中遇到的问题
- Swift 2.0 自定义cell和不同风格的cell
- 看看!挺动人的故事!!!
- 《java深度历险》--王森
- c语言flappy bird编程,C语言实现Flappy Bird小游戏
- 如何制作生成GIF?手把手教你生成GIF动态图
热门文章
- miniui 加载文件时会做的一些事情
- 【linux 06】 linux中的用户权限、文件权限与目录权限
- STL 二分查找 upper_bound和lower_bound用法
- 把docker当做绿色打包工具
- 关于equals和hashcode方法
- fatal error RC1004: unexpected end of file found处理方法
- FAILED BINDER TRANSACTION
- Linux的权限管理 1
- 微服务实践:全栈小团队“洪荒之力”改造阿里服务CRM技术体系
- JavaEE PO VO BO DTO POJO DAO 整理总结