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

有趣的Hack-A-Sat黑掉卫星挑战赛——跟踪卫星

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加,太空已经成为国家赖以生存与发展的命脉之一,凝聚着巨大的国家利益,太空安全的重要性日益凸显[1]。而在信息化时代,太空安全与信息安全紧密地结合在一起。

2020年9月4日,美国白宫发布了首份针对太空网络空间安全的指令——《航天政策第5号令》,其为美国首个关于卫星和相关系统网络安全的综合性政策,标志着美国对太空网络安全的重视程度达到新的高度。在此背景下,美国自2020年起,连续两年举办太空信息安全大赛“黑掉卫星(Hack-A-Sat)”,在《Hack-A-Sat太空信息安全挑战赛深度解析》一书中有详细介绍,本文介绍了Hack-A-Sat黑掉卫星挑战赛的跟踪卫星这道赛题的解题过程。

题目介绍

You're in charge of controlling our hobbyist antenna. The antenna is controlled by two servos, one for azimuth and the other for elevation. Included is an example file from a previous control pattern. Track the satellite requested so we can see what it is broadcasting.

主办方假定参赛者已经获得了地面站卫星天线的控制系统的权限。天线控制是通过两个舵机控制的,分别控制方位角和仰角。题目要求参赛者通过控制天线的方位角和仰角跟踪卫星。

给出的资料有examples.tar.gz,解压后包含4个文件:

(1)README.txt:描述了题目更加详细的信息。方位角舵机和仰角舵机由来自控制器的PWM信号控制(关于PWM的知识会在下文介绍)。已知舵机的占空比(Duty Circles)为2457~7372,对应天线的0°~180°。要求得出控制舵机信号在观测的720s内每一秒的占空比来控制天线,从而成功跟踪卫星。

(2)challenge[0-4].txt、solution[0-4].txt:这两个文件告诉我们最终要输入的格式。题目没有给出关于解决方案格式的信息,但我们察看其中一个示例解决方案,以challenge[0].txt和 solution[0].txt为例,如下所示,challenge[0].txt给出地面站的位置、要跟踪的卫星、开始跟踪卫星的时刻、要跟踪的时长。查看solution[0].txt得知我们最终要输入的文件格式如下,要输入720行,每一行对应1s:包括3个要素,分别为时间戳、控制地面站卫星天线方位、俯仰的舵机PWM值。

<timestamp>,<PWM0>,<PWM1>

challenge[0].txt内容:

Track-a-sat control system
Latitude: 52.5341
Longitude: 85.18
Satellite: PERUSAT 1
Start time GMT: 1586789933.820023
720 observations, one every 1 second
Waiting for your solution followed by a blank line...

solution[0].txt内容:

1586789933.820023, 6001, 2579
1586789934.820023, 5999, 2581
1586789935.820023, 5997, 2583
1586789936.820023, 5995, 2585
1586789937.820023, 5994, 2587
1586789938.820023, 5992, 2589
1586789939.820023, 5990, 2591
1586789940.820023, 5988, 2593
1586789941.820023, 5987, 2594
1586789942.820023, 5985, 2596
1586789943.820023, 5983, 2598
1586789944.820023, 5981, 2600
1586789945.820023, 5979, 2602
1586789946.820023, 5977, 2604
1586789947.820023, 5976, 2606
……

(3)active.txt:地面站使用的TLE。如下所示,该文件包含许多公共卫星,通过某颗卫星的TLE可以计算该卫星在后续某一时刻的位置。

CALSPHERE 1
1 00900U 64063C 20101.19586769 .00000241 00000-0 24890-3 0 9996
2 00900 90.1576 27.2823 0024882 263.3747 232.8474 13.73355076761081
CALSPHERE 2
1 00902U 64063E 20101.07898481 .00000023 00000-0 20957-4 0 9991
2 00902 90.1686 29.8886 0016745 309.6664 60.7009 13.52681717551296
LCS 1
1 01361U 65034C 20101.48494378 .00000021 00000-0 16643-2 0 9996
2 01361 32.1376 139.9201 0004925 231.9284 128.0769 9.89297118986548
TEMPSAT 1
1 01512U 65065E 20101.13158021 .00000007 00000-0 -51836-5 0 9992
2 01512 89.8739 226.9331 0071605 111.6801 301.3452 13.33427200658976
CALSPHERE 4A
1 01520U 65065H 20101.19568728 .00000042 00000-0 65250-4 0 9998
2 01520 90.0331 128.8999 0069815 356.3666 119.2980 13.35809885661087
OPS 5712 (P/L 160)
1 02826U 67053A 20101.49397074 .00000535 00000-0 15707-3 0 9992
2 02826 69.9298 358.0006 0004382 11.4117 348.7115 14.49027125737592
……

另外,主办方给出了一个链接地址,使用netcat连接到题目给的链接后,会给出进一步提示,如图4-1所示(其中的坐标、观察时间和需要跟踪的卫星都是随机的)。

图4-1 antenna题目的提示信息

连接后,会告诉参赛者需要跟踪的卫星,以及地面站的位置、开始跟踪卫星的时刻,要求参赛者输入天线控制舵机在观测的720s内每一秒的占空比来控制天线,从而成功跟踪卫星,全部720s的占空比都正确后,会返回flag值。

题目编译及测试

该挑战题的代码位于antenna目录下,查看challenge、solver目录下的Dockerfile,发现其中用到的是python:3.7-slim,为了加快题目的编译进度,在antenna目录下新建一个文件sources.list,内容如下:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

将sources.list复制到antenna、challenge、solver目录下,修改challenge、solver目录下的Dockerfile,在所有的FROM python:3.7-slim下方添加:

ADD sources.list /etc/apt/sources.list

打开终端,进入antenna所在目录,执行命令:

sudo make build

使用make test命令进行测试,会顺利通过,其输出信息如图4-2所示。

图4-2 antenna挑战题测试输出

相关背景知识

1.卫星星历TLE文件介绍

TLE是两行轨道根数(TLE),覆盖了气象卫星、海洋卫星、地球资源卫星、教育卫星等应用卫星。以北斗的某颗卫星TLE数据为例,如下:

BEIDOU 2A
1 30323U 07003A 07067.68277059 .00069181 13771-5 44016-2 0 587
2 30323 025.0330 358.9828 7594216 197.8808 102.7839 01.92847527 650

第一行主要元素解析如下:

(1)30323U:30323是北美防空司令部给出的卫星编号,U代表不保密,我们看到的都是U,否则我们就不会看到这组TLE了。

(2)07003A:国际编号,07表示2007年,003表示这一年的第3次发射,A表示这次发射编号为A的物体,其他还有B、C、D等。国际编号就是2007-003A。

(3)07067.68277059:表示这组轨道数据的时间点,07表示2007年,067表示第67天,即3月8日。

(4)68277059:表示这一天里的时刻,大约是16时22分左右。

(5)58:表示关于这个空间物体的第58组TLE。

(6)7:最后一位是校验位。

第二行主要元素解析如下:

(1)30323:北美防空司令部给出的卫星编号。

(2)025.0330:轨道倾角。

(3)358.9828:升交点赤经。

(4)7594216:轨道偏心率。

(5)197.8808:近地点幅角。

(6)102.7839:平近点角,表示在给出这组TLE时,卫星在轨道的什么位置。

(7)01.92847527:每天环绕地球的圈数。其倒数就是周期。可以看出,该北斗卫星目前的周期大约是12h。

(8)65:发射以来飞行的圈数。

(9)0:校验位。

2.GMT、UTC和UNIX时间戳

GMT的全名是格林威治标准时间(Greenwich Mean Time)。十七世纪,格林威治皇家天文台进行了天体观测。1675年,旧皇家观测所(Old Royal Observatory)正式成立,到了1884年决定以通过格林威治的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标志24h的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间。

UTC(Universal Time Coordinated,协调世界时),又称世界标准时间、世界统一时间,是经过平均太阳时(以GMT为准)、地轴运动修正后的新时标,以及以秒为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以“世界标准时间”的角度来说,UTC比GMT更加精准,其误差值必须保持在0.9s以内,若大于0.9s,则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。所以UTC的本质强调的是比GMT更为精确的世界时间标准。GMT和UTC均用秒数来计算,对于大多数用途来说,我们可以认为GMT就是UTC,GMT=UTC。

在计算机中看到的UNIX时间戳(UNIX epoch或UNIX timestamp)都是从1970年01月01日0:00:00(GMT/UTC)开始计算秒数的,即从1970年这个时间点起到具体时间共有多少秒。这个秒数就是UNIX时间戳。例如,UTC时间2022年3月21日下午2点58分转换成UNIX时间戳为1647874701。

3.方位角(Azimuth)和仰角(Elevation)

方位角:是从观察者的指北方向线起,依顺时针方向到目标方向线之间的水平夹角。也就是说,0°方位角表示正北,90°方位角表示正东,180°方位角表示正南,270°方位角表示正西,360°方位角表示角度回归,依然是正北。

仰角:当方位角测量完毕后,需要用仰角来描述被观察物体相对于观察者的高度。如果被观察物体在观察者上方,那么仰角范围为0°~90°,有时仰角范围还为-90°~90°,这是因为被观察物体在观察者下方。

如图4-3所示,以观察者为中心建立坐标系,3个坐标轴分别指向相互垂直的东向、北向和天向,可以计算出卫星在此坐标系中的仰角和方位角,以及卫星到观察者的距离。

图4-3 方位角和仰角示意图

要进行卫星信号收发,关键点是地面站天线的指向,天线必须准确可靠地对准卫星,天线的方位角和仰角是天线指向的重要参数。当卫星处于地平线下方时,处于卫星天线盲区,因此,地面站天线的仰角范围为0°~90°,方位角范围为0°~360°。

4.PWM信号和占空比

脉冲宽度调制(Pulse Width Modulation,PWM),是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM信号通过周期性跳变的高低电平组成方波来进行连续数据的输出。

PWM在合适的信号频率下,通过一个周期内改变占空比的方式来改变输出的有效电压。例如,具有30%占空比的PWM信号波形如图4-4所示。

图4-4 30%占空比的PWM信号波形

占空比是射频、微波电路、低频交流和直流电流等领域的一个概念,最普遍的含义是表示在一个周期内,工作时间与总时间的比值。以单片机为例,单片机的I/O口输出的是数字信号,I/O口只能输出高电平和低电平。

假设高电平为5V,低电平为0V,那么要输出不同的模拟电压,就要用到PWM,通过改变I/O口输出的方波的占空比,从而获得使用数字信号模拟成的模拟电压信号。如图4-5所示,占空比为50%即高电平时间一半,低电平时间一半,在一定的频率下,就可以得到模拟的2.5V输出电压,那么75%的占空比,得到的电压就是3.75V。依此类推,20%的占空比,得到的电压就是1V。PWM的调节作用来源于对“占周期”的宽度控制,“占周期”变宽,输出的平均电压值就会上升,“占周期”变窄,输出的平均电压值就会下降。

图4-5 不同占空比的模拟电压示意图

具体在本题中,题目给出天线的舵机接收的占空比为2457~7372,这里占空比可以理解为天线控制舵机转动一定角度所需的值。

5.舵机控制原理和结构

舵机,其学名为伺服电机,是一种带有输出轴的装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只要控制信号持续不变,伺服机构就会保持轴的位置不改变。如果控制信号发生变化,输出轴的位置也会相应发生变化。

图4-6 舵机的内部结构

一种简单的舵机的内部结构如图4-6所示,有控制电路、电机、一组减速齿轮和外壳等。控制电路由PWM进行控制。PWM信号对舵机的控制通过一个固定的频率,给其不同的占空比,来控制舵机不同的转角。

因此,我们很容易理解,题目中“舵机的占空比为2457~7372,对应天线的0°~180°。”这句话的含义。本题目中,控制方位角的舵机和控制仰角的舵机分别接收不同的占空比,来控制天线朝向。

6.pyorbital.orbital模块

pyorbital.orbital模块是用于计算卫星轨道参数的模块。本题目需要用到以下函数:

pyorbital.orbital.get_observer_look(utc_time, lon, lat, alt)
Return: (Azimuth, Elevation)

参数如下:

  • utc_time:观察时间,其时间格式为UTC。

  • lon:地面站的经度,以东经为单位。

  • lat:地面站的纬度,以北纬为单位。

  • alt:地面站的海拔高度,以km为单位。

调用本函数,返回地面站天线的方位角和仰角。

题目解析

本题目的解法还是比较直观的,使用Python提供的pyorbital.orbital函数,可以分为3步:

(1)知道要跟踪的卫星名称,依据此信息,从给出的active.txt文件中找到目标卫星对应的TLE。

(2)获取了目标卫星的TLE、开始观察时间和地面站的位置后,调用前文介绍过的orb.get_observer_look函数,返回方位角和仰角。

(3)方位角和仰角换算成驱动舵机转动的PWM占空比。

关键代码如下:

from pyorbital.orbital import Orbital
import datetime
# 加载TLE文件,读出CALSPHERE 1卫星,保存在orb 中
orb = Orbital(' CALSPHERE 1', tle_file='active.txt')

# time为开始观察目标卫星的那个时刻
time = 1587057945.165157

# 角度和舵机占空比换算函数
def angle_to_servos(angle):
val = angle / 180.0
val = int(val * (7372 - 2457))
val += 2457
return val

# 输入观察时间、地面站的位置、要跟踪的卫星的TLE,调用orb.get_observer_look函数,返回方位角和仰角
for i in range(720):
ts = time+i
t = datetime.datetime.utcfromtimestamp(ts)
angles = orb.get_observer_look(t,-91.43, 17.4804, 0)
# 将方位角和仰角的角度分别换算成控制方位角舵机和控制仰角舵机的占空比
a0 = angle_to_servos(angles[0])
a1 = angle_to_servos(angles[1])
# 打印720行格式为<timestamp>,<PWM0>,<PWM1>的输出
print(f"{ts}, {a0}, {a1}")

其中角度和舵机占空比换算具体过程是:0°用2457表示,180°用7372表示。由(7372-2457)/180°≈ 27.31/°,那么天线占空比和度数关系为:

相关文章:

有趣的Hack-A-Sat黑掉卫星挑战赛——跟踪卫星

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加&#xff0c;太空已经成为国家赖以生存与发展的命脉之一&#xff0c;凝聚着巨大的国家利益&#xff0c;太空安全的重要性日益凸显[1]。而在信息化时代&#xff0c;太空安…...

Ubuntu安装配置Cuda和Pytorch gpu

前言 在Ubuntu中操作系统中,通过Anconda安装对应的虚拟环境以及软件包,一般都需要适配Cuda、Pytorch版本等 以下安装配置都是在Ubuntu操作系统下 1. 安装Cuda 通过Ubuntu操作系统查看cuda适配的版本:nvidia-smi 截图如下: 查看Ubuntu版本可如下方式 (1)cat /proc/ver…...

三、Java面向对象

1 . 方法 方法(method)是程序中最小的执行单元方法就是一些代码的打包 需要的时候可以直接调用方法之间是平级的关系 不能在方法里面定义方法方法不调用就不执行 方法的定义 // 方法的定义 /* [修饰符] 返回值类型 方法名称([参数 1],[参数 2]){语句A;return 返回值; } *///…...

pygame7 弹球游戏2

上节课我们做到当球静止下来后在第0号球上画一个球杆 本节课我们将会让这个球杆将球打出来 1、鼠标事件 pygame.mouse.get_pressed():返回鼠标左键&#xff0c;中间&#xff0c;右键的情况 2、键盘事件&#xff1a; pygame.key.get_pressed(): 返回所有键盘的情况 3、pyg…...

计算机网络4:计算机网络体系结构

目录计算机网络体系结构1.网络模型2.每一层的代表含义2.1 OSI7层模型2.2 五层协议2.3 TCP/IP 四层协议3.数据在各层之间的传输过程4.为什么要进行分层计算机网络体系结构 1.网络模型 2.每一层的代表含义 2.1 OSI7层模型 &#xff08;1&#xff09;物理层&#xff1a;比特流–…...

1630_GNU的二进制分析工具nm简单使用探索

全部学习汇总&#xff1a; GreyZhang/toolbox: 常用的工具使用查询&#xff0c;非教程&#xff0c;仅作为自我参考&#xff01; (github.com) GNU有一套二进制的分析工具&#xff0c;之前是用过objdump的&#xff0c;但是也没有系统掌握。如果做底层软件的设计&#xff0c;这些…...

【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于知名金融公…...

1.8 正则表达式

正则表示式是用来匹配与查找字符串的&#xff0c;从网上爬取数据不可避免的会用到正则表达式。 Python 的表达式要先引入 re 模块&#xff0c;正则表达式以 r 引导。Re库主要功能函数函数说明re.search()在一个字符串中搜索匹配正则表达式的第一个位置&#xff0c;返回match对象…...

Postgresql 根据单列或几列分组去重row_number() over() partition by

Postgresql 根据单列或几列分组去重row_number() over() partition by 一般用于单列或者几列需要去重后进行计算值的 count(distinct(eid)) 可以 比如有个例子&#xff0c;需要根据名称&#xff0c;城市去筛选覆盖的道路长度&#xff0c;以月因为建立了唯一索引是ok的&#…...

基于蒙特卡洛法的规模化电动车有序充放电及负荷预测(PythonMatlab实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…...

Selenium常用API详解,从入门到进阶(全套)

目录 1、打开页面 2、查找页面元素 3、输入文本 4、点击操作 5、提交操作 6、清除文本 7、获取文本、属性 8、获取页面的标题和URL 9、窗口 9.1、设置窗口大小 9.2、窗口切换 9.2.1、为什么需要窗口切换&#xff1f; 9.2.2、获取句柄的方式 9.2.3、切换句柄 10、…...

自从学会了Python,我实现了壁纸自由(6)

小朋友们好&#xff0c;大朋友们好&#xff01;我是猫妹&#xff01;哈哈哈&#xff0c;又到周末啦&#xff01;这周过得怎么样&#xff1f;马上就要开学了&#xff0c;寒假作业早已写好了吧&#xff1f;开学让人兴奋&#xff0c;上了很久网课都要吐啦&#xff01;开学也让人有…...

Ruby 发送邮件 - SMTP

SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则&#xff0c;由它来控制信件的中转方式。 Ruby提供了 Net::SMTP 来发送邮件&#xff0c;并提供了两个方法 new 和 start: new 方法有两个参数&am…...

Python爱心代码

前言 Python漂浮爱心&#xff0c;具体源码见&#xff1a;Python动态爱心代码_爱心代码-Python文档类资源-CSDN下载 爱心类 class Heart(): #每个爱心&#xff08;爱心类&#xff09; def __init__(self): self.r ra.randint(10,15) #爱心的半径 …...

【二分查找法及其应用】

文章目录一. 前提二. 基本思路三. 代码实现四. 封装在STL中的二分查找算法五. 浮点数二分一. 前提 待查找的序列是有序的&#xff1b;待查找的 a 采取顺序存储结构。 二. 基本思路 设在升序序列 a [ low…high ] 查找的 k &#xff0c; 首先找中间值 mid a [ ( lowhigh )/2 …...

Android 进阶——Framework核心 之Binder Java成员类详解(三)

文章大纲引言一、Binder Java家族核心成员关系图二、Binder Java家族核心成员源码概述1、android.os.IBinder1.1、boolean transact(int code, Parcel data, Parcel reply, int flags) send a call to an IBinder object1.2、String getInterfaceDescriptor()1.3、boolean ping…...

Maven

Maven 1.什么是Maven 官方网站 https://maven.apache.org/ Maven是一款服务于Java平台的自动化构建工具&#xff0c;它可以帮助我们更方便的对项目进行构建、管理项目jar包 &#xff0c;包括: bulid 项目&#xff0c;切换 jar 版本&#xff0c;添加 jar, 删除 jar 包等 1.…...

1947抓住那头牛(队列 广度优先搜索)

目录 题目描述 解析 解题思路 代码部分 代码部分 运行结果 看看len数组中各个位置的标记值 为什么这样做一定是最短路径&#xff1a; 题目描述 农夫知道一头牛的位置&#xff0c;想要抓住它。农夫和牛都位于数轴上&#xff0c;农夫起始位于点N(0<N<100000)&…...

基于linux5.15.5的IMX 参考手册 ---21

基于linux5.15.5的IMX 参考手册 — 21 10.5.2高清多媒体接口&#xff08;HDMI&#xff09;和显示端口&#xff08;DP&#xff09;概述 10.5.2.1测试名称 •mxc_cec_test.out 10.5.2.1.1位置 /unit_tests/HDMI/ 10.5.2.1.2功能 验证HDMI CEC功能并向HDMI接收器发送断电命令。 1…...

Android Dalvik虚拟机 堆初始化流程

前言 上篇文章介绍了dalvik虚拟机启动流程&#xff0c;在dalvik虚拟机启动时调用了dvmGcStartup来启动堆。 本文介绍我们在日常开发使用Java时的堆创建流程。 Dalvik堆介绍 Dalvik虚拟机中&#xff0c;堆是由heap[0] Active堆和heap[1] Zygote堆两部分组成的。其中&#xff…...

0讲(补)——开发前必备基本常识

前言 专栏内容持续补充更新,目前正在进行优惠活动 目录 前言 一、函数的声明和定义 二、预编译 三、串口打印中的printf函数的使用...

JS学习笔记

1.WebAPIs简介导读Web APIs 和JS 基础关联性JS 基础阶段以及 Web APIs 阶段JS基础学习 ECMAScript 基础语法为后面作铺垫&#xff0c;Web APIs 是JS 的应用&#xff0c;大量使用JS基础语法做交互效果①JS 基础阶段我们学习的是ECMAScript 标准规定的基本语法要求同学们掌握JS 基…...

linux005之用户、组管理

linux用户管理简介&#xff1a; 任何使用linux系统的用户&#xff0c;都必须使用一个合法的账号和密码&#xff0c;账号和密码一般都是超级管理员创建&#xff0c;当然普通用户也可以创建用户&#xff0c;前提是必须拥有创建用户权限。 root是linux系统中默认创建的超级用户 创…...

列线图工具_Nomogram

定义 列线图是一种相对传统的分析方法&#xff0c;用于展示自变量和因变量的线性关系&#xff0c;及其特征的重要程度。 现在用SHAP&#xff0c;和机器学习库中的 Feature importance 工具可以实现类似甚至更好效果。不过很多传统的研究领域比较认这种方法。 列线图工具建立在…...

【C++】类和对象(一)

目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1、访问限定符4.2、封装五、类的作用域六、类的实例化七、类对象的大小八、this指针8.1、this指针的引出8.2、this指针的特性8.3、C语言和C实现Stack的对比一、面向过程和面向对象初步认…...

Python获取搜索引擎结果

前言 想快速获取各个高校的博士招生网站&#xff0c;于是通过python先获取出有可能包含高校博士招生网站的URL&#xff0c;然后通过人为筛选得到了想要的招生网站&#xff08;注意&#xff0c;并非直接爬取&#xff0c;是间接获取的&#xff09;。 整理了一份网站名单&#x…...

2.4.8 PCIe——物理逻辑层——REFCLK

一、概述 pcie的参考时钟由板级输入&#xff0c;提供给IP内PHY层的PLL使用&#xff0c;由PLL产生core_clk和pipe_clk。 二、REFCLK产生方式 Serdes 所用时钟由 PHY 模块内的PLL生成&#xff0c;PLL的参考时钟可以由common clock&#xff08;外部背板提供&#xff09;、separ…...

树莓派4B arm64 搭建 docker+drone+gitea

树莓派4B arm64 搭建 dockerdronegitea 记录时间: 2023年02月10日 树莓派烧录 如何用树莓派搭建一台永久运行的个人服务器&#xff1f; https://mp.weixin.qq.com/s?__bizMzI5NjA0ODkwNA&mid2651847658&idx1&sn267a1257b43d4a76f2a081ed157b77f9&chksmf7b11…...

Java的JDBC编程

目录 1. 打开IDEA&#xff0c;新建Project 2. 引入依赖 &#xff08;1&#xff09;下载驱动包 &#xff08;2&#xff09;将驱动包导入Project 3. 编写代码 &#xff08;1&#xff09;创建数据源 &#xff08;2&#xff09;让代码和数据库服务器建立联系 &#xff08;3&…...

CSS:块格式化上下文(BFC)

块格式化上下文是块级盒子的布局过程发生的区域&#xff0c;也是浮动元素与其他元素交互的区域。 块格式化上下文(BFC)的创建 满足以下条件将创建块格式化上下文&#xff1a; 根元素&#xff08;&#xff09;浮动元素&#xff08;float 值不为 none&#xff09;绝对定位元素…...

重庆网站托管外包公司哪家好/如何开发微信小程序

8月份中国移动在新增用户市场反超中国电信&#xff0c;让人以为中国广电带来的700MHz频段扭转了中国移动衰落的命运&#xff0c;然而仅仅一个月&#xff0c;9月份中国电信再次在新增用户市场超越了中国移动。据中国移动和中国电信公布的数据&#xff0c;9月份在新增用户市场&am…...

昆山商城网站建设/百度一下网页版搜索引擎

Java中文本文件读取的两种方法 文本文件读取 FileReader frnew FileReader(“demo.txt”&#xff09;&#xff1b;//创建一个文件读取流对象&#xff0c;和指定名称的文件相关联&#xff0c;如果 文件不存在&#xff0c;发生异常 int chfr.read();一次读一个字符并依次往下度…...

集约化网站建设项目/百度信息流平台

文章参考&#xff1a; https://blog.csdn.net/msrgr/article/details/84143642 Altera Quartus II 软件打开时进行仿真可供选择&#xff1a; Xlinx VIVADO软件打开时进行仿真可供选择&#xff1a; run behavioral simulation 行为级仿真…...

万户信息 做网站怎么样/网络服务是什么

使用PG数据库联合更新数据时较麻烦&#xff0c;需要注意以下问题&#xff1a; 正确联合更新数据模板&#xff1a; update app set app_mcb.app_name from test1 as b where app_yybmb.package_name and shr_sjsb_imeib.imei and app.app_ly2; 要更新的表app不能起别名&…...

小程序怎么做优惠券网站/网址seo关键词

转自:https://wenku.baidu.com/view/75d0b6ec19e8b8f67c1cb958.html 首先需要了解path这个环境变量有什么用&#xff1a; 当你打开命令提示窗口时&#xff0c;即winR&#xff0c;输入cmd&#xff0c;如下图&#xff1a; 那么就会得到一个黑框框&#xff0c;就是命令提示窗口&a…...

优秀的国内企业网站/指数查询

给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”&#xff…...