[星瞳科技]OpenMV是否属于单片机?

news2024/9/22 10:03:24

文件系统

MicroPyhon的文件系统是FatFS。

根目录

路径都是以根目录为起点。

当插入sd卡后,根目录就是SD卡;不插入sd卡,根目录就是内置的Flash。

如果需要,你可以在SD卡上,新建一个空文件:/flash/SKIPSD,这会避免挂载SD卡,当然,你可以使用os.mount来手动挂载SD卡。

绝对路径与相对路径

绝对路径是以根目录为起点的,相对路径是以当前目录为起点的。
比如:

image.save("/example.jpg")

中的"/example.jpg"就是绝对路径。会存放在根目录/下。
比如:

image.save("./pic/example.jpg")
image.save("pic/example.jpg")

这就是相对路径,表示当前路径下的pic文件夹下的example.jpg文件。

MicroPython的文件读写

Python学习(九)IO 编程 —— 文件读写 - feesland - 博客园

MicroPython的OS模块

在代码中,可以使用os库,来进行新建目录,新建文件之类的操作。

  • os.listdir([dir])
    如果没有参数,列出当前目录。如果给了参数,就列出参数所代表的目录。

  • os.chdir(path)
    改变当前目录

  • os.getcwd()
    获得当前目录

  • os.mkdir(path)
    新建一个新的目录

  • os.remove(path)
    删除文件

  • os.rmdir(path)
    删除目录

  • os.rename(old_path, new_path)
    重命名文件

  • os.stat(path)
    获得文件或者路径的状态

OpenMV的默认文件

默认情况下,OpenMV的磁盘有三个文件。

  • main.py
    上电自动运行这个文件的代码。

  • openmv.inf
    windows驱动文件。

  • README.txt
    可以简单看一下。

模块的使用

什么是模块?

随着代码的增多,在一个文件里的代码会越来越长,越来越难看懂。

为了编写可维护的代码,我们把很多函数分组,放到不同的文件里。在Python中,一个.py文件就称之为一个模块(Module)。

模块有什么好处?复用代码方便!如果我写了一个模块,你也写了一个模块,我们就有了两个模块。我们把这些模块都组织起来,大家就可以少写很多代码了!

如何使用模块?

import machine

red_led = machine.LED("LED_RED")

red_led.on()

import machine就是引入machine这个模块。通过import语句,就可以引入模块。

还有from xxx import ooo 的语句,意思是通过xxx模块引入ooo类,或者通过xxx模块引入ooo函数。比如上面的程序可以写成:

from machine import LED

red_led = LED("LED_RED")

red_led.on()

这就是通过machine的模块来引入LED类了。

如何添加自定义模块?

之前我们提到了,OpenMV是有文件系统的。

文件系统的根目录存在一个main.py,代码执行的当前目录就是根目录。

所以我们把模块的文件复制到OpenMV的“U盘”里就可以。如图:

这里的pid.py只是举一个举例。

我把pid.py复制到了U盘的根目录下。那么在程序中:

import pid

就可以引入pid模块了了。或者通过:

from pid import PID

这就是引入了PID类。

pyb各种外设

概览

作为一个单片机,控制IO口,IIC,SPI,CAN,PWM。定时器当然都是可以的。
而且,使用python语言,可以非常简单的调用它们,而不用考虑寄存器。

 

 

 

TablesOpenMV2 M4OpenMV3 M7OpenMV4 H7OpenMV4 H7 PlusOpenMV RT1062
Pin910101014
ADC11111
DAC11110
SPI11111
I2C12221
UART12221
Servo23324
CAN bus01111
电源按键00001
自定义按键00001
引脚耐受5V5V5V5V3.3V
引脚电平3.3V3.3V3.3V3.3V3.3V
ICSTM32F427STM32F765STM32H743STM32H743IMXRT1062
RAM256KB512KB1MB32MB + 1MB32MB + 1MB
Flash1MB2MB2MB32MB + 2MB16MB
频率180MHz216MHZ480MHZ480MHZ600MHZ
标配感光元件OV7725(30W像素)OV7725(30W像素)OV7725(30W像素)OV5640(500W像素)OV5640(500W像素)

注意:因为MicroPython可以在很多平台上运行。最开始在pyb模块,pyboard,是基于STM32的,但是后来又加入了esp8266和esp32,以及nrf系列,他们的架构和STM32不同。所以官方统一制定了machine模块,所以通用性更高一些,最终pyb会被淘汰。

OpenMV4 H7 Plus / OpenMV4 H7 / OpenMV3,主控为STM32,一般用pyb模块。

2024年最新款的OpenMV RT1062,主控为IMXRT1062,只支持machine模块,不支持pyb模块。请使用对应的machine代码哦~

常用的函数

pyb.delay(50) # 延时 50 毫秒
pyb.millis() # 获取从启动开始计时的毫秒数

LED

from pyb import LED

led = LED(1) # 红led
led.toggle()
led.on()#亮
led.off()#灭

LED(1) -> 红LED
LED(2) -> 绿LED
LED(3) -> 蓝LED
LED(4) -> 红外LED,两个

在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

from machine import LED
import time

red_led = LED("LED_RED")
green_led = LED("LED_GREEN")
blue_led = LED("LED_BLUE")
blue_led.off()
green_led.off()
red_led.off()

while(1):
    green_led.toggle()
    red_led.on()
    time.sleep_ms(250)
    red_led.off()
    time.sleep_ms(250)

IO

from pyb import Pin

p_out = Pin('P7', Pin.OUT_PP)#设置p_out为输出引脚
p_out.high()#设置p_out引脚为高
p_out.low()#设置p_out引脚为低

p_in = Pin('P7', Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
value = p_in.value() # get value, 0 or 1#读入p_in引脚的值

在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

from machine import Pin

p_out = Pin("P7", Pin.OUT)#设置p_out为输出引脚
p_out.high()#设置p_out引脚为高
p_out.low()#设置p_out引脚为低

p_in = Pin("P8", Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
value = p_in.value() # get value, 0 or 1#读入p_in引脚的值
Copy

Servo

视频教程34 - OpenMV控制三个舵机:OpenMV控制3个舵机 | 星瞳科技
from pyb import Servo

s1 = Servo(1) # servo on position 1 (P7)
s1.angle(45) # move to 45 degrees
s1.angle(-60, 1500) # move to -60 degrees in 1500ms
s1.speed(50) # for continuous rotation servos
  • Servo(1) -> P7 (PD12)
  • Servo(2) -> P8 (PD13)

OpenMV3 M7 / OpenMV4 H7上增加:

  • Servo(3) -> P9 (PD14)

注意:OpenMV4 H7 Plus P9不能使用PWM

OpenMV RT1062 有P7 P8 P9 P10 四个PWM引脚。 在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

# 舵机控制例子
#
# 这个例子展示了如何使用OpenMV来控制舵机
#
# 伺服系统需要 50 Hz PWM,脉冲宽度为 1000us 至 2000us。

import time
from machine import PWM

# P7 和 P8 可以共享相同的 PWM  module,它们需要具有相同的频率。
p7 = PWM("P7", freq=50, duty_ns=(2000 * 1000))
p8 = PWM("P8", freq=50, duty_ns=(2000 * 1000))

# P9 和 P10 可以共享相同的 PWM  module,它们需要具有相同的频率。
p9 = PWM("P9", freq=50, duty_ns=(2000 * 1000))
p10 = PWM("P10", freq=50, duty_ns=(2000 * 1000))


while True:
    for i in range(1000, 2000, 100):
        p7.duty_ns(i * 1000)
        p8.duty_ns(i * 1000)
        p9.duty_ns(i * 1000)
        p10.duty_ns(i * 1000)
        time.sleep_ms(1000)

    for i in range(2000, 1000, -100):
        p7.duty_ns(i * 1000)
        p8.duty_ns(i * 1000)
        p9.duty_ns(i * 1000)
        p10.duty_ns(i * 1000)
        time.sleep_ms(1000)

IO中断

from pyb import Pin, ExtInt

callback = lambda e: print("intr")
ext = ExtInt(Pin('P7'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)

在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

from machine import Pin
import time
pin0 = Pin("P0", Pin.IN, Pin.PULL_UP)
callback = lambda e: print("intr")
pin0.irq(callback, Pin.IRQ_FALLING)

while True:
    time.sleep(1)

定时器

from pyb import Timer

tim = Timer(4, freq=1000)
tim.counter() # get counter value
tim.freq(0.5) # 0.5 Hz
tim.callback(lambda t: pyb.LED(1).toggle())

Timer 1 Channel 3 Negative -> P0
Timer 1 Channel 2 Negative -> P1
Timer 1 Channel 1 Negative -> P2
Timer 2 Channel 3 Positive -> P4
Timer 2 Channel 4 Positive -> P5
Timer 2 Channel 1 Positive -> P6
Timer 4 Channel 1 Negative -> P7
Timer 4 Channel 2 Negative -> P8

OpenMV M7上增加:
Timer 4 Channel 3 Positive -> P9

在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

from machine import LED
from machine import Timer

blue_led = LED("LED_BLUE")

# 当被调用时,我们将返回timer对象
# 注意:在回调中不允许分配内存的函数
def tick(timer):
    blue_led.toggle()

# machine模块目前仅支持-1虚拟定时器。
tim = Timer(-1, freq=1, callback=tick)  # 创建一个定时器对象—以1Hz触发

PWM

from pyb import Pin, Timer

p = Pin('P7') # P7 has TIM4, CH1
tim = Timer(4, freq=1000)
ch = tim.channel(1, Timer.PWM, pin=p)
ch.pulse_width_percent(50)

在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

from machine import PWM
import time

p7 = PWM("P7", freq=100, duty_u16=32768)

while True:
    for i in range(0, 65536, 256):
        p7.duty_u16(65535 - i)
        time.sleep_ms(10)
    p7.duty_u16(32768)

ADC

from pyb import Pin, ADC

adc = ADC('P6')
adc.read() # read value, 0-4095

在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

from machine import ADC

adc = ADC('P6')
adc.read_u16()

DAC

from pyb import Pin, DAC

dac = DAC('P6')
dac.write(120) # output between 0 and 255

UART

from pyb import UART

uart = UART(3, 9600)
uart.write('hello')
uart.read(5) # read up to 5 bytes

UART 3 RX -> P5 (PB11)
UART 3 TX -> P4 (PB10)

OpenMV3 M7 / OpenMV4 H7/ OpenMV4 H7 Plus上增加:
UART 1 RX -> P0 (PB15)
UART 1 TX -> P1 (PB14)

在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

from machine import UART

uart = UART(1, 9600)
uart.write('hello')
uart.read(5) # read up to 5 bytes

OpenMV RT1062只有串口1,对应 P4 P5 引脚。 UART 1 RX -> P5 (PB11)
UART 1 TX -> P4 (PB10)

SPI

from pyb import SPI

spi = SPI(2, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
spi.send(b'hello')
spi.recv(5) # receive 5 bytes on the bus
spi.send_recv(b'hello') # send a receive 5 bytes

在 OpenMV RT 上不能用pyb模块,只能使用以下machine模块:

from machine import SPI

spi = SPI(1, baudrate=int(1000000000 / 66), polarity=0, phase=0)
spi.write(b'hello')
spi.read(5) # receive 5 bytes on the bus

txdata = b"12345678"
rxdata = bytearray(len(txdata))
spi.write_readinto(txdata, rxdata)  # Simultaneously write and read bytes.

I2C

from machine import I2C, Pin
i2c = I2C(sda=Pin('P5'),scl=Pin('P4'))

i2c.scan()
i2c.writeto(0x42, b'123')         # write 3 bytes to slave with 7-bit address 42
i2c.readfrom(0x42, 4)             # read 4 bytes from slave with 7-bit address 42

i2c.readfrom_mem(0x42, 8, 3)      # read 3 bytes from memory of slave 42,
                                # starting at memory-address 8 in the slave
i2c.writeto_mem(0x42, 2, b'\x10') # write 1 byte to memory of slave 42
                                # starting at address 2 in the slave

I2C 2 SCL (Serial Clock) -> P4 (PB10)
I2C 2 SDA (Serial Data) -> P5 (PB11)

OpenMV3 M7 / OpenMV4 H7 / OpenMV4 H7 Plus上增加:
I2C 4 SCL (Serial Clock) -> P7 (PD13)
I2C 4 SDA (Serial Data) -> P8 (PD12)

machine库是软件模拟的I2C协议,所以使用任何引脚都可以,但是还是推荐使用上面所说的引脚。

在 OpenMV RT 上可以这样调用:

from machine import I2C, Pin
i2c = I2C(1)

i2c.scan()
i2c.writeto(0x42, b'123')         # write 3 bytes to slave with 7-bit address 42
i2c.readfrom(0x42, 4)             # read 4 bytes from slave with 7-bit address 42

i2c.readfrom_mem(0x42, 8, 3)      # read 3 bytes from memory of slave 42,
                                # starting at memory-address 8 in the slave
i2c.writeto_mem(0x42, 2, b'\x10') # write 1 byte to memory of slave 42
                                # starting at address 2 in the slave

Switch Pin 自定义按键SW

# OpenMV Cam 上的用户开关可通过“SW”引脚读取。 
# 该引脚通过 RC 电路在硬件中进行去抖。 
# 因此,您只需读取引脚状态即可了解开关是否被按下。

import machine

sw = machine.Pin("SW", machine.Pin.IN)
r = machine.LED("LED_RED")

while True:
    r.value(not sw.value())
    print(sw.value())

仅OpenMV RT具有SW自定义按键,OpenMV4 H7 / OpenMV4 H7 Plus / OpenMV3 M7 没有自定义按键。

字符串简介json/正则

介绍

在传统的单片机应用中,两个单片机串口通信,都是自己定义一些帧,包括帧头,数据帧,校验帧,帧尾。 图中 是飞控MavLink的协议。 

这种方式,稳定,高效。缺点也很明显:开发难度稍大,需要自己制定协议,编码解码需要手动编写。如果想快速尝试两个单片机通信的。我推荐使用串口传输json字符串!

优点:不需要了解底层的事情,比如:

  • 不考虑大端小端
  • 不考虑数据的byte转换
  • 支持任意长的int,float
  • 简单易懂,容易开发。

缺点:效率稍低。json的编码和解码会占用cpu。

其实传输json在网络编程中已经成为标准,比如在restful api中,前端和后端使用json来获取信息。只是在传统单片机的领域中不常见,一方面是效率稍低,嵌入式通常对成本的控制要求比较高。但是随着芯片成本的降低,很多应用对物料成本要求不是很高了,对开发效率越来越重视。

字符串

string = "hello string!"

OpenMV 是可以直接通过串口发送字符串的。

from machine import UART

uart = UART(1, 9600)
string = "hello string!"
uart.write(string)

字符串操作

Python3 字符串 | 菜鸟教程

举个例子:


blobs=[12,23,11,22,33,44]

print("%d", blobs[3])

JSON

JSON是一种简洁高效的交换数据的格式。 它可以是这种简单的:

"[[12,0],[10,12],[22,10],[99,11]]"

注:我通过这种简单的字符串,把OpenMV中的色块的x,y坐标发送出去。

也可以是这种复杂的:('''在python中表示多行字符串)

'''
{
    "number":10,
    "color" :[255,0,0],
    "rate" :0.65
}
'''

我使用这种结构把OpenMV采集到的颜色信息发送到wifi中的服务器中。

甚至于,可以像这样:

'''
{
  "firstName": "John",
  "lastName": "Smith",
  "sex": "male",
  "age": 25,
  "address": 
  {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021"
  },
  "phoneNumber": 
  [
    {
      "type": "home",
      "number": "212 555-1234"
    },
   {            
      "type": "fax",
      "number": "646 555-4567"
    }
  ]
}
'''

注意:json的形式和Python很像,但是json是javascript的对象表达形式,和python的表达形式稍有不同。

python生成json

OpenMV有json的模块,json.dumps(obj)和ujson.loads(str)可以很容的生成json字符串和解析json字符串。

import json

obj = [[12,0],[10,12],[22,10],[99,11]]
print(json.dumps(obj))

obj = {
    "number":10,
    "color" :[255,0,0],
    "rate" :0.65
}
print(json.dumps(obj))

会输出:

'[[12, 0], [10, 12], [22, 10], [99, 11]]'

'{"color": [255, 0, 0], "number": 10, "rate": 0.65}'

然后把字符串通过串口发送出去,然后在另一端,把json字符串解析成对象/数组。然后进行接下来的逻辑操作。

其他单片机的json模块

json很简单也很通用。

  • Arduino: GitHub - bblanchon/ArduinoJson: 📟 JSON library for Arduino and embedded C++. Simple and efficient.
  • STM32: 【STM32】使用keil提供的JSON库——Jansson_keil.jansson-CSDN博客
  • MicroPython(pyboard,esp8266,samd21): json – JSON encoding and decoding — MicroPython latest documentation

  • NodeMCU(esp8266): https://nodemcu.readthedocs.io/en/master/en/modules/sjson/

你可以利用这些库,把json字符串转换成对象。

电脑其他语言的json模块

基本所有的语言都支持json(连lisp都有)。。。所以可以很容易的进行通信。

正则表达式

如果是一些简单的字符串处理,使用python内置的一些功能就可以,但是对于复杂一些的需求,就需要使用正则表达式了。

比如URL处理中。(此处在OpenMV中使用不多)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你是如何克服编程学习中的挫折感的?

编程之旅:穿越挫折的迷雾,拥抱成长的阳光 在编程的浩瀚星空中,每个人都是探索未知的宇航员,面对着无尽的代码海洋和未知的Bug黑洞。挫折感,这位不速之客,时常在探索的旅途中悄然降临,试图用迷茫…

使用WINUI3 编写一个小软件1 C#

本篇主要是记录安装和运行的问题。 先说安装 因为我是WIN11,所以勾了,如果你是WIN10就不用勾选11那个,但是我不确定用11要不要10那个,所以就勾了,按安装手册来的。 2、创建项目 照着选就完事了,别选错 这…

运维学习————nginx-入门及反向代理搭建

目录 一、简介 二、正向代理和反向代理 1、正向代理 作用 2、反向代理 作用 三、单机版nginx部署 1、查看环境 2、环境安装以及nginx安装 2.1、安装pcre 2.2、安装gzip模块需要 zlib 库 2.3、安装Nginx 3、启动测试 四、反向代理配置 一、简介 nginx [engine x] 是…

python人工智能002:jupyter基本使用

小知识:将jupyter修改为中文,修改用户变量, 注意是用户变量,不是系统变量 新增用户变量 变量名:LANG 变量值:zh_CN.UTF8 然后重启jupyter 上一章的软件安装完成之后,就可以创建文件夹来学习写…

[PHP]-Laravel中Group By引发的问题思考

Laravel 和 ThinkPHP 是两个不同的 PHP 框架,它们在底层使用了相同的 SQL 查询语言来与数据库交互。然而,由于框架的设计和实现方式不同,它们在生成 SQL 查询时可能会表现出一些细微的差异,包括对 GROUP BY 子句的处理。 在调用查…

OpenCV学堂 | 汇总 | 深度学习图像去模糊技术与模型

本文来源公众号“OpenCV学堂”,仅用于学术分享,侵权删,干货满满。 原文链接:汇总 | 深度学习图像去模糊技术与模型 引言 深度学习在图像去模糊领域展现出了强大的能力,通过构建复杂的神经网络模型,可以自…

基于 html5 的图书管理系统--论文pf

TOC springboot532基于 html5 的图书管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和…

ansible[自动配置]

回顾 1、mysql和python (1)不需要执行mysql_ssl_rsa_setup (2)Change_master_to.不需要get public key 2、可以使用pymysql非交互的管理mysql (1)connpymysql.connect(host,user,password,database,prot)…

您需要知道的:大模型中的算力精度FP16 vs. FP32

正如海洋中的巨浪需要广阔的海域来形成,大模型的算力需求也要求我们拓宽对现有计算资源的认识。接下来的内容将引导我们穿越技术的波涛,探索在人工智能快速发展的今天,算力如何成为推动进步的关键力量。我们将分析FP16与FP32精度选择的权衡&a…

【一文详解】内外网文件摆渡系统如何搭建安全数传通道?

内外网文件摆渡系统主要应用于做了隔离的内外网之间,或者多个网络(比如生产网、测试网、办公网)之间的文件数据传输,涉及的行业主要包括集成电路、金融、电力、能源、医院、高新技术、新能源、科研机构、生物医药等,内…

2024秋招Java 面试必刷的1200 道Java大厂面试真题(含答案解析)

2024秋招即将来临,很多同学会问 Java 面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。 国内的互联网面试,恐怕是现存的、最接近科举考试的制度…

Ubuntu网络服务无法启动问题

问题 Ubuntu20.04卡死重启后网络服务打不开,没有下图中的有线一栏: 查看网络服务状态如下: systemctl status NetworkManager此时桌面右上角没有下图中网络图标: 解决 命令: sudo service network-manager sto…

Golang | Leetcode Golang题解之第350题两个数组的交集II

题目&#xff1a; 题解&#xff1a; func intersect(nums1 []int, nums2 []int) []int {sort.Ints(nums1)sort.Ints(nums2)length1, length2 : len(nums1), len(nums2)index1, index2 : 0, 0intersection : []int{}for index1 < length1 && index2 < length2 {i…

Unity的地编系统

目录 基础操作与流程&#xff1a; 模型和材质制作&#xff1a; 六边形地图系统&#xff1a; 无缝大地图实现&#xff1a; 插件与扩展功能&#xff1a; 导航与寻路系统&#xff1a; 案例教学与视频教程&#xff1a; 技术问答与社区支持&#xff1a; Unity地编系统中如何…

基于RIFE的光流估计

文章目录 概要权重下载光流估计结果预览 概要 RIFE&#xff0c;一种用于视频帧插值&#xff08;VFI&#xff09;的实时中间流估计算法。许多最近基于流动的VFI方法首先估计双向光流&#xff0c;然后将它们缩放和反转为近似的中间流&#xff0c;从而导致运动边界和复杂管道上的…

Python之海龟绘图绘制国旗

海龟绘图绘制国旗 步骤&#xff1a; 背景底色大五角星5个小五角星 import turtle#1. draw_rectangle 函数用于绘制矩形&#xff0c;用于国旗的背景。 def draw_rectangle(color, x, y, width, height):turtle.penup()turtle.goto(x, y)turtle.pendown()turtle.color(color)tu…

如何量化管理研发团队的技术债务?

在探讨技术债的成因之前&#xff0c;我们需要澄清一些关于技术债起因和本质的普遍误解。 误解一&#xff1a;技术债务等同于劣质代码 那么&#xff0c;什么构成了所谓的「劣质代码」&#xff1f; 所谓的好代码&#xff0c;可能是指那些整洁、不会在未来限制你决策的代码&…

LearnOpenGL——法线贴图、视差贴图学习笔记

LearnOpenGL——法线贴图、视差贴图学习笔记 法线贴图 Normal Mapping一、基本概念二、切线空间1. TBN矩阵2. 切线空间中的法线贴图 三、复杂模型四、小问题 视差贴图 Parallax Mapping一、基本概念二、实现视差贴图三、陡峭视差映射 Steep Parallax Mapping四、视差遮蔽映射 P…

HexView 刷写文件脚本处理工具-命令行介绍(四)-地址范围缩减(/AR:‘range‘)

地址范围缩减(/AR:‘range’) 此选项可以限制加载到内存中的数据范围。 如果只想在 HexView 中处理数据的缩减范围,这将非常有用。 通过其块开始地址和长度来指定地址范围,地址和长度由逗号分隔。也可以使用开始地址和结束地址来指定范围。 然后,这两个值必须由‘-’分…

继承的多种方式

1. 原型链继承 function Parent() {this.name "xiaohong"; } Parent.prototype.getName function () {console.log(this.name); };function Child() {}Child.prototype new Parent();const child new Child(); child.getName(); console.log(child.name);引用类…