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

gd32 i2c 中断 主机从机双向通信例程

Master
I2C0_SCL PB8 AF4
I2C0_SDA PB9 AF4

Slave
I2C1_SCL PB10 AF4
I2C1_SDA PB11 AF4

//主机中断发送
void i2c_master_transmit_it(uint32_t address, uint8_t* buff, uint32_t size);
//主机中断接收
void i2c_master_receive_it(uint32_t address, uint8_t* buff, uint32_t size, uint32_t* size_out);

//从机中断发送
void i2c_slave_transmit_it(uint8_t* buff, uint32_t size);
//从机中断接收
void i2c_slave_receive_it(uint8_t* buff, uint32_t* size_out);

main.c

/*!\file    main.c\brief   running LED\version 2023-03-31, V1.0.0, firmware for GD32H7xx
*/#include "gd32h7xx.h"
#include "systick.h"#include "string.h"
#include "stdio.h"#define I2C_SLAVE_ADDRESS7 0x82/*!\brief      enable the CPU Chache\param[in]  none\param[out] none\retval     none
*/
static void cache_enable(void)
{/* Enable I-Cache */SCB_EnableICache();/* Enable D-Cache */
//    SCB_EnableDCache();
}void led_config()
{rcu_periph_clock_enable(RCU_GPIOJ);gpio_mode_set(GPIOJ, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8);gpio_output_options_set(GPIOJ, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_8);gpio_mode_set(GPIOJ, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_9);gpio_output_options_set(GPIOJ, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_9);gpio_bit_set(GPIOJ, GPIO_PIN_8);gpio_bit_set(GPIOJ, GPIO_PIN_9);}void usart_config()
{rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_USART0);gpio_af_set(GPIOB, GPIO_AF_7, GPIO_PIN_6);gpio_af_set(GPIOB, GPIO_AF_7, GPIO_PIN_7);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_6);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_6);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_7);usart_deinit(USART0);usart_word_length_set(USART0, USART_WL_8BIT);usart_stop_bit_set(USART0, USART_STB_1BIT);usart_parity_config(USART0, USART_PM_NONE);usart_baudrate_set(USART0, 921600U);usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);usart_receive_config(USART0, USART_RECEIVE_ENABLE);usart_enable(USART0);
}void usart_transmit(char* buff, int size)
{for (int i = 0; i < size; ++i) {usart_data_transmit(USART0, buff[i]);while (RESET == usart_flag_get(USART0, USART_FLAG_TBE)) {}}
}/** Master* I2C0_SCL PB8  AF4* I2C0_SDA PB9  AF4*/
void i2c0_config()
{rcu_periph_clock_enable(RCU_GPIOB);gpio_af_set(GPIOB, GPIO_AF_4, GPIO_PIN_8 | GPIO_PIN_9);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_8 | GPIO_PIN_9);gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_100_220MHZ, GPIO_PIN_8 | GPIO_PIN_9);rcu_periph_clock_enable(RCU_I2C0);i2c_deinit(I2C0);i2c_timing_config(I2C0, 0x3, 0x9, 0x0);i2c_master_clock_config(I2C0, 0x96, 0xda);i2c_enable(I2C0);nvic_irq_enable(I2C0_EV_IRQn, 2, 0);nvic_irq_enable(I2C0_ER_IRQn, 2, 1);
}uint8_t* master_tx_buff;
uint8_t* master_rx_buff;
uint32_t* master_rx_recv_cnt;void I2C0_EV_IRQHandler()
{if (RESET != i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_STPDET)) {i2c_interrupt_flag_clear(I2C0, I2C_INT_FLAG_STPDET);} else if (RESET != i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_TI)) {i2c_data_transmit(I2C0, *master_tx_buff++);} else if (RESET != i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_RBNE)) {*master_rx_buff++ = i2c_data_receive(I2C0);*master_rx_recv_cnt += 1;} else if (RESET != i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_TC)) {i2c_stop_on_bus(I2C0);i2c_interrupt_disable(I2C0, I2C_INT_ERR | I2C_INT_STPDET | I2C_INT_TI | I2C_INT_RBNE | I2C_INT_TC);}
}void I2C0_ER_IRQHandler()
{if (i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_BERR)) {i2c_interrupt_flag_clear(I2C0, I2C_INT_FLAG_BERR);}if (i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_LOSTARB)) {i2c_interrupt_flag_clear(I2C0, I2C_INT_FLAG_LOSTARB);}if (i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_OUERR)) {i2c_interrupt_flag_clear(I2C0, I2C_INT_FLAG_OUERR);}if (i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_PECERR)) {i2c_interrupt_flag_clear(I2C0, I2C_INT_FLAG_PECERR);}if (i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_TIMEOUT)) {i2c_interrupt_flag_clear(I2C0, I2C_INT_FLAG_TIMEOUT);}if (i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_SMBALT)) {i2c_interrupt_flag_clear(I2C0, I2C_INT_FLAG_SMBALT);}i2c_interrupt_disable(I2C0, I2C_INT_ERR | I2C_INT_STPDET | I2C_INT_RBNE | I2C_INT_TI | I2C_INT_TC);
}void i2c_master_transmit_it(uint32_t address, uint8_t* buff, uint32_t size)
{master_tx_buff = buff;i2c_master_addressing(I2C0, address, I2C_MASTER_TRANSMIT);i2c_transfer_byte_number_config(I2C0, size);i2c_interrupt_enable(I2C0, I2C_INT_ERR | I2C_INT_STPDET | I2C_INT_TI | I2C_INT_TC);while(i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) { } //等待总线空闲I2C_STAT(I2C0) |= I2C_STAT_TBE;i2c_start_on_bus(I2C0);
}void i2c_master_receive_it(uint32_t address, uint8_t* buff, uint32_t size, uint32_t* size_out)
{master_rx_buff = buff;master_rx_recv_cnt = size_out;*master_rx_recv_cnt = 0;i2c_master_addressing(I2C0, address, I2C_MASTER_RECEIVE);i2c_transfer_byte_number_config(I2C0, size);i2c_interrupt_enable(I2C0, I2C_INT_ERR | I2C_INT_STPDET | I2C_INT_RBNE | I2C_INT_TC);while(i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) { } //等待总线空闲i2c_start_on_bus(I2C0);
}/** Slave* I2C1_SCL PB10 AF4* I2C1_SDA PB11 AF4*/
void i2c1_config()
{rcu_periph_clock_enable(RCU_GPIOB);gpio_af_set(GPIOB, GPIO_AF_4, GPIO_PIN_10 | GPIO_PIN_11);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10 | GPIO_PIN_11);gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_100_220MHZ, GPIO_PIN_10 | GPIO_PIN_11);rcu_periph_clock_enable(RCU_I2C1);i2c_deinit(I2C1);i2c_address_config(I2C1, I2C_SLAVE_ADDRESS7, I2C_ADDFORMAT_7BITS);i2c_enable(I2C1);nvic_irq_enable(I2C1_EV_IRQn, 2, 2);nvic_irq_enable(I2C1_ER_IRQn, 2, 3);
}uint8_t* slave_tx_buff;
uint8_t* slave_rx_buff;
uint32_t* slave_rx_recv_cnt;void I2C1_EV_IRQHandler()
{if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_ADDSEND)) {i2c_interrupt_flag_clear(I2C1, I2C_INT_FLAG_ADDSEND);I2C_STAT(I2C1) |= I2C_STAT_TBE;} else if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_RBNE)) {*slave_rx_buff++ = i2c_data_receive(I2C1);*slave_rx_recv_cnt += 1;} else if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_TI)) {i2c_data_transmit(I2C1, *slave_tx_buff++);} else if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_STPDET)) {i2c_interrupt_flag_clear(I2C1, I2C_INT_FLAG_STPDET);i2c_interrupt_disable(I2C1, I2C_INT_ERR | I2C_INT_STPDET | I2C_INT_ADDM | I2C_INT_TI | I2C_INT_RBNE);}
}void I2C1_ER_IRQHandler()
{if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_BERR)) {i2c_interrupt_flag_clear(I2C1, I2C_INT_FLAG_BERR);}if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_LOSTARB)) {i2c_interrupt_flag_clear(I2C1, I2C_INT_FLAG_LOSTARB);}if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_OUERR)) {i2c_interrupt_flag_clear(I2C1, I2C_INT_FLAG_OUERR);}if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_PECERR)) {i2c_interrupt_flag_clear(I2C1, I2C_INT_FLAG_PECERR);}if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_TIMEOUT)) {i2c_interrupt_flag_clear(I2C1, I2C_INT_FLAG_TIMEOUT);}if (i2c_interrupt_flag_get(I2C1, I2C_INT_FLAG_SMBALT)) {i2c_interrupt_flag_clear(I2C1, I2C_INT_FLAG_SMBALT);}i2c_interrupt_disable(I2C1, I2C_INT_ERR | I2C_INT_STPDET | I2C_INT_ADDM | I2C_INT_RBNE | I2C_INT_TI);
}void i2c_slave_transmit_it(uint8_t* buff, uint32_t size)
{slave_tx_buff = buff;i2c_interrupt_enable(I2C1, I2C_INT_ERR | I2C_INT_STPDET | I2C_INT_ADDM | I2C_INT_TI);
}void i2c_slave_receive_it(uint8_t* buff, uint32_t* size_out)
{slave_rx_recv_cnt = size_out;*slave_rx_recv_cnt = 0;slave_rx_buff = buff;i2c_interrupt_enable(I2C1, I2C_INT_ERR | I2C_INT_STPDET | I2C_INT_ADDM | I2C_INT_RBNE);
}/*!\brief      main function\param[in]  none\param[out] none\retval     none
*/
int main(void)
{/* enable the CPU Cache */cache_enable();/* configure systick */systick_config();led_config();usart_config();i2c0_config();i2c1_config();while(1) {//-----------------------------------------------------------------------uint8_t tx1[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};uint8_t rx1[8] = {0};uint32_t rx1_recv_bytes = 0;i2c_slave_receive_it(rx1, &rx1_recv_bytes);i2c_master_transmit_it(I2C_SLAVE_ADDRESS7, tx1, 8);delay_1ms(10);//上位机应接收到 "0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88"usart_transmit(rx1, rx1_recv_bytes);//-----------------------------------------------------------------------uint8_t tx2[4] = {0x44, 0x33, 0x22, 0x11};uint8_t rx2[4] = {0};uint32_t rx2_recv_bytes = 0;i2c_slave_receive_it(rx2, &rx2_recv_bytes);i2c_master_transmit_it(I2C_SLAVE_ADDRESS7, tx2, 4);delay_1ms(10);//上位机应接收到 "0x44, 0x33, 0x22, 0x11"usart_transmit(rx2, rx2_recv_bytes);//-----------------------------------------------------------------------uint8_t tx3[4] = {0x12, 0x34, 0x56, 0x78};uint8_t rx3[4] = {0};uint32_t rx3_recv_bytes = 0;i2c_slave_transmit_it(tx3, 4);i2c_master_receive_it(I2C_SLAVE_ADDRESS7, rx3, 4,  &rx3_recv_bytes);delay_1ms(10);//上位机应接收到 "0x12, 0x34, 0x56, 0x78"usart_transmit(rx3, rx3_recv_bytes);//-----------------------------------------------------------------------uint8_t tx4[4] = {0xaa, 0xbb, 0xcc, 0xdd};uint8_t rx4[4] = {0};uint32_t rx4_recv_bytes = 0;i2c_slave_transmit_it(tx4, 4);i2c_master_receive_it(I2C_SLAVE_ADDRESS7, rx4, 4,  &rx4_recv_bytes);delay_1ms(10);//上位机应接收到 "0xaa, 0xbb, 0xcc, 0xdd"usart_transmit(rx4, rx4_recv_bytes);delay_1ms(1000);}
}

相关文章:

gd32 i2c 中断 主机从机双向通信例程

Master I2C0_SCL PB8 AF4 I2C0_SDA PB9 AF4 Slave I2C1_SCL PB10 AF4 I2C1_SDA PB11 AF4 //主机中断发送 void i2c_master_transmit_it(uint32_t address, uint8_t* buff, uint32_t size); //主机中断接收 void i2c_master_receive_it(uint32_t address, uint8_t* buff, uint…...

程序员在AI时代:重塑核心竞争力,共舞智能未来

程序员在AI时代&#xff1a;重塑核心竞争力&#xff0c;共舞智能未来 在这个日新月异的科技时代&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术&#xff0c;尤其是以ChatGPT、Midjourney、Claude等为代表的大语言模型&#xff0c;正以前所未有的速度渗透到编程…...

apex发送邮件中显示饼状图和条形图

在 Apex 中发送带有嵌入图表&#xff08;如饼状图和条形图&#xff09;的电子邮件&#xff0c;您可以通过以下步骤实现&#xff1a; 生成图表图像&#xff1a;使用外部库或服务生成图表图像并获取图像的 URL 或 Base64 编码。创建电子邮件模板&#xff1a;在 HTML 邮件模板中嵌…...

【HarmonyOS NEXT星河版开发学习】小型测试案例07-弹性布局小练习

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;Flex布局是一种非常有用的布局方式&#xff0c;它允许开发者创建灵活且响…...

Sparksql array相关函数

前言 Apache Spark SQL 是 Spark 的一个重要模块,用于处理结构化数据。它提供了 DataFrame 和 Dataset API,使得开发者能够使用 SQL 查询语言(称为 Spark SQL)对数据进行高效的操作。在本文中,我们将介绍 Spark SQL 中所有与array相关的函数。 环境 sparksql版本<dep…...

软件测试学习笔记

测试学习 1. 测试流程2. Bug的提出什么是bugbug 的描述bug 级别 3. 测试用例的设计什么是测试用例测试用例应如何设计基于需求的设计方法等价类边界值场景法正交表法判定表法错误猜测法 4. 自动化测试回归测试自动化分类 5. 安装 webdriver-manager 和 selenium第一个web自动化…...

Centos 8系统ext4文件系统类型进行扩容缩容 (LVM)

Centos 8系统ext4文件系统类型进行扩容缩容 &#xff08;LVM&#xff09; 1.磁盘情况&#xff1a;2.缩容home分区1.备份home数据&#xff1a;2.查找使用 /home 的进程&#xff1a;3.终止这些进程&#xff1a;4.卸载 /home 分区5.检查文件系统一致性 (e2fsck)&#xff1a;6.调整…...

常考常考高频率

1.快排&#xff08;双指针&#xff09; 快排&#xff0c;归并排序&#xff0c;堆排序 #快速排序O&#xff08;nlogn&#xff09; def quick_sort(array, left, right):if left < right:mid partition(array, left, right)quick_sort(array, left, mid)quick_sort(array, …...

Linux项目环境的搭建 (Red hat 9.0Linux操作系统)

一、目的&#xff1a; 1.搭建Linux操作系统项目所需的项目环境构件&#xff1b; 2.了解 Linux的组成&#xff0c;学会编译内核。 二、内容&#xff1a; 安装Red hat 9.0Linux操作系统&#xff1b; 三、步骤&#xff1a; 3.1 正确安装Redhat9.0操作系统。 3.2 rpm -Uvh *.…...

Study--Oracle-08-ORACLE数据备份与恢复(一)

一、ORACLE数据保护方案 1、oracle数据保护方案 2、数据库物理保护方案 oracle数据库备份可以备份到本地集群存储,也可以备份到云存储。 3、数据库逻辑数据保护方案 二、ORACLE数据体系 1、ORACLE 数据库的存储结构 2、oracle物理和逻辑存储结构 3、数据库进程 4、数据库日…...

FreeIPA安装

一、环境准备 主机名IP角色master. bhlu. com192.168.22.10服务端node1. bhlu. com192.168.22.11客户端 两台服务器关闭防火墙和 selinux配置好 yum 源 1.1 配置 chronyd 配置好 chronyd&#xff0c;使用 chronyc source -v 可以验证 # 这里写了一个playbook作为示例了 --…...

mysql数据库:SQL语言基础和基本查询

mysql数据库&#xff1a;SQL语言基础和基本查询 SQL语言简介 Structured Query Language, 结构化查询语言非过程性语言为加强SQL的语言能力&#xff0c;各厂商增强了过程性语言的特征如&#xff1a;Oracle的PL/SQL 过程性处理能力&#xff0c;SQL Server、Sybase的T-SQLSQL是用…...

strimzi operator 部署kafka集群(可外部访问)

Strimzi介绍 官方文档:https://strimzi.io/docs/operators/0.42.0/overview#kafka-components_str Strimzi介绍 Strimzi 是一个用于 Apache Kafka 在 Kubernetes 上部署和管理的开源项目。它提供了一组 Kubernetes 自定义资源定义(Custom Resource Definitions,CRDs)、控制…...

【网络安全】探索AI 聊天机器人工作流程实现RCE

未经许可,不得转载。 文章目录 前言正文前言 我发现了一个广泛使用的AI聊天机器人平台中的远程代码执行漏洞。该漏洞存在于聊天机器人的自定义工作流响应代码中,这些工作流允许开发人员通过创建定制的流程来扩展机器人的功能。 正文 在浏览自动化聊天机器人的多个特定功能…...

虚拟DOM、Vue渲染流程

虚拟DOM&#xff08;Virtual DOM&#xff09;是一种在前端开发中广泛使用的技术&#xff0c;它用JavaScript对象来表示真实DOM&#xff08;文档对象模型&#xff09;的结构和状态。虚拟DOM的核心思想是将页面的状态和结构保存在内存中&#xff0c;而不是直接操作真实的DOM。这一…...

centos7 启动python后端服务与停止服务的sh脚本

centos7 启动python后端服务与停止服务 分别在工程目录下新建启动脚本和停止脚本。 1、启动服务脚本 start_srv.sh: python3 start_srv.py运行 nohup ./start_srv.sh & 以守护进程的方式启动这个服务。 2、停止服务脚本 stop_srv.sh: sp_pidps -ef | grep start_srv…...

访问网站显示不安全怎么办?

访问网站时显示“不安全”&#xff0c;针对不同的原因有不同的解决方式&#xff0c;下面是常见的几种原因和对应的解决办法。 1.未启用HTTPS协议 如果网站仅使用HTTP协议&#xff0c;数据传输没加密&#xff0c;因此会被浏览器标记为“不安全”。解决办法是启用HTTPS协议,给…...

Scala与集合框架:高效数据处理的利器

Scala与集合框架&#xff1a;高效数据处理的利器 Scala 是一种现代化的编程语言&#xff0c;融合了面向对象编程和函数式编程的特性。其集合框架为处理数据提供了强大而灵活的工具&#xff0c;使得数据处理变得高效且富有表达力。本文将深入探讨 Scala 的集合框架&#xff0c;…...

基于 JWT 的模拟登录爬取实战

准备工作 1. 了解 JWT 相关知识 2. 安装 requests 库&#xff0c;并了解其基本使用 案例介绍 爬取网站&#xff1a; https://login3.scrape.center/ 用户名和密码是&#xff1a; admin 模拟登录 基于 JWT 的网站通常采用的是前后端分离式&#xff0c; 前后端的数据传输依…...

力扣(2024.08.06)

1. 144&#xff1a;二叉树的前序遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def preorderTravers…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...