日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USB CDC 可变形参

發(fā)布時(shí)間:2024/4/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USB CDC 可变形参 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

控制臺(tái)的三種連接方式:

  1、IP網(wǎng)絡(luò)

  2、USB

  3、UART

  

一:介紹USB CDC方式:

  

1、控制臺(tái)配置如下:

  

2、USB

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

    不同的值代表不同的COM口

  

3、CDC配置

  

?二:介紹UART配置:

  

  注意UART配置通道、波特率以及中斷優(yōu)先級(jí),如下:

  

?

#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, //控制臺(tái)命令回調(diào).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); } }

測試如下:

  控制臺(tái)支持CMD:  

    “TOGGLE”

    “CELL”

    “?”

    “?”:為幫助信息

    

?可變形參:

  1、_vsnprintf,_vsnprintf是C庫函數(shù)之一,屬于可變參數(shù)。用于向字符串中打印數(shù)據(jù)、數(shù)據(jù)格式用戶自定義。頭文件是#include <stdarg.h>。

頭文件: #include <stdarg.h> 函數(shù)聲明: int _vsnprintf(char* str, size_t size, const char* format, va_list ap);

?

  • char *str [out],把生成的格式化的字符串存放在這里.
  • size_t size [in], str可接受的最大字符數(shù)?[1]??(非字節(jié)數(shù),UNICODE一個(gè)字符兩個(gè)字節(jié)),防止產(chǎn)生數(shù)組越界.
  • const char *format [in], 指定輸出格式的字符串,它決定了你需要提供的可變參數(shù)的類型、個(gè)數(shù)和順序。
  • va_list ap [in], va_list變量. va:variable-argument:可變參數(shù)
  • 函數(shù)功能:將可變參數(shù)格式化輸出到一個(gè)字符數(shù)組。 用法類似于vsprintf,不過加了size的限制,防止了內(nèi)存溢出(size為str所指的存儲(chǔ)空間的大小)。 返回值:執(zhí)行成功,返回最終生成字符串的長度,若生成字符串的長度大于size,則將字符串的前size個(gè)字符復(fù)制到str,同時(shí)將原串的長度返回(不包含終止符);執(zhí)行失敗,返回負(fù)值,并置errno.?[2]?   2、va_star va_start,函數(shù)名稱,讀取可變參數(shù)的過程其實(shí)就是在堆棧中,使用指針,遍歷堆棧段中的參數(shù)列表,從低地址到高地址一個(gè)一個(gè)地把參數(shù)內(nèi)容讀出來的過程· 具備了上述兩個(gè)API,可變形參到控制臺(tái)如下: 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); }

    如使用宏實(shí)現(xiàn):

    //#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

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/jiangzhaowei/p/8982172.html

    總結(jié)

    以上是生活随笔為你收集整理的USB CDC 可变形参的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。