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

TM4C123库函数学习(3)---串口中断

前言

(1)学习本文之前,需要先学习前两篇文章。
(2)学习本文需要准备好TTL转USB模块。

函数介绍

ROM_GPIOPinConfigure()

配置GPIO引脚的复用功能。因为引脚不可能只有一个输出输入作用,还可能能够当作复用引脚。所以这个函数用于当IO需要用于其他功能的时候,调用这个函数。

/****** 函数声明 ******/
//这个存放在ROM
void ROM_GPIOPinConfigure(uint32_t ui32PinConfig);
//这个是存放在flash
void GPIOPinConfigure(uint32_t ui32PinConfig);/****** 函数介绍 ******/
/* 作用 : 配置GPIO引脚的复用功能。* 传入参数 : 参数在 pin_map.h 中选择,例如 GPIOPinConfigure(GPIO_PB0_U1RX);是把 PB0 复用为
U1RX* 返回参数 : 无
*/

ROM_GPIOPinTypeUART()

配置UART外设使用的引脚。

/****** 函数声明 ******/
//这个存放在ROM
void ROM_GPIOPinTypeUART(uint32_t ui32Port,uint8_t ui8Pins);
//这个是存放在flash
void GPIOPinTypeUART(uint32_t ui32Port,uint8_t ui8Pins);/****** 函数介绍 ******/
/* 作用 : 配置UART外设使用的引脚。* 传入参数 : * ui32Port : GPIO口的基地地址,GPIO_PORTx_BASE,x可为A,B,C,D,E,F,G,H* ui8Pins : GPIO_PIN_X,x可为1,2,3,4,5,6,7* 返回参数 : 无
*/

ROM_UARTConfigSetExpClk()

(1)设置UART的配置。
(2)这里需要注意一个点,UARTStdioConfig()函数也可以配置串口,但是我个人不建议使用这个配置。因为这个函数配置了之后,默认为使用 8 位数据,没有奇偶校验位,1 停止位。虽然我们后面也是这样配置。
(3)UARTStdioConfig()这个函数有一个很重要的点,如果是调用这个函数配置的串口,可以使用UARTprintf()函数,却不能使用UARTCharput()函数,用UARTConfigSetExpClk()配置的函数可以使用UARTCharput()函数,却不能使用UARTprintf()函数。
(4)UARTprintf()是一个伪printf()函数,使用方法与printf()函数一致。但是这样做的话会有两个问题:
<1>如果调用UARTprintf()函数,但是单片机有多个串口同时打开了,都需要输出。这样UARTprintf()函数到底是对应的哪一个串口呢?
<2>这个函数使用起来不灵活。比如,数据类型限制:UARTprintf函数只支持有限的数据类型,例如整数和浮点数等。如果需要输出其他数据类型,可能需要自己编写输出函数。格式化限制:UARTprintf函数使用标准的printf格式化字符串语法,但是并不支持所有的printf格式化字符串选项。例如,它不支持长整型(long)和长双精度浮点型(long double)等类型。缓冲区大小限制:UARTprintf函数使用一个内部的静态缓冲区来存储格式化后的字符串,因此输出的字符串长度受到缓冲区大小的限制。如果输出的字符串长度超过了缓冲区大小,可能会导致输出不完整或被截断。

/****** 函数声明 ******/
//这个存放在ROM
void ROM_UARTConfigSetExpClk(uint32_t ui32Base,uint32_t ui32UARTClk,uint32_t ui32Baud,uint32_t ui32Config);
//这个是存放在flash
void UARTConfigSetExpClk(uint32_t ui32Base,uint32_t ui32UARTClk,uint32_t ui32Baud,uint32_t ui32Config);/****** 函数介绍 ******/
/* 作用 : 设置UART的配置。* 传入参数 : * ui32Base : UART端口的基地址* ui32UARTClk : 提供给UART模块的时钟速率。* ui32Baud : 波特率* ui32Config : 可选参数如下:* 数据位 : UART_CONFIG_WLEN_8(8数据位),UART_CONFIG_WLEN_7(7数据位),UART_CONFIG_WLEN_6(6数据位),UART_CONFIG_WLEN_5(5数据位)* 停止位 : UART_CONFIG_STOP_ONE(1停止位),UART_CONFIG_STOP_TWO (2停止位)* 校验位 : UART_CONFIG_PAR_NONE(无校验位) ,UART_CONFIG_PAR_EVEN(偶校验),UART_CONFIG_PAR_ODD (奇校验),UART_CONFIG_PAR_ONE (1校验),UART_CONFIG_PAR_ZERO (0校验)* 返回参数 : 无
*/

ROM_UARTFIFODisable()

(1)用于禁用FIFO。
(2)FIFO是一个寄存器,串口通讯的数据可以将FIFO作为中转站,CPU需要发送数据,就将数据一次性发给FIFO,然后FIFO来处理。如果接收数据,也是先将数据接收到FIFO中,然后CPU再去处理。这样做的好处:
<1>这样做允许串口同时处理多个字符,而不需要等待每个字符都被处理完毕。这可以减少串口通信的延迟,提高通信效率。
<2>允许串口同时处理多个字符,而不需要等待每个字符都被处理完毕。这可以减少串口通信的延迟,提高通信效率。
<3>当使能FIFO缓冲区时,串口接收到的数据将被存储在FIFO缓冲区中,而不是直接传输到接收缓冲区。这可以减少中断的数量,从而提高系统响应速度。(注意:这样做的话串口的实时性就会降低很多!!!)
(3)因为我们想要串口接收到数据就马上进行反应,所以我们将FIFO禁用。

/****** 函数声明 ******/
//这个存放在ROM
void ROM_UARTFIFODisable(uint32_t ui32Base);
//这个是存放在flash
void ROM_UARTFIFODisable(uint32_t ui32Base);/****** 函数介绍 ******/
/* 作用 : 用于禁用FIFO。* 传入参数 : * ui32Base :要禁用FIFO的UART端口的基地址* 返回参数 : 无
*/

ROM_UARTIntEnable()

启用单独的UART中断源。

/****** 函数声明 ******/
//这个存放在ROM
void ROM_UARTIntEnable(uint32_t ui32Base,uint32_t ui32IntFlags);
//这个是存放在flash
void UARTIntEnable(uint32_t ui32Base,uint32_t ui32IntFlags);/****** 函数介绍 ******/
/* 作用 : 用于禁用FIFO。* 传入参数 : * ui32Base :UART端口的基地址* ui32IntFlags : UART_INT_9BIT(9位地址匹配中断),UART_INT_OE(错误中断,接收到的数据中出现了错误的“停止位”),UART_INT_BE(错误中断,数据接收器的缓冲区已满时,继续接收数据而导致之前接收到的数据被覆盖,从而引发中断),UART_INT_PE(奇偶校验错误中断),UART_INT_FE(帧错误中断),UART_INT_RT(接收超时中断),UART_INT_TX(发送中断),UART_INT_RX(接收中断),UART_INT_DSR(DSR中断),UART_INT_DCD(DCD中断),UART_INT_CTS(CTS中断),UART_INT_RI(RI中断)* 返回参数 : 无
*/

UARTIntRegister()

(1)UART中断函数注册
(2)这个的ROM函数似乎没有

/****** 函数声明 ******/
//这个是存放在flash
void UARTIntRegister(uint32_t ui32Base, void (*pfnHandler)(void));/****** 函数介绍 ******/
/* 作用 : UART中断函数注册* 传入参数 : * ui32Base :UART端口的基地址* void (*pfnHandler)(void) : 串口中断函数名字,此函数无返回值,无传入值* 返回参数 : 无
*/

ROM_IntPrioritySet()

设置中断的优先级。

/****** 函数声明 ******/
//这个存放在ROM
void ROM_IntPrioritySet(uint32_t ui32Interrupt,uint8_t ui8Priority);
//这个是存放在flash
void IntPrioritySet(uint32_t ui32Interrupt,uint8_t ui8Priority);/****** 函数介绍 ******/
/* 作用 : 设置中断的优先级* 传入参数 : * ui32Interrupt :指定所涉及的中断。在hw_ints.h中定义* ui8Priority : 中断优先级,当同时断言多个中断时,具有最高优先级的中断将在较低优先级的中断之前被处理。xxx0 0000,只看 xxx 前三位。比如0的优先级比0xE0高。* 返回参数 : 无
*/

printf重映射

(1)因为很多人喜欢使用printf重映射打印数据。所以这里我也进行简单的讲解。但是printf重映射只能映射一个串口,不过我下面还有一个方案,可以让所有的串口都能够printf重映射。
(2)我们只需要将x改动一下即可。同时需要打开MicroLIB。

在这里插入图片描述

//重新映射printf函数到UARTx,x可为1,2,3,4,5,6,7
int fputc(int ch, FILE *f){UARTCharPut(UARTx_BASE,ch);	return (ch);}
int fgetc(FILE *f) {int ch=UARTCharGet(UARTx_BASE);	return (ch);}printf("* 作者     : CSND 风正豪 \r\n");

多个串口同时重映射

直接复制如下的函数,就可以直接将多个串口初始

/* 作用 : 用于多路串口重定义* 传入参数 : baseAddress : 要打印的串口地址,UARTx_BASE,x可为0,1,2,3,4,5,6,7format : 需要打印的东西... : 如果是打印字符,输入%c。有符号数字,%d。用法与printf一样* 返回值 : 无
*/
void UART_printf(uint32_t baseAddress, const char *format,...)
{uint32_t length;va_list args;uint32_t i;char TxBuffer[128] = {0};va_start(args, format);length = vsnprintf((char*)TxBuffer, sizeof(TxBuffer), (char*)format, args);va_end(args);for(i = 0; i < length; i++){while(UARTBusy(baseAddress));UARTCharPut(baseAddress,TxBuffer[i]);}
}

实操

#include "stdio.h"
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdarg.h>
#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_gpio.h"
#include "hw_ints.h"
#include "debug.h"
#include "fpu.h"
#include "gpio.h"
#include "pin_map.h"
#include "rom.h"
#include "sysctl.h"
#include "uart.h"
#include "uartstdio.h"#ifdef DEBUG
void
__error__(char *pcFilename, uint32_t ui32Line)
{
}
#endif/*
*********************************************************************************************************
*	函 数 名: PrintfLogo
*	功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的串口终端软件可以观察结果
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void PrintfLogo(void)
{printf("*************************************************************\n\r");printf("* %s\r\n", "串口0控制RGB例程");	/* 打印例程名称 */printf("* 发布日期 : %s\r\n", "2023年4月24日");	/* 打印例程日期 */printf("* 使用芯片 : TM4C123GH6PZI7\r\n");printf("* 作者     : CSND 风正豪 \r\n");printf("*************************************************************\n\r");
}
/* 作用 : 用于多路串口重定义* 传入参数 : baseAddress : 要打印的串口地址,UARTx_BASE,x可为0,1,2,3,4,5,6,7format : 需要打印的东西... : 如果是打印字符,输入%c。有符号数字,%d。用法与printf一样* 返回值 : 无
*/
void UART_printf(uint32_t baseAddress, const char *format,...)
{uint32_t length;va_list args;uint32_t i;char TxBuffer[128] = {0};va_start(args, format);length = vsnprintf((char*)TxBuffer, sizeof(TxBuffer), (char*)format, args);va_end(args);for(i = 0; i < length; i++){while(UARTBusy(baseAddress));UARTCharPut(baseAddress,TxBuffer[i]);}
}//串口0的接收中断
static uint8_t ch;
void UART0_IRQHandler(void)
{		//获取中断标志 原始中断状态 屏蔽中断标志		uint32_t flag = UARTIntStatus(UART0_BASE,1);//清除中断标志			UARTIntClear(UART0_BASE,flag);//判断FIFO是否还有数据while(UARTCharsAvail(UART0_BASE))		{	//接收数据ch=UARTCharGet(UART0_BASE);}	
}void ConfigureUART0(void)
{ //使能UART使用的GPIO外设 ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);//使能 UART0ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);//配置UART模式的GPIO引脚ROM_GPIOPinConfigure(GPIO_PA0_U0RX);ROM_GPIOPinConfigure(GPIO_PA1_U0TX);ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);//设置串口0,时钟源速率为系统时钟,波特率为9600,8数据位,1停止位,无校验位UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 9600,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |UART_CONFIG_PAR_NONE));//禁用UART模块的FIFO缓冲区。减少串口接收的延迟,提高响应速度。UARTFIFODisable(UART0_BASE);//使能UART0接收中断	UARTIntEnable(UART0_BASE,UART_INT_RX);//UART0中断函数注册	UARTIntRegister(UART0_BASE,UART0_IRQHandler);//设置中断优先级ROM_IntPrioritySet(INT_UART0,0x60);
}//重新映射printf函数到UART0
int fputc(int ch, FILE *f){UARTCharPut(UART0_BASE,ch);	return (ch);}
int fgetc(FILE *f) {int ch=UARTCharGet(UART0_BASE);	return (ch);}void RGB_Init(void)
{ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);  //使能GPIOF外设	ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_5);//红色ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_6);//绿色ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_4);//蓝色ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_4);//置高位熄灭ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_5, GPIO_PIN_5);//置高位熄灭ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_6, GPIO_PIN_6);//置高位熄灭
}int main(void)
{ROM_FPUEnable();//使能浮点单元。这个函数必须在执行任何硬件浮点运算之前被调用;如果不这样做,将导致NOCP使用错误。ROM_FPULazyStackingEnable();//浮点延迟堆栈,减少中断响应延迟 ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |SYSCTL_OSC_MAIN);//配置系统时钟,系统时钟频率400M/2/2.5=80MRGB_Init();ConfigureUART0();//初始化串口0PrintfLogo();//串口打印版本信息while(1){if((int8_t)ch == 'a'){UARTprintf("Turn on the LED1\n"); //无法使用UART_printf(UART0_BASE,"%s\n","hello world");GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_5, !GPIO_PIN_5);//置低位点亮SysCtlDelay(SysCtlClockGet() / 10);    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_5, GPIO_PIN_5);//置高位熄灭SysCtlDelay(SysCtlClockGet() / 10);}if((int8_t)ch == 'b'){UART_printf(UART0_BASE,"2+2=%d\n",4);GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_6, !GPIO_PIN_6);//置低位点亮SysCtlDelay(SysCtlClockGet() / 10);    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_6, GPIO_PIN_6);//置高位熄灭SysCtlDelay(SysCtlClockGet() / 10);}if((int8_t)ch == 'c'){UART_printf(UART0_BASE,"2+2.0=%f\n",4.0);GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, !GPIO_PIN_4);//置低位点亮SysCtlDelay(SysCtlClockGet() / 10);      GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_4);//置高位熄灭SysCtlDelay(SysCtlClockGet() / 10);}}
}

相关文章:

TM4C123库函数学习(3)---串口中断

前言 &#xff08;1&#xff09;学习本文之前&#xff0c;需要先学习前两篇文章。 &#xff08;2&#xff09;学习本文需要准备好TTL转USB模块。 函数介绍 ROM_GPIOPinConfigure&#xff08;&#xff09; 配置GPIO引脚的复用功能。因为引脚不可能只有一个输出输入作用&#xf…...

opencv 进阶13-Fisherfaces 人脸识别-函数cv2.face.FisherFaceRecognizer_create()

Fisherfaces 人脸识别 PCA 方法是 EigenFaces 方法的核心&#xff0c;它找到了最大化数据总方差特征的线性组合。不可否认&#xff0c;EigenFaces 是一种非常有效的方法&#xff0c;但是它的缺点在于在操作过程中会损失许多特征信息。 因此&#xff0c;在一些情况下&#xff0c…...

基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)

一、背景 xxl-job-admin依赖mysql数据库&#xff0c;且需执行初始化脚本&#xff0c;包括ddl和dml语句。 具体的步骤总结如下&#xff1a; 1、新建数据库xxl_job2、创建mysql表table3、执行dml语句&#xff0c;包括新建admin用户及密码&#xff0c;创建执行器和任务。 毫无疑…...

LeetCodeHot100python版本:单调栈,栈,队列,堆

单调栈 739. 每日温度 42. 接雨水 双指针 单调栈(横向求解) ​​​​​​84. 柱状图中最大的矩形 栈和队列 队列:先入先出 栈:先入后出 两个栈 模拟 队列 一个队列 可以模拟 栈 20. 有效的括号 ​​​​​​155. 最小栈 394. 字符串解码 堆 215. 数组中的第K个最大元素 3…...

JUC初识

JUC 是什么 java.util.concurrent 在并发编程中使用的工具包 从线程start 开始 package com.jhj.Thread;public class ThreadDemo {public static void main(String[] args) {Thread t1 new Thread(() -> {}, "t1");t1.start();} }start 方法调的是native sta…...

stm32之5.长按按键(使用时钟源)调整跑马灯速度

------------------------------ 源码 #include <stm32f4xx.h> #include "led.h" #include "delay.h" #include "my_str.h" #include "beep.h" #include "key.h" int main(void) { key_init(); Led_init();…...

element ui datePick时间日期一段时间,限制选择日期的范围

想限制只能选日期间隔为一年&#xff0c;联合选择器样式不好改&#xff0c;使用俩单独的 有两个办法限制 1.一个在外层使用form通过表单验证控制&#xff0c;出现错误提示&#xff08;由于是两个单独的组件&#xff0c;触发验证的方式又为单个失去焦点&#xff0c;所以俩组件…...

kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中

在使用k8s之前如果不太熟悉k8s的可以先看这个文章&#xff1a; kubernetes--技术文档--基本概念--《10分钟快速了解》_一单成的博客-CSDN博客 三节点相同安装操作&#xff1a; 1、设置hosts解析 根据角色在三个服务器中运行&#xff0c;设置自己的hostname。 标识&#xf…...

高性能MySQL实战(三):性能优化

大家好&#xff0c;我是 方圆。这篇主要介绍对慢 SQL 优化的一些手段&#xff0c;而在讲解具体的优化措施之前&#xff0c;我想先对 EXPLAIN 进行介绍&#xff0c;它是我们在分析查询时必要的操作&#xff0c;理解了它输出结果的内容更有利于我们优化 SQL。为了方便大家的阅读&…...

198. 打家劫舍

题目 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存放…...

Pydev·离线git包

Pydev离线git包 1.下载离线git包&#xff1a;eclipse.egit.repository-4.4.0.201606070830-r.zip 2.将解压后目录&#xff1a;eclipse.egit.repository-4.4.0.201606070830-r\plugins下的jar文件放到 ide\eclipse\plugins目录下 3.重启pydevIDE 百度搜索站长工具&#xff1a;h…...

Vue-12.集成postcss.config.js

PostCSS 介绍 PostCSS 是一个用于处理样式的工具&#xff0c;可以通过插件来定制其行为。以下是一些常用的 PostCSS 插件和 API 的介绍&#xff1a; Autoprefixer: 这是一个流行的 PostCSS 插件&#xff0c;用于自动添加浏览器前缀&#xff0c;以确保您的样式在不同浏览器中具…...

基于前端技术原生HTML、JS、CSS 电子病历编辑器源码

电子病历系统采取结构化与自由式录入的新模式&#xff0c;自由书写&#xff0c;轻松录入。实现病人医疗记录&#xff08;包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。&#xff09;的保存、管理、传输和重现&#xff0c;取代手写纸张病历。不仅实现了纸…...

Linux环境下远程访问SVN服务:SVN内网穿透的详细配置与操作指南

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…...

创建k8s operator

目录 1.前提条件 2.进一步准备 2.1.安装golang 2.2.安装code&#xff08;vscode的linux版本&#xff09; 2.3.安装kubebuilder 3.开始创建Operator 3.1.什么是operator? 3.2.GV & GVK & GVR 3.3.创建operator 3.3.1. 生成工程框架 3.3.2.生成api(GVK) …...

python模拟登入某平台+破解验证码

概述 python模拟登录平台&#xff0c;遇见验证码识别&#xff01;用最简单的方法seleniumda破解验证码&#xff0c;来自动登录平台 详细 python用seleniumxpath模拟登录破解验证码 先随便找个小说平台用户登陆 - 书海小说网用户登陆 - 书海小说网用户登陆 - 书海小说网 准…...

【图像分割】理论篇(2)经典图像分割网络基于vgg16的Unet

UNet 是一种用于图像分割任务的深度学习架构&#xff0c;最早由 Olaf Ronneberger、Philipp Fischer 和 Thomas Brox 在2015年的论文 "U-Net: Convolutional Networks for Biomedical Image Segmentation" 中提出。UNet 在医学图像分割等领域取得了显著的成功&#x…...

vue插入重复的html内容

vue添加重复的html内容是通过绑定一个数组来v-for循环实现的。 效果展示&#xff1a; 首先创建数组&#xff0c;里面为重复内容的数量&#xff0c;里面默认存在一个初始值。 然后通过v-for来绑定这个数组&#xff0c;循环数据。 通过添加点击事件&#xff0c;来增加或删除数组…...

计算机网络-物理层(三)-信道的极限容量

计算机网络-物理层(三)-信道的极限容量 当信号在信道中传输失真不严重时&#xff0c;在信道的输出端&#xff0c;这些信号可以被识别 当信号在信道中&#xff0c;传输失真严重时&#xff0c;在信道的输出端就难以识别 造成失真的因素 码元传输速率信号传输距离噪声干扰传输媒…...

Http/Websocket协议的长连接和短连接的错误认识详细解读(史上最通俗)

从一个问题聊起&#xff1a; Http/Websocket 都称为一种协议&#xff0c;能用现实中的例子来解释协议吗&#xff1f; AI 举例&#xff1a; 您&#xff08;客户端&#xff09;&#xff1a; 您坐在餐厅桌子上&#xff0c;想点一份菜单。 服务员&#xff08;服务器&#xff09…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭&#xff01;_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...