自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 Windows下Zynq移植CMSIS DSP库

【代码】Zynq移植CMSIS DSP库。

2025-04-22 10:22:36 167

原创 C语言内存管理

当C语言代码中定义一个局部变量,编译器就会在栈中给该变量分配一段空间。当局部变量消亡时,对应栈会自动释放空间。堆内存是操作系统划归给堆管理器来管理的,可以用API(malloc和free)来使用堆内存。,所以==定义局部变量时不能定义太大!==比如,int a[10000];堆内存申请时必须给定大小,如果要变只能通过realloc()函数更改。栈是一种数据结构,是一种内存管理方式,C语言用栈来保存。堆也是一种内存管理方式,特点是随时申请、释放且。,相当于一端堵死的管子,只能从一个口出入。

2025-04-19 14:22:57 300

原创 Linux内核定时器与中断

Linux内核提供的定时器API函数,通过这些定时器API函数我们可以完成很多要求定时的应用。

2025-04-15 10:52:30 162

原创 Linux并发与竞争

并发指的是在同一段时间内,多个任务看似同时运行的现象。竞争是指多个线程或进程争夺相同资源时发生的冲突情况。竟态条件问题:竞态条件是指多个线程或进程在的情况下访问和修改共享资源时,操作的执行顺序影响到最终结果,从而导致不确定性和错误的情况。死锁问题死锁是指两个或多个线程或进程在,导致所有参与者都无法继续执行的情况。饥饿问题饥饿是指一个线程或进程,从而无法继续执行的情况。(主要原因是系统支持抢占)

2025-04-15 10:14:52 299

原创 电路中有符号数的表示

电路中的无符号数用信号线的高低电平来表示,1表示高电平,0表示低电平。因此,用3根信号线表示无符号数6,以RTL语言表述为3’b110。

2025-04-15 09:36:41 724

原创 Linux LED驱动(gpio子系统)

gpio子系统是linux内核当中用于管理GPIO资源的一套系统,它提供了很多GPIO相关的API接口,驱动程序中使用GPIO之前需要向gpio子系统申请。gpio子系统的主要目的就是方便驱动开发者使用gpio,驱动开发者在设备树中添加gpio相关信息,然后就可以在驱动程序中使用gpio子系统提供的API函数来操作GPIO。Linux内核向驱动开发者屏蔽掉了GPIO的设置过程,极大的方便了驱动开发者使用GPIO。使用gpio子系统时,需要更改设备树。

2025-04-14 19:31:12 1342

原创 Linux LED驱动(设备树)

之前的LED驱动直接在驱动文件中定义有关寄存器物理地址,然后使用io_remap函数进行内存映射,得到对应的虚拟地址,最后操作寄存器对应的虚拟地址完成对GPIO的初始化。但也可以先在设备树文件中创建相应的设备节点,再使用设备树向Linux内核传递相关的寄存器物理地址,再使用OF函数从设备树中获取所需的属性值,完成驱动程序的编写。

2025-04-14 19:06:34 427

原创 Linux LED驱动(非设备树)

Linux驱动加载成功以后会在devices目录(\dev)下生成一个文件,应用程序通过对这个文件进行相应的操作即可实现对硬件的操作。对 32 位操作系统而言,它的寻址空间(虚拟地址空间)为 4G(2的32次方)。操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。针对 Linux 操作系统而言,最高的 1G 字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF)由内核使用,称为内核空间;

2025-04-14 16:40:18 815

原创 Linux图形化界面

桌面对于Linux系统来说,只是一个应用程序,所以是可以移植的。Linaro公司针对于半导体厂商推出的芯片,开发了ARM开发工具、Linux内核以及Linux发行版(包括Android及Ubuntu)。所以无需自己移植,可以直接使用该公司提供的Debian和Ubuntu的根文件系统。例如,

2025-04-10 17:53:59 355

原创 使用移植后的uboot、内核、设备树编译Linux系统

由于Xilinx官方提供的uboot、内核和开发板不完全匹配,所以需要用到开发板的外设时,会缺少相应的驱动,所以需要使用开发板商适配好的uboot、内核来编译Linux系统。Vivado硬件平台:正点原子Phosphor_7020内核:正点原子alientek-linux-4.14.0-xlnx-v2018.3.tar.gzuboot:正点原子alientek-uboot-2018.01-xlnx-v2018.3.tar.gz。

2025-04-10 16:10:42 229

原创 Petalinux最简开发

Petalinux工具是Xilinx推出的嵌入式Linux开发套件,包括了u-boot、Linux Kernel、device-tree、rootfs等源码和库,以及Yocto recipes,可以很方便的生成、配置、编译及自定义Linux系统。

2025-04-10 15:10:17 509

原创 Makefile快速编译

预处理,包括展开宏定义,并将包含的头文件插入到源代码中;链接,就是将多个目标文件,还有库文件链接在一起,最终生成可执行文件。.a archive,静态库文件。静态库是包含一组目标文件(.o ),可以在编译时将其直接链接到目标程序中,成为程序的一部分。.so ‌shared object,共享对象文件,也被称为动态链接库。把a.c编译成a.o,并把依赖(include目录)写入文件a.d。.i intermediate,中间文件,预处理后的文件。.$@.d是一个以.开头的隐藏文件。

2025-04-08 10:12:32 339

原创 Linux系统网络编程

第一步:规定发送和接收方法规定连接建立后由客户端主动向服务器发出1个请求数据包,让服务器收到数据包后回复客户端一个回应数据包,这就是一个通信回合整个连接的通信就是由N多个回合组成的。第二步:定义数据包格式客户端#define SERADDR "192.168.190.174" ///ifconfig看到的89101001///注册学生信息1002///检验学生信息1003///获取学生信息30///回复OK31///反复错误int age;int cmd;

2025-04-05 16:18:04 438

原创 Linux系统线程

CPU时分复用,单核心CPU可以实现宏观上的并行,以满足多任务需求。但是,进程间切换开销大,进程间通信麻烦而且效率低。解决方案就是,线程技术保留了进程技术实现多任务的特性。线程的改进就是在线程间切换和线程间通信上提升了效率,并且多线程在多核心CPU上面更有优势。

2025-04-05 15:43:36 397

原创 Linux系统高级IO

异步IO就是操作系统用软件实现的一套中断响应系统。异步IO的工作方法是:我们当前进程注册一个异步IO事件(使用signal注册一个信号SIGIO的处理函数),然后当前进程可以正常处理自己的事情,当异步事件发生后当前进程会收到一个SIGIO信号从而执行绑定的处理函数去处理这个异步事件。以下方式只能先读鼠标再读键盘!因为程序被鼠标读阻塞住了!解决方法是并发式IO!使用mmap()函数将 LCD 显存的物理地址映射到进程的虚拟地址空间。用select函数实现同时读取键盘鼠标。程序中同时读取键盘和鼠标。

2025-04-05 14:58:54 226

原创 Linux中的信号

【代码】Linux中的信号。

2025-04-05 10:59:37 332

原创 Linux系统进程

操作系统下的应用程序在main执行前也需要先执行段引导代码才能去执行main,但写应用程序时不用考虑引导代码的问题,编译连接时(准确说是链接时)由链接器将编译器中事先准备好的引导代码给链接进去,和应用程序一起构成最终的可执行程序。加载器是操作系统中的程序,当执行一个程序时(e.g., ./a.out,代码中用exec族函数来运行)加载器负责将这个程序加载到内存中去执行这个程序。

2025-04-04 20:02:20 1265

原创 Linux系统调试

proc目录下的文件大小为0,并不是一个真实的文件。proc文件系统给开发者一种调试内核的方法:通过实时的观察/proc/xxx文件,来查看内核中特定数据结构的值。在添加一个新功能的前后来对比,就可以知道这个新功能产生的影响对还是不对。/proc/cmdline: 保存uboot的环境变量。/proc/devices: Linux驱动。复杂程序:printf打印信息调试。框架体系:日志记录信息调试。

2025-04-04 09:57:30 109

原创 Linux随机数

真正的随机数是不存在的,平时用到的随机数是通过算法得到一个伪随机数序列。

2025-04-04 09:41:05 210

原创 Linux系统时间

jiffies是linux内核中的一个全局变量,用来记录以内核的节拍时间为单位时间长度的一个数值。jiffies变量开机时有一个基准值,然后内核每过一个节拍时间jiffies就会加1。一个时间节拍的时间取决于操作系统的配置,Linux系统一般是10ms或者1ms。这个时间其实就是调度时间,在内核中用HZ来记录和表示。如果HZ定义成1000难么时钟节拍就是1/HZ,也就是1ms。

2025-04-04 09:31:30 242

原创 Linux文件属性

readdir函数调用一次就会返回一个struct dirent类型的指针,这个指针指向一个结构体变量,这个结构体变量里面记录了一。Linux获取文件属性的API也是调用stat命令实现的。个目录项(所谓目录项就是目录中的一个子文件)。

2025-04-03 19:50:44 343

原创 Linux应用编程(文件IO)

Linux应用编程是指,通过调用操作系统API来实现应用程序。

2025-04-03 17:16:59 682

原创 Linux系统

隐藏文件以 . 开头,e.g. “.xxx”,可以用 ls -a 查看。

2025-04-02 17:08:15 283

原创 FPGA 以太网通信(四)网络视频传输系统

网络视频传输系统使用ov5640摄像头采集数据,通过组件UDP帧将视频数据实时传输给上位机。

2025-03-22 20:15:10 604

原创 FPGA 以太网通信(三)

UDP(User Datagram Protocol Protocol),即用户数据报协议,是一种面向无连接的传输层协议。UDP和TCP协议都属于传输层协议,在网络传输中同一 IP 服务器需要提供各种不同的服务,为了区别不同的服务,一般使用不同的端口号来区分。TCP协议常用在对数据文件完整性较高的一些场景中,如文件传输等;UDP 常用于对通讯速度有较高要求或者传输数据较少时,比如对速度要求较高的视频直播。

2025-03-21 18:16:10 516

原创 FPGA 以太网通信(二)

ARP(Address Resolution Protocol Protocol),即地址解析协议,是根据IP地址获取MAC地址的一种TCP/IP 协议。

2025-03-20 16:16:26 846

原创 FPGA 以太网通信(一)

FPGA可以通过SMI接口 配置/读取 以太网PHY芯片的寄存器,从而配置PHY芯片的工作模式,获取PHY芯片的状态信息。

2025-03-20 10:41:07 419

原创 FPGA 数字信号处理(一)定点小数计算

FPGA中不适合做浮点数运算,但有时又会涉及到小数的运算,这时就需要用到Q格式数据。

2025-03-12 17:09:27 597

原创 Vitis Soc开发

使用tcl脚本配置。

2025-01-06 14:47:15 223

原创 Zynq PS端外设(四)中断控制器

通用中断控制器是一个用于集中管理从 PS 和 PL 发送到 CPU 的中断,启用、禁用、屏蔽和优先化中断源的处理中心。所有中断源都由唯一的中断 ID 号标识,对应有它自己的可配置优先级和目标 CPU 列表。

2024-12-29 15:24:52 440

原创 Zynq PS端外设(三)GPIO

GPIO外设有4个Bank,Bank0/1通过MIO连接到PS的引脚上;Bank2/3通过EMIO连接到PL的引脚上。注意:Bank1的电平要改成GPIO寄存器。

2024-12-29 14:57:26 517

原创 Zynq PS端外设(二)SD卡控制器

SD卡共有9个引脚线,可工作在SDIO模式或者SPI模式。

2024-12-27 20:47:03 772

原创 Zynq PL端IP核(三)AXI DMA

Zynq提供了两种DMA ,一种是,通过GP口与PL端连接,另一种是,通过HP口与PS端连接。Zynq有4个HP接口,每一个HP接口都包含控制和数据FIFO,这些FIFO为大数据量突发传输提供缓冲,让HP接口成为理想的高速数据传输接口。AXI DMA IP内核在AXI4内存映射和AXI4 Stream IP接口之间提供高带宽直接储存访问,

2024-12-27 15:48:25 1336

原创 Vivado自定义IP核的封装和接口定义(三)—— 带AXI4-Full接口的IP核

AXI-Lite。

2024-12-26 09:38:01 1060

原创 Vivado自定义IP核的封装和接口定义(二)—— 带AXI4-Lite接口的IP核

编辑代码 (以呼吸灯IP核为例)编辑顶层用户代码1.1 添加用户参数1.2 添加用户端口1.3 添加用户逻辑代码修改例化代码编辑AXI4-Lite协议用户代码3.1 添加用户参数3.2 添加用户端口3.3 添加用户逻辑代码通过寄存器控制呼吸灯。验证语法IP封装可以通过component.xml打开,编辑参数可视化。

2024-12-26 09:36:08 471

原创 Vivado自定义IP核的封装和接口定义(一)

在IP核文件夹下,定义ip和if两个文件夹,ip文件夹用于存放IP核的verilog源码,if文件夹用于存放自定义接口。

2024-12-10 20:28:38 512

原创 Zynq PL端IP核(二)Video Mixer

Video Mixer IP核用于Alpha融合和多视频或图层融合,支持17个图层的融合(一个主图层和16个叠加图层),以及一个可选择的Logo图层。

2024-12-09 19:44:55 446

原创 Zynq使用VDMA实现视频流的实时传输与显示

在Zynq的图像处理系统中,一般都会采用VDMA方案,而图像传感器的视频流一般是通过Video In to AXl4-Stream转为AXl4-Stream流。从上图可以看出,传感器在HREF为高电平的时候输出图像数据,当 HREF变高后,每一个 PCLK时钟,输出一个 8位或者 10位像素数据。VDMA 可以实现AXI Stream 格式的数据流和Memory Map 格式的数据之间进行转换,在图像采集系统中,帧缓存一般设置为3,并采用动态同步锁相的模式。开发板:正点原子 领航者开发板V1。

2024-12-06 20:45:16 1006

原创 Zynq使用VDMA访问PS端DDR3显示彩条

IP 核通常可与 Video in to AXI4-Stream IP 核联用,检测传入视频的格式和时序,也可与 AXI4-Stream to Video Out IP 核联用,为下游生成输出视频时序。AXI-4 Stream to Video Out IP 核可以将 AXI4-Stream 接口信号转换成标准并行视频信号输出,该IP核需要与 AMD 视频定时控制器 (VTC) 协同工作,生成视频格式定时信号。vid_io_out -> vid_field_id:标志当前输出的是奇场还是偶场。

2024-12-05 21:27:48 645

原创 Vivado保存和读取ILA数据

注意:Windows系统下的文件路径是 " \ " 要换成 " / "

2024-10-29 20:54:29 716

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除