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)---串口中断
前言 (1)学习本文之前,需要先学习前两篇文章。 (2)学习本文需要准备好TTL转USB模块。 函数介绍 ROM_GPIOPinConfigure() 配置GPIO引脚的复用功能。因为引脚不可能只有一个输出输入作用…...
opencv 进阶13-Fisherfaces 人脸识别-函数cv2.face.FisherFaceRecognizer_create()
Fisherfaces 人脸识别 PCA 方法是 EigenFaces 方法的核心,它找到了最大化数据总方差特征的线性组合。不可否认,EigenFaces 是一种非常有效的方法,但是它的缺点在于在操作过程中会损失许多特征信息。 因此,在一些情况下,…...
基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)
一、背景 xxl-job-admin依赖mysql数据库,且需执行初始化脚本,包括ddl和dml语句。 具体的步骤总结如下: 1、新建数据库xxl_job2、创建mysql表table3、执行dml语句,包括新建admin用户及密码,创建执行器和任务。 毫无疑…...
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时间日期一段时间,限制选择日期的范围
想限制只能选日期间隔为一年,联合选择器样式不好改,使用俩单独的 有两个办法限制 1.一个在外层使用form通过表单验证控制,出现错误提示(由于是两个单独的组件,触发验证的方式又为单个失去焦点,所以俩组件…...
kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中
在使用k8s之前如果不太熟悉k8s的可以先看这个文章: kubernetes--技术文档--基本概念--《10分钟快速了解》_一单成的博客-CSDN博客 三节点相同安装操作: 1、设置hosts解析 根据角色在三个服务器中运行,设置自己的hostname。 标识…...
高性能MySQL实战(三):性能优化
大家好,我是 方圆。这篇主要介绍对慢 SQL 优化的一些手段,而在讲解具体的优化措施之前,我想先对 EXPLAIN 进行介绍,它是我们在分析查询时必要的操作,理解了它输出结果的内容更有利于我们优化 SQL。为了方便大家的阅读&…...
198. 打家劫舍
题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放…...
Pydev·离线git包
Pydev离线git包 1.下载离线git包:eclipse.egit.repository-4.4.0.201606070830-r.zip 2.将解压后目录:eclipse.egit.repository-4.4.0.201606070830-r\plugins下的jar文件放到 ide\eclipse\plugins目录下 3.重启pydevIDE 百度搜索站长工具:h…...
Vue-12.集成postcss.config.js
PostCSS 介绍 PostCSS 是一个用于处理样式的工具,可以通过插件来定制其行为。以下是一些常用的 PostCSS 插件和 API 的介绍: Autoprefixer: 这是一个流行的 PostCSS 插件,用于自动添加浏览器前缀,以确保您的样式在不同浏览器中具…...
基于前端技术原生HTML、JS、CSS 电子病历编辑器源码
电子病历系统采取结构化与自由式录入的新模式,自由书写,轻松录入。实现病人医疗记录(包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。)的保存、管理、传输和重现,取代手写纸张病历。不仅实现了纸…...
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(vscode的linux版本) 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模拟登录平台,遇见验证码识别!用最简单的方法seleniumda破解验证码,来自动登录平台 详细 python用seleniumxpath模拟登录破解验证码 先随便找个小说平台用户登陆 - 书海小说网用户登陆 - 书海小说网用户登陆 - 书海小说网 准…...
【图像分割】理论篇(2)经典图像分割网络基于vgg16的Unet
UNet 是一种用于图像分割任务的深度学习架构,最早由 Olaf Ronneberger、Philipp Fischer 和 Thomas Brox 在2015年的论文 "U-Net: Convolutional Networks for Biomedical Image Segmentation" 中提出。UNet 在医学图像分割等领域取得了显著的成功&#x…...
vue插入重复的html内容
vue添加重复的html内容是通过绑定一个数组来v-for循环实现的。 效果展示: 首先创建数组,里面为重复内容的数量,里面默认存在一个初始值。 然后通过v-for来绑定这个数组,循环数据。 通过添加点击事件,来增加或删除数组…...
计算机网络-物理层(三)-信道的极限容量
计算机网络-物理层(三)-信道的极限容量 当信号在信道中传输失真不严重时,在信道的输出端,这些信号可以被识别 当信号在信道中,传输失真严重时,在信道的输出端就难以识别 造成失真的因素 码元传输速率信号传输距离噪声干扰传输媒…...
Http/Websocket协议的长连接和短连接的错误认识详细解读(史上最通俗)
从一个问题聊起: Http/Websocket 都称为一种协议,能用现实中的例子来解释协议吗? AI 举例: 您(客户端): 您坐在餐厅桌子上,想点一份菜单。 服务员(服务器)…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
