当前位置: 首页 > news >正文

【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序+VScode建立工程+usb组件添加+-基础样例学习】

【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序-基础样例学习】

  • 1、概述
  • 2、实验环境
  • 3-1、 物品说明
  • 3-2、所遇问题:ESP32 cannot open source file "tinyusb.h"或者“tinyusb.h:No such file or directory ....”
  • 3-3、解决问题:被抛弃,变成组件了,需要添加组件
  • 4、自我总结
  • 5、本次实验说明
  • 6、实验过程
    • (1)复制目录到桌面
    • (2)VScode建立工程-详细步骤
      • 1:命令模式,建立模板
      • 2:建立
      • 3:选择文件夹
      • 4:选择模板APP
      • 5:如此就会出现一个模板了
    • (3)手动敲写代码
      • 1:选择端口
      • 2:选择芯片
      • 3:编译
      • 4:加入组件-解决问题演示
      • 5:使能usb模拟串口
    • (4)加入信息解析部分
    • (5)串口验证
  • 7、代码连接
  • 8、相关细节
      • (1)相关官方文档:USB外设说明
      • (2)github上相关说明与代码
      • (3)编译环境配置
      • (4)练习回复信息,报错,代码写法问题。
      • (5)其他错误:误导的博客,注意自查
      • (6)没有文件build.ninja
      • (7)命令行尝试,历史截图
  • 9、总结

1、概述

最为新手,想要快速入门相关设备,比如ESP32,可能最好的方式就是直接手动去敲一遍代码,而USB模拟串口其中一个应用,自己作为新手,虽然只是简单运行这个历程,但是认为依然有记录的价值。自己感觉官网样例还是有点晦涩难懂,今天我们就是学习这个样例。

2、实验环境

ESP32说明:ESP32-S3 是一款集成 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE) 的 MCU 芯片,支持远距离模式 (Long Range)。ESP32-S3 搭载 Xtensa® 32 位 LX7 双核处理器,主频高达 240 MHz,内置 512 KB SRAM (TCM),具有 45 个可编程 GPIO 管脚和丰富的通信接口。ESP32-S3 支持更大容量的高速 Octal SPI flash 和片外 RAM,支持用户配置数据缓存与指令缓存。

硬件信息:开发板 ESP32-S3-DevKitM-1(EPS32-S3-wroom-1模块)
在这里插入图片描述

其它硬件:杜邦线,两个usb-type-c连接线。

3-1、 物品说明

ESP32对自己来说还是比较新的,最近也是刚刚接触,这里对自己使用ESP32进行简单说明。
博文链接:【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】
在这里插入图片描述

另外如果对ESP32相关型号比较感兴趣,可以去官网查看,或者找些资。
官网文档:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitm-1.html
在这里插入图片描述
在这里插入图片描述

3-2、所遇问题:ESP32 cannot open source file "tinyusb.h"或者“tinyusb.h:No such file or directory …”

在运行过程中,发现报错如下:
在这里插入图片描述

3-3、解决问题:被抛弃,变成组件了,需要添加组件

文档说明链接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/migration-guides/release-5.x/5.0/removed-components.html?highlight=tinyusb%20h

在这里插入图片描述
相关链接:https://components.espressif.com/components/espressif/esp_tinyusb

在这里插入图片描述
具体命令

idf.py add-dependency esp_tinyusb~1.4.2

这块 自己也反复重试才通过的,运行上述命令后,如下图所示

重新编译,可以看到多了文件,就是添加进来的组件

在这里插入图片描述
在这里插入图片描述

4、自我总结

(1)本案例难点:问题相关
自己认为本样例难点,不是说练习代码或者理解代码,而是如何解决问题。如果你拿样例直接编程,不会出现任何问题,但是自己手动重建时,必然会遇到,而网上对这个说的比较少。

(2)USB模拟串口会覆盖掉原本串口,下载需要复位启动
因为使用USB模拟串口,USB原本是用来下载的,所以使用本次样例,USB连接的串口,会变成另一个串口,下载的时候,要重新复位才可以。

(3)自己增加恢复信息的代码
自己的尝试的时候,想着,如何发送消息为特定时候,ESP32会回一些消息。也遇到了一些问题,经过大佬指导,也顺利解决了,这主要自己对基础语法不熟练吧,也能体现练习必要性。

(4)样例说明
本样例,就是你发送什么信息,ESP32的模拟串口,收到后,就会回复给你什么信息。

5、本次实验说明

本次实验是使用样例tusb_serial_device,直接复制一份在桌面,然后手动敲写一遍。
然后加入了一些自己的设定,收到自己的规定的字符的时候,不是回复对应信息,而是回复特定信息。

自己在另一台电脑上,安装在D盘,找如下目录。

D:\Espressif\frameworks\esp-idf-v5.1.1\examples\peripherals\usb\device\tusb_serial_device

在这里插入图片描述

6、实验过程

(1)复制目录到桌面

在这里插入图片描述

(2)VScode建立工程-详细步骤

我们重新使用使用VScode建立一个工程。
相关环境可以看这个:
【ESP32-PC电脑windows-环境搭建-记录-hello-world-运行基础样例学习】

1:命令模式,建立模板

在这里插入图片描述

2:建立

在这里插入图片描述

3:选择文件夹

可以看到我这里有了,没有选择一个。
在这里插入图片描述
在这里插入图片描述

4:选择模板APP

在这里插入图片描述

5:如此就会出现一个模板了

在这里插入图片描述

在文件夹下,VScode就会添加一些文件,
在这里插入图片描述

(3)手动敲写代码

我们重新使用使用VScode建立一个工程。

我们可以继续需要VScode,进行练习代码了。
在main.c里加入手动桥写。

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <assert.h>
#include "freertos/FreeRTOS.h"
#include "freertos/semphr.h"
#include "freertos/task.h"
#include "freertos/timers.h"
#include "nvs_flash.h"
#include "esp_event.h"
#include "esp_netif.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "esp_system.h"
#include "esp_now.h"
#include "esp_crc.h"
#include "tinyusb.h"
#include "tusb_cdc_acm.h"
#include "sdkconfig.h"static const char *TAG = "example";
static uint8_t buf[CONFIG_TINYUSB_CDC_RX_BUFSIZE+1];
//static const char buf_send = "12345\n";
//static uint8_t buf_send="abcdef";
//const uint8_t *buf_send='12345';
//const uint8_t *buf_send='12345';
const uint8_t buf_send[]="ABCD78654321";void tinyusb_cdc_rx_callback(int itf,cdcacm_event_t *event){size_t rx_size=0;//size_t send_data_size=sizeof(buf_send);size_t send_data_size=strlen(&buf_send);//printf("Hello,USB Serial_rx_callback!\n");//ESP_LOGI(TAG,"Hello,USB Serial_rx_callback!\n");esp_err_t ret=tinyusb_cdcacm_read(itf,buf,CONFIG_TINYUSB_CDC_RX_BUFSIZE,&rx_size);if(buf[0]==0x31 && buf[1]==0x32 && buf[2]==0x33  ){tinyusb_cdcacm_write_queue(itf,buf_send,send_data_size);  tinyusb_cdcacm_write_flush(itf,0);}else{tinyusb_cdcacm_write_queue(itf,buf,rx_size);tinyusb_cdcacm_write_flush(itf,0);}if(ret==ESP_OK){ESP_LOGI(TAG,"Data from channel %d:",itf);ESP_LOG_BUFFER_HEXDUMP(TAG,buf,rx_size,ESP_LOG_INFO);}else{ESP_LOGE(TAG,"Read error");}// tinyusb_cdcacm_write_queue(itf,&buf_send,9);}void tinyusb_cdc_line_state_changed_callback(int itf,cdcacm_event_t *event){int dtr=event->line_state_changed_data.dtr;int rts=event->line_state_changed_data.rts;ESP_LOGI(TAG,"Line state_changed on channel %d: DTR:%d, RTS:%d",itf,dtr,rts);}void app_main(void)
{//初始化 USB的串口// printf("Hello,USB Serial!\n");// while(1){//     printf("output data:this is my app_usb_uart_test_wifi_test!\n");//     vTaskDelay(pdMS_TO_TICKS(1000));//      printf("test_wifi_file_tinyUSB.c_file!\n");//     vTaskDelay(pdMS_TO_TICKS(1000));// }ESP_LOGI(TAG,"USB initialization");const tinyusb_config_t tusb_cfg = {.device_descriptor = NULL,.string_descriptor = NULL,.external_phy = false ,.configuration_descriptor = NULL,};ESP_ERROR_CHECK(tinyusb_driver_install(&tusb_cfg));tinyusb_config_cdcacm_t acm_cfg = {.usb_dev = TINYUSB_USBDEV_0,.cdc_port = TINYUSB_CDC_ACM_0,.rx_unread_buf_sz = 64,.callback_rx = &tinyusb_cdc_rx_callback,   //the first way to register a callback.callback_rx_wanted_char = NULL,.callback_line_state_changed = NULL,.callback_line_coding_changed = NULL };ESP_ERROR_CHECK(tusb_cdc_acm_init(&acm_cfg));ESP_ERROR_CHECK(tinyusb_cdcacm_register_callback(TINYUSB_CDC_ACM_0,CDC_EVENT_LINE_STATE_CHANGED,&tinyusb_cdc_line_state_changed_callback));#if (CONFIG_TINYUSB_CDC_COUNT > 1)acm_cfg.cdc_port = TINYUSB_CDC_ACM_1;ESP_ERROR_CHECK(tinyusb_cdc_acm_init(&acm_cfg));ESP_ERROR_CHECK(tinyusb_cdcacm_register_callback(TINYUSB_CDC_ACM_1,CDC_EVENT_LINE_STATE_CHANGED,&tinyusb_cdc_line_state_changed_callback));#endifESP_LOGI(TAG,"USB_initialization DONE");}

然后自己手都敲写一遍。
在这里插入图片描述

1:选择端口

最好保证你只是连接一个esp32USB串口,一般没下代码的话,出现的串口就是下载端口。
如下,确保你的USB相关接口,连接的是USB上
在这里插入图片描述

而一般如你个下载过代码后,或者拿到手了时候,已经不是下载端口,或者说,已经是模拟串口了,该怎么能,就需要重新复位下ESP32.
在这里插入图片描述
复位后,立刻使用串口工具查看,这样出现的端口,就是下载端口。
在这里插入图片描述
然后我们在VScode选择串口
在这里插入图片描述

2:选择芯片

之后就是选择芯片了,这就像进行如下的命令
在这里插入图片描述
在这里插入图片描述
选择匹配的型号
在这里插入图片描述
选择下载方式
在这里插入图片描述

然后软件就会帮助我们,建立文件夹“build”。
在这里插入图片描述
加入编译需要文件
在这里插入图片描述

3:编译

对于命令行下,其实就是命令

idf.py build

在这里插入图片描述
编译过程如下

在这里插入图片描述

4:加入组件-解决问题演示

一般不出意外,都会出现错误,告诉你没有发现这个tusbxxx相关文件。

在这里插入图片描述
如果在"ESP-IDF 5.0 PowerShell"编译也是一样的
在这里插入图片描述
我们使用命令行进行加入组件。
具体命令

idf.py add-dependency esp_tinyusb~1.4.2

重新编译,可以看到多了文件,就是添加进来的组件

在这里插入图片描述
在这里插入图片描述

5:使能usb模拟串口

如下,报错,意思也很明显,需要使能,在menuconfig下设置
命令:

idf.py menuconfig

在这里插入图片描述
选择component config->TinyUSB Stack->com…
如下目录,这里也就不截图太多了,按照目录找吧
在这里插入图片描述
然后重新编译

(4)加入信息解析部分

可这块自己也是反了很多低级错误,或者说是对c代码写法不熟悉,最后大佬指点才弄明白吧。
如下代码,如果发的字符有“123(十六进制就是31 32 33)”,那么就返回字符串“ABCD…”
在这里插入图片描述

(5)串口验证

在这里插入图片描述

下载成功后,按下复位键,验证
(1)
在这里插入图片描述
(2)
可以看到如字符串首位是123,那么会回复自定义字符,如果开头是ABCD,那就回原始数据。
在这里插入图片描述

7、代码连接

代码链接:https://download.csdn.net/download/qq_22146161/88502147

8、相关细节

(1)相关官方文档:USB外设说明

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-reference/peripherals/usb_device.html?highlight=usb
在这里插入图片描述

(2)github上相关说明与代码

连接:https://github.com/espressif/esp-idf/tree/8fc8f3f479/examples/peripherals/usb/device/tusb_serial_device
在这里插入图片描述

(3)编译环境配置

相关配置情况自己的其他文章:【ESP32-PC电脑windows-环境搭建-记录-hello-world-运行基础样例学习】

(4)练习回复信息,报错,代码写法问题。

如下,自己对代码不熟练,总是提示一些写法问题。
在这里插入图片描述

(5)其他错误:误导的博客,注意自查

相关链接:https://blog.csdn.net/oHuanCheng/article/details/127203208
在这里插入图片描述
在这里插入图片描述

按照网上教程,说是解决找不到文件“”
在这里插入图片描述

结果尝试后,引入了其他问问题。
在这里插入图片描述

(6)没有文件build.ninja

如下图
在这里插入图片描述
一般需要重新设置下芯片。
命令:
在这里插入图片描述

(7)命令行尝试,历史截图

如下图,是自己在终端上所做的尝试,前面VScode构建工程,后面"ESP-IDF 5.0 PowerShell"添加组件和编译下载什么的。

  Id CommandLine-- -----------1 cd C:\Users\Admin\Desktop\esp_32_work\now_test_tusb_serial_device\template-app2 idf.py add-dependency esp_tinyusb~1.4.23 idf.py add-dependency esp_tinyusb 1.4.24 idf.py add-dependency esp_tinyusb~1.4.25 idf.py add-dependency esp_tinyusb~1.0.06 idf.py add-dependency "espressif/esp_tinyusb^1.4.2"7 idf.py add-dependency esppressif/esp_tinusb8 idf.py build9 idf.py menuconfig10 idf.py build11 idf.py build12 idf.py build13 idf.py build14 idf.py -p com27 flash15 idf.py build16 idf.py -p com27 flash

在这里插入图片描述

9、总结

时间有点久了,我都记不住了,多尝试吧吧,这样这块也算了一段学习了。

另外这样我们也有了 使用VScode建立工程相关经验了。以后就可以以这个为参照了。

相关文章:

【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序+VScode建立工程+usb组件添加+-基础样例学习】

【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序-基础样例学习】 1、概述2、实验环境3-1、 物品说明3-2、所遇问题&#xff1a;ESP32 cannot open source file "tinyusb.h"或者“tinyusb.h:No such file or directory ....”3-3、解决问题&#…...

LeetCode75——Day26

文章目录 一、题目二、题解 一、题目 394. Decode String Given an encoded string, return its decoded string. The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guar…...

面试算法53:二叉搜索树的下一个节点

题目 给定一棵二叉搜索树和它的一个节点p&#xff0c;请找出按中序遍历的顺序该节点p的下一个节点。假设二叉搜索树中节点的值都是唯一的。例如&#xff0c;在图8.9的二叉搜索树中&#xff0c;节点8的下一个节点是节点9&#xff0c;节点11的下一个节点是null。 分析&#xf…...

2023SHCTF web方向wp

1.ezphp 看一眼&#xff0c;你大爷&#xff0c;啥玩意都给我过滤完了。 还好下面有preg_replace()/e&#xff0c;会把replacement当作php语句执行 传参pattern.*&#xff0c; .*表示任意字符&#xff0c;code{${phpinfo()}} &#xff0c;为什么这样写&#xff0c;因为,print_…...

从物理磁盘到数据库 —— 存储IO链路访问图

原图来自&#xff1a;数据库IO链路访问图 – OracleBlog 由于很复杂&#xff0c;为了加深理解自己重新画了一次&#xff0c;另外参考其他文档补充了各部分的插图和介绍。 一、 存储服务器 1. 物理磁盘 外层的壳子称为硬盘笼 cage 2. chunklet Chunklet 是一个虚拟概念而不是实…...

基于java+springboot+vue在线选课系统

项目介绍 本系统结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;采用JAVA语言&#xff0c;结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。员工管理系统主要包括个人中心、课程管理、专业管理、院系信息管理、学生…...

GO学习之 同步操作sync包

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...

NUUO网络摄像头(NVR)RCE漏洞复现

简介 NUUO Network Video Recorder&#xff08;NVR&#xff09;是中国台湾NUUO公司的一款网络视频记录器。 NUUO NVR视频存储管理设备的__debugging_center_utils___.php文件存在未授权远程命令执行漏洞&#xff0c;攻击者可在没有任何权限的情况下通过log参数执行任意命令。…...

一款快速获取目标网站关键信息的工具

1.摘要 今天要介绍的这款工具是一个快速收集网站信息的开源脚本, 采用Python语言编写, 该工具可以快速收集网站的页面标题、网站上次更新日期、DNS信息、子域、防火墙名称、网站使用的技术栈、证书等信息, 默认支持对验证码和JavaScript内容执行绕过操作。 2.工具安装使用 使…...

将GC编程语言引入WebAssembly的新方法

本文讨论了一种名为 WasmGC 的新方法&#xff0c;用于将垃圾收集编程语言有效地引入 WebAssembly。 WasmGC 定义了新的 GC 类型&#xff0c;例如结构和数组&#xff0c;与之前编译为线性内存的方法 (WasmMVP) 相比&#xff0c;它们可以实现更好的优化&#xff1a; 在编译时和…...

微信小程序UI自动化测试实践:Minium+PageObject

小程序架构上分为渲染层和逻辑层&#xff0c;尽管各平台的运行环境十分相似&#xff0c;但是还是有些许的区别&#xff08;如下图&#xff09;&#xff0c;比如说JavaScript 语法和 API 支持不一致&#xff0c;WXSS 渲染表现也有不同&#xff0c;所以不论是手工测试&#xff0c…...

Java零基础入门-输入与输出

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…...

iOS报错命名空间“std”中的“unary_function”

刚刚将我的 Xcode 升级到 15.0&#xff0c;突然它开始在 RCT_Folly 中出现以下错误 No template named unary_function in namespace std; did you mean __unary_function?我尝试删除缓存数据和派生数据并清理构建。也尝试删除 pod 和 node_modules。但没有任何帮助。 于是我…...

Flink SQL 窗口聚合详解

1.滚动窗⼝&#xff08;TUMBLE&#xff09; **滚动窗⼝定义&#xff1a;**滚动窗⼝将每个元素指定给指定窗⼝⼤⼩的窗⼝&#xff0c;滚动窗⼝具有固定⼤⼩&#xff0c;且不重叠。 例如&#xff0c;指定⼀个⼤⼩为 5 分钟的滚动窗⼝&#xff0c;Flink 将每隔 5 分钟开启⼀个新…...

中间件redis的使用

Java中的中间件配置体现在springboot的yml配置文件中。Springboot框架支持微服务和中间件和restful api远程服务的调用。中间件是Java web系统的中间层的服务系统的调用接口。Springboot的自动装配和约定大于配置机制初始化springcontext的容器空间和注册组件。使用容器管理服务…...

Why delete[] array when deepcopying with “=“?

代码负责释放对象之前已经分配的资源&#xff0c;比如堆上的内存。在执行深拷贝之前&#xff0c;你需要确保对象不再引用之前的资源&#xff0c;以避免内存泄漏。通过删除先前的资源&#xff0c;你可以确保在进行深拷贝之前&#xff0c;已经释放了之前的资源&#xff0c;从而避…...

curl(六)DNS解析、认证、代理

一 DNS解析 ① ip协议 使用ipv4 [-4] 还是ipv6 [-6] ② --resolve 场景&#xff1a; 在不修改系统配置文件 /etc/hosts 的情况下将单个请求临时固定到 ip 地址 1、使用 * 作为通配符,这样请求中调用的所有 Host 都 会转到你指定的 ip curl https://www.wzj.com --resolv…...

(免费领源码)PHP#MySQL高校学生信息管理系统28099-计算机毕业设计项目选题推荐

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用php技术建设学生信息管理系统设计。…...

[动态规划] (四) LeetCode 91.解码方法

[动态规划] (四) LeetCode 91.解码方法 91. 解码方法 题目解析 (1) 对字母A - Z进行编码1-26 (2)11106可以解码为1-1-10-6或者11-10-6, 但是11-1-06不能解码 (3) 0n不能解码 (4) 字符串非空&#xff0c;返回解码方法的总数 解题思路 状态表示 dp[i]&#xff1a;以i为结…...

Vue Vuex的使用和原理 专门解决共享数据的问题

Vuex专门解决共享数据的问题 多组件共享时使用&#xff0c;如用户ID各组件需要根据ID发送请求获取数据&#xff0c;任意组件可以进行增删改&#xff0c;相当于全局变量 Vuex 工作流程 如果确定值参数可以不经过Actions 直接走 安装Vuex vue2使用 vuex3 vue3使用 vuex4 npm i…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...