驱动移植【简略版】
一、RTC时钟
测试一下看看能不能用就行
二、LED指示灯驱动
1.在设备树找到LED的节点,改对应的引脚,
2.还需要注意引脚的复用引脚有没有被其它东西占用,可以通过NXP官方提供的cofingue tool软件去查看,注释掉就行
三、RJGT102加密芯片驱动
1.rjgt102.tar.gz.temp文件拉进去虚拟机,在虚拟机下改名为rjgt102.tar.gz为压缩包文件。
2.cd 到 /home/hugo/Demo
目录下
把rjgt102.tar.gz拷贝到 /home/hugo/Demo
目录下
cd /home/hugo/Demo
3.在工作目录解压rjgt102.tar文件
hugo@hugo-virtual-machine:~/Demo$ tar -xvf rjgt102.tar.gz
4.修改i2c.c里面对应i2c节点:
根据原理图,看加密芯片接在I2C总线哪个编号,修改i2c.c里面对应i2c节点。(在原理图中,是I2C1,但是在代码中是I2C0,从0开始算起的)
5.修改Makefile交叉编译路径,按照自己实际情况去修改。
我这里的有一个环境变量配置文件,已经包括了交叉编译器所在的路径,我在编译文件前,都会先激活这个环境变量配置文件,让它生效,所以我这里的Makefile不需要配置完整的CC交叉编译器路径。
5.1 (我的环境变量配置文件路径:)
5.2 修改后的Makeifile文件
- (只是回顾:可以看交叉编译2 )
# 源文件与目标定义
src = $(wildcard ./*.c)
object = $(patsubst %.c,%.o,$(src))
target = rjgt102# 交叉编译器配置(直接从环境变量中引用)
CC = aarch64-poky-linux-gcc# 目标系统根目录
SDKTARGETSYSROOT = /home/hugo/SDK/sysroots/aarch64-poky-linux# 编译选项
CFLAGS = -O2 -pipe -g -feliminate-unused-debug-types \-mcpu=cortex-a53+crc+crypto \-fstack-protector-strong \--sysroot=$(SDKTARGETSYSROOT) \-isystem $(SDKTARGETSYSROOT)/usr/include$(target): $(object)$(CC) -o $@ $^ $(CFLAGS)%.o: %.c$(CC) -o $@ -c $< $(CFLAGS).PHONY: clean
clean:rm -f $(target) $(object)
6. 编译
使能交叉编译工具链的环境变量:
source /home/hugo/SDK/environment-setup-aarch64-poky-linux
清理再编译:
make clean && make
结果:
6.1 如果报错,手动验证有没有头文件能不能找到:
# 检查 string.h 是否存在
ls $(SDKTARGETSYSROOT)/usr/include/string.h # 应存在
# 检查编译器是否能找到该头文件
echo '#include <string.h>' | aarch64-poky-linux-gcc -E -xc - --sysroot=$(SDKTARGETSYSROOT) -isystem $(SDKTARGETSYSROOT)/usr/include
# 若无报错,则配置成功
7. 加密芯片执行
四、硬件看门狗
1.看原理图
2.通过在设备树注册的方式,看看SET0 \ SET1 \SET2 接的GPIO引脚 对应的编号是多少
1.给对应的GPIO口进行注册
2.重新编译生成设备树dtb,在开发板上使用命令查看GPIO引脚对应的编号。
命令:
# 查看GPIO映射(需要内核启用DEBUG_FS)
cat /sys/kernel/debug/gpio
输出中会显示所有已注册的GPIO。
找到gpiochip3
(对应GPIO4)的基地址,然后找到了我们自己在设备树给GPIO4_1 / GPIO4_0 / GPIO4_21配置的节点名字(set0 set1 set2 下面图是旧图是user-set2,不要紧),然后看到GPIO引脚对应的编号是96 97 117 。
3. 编写脚本去设置GPIO引脚的值(改变SET1 SET2 SET0的值)
把设备树dts文件里的看门狗代码注释掉。
使用GPIO对应的编号编写脚本watchdog.sh 去设置GPIO引脚的值(高低电平),通过设置GPIO引脚的值设置看门狗模式。
#!/bin/bash
# Copyright 2021 Tronlong Elec. Tech. Co. Ltd. All Rights Reserved.
# Description:
# Watch dog test.## 这个脚本SET1和SET2的值固定是1,只改变SET0的值去设置10s或60s延时复位,有需要可以修改其它值
#################################################
## GPIO4_1 --> SET0 97 ##
## GPIO4_0 --> SET1 96 ##
## GPIO4_21 --> SET2 117 ##
#################################################readonly VERSION="1.0"
GPIO=""
SET0_PIN=97
SET1_PIN=96
SET2_PIN=117# Watchdog timeout
# 开始时默认是60s,set0,1,2的值都为1
# 1: 60s
# 用来保存看门狗超时时间,然后下面的代码会根据这个值来设置看门狗超时时间
s0_val=1
s1_val=1
s2_val=1# Help message.
# 用来打印帮助信息
usage() {echo "Usage: $1 <options> [-g gpio <-t timeout>]options:--gpio(-g) Watch dog gpio number (e.g 124)--timeout(-t) Watch dog timeout(unit: second, value: 10 or 60)--version(-v) Print version.--help(-h) Print this help message.e.g../watchdog.sh -g 124 -t 10"
}# Program entry function
# 程序入口函数
main() {#一、判断第一个参数case $1 in#1.如果第一个参数的值为--help或者-h,则打印帮助信息并退出,$0表示脚本名称./watchdog.sh--help | -h) usage $0 exit 0;;#2.如果第一个参数的值为--gpio或者-g,则判断参数个数是否小于4,如果小于4则打印帮助信息并退出--gpio | -g)if [[ $# < 4 ]]; then usage $0exit 0fi #如果参数个数大于等于4,则继续执行下面的代码GPIO=$2 #将第二个参数赋值给GPIO变量,这个引脚用来喂狗的if [[ $3 != "--timeout" && $3 != "-t" ]]; then #判断第三个参数是否为--timeout或者-t,如果不是则打印帮助信息并退出usage $0exit 0fi if [[ $4 == 60 ]]; then #判断第四个参数是否为10,如果是则将TIMEOUT变量赋值为0s2_val=1s1_val=1s0_val=1elif [[ $4 == 10 ]]; then #判断第四个参数是否为60,如果是则将TIMEOUT变量赋值为1s2_val=1s1_val=1s0_val=0else #如果第四个参数既不是10也不是60,则打印帮助信息并退出usage $0exit 0fi;;#3.如果第一个参数的值为--version或者-v,则打印版本信息并退出--version | -v)echo "Version: ${VERSION}"exit 0;;*)usage $0exit 0;;esac # case..esac结构#二、开始喂狗echo "Feeding the watch dog..."# 1.Configure watchdog 10 second timeout # 设置喂狗的模式(10s还是60s),导出SET0引脚,# 并设置为输出模式,根据TIMEOUT的值设置SET0引脚的值if [[ ! -d /sys/class/gpio/gpio${SET2_PIN} ]]; thenecho ${SET2_PIN} > /sys/class/gpio/exportfiecho out > /sys/class/gpio/gpio${SET2_PIN}/directionecho $s2_val > /sys/class/gpio/gpio${SET2_PIN}/valueif [[ ! -d /sys/class/gpio/gpio${SET1_PIN} ]]; thenecho ${SET1_PIN} > /sys/class/gpio/exportfiecho out > /sys/class/gpio/gpio${SET1_PIN}/directionecho $s1_val > /sys/class/gpio/gpio${SET1_PIN}/valueif [[ ! -d /sys/class/gpio/gpio${SET0_PIN} ]]; thenecho ${SET0_PIN} > /sys/class/gpio/exportfiecho out > /sys/class/gpio/gpio${SET0_PIN}/directionecho $s0_val > /sys/class/gpio/gpio${SET0_PIN}/value# 2.Export WDI pin # 导出WDI引脚,并设置为输出模式,为下面喂狗做准备if [[ ! -d /sys/class/gpio/gpio${GPIO} ]]; thenecho ${GPIO} > /sys/class/gpio/exportfiecho out > /sys/class/gpio/gpio${GPIO}/direction# Feed watch dog# 循环喂狗,循环去给WDI引脚赋值0和1while true; doecho 1 > /sys/class/gpio/gpio${GPIO}/valuesleep 1echo 0 > /sys/class/gpio/gpio${GPIO}/valuesleep 1echo "feeding..."done#三、如果程序执行到这里,说明上面循环退出了,表明程序异常退出了,需要重启系统echo "Feed the watch dog done!"
}#使用‘@` 可以将所有参数作为一个整体传递给函数或命令
#@表示将所有传递给脚本的参数转发给main` 函数
main $@
4. 执行硬件看门狗脚本程序
# 124是喂狗的GPIO编号
# 10是设置系统复位延时为10s
# &是放到后台去执行
./watchdog.sh -g 124 -t 10
# 124是喂狗的GPIO编号
# 60是设置系统复位延时为60s
./watchdog.sh -g 124 -t 60 &
5.(另一种方法)将看门狗写到设备树里直接写死
可以像第2步一样,把(SET0 SET1 SET2)的 GPIO引脚的高低电平的值写死,固定就是那个延时时间进行复位。
五 、以太网
一个千兆网口、两个百兆网口(其中一个百兆网口是扩展的)。
百兆网口接在usb hub上,会自动识别。
六、USB有问题
七、HDMI
八 、4G模块 (还有两个模块没有调)
在设备树里使能4G的电源引脚(PCIE引脚,因为4G模块插在PCIE接口,然后通过协议转换芯片转的usb然后接在usb总线上)
九、wifi
8188(因为wifi模块硬件接触不良)
8811 (参考创龙官方提供的8188 Makeflie文件 去修改8811的Makefile文件)
1.根据创龙提供的指导文档,使用rtl8821cu.tar.gz源码包对评估板进行RTL8811 模块驱动适配,(因RTL8821CU驱动向下兼容RTL8811协议)。
将usb_wifi_test 的 src 目录下的 WIFI 驱动源码拷贝至/home/hugo/Demo/usb_wifi_test/src
目录下
2.在环境方面,内核镜像和模块编译成功,打开Makefile配置交叉编译环境,指定IMX8平台、交叉编译链及内核源码路径。Makefile关键修改的参数如下:
指定目标平台:CONFIG_PLATFORM_FS_IMX8 = y
配置交叉编译链路径:CROSS_COMPILE = aarch64-poky-linux-
绑定内核源码路径:KSRC = /home/hugo/IMX8/Kernel/Linux-5.4.70
3.驱动编译:加载SDK环境变量并执行make命令,成功生成8821cu.ko(实际向下兼容8811)WIFI驱动文件。
hugo@hugo-virtual-machine:~/Demo/usb_wifi_test/src/rtl8821cu$ source /home/hugo/SDK/environment-setup-aarch64-poky-linux
hugo@hugo-virtual-machine:~/Demo/usb_wifi_test/src/rtl8821cu$ make
文件系统修改
1.系统主机名修改
修改制卡包里面的文件系统文件试试。看看重新制卡会不会变?
2.指示灯脚本
直接放后台运行就行
相关文章:
驱动移植【简略版】
一、RTC时钟 测试一下看看能不能用就行 二、LED指示灯驱动 1.在设备树找到LED的节点,改对应的引脚, 2.还需要注意引脚的复用引脚有没有被其它东西占用,可以通过NXP官方提供的cofingue tool软件去查看,注释掉就行 三、RJGT102加…...
Qt QTimer 详解与使用指南
Qt QTimer 详解 QTimer 是 Qt 中用于实现定时器功能的类,通过周期性地触发 timeout() 信号来执行任务。以下从核心用法、高级功能、注意事项及示例代码等方面进行详细解析。 1. 基本用法 步骤: 创建对象:实例化 QTimer,通常指定…...
PDK中technology file从tf格式转换为lef格式
在数字后端流程中需要导入technology file工艺文件,一般传统的PDK中都提供.tf形式,能够在Synopsys ICC中进行导入。但是由于Cadence Innovus不断地完善,更多的工程采用了其进行数字后端设计。不过Cadence Innovus导入的是.lef格式的工艺文件&…...
Spring Boot资源耗尽问题排查与优化
Spring Boot服务运行一段时间后新请求无法处理的问题。服务没有挂掉,也没有异常日志。思考可能是一些资源耗尽或阻塞的问题。 思考分析 首先,资源耗尽可能涉及线程池、数据库连接、内存、文件句柄或网络连接等。常见的如线程池配置不当,导致…...
图+文+语音一体化:多模态合成数据集构建的实战与方法论
目录 图文语音一体化:多模态合成数据集构建的实战与方法论 一、多模态合成数据的核心价值 二、系统架构概览 三、核心模块与实现建议 ✅ 1. 文→图:图像合成(Text-to-Image) ✅ 2. 图→文:自动描述(I…...
java的lambda和stream流操作
Lambda 表达式 ≈ 匿名函数 (Lambda接口)函数式接口:传入Lambda表达作为函数式接口的参数 函数式接口 只能有一个抽象方法的接口 Lambda 表达式必须赋值给一个函数式接口,比如 Java 8 自带的: 接口名 作用 Functio…...
Excalidraw:一个免费开源的白板绘图工具
Excalidraw 是一款免费开源的白板绘图工具,主打手绘风格,界面简洁易用,支持实时协作。它常用于绘制技术架构图、流程图、线框图、思维导图等,尤其适合需要快速草图设计的场景。 Excalidraw 支持的主要功能如下: &…...
推荐一款Umi-OCR_文字识别工具
Umi-OCR_文字识别工具 https://github.com/hiroi-sora/Umi-OCR/releases/latest...
leetcode0146. LRU 缓存-medium
1 题目:LRU 缓存 官方标定难度:中 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓…...
单线服务器有什么优点
单线服务器是一个普遍存在的术语,它是指一种服务器连接互联网时只使用一个物理线路的服务器。简单来说,就是使用一条网络线路的服务器,上传和下载的数据都通过一个通道实现。在当今数字化的时代,服务器的选择至关重要。今天&#…...
Manus AI:突破多语言手写识别技术壁垒之路
Manus AI与多语言手写识别 讨论Manus AI如何突破多语言手写识别的技术壁垒。 写一篇详细的博客有重点有链接超详细 Manus AI:突破多语言手写识别技术壁垒之路 在人工智能领域,多语言手写识别一直是极具挑战性的难题。不同语言的字符形态、书写规则大相…...
pip 的包下载之后存放在哪?
以下是关于 pip 下载的包存放位置的详细说明,适用于不同操作系统场景: 一、临时缓存位置 当使用 pip install 安装包时,下载的包会先暂存在 临时缓存目录,安装完成后自动删除。以下是各系统默认路径: 操作系统缓存路…...
文章记单词 | 第38篇(六级)
一,单词释义 distress [dɪˈstres] n. 悲痛;苦恼;忧虑;贫困;危难;不幸 v. 使悲痛;使苦恼;使忧虑odor [ˈəʊdə(r)] n. 气味;(尤指)难闻的气味…...
L2-006 树的遍历
L2-006 树的遍历 问题描述格式输入格式输出样例输入样例输出评测用例规模与约定解析参考程序难度等级 问题描述 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 格式输入 输入第一行给出一个正整数N࿰…...
在国产麒麟Kylin Linux Advanced Server V10中使用QT5开发环境并支持中文输入
切记:不要安装第三方源的工具包,包括QT官网的!!! 在联网的情况下按以下步骤安装即可: sudo yum groupinstall "Development Tools" -y sudo yum install qt5-qtbase-devel qt5-qtdeclarative-d…...
C语言动规学习
文章目录 一、动态规划的基本概念1. 最优子结构2. 重叠子问题 二、动态规划的求解步骤三、动态规划与递归的比较四、例题(只讲思维,空间时间复杂度大小不与题目比较)1、斐波那契数列1. 定义状态2. 找出状态转移方程3. 初始化边界条件4. 确定计…...
Vue3中provide和inject的用法示例
在 Vue3 中,provide 和 inject 用于实现跨层级组件通信。以下是一个简单的示例: 1. 父组件 (祖先组件) - 提供数据 javascript 复制 // ParentComponent.vue import { provide, ref, reactive } from vue;export default {setup() {// 提供静态数据p…...
fastdds:传输层SHM和DATA-SHARING的区别
下图是fastdds官方的图,清晰地展示了dds支持的传输层: 根据通信双方的相对位置(跨机器、同机器跨进程、同进程)的不同选择合适的传输层,是通信中间件必须要考虑的事情。 跨机器:udp、tcp 跨机器通信,只能通过网络, f…...
MQ基础篇
1.初识MQ 1.同步调用 概念: 同步调用是一种程序执行方式,在调用一个函数或服务时,调用方会一直等待被调用方执行完成并返回结果,才会继续执行后续代码 ,期间调用线程处于阻塞状态。 同步调用的优势: 时…...
网络编程2
day2 一、UDP编程 1.编程流程 2.函数接口 3.注意 (1)、对于TCP是先运行服务器,客户端才能运行。(2)、对于UDP来说,服务器和客户端运行顺序没有先后,因为是无连接,所以服务器和客户端谁先开始,没有关系.(3)、一个服务器…...
Python环境中在线训练机器学习模型所遇到的问题及解决方案
我最近开发个智能控制系统,包括实时数据采集、预测、策略优化等功能,最近增加在线学习功能,也就是在线进行模型训练,在线进行模型训练时出现了问题,现象为: 控制台报: cmdstanpy - INFO - Chain [1] start processing所有任务、线程停止,Web服务登录无法访问后台的pyt…...
「仓颉编程语言」Demo
仓颉编程语言」Demo python 1)# 仓颉语言写字楼管理系统示例(虚构语法)# 语法规则:中文关键词 类Python逻辑定义 写字楼管理系统属性:租户库 列表.新建()报修队列 列表.新建()费用单价 5 # 元/平方米方法 添加租户(名称, 楼层, 面积):…...
《软件设计师》复习笔记(11.4)——处理流程设计、系统设计、人机界面设计
目录 一、业务流程建模 二、流程设计工具 三、业务流程重组(BPR) 四、业务流程管理(BPM) 真题示例: 五、系统设计 1. 主要目的 2. 设计方法 3. 主要内容 4. 设计原则 真题示例: 六、人机界面设…...
win11系统截图的几种方式
在 Windows 11 中,系统内置的截图功能已全面升级,不仅支持多种截图模式,还整合了录屏、OCR 文字识别和 AI 增强编辑等功能。以下是从基础操作到高阶技巧的完整指南: 一、快捷键截图(效率首选) 1. Win Sh…...
http://noi.openjudge.cn/——2.5基本算法之搜索——1998:寻找Nemo
文章目录 题目宽搜代码优先队列深搜代码小结 题目 总时间限制: 2000ms 内存限制: 65536kB 描述 Nemo 是个顽皮的小孩. 一天他一个人跑到深海里去玩. 可是他迷路了. 于是他向父亲 Marlin 发送了求救信号.通过查找地图 Marlin 发现那片海像一个有着墙和门的迷宫.所有的墙都是平行…...
win10系统完美配置mamba-ssm全整合方案
好久没瞎写东西了,刚好最近遇到一个逆天需求:要在win10平台上配置可用的mamba-ssm环境。由于这个环境原版以及相关依赖都是仅适配linux的,即使是依赖conda环境直接拿来往windows系统上装也全是bug,网上大量的垃圾教程也都是错的&a…...
MQTTClient.c中的协议解析与报文处理机制
MQTTClient.c中的协议解析与报文处理机制 1. 协议解析的核心逻辑 (1)报文头部解析 MQTT协议报文由固定头(Fixed Header) 可变头(Variable Header) 负载(Payload)三部分组成。在rea…...
LeetCode每日一题4.18
2364.统计坏数对的数目 问题 问题分析 根据题目要求,(i, j) 是一个坏数对的条件是: i < j j - i ! nums[j] - nums[i],即 nums[j] - j ! nums[i] - i 因此,我们可以转换问题:对于每个 j,找到所有 i &l…...
cmd查询占用端口并查杀
查看特定端口的占用情况 netstat -ano | findstr 端口号 netstat -ano | findstr 端口号 结束指定进程 askkill /T /F /PID PID askkill /T /F /PID PID...
ETL数据集成平台在交通运输行业的五大应用场景
在智能交通与数字物流时代,交通运输企业每天产生海量数据——车辆轨迹、货物状态、乘客流量、设备日志……但这些数据往往被困在分散的系统中:GPS定位数据躺在车载终端里,物流订单卡在Excel表中,地铁客流统计锁在本地服务器内。如…...
自定义 el-menu
使用的工具:vue2 element-ui <!DOCTYPE html> <html><head><link rel"stylesheet" href"https://unpkg.com/element-ui/lib/theme-chalk/index.css"><style>.el-menu--horizontal {border-bottom: none !impor…...
创维E900V20C-国科GK6323V100C-rtl8822cs-安卓9.0-短接强刷卡刷固件包
创维E900V20C/创维E900V20D-国科GK6323V100C-安卓9.0-强刷卡刷固件包 创维E900V20C 刷机说明: 1、用个老款4G,2.0的U盘,fat32,2048块单分区格式化, 5个文件复制到根目录,插盒子靠网口U口&…...
DemoGen:用于数据高效视觉运动策略学习的合成演示生成
25年2月来自清华、上海姚期智研究院和上海AI实验室的论文“DemoGen: Synthetic Demonstration Generation for Data-Efficient Visuomotor Policy Learning”。 视觉运动策略在机器人操控中展现出巨大潜力,但通常需要大量人工采集的数据才能有效执行。驱动高数据需…...
影楼精修-高低频磨皮算法解析
注意:本文样例图片为了避免侵权,均使用AIGC生成; 高低频磨皮基础 高低频磨皮是一种常用于人像后期修图的技术,它能在保留皮肤纹理的同时柔化瑕疵,使皮肤看起来更加自然细腻。高低频磨皮的算法原理如下: …...
打造搜索神功:Express 路由中的关键词探查之道
前言 在 Web 开发的江湖,Express 好比一位身怀绝技的武林高手,出手稳准狠,擅长解决各种疑难杂症。今天,我们将与这位高手并肩作战,一探关键词搜索路由的奥义。这不是枯燥的教学,而是一场充满玄机与笑点的江湖奇遇。挥起代码之剑,踏上探索之路,不仅能习得招式,还能在轻…...
kubernetes-使用ceph-csi
kubernetes-使用ceph-csi Kubernetes (简称K8s)和Ceph都是开源的云计算技术,K8s是一个容器编排平台,而Ceph是一个分布式存储系统。将K8s和Ceph集成在一起可以为应用程序提供高可用性和持久性存储。本文主要介绍如何在使用openEul…...
从Shell到域控:内网渗透中定位域控制器的8种核心方法
在内网渗透中,定位域控制器(Domain Controller, DC)是攻防对抗的关键环节。本文结合实战经验与工具技术,总结出8种从Shell快速发现域控主机的方法,涵盖命令探测、网络扫描、日志分析等维度,助你系统…...
FA-YOLO:基于FMDS与AGMF的高效目标检测算法解析
本文《FA-YOLO: Research On Efficient Feature Selection YOLO Improved Algorithm Based On FMDS and AGMF Modules》针对YOLO系列在特征融合与动态调整上的不足,提出两种创新模块:FMDS(细粒度多尺度动态选择模块)和AGMF(自适应门控多分支聚焦融合模块)。论文结构…...
【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-结束和重新开始游戏
结束和重新开始游戏 文章目录 结束和重新开始游戏1、概述2、更新Globals.h3、触发GAME_WON和GAME_LOST事件4、对游戏结束的反应5、重启游戏6、创建新游戏按钮7、完整代码8、总结在本文中,将实现胜负检测并添加重新开始功能以完成游戏循环。 1、概述 在本文中,我们将更新我们…...
OpenAI重返巅峰:o3与o4-mini引领AI推理新时代
引言 2025年4月16日,OpenAI发布了全新的o系列推理模型:o3和o4-mini,这两款模型被官方称为“迎今为止最智能、最强大的大语言模型(LLM)”。它们不仅在AI推理能力上实现了质的飞跃,更首次具备了全面的工具使…...
《软件设计师》复习笔记(12.3)——质量管理、风险管理
目录 一、质量管理 1. 质量定义 2. 质量管理过程 3. 软件质量特性(GB/T 16260-2002) 4. 补充知识 McCall质量模型: 软件评审 软件容错技术 真题示例: 二、风险管理 1. 风险管理的目的: 2. 风险管理流程及内…...
优化自旋锁的实现
在《C11实现一个自旋锁》介绍了分别使用TAS和CAS算法实现自旋锁的方案,以及它们的优缺点。TAS算法虽然实现简单,但是因为每次自旋时都要导致一场内存总线流量风暴,对全局系统影响很大,一般都要对它进行优化,以降低对全…...
项目实战--新闻分类
从antd中拿一个表格 表格 Table - Ant Designhttps://ant-design.antgroup.com/components/table-cn#table-demo-edit-cell使用的是可编辑单元格 实现引入可编辑单元格: import React, { useState, useEffect, useRef, useContext } from react import { Button, …...
人像面部关键点检测
此工作为本人近期做人脸情绪识别,CBAM模块前是否能加人脸关键点检测而做的尝试。由于创新点不是在于检测点的标注,而是CBAM的改进,因此,只是借用了现成库Dilb与cv2进行。 首先,下载人脸关键点预测模型:Index of /file…...
OpenVINO怎么用
目录 OpenVINO 简介 主要组件 安装 OpenVINO 使用 OpenVINO 的基本步骤 OpenVINO 简介 OpenVINO(Open Visual Inference and Neural Network Optimization)是英特尔推出的一个开源工具包,旨在帮助开发者在英特尔硬件平台上高效部署深度学…...
写论文时降AIGC和降重的一些注意事项
‘ 写一些研究成果,英文不是很好,用有道翻译过来句子很简单,句型很单一。那么你会考虑用ai吗? 如果语句太正式,高级,会被误判成aigc ,慎重选择ai润色。 有的话就算没有用ai生成,但…...
SpringBoot学习(properties、yml(主流)、yaml格式配置文件)(读取yml配置文件的3种方式)(详解)
目录 一、SpringBoot配置文件详解。 1.1配置文件简介。 1.2配置文件分类。(3种配置文件格式) <1>application.properties(properties格式)。 <2>application.yml(yml格式)。 <3>applicat…...
STM32单片机C语言
1、stdint.h简介 stdint.h 是从 C99 中引进的一个标准 C 库的文件 路径:D:\MDK5.34\ARM\ARMCC\include 大家都统一使用一样的标准,这样方便移植 配置MDK支持C99 位操作 如何给寄存器某个值赋值 举个例子:uint32_t temp 0; 宏定义 带参…...
前端为什么需要单元测试?
一. 前言 对于现在的前端工程,一个标准完整的项目,通常情况单元测试是非常必要的。但很多时候我们只是完成了项目而忽略了项目测试。我认为其中一个很大的原因是很多人对单元测试认知不够,因此我写了这篇文章,一方面期望通过这篇…...
QT 文件和文件夹操作
文件操作 1. 文件读写 QFile - 基本文件操作 // 只写模式创建文件(如果文件已存在会清空内容) file.open(QIODevice::WriteOnly);// 读写模式创建文件 file.open(QIODevice::ReadWrite);// 追加模式(如果文件不存在则创建) fil…...