口袋实验室--使用AD2高效调试IIC、UART、SPI等低速接口

news2024/11/17 5:30:23

目录

1. 简介

2. 调试过程

2.1 简要步骤

2.2 Si5338 寄存器配置流程

2.3 AD2的基本配置

2.4 检查Si5338状态

2.5 配置Si5338寄存器

2.6 保存Si5338寄存器

3. 总结


1. 简介

使用Digilent Analog Discovery 2进行调试不仅提升了工作效率,而且极大地简化了常见低速接口的分析过程。在众多低速接口中,I2C接口因其简洁的连接方式和广泛的应用场景而受到特别关注。本文将以I2C接口为例,深入探讨如何利用AD2高效地调试Si5338芯片,一个多用途、任意频率时钟发生器芯片。

I2C接口

I2C(Inter-Integrated Circuit)接口是一种高度灵活的通信协议,通过仅使用两条线(即数据线SDA和时钟线SCL)实现了多个设备间的数据传输。

Si5338芯片

Si5338 可以生成四个独立的时钟信号,每个输出时钟都可以独立配置以支持各种信号格式和供电电压。这使得它非常适合在有限空间内实现多频率合成。Si5338 具有极低的抖动性能。它广泛应用于网络、通讯、高性能计算等领域,特别是在需要精确时钟信号的场合。Si5338通过I2C接口进行配置和控制,可以灵活地设置输出频率、相位和其他参数,满足不同应用的需求。

2. 调试过程

2.1 简要步骤

连接设备:首先,将AD2的逻辑分析仪通道连接到Si5338芯片的I2C接口上,确保SDA和SCL线分别对应。可以利用AD2提供的电源功能给Si5338供电。

配置WaveForms软件:启动AD2随附的WaveForms软件,并配置逻辑分析仪工具以适应I2C协议的特定参数,如时钟速度等。WaveForms软件能够自动识别并解码I2C通信,大大简化了调试过程。

捕获和分析数据:在Si5338进行通信时,使用AD2捕获I2C总线上的数据。通过WaveForms软件,可以实时查看和分析数据传输过程,包括启动条件、地址帧、数据帧和停止条件等。

调试和优化:根据捕获的数据,可以对Si5338的配置进行调整和优化。如果发现通信错误或性能不佳的问题,可以通过分析I2C总线上的数据来定位问题源头,并进行相应的调整。

调试中的注意事项:

  • 确保AD2与Si5338之间的连接稳定可靠,避免在数据传输过程中出现干扰或误操作。
  • 注意观察I2C总线的电气特性,如上拉电阻的配置,以确保通信的稳定性和可靠性。

2.2 Si5338 寄存器配置流程

了解 Si5338 寄存器配置流程是接下来使用AD2进行调试的基础。

 

2.3 AD2的基本配置

需要开启两个功能模块:

  • Protocol,用于开启AD2的IIC物理层
  • Script,用于编写Javascript脚本,实现上一节所描述Si5338配置流程

2.4 检查Si5338状态

//Check Si5338 Status
clear();
print("start\n");

if (Protocol.I2C.Clear() != true) throw "I2C bus error. Check the pull-ups.";

var dev_addr   = 0x70;
var reg_addr   = 218;

var reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);

if ((reg_data & 0x10) == 0)
    print("PLL_LOL = 0, PLL is locked.\n");
else
    print("PLL_LOL = 1, PLL is loss of locked.\n");

if ((reg_data & 0x08) == 0)
    print("LOS_FDBK = 0, Present of Signal Feedback Input.\n");
else
    print("LOS_FDBK = 1, Loss Of Signal Feedback Input.\n");

if ((reg_data & 0x04) == 0)
    print("LOS_CLKIN = 0, Present of Signal Clock Input.\n");
else
    print("LOS_CLKIN = 1, Loss Of Signal Clock Input.\n");

if ((reg_data & 0x01) == 0)
    print("SYS_CAL = 0, PLL is in process of acquiring lock.\n");
else
    print("SYS_CAL = 1, PLL is not acquiring lock.\n");

print("end");

2.5 配置Si5338寄存器

//C0 - 125MHz, lvds
//C1 - 160MHz, lvds
//C2 - 100MHz, lvds
//C3 - 50MHz, lvds
clear();
print("start");

if (Protocol.I2C.Clear() != true) throw "I2C bus error. Check the pull-ups.";

var dev_addr   = 0x71;
var reg_addr   = 0   ;
var reg_data   = 0   ;
var reg_data_t = 0   ;
var curr = new Array(3);

var reg_store = [
[  0,0x00,0x00],
[  1,0x00,0x00],
[  2,0x00,0x00],
[  3,0x00,0x00],
[  4,0x00,0x00],
[  5,0x00,0x00],
[  6,0x08,0x1D],
[  7,0x00,0x00],
[  8,0x70,0x00],
[  9,0x0F,0x00],
[ 10,0x00,0x00],
[ 11,0x00,0x00],
[ 12,0x00,0x00],
[ 13,0x00,0x00],
[ 14,0x00,0x00],
[ 15,0x00,0x00],
[ 16,0x00,0x00],
[ 17,0x00,0x00],
[ 18,0x00,0x00],
[ 19,0x00,0x00],
[ 20,0x00,0x00],
[ 21,0x00,0x00],
[ 22,0x00,0x00],
[ 23,0x00,0x00],
[ 24,0x00,0x00],
[ 25,0x00,0x00],
[ 26,0x00,0x00],
[ 27,0x71,0x80],
[ 28,0x15,0xFF],
[ 29,0x90,0xFF],
[ 30,0xB0,0xFF],
[ 31,0xC0,0xFF],
[ 32,0xC0,0xFF],
[ 33,0xC0,0xFF],
[ 34,0xC0,0xFF],
[ 35,0xAA,0xFF],
[ 36,0x06,0x1F],
[ 37,0x06,0x1F],
[ 38,0x06,0x1F],
[ 39,0x06,0x1F],
[ 40,0x84,0xFF],
[ 41,0x10,0x7F],
[ 42,0x24,0x3F],
[ 43,0x00,0x00],
[ 44,0x00,0x00],
[ 45,0x00,0xFF],
[ 46,0x00,0xFF],
[ 47,0x14,0x3F],
[ 48,0x2A,0xFF],
[ 49,0x05,0xFF],
[ 50,0xC4,0xFF],
[ 51,0x07,0xFF],
[ 52,0x10,0xFF],
[ 53,0x00,0xFF],
[ 54,0x08,0xFF],
[ 55,0x00,0xFF],
[ 56,0x00,0xFF],
[ 57,0x00,0xFF],
[ 58,0x00,0xFF],
[ 59,0x01,0xFF],
[ 60,0x00,0xFF],
[ 61,0x00,0xFF],
[ 62,0x00,0x3F],
[ 63,0x10,0xFF],
[ 64,0xD0,0xFF],
[ 65,0x05,0xFF],
[ 66,0x00,0xFF],
[ 67,0x00,0xFF],
[ 68,0x00,0xFF],
[ 69,0x00,0xFF],
[ 70,0x08,0xFF],
[ 71,0x00,0xFF],
[ 72,0x00,0xFF],
[ 73,0x00,0x3F],
[ 74,0x10,0xFF],
[ 75,0x80,0xFF],
[ 76,0x0A,0xFF],
[ 77,0x00,0xFF],
[ 78,0x00,0xFF],
[ 79,0x00,0xFF],
[ 80,0x00,0xFF],
[ 81,0x01,0xFF],
[ 82,0x00,0xFF],
[ 83,0x00,0xFF],
[ 84,0x00,0x3F],
[ 85,0x10,0xFF],
[ 86,0x00,0xFF],
[ 87,0x17,0xFF],
[ 88,0x00,0xFF],
[ 89,0x00,0xFF],
[ 90,0x00,0xFF],
[ 91,0x00,0xFF],
[ 92,0x01,0xFF],
[ 93,0x00,0xFF],
[ 94,0x00,0xFF],
[ 95,0x00,0x3F],
[ 96,0x10,0x00],
[ 97,0x2A,0xFF],
[ 98,0x66,0xFF],
[ 99,0x08,0xFF],
[100,0x00,0xFF],
[101,0x00,0xFF],
[102,0x00,0xFF],
[103,0x03,0xFF],
[104,0x00,0xFF],
[105,0x00,0xFF],
[106,0x80,0xBF],
[107,0x00,0xFF],
[108,0x00,0xFF],
[109,0x00,0xFF],
[110,0x80,0xFF],
[111,0x00,0xFF],
[112,0x00,0xFF],
[113,0x00,0xFF],
[114,0x80,0xFF],
[115,0x00,0xFF],
[116,0x80,0xFF],
[117,0x00,0xFF],
[118,0x80,0xFF],
[119,0x00,0xFF],
[120,0x00,0xFF],
[121,0x00,0xFF],
[122,0x80,0xFF],
[123,0x00,0xFF],
[124,0x00,0xFF],
[125,0x00,0xFF],
[126,0x00,0xFF],
[127,0x00,0xFF],
[128,0x00,0xFF],
[129,0x00,0x0F],
[130,0x00,0x0F],
[131,0x00,0xFF],
[132,0x00,0xFF],
[133,0x00,0xFF],
[134,0x00,0xFF],
[135,0x00,0xFF],
[136,0x00,0xFF],
[137,0x00,0xFF],
[138,0x00,0xFF],
[139,0x00,0xFF],
[140,0x00,0xFF],
[141,0x00,0xFF],
[142,0x00,0xFF],
[143,0x00,0xFF],
[144,0x00,0xFF],
[145,0x00,0x00],
[146,0xFF,0x00],
[147,0x00,0x00],
[148,0x00,0x00],
[149,0x00,0x00],
[150,0x00,0x00],
[151,0x00,0x00],
[152,0x00,0xFF],
[153,0x00,0xFF],
[154,0x00,0xFF],
[155,0x00,0xFF],
[156,0x00,0xFF],
[157,0x00,0xFF],
[158,0x00,0x0F],
[159,0x00,0x0F],
[160,0x00,0xFF],
[161,0x00,0xFF],
[162,0x00,0xFF],
[163,0x00,0xFF],
[164,0x00,0xFF],
[165,0x00,0xFF],
[166,0x00,0xFF],
[167,0x00,0xFF],
[168,0x00,0xFF],
[169,0x00,0xFF],
[170,0x00,0xFF],
[171,0x00,0xFF],
[172,0x00,0xFF],
[173,0x00,0xFF],
[174,0x00,0xFF],
[175,0x00,0xFF],
[176,0x00,0xFF],
[177,0x00,0xFF],
[178,0x00,0xFF],
[179,0x00,0xFF],
[180,0x00,0xFF],
[181,0x00,0x0F],
[182,0x00,0xFF],
[183,0x00,0xFF],
[184,0x00,0xFF],
[185,0x00,0xFF],
[186,0x00,0xFF],
[187,0x00,0xFF],
[188,0x00,0xFF],
[189,0x00,0xFF],
[190,0x00,0xFF],
[191,0x00,0xFF],
[192,0x00,0xFF],
[193,0x00,0xFF],
[194,0x00,0xFF],
[195,0x00,0xFF],
[196,0x00,0xFF],
[197,0x00,0xFF],
[198,0x00,0xFF],
[199,0x00,0xFF],
[200,0x00,0xFF],
[201,0x00,0xFF],
[202,0x00,0xFF],
[203,0x00,0x0F],
[204,0x00,0xFF],
[205,0x00,0xFF],
[206,0x00,0xFF],
[207,0x00,0xFF],
[208,0x00,0xFF],
[209,0x00,0xFF],
[210,0x00,0xFF],
[211,0x00,0xFF],
[212,0x00,0xFF],
[213,0x00,0xFF],
[214,0x00,0xFF],
[215,0x00,0xFF],
[216,0x00,0xFF],
[217,0x00,0xFF],
[218,0x00,0x00],
[219,0x00,0x00],
[220,0x00,0x00],
[221,0x0D,0x00],
[222,0x00,0x00],
[223,0x00,0x00],
[224,0xF4,0x00],
[225,0xF0,0x00],
[226,0x00,0x00],
[227,0x00,0x00],
[228,0x00,0x00],
[229,0x00,0x00],
[231,0x00,0x00],
[232,0x00,0x00],
[233,0x00,0x00],
[234,0x00,0x00],
[235,0x00,0x00],
[236,0x00,0x00],
[237,0x00,0x00],
[238,0x14,0x00],
[239,0x00,0x00],
[240,0x00,0x00],
[242,0x02,0x02],
[243,0xF0,0x00],
[244,0x00,0x00],
[245,0x00,0x00],
[247,0x00,0x00],
[248,0x00,0x00],
[249,0xA8,0x00],
[250,0x00,0x00],
[251,0x84,0x00],
[252,0x00,0x00],
[253,0x00,0x00],
[254,0x00,0x00],
[255, 1, 0xFF], // set page bit to 1 
[  0,0x00,0x00],
[  1,0x00,0x00],
[  2,0x00,0x00],
[  3,0x00,0x00],
[  4,0x00,0x00],
[  5,0x00,0x00],
[  6,0x00,0x00],
[  7,0x00,0x00],
[  8,0x00,0x00],
[  9,0x00,0x00],
[ 10,0x00,0x00],
[ 11,0x00,0x00],
[ 12,0x00,0x00],
[ 13,0x00,0x00],
[ 14,0x00,0x00],
[ 15,0x00,0x00],
[ 16,0x00,0x00],
[ 17,0x01,0x00],
[ 18,0x00,0x00],
[ 19,0x00,0x00],
[ 20,0x90,0x00],
[ 21,0x31,0x00],
[ 22,0x00,0x00],
[ 23,0x00,0x00],
[ 24,0x01,0x00],
[ 25,0x00,0x00],
[ 26,0x00,0x00],
[ 27,0x00,0x00],
[ 28,0x00,0x00],
[ 29,0x00,0x00],
[ 30,0x00,0x00],
[ 31,0x00,0xFF],
[ 32,0x00,0xFF],
[ 33,0x01,0xFF],
[ 34,0x00,0xFF],
[ 35,0x00,0xFF],
[ 36,0x90,0xFF],
[ 37,0x31,0xFF],
[ 38,0x00,0xFF],
[ 39,0x00,0xFF],
[ 40,0x01,0xFF],
[ 41,0x00,0xFF],
[ 42,0x00,0xFF],
[ 43,0x00,0x0F],
[ 44,0x00,0x00],
[ 45,0x00,0x00],
[ 46,0x00,0x00],
[ 47,0x00,0xFF],
[ 48,0x00,0xFF],
[ 49,0x01,0xFF],
[ 50,0x00,0xFF],
[ 51,0x00,0xFF],
[ 52,0x90,0xFF],
[ 53,0x31,0xFF],
[ 54,0x00,0xFF],
[ 55,0x00,0xFF],
[ 56,0x01,0xFF],
[ 57,0x00,0xFF],
[ 58,0x00,0xFF],
[ 59,0x00,0x0F],
[ 60,0x00,0x00],
[ 61,0x00,0x00],
[ 62,0x00,0x00],
[ 63,0x00,0xFF],
[ 64,0x00,0xFF],
[ 65,0x01,0xFF],
[ 66,0x00,0xFF],
[ 67,0x00,0xFF],
[ 68,0x90,0xFF],
[ 69,0x31,0xFF],
[ 70,0x00,0xFF],
[ 71,0x00,0xFF],
[ 72,0x01,0xFF],
[ 73,0x00,0xFF],
[ 74,0x00,0xFF],
[ 75,0x00,0x0F],
[ 76,0x00,0x00],
[ 77,0x00,0x00],
[ 78,0x00,0x00],
[ 79,0x00,0xFF],
[ 80,0x00,0xFF],
[ 81,0x00,0xFF],
[ 82,0x00,0xFF],
[ 83,0x00,0xFF],
[ 84,0x90,0xFF],
[ 85,0x31,0xFF],
[ 86,0x00,0xFF],
[ 87,0x00,0xFF],
[ 88,0x01,0xFF],
[ 89,0x00,0xFF],
[ 90,0x00,0xFF],
[ 91,0x00,0x0F],
[ 92,0x00,0x00],
[ 93,0x00,0x00],
[ 94,0x00,0x00],
[255, 0, 0xFF] ]; // set page bit to 0
//End of file

//Disable all outputs; Set OEB_ALL = 1; reg230[4];
print("Disable all outputs");
reg_addr = 230;
reg_data = 0x10;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

//Pause LOL; Set DIS_LOL = 1; reg241[7];
print("Pause PLL loss of lock detect.");
reg_addr = 241;
reg_data = 0xE5;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

//Write register map;
print("Writing register map.");
for (var i = 0; i < 350-1; i++) {
    curr = reg_store[i];
    if (curr[2] != 0x00) {
        //do a read-modify-write
        reg_addr = curr[0];
        reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]); // read current value
        reg_data = reg_data & ~curr[2]; //clear current value
        reg_data = reg_data | (curr[1] & curr[2]); //set new value
        Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);
    }
}

// check LOS alarm for the xtal input
// on IN1 and IN2 (and IN3 if necessary)
reg_addr = 218;
reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_data = reg_data & 0x04;
while (reg_data != 0) {
    reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
    reg_data = reg_data & 0x04;
}
print("Xtal input exists.");

//FCAL_OVRD_EN = 0
print("Disable override Frequency Calibration.");
reg_addr = 49;
reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_data = reg_data & 0x7F;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

//Soft reset
print("Soft reset");
reg_addr = 246;
reg_data = 0x02;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

//DIS_LOL = 0
print("Continue PLL loss of lock detect");
reg_addr = 241;
reg_data = 0x65;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

//Wait 25ms
wait(0.025);

//Make sure the device locked by checking PLL_LOL and SYS_CAL
reg_addr = 218;
reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_data = reg_data & 0x15;
while (reg_data != 0) {
    reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
    reg_data = reg_data & 0x15;
}
print("PLL is locked and acquiring lock completed");

//Copy FCAL value to active registers
print("Copy FCAL value to active registers");
reg_addr = 235;
reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_addr = 45;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

reg_addr = 236;
reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_addr = 46;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

reg_addr   = 237;
reg_data   = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_addr   = 47;
reg_data_t = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_data   = (reg_data & 3) | (reg_data_t & 0xFC);
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

//Set PLL to FCAL values; Set FCAL_OVRD_EN = 1; reg49[7];
print("Set PLL to FCAL values, override Frequency Calibration for the VCO");
reg_addr = 49;
reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_data = reg_data | 0x80;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

//Enable Outputs; Set OEB_ALL = 0; reg 230[4];
print("Enable Outputs");
reg_addr = 230;
reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
reg_data = reg_data & ~0x10;
Protocol.I2C.Write(dev_addr, [ reg_addr, reg_data ]);

reg_addr   = 218;
reg_data = Protocol.I2C.Read(dev_addr, 1, [reg_addr]);
if ((reg_data & 0x10) == 0) {
    print("\n***PLL_LOL = 0, PLL is locked.***\n");
    print("***Config Si5338 Success.***");
}

print("end");

2.6 保存Si5338寄存器

//遍历Si5338寄存器,并存储到指定txt文件
clear();
print("start");

if (Protocol.I2C.Clear() != true) throw "I2C bus error. Check the pull-ups.";

const rom_len = 350;
var filepath = "D:/Si5338/tt.txt";
var data = new Array(rom_len);
var addr = 0;

FileWrite(filepath, ""); //Clear all exist content

Protocol.I2C.Write(0x70, [ 255, 0 ]);
for(addr = 0; addr < 255; addr++) {
    data[addr] = Protocol.I2C.Read(0x70, 1, [addr]);
    FileAppendLine(filepath, addr + "," + data[addr]);
    print(addr, data[addr]);
}

Protocol.I2C.Write(0x70, [ 255, 1 ]);
for(addr = 0; addr < rom_len - 255; addr++) {
    data[addr] = Protocol.I2C.Read(0x70, 1, [addr]);
    FileAppendLine(filepath, (255+addr) + "," + data[addr]);
    print(255+addr, data[addr]);
}

print("end");

 

3. 总结

通过上述步骤和注意事项,使用Digilent AD2调试Si5338芯片或其他基于I2C接口的设备将变得简单高效。AD2不仅提供了强大的捕获和分析能力,而且通过其直观的用户界面和丰富的功能,极大地降低了调试低速接口的难度,提高了开发效率。无论是学生、爱好者还是专业工程师,AD2都是进行电子设计和调试的理想工具。

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

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

相关文章

Redis---------实现短信登录业务

目录 基于Session的短信登录 ①首先看他的业务逻辑 ②进行代码逻辑处理 基于Redis的短信登录 ①首先看他的业务逻辑 ②进行代码逻辑处理 Controller&#xff1a; Service接口&#xff1a; Service实例&#xff1a; Mapper&#xff1a; 封装ThreadLocal线程的数据操作&#x…

如何快速搭建nginx虚拟主机

华子目录 实验1&#xff1a;基于IP地址的虚拟主机原理 实验2&#xff1a;基于端口号的虚拟主机原理 实验3&#xff1a;基于域名的虚拟主机原理 实验1&#xff1a;基于IP地址的虚拟主机 原理 如果一台服务器有多个IP地址&#xff0c;而且每个IP地址与服务器上部署的每个网站一一…

latex+vscode一直报错,配置文件json和环境变脸配置

1、json配置文件 {"latex-workshop.latex.tools": [{"name": "xelatex","command": "xelatex","args": ["-synctex1","-interactionnonstopmode","-file-line-error","%DOCF…

Large Language Models for Test-Free Fault Localization

基本信息 这是24年2月发表在ICSE 24会议&#xff08;CCF A&#xff09;的一篇文章&#xff0c;作者团队来自美国卡内基梅隆大学。 博客创建者 武松 作者 Aidan Z.H. Yang&#xff0c;Claire Le Goues&#xff0c;Ruben Martins&#xff0c;Vincent J. Hellendoorn 标签 …

C# 实现格式化文本导入到Excel

目录 需求 Excel 的文本文件导入功能 范例运行环境 配置Office DCOM 实现 组件库引入 OpenTextToExcelFile 代码 调用 小结 需求 在一些导入功能里&#xff0c;甲方经常会给我们一些格式化的文本&#xff0c;类似 CSV 那样的纯文本。比如有关质量监督的标准文件&…

ArrayList知识点详解

目录 1.简介 2.ArrayList的使用 &#xff08;1&#xff09;如何实例化ArrayList&#xff1f;&#xff08;如何创建&#xff1f;&#xff09; &#xff08;2&#xff09;如何构造使用&#xff1f; &#xff08;3&#xff09;为什么ArrayList的无参构造可以添加数据 &#…

【进收藏夹吃灰系列】算法学习指南

文章目录 [toc]分治算法 个人主页&#xff1a;丷从心 系列专栏&#xff1a;进收藏夹吃灰系列 分治算法 博客标题博客url【分治算法】【Python实现】Hanoi塔问题https://blog.csdn.net/from__2024_04_11/article/details/138093461?spm1001.2014.3001.5502

Flowable入门案例

资料地址1614912120/Flowable (github.com)https://github.com/1614912120/Flowable 步骤1&#xff1a;添加Flowable依赖 首先&#xff0c;您需要将Flowable引擎集成到您的项目中。您可以通过Maven、Gradle或手动下载jar包的方式来添加Flowable的依赖。 <?xml version&q…

CVPR 小样本土地覆盖制图 张洪艳教授团队获挑战赛冠军

提出了一个广义的基于少镜头分割的框架&#xff0c;以更新高分辨率土地覆盖制图中的新类&#xff0c;分为三个部分:(a)数据预处理:对基础训练集和新类的少镜头支持集进行分析和扩充;(b)混合分割结构:将多基学习器和改进的投影到正交原型(POP)网络相结合&#xff0c;增强基类识别…

公共 IP 地址与私有 IP 地址区别有哪些?

​  IP 地址是分配给互联网上每个设备的唯一数字 ID。 IP 地址可以在 Internet 上公开使用&#xff0c;也可以在局域网 (LAN)上私有使用。本文&#xff0c;我们主要探讨公共 IP 地址和私有 IP 地址之间的区别。 公共IP地址&#xff1a;公共IP地址是用于访问Internet的向外的I…

TouchGFX 总结

文章目录 使用中文字体多屏幕间交换数据UI to MCUMCU to UI API文档参考横竖屏切换 使用中文字体 添加一个textArea&#xff0c;默认的英文文本可见&#xff0c;输入中文字体后就看不见了&#xff0c;是因为这个默认的字体不支持中文&#xff0c;改一下字体就可以了&#xff1…

结构体反汇编解析

代码如下 #include<iostream> using namespace std; typedef struct Role {int HP;int MP; }*PRole; int main() {Role user;PRole puser;puser &user;puser->HP 1500;puser->MP 2000;user.HP 2500;user.MP 3000;return 0; }基础知识 如果是地址就是采用…

关于Centos 7/8 网络设置 与工具连接

网络三步曲的配置 1、首先更改虚拟机的网络配置 查看子网地址以及网关 如果有要求需要更改IP地址&#xff0c;规定第三位是指定数值&#xff0c;那么需要全部更改 例如&#xff0c;IP地址为192.168.200.30 其中200为重点&#xff0c;更改时为以下步骤 1、点击DHCP设置&#x…

红米1s 刷入魔趣 (Mokee)ROM(Android 7.1)

目录 背景准备工具硬件&#xff08;自己准备&#xff09;软件&#xff08;我会在文末提供链接&#xff09; 刷机步骤1. 重启电脑2. 安装驱动3. 刷入TWRP4. 清空数据5. 刷入魔趣6. 开机 结尾下载链接 本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 B…

云计算技术概述_1.云计算相关概念

1.关于IBM“蓝云&#xff08;Blue Cloud&#xff09;”计划 IBM 推出的“蓝云&#xff08;Blue Cloud&#xff09;”计划为客户带来即可使用的云计算(Cloud Computing)。它包括一系列的云计算产品&#xff0c;使计算不仅仅局限在本地机器或远程Server Farms&#…

GPT3 终极指南(一)

原文&#xff1a;zh.annas-archive.org/md5/6de8906c86a2711a5a84c839bec7e073 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 GPT-3&#xff0c;或者说是 Generative Pre-trained Transformer 3&#xff0c;是由 OpenAI 开发的基于 Transformer 的大型语言模型…

【R语言数据分析】数据类型与数据结构

R的数据类型有数值型num&#xff0c;字符型chr&#xff0c;逻辑型logi等等。 R最常处理的数据结构是&#xff1a;向量&#xff0c;数据框&#xff0c;矩阵&#xff0c;列表。 向量有数值型向量&#xff0c;字符型向量&#xff0c;逻辑型向量等&#xff0c;字符型向量就是反应…

书生·浦语 大模型(学习笔记-9)OpenCompass 大模型评测实战

目录 一、评测实现双赢 二、评测遇到的问题 三、如何评测大模型&#xff08;大概总结4大类方法&#xff09; 四、评测工具链及流水线 五、实战评测 GPU的环境安装 查看支持的数据集和模型 启动评测(会缺少protibuf库&#xff0c;提前安装&#xff09; 测评结果 一、评…

【linux学习指南】linux 环境搭建

文章目录 &#x1f4dd;前言&#x1f320; 云服务器的选择&#x1f320;阿里云&#x1f320;腾讯云&#x1f320;华为云 &#x1f320;使用 XShell 远程登陆到 Linux&#x1f309;下载 XShell &#x1f320;查看 Linux 主机 ip&#x1f309; XShell 下的复制粘贴&#x1f309; …

Linux下安装snaphu

1、官网下载安装包 2、解压&#xff0c;移动文件夹到/usr/local/下 3、在/usr/local/下创建man&#xff0c;在man下创建man1文件夹 4、进入到snaphu的src文件夹里&#xff0c;执行sudo make&#xff0c;如果报错 在这个 Makefile 中&#xff0c;-arch x86_64 是 macOS 特定的…