在pzp203上运行ad9361 no-os工程

news2024/10/7 16:20:37

0. 环境

- pzp203
- ubuntu18 + vivado2018

pzp203是一款plutosdr的国产兼容版。出厂默认是基于linux系统的,用libiio调用。软硬件兼容adalm-pluto。开发板提供网盘资料,是添加了板卡适配的。

1. hdl

1.1 准备源码

hdl
https://github.com/analogdevicesinc/hdl/releases
切换分支到2019_r1,通过Download as zip下载
hdl-2019_r1.tar.gz

放到工作区,
~/work/pzp203/ad9361os/
解压

tar -zvxf hdl-2019_r1.tar.gz

1.2 生成 vivado 工程

设置vivado环境

source /tools/Xilinx/Vivado/2018.3/settings64.sh


开始编译

cd /home/xxjianvm/work/pzp203/ad9361os/hdl-2019_r1
make fmcomms2.zed
# 如果用基于pluto的HDL,META-ADI未支持pluto,无法顺利加载ad9361,这里还是用fmcomms2的hdl



得到了vivado工程。

1.3 适配

vivado 打开工程

source /tools/Xilinx/Vivado/2018.3/settings64.sh
vivado &


Open Project -> /home/xxjianvm/work/pzp203/ad9361os/hdl-2019_r1/projects/fmcomms2/zed/fmcomms2_zed.xpr

1.3.1 修改芯片型号

PROJECT MANAGER -> Settings -> Project Settings -> General -> Project device: xc7z020clg400-1 -> OK -> Apply -> NO -> OK

更新IP

IP INTEGRATOR -> Open Block Design -> Report IP Status -> Upgrade Selected -> OK

1.3.2 适配ddr

双击 sys_ps7 -> 
    -> DDR Configuration 
        -> DDR Controller Configuration 
            -> Memory Type: DDR3 
            -> Memory Part: MT41K256M16 RE-125
            -> Effective DRAM Bus Width:    32 Bit
-> OK

1.3.3 适配ETH0,SD0,UART0,USB0

双击 sys_ps7 -> 
    -> Peripheral I/O Pins
        -> 点击位于 MIO12-MIO13 的 UART1
        -> 展开 SD0
            -> 取消勾选 Card Detect
            -> 取消勾选 Write Protect
    -> MIO Configuration
        -> Bank 0 I/O Voltage:    LVCMOS 1.8V
        -> Bank 1 I/O Voltage:    LVCMOS 1.8V
        -> 展开 I/O Peripherals
            -> 展开 GPIO
                -> 勾选 GPIO MIO
                    -> 勾选 USB0 Reset
                        -> 选择 MIO 48
-> OK

1.3.4 适配 ad9361

双击 axi_ad9361 

    -> Cmos Or Lvds N:        1
-> OK


点击 rx_clk_in、rx_frame_in、rx_data_in[11:0]、tx_clk_in、tx_frame_in、tx_data_in[11:0] -> 右键 Make External -> 删除引出引脚中的_0

修改 system_wrapper.v

    rx_clk_in_n,
    rx_clk_in_p,
    rx_data_in_n,
    rx_data_in_p,
    rx_frame_in_n,
    rx_frame_in_p,
  input rx_clk_in_n;
  input rx_clk_in_p;
  input [5:0]rx_data_in_n;
  input [5:0]rx_data_in_p;
  input rx_frame_in_n;
  input rx_frame_in_p;
  wire rx_clk_in_n;
  wire rx_clk_in_p;
  wire [5:0]rx_data_in_n;
  wire [5:0]rx_data_in_p;
  wire rx_frame_in_n;
  wire rx_frame_in_p;
        .rx_clk_in_n(rx_clk_in_n),
        .rx_clk_in_p(rx_clk_in_p),
        .rx_data_in_n(rx_data_in_n),
        .rx_data_in_p(rx_data_in_p),
        .rx_frame_in_n(rx_frame_in_n),
        .rx_frame_in_p(rx_frame_in_p),


修改为:

    rx_clk_in,
    rx_data_in,
    rx_frame_in,
  input rx_clk_in;
  input [11:0]rx_data_in;
  input rx_frame_in;
  wire rx_clk_in;
  wire [11:0]rx_data_in;
  wire rx_frame_in;
        .rx_clk_in(rx_clk_in),
        .rx_data_in(rx_data_in),
        .rx_frame_in(rx_frame_in),

把 

    tx_clk_out_n,
    tx_clk_out_p,
    tx_data_out_n,
    tx_data_out_p,
    tx_frame_out_n,
    tx_frame_out_p,
  output tx_clk_out_n;
  output tx_clk_out_p;
  output [5:0]tx_data_out_n;
  output [5:0]tx_data_out_p;
  output tx_frame_out_n;
  output tx_frame_out_p;
  wire tx_clk_out_n;
  wire tx_clk_out_p;
  wire [5:0]tx_data_out_n;
  wire [5:0]tx_data_out_p;
  wire tx_frame_out_n;
  wire tx_frame_out_p;
        .tx_clk_out_n(tx_clk_out_n),
        .tx_clk_out_p(tx_clk_out_p),
        .tx_data_out_n(tx_data_out_n),
        .tx_data_out_p(tx_data_out_p),
        .tx_frame_out_n(tx_frame_out_n),
        .tx_frame_out_p(tx_frame_out_p),


修改为:

    tx_clk_out,
    tx_data_out,
    tx_frame_out,
  output tx_clk_out;
  output [11:0]tx_data_out;
  output tx_frame_out;
  wire tx_clk_out;
  wire [11:0]tx_data_out;
  wire tx_frame_out;
        .tx_clk_out(tx_clk_out),
        .tx_data_out(tx_data_out),
        .tx_frame_out(tx_frame_out),

修改 systm_top.v

  input                   rx_clk_in_p,
  input                   rx_clk_in_n,
  input                   rx_frame_in_p,
  input                   rx_frame_in_n,
  input       [ 5:0]      rx_data_in_p,
  input       [ 5:0]      rx_data_in_n,
  output                  tx_clk_out_p,
  output                  tx_clk_out_n,
  output                  tx_frame_out_p,
  output                  tx_frame_out_n,
  output      [ 5:0]      tx_data_out_p,
  output      [ 5:0]      tx_data_out_n,

修改为:
  input                   rx_clk_in,
  input                   rx_frame_in,
  input       [ 11:0]      rx_data_in,
  output                  tx_clk_out,
  output                  tx_frame_out,
  output      [ 11:0]      tx_data_out_p,


把 

    .rx_clk_in_n (rx_clk_in_n),
    .rx_clk_in_p (rx_clk_in_p),
    .rx_data_in_n (rx_data_in_n),
    .rx_data_in_p (rx_data_in_p),
    .rx_frame_in_n (rx_frame_in_n),
    .rx_frame_in_p (rx_frame_in_p),
    .tx_clk_out_n (tx_clk_out_n),
    .tx_clk_out_p (tx_clk_out_p),
    .tx_data_out_n (tx_data_out_n),
    .tx_data_out_p (tx_data_out_p),
    .tx_frame_out_n (tx_frame_out_n),
    .tx_frame_out_p (tx_frame_out_p),


修改为:

    .rx_clk_in (rx_clk_in),
    .rx_data_in (rx_data_in),
    .rx_frame_in (rx_frame_in),
    .tx_clk_out (tx_clk_out),
    .tx_data_out (tx_data_out),
    .tx_frame_out (tx_frame_out),

并添加

  wire      [31:0]      gpio_bd;
  wire                   gpio_muxout_tx;
  wire                   gpio_muxout_rx;


不加怕影响到GPIO引脚号。
  
vivado2018还需要打开 axi_ad9361的ip,ADC_IODELAY_ENABLE 设置为0
ad_data_in.v中

  parameter   IODELAY_ENABLE = 1,


修改为:

  parameter   IODELAY_ENABLE = 0, 


并把 axi_ad9361_cmos_if.v中的 ad_data_in 都设置 .IODELAY_CTRL (0),
参考:AD-FMCOMMS3-EBZ 调试 Tuning TX/RX FAILED!,https://blog.csdn.net/Claud_Ma/article/details/120837057


 
1.3.5 适配引脚


修改引脚约束文件为以下内容,(编辑文件 Sources -> Constrants -> constrs_1 -> system_constr.xdc):

# constraints
# ad9361

set_property  -dict {PACKAGE_PIN  P18  IOSTANDARD LVCMOS18} [get_ports gpio_en_agc]                       ; 
set_property  -dict {PACKAGE_PIN  W19  IOSTANDARD LVCMOS18} [get_ports gpio_resetb]                       ; 
set_property -dict {PACKAGE_PIN P15     IOSTANDARD LVCMOS18} [get_ports gpio_sync]                        ;

set_property  -dict {PACKAGE_PIN  V8  IOSTANDARD LVCMOS18} [get_ports gpio_ctl[0]]                       ; 
set_property  -dict {PACKAGE_PIN  W8  IOSTANDARD LVCMOS18} [get_ports gpio_ctl[1]]                       ; 
set_property  -dict {PACKAGE_PIN  W10 IOSTANDARD LVCMOS18} [get_ports gpio_ctl[2]]                       ; 
set_property  -dict {PACKAGE_PIN  W9  IOSTANDARD LVCMOS18} [get_ports gpio_ctl[3]]                       ; 
set_property  -dict {PACKAGE_PIN  U7  IOSTANDARD LVCMOS18} [get_ports gpio_status[0]]                    ; 
set_property  -dict {PACKAGE_PIN  V7  IOSTANDARD LVCMOS18} [get_ports gpio_status[1]]                    ; 
set_property  -dict {PACKAGE_PIN  T9  IOSTANDARD LVCMOS18} [get_ports gpio_status[2]]                    ; 
set_property  -dict {PACKAGE_PIN  U10 IOSTANDARD LVCMOS18} [get_ports gpio_status[3]]                    ; 
set_property  -dict {PACKAGE_PIN  Y7  IOSTANDARD LVCMOS18} [get_ports gpio_status[4]]                    ; 
set_property  -dict {PACKAGE_PIN  Y6  IOSTANDARD LVCMOS18} [get_ports gpio_status[5]]                    ; 
set_property  -dict {PACKAGE_PIN  Y9  IOSTANDARD LVCMOS18} [get_ports gpio_status[6]]                    ; 
set_property  -dict {PACKAGE_PIN  Y8  IOSTANDARD LVCMOS18} [get_ports gpio_status[7]]                    ; 

set_property  -dict {PACKAGE_PIN  N18  IOSTANDARD LVCMOS18} [get_ports rx_clk_in]       ; 
set_property  -dict {PACKAGE_PIN  R16  IOSTANDARD LVCMOS18} [get_ports rx_frame_in]     ; 
set_property  -dict {PACKAGE_PIN  V17  IOSTANDARD LVCMOS18} [get_ports rx_data_in[1]]   ; 
set_property  -dict {PACKAGE_PIN  V18  IOSTANDARD LVCMOS18} [get_ports rx_data_in[0]]   ; 
set_property  -dict {PACKAGE_PIN  Y18  IOSTANDARD LVCMOS18} [get_ports rx_data_in[3]]   ; 
set_property  -dict {PACKAGE_PIN  Y19  IOSTANDARD LVCMOS18} [get_ports rx_data_in[2]]   ; 
set_property  -dict {PACKAGE_PIN  T17  IOSTANDARD LVCMOS18} [get_ports rx_data_in[5]]   ; 
set_property  -dict {PACKAGE_PIN  R18  IOSTANDARD LVCMOS18} [get_ports rx_data_in[4]]   ; 
set_property  -dict {PACKAGE_PIN  V20  IOSTANDARD LVCMOS18} [get_ports rx_data_in[7]]   ; 
set_property  -dict {PACKAGE_PIN  W20  IOSTANDARD LVCMOS18} [get_ports rx_data_in[6]]   ; 
set_property  -dict {PACKAGE_PIN  T20  IOSTANDARD LVCMOS18} [get_ports rx_data_in[9]]   ; 
set_property  -dict {PACKAGE_PIN  U20  IOSTANDARD LVCMOS18} [get_ports rx_data_in[8]]   ; 
set_property  -dict {PACKAGE_PIN  V16  IOSTANDARD LVCMOS18} [get_ports rx_data_in[11]]   ; 
set_property  -dict {PACKAGE_PIN  W16  IOSTANDARD LVCMOS18} [get_ports rx_data_in[10]]   ; 

set_property  -dict {PACKAGE_PIN  U14  IOSTANDARD LVCMOS18}  [get_ports tx_clk_out]                      ; 
set_property  -dict {PACKAGE_PIN  V15  IOSTANDARD LVCMOS18}  [get_ports tx_frame_out]                    ; 
set_property  -dict {PACKAGE_PIN  P14  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[1]]                  ; 
set_property  -dict {PACKAGE_PIN  R14  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[0]]                  ; 
set_property  -dict {PACKAGE_PIN  V12  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[3]]                  ; 
set_property  -dict {PACKAGE_PIN  W13  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[2]]                  ; 
set_property  -dict {PACKAGE_PIN  W14  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[5]]                  ; 
set_property  -dict {PACKAGE_PIN  Y14  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[4]]                  ; 
set_property  -dict {PACKAGE_PIN  T14  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[7]]                  ; 
set_property  -dict {PACKAGE_PIN  T15  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[6]]                  ; 
set_property  -dict {PACKAGE_PIN  Y16  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[9]]                  ; 
set_property  -dict {PACKAGE_PIN  Y17  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[8]]                  ; 
set_property  -dict {PACKAGE_PIN  T16  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[11]]                  ; 
set_property  -dict {PACKAGE_PIN  U17  IOSTANDARD LVCMOS18}  [get_ports tx_data_out[10]]                  ; 


set_property  -dict {PACKAGE_PIN  P16  IOSTANDARD LVCMOS18} [get_ports txnrx]                             ; 
set_property  -dict {PACKAGE_PIN  N17  IOSTANDARD LVCMOS18} [get_ports enable]                            ; 


set_property  -dict {PACKAGE_PIN  T10  IOSTANDARD LVCMOS18  PULLTYPE PULLUP} [get_ports spi_csn]          ; 
set_property  -dict {PACKAGE_PIN  T11  IOSTANDARD LVCMOS18} [get_ports spi_clk]                           ; 
set_property  -dict {PACKAGE_PIN  T12  IOSTANDARD LVCMOS18} [get_ports spi_mosi]                          ; 
set_property  -dict {PACKAGE_PIN  U12  IOSTANDARD LVCMOS18} [get_ports spi_miso]                          ; 

# spi pmod JA1
set_property  -dict {PACKAGE_PIN W11 IOSTANDARD LVCMOS18} [get_ports pl_spi_clk_o]                        ; 
set_property  -dict {PACKAGE_PIN U9  IOSTANDARD LVCMOS18} [get_ports pl_spi_miso]                         ; 
set_property  -dict {PACKAGE_PIN U8  IOSTANDARD LVCMOS18} [get_ports pl_spi_mosi]                         ; 
set_property  -dict {PACKAGE_PIN T5  IOSTANDARD LVCMOS18} [get_ports iic_scl]                             ; 
set_property  -dict {PACKAGE_PIN U5  IOSTANDARD LVCMOS18} [get_ports iic_sda]                             ; 


# clocks
create_clock -name rx_clk -period  16.27 [get_ports rx_clk_in]

修改引脚约束文件(编辑文件 Sources -> Constrants -> constrs_1 -> zed_system_constr.xdc):
#只留下以下内容:

# Define SPI clock
#create_clock -name spi0_clk      -period 40   [get_pins -hier */EMIOSPI0SCLKO]
#create_clock -name spi1_clk      -period 40   [get_pins -hier */EMIOSPI1SCLKO]


修改 system_top.v。
注释掉端口: 

//  inout       [31:0]      gpio_bd,

//  output                  hdmi_out_clk,
//  output                  hdmi_vsync,
//  output                  hdmi_hsync,
//  output                  hdmi_data_e,
//  output      [15:0]      hdmi_data,

//  output                  i2s_mclk,
//  output                  i2s_bclk,
//  output                  i2s_lrclk,
//  output                  i2s_sdata_out,
//  input                   i2s_sdata_in,

//  output                  spdif,

//  inout                   iic_scl,
//  inout                   iic_sda,
//  inout       [ 1:0]      iic_mux_scl,
//  inout       [ 1:0]      iic_mux_sda,

//  input                   otg_vbusoc,

//  inout                   gpio_muxout_tx,
//  inout                   gpio_muxout_rx,
//  output                  spi_udc_csn_tx,
//  output                  spi_udc_csn_rx,
//  output                  spi_udc_sclk,
//  output                  spi_udc_data

//   ad_iobuf #(.DATA_WIDTH(2)) i_iobuf_iic_scl (
//    .dio_t ({iic_mux_scl_t_s,iic_mux_scl_t_s}),
//    .dio_i (iic_mux_scl_o_s),
//    .dio_o (iic_mux_scl_i_s),
//    .dio_p (iic_mux_scl));

//   ad_iobuf #(.DATA_WIDTH(2)) i_iobuf_iic_sda (
//    .dio_t ({iic_mux_sda_t_s,iic_mux_sda_t_s}),
//    .dio_i (iic_mux_sda_o_s),
//    .dio_o (iic_mux_sda_i_s),
//    .dio_p (iic_mux_sda));


修改 system_wrapper.v

//  IOBUF iic_fmc_scl_iobuf
//       (.I(iic_fmc_scl_o),
//        .IO(iic_fmc_scl_io),
//        .O(iic_fmc_scl_i),
//        .T(iic_fmc_scl_t));
//  IOBUF iic_fmc_sda_iobuf
//       (.I(iic_fmc_sda_o),
//        .IO(iic_fmc_sda_io),
//        .O(iic_fmc_sda_i),
//        .T(iic_fmc_sda_t));
    


1.3.6 xadc(ad9363的noos工程,和ad9361的区别是需要取消注释:#define AXI_ADC_NOT_PRESENT)

创建一个 xadc
Diagram -> + -> XADC Wizard -> 

双击 xadc_wiz_0 -> 
    -> Basic 
        -> Interface Options -> AXI4Lite
        -> Startup Channel Selection -> Channel Sequencer
        -> Timing Mode: Continuous Mode
        -> DRP Timing Options 
            -> DCLK 100M
    -> ADC Setup
        -> Sequencer Mode: Continuous
    -> Alarms 
        -> 全部取消勾选
    -> Channel Sequencer
        -> 勾选 TEMPERATURE
        -> 勾选 VCCINT
        -> 勾选 VCCAUX
        -> 勾选 VCCBRAM
        -> 勾选 VCCPINT
        -> 勾选 VCCPAUX
        -> 勾选 VCCDDRO
        -> 勾选 VP/VN
-> OK

连线
Run Connection Automation -> OK
       

 
1.4 编译


Run Synthesis
Run Implementation
Generate Bitstream

1.5 导出 hdf

Vivado -> File -> Export -> Export Hardware -> 
-> Include bitstream -> OK

Vivado -> File -> Launch SDK -> OK 


得到 
/home/xxjianvm/work/pzp203/ad9361os/hdl-2019_r1/projects/pluto/pluto.sdk/system_top_hw_platform_0/system.hdf

2. no-os sdk

2.1 hello

File -> New -> Application Project
    -> Project name:    ad9361_test
    -> Finish

编译

调试

Debug As -> Launch on Hardware (system debugger)
    Debug Configuration -> Target Setup
        -> 勾选 Reset entire system
        -> 勾选 Program FPGA

板子记得调到JTAG模式。

串口权限

ls /dev/ttyUSB*
sudo chmod 666 /dev/ttyUSB0

永久修改 

whoami


该用户添加至dialout用户组,因为tty设备是属于dialout用户组

sudo usermod -aG dialout xxjianvm

看到SDK Terminal打印
hello world

2.2 添加 ad9361 驱动


拷贝源码

~/work/zynq_dev/ad9361noos/no-OS-2019_R1/ad9361/sw
~/work/zynq_dev/ad9361noos/no-OS-2019_R1/ad9361/sw/console_commands
~/work/zynq_dev/ad9361noos/no-OS-2019_R1/ad9361/sw/platform_xilinx


内的源文件(*.c,*.h)拷贝到

~/work/pzp203/ad9361os/hdl-2019_r1/projects/fmcomms2/zed/fmcomms2_zed.sdk/ad9361noos/src


至于platform.c和platform.h,不覆盖源文件,把源码添加到各自的文件内。

删除 hello_world.c

2.3 修改源码

打开 command.c

#include "../ad9361_api.h"


修改为

#include "ad9361_api.h"

打开 config.h
取消注释:

#define CONSOLE_COMMANDS
#define XILINX_PLATFORM
#define AXI_ADC_NOT_PRESENT


编译调试下载。

2.4 用串口命令发送

help?

参考:
 

[1]windows 下AD9361的 no-os master 工程搭建,https://blog.csdn.net/weixin_37728585/article/details/104835364
[2]https://wiki.analog.com/resources/fpga/docs/hdl
[3]https://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/software/no-os-setup
[4]https://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/software/baremetal
[5]https://ez.analog.com/rf/wide-band-rf-transceivers/tes-gui-and-api-software-ad9371-ad9375/f/q-a/80764/how-to-use-ad9361-no-os-setup

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

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

相关文章

力扣162-寻找峰值, test ok

题目 代码实现 #include<iostream> #include<vector> using namespace std;class Solution { public:int findPeakElement(vector<int>& nums) {int len nums.size();int left 0, right len - 1, mid;while (left < right) {mid left (right -…

基于Java的大学计算机课程管理平台(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 实验课程档案模块2.2 实验资源模块2.3 学生实验模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 实验课程档案表3.2.2 实验资源表3.2.3 学生实验表 四、系统展示五、核心代码5.1 一键生成实验5.2 提交实验5.3 批阅实…

修改NLog配置文件参数的方法

目录 一、背景 二、NLog配置文件 三、C#代码 四、验证结果 ​ 五、总结 一、背景 最近项目中要用到NLog记录日志&#xff0c;有一个要求是可以灵活地修改日志文件的存放位置&#xff0c;琢磨了一小会&#xff0c;发现可以使用XML文件的形式修改文件的参数&#xff0c;现将…

实现兼容性良好的前端页面开发

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【LLM加速】注意力优化(基于位置/内容的稀疏注意力 | flashattention)

note &#xff08;1&#xff09;近似注意力&#xff1a; Routing Transformer采用K-means 聚类方法&#xff0c;针对Query和Key进行聚类&#xff0c;类中心向量集合为 { μ i } i 1 k \left\{\boldsymbol{\mu}_i\right\}_{i1}^k {μi​}i1k​ &#xff0c;其中k 是类中心的…

源于一区| 改善性能的5种高效而小众的变异策略,一键调用 (Matlab)

基于群体的优化算法在达到迭代后期时种群多样性往往会速降&#xff0c;进化将陷入停滞&#xff0c;而许多算法本身并没有突变机制&#xff0c;一旦受到局部最优值的约束&#xff0c;就很难摆脱这些约束。它还将减少种群多样性&#xff0c;减缓收敛速度。 变异策略可以增加种群…

2025武忠祥考研数学,视频百度网盘+基础全程课程PDF

“得数学者的天下”&#xff0c;25考研首先要开始的就是数学复习&#xff0c;而数学复习首先要开始的必然是高数&#xff01; 很多同学选择了跟着武忠祥老师学习高数&#xff0c;但是具体要怎么学&#xff1f;用什么书&#xff1f;怎么刷题&#xff1f;快来看看以 下的武忠祥…

GenAI开源公司汇总

主要分类如下&#xff1a; 1. 基础模型&#xff1a;这些是机器学习和AI的核心模型提供商&#xff0c;它们提供基础的算法和技术支持。 2. 模型部署与推断&#xff1a;提供云服务和计算资源&#xff0c;帮助用户部署和运行AI模型。 3. 开发者工具&#xff1a;支持AI/ML的开发…

【01】htmlcssgit

01-前端干货-html&css 防脱发神器 一图胜千言 使用border-box控制尺寸更加直观,因此,很多网站都会加入下面的代码 * {margin: 0;padding: 0;box-sizing: border-box; }颜色的 alpha 通道 颜色的 alpha 通道标识了色彩的透明度,它是一个 0~1 之间的取值,0 标识完全…

开发指南013-国际化-后台部分

平台底层做了国际化处理。开发时候根据项目性质&#xff0c;决定是否采用国际化&#xff0c;但是底层所需资源必须包含&#xff08;一些底层例如登录校验都做了对应处理&#xff09;。平台先支持中文简体、中文繁体、英文、日文&#xff0c;必要时可以随时扩展其他语言。 国际化…

单片机FLASH深度解析和编程实践(上)

本篇文章主要针对单片机FLASH编程和FLASH基本原理进行学习分享。以STM32单片机作为实例进行编程实训。 关于FLASH操作的相关寄存器及编程&#xff0c;大家可以参考下一篇文章: 单片机FLASH深度解析和编程实践&#xff08;下&#xff09;-CSDN博客 目录 一、STM32编程方式 二、…

Linux批量注释

1.注释行 1.按ctrlv进入块选择模式 &#xff0c;然后上下键选中需要注释的行 2.按shifti(也就是大写I) 然后输入// 或 # 3.按ESC键 2.取消注释行 1.按ctrlv进入块选择模式&#xff0c; 然后上下键选中需要取消注释的行 2.然后按d

QT C++ QButtonGroup应用

//QT 中&#xff0c;按钮数量比较少&#xff0c;可以分别用各按钮的信号和槽处理。 //当按钮数量较多时&#xff0c;用QButtonGroup可以实现共用一个槽函数&#xff0c;批量处理&#xff0c;减少垃圾代码&#xff0c; //减少出错。 //开发平台&#xff1a;win10QT6.2.4 MSVC…

面向控制台编程?Java的GUI开发

记得之前刚开始学习Java&#xff0c;按部就班去阅读《Java核心技术》这本书的时候&#xff0c;总是听别人提起&#xff0c;java swing那一章不用看了。然后直到对着控制台编程了半年&#xff0c;回来捡起了Swing图形界面&#xff0c;跟着网上搞了坦克大战的游戏&#xff0c;总觉…

【蓝桥杯选拔赛真题38】C++判断数字 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C判断数字 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C判断数字 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 给定一个正整数N(100≤N<100000)…

从零开始搭建游戏服务器 第二节 Actor模型与应用

目录 复习本节内容正文什么是Actor模型如何应用创建Actor基类创建RootActor创建AkkaContext创建ConnectActorManager和ConnectActor生成actor并发送消息给它 课后作业结尾 复习 上一节我们使用gradle构建了一个多模块系统。 并且在登录服启动了Netty服务&#xff0c;监听confi…

字符串的模式匹配算法

一、朴素模式匹配算法 二、KMP算法 三、KMP求Next数组 四、KMP求NextVal数组

Nacos与Eureka的使用与区别

Nacos与Eureka的使用与区别 单体架构&#xff1a;优点缺点 分布式架构需要考虑的问题&#xff1a;微服务企业需求 认识SpringCloud服务的拆分与远程调用微服务调用方式 Eureka提供者和消费者架构搭建Eureka服务注册服务发现 Ribbon负载均衡饥饿加载总结 Nacos注册中心Nacos安装…

Task-balanced distillation for object detection用于

Task-balanced distillation for object detection用于目标检测的任务平衡蒸馏 摘要 主流的目标检测器通常由分类和回归两个子任务组成&#xff0c;由两个并行头部实现。这种经典的设计范式不可避免的导致分类得分和定位质量&#xff08;IOU&#xff09;之间的空间分布不一致…

鸿蒙开发实现弹幕功能

鸿蒙开发实现弹幕功能如下&#xff1a; 弹幕轮播组件&#xff1a;BannerScroll import type { IDanMuInfoList, IDanMuInfoItem } from ../model/DanMuData //定义组件 Component export default struct BannerScroll {//Watch 用来监视状态数据的变化&#xff0c;包括&#…