- 博客(34)
- 收藏
- 关注
原创 ZYNQ xc7z100ffg900型号SoC PS端Linux系统移植详细教程
由于项目需要被临时委派进行ZYNQ开发板ARM核的Linux系统移植,在此之前没有接触过任何ZYNQ相关的任何内容,可以说是从0开始给ZYNQ移植系统。由于该ZYNQ开发板不是商业开发板,资料不全,再加上网上对于Zynq的Linux系统移植教程不够详细(在2024.2版本下),所以只能自己一点点摸索着做,好在花了4天时间也是成功完成移植,进入了Linux系统(看完这篇文章,你就会ZYNQ上的Linux系统移植了。
2025-03-24 17:34:54
274
原创 嵌入式c语言学习记录
FILE * 指针变量标识符;FILE为大写,需要包含<stdio.h>;FILE是系统使用typedef定义出来的有关文件信息的一种结构体类型,结构中含有文件名、文件状态和文件当前位置等信息。
2024-12-12 11:32:31
532
原创 RT-Thread启动过程 :从汇编开始的启动流程
这个系列参考了《嵌入式实时操作系统RT-Thread设计与实现》,会详细介绍RT-Thread的启动流程,即是如何从零开始在开发板上运行起一个RTOS内核的。本文将会以开发板为例展开进行详细介绍。这五大部分。在这一小节中,本文将讲述通过wsl烧录RT-Thread的基本流程。并在最后讲解startup_ch32v30x.S文件的执行过程。
2024-12-12 11:31:56
1382
原创 7、抢占式调度
在这一章中有一个需要注意的地方,即由于任务切换是由系统决定的,因此对于上一个任务的上下文保存过程放在了trap_vector中,并且switch_to函数的返回方式变为mret(中断处理要求使用mret)。即调用mret时,mstatus中的MIE位会被MPIE位替换。此时需注意start.S启动代码对于mstatus寄存器的赋值,把MPIE位赋值为1即可,这样调用mret后自动开启全局中断。
2024-12-07 11:04:11
250
原创 5、RISC-V架构下的PLIC控制器及外部中断处理
这一章的中断处理,讲的是处理。在中断处理中涉及到外设PLIC外部中断控制器。以及用于开启全局中断的CSR状态寄存器mstatus和mie。
2024-12-06 10:08:34
799
原创 4、RISC-V架构下的trap处理
***原第4章为多任务,无过多新内容***/trap处理中涉及到CSR寄存器mtvec、mepc、mcause。
2024-12-06 10:08:19
456
原创 2、内存管理
首先定义程序将使用的内存区域。每个区域都可以指定起始地址、大小和访问权限。通常会定义FLASH和RAM两个区域。其中ENTRY( _start )即在指示程序入口地址。
2024-12-05 14:01:16
480
原创 1、操控UART寄存器实现输出功能
在这一章里,重点需要了解如何通过寄存器操控GPIO、UART,使得MCU通过UART总线输出字符,实现打印功能。
2024-12-04 16:26:17
1071
原创 0、从零开发一个简易RTOS系统
跟着[完结] 循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春视频走完了开发一个简易操作系统的全流程。从中学到了一个简易操作系统启动的顺序、如何编写汇编启动文件、ld链接文件的作用以及如何指导程序在mcu的ram中的布局,以及如何使用通用寄存器、外设寄存器、状态控制寄存器等。 在第 0 章 Bootstrap 中,我们需要深入理解 的工作原理,确保能够准确解析并理解 文件中每一行指令的具体作用。同时,还需掌握开发板 MCU 如何定位程序的入口地址的机制,以便更好地理
2024-12-04 11:29:44
1451
原创 Linux设备驱动中的异步通知与异步I/O学习s
的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上”中断“的概念,比较准确的称谓是”信号驱动的异步I/O“。信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。
2024-09-26 15:24:37
668
原创 Linux设备驱动中的阻塞与非阻塞I/O学习
阻塞和非阻塞I/O是访问设备的两种不同模式,驱动程序可以灵活地支持用户空间对设备的这两种访问方式。阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时并不挂起,它或者放弃,或者不停的查询,直至可以进行操作为止。
2024-09-25 14:37:49
692
原创 DMA学习
DMA是一种无需CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。DMA方式的数据传输由DMA控制器(DMAC)控制,在传输期间,CPU可以并发执行其他任务。当DMA结束后,DMAC通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序后进行处理。
2024-09-19 15:08:48
874
原创 PCI总线学习(二):PCI总线驱动
Linux设备驱动开发》中讲到,PCI只是一种总线,具体的PCI设备可以是字符设备、网络设备、USB主机控制器等,因此一个通过PCI总线与系统连接的设备的驱动至少包含两部分:PCI设备驱动和设备本身的驱动。对于这句话我的理解是,PCI驱动指实现对PCI设备的探测、移除、挂起\恢复等功能的代码部分。而设备本身的驱动指的是file_operations结构体实现的open、release、read、write等功能的代码部分。其中pci_driver的结构如下所示。其中的probe函数。
2024-09-11 16:14:56
1445
原创 PCI总线学习(一):PCI总线结构
PCI总线结构是一种树形、层次式的体系结构。。PCI桥在PCI总线结构中占据着重要的地位,它将父总线与子总线连接在一起。:用于连接CPU与PCI根总线,第1个根总线的编号为0。它是一个特殊的PCI桥设备,将树顶端的CPU与根PCI总线连接起来。:用于连接PCI主总线与次总线。PCI桥所处的PCI总线称为“主总线”(即次总线的父总线),桥设备所连接的PCI总线称为“次总线”(即主总线的子总线)。:用于连接旧的ISA总线。下图展示了CPU、PCI总线和PCI设备的连接关系,。
2024-09-11 14:37:06
1334
原创 linux开发板引脚中断编程
是指CPU在执行程序的过程中,出现了某种突发事件,使得CPU不得不暂停当前正在处理的事务,转而去处理突发事务,处理完毕后CPU又返回原程序被中断的位置继续执行。中断根据分类,又可以分为内部中断和外部中断、可屏蔽中断和不可屏蔽中断、向量中断和非向量中断。:中断源来自CPU内部(软件中断指令、溢出、除法错误等)。例如操作系统从用户态切换到内核态需借助CPU内部的软件中断。:中断源来自CPU外部,由外设提出请求。:可以通过屏蔽字被屏蔽,屏蔽后,该中断不再得到响应。:不能被屏蔽。
2024-09-05 14:10:57
1106
原创 记一次wsl启动不了的问题(已解决)
在网上搜了许久,重启电脑也没有用。后来看到说可能是存储空间不足,再去看了下,发现D盘只剩25MB了,清了下空间wsl就可以正常启动了。wsl本来用着好好的,突然就崩了。
2024-09-04 11:32:39
685
原创 USB驱动(1)——libusb获取鼠标输入数据及代码解读
学习usb驱动的难度比i2c、spi等又上升了一个台阶。因为它包含了太多内容。需要设置设备、配置、接口、端点四类描述符(),它们之间的关系可以简单概括为下图。每个设备有不同的工作模式,不同的工作模式就可以理解为对应不同的配置。每种工作配置下,又可以又很多种usb接口设备(鼠标、键盘等等)同时工作。每个接口通过其下面的不同端点与主设备通信。端点又分为输入端点、输出端点、控制端点等等。每类结构体下又有很多字段需要配置,以上还仅是usb驱动的一部分内容。USB驱动内容多到难以入手,看别人的驱动源码也不知所云。
2024-09-02 11:40:07
3011
原创 UART协议详解(工作原理+上板测试)
(Universal Asynchronous Receiver Transmitter)也称作通用异步收发器,是一种广泛应用于嵌入式领域的串行、异步、全双工通信协议。UART的应用场景非常广泛,比如上位机和下位机之间的通信、外接各种模块,比如GPS或者蓝牙模块等等。UART作为串行通信,利用一条传输线将数据按bit进行顺序传送,特点是通信线路简单,利用简单的线缆就可以实现通信,降低成本,适用于远距离通信,但传输速度较慢的场合。
2024-08-23 17:36:55
934
原创 SPI协议详解(协议+上板实测)
SPI()又名串行外围设备接口。是一种高速的、全双工、同步的通信总线。SPI总线主要应用于EEPROM,FLASH,实时时钟,AD转换器等。在芯片中只占用四根管脚,节约了芯片管脚数目也为PCB布局节省了空间。正是出于这种简单易用的特性,现在越来越多芯片上都集成了SPI技术。
2024-08-16 14:43:41
1076
原创 I2c协议详解(时序+上板实测)
I2c是一种串行通信总线,支持多主从架构。其使用两根信号线进行通信:一根时钟线SCL,一根数据线SDA。I2c将SCL处于时SDA拉低的动作作为开始信号,SCL处于时SDA拉高的动作作为结束信号;传输数据时,SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递一位数据。要求两根信号线都使用的配置,以实现所有节点SDA、SCL信号线上的线与逻辑关系。
2024-08-15 11:37:39
4370
原创 DHT11读写时序详解(时序+上板实测)
DHT11有两种,一种三线制,一种四线制。其中都包括1个VDD,1个GND,和1个DATA串行数据引脚。不同的是四线制其中一个引脚悬空。
2024-08-13 10:58:27
1547
原创 嵌入式c语言字符串处理函数学习记录
头文件:#include<string.h> 函数定义:size_t函数功能:测字符指针s指向的字符串中字符的个数,不包括‘\0’返回值:字符串中字符的个数。
2024-01-05 16:32:37
413
1
原创 嵌入式c语言内存分配,malloc、calloc、realloc学习记录
数组的长度是预先定义好的,在整个程序中,但是在实际的编程中,往往会发生这种情况,即,而无法预定。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需内存空间,也可把不再使用的空间回收再次使用。动态分配内存就是在堆区开辟空间。
2024-01-03 10:09:38
1020
原创 嵌入式c语言指针与函数学习记录
在运行程序的时候,操作系统会将虚拟内存进行分区:1、堆:在动态申请内存的时候,在堆里开辟内存。3、静态全局区:1)、未初始化的静态全局区:静态变量(定义的时候,前面加static修饰),或全局变量,没有初始化的,存在此区。2)、初始化的静态全局区:全局变量、静态变量、赋过初值的,存放在此区。5、文字常量区:存放常量的。当一个进程被创建的时候,或者程序运行的时候都会分配虚拟内存,虚拟内存和物理内存之间存在映射关系。常见的外存设备:硬盘,flash,rom,u盘,光盘,磁带。常见的内存设备:ram,DDR。
2023-12-27 14:28:25
815
原创 嵌入式c语言编译,include,define学习记录
gcc -E hello.c -o hello.i 1、预处理gcc -S hello.i -o hello.s 2、编译gcc -c hello.s -o hello.o 3、汇编gcc hello.o -o hello_elf 4、链接预编译:将.c中的头文件展开、宏展开,生成的文件是.i文件。编译:将预处理之后的.i文件生成.s汇编文件。汇编:将.s汇编文件生成.o目标文件。链接:将.o文件链接成目标文件。
2023-12-27 11:31:20
907
1
原创 《分布式系统》期末复习总结
第二章:1.分布式系统的物理模型。2.分布式系统体系结构模型。2.1、C/S,P2P两种不同结构2.2、分层模型、层次化模型3.交互、故障、安全三种基础模型4.同步、异步两种不同的分布式系统。
2023-11-17 14:24:11
948
原创 嵌入式C语言内存分区,不同变量、函数介绍学习记录
物理内存、虚拟内存。:实实在在的存储设备。:操作系统虚拟出来的内存。操作系统会在物理内存和虚拟内存之间建立一个映射关系。在32位系统下,每个进程的寻址范围是 4G,0x00000000 ~ 0xffffffff在32位系统中,,3G的用户空间和1G的内核空间,其中用户空间是当前进程所私有的,内核空间是一个系统所有的进程所公有的。在运行程序时,操作系统会将虚拟内存中的用户空间(3G)进行分区:(1)堆:在动态申请内存的时候,在堆里开辟内存。(2)栈:主要存放局部变量。
2023-11-13 11:48:32
105
原创 嵌入式C语言各关键字、类型转换、运算符优先级知识点学习记录
用于定义变量或者类型:char、short、int、long、float、double、struct、union、enum、signed、unsigned、void。字符型,用char定义的变量是字符型变量,。短整型,使用short定义的变量是短整型变量,。整型,用int定义的变量是整形变量,。长整型,用long定义的变量是长整型的,单浮点型(实数),用float定义的变量是单浮点型的实数,。双浮点型(实数),用double定义的变量是双浮点类型的实数,
2023-11-06 21:39:23
179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人