自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (2)
  • 收藏
  • 关注

原创 关于天干地支及其计算

富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善。

2022-12-04 21:06:44 1151 1

原创 他山之石可以攻玉

阁中帝子今何在,槛外长江空自流。

2022-10-23 16:32:50 1312 1

原创 C++big three(构造函数、拷贝构造函数,拷贝赋值函数)

一个类中只要带有指针类型的成员,就必须自己写出big three(构造函数、拷贝构造函数,拷贝赋值函数),如果没有指针类型的成员,大部分情况下可以用默认的。

2022-10-18 19:35:42 756

原创 ARM汇编基础笔记

ARMv7架构汇编语言基础整理

2022-10-11 15:40:19 656

原创 makefile编译出多个可执行文件

共有四个.cpp文件,需要编译出四个可执行文件。

2022-09-07 17:02:32 3042 1

原创 Liteos-A任务调度之任务上下文切换

任务调度要调度的就是任务所拥有的CPU资源,其中最主要的就是寄存器,包括通用寄存器和状态寄存器,操作系统刚开始启动时任务调度的代码主要是加载第一个任务,然后随着操作系统的运行需求开始运行不同的任务,即就开始了任务的切换,任务切换是任务调度的核心,它的主要工作就是保存当前任务的现场,加载新任务的现场并运行,而这部分的工作只能由汇编完成,los_dispatch.S就是承担Liteos-A任务切换的汇编源文件,它使用的是32位的ARM汇编。......

2022-08-19 17:56:51 913

原创 Liteos-A任务调度之OsTaskStackInit函数

liteos-a任务调度的任务栈初始化

2022-06-16 20:07:09 824

原创 ARM的七种工作模式介绍

一、工作模式下图有9中模式,其中在Secure和Non-Secure状态下都适用的有七种,分别是User、FIQ、IRQ、Supervisor、Abort、Undefined和System。之所以记录ARM的这些工作模式,是因为在ARM的中断和异常中,经常会有工作模式的切换,而中断和异常也是ARM中很重要的一点,所以在这里记录一下工作模式的一些概念和一些细节。其中User模式是非特权模式,其他六种都是特权模式,特权模式中的每一种模式相互之间可以通过软件操作随便切换,也可以切换到User模式下,但是U

2022-03-25 11:32:36 4899

原创 安装EDKII环境遇到的错误解决办法汇总

       在刚开始学UEFI时遇到的第一个打击人的困难就是EDKII环境的安装,按照教程来总会遇到让人看不懂的错误,今天把之前遇到的错误及解决办法总结出来。       ①在安装环境时新建的文件夹不要用中文名,以防万一。       ②关于出现C:\NASMnasm不是可执行文件的问题:&n

2021-09-26 14:34:47 1204

原创 UEFI中Handle和Protocol的关系

本文参考《UEFI原理与编程》Protocol的设计类似于C++中的类,只不过在UEFI中是用struct代替class,用函数指针模拟成员函数,并且函数指针的第一个参数必须是指向Protocol的指针——用来模拟this指针。这里只简单描述一下Protocol的概念,其他具体的不多说。而Handle和Protocol都是软件上的概念,个人认为把软件的概念和具体的硬件相结合更容易理解Handle与Protocol的关系。那Handle怎么与具体的硬件相结合呢?这就需要了解EFI_HANDLE。EFI

2021-09-26 10:45:18 1264

原创 UEFI学习——事件函数WaitForEvent和CreateEvent/CreateEventEx

本文参考戴正华《UEFI原理与编程》1.等待事件的服务WaitForEvent启动服务中的WaitForEvent服务的函数原型:/**等待Event数组内任一事件被触发 @retval EFI_SUCCESS 下表为*index的事件被触发 @retval EFI_UNSUPPORTED 当前的TPL不是TPL_APPLICATION @retval EFI_INVALID_PARAMETER 下标为*index的事件类型为EVT_

2021-09-13 10:41:02 3698

原创 读取SMBIOS第二个Type和所有Type41(根据SMBIOS 3.0 (64-bit) Entry Point)

64位的SMBIOS EPS表可以根据SMBIOS 3.x GUID (SMBIOS3_TABLE_GUID, {F2FD1544-9794-4A2C-992EE5BBCF20E394})找到,这在所有遵循SMBIOS规范的BIOS中都是一样的。 #define EFI_SMBIOS3_TABLE_GUID \{ \ 0xf2fd1544, 0x9794, 0x4a2c, {0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94} \}代码实现的功能是

2021-09-07 14:28:44 3315 7

原创 UEFI学习——使用gRT->GetVariable读取Setup选项值

先列出代码,程序的解释在后面。       代码:#include <Uefi.h>#include <Library/UefiBootServicesTableLib.h>#include <Library/UefiRuntimeServicesTableLib.h>#include <Library/DebugLib.h>#include <Universal\Driv

2021-08-30 13:50:29 6138 2

原创 UEFI学习——SMBIOS笔记

       SMBIOS是一套规范,对于符合 SMBIOS 规范的计算机,可以通过访问 SMBIOS 的结构获得系统信息,这里对其介绍不再赘述。本篇文章是将我自己对EDKII代码中SMBIOS的结构体的理解进行一个总结,并结合EDKII里的两个函数对读取SMBIOS信息的程序逻辑提供一个大概的思路。1.SMBIOS结构介绍       上面的图包含了几个独立的结

2021-08-27 14:52:45 5570 2

原创 UEFI学习——读取CMOS信息在Shell上显示时间并一直刷新

x86架构中有两种类型的IO,一种是内存映射的IO(即MMIO,Memory-mapped IO),另一种是端口映射IO(Port-mapped IO)。读取CMOS信息就是使用的端口映射IO,其中,端口0x70是用来设置CMOS中的数据地址,端口0x71是用来读取端口0x70设置的CMOS数据地址中的数据。简单的说,0x70端口写入的是数据地址,从0x71端口读取的是数据,是从0x70端口写入的地址中读取的数据。下面是从CMOS中读取系统时间,并按年/月/日 周几 时:分:秒显示,并一直刷新屏幕。.

2021-08-19 13:46:23 5898 11

原创 UEFI学习——在qemu上读取设备PCI信息

1.编写读取设备PCI信息的Application       代码参考罗斌大佬,博客地址:UEFI开发探索13 – 访问PCI/PCI-E设备1       感谢罗斌大佬的贡献,让我在学习UEFI的道路上站在了巨人的肩膀上。       代码:#include <Uefi.h>

2021-03-23 17:24:25 3625 13

原创 UEFI开发,记录第一场胜利——调用一个自己编写的protocol

大四第一个签三方的工作,BIOS的开发,第一次接触这个领域,在实习之前很好奇,也很有兴趣,但是学习BIOS在一开始注定要碰多次壁,

2021-03-17 10:37:39 2743 16

原创 Linux线程管理实验——互斥锁和条件变量

1.互斥锁基本原理       互斥锁提供了对临界资源以互斥方式进行访问的同步机制。简单来说,互斥锁类似于一个布尔变量,它只有“锁定”和“打开”两种状态,在使用临界资源时线程先申请互斥锁,如果此时互斥锁处于“打开”状态,则立刻占有该锁,将状态置为“锁定”。此时如果再有其他线程使用该临界资源时发现互斥锁处于“锁定”状态,则阻塞该线程,直到持有该互斥锁的线程释放该锁。通过这样的机制保证在使用临界资源时数据不会被另外一个线程破坏。2.条件变

2020-11-29 20:03:45 968

原创 STM32中断笔记——关于NVIC的两个问题

STM32 中断非常强大,每个外设都可以产生中断,中断也是STM32非常重要的一个内容。NVIC:嵌套向量中断控制器,属于内核外设,管理着包括内核和片上所有外设的中断相关的功能。ARM cortex_m3 内核支持 256 个中断(16 个内核+240 外部)和可编程 256 级中断优先级的设置,与其相关的中断控制和中断优先级控制寄存器(NVIC、SYSTICK 等)也都属于cortex_m3 内核的部分。STM32 采用了 cortex_m3 内核,所以这部分仍旧保留使用,但 STM32并没有使用 c

2020-11-07 10:09:06 3359

原创 STM32F10X启动文件笔记

       目前为止我都是在STM32裸机开发,而不管是裸机还是带操作系统,单片机上电后都会做一些初始化工作,所以写一篇文章记录一下。本文章参考《野火零死角玩转STM32F103》       此文章代码较多,所以重要的内容是用红色和蓝色文字写的,代码中也有对汇编操作符的注释。同时如果有新的内容,会实时更新。1.启动文件简介   &

2020-10-29 23:07:09 377

原创 Linux文件及目录学习笔记

       此文章是对Linux基础知识的简单记录,方便以后回顾,所记的知识点不是系统性的记录,整理的不足之处会实时修改。1.文件操作分类       文件操作可分为带缓冲区和不带缓冲区的文件操作,带缓冲区的文件操作快,可移植性强。        不带缓冲区的文件操作: 属于低级文件操作,需要

2020-10-27 22:09:41 273

原创 SPI协议笔记(简介)

123

2020-10-23 21:28:22 323

原创 计算机网络传输层概念及其协议

一、概念       链路层保证的是点到点的可靠传输,传输层保证端到端的可靠性。       传输层是进程之间的通信。       传输实体:在收/发两端的传输层实现对等实体通信的硬件或软件。       实现TCP协议的用

2020-08-22 06:01:44 701 1

原创 诺瓦面试(一面和二面)总结

一开始用一分钟做自我介绍,我之前对自我介绍这方面还准备了一些,准备的稿子要说完的话肯定大于一分钟,所以说的时候自己选择性删了一点,由于多练了几遍,自我介绍说的挺流畅。然后就开始问问题,都是一些基础的问题,但是有好多都不会,虽然是第一次,但是过后感觉还是学的不够,基础问题问完问项目,我讲的是双车追逐系统,项目也有点简单,但是这也是我仅有的一个完整的项目了。一面结果是没过,但是该总结还是要总结,合抱之木,生于毫末;九层之台,起于累土。一点一点的努力吧。面试问到的问题有:内存对齐、常量指针和指针常量、什么是大

2020-08-18 00:31:04 8414 9

原创 计算机网络网络层相关概念及协议

计算机网络层相关概念

2020-08-17 20:25:30 942 2

原创 计算机网络数据链路层基本概念及其可靠传输

一、一些概念1.链路和数据链路       链路:一条无源的、点到点的物理线路段,中间没有任何其他的交换结点。       数据链路:物理链路+链路控制规程形成的数据管道。2.数据链路层三个基本功能:封装成帧、透明传输、差错控制       ①封装成帧:就是在一段数据的前后分别添加首部和尾部

2020-08-13 10:49:38 3604

原创 计算机网络的一些概念及数据通信基础(物理层)

计算机网络(computer network)定义:由通信信道连接的主机和网络设备的集合,以方便用户共享资源和相互通信。主要特征:通用性,不对特定应用优化;能支持广泛、不断出现的新型应用。用途:共享信息,协同计算,共享硬件,方便通信。在计算机网络中,结点指的就是计算设备,链路指的就是物理媒体。构成网络的三种方式:直接连接(包括点到点链路,多路访问链路),网络云(通常采用分组交换技术),网络云互联。端到端原则:边缘智能,核心简单。应用程序体系结构主流模式:客户/服务器结构模式,简称C/S模式;对等

2020-08-11 11:37:23 1365

原创 I2C协议——I2C框图和I2C通信过程

1.软件模拟和硬件模拟的概念       所谓软件模拟,即直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平。如控制产生 I2C 的起始信号时,见图 24-5,先控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL线切换为低电平,这样就输出了一个标准的 I2C起始信号。    &n

2020-08-04 17:46:42 3183

原创 I2C协议——物理层和协议层

I2C协议简介       I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。1.物理层       它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个I2C

2020-08-04 11:35:25 3150

原创 STM32F10xx外设GPIO模式配置

1.高级定时器TIM1/TIM8TIM1/TIM8引脚配置GPIO配置TIM1/8CHx输入捕获通道x浮空输入TIM1/8CHx输出比较通道x推挽复用输出TIM1/8_CHxN互补输出通道x推挽复用输出TIM1/8_BKIN刹车输入浮空输入TIM1/8_ETR外部触发时钟输入浮空输入2.通用定时器TIM2/3/4/5TIM2/3/4/5引脚配置GPIO配置TIM2/3/4/5_CHx输入捕获通道x浮空输入

2020-07-22 17:20:46 1017

原创 MIPS单周期CPU设计——lw和sw指令的设计

1.lw,sw指令格式及功能指令[31:26][25:21][20:16][15:0]意义lw100011rsrtoffset从数存(数据存储器)中取数据写进寄存器sw101011rsrtoffset将寄存器中的值写入数存2.所需模块框图及指令执行过程lw指令和sw指令需要DataMem(数据存储器)来取数据或存数据。执行过程:lw:从数存中取数据写入寄存器,rega提供数存单元地址(源),regc提供寄存器地址(目的)。①IF模块将

2020-06-06 18:13:26 52084 3

原创 MIPS单周期CPU的设计——I型指令的设计

一、一些概念1.单周期CPU指令周期:CPU从内存取出一条指令并执行这条指令的时间总和。CPU周期:又称机器周期,CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义。时钟周期:通常称为节拍脉冲或T周期。一个CPU周期包含若干个时钟周期。指令周期>CPU周期>时钟周期。单周期CPU:取出并执行一条指令在一个时钟周期内完成,即一条指令用一个周期。MIPS就是一个单周期CPU。2.MIPS指令格式和通用寄存器定义MIPS所有的指令均为32位,MIPS指令的三种

2020-05-29 23:26:13 14659

原创 计算机组成原理笔记——运算方法和运算器(1)

1.机器浮点数的表示一个机器浮点数由阶码和位数及其符号位组成(尾数:用定点小数表示,给出有效数字的位数决定了浮点数的表示精度;阶码:用整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围)阶符和阶码表示的是指数部分,数符和尾数表示的是数值部分,阶符和数符都是用一位二进制表示,分别表示指数的正负和数值的正负(为1为负,为0为正)。例:表示+0.110*2^(-5)指数部分:-5,则阶符Es=1,阶码=0…0101数值部分:+0.110,则数符Ms=0,尾数=0.110…0即1 0…01

2020-05-26 08:23:22 1085

原创 STM32系统定时器(SysTick)笔记

一、简介SysTick:系统定时器,24位,只能递减,存在于内核,嵌套在NVIC中,所有的Cortex-M3内核的单片机都具有这个定时器。二、相应寄存器(这里介绍常用的几个寄存器)这里的寄存器描述如果难理解,可以结合下面的框图理解。①SysTick控制及状态寄存器(地址:0xE000_E010)位段名称类型复位值描述16COUNTFLAGR0如果上次读取本寄存器后,SysTick 已经数到了0,则该位为 1。如果读取该位,该位将自动清零2CLKSOURCE

2020-05-18 18:11:00 1200

原创 大话数据结构笔记——二叉树(基础)

一、二叉树的定义二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。1.二叉树的特点①每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。②左子树和右子树是有顺序的,次序不能任意颠倒。③即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。二叉树具有五种基本形态:空二叉树、只有一个...

2020-04-20 18:05:58 350

原创 C语言单链表的逆转

       单链表的逆转是一个基础的数据结构题,做起来不难。和解决这个问题一起写的还有做题的规矩,不能因一个问题简单就直接开始写代码,对于初学者来说,写代码前先写一个程序的大致框架是很有用的。解题思路:       创建一个单链表,遍历这个链表并且以头插...

2020-04-01 18:27:07 1372

原创 KMP模式匹配算法笔记

一直打算写KMP算法的笔记,但是对这个算法的推导过程着实有点恐惧,但是又不能停到这里不往下去学,我也不想跳过,所以决定硬着头皮认真写下去,总有一天会写完的。KMP算法的作用用是尽可能简单的方法比较两个字符串,普通的字符串匹配算法有很多步都是多余的。先看一下普通的字符串匹配算法://返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数返回0//T非空,1≤pos≤StrLength...

2020-03-06 15:41:18 224

原创 分页机制小记

分页的主要目的在于实现虚拟存储器。线性地址中任意一个页都能映射到物理地址中的任何一个页,这无疑使得内存管理变得相当灵活。

2020-03-01 19:49:31 203 6

原创 一个操作系统的实现笔记:加载Loader进入内存

一个操作系统从开机到开始运行,大致经历“引导→加载内核入内存→跳入保护模式→开始执行内核”这样一个过程。也就是说,在内核开始执行之前不但要加载内核,而且还有准备保护模式等一系列工作,如果全都交给引导扇区来做,512字节很可能是不够用的,所以,不妨把这个过程交给另外的模块来完成,我们把这个模块叫做Loader。引导扇区负责把Loader加载入内存并且把控制权交给它,其他工作放心地交给Loader来...

2020-02-20 14:47:19 581

原创 FAT12引导扇区格式及根目录区条目格式

       几乎所有的文件系统都会把磁盘划分为若干层次以方便组织和管理,这些层次包括:       ①扇区(Sector):磁盘上的最小数据单元。       ②簇(Cluster):...

2020-02-19 15:42:45 2191

吴立赛-FPGA.zip

MIPSCPU的设计,包括32条基本指令,12条扩展整数指令,中断原子指令,32条基本指令流水CPU的设计

2020-07-13

直流电机(有刷).zip

stm32直流有刷电机的原理和代码,几种直流减速电机主要参数,stm32的PWM驱动直流电机代码及硬件运行流程。

2020-04-29

空空如也

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

TA关注的人

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