自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 6、RISC-V架构下的定时器中断

本章涉及到CLINT寄存器。如何通过该寄存器的值控制定时器实现中断。

2024-12-07 11:03:40 396

原创 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

原创 3、上下文切换

在这一章中了解到了程序上下文切换的详细过程。即保存通用寄存器、加载下一个线程的上下文、切换到下一个线程。

2024-12-05 14:02:01 283

原创 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

原创 Linux中的并发控制学习

名为my_mutex的互斥体并初始化它。

2024-09-23 11:48:18 806

原创 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

原创 《高级算法设计》期末复习总结

高级算法设计分析课程内容总结

2023-10-19 21:42:26 514

原创 Linux基础命令详细解释[附option参数介绍]

linux基础命令大全详解(含选项-option解释详细解释)

2023-09-24 19:26:51 832 2

原创 1、使用小熊派(BearPi-HM_Nano)驱动DHT11

使用小熊派(BearPi-HM_Nano)驱动DHT11

2022-09-09 11:29:25 1467 2

空空如也

空空如也

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

TA关注的人

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