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[])),
.command_list = &g_sf_console_commands[]
}; /***********************************************************************************************************************
* 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[], &level); /* Invert level */
g_ioport.p_api->pinWrite(leds.p_leds[], (ioport_level_t)!level);
} /* Test Thread entry function */
void g_testThread_entry(void)
{
/* TODO: add your own code here */
while ()
{
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[];
uint8_t u8Len;
va_list args; memset(str,,);
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, , pFmt, args);
va_end(args); if (u8Len > )
{
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
USB CDC & 可变形参的更多相关文章
- ATMEL处理器自带USB CDC的Win7驱动问题
[背景] 很久以前使用ATMEL的处理器开发了一款设备,通过处理器本身的功能,借助USB在PC端虚拟一个串口出来,实现和上位机软件的通信,和基本的参数设置和数据读取功能. 这个功能就是ATMEL官网上 ...
- android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget
MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议.早在智能手机普及前,数码相机和MP3播放器等都使用了MTP的前身PTP(Pictu ...
- C语言中可变形参简单实例
以下程序主要包括三个主要函数: 一个最简单的可变形参函数实例: 一个简单的printf功能的实例: 一个打印字符串函数(辅助): 其中myPrintf函数,实现了printf的部分简单功能,并没有去实 ...
- 关于函数传参的其他问题(const形参实参/可变形参)
const 形参和实参 当形参是 const 变量时,实参是 const 或者不是 const 变量都可以. 实参初始化形参时会忽略掉顶层 const: void gel(const int a){ ...
- PIC24 通过USB在线升级 -- USB CDC bootloader
了解bootloader的实现,请加QQ: 1273623966 (验证填bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek 今 ...
- PIC32MZ 通过USB在线升级 -- USB CDC bootloader
了解bootloader 的实现,请加QQ: 1273623966 (验证填 bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek ...
- Java 类的重载/匿名类的使用/可变形参
/** *1.类的方法的重载 *2.匿名类对象的传递和引用 *3.可变个数的形参(格式:1/对于方法的形参: 数据类型...形参名 * 2/可变个数的形参与同名的方法之间构成重载 * 3/可变个数的形 ...
- 可变形参 Day07
package com.sxt.kebianxingcan; /* * 可变形参 * 声明:数据类型...标识符 * 作用:将实参作为数组处理 * 规则:一个方法只能有一个可变形参并且作为最后一个形参 ...
- USB CDC类
现代嵌入式系统中,异步串行通信接口往往作为标准外设出现在单片机和嵌入式系统中.但是随着个人计算机通用外围设备越来越少地使用串口,串口正在逐渐从个人计算机特别是便携式电脑上消失.于是嵌入式开发人员常常发 ...
随机推荐
- linux的文件,目录操作命令(mv,rm,cp)
1.mv :用于重命名文件或目录:用于转移文件或目录 重命名文件或目录:$mv filename overfile ; $mv dirname overdir(必须是当前目录下没有的,否则操作的是转移 ...
- 20145230《java学习笔记》第十周学习总结
20145230<Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或 ...
- numpy模块之创建矩阵、矩阵运算
本文参考给妹子讲python https://zhuanlan.zhihu.com/p/34673397 NumPy是Numerical Python的简写,是高性能科学计算和数据分析的基础包,他是 ...
- NSCoder
person.h头文件内容 #import <Foundation/Foundation.h> @interface Person : NSObject { NSString *name; ...
- 权限【TLCL】
用户帐户 定义在/etc/passwd 文件里面,用户组定义在/etc/group 文件里面. /etc/shadow 包含了关于用户密码的信息 文件属性: 属性 文件类型 - 一个普通文件 d 一个 ...
- Spark常用算子-value数据类型的算子
package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; im ...
- QPushButton 响应回车 设置默认按钮
ui.pushButton->setFocus(); //设置默认焦点 ui.pushButton->setShortcut( QKeySequence::InsertParagraphS ...
- Python之面向对象总结
一.面向对象 1.面向过程 a.优点:极大的降低了写程序的复杂度,只需要顺着执行的步骤,堆叠代码即可 b.缺点:一套流水线或者流程就是来解决一个问题,代码就是牵一发而东莞全身 2.面向对象 a.优点: ...
- review07
java类可以有两种重要的成员:成员变量和方法,实际上java还允许有一种成员:内部类.内部类是在一个类中定义另一个类.内部类和外嵌类的关系如下: (1)内部类的外嵌类的成员变量在内部类中仍然有效,内 ...
- node-并发控制
当我们在做一些爬虫小程序的时候,如果我们一次性爬的数据条较多,那么相关软件也许会有限制或者是认为我们是非法的.那么我们就需要一些机制去限制获取数据的条数.而且node为我们提供的并发获取数据都是异步的 ...