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

ARM 汇编编写 LED 灯

一、一步步点亮LED

1. 硬件工作原理及原理图查阅

LED 本身有 2 个接线点,一个是 LED 的正极,一个是 LED 的负极。LED 这个硬件的功能就是点亮或者不亮,物理上想要点亮一颗 LED 只需要给他的正负极上加正电压即可,要熄灭一颗 LED 只需要去掉电压即可。


2. 查阅原理图了解板载 LED 硬件接法

查阅原理图,发现开发板上一共有 5 颗LED。其中一颗 D26 的接法是:正极接 5V,负极接地。因此这颗 LED 只要上电就会常亮。因此我们分析这颗 LED 是电源指示灯。

剩下4颗 LED 的接法是:正极接 3.3V,负极接了 SoC 上的一个引脚(GPIO),具体详细接法是:

D22:GPJ0_3
D23:GPJ0_4
D24:GPJ0_5
D25:PWMTOUT1(GPD0_1)	

在这里插入图片描述

在这里插入图片描述


3. 分析如何点亮及熄灭LED(GPIO)

分析:LED点亮的要求是:正极和负极之间有正向电压差。
思考:在开发板上如何为LED制造这个电压差让它点亮呢?
解答:因为正极已经定了( 3.3V ),而负极接在了 SoC 的引脚上,可以通过 SoC 中编程来控制负极的电压值,因此我们可以通过程序控制负极输出低电平(0V),这样在正负极上就有了压差,LED 即可点亮。


二、 数据手册查阅及相关寄存器浏览

1. GPIO概念的引入

GPIO:general purpose input output 通用输入输出。

GPIO 就是芯片的引脚(芯片上的引脚有些不是 GPIO,只有一部分是),作为 GPIO 的这类引脚,他的功能和特点是可以被编程控制它的工作模式,也可以编程控制他的电压高低等。

通过之前的分析我们知道,我们设计电路时就把 LED 接在了一个 GPIO 上,这样我们就可以通过编程控制 GPIO 的模式和输入输出值来操控 LED 亮还是灭;如果你当时设计电路时把 LED 接在非 GPIO 上那就不可能了。


2. 阅读数据手册中有关部分

当我们想要通过编程操控 GPIO 来操作 LED 时,我们首先需要通读一下 S5PV210 的数据手册中有关于 GPIO 的部分,这部分在数据手册的 Section2.2 中。


3. GPIO相关的寄存器介绍

回忆下之前说过的,软件操作硬件的接口是:寄存器。

我们当前要操作的硬件是 LED,但是 LED 实际是通过 GPIO 来间接控制的,所以当前我们实际要操作的设备其实是 SoC 的 GPIO。要操作这些 GPIO,必须通过设置他们的寄存器。

Each Port Group has 2 types of control registers. One works in normal mode, and the other works in power down mode (STOP, DEEP-STOP, 
SLEEP mode) .Normal registers (For example, GPA0CON, GPA0DAT, GPA0PUD, and GPA0DRV) are the former, 
and power down registers (For example, GPA0CONPDN, and GPA0PUDPDN) are the latter. If, S5PV210 enter the power down mode, all configurations and Pull-down controls 
are selected by power down registers.
查阅数据手册可知,GPJ0相关的寄存器有以下:
GPJ0CON, (GPJ0 control)GPJ0控制寄存器,用来配置各引脚的工作模式	
GPJ0DAT, (GPJ0 data)当引脚配置为input/output模式时,寄存器的相应位和引脚的电平高低相对应。
GPJ0PUD, (pull up down)控制引脚内部弱上拉、下拉
GPJ0DRV, (driver)配置GPIO引脚的驱动能力
GPJ0CONPDN,(记得是低功耗模式下的控制寄存器)
GPJ0PUDPDN  (记得是低功耗模式下的上下拉寄存器)
注:在驱动 LED 点亮时,应该将 GPIO 配置为 output 模式。实际上真正操控LED的硬件,主要的有:GPJ0CON, GPJ0DAT 这么2个。
如何点亮 LED,编程的步骤是:
1、操控 GPJ0CON 寄存器中,选中 output 模式
2、操控 GPJ0DAT 寄存器,相应的位设置为 0

在这里插入图片描述


在这里插入图片描述


三、从零开始手写汇编点亮LED

1. GPxCON、GPxDAT寄存器分析

GPJ0 端口一共有 8 个引脚,分别记住:GPJ0_0 ~ GPJ0_7,相关重要寄存器就是GPJ0CON 、GPJ0DAT。

GPJ0CON 寄存器中设置 8 个引脚的工作模式(32/8=4,每个引脚可以分到 4 位,譬如 GPJ0_0 对应的 bit 位为 bit0~bit3 ,GPJ0_3 对应的位为 bit12~bit15。工作方法是:给相应的寄存器位写入相应的值,该引脚硬件就会按照相应的模式去工作。譬如给 bit12~bit15 写入 0b0001,GPJ0_3 引脚就成为输出模式了)。


2. 从零开始写代码操作寄存器

需要哪些先决条件才能写呢?

  1. 硬件接法和引脚:GPJ0_3 GPJ0_4 GPJ0_5 低电平亮/高电平灭
  2. GPJ0CON(0xE0200240)寄存器和 GPJ0DAT(0xE0200244)寄存器
  3. 工程管理:Makefile等
    根据以上分析,我们就知道代码的写法了,代码所要完成的动作就是:
    把相应的配置数据写入相应的寄存器即可。
root@ubuntu:/home/aston/workspace/git_xxx# cat led.S
/** 文件名: led.S* 作者: xxx* 描述: 这是我们一步步点亮 LED 教程的自己写的第一个裸机程序*/_start://第一步: 把 0x11111111 写入到 0xE0200240(GPJ0CON)位置ldr r0, =0x11111111     //从后面的 = 可以看出用的是 ldr 伪指令,因为需要编译器来判断这个数ldr r1, =0xE0200240     //是合法立即数还是非法立即数,一般写代码都用 ldr 伪指令str r0, [r1]            // 寄存器间接寻址。功能是把 r0 中的数写入到 r1 中的数为地址的内存中去//第二步: 把 0x0 写入到 0xE0200244(GPJ0DAT)位置ldr r0, =0x0ldr r1, =0xE0200244str r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮flag:b flag                  //这两行写了一个死循环。因为裸机程序是直接在 CPU 上运行的, CPU 会//逐行运行裸机程序直到 CPU 断电关机。如果我们的程序所有的代码都//执行完了 CPU 就会跑飞(跑飞以后是未定义的,所以千万不能让 CPU//跑飞),不让 CPU 跑飞的办法就是在我们整个程序执行完后添加死循环root@ubuntu:/home/aston/workspace/git_xxx# ls
Makefile  led.S  mkgcc.sh*  mkv210_image.c  readme.txt  write2sd*  说明.txtroot@ubuntu:/home/aston/workspace/git_xxx# make
arm-linux-gcc -o led.o led.S -c
arm-linux-ld -Ttext 0x0 -o led.elf led.o
arm-linux-ld: warning: cannot find entry symbol _start; defaulting to 00000000
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin
root@ubuntu:/home/aston/workspace/git_xxx# 

3. 编译、下载、运行看结果

编译时用我们的工程管理,直接 make 编译得到 led.bin 和 210.bin。

下载运行可以用 usb 启动 dnw 下载;也可以用 sd 卡烧录下载,根据自己的情况用。
一般都用 usb 下载,因为方便。如果电脑主板插上 dnw 会死机没法解决,那只有 sd 卡下载启动了。

注意:开发板上按下电源键之后4颗 LED 默认都是半亮的,当我们下载程序后其中 3 颗变的很亮,这说明我们的程序已经运行了。


4. 总结和回顾

(软件控制硬件思想、寄存器意义、原理图数据手册的作用)
软件到底是怎么控制硬件的?为什么程序一运行硬件就能跟着动?
软件编程控制硬件的接口就是:寄存器


四、使用位运算实现复杂点亮要求

上节回顾:代码写的更漂亮一些

  1. 用宏定义来定义寄存器名字,再来操作。
  2. 用 b . 来实现死循环
  3. 用.global把_start链接属性改为外部,消除链接时的警告

1. 问题提出:如何只点亮中间1颗(两边是熄灭的)LED

分析:程序其实就是写了 GPJ0CON 和 GPJ0DAT 这 2 个寄存器而已,功能更改也要从这里下手。

GPJ0CON 寄存器不需要修改,GPJ0DAT 中设置相应的输出值即可。


2. 常用位运算:与、或、非、移位

位与(&) 位或(|) 位非(取反 ~) 移位(左移<< 右移>>)

使用位运算实现功能

1<<3  等于 0b1000
1<<5  等于 0b100000
(1<<3)|(1<<5)  等于 0b101000

扩展一下:如何只熄灭中间1颗而点亮旁边2颗

ldr r0, =((0<<3) | (1<<4) | (0<<5))

源代码

root@ubuntu:/home/aston/workspace/git_xxx# cat led.S 
/** 文件名: led.S* 作者: xxx* 描述: 这是我们一步步点亮 LED 教程的自己写的第一个裸机程序*/#define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244 .global _start  //解决 make 编译警告: arm-linux-ld: warning: cannot find entry symbol _start; defaulting to 00000000// 把 _start 链接属性改为外部,这样其他文件就可以看见 _start 了
_start://第一步: 把所有引脚设置成输出模式 ldr r0, =0x11111111     //从后面的 = 可以看出用的是 ldr 伪指令,因为需要编译器来判断这个数ldr r1, =GPJ0CON        //是合法立即数还是非法立即数,一般写代码都用 ldr 伪指令str r0, [r1]            // 寄存器间接寻址。功能是把 r0 中的数写入到 r1 中的数为地址的内存中去//第二步: 把中间 LED (GPJ0_4) 的输出设置为 0,其余两颗设置为 1,剩下的其他位不管 ldr r0, =((1 << 3) | (0 << 4) | (1 << 5))ldr r1, =GPJ0DATstr r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮b .                     // . 代表当前这一句指令的地址,这个就是高大上的死循环root@ubuntu:/home/aston/workspace/git_xxx# ls
led.S  Makefile  mkgcc.sh  mkv210_image.c  readme.txt  write2sd  说明.txt
root@ubuntu:/home/aston/workspace/git_xxx# make
arm-linux-gcc -o led.o led.S -c
arm-linux-ld -Ttext 0x0 -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin
root@ubuntu:/home/aston/workspace/git_xxx# 

五、汇编编写延时函数并实现LED闪烁效果

1. 延时函数原理

在汇编中实现延时的方法:用一些没有目的的代码来执行消耗时间,达到延时的效果。


2. 汇编编写延时函数

汇编编写延时函数的原理,用一个寄存器存放一个数字,然后在循环中每个循环里给数字减 1,然后再判断这个数字的值是否为0 .如果为 0 则停止循环,如果不为 0 则继续循环。


3. 汇编编写及调用函数的方式

汇编中整个汇编的主程序是一个死循环,这个死循环是我们汇编程序的主体,类似于 C 中的 main 函数。其他函数必须写在这个主死循环程序的后面(死循环外),不然会出错。

汇编编写 delay 延时函数时,要注意函数的初始化和函数体的位置,不能把初始化写在了循环体内。

汇编中调用函数用 bl 指令,子函数中最后用 mov pc, lr 来返回。


4. 源代码

root@ubuntu:/home/aston/workspace/git_xxx# ls
led.S  Makefile  mkgcc.sh  mkv210_image.c  readme.txt  write2sd  说明.txt
root@ubuntu:/home/aston/workspace/git_xxx# cat led.S 
/** 文件名: led.S* 作者: xxxx* 描述: 这是我们一步步点亮 LED 教程的自己写的第一个裸机程序*/#define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244 .global _start  //解决 make 编译警告: arm-linux-ld: warning: cannot find entry symbol _start; defaulting to 00000000// 把 _start 链接属性改为外部,这样其他文件就可以看见 _start 了
_start://第一步: 把所有引脚设置成输出模式 ldr r0, =0x11111111     //从后面的 = 可以看出用的是 ldr 伪指令,因为需要编译器来判断这个数ldr r1, =GPJ0CON        //是合法立即数还是非法立即数,一般写代码都用 ldr 伪指令str r0, [r1]            // 寄存器间接寻址。功能是把 r0 中的数写入到 r1 中的数为地址的内存中去flash://第二步:全部点亮 ldr r0, =((0 << 3) | (0 << 4) | (0 << 5))ldr r1, =GPJ0DATstr r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮//第三步: 延时bl  delay               // 使用 bl 进行函数调用//第四步:全部熄灭 ldr r0, =((1 << 3) | (1 << 4) | (1 << 5))ldr r1, =GPJ0DATstr r0, [r1]            //第五步: 延时bl  delay               // 使用 bl 进行函数调用b flashb .                     // . 代表当前这一句指令的地址,这个就是高大上的死循环//延时函数
delay:ldr r2, =10000000ldr r3, =0x0
delay_loop:sub r2, r2, #1          // r2 = r2 -1cmp r2, r3              // cmp 会影响 z 标志位,如果 r2 等于 r3 则 z =1,下一句中 eq 就会成立bne delay_loopmov pc, lr              // 函数调用返回root@ubuntu:/home/aston/workspace/git_xxx# make
arm-linux-gcc -o led.o led.S -c
arm-linux-ld -Ttext 0x0 -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin
root@ubuntu:/home/aston/workspace/git_xxx# 

六、再难一点的流水灯效果

1. 流水灯原理分析

流水灯又叫跑马灯,实现的效果就是:挨着的LED一次点亮熄灭(同时只有1颗LED亮的)。


2. 源代码

root@ubuntu:/home/aston/workspace/git_xxx# ls
led.S  Makefile  mkgcc.sh  mkv210_image.c  readme.txt  write2sd  说明.txt
root@ubuntu:/home/aston/workspace/git_xxx# cat led.S 
/** 文件名: led.S* 作者: xxx* 描述: 流水灯 */#define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244 .global _start  //解决 make 编译警告: arm-linux-ld: warning: cannot find entry symbol _start; defaulting to 00000000// 把 _start 链接属性改为外部,这样其他文件就可以看见 _start 了
_start://第一步: 把所有引脚设置成输出模式 ldr r0, =0x11111111     //从后面的 = 可以看出用的是 ldr 伪指令,因为需要编译器来判断这个数ldr r1, =GPJ0CON        //是合法立即数还是非法立即数,一般写代码都用 ldr 伪指令str r0, [r1]            // 寄存器间接寻址。功能是把 r0 中的数写入到 r1 中的数为地址的内存中去//要实现流水灯,只要在主循环中实现 1 圈的流水显示效果即可
flash://第 1 步: 点亮 LED1, 其他熄灭ldr r0, =~(1 << 3) ldr r1, =GPJ0DATstr r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮//然后延时bl  delay               // 使用 bl 进行函数调用//第 2 步: 点亮 LED2, 其他熄灭ldr r0, =~(1 << 4) ldr r1, =GPJ0DATstr r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮//然后延时bl  delay               // 使用 bl 进行函数调用//第 3 步: 点亮 LED3, 其他熄灭ldr r0, =~(1 << 5) ldr r1, =GPJ0DATstr r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮//然后延时bl  delay               // 使用 bl 进行函数调用b flashb .                     // . 代表当前这一句指令的地址,这个就是高大上的死循环//延时函数
delay:ldr r2, =10000000ldr r3, =0x0
delay_loop:sub r2, r2, #1          // r2 = r2 -1cmp r2, r3              // cmp 会影响 z 标志位,如果 r2 等于 r3 则 z =1,下一句中 eq 就会成立bne delay_loopmov pc, lr              // 函数调用返回root@ubuntu:/home/aston/workspace/git_xxx# make
arm-linux-gcc -o led.o led.S -c
arm-linux-ld -Ttext 0x0 -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin
root@ubuntu:/home/aston/workspace/git_xxx# 

相关文章:

Python查询PostgreSQL数据库

哈喽,大家好,我是木头左!Python与PostgreSQL的连接 需要了解如何在Python中连接到PostgreSQL数据库。这通常涉及到使用一个库,如psycopg2,它是Python中用于PostgreSQL的最流行的适配器。安装psycopg2非常简单,可以通过pip进行安装: pip install psycopg2安装完成后,可以…...

解决Python执行命令时路径空格引发的困扰

哈喽,大家好,我是木头左!在编程实践中,常常需要通过Python执行系统命令,这包括调用外部程序、脚本或是其他命令行工具。然而,一个看似简单却常被忽视的细节——文件路径中的空格,可能会导致程序意外崩溃或行为异常。本篇文章将深入探讨当路径中包含空格时,如何在Python…...

The 2024 International Collegiate Programming Contest in Hubei Province, China

Preface 感觉好久没训练了,这周末又要出战西安,只好找个平时的晚上抽空训练一场 这场题本身质量还是不错的,但由于徐神被模拟题关了一整场,我前期被一个分类讨论写的心态爆炸 导致最后一个medium的计数题没做出来,然后一个medium~hard的D题转化和性质基本都挖掘完了,最后…...

Linux - Centos6/7忘记root密码怎么办?

转载:https://www.cnblogs.com/witz/p/10183533.html 一、Centos6.x (1)查看操作系统版本以及内核版本(2)重启服务器,到如下界面(3)好吧...其实是这个界面,按E进行编辑(4)选择第二个,然后按E键(5)在quiet后面加上simple(试过了,不管用)或者1,然后回车(6)回…...

【2024年5月备考新增】】 考前篇(6)《案例分析知识点(2)- 范围管理》

3 范围管理 3.1 知识重点 6大过程和ITTO需求类别&需求跟踪矩阵项目范围说明书的内容WBS分解活动&字典&注意事项确认范围的步骤和检查范围变更的原因其他3.2 6大过程和ITTO 过程定义开展时间作用规划范围管理是为了记录如何定义、确认和控制项目范围及产品范围,而…...

centos 安装 pyppeteer

https://www.jianshu.com/p/fc9e2523ecd8...

ARM 汇编编写 LED 灯

一、一步步点亮LED 1. 硬件工作原理及原理图查阅 LED 本身有 2 个接线点&#xff0c;一个是 LED 的正极&#xff0c;一个是 LED 的负极。LED 这个硬件的功能就是点亮或者不亮&#xff0c;物理上想要点亮一颗 LED 只需要给他的正负极上加正电压即可&#xff0c;要熄灭一颗 LED…...

用python编写远程控制程序

1.前言 远程控制是网络安全的一个极为重要的内容&#xff0c;无论是网络安全的维护者还是破坏者都会对此进行研究。维护者的目标是保证远程控制的安全&#xff0c;而破坏者的目标是希望能够凭借各种手段实现对目标设备的远程控制。 本文主要研究三个内容。 1.如何编写一个基于…...

安装docker,docker-compose

安装docker,docker-composeLinux时间不对ARM同步时间X86同步时间centos8更换源安装dockerARM安装dockerX86安装dockerdocker设置阿里镜像源docker 下载拉取报错安装docker-composeARM X86安装docker-composemac安装docker-composeLinux时间不对 ARM同步时间 # 安装chrony yum…...

一文带你深入理解【Java基础】· 泛型

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…...

RabbitMQ学习笔记

目录 尚硅谷mq视频学习笔记 1.1. MQ 的相关概念 1.1.1. 什么是MQ 1.1.2. 为什么要用MQ 1.1.3. MQ 的分类 1.ActiveMQ 2.Kafka 3.RocketMQ 4.RabbitMQ 1.1.4. MQ 的选择 1.Kafka 2.RocketMQ 3.RabbitMQ 1.2. RabbitMQ 1.2.1. RabbitMQ 的概念 1.2.2. 四大核心概念…...

Java安全-CC1

CC1 这里用的是组长的链子和yso好像不太一样&#xff0c;不过大体上都是差不多的。后半条的链子都是一样的&#xff0c;而且这条更短更易理解。yso的CC1过段时间再看一下。 环境 Maven依赖&#xff1a; <dependencies><dependency><groupId>commons-colle…...

【得到日期对象NSDate的各个部分 Objective-C语言】

一、得到日期对象NSDate的各个部分,年月日时分秒 1.例如,我这儿有1个NSDate对象, NSDate *date = [NSDate date]; 这个日期里面是不是有年、有月、有日、有时、有分、有秒 我想单独的拿到这个日期里面的年,该怎么拿 用date.year属性,行吗,不行,因为没有这个属性 用…...

前端面试常考 | CSS垂直居中解决方案

文章目录一. 前言二. flx布局实现三. Grid布局实现四. 绝对定位transform五. 绝对定位负margin五. 绝对定位calc六. 定位加margin一. 前言 前段时间刷到一篇帖子&#xff0c;说面试竟然遇到了CSS的考点&#xff0c;让回答CSS实现垂直居中的方式有哪些?&#xff0c;都2022年了…...

Flink中的UDF的实现

Flink 的 Table API 和 SQL 提供了多种自定义函数的接口&#xff0c;以抽象类的形式定义。当前 UDF 主要有以下几类&#xff1a; 标量函数&#xff08;Scalar Functions&#xff09;&#xff1a;将输入的标量值转换成一个新的标量值&#xff1b;表函数&#xff08;Table Funct…...

Linux教程

Linux 目录结构 /bin&#xff1a;&#xff08;binary&#xff09;存放的是一些二进制文件&#xff0c;但是在Linux中二进制文件是可以被执行的。这个目录中的命令文件是给普通用户使用&#xff08;非超级管理员用户&#xff09;。 /etc&#xff1a;Linux下所有的配置文件都会…...

1.3 Apache Hadoop的重要组成-hadoop-最全最完整的保姆级的java大数据学习资料

文章目录1.3 Apache Hadoop的重要组成1.3 Apache Hadoop的重要组成 HadoopHDFS(分布式文件系统)MapReduce(分布式计算框架)Yarn(资源协调框架)Common模块 Hadoop HDFS&#xff1a;&#xff08;Hadoop Distribute File System &#xff09;一个高可靠、高吞吐量的分布式文件系统…...

【蓝桥杯】第十四届模拟赛第一期及第二期填空汇总

目录 1.A题&#xff08;进制位数&#xff09; 位运算符 第一期 问题描述 解析 第二期 解析 代码 2.B题&#xff08;日期问题&#xff09; 第一期 问题描述 解析 代码实现 执行结果 第二期 问题描述 解析 3.C题&#xff08;数学问题&#xff09; 第一期 问题…...

Go学习之路-环境搭建

默认运行设备系统&#xff1a;MacOS 安装 安装包下载地址&#xff08;下面3个都可以&#xff09;&#xff1a; https://studygolang.com/dl https://golang.google.cn/dl/ https://golang.org/dl/ 我这里选择 pkg包、一键安装、默认的安装路径 /usr/local/go 环境 设置go语言…...

Siamese Neural Network (SNN: 孪生神经网络)

【学习参考】&#xff1a; https://blog.csdn.net/MyArrow/article/details/122539749https://blog.csdn.net/MyArrow/article/details/122539749 Siamese network 孪生神经网络--一个简单神奇的结构 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/35040994 【Siamese和Ch…...

22个每个程序员都应该知道的 Git 命令

在这篇文章中&#xff0c;我写了一个快速学习 git 命令的备忘单。它将包括开发人员每天使用的命令&#xff0c;如 git add、git commit、git pull、git fetch&#xff0c;并共享其他有用的 git 命令。 我一直使用Git的一些命令&#xff0c;今天这个列表清单&#xff0c;希望也…...

Android动画——使用动画启动Activity

1、使用动画启动Activity概述 我们在Android开发应用时&#xff0c;会遇到一个页面跳转到另一个页面的情况&#xff0c;这时候我们如果使用动画过渡会使得页面更加的流畅。这是一个滑动式的进入和退出的动画可以看到Android的过渡动画可以在不同状态之间建立视觉联系。您可以为…...

【YOLO系列改进NO.46】改进激活函数为ACON

文章目录 前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv7的如何改进进行详细…...

JavaScript -- 09. 内置对象的介绍

文章目录内置对象1 解构赋值1.1 保留默认值1.2 接受剩余的所有参数1.3 对函数执行结果解构1.4 交换两个变量的值1.5 二维数组结构2 对象的解构2.1 声明对象同时解构对象2.2 先声明再解构2.3 解构不存在的属性2.4 设置解构别名2.5 设置解构默认值3 对象的序列化3.1 对象的序列化…...

Spring核心与设计思想

⭐️前言⭐️ 这篇文章作为Spring篇目的开篇&#xff0c;带领大家认识Spring&#xff0c;知道为什么要用Spring框架&#xff0c;以及了解Spring的核心与设计思想。 &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【Jav…...

Java的字符串String

文章目录什么是字符串String类的声明为什么我们的String是不可变的为什么String类用final修饰String的创建字符串比较相等关于Java中的比较关于字符串不同赋值操作对应的内存分配那对象如何进行比较内容字符串常量池StringTalbe的位置字符串常见的操作拼接操作获得字符串的子串…...

net-java-php-python-网络安全教育学习网站计算机毕业设计程序

net-java-php-python-网络安全教育学习网站计算机毕业设计程序 net-java-php-python-网络安全教育学习网站计算机毕业设计程序本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1a;…...

git分支详解——记住这些指令能帮助你解决大部分git的分支问题

Github 之 分支 branch 操作之 查看分支/创建分支/切换分支/提交分支/删除分支/合并分支 等操作 一、简单介绍 二、查看分支 1、查看本地所有分支&#xff1a;git branch 2、查看远程有哪些分支&#xff1a;git branch -r 3、查看所有分支&#xff08;本地和远程的&#xff09;…...

jdk11新特性——JShell交互性工具

目录一、jshell概述二、jshell位置三、jshell示例3.1、示例一&#xff08;声明变量并赋值&#xff09;3.2、示例二&#xff08;输出打印内容&#xff09;3.3、示例三&#xff08;帮助命令&#xff09;一、jshell概述 java9引入了jshell这个交互性工具&#xff0c;让Java也可以…...

Git全套,从简到细

Git DravenGit一、git工具引入二、git本地工具2.1、下载2.2、使用2.3、修改2.4、查看历史版本2.5、回退历史版本2.6、起死回生三、git远程仓库3.1、使用gitee3.2、配置本地仓库参数3.3、查看gitee仓库3.4、修改后推送四、git两人协作-非冲突小智小杨五、git两人协作-冲突六、gi…...

【分布式能源的选址与定容】基于非支配排序多目标遗传优化算法求解分布式能源的选址与定容(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…...

基于PHP+MySQL托管中心管理系统的设计与实现

随着在校学生人数的不断增加,学生的数量也在不断的增加,但是很多时候因为父母工作忙没时间,以及一些其他的原因没办法对学生间辅导,这就诞生了托管中心这一行业,但是传统的托管中心多是人工手动的模式进行管理的,这很不科学也不合理,为了改变这一现状,我们开发了托管中心管理系…...

【算法】排序——直接排序

内部排序的全部过程都是在内存中进行的。按排序策略的不同可以将内部排序划分为直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序等。其中前三种排序方法属于简单的排序方法&#xff0c;其特点是排序过程直观、易于理解和实现&#xff0…...

华为高级技术专家多年经验分享微服务治理体系、架构及实践文档

前言 都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升…...

HTML+CSS网页设计期末课程大作业 【茶叶文化网站设计题材】web前端开发技术 web课程设计 网页规划与设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…...

数据结构与算法(六) 贪心算法

这篇文章来讲贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;这是一种特殊的动态规划算法 1、本质 我们在之前的文章中讲过&#xff0c;动态规划可以解决一类具有最优子结构和重叠子问题特征的问题 贪心算法本质上是一种特殊的动态规划算法&#xff0c;因此在…...

LeetCode-1774. 最接近目标价格的甜点成本【数组,背包问题,优化暴力,回溯】

LeetCode-1774. 最接近目标价格的甜点成本【数组&#xff0c;背包问题&#xff0c;优化暴力&#xff0c;回溯】题目描述&#xff1a;解题思路一&#xff1a;转化为0-1背包求解。一&#xff1a;因为每种配料最多可以用两次&#xff0c;所以直接把每种辅料变成两个。二&#xff1…...

Python封装机制及实现方法

大部分语言都具备 3 个典型特征&#xff0c;即封装、继承和多态。 简单的理解封装&#xff08;Encapsulation&#xff09;&#xff0c;即在设计类时&#xff0c;刻意地将一些属性和方法隐藏在类的内部&#xff0c;这样在使用此类时&#xff0c;将无法直接以“类对象.属性名”&…...

Flet 教程大全合集

Flet是什么 Flet 是一个框架,使您能够轻松地以您喜欢的语言构建实时 Web、移动和桌面应用程序,并与您的团队安全地共享它们。无需前端经验。 Flet有什么优势 Flet有什么特点 在几分钟内从想法到应用程序 用于您的团队、周末项目、数据输入表单、信息亭应用程序或高保真原型…...

mongodb整合springbootQ

SpringBoot整合MongoDB_一个冬天的童话的博客-CSDN博客_mongodb的依赖SpringBoot整合MongoDB的过程https://blog.csdn.net/m0_53563908/article/details/1268980981&#xff0c;环境配置 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId&g…...

【吴恩达机器学习笔记】十一、聚类

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…...

BUUCTF Misc 黑客帝国 [MRCTF2020]你能看懂音符吗 [HBNIS2018]caesar [HBNIS2018]低个头

黑客帝国 下载文件 一长串16进制&#xff0c;复制到在线16进制转文本 很明显是一个RAR文件&#xff0c;使用脚本将16进制转换成文件 import binasciihex_data这里填十六进制数据 outopen(res.rar,wb) out.write(binascii.unhexlify(hex_data)) out.close() 需要密码&#xff…...

基于多目标灰狼算法的冷热电联供型微网低碳经济调度(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…...

Linux系统启动过程总结

Linux系统启动过程总结 1、Linux 中 rc.local、init.d、rc.x、init 这几个文件(夹)各有什么作用?启动执行的脚本应该均放在 rc.local 中吗? - 知乎 2、/etc/inittab文件详解_muxi01lingyi的博客-CSDN博客_/etc/inittab /etc/inittab文件详解 - 莘莘学子 - 博客园 3、Li…...

防火墙ssh详解讲解

♥️作者&#xff1a;小刘在C站\ ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 一.防火墙配置对外的默认 二.防火墙配置内部ospf 三.防火墙远程管理 四.远程管理…...

Java【String】【StringBuilder】【StringBuffer】你都会用吗

文章目录前言一、常用的方法1、字符串构造2、字符串比较3、字符串查找4、字符串转化5、字符串替换6、字符串分割7、字符串截取二、字符串的不可变性三、StringBuilder、StringBuffer总结前言 在校招和笔试过程中&#xff0c;字符串是相当频繁被问到的话题&#xff0c;在之前的…...

Himall商城Xml帮助类 XML序列化 OSS策略

#region XML序列化 OSS策略 /// <summary> /// XML序列化 /// </summary> /// <param name="obj">序列对象</param> /// <param name="filePath">XML文件路径</param> /// …...

【人民币识别】人民币序列号识别【含GUI Matlab源码 908期】

⛄一、简介 本文描述的人民币序列号识别系统实现了从图像预处理到识别结果的过程, 而序列号识别是本文的重要内容.以序列号区域为研究对象, 主要包括图像预处理、图像分割以及序列号识别等过程。 1 图像预处理 人民币图像总体上来说灰度偏高, 灰度值基本上都大于150 (对8位25…...

html静态网站基于动漫网站网页设计与实现共计4个页面

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…...

Himall商城Zip帮助类压缩文件(Zip)

public class ZipInfo { /// <summary> /// 解/压缩成功状态 /// </summary> public bool Success { get; set; } /// <summary> /// 解/压缩结果信息 /// <…...

MyBatis-Plus条件构造器[常用的模糊查询、排序查询、逻辑查询和指定字段查询案例]

系列文章目录 Mybatis-Plus知识点[MyBatisMyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作&#x…...

cubeIDE开发, 如何结合FreeRTOS开发STM32程序

一、STM32CubeIDE使用内置的FreeRTOS 不同于STM32CubeIDE使用像RTThread这些第三方物联网系统&#xff0c;STM32CubeIDE在安装时就已经在MiddleWare中间件一栏直接支持了FreeRTOS操作系统。 既然STM32CubeIDE已经把FreeRTOS深度整合到了自家的系统中&#xff0c;所以移植及使用…...

写给儿子的一封信

最近听闻你成绩有点不理想&#xff0c;爸爸想跟你讲几个想法。 之前学羽毛球的时候&#xff0c;我往往带有期望&#xff0c;希望你能学成像林丹一样。每次你去上课&#xff0c;我也在旁边盯着&#xff0c;后来我发现效果不好&#xff0c;你好像很害怕我说你&#xff0c;学的也不…...

eclipse导入svn项目,项目有红色的感叹号/叉号

eclipse导入svn项目&#xff0c;项目左下角有红色的感叹号/叉号 1.首先调出Problems ( window -> show view-> Problems ) 查看报错信息 其次&#xff0c;看看Project是否开启了项目自动构建&#xff08;Build Automatically&#xff09; 2.根据报错信息逐一解决 3.…...

基于 Serverless 架构的 CI/CD 框架:Serverless-cd

近日&#xff0c;Serverless 开发者平台 Serverless Devs 重磅发布基于 Serverless 架构的轻量级 CI/CD 框架 ——Serverless-cd。Serverless-cd 是一款运行在 Serverless 架构上的功能强大而灵活&#xff0c;安全&#xff0c;低成本的 CI/CD 开源框架。该框架基于 Serverless …...

Vue Class与Style绑定

Vue Class与Style绑定1 Class绑定1.1 字符串写法1.2 数组写法1.3 对象写法2 Style绑定2.1 对象写法2.2 数组写法1 Class绑定 在Vue中&#xff0c;如果要为某个元素动态添加某个类&#xff0c;并不会使用document.getElementById等选择器将该元素获得&#xff0c;而是使用v-bin…...

MMDetection内三个实用工具详解:日志分析、结果分析、混淆矩阵

实用工具目录 一、日志分析使用方法实际案例 二、结果分析pkl结果文件生成使用方法实际案例 三、混淆矩阵使用方法实际案例遇到的UserWarning解决方案 MMDetection官方除了训练和测试脚本&#xff0c;他们还在 mmdetection/tools/ 目录下提供了许多有用的工具。本帖先为大家重点…...

统计学中的新进展与研究领域

统计学领域一直处于不断发展和演变之中&#xff0c;涌现出许多新的研究方向和方法。以下是一些统计学领域的最新研究进展和热点&#xff1a; 1. **贝叶斯统计&#xff1a;** 贝叶斯统计作为一种概率推断的方法&#xff0c;在近年来受到越来越多的关注。随着计算技术的不断进步…...

单位内部防泄密策略与技术实践

在信息时代&#xff0c;企业内部数据安全至关重要&#xff0c;尤其是涉及核心竞争力的重要文件&#xff0c;员工的不当操作或恶意泄露都可能给企业带来重大损失。本文将从制度建设、技术防护、以及日常管理三个方面入手&#xff0c;探讨如何构建一套行之有效的内部防泄密体系&a…...

网络中的基本概念

网络初识 局域网&#xff1a;把若干个电脑组成在一起&#xff0c;通过路由器进行组网。 广域网&#xff1a;把局域网进一步的连接&#xff0c;构成更复杂的网络体系。 IP地址&#xff1a;区分主机。 端口号&#xff1a;区分主机上不同的程序。 协议&#xff1a;是一种约定&…...

Minecraft 我的世界服务器Java版开服联机教程

本教程使用Paper核心开服 1、进入控制面板 1.2、第一次购买服务器会安装游戏端&#xff0c;大约5分钟左右&#xff0c;如果长时间处于安装状态请联系客服 2、开启服务器 2.1、等待出现同意Minecraft EULA 协议时&#xff0c;点击“我接受” 2.2、等待running出现服务器就打开了…...

【Java开发面试系列】JVM相关面试题(精选)

【Java开发面试系列】JVM相关面试题&#xff08;精选&#xff09; 文章目录 【Java开发面试系列】JVM相关面试题&#xff08;精选&#xff09;前言一、JVM组成二、类加载器三、垃圾回收四、JVM实践&#xff08;调优&#xff09; &#x1f308;你好呀&#xff01;我是 山顶风景独…...

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第23课-烟花插件的售卖效果优化

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第23课-烟花插件的售卖效果优化 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智…...

在win10折腾Flowise:部署和尝试

Flowise 是一种低代码/无代码拖放工具&#xff0c;旨在让人们轻松可视化和构建 LLM 应用程序。 本地部署 操作系统&#xff1a; win10 由于网络、操作系统等各种未知问题&#xff0c;使用npm install -g flowise的方式&#xff0c;尝试了很多次&#xff0c;都没有部署成功&am…...

PPT为何无法复制粘贴?附解决办法!

PPT文件里的内容无法复制&#xff0c;或者复制后无法粘贴&#xff0c;这是怎么回事呢&#xff1f; 这种情况&#xff0c;一般是因为PPT被设置了保护&#xff0c;设置了以“只读方式”打开&#xff0c;就无法进行复制粘贴了。PPT的“只读方式”不同&#xff0c;解决方法也不同&…...

vj题单 Color the ball c 差分

题目链接&#xff1a;Problem - 1556 (hdu.edu.cn) 笔者思路&#xff1a;利用一维差分数组进行区间同时1的操作&#xff0c;然后还原为一维前缀和数组 笔者答案&#xff1a; #include<stdio.h> int cut[100010];int main() {long N,a,b,i,k1,j;scanf("%ld",…...

算法学习笔记(5.0)-基于比较的高效排序算法-归并排序

##时间复杂度O(nlogn) 目录 ##时间复杂度O(nlogn) ##递归实现归并排序 ##原理 ##图例 ##代码实现 ##非递归实现归并排序 ##释 #代码实现 ##递归实现归并排序 ##原理 是一种基于分治策略的基础排序算法。 1.划分阶段&#xff1a;通过不断递归地将数组从中点处分开&…...

谷歌全力反击 OpenAI:Google I/O 2024 揭晓 AI 新篇章,一场激动人心的技术盛宴

&#x1f680; 谷歌全力反击 OpenAI&#xff1a;Google I/O 2024 揭晓 AI 新篇章&#xff0c;一场激动人心的技术盛宴&#xff01; 在这个人工智能的全新时代&#xff0c;只有谷歌能让你眼前一亮&#xff01;来自全球瞩目的 Google I/O 2024 开发者大会&#xff0c;谷歌用一场…...