- 博客(57)
- 收藏
- 关注
原创 C语言内存管理
当C语言代码中定义一个局部变量,编译器就会在栈中给该变量分配一段空间。当局部变量消亡时,对应栈会自动释放空间。堆内存是操作系统划归给堆管理器来管理的,可以用API(malloc和free)来使用堆内存。,所以==定义局部变量时不能定义太大!==比如,int a[10000];堆内存申请时必须给定大小,如果要变只能通过realloc()函数更改。栈是一种数据结构,是一种内存管理方式,C语言用栈来保存。堆也是一种内存管理方式,特点是随时申请、释放且。,相当于一端堵死的管子,只能从一个口出入。
2025-04-19 14:22:57
300
原创 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系统进程
操作系统下的应用程序在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系统时间
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
原创 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
原创 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 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-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
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人