FPGA专题(个人用)-程序员宅基地

技术标签: fpga开发  

FPGA重点复习(牛客网总结)

持续更新,随时补充和总结

1.亚稳态产生的原因是什么?它稳定之后的结果是确定的吗?

个人回答亚稳态就是介于0和1之间不确定的状态,稳定之后结果不确定。

解题思路:产生的原因:在数字电路中,如果数据传输的过程中不满足建立时间和保持时间,或者是复位信号释放不满足恢复时间,则电路会产生亚稳态。 亚稳态稳定之后的结果:亚稳态需要经过大于等于决断时间的时间之后才会回到一个确定的状态,但是这个结果是随机地稳定到0或者1上。

2.异步FIFO当中为什么要使用格雷码?

个人回答:防止产生亚稳态

解题思路: :为了能够使得在电路发生亚稳态等异常的时候能够使得FIFO的判空和判满不会发生致命的错误二进制码在进做判空或判满操作时,数据的所有bit位都会发生变化。如果地址变化的时候,由于时钟发生抖动等因素造成了亚稳态,最后稳定下来,地址的每一个bit都会随机地稳定到0或者1,如对于一个深度为4的FIFO而言,若此时写入地址为010,那么下一次写入的地址应该是011,并且是为满的状态。但是若发生亚稳态,则有地址可能编程100或者010,造成地址的超前或者滞后,并且判空判满做出了错误的判断。而使用格雷码,因为每一次只有一个bit的数据发生变化,所以地址的变化即使发生了亚稳态,也不会对FIFO的工作产生致命性错误。在地址变化的过程中,若发生亚稳态,此时地址只可能是不变化或者是变成正常情况下的下一地址2种情况,最坏的情况只会是它本身,把上一次写的数据给覆盖掉,FIFO的判空和判满不会发生致命的错误。依旧以深度为4的FIFO举例,若此时地址所对应的格雷码为11(对应十进制的地址2),它的下一状态应该是10,并且是满状态。若发生了亚稳态,最坏情况就是把11种的数据替换掉,而不会发生地址超前或者滞后的情况。因此对FIFO的空满判断不会造成致命的影响。

网上找的别的回答 我觉得不错:

格雷码的关键不在于发生亚稳态的概率小了,而在于——即使发生了亚稳态,也没问题。
写模块和读模块是在同一个芯片上的,用的是同样的触发器,既然快时钟域的时序满足:
Tclock-to-q+Tcomb+Tsetup<Tperiod
(这里的Tcomb至少是一个mux和一个binary-to-gray转换器的组合路径延时加上线延时)
那么,在慢时钟域,如果这一次的transition发生了亚稳态问题,一定有:
Tlast_change≈Tperiod>>Tsetup
即上一次变化的那位一定是满足Setup time的!

也就是说,使用了格雷码之后,在慢时钟域,产生亚稳态问题的只可能有一位,这一位是随机的,但不管这一位是0还是1,要么是变化后的值,要么是变化前的值,这两个值都是历史上出现过的!然后这个信号再经过两级的同步触发器,达到判断空满标志的模块中,此时,也许我们的快时钟域的指针还在不断向前奔波,但我们要的就是保守判断,只要够保守,就不会有问题。
这也正是格雷码设计的初衷——不会检测到中间态,如果是二进制,从0111到1000,当发生了亚稳态的时候,有可能会经过既不是0111又不是1000的中间态,这个中间态有可能会超前,也有可能滞后,总之不是我们想要的,都有可能会引起问题。

原文链接:https://blog.csdn.net/qq_43365647/article/details/102660669

3.latch是如何产生的,如果在时序电路中会不会产生latch?

个人回答::锁存器是电平触发 ,毛刺影响电路

解题思路::Latch只会发生在组合逻辑电路中。如果在组合逻辑电路中的代码书写逻辑不完整,如有if没有else,有case没有default,就会产生latch。Latch对于时序分析非常不友好。如果一个模块中既有时序电路,又有组合逻辑电路,尽量避免latch的产生。在时序电路中不会产生latch。

4.在FPGA中,BRAM和DRAM有什么区别?

个人回答: :BRAM是块RAM。DRAM是分布式RAM。

解题思路: :BRAM是块RAM,在FPGA中是以块为单位出现,它的输出需要给时钟。BRAM在FPGA中是一种单独的定制资源,它对时序分析相较于DRAM要友好得多。但是它是以块为单位出现的,即使使用了BRAM中的一小部分,这块BRAM就无法再次使用。DRAM是分布式RAM,它是使用FPGA中的LUT(查找表资源)来进行搭建的,因此DRAM会占用FPGA中的LUT资源。DRAM不需要时钟进行驱动,并且使用较为灵活,可以定制任意大小的DRAM。 一般而言,少量数据使用DRAM存储,大量数据采用BRAM存储。对时序要求高的电路使用BRAM。

5.AXI4总线有哪些通道,为什么会没有读响应通道

个人回答::写地址,写数据,写响应,读地址,读数据。

解题思路::AXI4总线包括以下5个通道:写地址通道、写数据通道、写响应通道、读数据通道、读地址通道。 没有读响应通道的原因:因为读数据通道可以从接收端接收到数据,因此它也有AXI4读响应功能,因此不需要再额外开辟一条读响应通道。

6.FPGA的资源有哪些

解题思路
(1)IOB可编程输入输出单元 (2)可编程逻辑块 (3)数字时钟管理模块 (4)BRAM (5)布线资源 (6)底层内嵌功能单元——PLL(锁相环)、DSP等 一般会针对LUT、BRAM和DRAM进行深入提问

7.reg型和always块变量可以用在组合逻辑电路中吗?

个人回答:可以,reg可以用在always里,always块可以用于组合逻辑电路。注意:「时序电路」和「组合电路」不同。「时序电路」的输出不仅受现在输入状态的影响,还要受过去输入状态的影响。

解题思路::reg型和always块变量可以用在组合逻辑电路中。此时always块的写法不再是时序电路中由时钟来进行驱动,而是写成always@(*)。此后reg型变量在always块中进行运算即可。

8.如果存在时序违例,它们有何影响?可以如何修复?

解题思路: 时序违例分为2类:建立时间违例和保持时间违例。
建立时间违例的发生,会导致数据没有充足的时间在时钟上升沿到来之前做好准备,从而可能导致采集到的数据不正确。
建立时间违例的修复方法有以下2种: (1)改用速度更快的器件,降低触发器时钟边沿到数据输出端的响应时间,以增大留给建立时间的时间余量。 (2)缩短电路中的逻辑。如果在电路中2级D触发器之间的组合逻辑电路逻辑深度过深或者逻辑过长,可以考虑分步进行,将一段长的逻辑分成两个或者多个步骤分别实现,以减小每个时钟周期内Tp-logic逻辑运算时间,从而增大留给建立时间的时间余量。
保持时间违例的发生,会导致前一个周期的数据尚未打入后一级电路就被冲掉。 保持时间违例的修复方法有以下4种: (1)改用速度慢一些的器件,增加器件响应时间,从而增大Tcq时间,以增大留给保持时间的时间余量。 (2)加长2级D触发器中组合逻辑电路中的逻辑,加长逻辑运算时间Tp-logic。以增大留给保持时间的时间余量。 (3)加延迟缓冲。如可以加2级反相器。在不影响原有逻辑的基础上,加大数据传播所需要的时间,从而增大留给保持时间的时间余量。 (4)降低器件电压(不推荐)

9.两段式状态机和三段式状态机有何不同?

**解题思路:**两段式状态机有两个always块: 一个采用时序电路描述状态的转移方式,即当前状态和协议状态的跳转。另一个采用组合逻辑电路来输出相应状态的数据。 三段式状态机有三个always块: 一个采用时序电路描述当前状态和协议状态的跳转。一个采用组合逻辑电路来描述下一状态的转移条件,第三个采用组合逻辑电路来输出相应状态的数据。

10.latch和dff的区别是什么?

个人回答: latch 电平触发,dff是边沿触发

解题思路: Latch是锁存器,是受电平触发。DFF是触发器,是受时钟边缘触发。Latch容易产生毛刺,并且会使得静态时序分析变得复杂。在ASIC设计中使用Latch可以提高集成度,但是在FPGA中相反,因为FPGA中没有latch资源。DFF由于受时钟边缘触发,对电路的时序分析和时序控制友好,在ASIC设计中使用DFF会没有使用latch集成度高,但是在FPGA中由于有丰富的DFF资源,所以在FPGA中使用DFF比Latch集成度高。

11.SDRAM设计难点主要在什么地方?

解题思路:
SDRAM是同步动态随机存储器(Synchronous Dynamic Random Access Memory)的缩写,它是一种高速存储器,广泛应用于数字系统和FPGA中。在SDRAM设计中,主要有以下几个难点:

1.时序设计:SDRAM在读写数据时,需要根据时序进行访问控制。设计时需要考虑内部时序和外部时序的匹配,保证正确读写数据,同时考虑时序的优化,提高存储器的访问速度。

2.复杂的数据存取方式:SDRAM具有复杂的数据存取方式,需要在读写控制信号和数据信号之间进行复杂的转换。在设计时需要考虑数据存取方式的复杂性,确保信号传输的正确性和稳定性。

3.噪声问题:由于SDRAM需要高速读写数据,所以它对噪声和干扰非常敏感。在设计时需要采取措施,降低噪声和干扰对存储器读写的影响。

4.功耗问题:SDRAM的读写功耗比较大,在FPGA中使用时需要考虑功耗的控制,尽可能降低功耗,提高系统的可靠性和稳定性。

综上所述,SDRAM的设计难点主要集中在时序设计、数据存取方式、噪声和功耗等方面。在SDRAM的设计过程中,需要综合考虑这些因素,确保存储器的读写操作的正确性和稳定性,提高系统的可靠性和性能。

12.刷新请求到来时,读数据处于突发模式时,数据未突发完,此时来了刷新请求,如果等待一次突发完成以后可能导致刷新请求不能得到及时的响应,这时该怎么办

解题思路: 当刷新请求到来时,如果数据未突发完,需要立即停止当前的突发传输,并尽可能快地响应刷新请求。这可以通过以下几种方法来实现:

发送“中止”命令:FPGA控制器可以通过向SDRAM发送中止命令,以停止当前的突发传输。接下来,FPGA控制器可以处理刷新请求,并重新开始读取未读取的数据。但是,这种方法可能会浪费一些时间,因为SDRAM可能需要一些时间来处理中止命令。

使用写前读命令:写前读是一种SDRAM命令,它可以让SDRAM在写入数据之前读取数据。这个命令可以用于刷新请求,因为它可以让SDRAM在执行刷新操作之前读取未读取的数据。这种方法可以最大程度地减少对SDRAM的停顿时间,因为它可以在读取未读取的数据的同时响应刷新请求。

增加SDRAM的刷新间隔:如果在SDRAM刷新间隔之间允许更多的时间用于突发传输,那么在刷新请求到来时,可能会有更多的时间用于完成突发传输。但是,这可能会增加SDRAM的延迟时间,因此需要根据具体情况权衡利弊。

13.FPGA的内部组成?

解题思路: FPGA的内部组成主要包括三个部分:可编程逻辑单元(Configurable Logic Blocks,CLB)、可编程互连资源(Programmable Interconnect Resources,PIR)和输入/输出资源(I/O Blocks,IOBs)。

可编程逻辑单元(CLB)是FPGA最基本的计算单元,用于实现各种数字电路功能。每个CLB包含多个LUT(Lookup Table),寄存器,以及一些MUX、ALU、加法器等,可以进行任意的布尔运算、寄存器存储等操作。

可编程互连资源(PIR)是FPGA中实现信号传输的主要资源,包括可编程连接点、交叉开关、线缆等,可以将各个CLB中的逻辑单元连接起来,实现任意的数字电路连接。

输入/输出资源(IOBs)用于与外部设备进行数据交互,包括输入/输出端口、时钟管理器、数据缓存器、电压电平转换器等。IOBs可以实现与外部设备的数据通信,同时还可以实现时钟分频、时钟缓存等功能。

14.LE中查找表的实现原理?

解题思路: FPGA中的查找表(Look-Up Table,简称LUT)是FPGA实现逻辑功能的基本单元之一,其实现原理如下:

LUT是一种内部存储器,可存储K位输入的所有可能的输出结果,其中K称为查找表输入的位宽,LUT中的每个存储单元对应于一个K位输入组合,存储该组合对应的输出结果。在FPGA中,LUT通常是SRAM单元,其大小为2^K,K为LUT的输入位宽。

当FPGA需要实现一个逻辑功能时,就将输入信号通过MUX选择器选择到对应的LUT中,LUT中存储的输出结果即为逻辑功能的输出。

15.分布式RAM与块RAM有什么区别?

解题思路: 分布式RAM和块RAM都是FPGA中常见的存储器类型,它们的主要区别在于存储器的物理实现方式和功能。

分布式RAM是指由FPGA中的逻辑单元(LUT)构成的小型存储器单元,它们分散在FPGA的各个逻辑区域,具有非常低的延迟和高的吞吐量,适合于存储需要快速访问的小型数据集。分布式RAM的优点是速度快、占用面积小,但其存储容量通常比较有限。

块RAM则是一种大型存储器单元,通常由硬件IP核提供,包括存储器阵列、地址译码器、读写控制器等功能模块,适合于存储大量数据。块RAM的优点是存储容量大、存取速度快、实现方便,但其缺点是面积较大,会对FPGA资源产生较大的占用。

因此,在实际应用中,可以根据具体的需求来选择分布式RAM或块RAM。对于需要高速存储和访问小数据集的应用,可以使用分布式RAM;对于需要大容量存储的应用,则需要使用块RAM。

16.查找表与触发器是怎么构成分布式RAM的?

解题思路: 查找表(Lookup Table,简称LUT)和触发器(Flip-Flop)是构成分布式RAM的基本元素。具体实现方式如下:

首先,将输入地址分为两部分,高位地址和低位地址。高位地址通过解码器选择要访问的RAM块,低位地址用于选择RAM块中的行。

然后,将选择的RAM块中的每一行都表示为一个查找表,每个查找表包含N位输入和M位输出。查找表通过使用输入地址的低位地址来确定要选择的行,然后将输入地址的高位地址作为查找表的输入,得到查找表的输出。

最后,将查找表的输出连接到触发器的输入,触发器用于存储查找表的输出数据。这样,每个RAM块中的查找表和触发器组合在一起形成了分布式RAM。这种设计可以提高RAM访问速度和减少功耗。

17.全局时钟域与局部时钟的区别?

解题思路: 全局时钟域和局部时钟域是时序设计中常用的两个概念,它们的主要区别在于时钟信号的来源和传输方式。

全局时钟域指的是整个FPGA芯片中使用的相同时钟信号。在全局时钟域中,时钟信号从芯片外部输入,经过时钟网络分配到各个时钟域中,因此,各个时钟域中的时钟信号的相位和频率是一致的,也就是说,各个时钟域中的逻辑元件在相同的时钟边沿上进行操作,使得时序同步。

局部时钟域则指的是单独的时钟域,其时钟信号只影响该时钟域中的逻辑元件。在局部时钟域中,时钟信号通常从全局时钟域中派生而来,或者是由局部时钟信号和锁相环(PLL)等电路生成。由于时钟信号的传输受到局限,因此,局部时钟域中的时钟信号相位和频率可能会存在一定的偏差,需要特殊的时序设计技巧来避免时序异步问题的出现。

总之,全局时钟域和局部时钟域都是FPGA时序设计中非常重要的概念,需要根据具体的应用场景进行选择和配置。

18.IOB的主要组成部分?

解题思路: IOB(Input Output Block)是FPGA中用于输入输出的基本单元,其主要组成部分包括:
输入/输出缓冲器(Input/Output buffer,IOB):用于数据输入输出的缓冲器,负责与外部设备进行数据交换。
器件单元(Device element,DE):负责将输入信号转换为FPGA内部信号,或将FPGA内部信号转换为输出信号。
时钟缓冲器(Clock buffer,CB):用于产生时钟信号,并将时钟信号缓存。
复位器(Reset):提供复位信号,并通过复位信号重置器件单元和时钟缓冲器。
IOB可以通过调整缓冲器和器件单元的参数,实现不同的电气特性和信号处理功能,比如调整输入输出的阻抗、驱动强度和斜率等。同时,IOB可以通过与其他模块的连接实现不同的逻辑功能,如实现异步和同步的FIFO、计数器、状态机等。

19.请介绍一下协议相关的知识,主要就是时序图怎么看的?

解题思路: 协议相关的知识是 FPGA 工程师需要掌握的基本技能之一,通常包括以下几个方面:
协议概述:要了解协议的应用场景,主要特点以及协议的作用等等。
协议数据格式:要熟悉协议中的各种数据格式,如帧头、帧尾、数据域等等。
时序图:时序图是协议的重要表示方式,可以直观地表现出协议的时序关系。当读取时序图时,首先要了解协议的控制信号和数据信号,以及它们在时序图上的时序关系。
协议状态机:协议状态机可以用于表示协议的状态转换,也可以用于生成 Verilog HDL 代码。当了解协议状态机时,需要熟悉协议中各种状态的含义以及状态之间的转换条件。
关于如何阅读时序图,主要包括以下几个方面:
了解信号含义:首先要了解协议中各个信号的含义,以及它们在时序图上的位置。
分析时序关系:可以通过观察时序图上的箭头来了解信号之间的时序关系,例如哪个信号在哪个信号的前面或后面。
分析信号变化:可以通过观察时序图上的波形来了解信号的变化过程,例如在哪个时刻信号发生了变化,变化的方式是什么等等。
确定信号作用:最后可以通过分析时序图来确定各个信号的作用,以及信号之间的关系,从而更好地理解协议的工作原理。

20.FPGA和cpld的区别?

解题思路: FPGA和CPLD都是可编程逻辑器件,但它们的区别在于它们的体系结构和功能。FPGA是一种可编程逻辑器件,具有复杂的体系结构和多个功能块,可以实现高级的逻辑和数字信号处理功能。FPGA适用于需要处理大量逻辑和运算的应用程序,如图像和视频处理、高速通信、计算机视觉和信号处理等。
CPLD是一种较小的可编程逻辑器件,由于它的体积小,功耗低,成本较低,因此它适用于实现简单的逻辑功能和控制电路。CPLD通常用于控制电路、电源管理、时序控制、数据分配和数据选择等应用程序。
此外,FPGA和CPLD的编程方式也有所不同。CPLD通常使用低级语言进行编程,如VHDL或Verilog,而FPGA可以使用高级语言进行编程,如C或C++。

21.什么是阻塞赋值和非阻塞赋值

解题思路: 阻塞赋值和非阻塞赋值是Verilog HDL中两种不同的信号赋值方式。
阻塞赋值使用"=“符号进行赋值,表示在进行信号赋值时会等待该语句执行完毕才会执行下一条语句,类似于顺序执行。
非阻塞赋值使用”<="符号进行赋值,表示在进行信号赋值时不会等待该语句执行完毕,而是在该时钟周期结束后立即进行赋值,类似于并行执行。例如: always@(posedge clk) begin a <= b; //非阻塞赋值 c <= a; end 在这个例子中,a被赋值为b,在同一时钟周期内,c的值也被赋为a的值,而不会等待a的赋值语句执行完毕。因此,非阻塞赋值可以用于描述时序逻辑,同时避免了竞争条件的出现。

22.什么是建立时间和保持时间画图表示,哪个可能是零

解题思路: 建立时间(setup time)和保持时间(hold time)是数字电路中的时序约束。建立时间指的是输入信号在时钟信号到来之前必须保持稳定的最短时间,保持时间指的是输入信号在时钟信号到来之后必须维持稳定的最短时间。时钟上升沿和下降沿的时间差也称为时钟周期。
以建立时间为例,可以用一个时序图来表示。其中输入信号在时钟上升沿到来之前必须保持稳定的时间为建立时间,也就是从输入信号变化到时钟上升沿到来之间的时间。
setup time waveform
保持时间同理,只不过是在时钟上升沿到来之后输入信号必须维持稳定的时间。
hold time waveform
通常情况下,建立时间和保持时间都不可能为零。但是在某些情况下,建立时间可能会比时钟周期更短,这时就称为负建立时间(negative setup time)。

23.图像处理中滤波模板的大小会有什么样的影响

解题思路: 在图像处理中,滤波模板大小是一项重要参数,它会影响滤波器的性能和图像处理结果的质量。滤波模板是指在进行图像滤波时用到的一个二维矩阵,用来计算图像上每个像素周围的值。滤波模板的大小通常是奇数,如3×3、5×5等。当滤波模板大小变化时,会产生以下影响:
平滑度:滤波模板越大,平滑度越高,因为模板大小代表了计算邻域大小的范围。
保留细节:滤波模板越小,可以保留更多的细节信息,因为小的滤波模板只考虑了图像中局部像素的值。
处理速度:滤波模板越大,处理速度越慢,因为计算范围更广。
滤波效果:滤波模板的大小和形状也影响滤波器的性能和图像处理结果的质量。例如,对于边缘检测任务,常用的滤波模板为Sobel算子,它们的大小是3×3。
建议根据具体应用场景选择滤波模板的大小,优化滤波器的性能和处理结果的质量。

24.用两个与非门构成一个与门

解题思路: 可以使用以下电路图将两个与非门(NAND)构成一个与门(AND):

     _____

Input 1–|
| NAND |–Output
Input 2–|_____/
将两个与非门(NAND)级联起来,可以得到以下逻辑式:
Output = (Input 1 NAND Input 2) NAND (Input 1 NAND Input 2)
简化后,可以得到与门(AND)的逻辑式:
Output = Input 1 AND Input 2
因此,使用两个与非门(NAND)可以构成一个与门(AND)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44374477/article/details/136300160

智能推荐

ESP8266和ESP32区别,以及优缺点分析!_esp8266为什么不建议使用-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏4次。高速主频240MHZ,对比STM32F1的72MHZ和STM32F4的168MHZ,速度快很多,而且价格上比起一直在涨价的STM系低出非常多;总的来说,STM32在国内的使用程度和受众程度是远大于ESP32的,毕竟STM32已经占据主流市场很久了,学习的资料比起ESP32起来会多,再加上一些开源问题,使用32的人群还是占据多数。2016年,乐鑫推出了ESP32,它是ESP8266的升级版本,速度更快还带有蓝牙4.2和蓝牙低功耗,价格在20元左右,在这个价格下几乎找不到对手可以“一战”。_esp8266为什么不建议使用

linux 分区简介,Linux硬盘分区知识简介-程序员宅基地

文章浏览阅读990次。Linux系统可以挂载多个不同接口类型的磁盘(disk),每一个磁盘又可以分成若干个分区(Partition),每个分区又可以拥有自己的文件系统类型(FileSystem)。Linux对于磁盘和分区又自己的一套标记方法。硬盘和分区的区分第一个SCSI(Small Computer System Interface)磁盘记为/dev/sda,第二个SCSI磁盘记为/dev/sdb;第一个SATA磁盘..._linux引导分区的标记可为

unity 网络游戏架构设计(第12课:网络游戏案例讲解)之美_网络游戏消息结构设计案例-程序员宅基地

文章浏览阅读656次。第12课:网络游戏案例讲解上章给读者介绍关于服务器之间的通信,本章通过案例给读者介绍如何将框架跟 Photon 结合起来,实现一个网络通信的框架设计。UI 架构设计模块已经介绍过,我们的 Demo 使用的 UI 是 UGUI,简单的用几个 Button 代替 Sprite,它们的原理是一样的。我们先创建一个 UI,如下图所示:这个 UI 主要有三个关键按钮,分别是 Create Roo..._网络游戏消息结构设计案例

Android-Gradle详解_grade编译运行安卓-程序员宅基地

文章浏览阅读548次。Android 构建系统非常灵活,可让你在不修改应用核心源代码文件的情况下执行自定义构建配置。本部分将介绍 Android 构建系统的工作原理,以及它如何帮助你对多个构建配置进行自定义和自动化处理。构建过程涉及许多将你的项目转换为 Android 应用程序包 (APK) 的工具和过程。构建过程非常灵活,因此了解一些幕后发生的事情很有用。下图为Android 应用模块的构建过程。Android 应用模块的构建过程(如上图所示)遵循以下一般步骤:1、编译器将你的源代码转换为 DEX(Dalv_grade编译运行安卓

linux网络配置后面加一条wheel,linux安全配置/etc/sudoers&wheel组-程序员宅基地

文章浏览阅读800次。/etc/sudoers 控制哪些用户能在哪些主机上以哪些用户的身份执行哪些命令。只有此文件权限为440时才能用户才能使用sudo命令,只有root用户才能使用visudo命令修改此文件。当然也可以先添加文件写权限,然后修改,再把文件权限改回来。此文件的一些配置规则定义别名:User_Alias UserName = user1,user2,kongoveHost_Alias HostName =..._%wheel all=(all) all

NO.15——使用Appium自动化测试爬取微信朋友圈数据_appium监测微信图片-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏27次。 一、解析过程本人使用锤子手机做测试,型号是YQ601,首先打开开发者模式确保手机能与mac相连,打开Appium客户端,配置参数如图可以理解为Appuim继承自web端的selenium,同样可以执行一些自动化操作。Appium自带了一个XPATH选择器,给用户提供了选择结果,如图这个选择器给出的结果太繁琐,所以可以改成通过查找ID的方式来构造爬虫程序。但是这里要注意,估计微信提升了自己..._appium监测微信图片

随便推点

交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装-程序员宅基地

文章浏览阅读8w次,点赞20次,收藏160次。aarch64-linux-gnu-gcc 是由 Linaro 公司基于 GCC 推出的的 ARM 交叉编译工具_aarch64-linux-gnu-gcc

数码管扫描显示verilog_如何开始Xilinx FPGA开发之旅 第二课 EGO1数码管与键盘-程序员宅基地

文章浏览阅读1.4k次。庚子年,我们的EGO1在疫情当中作为口袋实验平台成为了众多高校的复课利器。其中的成功案例更是得到了新华社网媒与CCTV教育频道的报道。借此东风,为了让更多的老师与学生熟悉了解Xilinx,更好的入门学习FPGA知识,我们的师资培训直播已开设EGO1专题直播,欢迎新老朋友跟踪关注。第二课---- EGO1数码管与键盘本周的直播我们将介绍EGO1的外设使用案例,介绍数码管扫描的原理和PS/2..._fpgaego1 键盘

python re库安装_python 库安装方法及常用库-程序员宅基地

文章浏览阅读3.6k次。python库安装方法:方法一:setpu.py1.下载库压缩包,解压,记录下路径:*:/**/……/2.运行cmd,切换到*:/**/……/目录下3.运行setup.py build4.然后输入python,进入python模块,验证是否安装成功方法二:1.Win + R 打开运行窗口,输入cmd回车2.找到pip安装路径——x:\Python xx\Scripts3. 在命令行中切换至该目录c..._rep库怎么安装

android listview fling,ListView优化: Fling(松开滑动) 过程中不加载数据-程序员宅基地

文章浏览阅读189次。1.Adapter增加滑动结束以后刷新方法//定义当前listview是否在滑动状态private boolean isScrolling = false;public void setScrolling(boolean scrolling) {this.isScrolling = scrolling;}public void refreshOnScrollEnd(AdapterView list..._android listview fling

微信公众号JSAPI自费支付总结_微信自动续费api-程序员宅基地

文章浏览阅读535次。文章目录前言一、准备操作1.公众号ID2.商户号3.商户号密钥4.域名、服务器二、步入正题1. 支付流程2. 初始化订单数据2.读入数据总结前言本编章主要是通过运行一个自费测试demo使其能够快速了解微信自费支付的实现流程,也是个人实现微信自费demo之后的记录、总结官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1一、准备操作进行微信自费支付之前请先获得以下几项必要条件,公众号和商户号需要绑定名称_微信自动续费api

java byte 字节负数-程序员宅基地

文章浏览阅读2w次。由于通讯协议中长度使用byte字节来表示,但在java中长度超过127的时候会变成负数,所以需要保证得到的长度是正数byte b & 0xFFhttp://www.blogjava.net/orangelizq/archive/2008/07/20/216228.html在剖析该问题前请看如下代码public static String bytes2HexString(

推荐文章

热门文章

相关标签