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

GD 32 流水灯

前言:


通过后面的学习掌握了一些逻辑架构的知识,通过复习的方式将学到的裸机任务架构的知识运用起来,同时巩固前面学到的知识,GPIO的配置等。


 开发板上LED引脚使用示意图

 注:此次LED灯的点亮凡是是高电平点亮,因为电流是从外部向内部进行流动,GND会引脚的店电平拉低,如果给低电平的话无法形成电势差,电流是无法流动的,给一个高电平,电流在电压的作用下点亮LED灯

第一种实现方式

这种方式类似于STM32的库函数编程,不使用结构体使用直接编写的方式进行配置,可以作为参考对比学习


1.0 初始化LED

void LED_Init(void)
{// 开启RCC时钟rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_GPIOE);rcu_periph_clock_enable(RCU_GPIOF);// 初始化gpiogpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_8);gpio_init(GPIOE,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_6);gpio_init(GPIOF,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_6);// 引脚默认电平为低电平gpio_bit_reset(GPIOA, GPIO_PIN_8);gpio_bit_reset(GPIOE, GPIO_PIN_6);gpio_bit_reset(GPIOF, GPIO_PIN_6);
}

 2.0 LED点亮熄灭

// 高电平的方式点亮
void LED1_On(void)
{gpio_bit_set(GPIOA, GPIO_PIN_8);
}void LED2_On(void)
{gpio_bit_set(GPIOE, GPIO_PIN_6);
}void LED3_On(void)
{gpio_bit_set(GPIOF, GPIO_PIN_6);
}// 低电平的方式熄灭
void LED1_Off(void)
{gpio_bit_reset(GPIOA, GPIO_PIN_8);
}void LED2_Off(void)
{gpio_bit_reset(GPIOE, GPIO_PIN_6);
}void LED3_Off(void)
{gpio_bit_reset(GPIOF, GPIO_PIN_6);
}

3.0 LED 流水灯函数

// LED 灯流水效果函数
void LED_Run(void)
{LED1_On();DelayNms(1000);LED2_On();DelayNms(1000);LED3_On();DelayNms(1000);LED1_Off();LED2_Off();LED3_Off();DelayNms(1000);
}

4.0 LED灯初始化头文件

#ifndef  _LED_DRV_H_
#define  _LED_DRV_H_
#include <stdint.h>void LED_Init(void);
void LED1_On(void);
void LED2_On(void);
void LED3_On(void);
void LED1_Off(void);
void LED2_Off(void);
void LED3_Off(void);
void LED_Run(void);#endif

5.0 在主函数中调用

使用面向对象的编码方式,可以使程序看起来更为的简洁,方便程序的后续移植。

#include <stdint.h>
#include "gd32f30x.h"
#include "led_drv.h"
#include "delay.h"int main(void)
{DelayInit();LED_Init();while(1){LED_Run();}
}

** 方式 2 **

第二种实现方式

这种实现方式是配合结构体与for循环的方式进行实现,可以方便后续程序的编码与维护,让程序可移植性更强。


1.0 创建结构体

// 创建结构体
typedef struct
{// rcu时钟rcu_periph_enum rcu;// gpio口uint32_t gpio;// 对应引脚uint32_t pin;}LED_GPIO_t;

 2.0 创建结构体数组

// 计算数组大小
#define  LED_NUM_MAX (sizeof(g_gpioList) / sizeof(g_gpioList[0]))//创建结构体数组
static LED_GPIO_t g_gpioList[] = 
{{RCU_GPIOA, GPIOA, GPIO_PIN_8},{RCU_GPIOE, GPIOE, GPIO_PIN_6},{RCU_GPIOF, GPIOF, GPIO_PIN_6}
};

3.0 初始化GPIO

这里使用for循环遍历,然后将值一个个的赋值给结构体成员变量完成时钟的初始化

void LED_DrvInit(void)
{uint8_t i = 0;for(i = 0; i < LED_NUM_MAX; i++){// 开启rcu时钟rcu_periph_clock_enable(g_gpioList[i].rcu);// 初始化gpio端口gpio_init(g_gpioList[i].gpio, GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ, g_gpioList[i].pin);// 引脚默认值gpio_bit_reset(g_gpioList[i].gpio, g_gpioList[i].pin);}}

4.0 点亮LED函数,带参数

// LED_ON 点亮
void LED_No(uint8_t ledNo)
{// 判断led编号的值是否大于最大数组长度if(ledNo > LED_NUM_MAX){return; // 返回值无效}// 点亮gpio_bit_set(g_gpioList[ledNo].gpio, g_gpioList[ledNo].pin);
}

5.0 熄灭LED灯函数,带参数

// LED_OFF熄灭
void LED_Off(uint8_t ledNo)
{if (ledNo >= LED_NUM_MAX){return;}gpio_bit_reset(g_gpioList[ledNo].gpio, g_gpioList[ledNo].pin);
}

6.0 流水灯程序代码实现

void LED_StructRun(void)
{LED_No(LED1);DelayNms(1000);LED_No(LED2);DelayNms(1000);LED_No(LED3);DelayNms(1000);LED_Off(LED1);LED_Off(LED2);LED_Off(LED3);DelayNms(1000);
}

8.0 #define 定义LED编号

#define  LED1  0
#define  LED2  1
#define  LED3  2

9.0 函数头文件代码

#ifndef  _LED_STRUCTDRV_H_
#define  _LED_STRUCTDRV_H_#include "stdint.h"void LED_DrvInit(void);
// LED_ON 点亮
void LED_No(uint8_t ledNo);
// LED_OFF熄灭
void LED_Off(uint8_t ledNo);
// 流水灯
void LED_StructRun(void);#endif

10.0 主函数调用程序

#include <stdint.h>
#include "gd32f30x.h"
#include "led_drv.h"
#include "delay.h"
#include "led_struct_drv.h"int main(void)
{DelayInit();//	LED_Init();LED_DrvInit();while(1){//		LED_Run();LED_StructRun();}
}

11.0 完整代码展示

第一种方式完整C函数代码

#include "gd32f30x.h"                   // Device header
#include <stdint.h>
#include "led_drv.h"
#include "delay.h"void LED_Init(void)
{// 开启RCC时钟rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_GPIOE);rcu_periph_clock_enable(RCU_GPIOF);// 初始化gpiogpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_8);gpio_init(GPIOE,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_6);gpio_init(GPIOF,GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_6);// 引脚默认电平为低电平gpio_bit_reset(GPIOA, GPIO_PIN_8);gpio_bit_reset(GPIOE, GPIO_PIN_6);gpio_bit_reset(GPIOF, GPIO_PIN_6);
}// 高电平的方式点亮
void LED1_On(void)
{gpio_bit_set(GPIOA, GPIO_PIN_8);
}void LED2_On(void)
{gpio_bit_set(GPIOE, GPIO_PIN_6);
}void LED3_On(void)
{gpio_bit_set(GPIOF, GPIO_PIN_6);
}// 低电平的方式熄灭
void LED1_Off(void)
{gpio_bit_reset(GPIOA, GPIO_PIN_8);
}void LED2_Off(void)
{gpio_bit_reset(GPIOE, GPIO_PIN_6);
}void LED3_Off(void)
{gpio_bit_reset(GPIOF, GPIO_PIN_6);
}// LED 灯流水效果函数
void LED_Run(void)
{LED1_On();DelayNms(1000);LED2_On();DelayNms(1000);LED3_On();DelayNms(1000);LED1_Off();LED2_Off();LED3_Off();DelayNms(1000);
}

第二种方式完整C函数代码

#include "gd32f30x.h"                   // Device header
#include "stdint.h"
#include "delay.h"#define  LED1  0
#define  LED2  1
#define  LED3  2// 创建结构体
typedef struct
{// rcu时钟rcu_periph_enum rcu;// gpio口uint32_t gpio;// 对应引脚uint32_t pin;}LED_GPIO_t;// 计算数组大小
#define  LED_NUM_MAX (sizeof(g_gpioList) / sizeof(g_gpioList[0]))//创建结构体数组
static LED_GPIO_t g_gpioList[] = 
{{RCU_GPIOA, GPIOA, GPIO_PIN_8},{RCU_GPIOE, GPIOE, GPIO_PIN_6},{RCU_GPIOF, GPIOF, GPIO_PIN_6}
};void LED_DrvInit(void)
{uint8_t i = 0;for(i = 0; i < LED_NUM_MAX; i++){// 开启rcu时钟rcu_periph_clock_enable(g_gpioList[i].rcu);// 初始化gpio端口gpio_init(g_gpioList[i].gpio, GPIO_MODE_OUT_PP,GPIO_OSPEED_2MHZ, g_gpioList[i].pin);// 引脚默认值gpio_bit_reset(g_gpioList[i].gpio, g_gpioList[i].pin);}}// LED_ON 点亮
void LED_No(uint8_t ledNo)
{// 判断led编号的值是否大于最大数组长度if(ledNo > LED_NUM_MAX){return; // 返回值无效}// 点亮gpio_bit_set(g_gpioList[ledNo].gpio, g_gpioList[ledNo].pin);
}// LED_OFF熄灭
void LED_Off(uint8_t ledNo)
{if (ledNo >= LED_NUM_MAX){return;}gpio_bit_reset(g_gpioList[ledNo].gpio, g_gpioList[ledNo].pin);
}void LED_StructRun(void)
{LED_No(LED1);DelayNms(1000);LED_No(LED2);DelayNms(1000);LED_No(LED3);DelayNms(1000);LED_Off(LED1);LED_Off(LED2);LED_Off(LED3);DelayNms(1000);
}

12.0 回调函数基础知识补充

定义:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。如果代码立即被执行就称为同步回调,如果在之后晚点的某个时间再执行,则称之为异步回调

函数 F1 调用函数 F2 的时候,函数 F1 通过参数给 函数 F2 传递了另外一个函数 F3 的指针,在函数 F2 执行的过程中,函数F2 调用了函数 F3,这个动作就叫做回调(Callback),而先被当做指针传入、后面又被回调的函数 F3 就是回调函数。

以上定义参考自菜鸟教程

#define _CRT_SECURE_NO_WARNINGS
#include <easyx.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>int Sum(int x, int y) 
{return x + y;
}// 创建一个函数,参数是函数指针
void Handle(int (*pSum)(int a, int b)) 
{int sum = (*pSum)(1, 2);printf("%d\n", sum);
}int main() {Handle(Sum);return 0;}

函数的执行结果是3

typedef 可以对函数进行重定义,注意这个时候的写法是表示的含义还是不同的比如以下的案例

typedef unsigned char uchar; 给变量进行从命名,如unsigned char 命名为uchar,

#define _CRT_SECURE_NO_WARNINGS
#include <easyx.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>// 这个时候函数指针变量的名字是 PFUNC
typedef int (*PFUNC)(int a, int b);int Sum(int x, int y) 
{return x + y;
}// 创建一个函数,参数是函数指针
void Handle(PFUNC pSum)
{int sum = (*pSum)(1, 2);printf("%d\n", sum);
}int main() {Handle(Sum);return 0;}

以上程序的执行结果也是三


 ...


结尾


目的是通过本次代码的编写巩固之前的知识,同时使用想把裸机程序任务调度的方式,以及回调函数的知识运用在本次的代码当中,方便理解后续的代码知识,以上内容仅供学习参考,后续后继续更细裸机任务调度方案以及回调函数相关的运用。

相关文章:

GD 32 流水灯

前言&#xff1a; 通过后面的学习掌握了一些逻辑架构的知识&#xff0c;通过复习的方式将学到的裸机任务架构的知识运用起来&#xff0c;同时巩固前面学到的知识&#xff0c;GPIO的配置等。 开发板上LED引脚使用示意图 注&#xff1a;此次LED灯的点亮凡是是高电平点亮&#xff…...

数据结构之栈详解

1. 栈的概念以及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈…...

算法:BFS解决 FloodFill 算法

目录 FloodFill 算法 题目一&#xff1a;图像渲染 题目二&#xff1a;岛屿数量 题目三&#xff1a;岛屿的最大面积 题目四&#xff1a;被围绕的区域 FloodFill 算法 在递归搜索回溯中已经说到过 FloodFill 算法了&#xff0c;但是那里是用 dfs 解决的&#xff0c;这里会使…...

Python 中文双引号 “”

Python 中文双引号 “” 1. SyntaxError: invalid character in identifier2. CorrectionReferences 1. SyntaxError: invalid character in identifier print(Albert Einstein once said, “A person who never made a mistake never tried anything new.”) print(Albert Ei…...

以太网(Ethernet)

目录 1. What is Internet?1.1. What is Ethernet?2. TCP/IP3. Physical Layer(PHY)4. Data Link Layer4.1. MAC Sublayer5. Network Layer5.1. IP5.2. ARP6. Transport Layer6.1. UDP6.2. TCP7. Application LayerFPGA实现以太网(一)——以太网简介 网络与路由交换 菜鸟FP…...

Scrcpy adb server version (41) doesn‘t match this client (39); killing...

通过Snap 在Ubuntu上安装 scrcpy之后&#xff0c;启动会导致无法同时 scrcpy和adb logcat 过滤日志 目前最新的安装的platforms-tools下面的adb 版本最新都是 adb 41版本 解决办法&#xff1a; 在这里链接里面 下载 adb 1.0.39 版本&#xff0c;替换 /home/host/Android/Sdk/…...

微服务实战系列之玩转Docker(四)

前言 幸福&#xff0c;就是继续追寻已经拥有的东西。 ——圣奥古斯丁 什么算已经拥有的&#xff1f;比如爱你的人在等你&#xff0c;比如每日热腾腾的三餐&#xff0c;比如身边可爱的同事&#xff0c;又比如此刻的你&#xff0c;看见了这篇博文&#xff08;&#x1f601;&#…...

微信小程序-自定义组件生命周期

一.created 组件实例创建完毕调用。定义在lifetimes对象里。 不能在方法里面更改data对象里面的值&#xff0c;但是可以定义属性值。 lifetimes:{//不能给data设置值created(){this.testaaconsole.log("created") }}二. attached 模板解析完成挂载到页面。 可以更…...

2024年7月23日(samba DNS)

​ 回顾 1、关闭防火墙&#xff0c;关闭selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 2、修改静态IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #修改uuid的目的是为了保证网络的唯一性 3、重启网络服务 systemctl restart netwo…...

Hyperledger顶级项目特点和介绍

Hyperledger的顶级项目 Hyperledger是Linux基金会主持的开源区块链项目&#xff0c;其目的是推动跨行业的区块链技术的开发和应用。以下是Hyperledger的顶级项目&#xff1a; 1. Hyperledger Fabric 描述&#xff1a;Hyperledger Fabric是一个可扩展的企业级区块链平台&…...

操作系统——笔记(1)

操作系统是管理计算机硬件资源&#xff0c;控制其他程序运行并为用户提供交互操作界面的系统软件的集合&#xff0c;控制和管理着整个计算机系统的硬件和软件资源&#xff0c;是最基本的系统软件。 常见的操作系统&#xff1a;ios、windows、Linux。 计算机系统的结构层次&am…...

isEmpty() 和 isBlank()的区别

isEmpty() 和 isBlank()的区别 平时自己开发的时候没有注意到这个地方,直到实习的时候代码审查的时候发现其用法上两者的不同. isEmpty() public static boolean isEmpty(String str) {return str null || str.length() 0; }isBlank() public static boolean isBlank(Strin…...

scrapy生成爬虫数据为excel

scrapy生成爬虫数据为excel 使用openpyxl&#xff08;推荐&#xff09;安装openpyxl库建一个新的Item Pipeline类在settings.py中启用ExcelPipeline说明 使用scrapy-xlsx首先&#xff0c;安装scrapy-xlsx&#xff1a;然后在Scrapy爬虫中使用管道&#xff1a;说明 要使用Scrapy生…...

vscode debug C++无法输入问题

研究了半天vscode debug c无法输入的问题&#xff0c;原来vscode的文档里面已经记录了。issue都是2020年提的了&#xff0c;还没解决。。。 不过人家也确实给了一个解法&#xff1a;用外部的terminal。 不过怎么看都还不是很方便&#xff0c;所以还是推荐直接使用CodeLLDB插件来…...

MODBUS tcp学习总结

MODBUS TCP协议实例数据帧详细分析_modbus 帧结构-CSDN博客...

【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么

TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型&#xff0c;从上到下包括&#xff1a; 应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 TCP/IP模型是四层模型&…...

发现FionaAI:免费体验最新的GPT-4o Mini模型!

你现在可以在FionaAI上免费体验OpenAI刚刚发布的GPT-4o Mini模型&#xff01;作为您在Google Chrome中的ChatGPT驱动助手&#xff0c;FionaAI可以随时随地与您对话&#xff0c;帮助您轻松创作和处理文本。 为什么选择GPT-4o Mini&#xff1f; 最新技术&#xff1a;GPT-4o Mini是…...

Linux Gui 窗口对话和窗口操作

zenity 可以实现窗口对话 eg: zenity --error --width 300 --text "Permission denied. Cannot write to the file." ChosenDate$(zenity --calendar --text "Choose a date" --title "How-To Geek Rota" --day 1 --month 9 --year 2019); …...

人工智能驾驶技术:引领未来道路

随着科技的不断进步&#xff0c;人工智能驾驶技术正以惊人的速度改变着我们的交通方式和生活方式。这项技术不仅令人兴奋&#xff0c;还引发了许多关于安全性、道德和法律等方面的深思。本文将探讨人工智能自动驾驶技术的发展现状、应用前景以及对社会的影响。 技术背景与发展…...

管理的核心是管人,管人的核心就是这3条,看懂的是高手

管理的核心是管人&#xff0c;管人的核心就是这3条&#xff0c;看懂的是高手 一&#xff1a;管欲 每个人都有欲望&#xff0c;无可厚非。管理者的任务就是利用欲望&#xff0c;管理欲望&#xff0c;通过欲望来达到管人的目的。 最需要管理的就是以下两种&#xff1a; 1、金…...

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;自从SDXL提出了长宽桶技术之后&#xff0c;彻底解决了不同长宽比的图像输入问题&#xff0c;现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…...

Linux下如何使用GitLab进行团队协作

在Linux系统中&#xff0c;使用GitLab进行团队协作是非常常见的做法。GitLab是一个基于Git的代码托管和项目管理平台&#xff0c;可以帮助团队成员共享、追踪和管理代码的开发过程。本文将介绍如何在Linux系统中安装和配置GitLab&#xff0c;以及一些常用的团队协作功能。 安装…...

无法连接到internet怎么办?已连接但无internet访问,其实并不难

有时我们会遇到无法连接到Internet的问题&#xff0c;由多种原因引起&#xff0c;包括硬件故障、软件设置问题、网络供应商故障等。本文将介绍无法连接到Internet时可以采取的步骤。 简述 当你无法连接到Internet时&#xff0c;可以按照以下步骤进行检查和解决&#xff1a; 1…...

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日&#xff0c;经欧拉生态创新中心和华为技术有限公司测评&#xff0c;建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统&#xff0c;完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920&#xff08;Taisha 200&#xff09;的兼容性…...

【iOS】——属性关键字的底层原理

strong&#xff0c;retain&#xff0c;copy&#xff0c;atomic&#xff0c;nonatomic c源码 interface propertyTest : NSObject property (nonatomic, strong) NSString *nsstring___StrongTest; property (nonatomic, retain) NSString *nsstring___RetainTest; property (n…...

电影类平台如何选择服务器

电影类平台如何选择服务器 1、数据存储 电影网站对服务器的要求是比较高的&#xff0c;对存储空间的需求特别大&#xff0c;所以在服务器选择上首先要确保足够大的存储空间。另外&#xff0c;当你的网站内容特别多时&#xff0c;内存不够用&#xff0c;可以选择增加内存&#x…...

递归神经网络(RNN)及其预测和分类的Python和MATLAB实现

递归神经网络&#xff08;Recurrent Neural Networks&#xff0c;RNN&#xff09;是一种广泛应用于序列数据建模的深度学习模型。相比于传统的前馈神经网络&#xff0c;RNN具有记忆和上下文依赖性的能力&#xff0c;适用于处理具有时序关联性的数据&#xff0c;如文本、语音、时…...

以flask为后端的博客项目——星云小窝

以flask为后端的博客项目——星云小窝 文章目录 以flask为后端的博客项目——星云小窝前言一、星云小窝项目——项目介绍&#xff08;一&#xff09;二、星云小窝项目——项目启动&#xff08;二&#xff09;三、星云小窝项目——项目结构&#xff08;三&#xff09;四、谈论一…...

CUDA编程02 - 数据并行介绍

一:概述 数据并行是指在数据集的不同部分上执行计算工作,这些计算工作彼此相互独立且可以并行执行。许多应用程序都具有丰富的数据并行性,使其能够改造成可并行执行的程序。因此,对于程序员来说,熟悉数据并行的概念以及使用并行编程语言来编写数据并行的代码是非常重要的。…...

Android 视频音量图标

attrs.xml <?xml version"1.0" encoding"utf-8"?> <resources><!--图标颜色--><attr name"ijkSolid" format"color|reference" /><!--喇叭底座宽度--><attr name"ijkCornerWidth" form…...

VScode 修改 Markdown Preview Enhanced 字体以及大纲编号

修改字体和背景颜色 按快捷键 Ctrl , 打开设置&#xff0c;搜索 markdown-preview-enhanced.previewTheme&#xff0c;选择一个黑色主题的css&#xff0c;如 github-dark.css. 修改自动编号和背景颜色 背景颜色 按 F1 或者 Ctrl Shift P&#xff0c;输入 Customize CSS…...

TCP的FIN报文可否携带数据

问题发现&#xff1a; 发现FTP-DATA数据传输完&#xff0c;TCP的挥手似乎只有两次 实际发现FTP-DATA报文中&#xff0c;TCP层flags中携带了FIN标志 piggyback FIN 问题转化为 TCP packet中如果有FIN flag&#xff0c;该报文还能携带data数据么&#xff1f; 答案是肯定的 RFC7…...

【GoF23种设计模式+简单工厂模式】

一、设计模式概述与类型 1.1、设计模式的一般定义&#xff1a; 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结&#xff0c;使用设计模式是为了可重用代码&#xff0c;让代码更容易被他人理解并且保证代…...

北醒单点激光雷达更改id和波特率以及Ubuntu20.04下CAN驱动

序言&#xff1a; 需要的硬件以及软件 1、USB-CAN分析仪使用顶配pro版本&#xff0c;带有支持ubuntu下的驱动包的&#xff0c;可以读取数据。 2、电源自备24V电源 3、单点激光雷达接线使用can线可以组网。 一、更改北醒单点激光雷达的id号和波特率 安装并运行USB-CAN分析仪自带…...

【线性代数】矩阵变换

一些特殊的矩阵 一&#xff0c;对角矩阵 1&#xff0c;什么是对角矩阵 表示将矩阵进行伸缩&#xff08;反射&#xff09;变换&#xff0c;仅沿坐标轴方向伸缩&#xff08;反射&#xff09;变换。 2&#xff0c;对角矩阵可分解为多个F1矩阵&#xff0c;如下&#xff1a; 二&a…...

聚焦智慧出行,TDengine 与路特斯科技再度携手

在全球汽车行业向电动化和智能化转型的过程中&#xff0c;智能驾驶技术正迅速成为行业的焦点。随着消费者对出行效率、安全性和便利性的需求不断提升&#xff0c;汽车制造商们需要在全球范围内实现低延迟、高质量的数据传输和处理&#xff0c;以提升用户体验。在此背景下&#…...

虚拟机迁移报错:虚拟机版本与主机“x.x.x.x”的版本不兼容

1.虚拟机在VCenter上从一个ESXi迁移到另一个ESXi上时报错&#xff1a;虚拟机版本与主机“x.x.x.x”的版本不兼容。 2.例如从10.0.128.13的ESXi上迁移到10.0.128.11的ESXi上。点击10.0.128.10上的任意一台虚拟机&#xff0c;查看虚拟机版本。 3.确认要迁移的虚拟机磁盘所在位…...

【教程】vscode添加powershell7终端

win10自带的 powershell 是1.0版本的&#xff0c;太老了&#xff0c;更换为powershell7后&#xff0c;在 vscode 的集成终端中没有显示本篇教程记录在vscode添加powershell7终端的过程 打开vscode终端配置 然后来到这个页面进行设置 查看 powershell7 的安装位置&#xff…...

如何乘上第四次工业革命的大船

如何乘上第四次工业革命的大船 第四次工业革命通常被认为是信息技术和数字化时代的到来,但具体影响哪些产业,以及它将如何演变和展开,仍然是一个广泛讨论的话题。 然而,已经可以看到一些领域可能受到第四次工业革命的深远影响,例如人工智能、物联网、大数据、生物技术、可…...

RKNN执行bash ./build-linux_RK3566_RK3568.sh 报错

目录 报错信息: 原因分析: 解决办法: 报错信息: CMake Error at /usr/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake:49 (message): Could not find compiler set in environment variable CC: aarch64-linux-gnu-gcc. Call Stack (most recent call fir…...

Linux常用命令整理

本文将分享一些常用的Linux命令。根据功能的不同&#xff0c;大概分为以下几个方面&#xff0c;一是文件相关命令&#xff0c;二是进程相关命令&#xff0c;三是网络相关命令&#xff0c;四是磁盘相关命令&#xff0c;五是用户管理相关命令&#xff0c;六是系统命令。 1. 文件…...

python 闭包、装饰器

一、闭包&#xff1a; 1. 外部函数嵌套内部函数 2. 外部函数返回内部函数 3.内部函数可以访问外部函数局部变量 闭包&#xff08;Closure&#xff09;是指在一个函数内部定义的函数&#xff0c;并且内部函数可以访问外部函数的局部变量&#xff0c;即使外部函数已经执行…...

[pycharm]解决pycharm运行程序出现卡住scanning files to index索引的问题

有时候会出现索引问题&#xff0c;显示scanning files to index 解决方法&#xff1a; in pycharm, go to the "File" on the left top, then select "invalidate caches/restart...", and press "invalidate and restart". 然后等它自己重启…...

python每日学习11:numpy库的用法(下)

python每日学习11&#xff1a;numpy库的用法(下) 数组的拼接 名方法称说明concatenate连接沿现有轴的数组序列hstack水平堆叠序列中的数组&#xff08;列方向&#xff09;vstack竖直堆叠序列中的数组&#xff08;行方向&#xff09;concatenate函数用于沿指定轴连接相同形状的两…...

【Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

6、基于Fabirc 2.X 通用电子存证系统部署

evidence 将GOPATH设置为/root/go,拉取项目&#xff1a; cd $GOPATH/src && git clone https://gitee.com/henan-minghua_0/evidence.git 在/etc/hosts中添加&#xff1a; 127.0.0.1 orderer.example.com 127.0.0.1 peer0.org1.example.com 127.0.0.1 peer1.org…...

Linux Vim 由浅入深的教程

引言 原文链接 Vim是Linux系统中非常强大的文本编辑器&#xff0c;因其强大的功能和灵活的操作而受到广泛使用。尤其是在服务器管理和开发环境中&#xff0c;Vim几乎是必备工具。本教程将以CentOS 7为例&#xff0c;详细讲解Vim的安装、基本操作以及一些高级技巧&#xff0c;…...

MIT6.824(6.5840) Lab1笔记+源码

文章目录 其他人的内容&#xff0c;笔记写的更好&#xff0c;思路可以去看他们的MapReduceworkermapreduce coordinatorrpc纠错 源码worker.gocoordinator.gorpc.go 原本有可借鉴的部分 mrsequential.go&#xff0c;多看几遍源码 其他人的内容&#xff0c;笔记写的更好&#xf…...

【目录】8051汇编与C语言系列教程

8051汇编与C语言系列教程 作者将狼才鲸创建日期2024-07-23 CSDN文章地址&#xff1a;【目录】8051汇编与C语言系列教程本Gitee仓库原始地址&#xff1a;才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 一、本教程目录 序号教程名称简述教程链接1点亮LCD灯通过IO…...

群管机器人官网源码

一款非常好看的群管机器人html官网源码 搭建教程&#xff1a; 域名解析绑定 源码文件上传解压 访问域名即可 演示图片&#xff1a; 群管机器人官网源码下载&#xff1a;客户端下载 - 红客网络编程与渗透技术 原文链接&#xff1a; 群管机器人官网源码...