GEM TSU Interface Details and IEEE 1588 Support

2023-05-16

GEM TSU Interface Details and IEEE 1588 Support

  • Chapter 1: Introduction
  • Chapter 2: GEM TSU Clock Source
    • PCW 中的 GEM TSU 时钟源选择
      • 使用 PS 内部 IOPLL 作为 GEM TSU 时钟
      • 使用 MIO 时钟作为 GEM TSU 时钟
      • 使用 EMIO 时钟作为 GEM TSU 时钟
    • GEM TSU 时钟框图
      • 内部 IOPLL 作为 TSU 时钟源寄存器配置
      • MIO50/51 作为 TSU 时钟源寄存器配置
      • EMIO 作为 TSU 时钟源寄存器配置
  • Chapter 3: TSU and PTP signals
    • TSU Signals
    • PTP signals
  • Chapter 4: Testing PTP on board
    • Setup
    • Master Setup
    • Slave Setup
    • Steps for testing PTP
    • Expected PTP drift log
  • Chapter 5: Accuracy for GEM PTP support on Zynq UltraScale+
  • Additional Information

Chapter 1: Introduction

GEM 中的 1588 时间戳单元 (TSU) 是一个定时器,实现为 102 位寄存器。 高 48 位计算秒,接下来的 30 低位计算纳秒,最低 24 位计算亚纳秒。 当计数到一秒时,低 54 位翻转。
GEM0 的外部 TSU 端口向顶层用户公开。 外部端口为 94 位宽,符合上述定义的内部 TSU 计数的最高有效位。

Chapter 2: GEM TSU Clock Source

使用 GEM 时,目前您可以为 TSU 时钟选择 3 种不同的时钟源。
以下部分讨论如何在 PCW 配置中进行选择。

PCW 中的 GEM TSU 时钟源选择

使用 PS 内部 IOPLL 作为 GEM TSU 时钟

当您启用 GEM(例如 GEM0 )但未选择 GEM TSU 时钟时,它将默认使用 250MHz PS 内部 IOPLL 作为 GEM TSU 时钟。
Figure 1: Enable GEM0

Figure 1: Enable GEM0

在这里插入图片描述

Figure 2: GEM_TSU Clock to PS IOPLL
使用 GEM0 时,emio_enet0_enet_tsu_timer_cnt[93:0] 端口将暴露给用户。 由于 MIO 引脚数限制,此端口仅适用于 GEM0。 此端口是 TSU 定时器计数值。 高 48 位是秒值,低 46 位是纳秒/亚纳秒。 第 46 位每秒切换一次,即 1 pps。

在这里插入图片描述

Figure 3: External TSU Timer Port Available

fmio_gem0_tsu_clk_to_pl_bufg 和 fmio_gem_tsu_clk_from_pl 信号也应该暴露在顶层,因为 fmio_gem0_tsu_clk_to_pl_bufg 是 94 位定时器正在同步的时钟。
在 2018.2 PCW 中,此配置隐藏了这对信号。 计划在未来的版本中修复此问题。

使用 MIO 时钟作为 GEM TSU 时钟

要将 MIO 50 或 51 用作 TSU 时钟,用户需要启用“GEM TSU 时钟”并在 PCW GUI 中启用 MIO。

在这里插入图片描述

Figure 4: Choose MIO 50 as TSU Clock Source

在这里插入图片描述
Figure 5: GEM_TSU Clock to MIO 50

在这里插入图片描述

Figure 6: TSU loopback Clock Ports Available

这两个端口(fmio_gem_tsu_clk_to_pl_bufg 和 fmio_gem_tsu_clk_from_pl)可以以环回方式连接。 94 位 TSU 定时器端口 emio_enet0_enet_tsu_timer_cnt 与 fmio_gem0_tsu_clk_to_pl_bufg 时钟同步,定时器数据的本地处理取决于该时钟。
请注意,MIO_26 不应用于任何 GEM 信号。 这将在未来版本的 PCW GUI 中“修复”。

使用 EMIO 时钟作为 GEM TSU 时钟

要将 EMIO 用于 TSU 时钟,用户需要启用“GEM TSU 时钟”并在 PCW GUI 中选择 EMIO。
在这里插入图片描述

Figure 7: GEM TSU Clock to EMIO

另一个额外的端口 emio_enet_tsu_clk 将暴露给用户。
在这里插入图片描述
Figure 8: EMIO TSU Clock Port Available

我们通过从 ZCU102 板获取 Si570 sysclk (300Mhz) 输入并将其连接到 MMCM 来验证 EMIO 作为时钟源。 PL 中的 MMCM 生成一个 250Mhz 时钟,该时钟连接到 Vivado IP 集成器设计中名为“emio_enet_tsu_clk”的 EMIO TSU CLOCK。

GEM TSU 时钟框图

下面是 GEM TSU 时钟结构的框图:
在这里插入图片描述

Figure 9: GEM TSU Clock Structure

左侧的 3 个时钟是 TSU 时钟源,具体取决于在 PCW 配置中选择的内容。
 Gem_tsu_ref_clk:PS 内部 IOPLL
 fmio_gem_tsu_clk: EMIO
 pad_gem_tsu_clk: MIO

两条红色突出显示的路径是 fmio_gem0_tsu_clk_to_pl_bufg 和 fmio_gem_tsu_clk_from_pl。
MUX 将决定使用哪个 TSU 时钟。
根据设计要求在 PCW 中配置 TSU 时钟时,相关寄存器将在 psu_init.tcl 中自动设置。

内部 IOPLL 作为 TSU 时钟源寄存器配置

GEM_CLK_CTRL -

  • bit[22] = 1’b0 或 1b’1(查看 fmio 信号是否被环回)
  • bit [21:20] = 2b’00

GEM_TSU_REF_CTRL –

  • bit[2:0] = 3b’000 或 3b’010(根据时钟选择设置除数)
  • bit [24] = 1
    上面的配置已经测试过了。

您还可以简单地将 tsu_timer_cnt 中我们需要的位从探测(1PPS 的位 45 和 46)暴露到输出标头。 即,tsu_timer_cnt[93:0] → 第 45 位的反转是 1PPS 信号。
寄存器设置同上,通常 fmio_gem_tsu_clk_to_pl_bufg 和 fmio_gem_tsu_clk_from_pl 会被环回。

MIO50/51 作为 TSU 时钟源寄存器配置

GEM_CLK_CTRL –

  • bit[22] = 1b’0 或 1b’1(查看 fmio 信号是否被环回)
  • 位 [21:20] = 2b’11

GEM_TSU_REF_CTRL –

  • bit[2:0] =3b’000 或 3’b010
  • bit[24] = 1b’0

MIO_PIN_XX

  • MIO_PIN_50/51 bit[1] = 1 as per user selection

由于没有可用的硬件,上述配置尚未经过测试。

EMIO 作为 TSU 时钟源寄存器配置

GEM_CLK_CTRL -

  • bit[22] = 1b’1(fmio_gem_tsu_clk_to_pl_bufg 和 fmio_gem_tsu_clk_from_pl 应该始终被环回)
  • bit [21:20] = 2b’11

GEM_TSU_REF_CTRL –

  • bit [24] = 1b’0

在这种情况下,不应为 GEM TSU 时钟配置 MIO_PIN_50/51,即,0xFF1800C8 设置为 0x00000010,寄存器 0xFF1800CC 设置为 0x00000010。 这样,时钟会自动从 EMIO 中选取。

文档 (U1087) 将在未来版本中更新 GEM_CLK_CTRL 寄存器位[21:20],如下所示:
00/10:来自 PLL 的 TSU 时钟
01:保留
11:来自 MIO[50] 或 MIO[51] 或 EMIO 的 TSU 时钟

Chapter 3: TSU and PTP signals

TSU Signals

如果用户想要控制 TSU 寄存器如何递增,他们可以在 PCW 中启用 TSU 信号并访问 emio_enet0_tsu_inc_ctrl[1:0] 和 emio_enet0_tsu_timer_cmp_val 信号。

在这里插入图片描述

Figure 10: Enable TSU Signals

在这里插入图片描述

Figure 11: TSU Ports Available

如果 gem_tsu_inc_ctrl 信号没有被强制,TSU 定时器会以四种不同的方式运行。
当 gem_tsu_inc_ctrl [1:0] =

  • 2b’11:定时器寄存器正常递增。

  • 2b’01:定时器寄存器增加额外的纳秒。

  • 2b’10:定时器增量少一纳秒。

  • 2b’00:

    -对于 GEM0,“纳秒”定时器寄存器被清零,“秒”定时器寄存器随着每个时钟周期递增。
    -对于 GEM1/2/3,定时器寄存器正常递增,但定时器值被复制到同步选通寄存器。
    要重新加载同步选通寄存器,您需要在 2b’11 和 2’b00 之间切换 gem_tsu_inc_ctrl。

emio_enet0_tsu_timer_cmp_val 是 TSU 定时器比较有效信号,与 TSU 时钟同步。 当 TSU 定时器计数值的高 70 位等于编程的比较值时,它被置为高电平。

PTP signals

当启用 PTP 信号时,PTP 接口也会暴露出来。
在这里插入图片描述

Figure 12: Enable PTP Interface

在这里插入图片描述

Figure13: PTP Interface Available

IEEE 1588 PTP 帧识别和时间戳单元信号:
 emio_enet0_delay_req_rx:如果在接收时检测到 PTP 延迟请求帧,则断言高同步到 rx_clk。
 emio_enet0_delay_req_tx:如果在发送时检测到 PTP 延迟请求帧,则断言高同步到 tx_clk。
 emio_enet0_pdelay_req_rx:如果在接收时检测到 PTP 对等延迟请求帧,则断言高同步到 rx_clk。
 emio_enet0_pdelay_req_tx:如果在发送时检测到 PTP 对等延迟请求帧,则断言高同步到 tx_clk。
 emio_enet0_pdelay_resq_rx:如果在接收时检测到 PTP 对等延迟响应帧,则断言高同步到 rx_clk。
 emio_enet0_pdelay_resq_tx:如果在发送时检测到 PTP 对等延迟响应帧,则断言高同步到 tx_clk。
 emio_enet0_rx_sof:当在接收帧上检测到 SFD 时,置高同步到 rx_clk
 emio_enet0_tx_sof:在发送帧上检测到 SFD 时,与 tx_clk 同步置为高电平,在帧结束时置低。
 emio_enet0_sync_frame_rx:如果在接收时检测到 PTP 同步帧,则断言高同步到 rx_clk。
 emio_enet0_sync_frame_tx:如果在发送时检测到 PTP 同步帧,则断言高同步到 tx_clk。

Chapter 4: Testing PTP on board

该测试通过主从同步验证 MACB Linux 驱动程序的 IEEE1588 支持。 为了在 MACB 中测试此功能,请确保打开了硬件时间戳支持选项。
例如,在较旧的内核中,需要启用 MACB_USE_HWSTAMP。 2017.4中为CONFIG_MACB_EXT_BD; 在 2018.1 中是 CONFIG_MACB_USE_HWTSTAMP。
https://github.com/Xilinx/linux-xlnx/blob/master/drivers/net/ethernet/cadence/Kconfig

这也处理了内核中的 PTP 依赖关系。 TSU 时钟是通过 DTG 从设计中获得的。 它通常为 250MHz。

Setup

当 ZynqMP 板通常是从设备时,需要进行测试设置。 主机通常是具有稳定高精度时钟的设置,用于硬件时间戳和(可选)1PPS 信号输出。

Master Setup

Oregano SYN1588 NIC 卡就是我们使用的这样一张卡。 它可以插入任何 Linux 机器的 PCIe 插槽。 此卡带有一个自定义启动映像,位于 pendrive 中。 您可以将其插入 Linux 机器并从中引导。
在这种情况下,在 Linux 机器上安装 Linux PTP 并使用相应的命令。

Slave Setup

使用任何带有以太网接口的 ZynqMP 板。 如果计划在 CRO 上捕获 1PPS 信号,则仅使用带 GEM0 的 DC4。 为了从 ZynqMP 捕获 1PPS 信号,必须更新设计以将 GEM0 时间计数器的“位 45 倒数”提取到板上的可探测接头。

Steps for testing PTP

On the Linux Host machine (Master):
ptp4l -i <interface_name> -m

On the ZynqMP (Slave):
ptp4l -i eth0 -s -m

Expected PTP drift log

e2e_slave
ptp4l -i eth0 -s -m
e2e_master
ptp4l -i -m
e2e_slave
ptp4l -i eth0 -s -m
root@Xilinx-ZC1751-DC1-2016_1:~# ptp4l -i eth0 -s -m
ptp4l[136.261]: selected /dev/ptp0 as PTP clock
ptp4l[136.262]: driver changed our HWTSTAMP options
ptp4l[136.262]: tx_type 1 not 1
ptp4l[136.262]: rx_filter 1 not 12
ptp4l[136.262]: port 1: INITIALIZING to LISTENING on INITIALIZE
ptp4l[136.262]: port 0: INITIALIZING to LISTENING on INITIALIZE
ptp4l[136.391]: port 1: new foreign master 001ec0.fffe.862d3a-1
ptp4l[140.391]: selected best master clock 001ec0.fffe.862d3a
ptp4l[140.391]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[142.568]: master offset -506797907644 s0 freq +0 path delay -369
ptp4l[143.568]: master offset -506797901693 s1 freq +5951 path delay -833
ptp4l[144.568]: master offset -1165 s2 freq +4786 path delay -833
ptp4l[144.568]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[145.568]: master offset -930 s2 freq +4671 path delay -369
ptp4l[146.568]: master offset -117 s2 freq +5205 path delay -369
ptp4l[147.568]: master offset -16 s2 freq +5271 path delay -202
ptp4l[148.568]: master offset 38 s2 freq +5320 path delay -36
ptp4l[149.568]: master offset 95 s2 freq +5389 path delay 70
ptp4l[150.568]: master offset 46 s2 freq +5368 path delay 214
ptp4l[151.568]: master offset 165 s2 freq +5501 path delay 214
ptp4l[152.568]: master offset 120 s2 freq +5506 path delay 257
ptp4l[153.568]: master offset 107 s2 freq +5529 path delay 257
ptp4l[154.568]: master offset 51 s2 freq +5505 path delay 275
ptp4l[155.568]: master offset 45 s2 freq +5514 path delay 275
ptp4l[156.568]: master offset -17 s2 freq +5465 path delay 310
ptp4l[157.568]: master offset -7 s2 freq +5470 path delay 310
ptp4l[158.568]: master offset 17 s2 freq +5492 path delay 310
ptp4l[159.568]: master offset -16 s2 freq +5464 path delay 314
ptp4l[160.568]: master offset 4 s2 freq +5480 path delay 314
ptp4l[161.568]: master offset -1 s2 freq +5476 path delay 314
ptp4l[162.568]: master offset -16 s2 freq +5460 path delay 315
ptp4l[163.568]: master offset 8 s2 freq +5480 path delay 311
ptp4l[164.568]: master offset -3 s2 freq +5471 path delay 311
ptp4l[165.568]: master offset -8 s2 freq +5465 path delay 311
ptp4l[166.568]: master offset 7 s2 freq +5478 path delay 309
ptp4l[167.568]: master offset -17 s2 freq +5456 path delay 312
ptp4l[168.568]: master offset -7 s2 freq +5461 path delay 312
ptp4l[169.568]: master offset -5 s2 freq +5461 path delay 313
ptp4l[170.569]: master offset -5 s2 freq +5459 path delay 313
ptp4l[171.569]: master offset -5 s2 freq +5458 path delay 313
ptp4l[172.569]: master offset 2 s2 freq +5463 path delay 313
DTS example
&gem0 {
tsu-clk=<250000000>;

};

Chapter 5: Accuracy for GEM PTP support on Zynq UltraScale+

MACB 驱动程序支持 Zynq MPSoC GEM 的 IEEE 1588。使用 Linux PTP 应用程序和我们的工程团队掌握的 Linux 服务器对主从同步进行了测试。观察到 +/- 50ns 漂移。

精度可以降低到 < +/- 10ns(7 是我们在 UNH-IOL(新罕布什尔大学互操作性实验室)的外部合规性中观察到的)。请注意,+/- 5ns 等低漂移需要进行一些调整,并且非常依赖于系统。我们并不普遍声称这种漂移是可以实现的。

为此,必须减去静态偏移——这是特定于系统的。同步后,系统的这种静态偏移可以通过在一夜之间绘制漂移来观察,例如(或在 CRO(示波器)中捕获它)并对其进行均衡以查看平均漂移。通常通过将示波器连接到主机和从机并分析它们的 1PPS 信号来捕获漂移。然后,您必须在驱动程序的 adjfreq 函数中减去/添加此参数以改善实际漂移。

Additional Information

寄存器
TSU_TIMER_INCR

  • “ns_increment”和“tsu_timer_incr_sub_nsec”不与“alt_ns_incr”一起使用。
  • “num_incs”将仅与 alt_ns_incr 一起使用,但我们当前的驱动程序不使用 alt_ns_incr。

NETWORK_CONTROL

  • ext_tsu_port_enable 位无效。

GEM_CLK_CTRL

  • bit [21:20] –
    00/10:来自 PLL 的 TSU 时钟
    01:保留
    11:来自 MIO[50] 或 MIO[51] 或 EMIO 的 TSU 时钟
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GEM TSU Interface Details and IEEE 1588 Support 的相关文章

  • 在java中使用接口的实现类型

    我想创建一个接口 强制实现它的每个类对于实现的类的类型具有特定的功能 假设我有类 MyClassA MyClassB MyClassC 等 它们都需要自己类型的函数 在我的A班 public class MyClassA implement
  • 具有默认方法的接口何时初始化?

    在搜索 Java 语言规范来寻找答案时这个问题 https stackoverflow com questions 23093470 java order of initialization and instantiation 230934
  • 接口是否位于继承链中?

    网上有两种说法Interface 那是陈述A 接口不属于继承链 其他声明B 接口可以继承其他接口 http msdn microsoft com en us library ms173156 28v vs 80 29 aspx 这两种说法是
  • C++ 多重继承和 vtable

    因此 回到基础知识 我试图将我的注意力集中在 vtables 和诸如此类的事情上 在下面的例子中 如果我要传递一个B 对于某个函数 该函数如何知道调用该函数的 vtable 中的方法C对象而不是 vtable 中的方法A 是否有两个单独的
  • Typescript 为具有动态和静态键的对象创建接口

    我正在尝试学习打字稿 但在界面方面遇到了障碍 我有一个想要保存的对象token和一个route如下 const obj token thisismytoken path to somewhere 我在这里遇到的问题是 如何生成该对象的接口
  • 在 C# 中实现接口与显式实现接口 [重复]

    这个问题在这里已经有答案了 我在 VS2010 中有两个用于实现接口的选项 当我有 IHelper cs 界面如下 public interface IHelper IEnumerable
  • 如何在 Kotlin 中编写以下代码来实现回调

    我如何像java一样用Kotlin编写 Callback callback new Callback Override public void getCallback ServerResponse serverResponse var ca
  • 何时实现接口以及何时扩展超类?

    我读了很多关于 Java 中的接口和类继承的文章 我知道如何做到这两点 并且我认为我对两者都有很好的感觉 但似乎没有人真正将两者并排比较 并解释何时以及为何要使用其中之一 我没有发现很多时候实现接口会比扩展超类更好 那么什么时候实现接口以及
  • 自定义字体和 XML 布局 (Android)

    我正在尝试在 Android 中使用 XML 文件定义 GUI 布局 据我所知 没有办法指定您的小部件应该在 XML 文件中使用自定义字体 例如您放置在 asset font 中的字体 并且您只能使用系统安装的字体 我知道 在 Java 代
  • Java 接口中的可选方法

    根据我的理解 如果你在java中实现一个接口 那么该接口中指定的方法必须由实现该接口的子类使用 我注意到在某些接口 例如 Collection 接口 中 有些方法被注释为可选 但这到底意味着什么 它让我有点困惑 因为我认为接口中指定的所有方
  • 是什么破坏了 .net 二进制 (dll) 接口

    考虑两个 net dll 首先 application dll 包含主要业务逻辑和数据访问代码 第二个 webservice dll 主要由 WebMethod 组成 这些 WebMethod 链接到 application dll 的对象
  • 没有任何成员的界面 - 不好的做法? [复制]

    这个问题在这里已经有答案了 可能的重复 标记接口的目的是什么 https stackoverflow com questions 1023068 what is the purpose of a marker interface 创建一个完
  • JDK 8 中的默认值是 Java 中多重继承的一种形式吗?

    JDK 8 中的一项新功能允许您添加到现有接口 同时保留二进制兼容性 语法就像 public interface SomeInterface void existingInterface void newInterface default
  • 将接口作为参数传递给扩展方法

    我使用扩展方法来扩展 html 助手来制作 RSS 转发器 public static string RSSRepeater this HtmlHelper html IEnumerable
  • 设计决策:为什么以及何时将接口设为私有?

    设计决策中是否使用过私有接口 如果是这样 原因是什么 您什么时候知道需要私有接口 A 顶层接口不能是私有的 它只能有public或包访问 来自Java 语言规范 第 9 1 1 节 接口修饰符 https docs oracle com j
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 界面与组合

    我想我理解接口和抽象之间的区别 抽象设置默认行为 在纯抽象的情况下 行为需要由派生类设置 接口是您所需要的 无需基类的开销 那么接口相对于组合的优势是什么 我能想到的唯一优点是在基类中使用受保护的字段 我缺少什么 你的标题没有意义 你的解释
  • 将国际象棋引擎连接到用 Javascript 制作的现有 GUI

    我编写了自己的用于下棋和教授国际象棋的 GUI GUI 是使用 HTML 编写的 用于外观 使用 JavaScript 来实现各个部件的行为 目前该程序不遵循任何国际象棋规则 正确遵循国际象棋规则取决于用户 这允许自由地设置非法位置或多次移
  • 检查值是否实现接口的说明

    我读过 Effective Go 和其他类似这样的问答 golang接口合规性编译类型检查 https stackoverflow com questions 17994519 golang interface compliance com
  • Pylance:“property”与“int”不兼容

    from typing extensions import Protocol class IFoo Protocol value int class Foo IFoo property def value self gt int retur

随机推荐

  • ROS::线程锁

    ROS xff1a xff1a 线程锁 boost span class token operator span mutex mutex span class token punctuation span span class token
  • 无人机智能飞行类库设计构思

    搭建无人机 智能飞行类库的主要目的就在于 xff1a 便于无人机路径规划各种算法的实施 xff0c 便于飞行仿真以及便于今后在硬件上实现算法 完整做到这些需要做三方面做工作 xff1a 一 计算几何 计算几何问题主要用于路径优化 避障等 x
  • STL教程:C++ STL快速入门

    目录 1 STL引言 2 STL是什么 xff08 STL简介 xff09 3 STL历史 4 STL组件 5 STL基本结构 6 STL 使用方法 7 STL目录 网址 xff1a STL教程 xff1a C 43 43 STL快速入门
  • vue使用sortablejs插件的时候报Sortable: `el` must be an HTMLElement

    最近因为项目需要很灵活自定义查询 xff0c 故使用了vue和element ui组件库 xff0c 其中el table需要行和列拖拽排序 故使用到了sortable插件 一 报错的排查 首先对 xff1a const tbody 61
  • 记一次Linux 4.15.0-65-generic安装Elasticsearch成功的过程

    一 xff0c 操作系统和安装的应用 xff1a 1 操作系统 xff1a Linux version 4 15 0 65 generic buildd 64 lgw01 amd64 006 gcc version 7 4 0 Ubuntu
  • [docker]笔记-镜像 管理

    1 镜像管理 docker search xxxx 查找镜像 例如查找httpd root 64 localhost docker search httpd 下载镜像 docker pull xxxx root 64 localhost d
  • quill-editor扩展的正确姿势

    一 无关的插曲 曾几何时 xff0c 风云万里 xff0c 万海桑田 耕耘于代码堆里多年 做过android移动端 xff0c 做过web端 xff0c 做过java后端和 net xff0c 也做过python数据分析 但真正扩展源码的亦
  • 导入excel时js转换时间的正确姿势

    一 基础 1 excel的日期是以1900 1 0开始计算的 xff0c 既1900 1 1就是1天 xff1b 2 js的Date是以 1970 1 1 08 00 00 开始的 xff1b excel时间换算如下 xff1a 点击常规后
  • springboot下ClassUtils.getDefaultClassLoader().getResource(“static“).getPath() 空指针异常???

    在static加个文件文件就ok xff0c 不信你看看
  • Compilation failure: Compilation failure

    有a项目和b项目 xff0c 如果a项目打包成功 xff0c b依赖a 现b打包的时候报Compilation failure Compilation failure了 xff0c 原因是a中有 span class token opera
  • mysql数据更新时变更时间自动更新

    ALTER TABLE test CHANGE startTime startTime timestamp NOT NULL ON UPDATE CURRENT TIMESTAMP DEFAULT CURRENT TIMESTAMP
  • docker、docker-compose和Portainer的安装

    一 docker安装 span class token comment 安装docker相关依赖 span yum span class token function install span y yum utils device mapp
  • vue-cli+spring boot前后端分离跨域及session丢失解决办法

    前后端分离跨域笔记 小小的唠叨前端代码后端 小小的唠叨 曾几何时 xff0c 项目开发时间很紧 xff0c 项目组很多的人即不懂vue也不大懂spring boot及mybatic的强大之处 xff0c 也没有做过前后端分离 xff0c 项
  • vue打包整合到spring boot一记

    目录 背景vue cli打包之前的配置总结 背景 前段时间 xff0c 根据需求 xff0c 要将项目烧入到芯片 xff0c 但我的擅长之处就是前后端分离开发 xff0c 因此需要前端vue开发好 xff0c 打包放到后端里面一起执行 那时
  • 小四轴编程入门教程

    小四轴编程入门教程之一 xff1a 陀螺仪和加速度计 在小四轴中 xff0c 陀螺仪是一种用于测量小四轴旋转速度的传感器 xff0c 它测量的是角速度 xff0c 是指物体在单位时间内转过的角度大小 通过测量物体在X Y Z三个轴上的角速度
  • 从0开始教你三天完成毕业设计-后端api

    目录 前言 开始 env 数据库配置文件 app controller 控制器接口api 工具类 分类表 categoryController 收藏表 collecetionController 商品表 goodController 订单表
  • ZYNQ双核通信 Linux+FreeRTOS(一)

    ZYNQ 双核通信 一 OpenAMP开发换环境搭建编译U boot编译Kernel编译设备树什么是devicetree xff1f Devicetree基础设备树属性设备树生成器 xff08 DTG xff09 Task Output P
  • ZYNQ 安装ubuntu文件系统

    ZYNQ 7020 Ubuntu16 04文件系统安装 在关于zynq openamp的章节我们已经完成了zynq 的u boot 内核 xff0c 设备树的制作 xff0c 通过XSDK完成了启动文件的创建 同样道理制作zynq7020的
  • RPMsg:协议简介

    RPMsg xff1a 协议简介 本篇文章转载于简书 xff0c 在此做个整理和备份 xff0c 方便查阅 在此感谢原博主SunnyZhou1024 RPMsg xff1a 协议简介0 起因1 AMP2 RPMsg2 1 Linux中的RP
  • GEM TSU Interface Details and IEEE 1588 Support

    GEM TSU Interface Details and IEEE 1588 Support Chapter 1 IntroductionChapter 2 GEM TSU Clock SourcePCW 中的 GEM TSU 时钟源选择