自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

StephenZhou

真正的男人就像孤独的 ROSHAN ,即使被伤的再深,都会再一次爬起来并且把不朽的祝福送给那个曾经伤害过他的人

  • 博客(184)
  • 资源 (13)
  • 收藏
  • 关注

原创 FPGA 路线

FPGA 路线:

2020-11-17 23:02:46 30

原创 FreeRTOS --(17)任务通知浅析

之前聊到,FreeRTOS 可以通过信号量(二值信号量和计数信号量)、队列、事件组来同步任务与任务,任务与中断;在 FreeRTOS 中,还有一个东西也可以用作任务与任务,中断与任务的同步,它叫任务通知(Task Notifications);如果我们通过信号量、队列、事件组的形式来同步,在 FreeRTOS 中,叫通过了一个Communication Object;也就是说通过了一个用于连续接收方和发送方的中间模块;FreeRTOS 的任务通知(Task Notifications),..

2020-07-21 00:03:35 214

原创 FreeRTOS --(16)资源管理之临界区

临界区的概念在任何的 SoC 都存在,比如,针对一个寄存器,基本操作为:读->改->写;在不带 OS 的系统下,普通代码希望对某个寄存器进行读->改->写,此刻,一个 IRQ 打断了这个操作,也同时对这个寄存器进行读->改->写,中断返回,后,普通代码又继续进行,这样就会导致逻辑错误;在带 OS 的情况下,不光是有 IRQ,而且存在任务切换,这样,同一个资源在 ISR 和不同任务之间修改,这造成了临界区;临界区的资源需要保护起来,临界区保护的不是代码,而是数据;.

2020-07-17 11:57:53 141

原创 FreeRTOS --(15)信号量之概述

FreeRTOS 中使用信号量来做同步,信号量可以在任务中使用作为任务与任务间的同步,也可以在中断中使用(带 FromISR 的版本)中断与任务间的同步;针对不同的应用场景,信号量分为两种:1、二值信号量;2、计数信号量;1、二值信号量1.1、Usage顾名思义,二值信号量只有两个值:0 和 1;它用于简单场景下的任务与任务、中断与任务之间的同步,比如:一个任务,在等待某个资源到位后,才能够继续执行,在得到这个资源之前,它处于阻塞状态,假如一个中断来了,给出了这个资源,那么.

2020-07-16 00:20:17 240

原创 FreeRTOS --(14)队列管理之概述

在任何的 OS 中,都需要支持任务与任务,中断与任务之间的数据传输机制,在 FreeRTOS 中,这种数据传输的方式被称之为队列(Queue);队列是一个 FIFO 模型,在创建一个队列用于数据传递的时候,需要指定队列的长度,创建完队列,便可以使用它进行数据传递;一个简单的例子:有两个任务 A 和 B,任务 A 将数据传递进队列,任务 B 作为接收端,从队列中获取数据:1、下面是创建了一个长度为 5 的队列:2、此刻任务 A 写一个数据 10 到 Queue:3、任务 A 在写一

2020-07-10 18:02:35 307

原创 FreeRTOS --(13)任务管理之空闲任务

创建完毕任务,启动调度器,任务控制,系统 SysTick 来临后判断是否需上下文切换;如果没有其他任务执行的情况下,FreeRTOS 的 Idle 任务将被调度投入运行;在启动调度器的时候,Idle 任务就被创建了,优先级为最低 0;void vTaskStartScheduler( void ){.....................xReturn = xTaskCreate( prvIdleTask, configIDLE_TAS

2020-07-07 19:24:09 346

原创 FreeRTOS --(12)任务管理之任务切换

现在创建任务(xTaskCreate)、启动调度器(vTaskStartScheduler),都分析完成了,SysTick,PendSV 中断已经使能,接下来第一个任务便可以自由的奔跑;等待下一次 SysTick 来临(1ms 后),调度器工作;1、xPortSysTickHandlerSysTick 触发后,会调用到它的 ISR 函数xPortSysTickHandler,这个函数的实现和处理器体系架构相关,定义在 port.c:void xPortSysTickHandler( v..

2020-07-07 00:57:07 159

原创 FreeRTOS --(11)任务管理之系统节拍

前面有了创建任务、启动调度器、任务控制,接下来便开始分析一个 Tick 到来之后,FreeRTOS 即将有什么行为;在启动调度器的时候,就已经配置好了 SysTick,它作为 OS 的心跳,每隔一个固定周期来一次 SysTick 中断,来驱动 OS 做事(任务调度);以 STM32 为例,定义的configTICK_RATE_HZ 为 1000,由《FreeRTOS --(9)任务管理之启动调度器》得知,系统节拍时钟周期为1ms;不同的处理器结构可能有所区别,所以他是需要移植的部分,在 p.

2020-07-06 21:16:32 141

原创 FreeRTOS --(10)任务管理之任务延时

在《FreeRTOS --(7)任务管理之入门篇》中讲过,如果有几个任务同时跑,但是又都不阻塞的话,那么最高优先级的任务将会占领整个 CPU,因为每次都会调度到它,一直处于 Ready 状态,所以呢,调度器每次都要选择优先级最高的任务来让它执行;所以,不管怎么样,任务做完自己该做的事情,就应该进入阻塞状态,等待下次该自己做任务的时候,在占领 CPU,这样既可以让 Idle 线程,在系统空闲的时候跑,也可以让让任务在合理的时间占领 CPU;之前也说过,让任务进入阻塞状态的方式有两种:1、让任务延时:

2020-07-05 20:22:19 255

原创 FreeRTOS --(9)任务管理之启动调度器

目录1、vTaskStartScheduler2、xPortStartScheduler3、vPortSetupTimerInterrupt4、prvStartFirstTask5、vPortSVCHandler在使用 FreeRTOS 的时候,一般的,先创建若干任务,但此刻任务并没有被调度起来,仅仅是创建了,如果想要真正的跑起来,那么还需要调用让调度器跑起来的函数:vTaskStartScheduler典型的用法是:xTaskCreate(.."task_1.

2020-07-01 16:05:08 234

原创 FreeRTOS --(8)任务管理之创建任务

在《FreeRTOS --(7)任务管理之入门篇》文章基本分析了任务相关的轮廓后,我们知道使用什么接口来创建一个任务、怎么去开启调度器、以及根据宏配置,选择调度器的行为;接下来我们深入到 FreeRTOS 任务创建的源码来看看一个任务是怎么被创建的(某大神说过,Read The F**king Source Code ,能用代码解决的,尽量不 BB);1、描述任务的结构在 FreeRTOS 中,使用TCB_t 来描述一个任务:/* * Task control block. A t..

2020-06-30 20:24:17 246

原创 FreeRTOS --(7)任务管理之入门篇

任务管理是操作系统中重中之重,不管什么 OS ,任务的调度管理都是核心,FreeRTOS 也是一样;在深入到 FreeRTOS 任务管理的源码之前,鄙人觉得有必要先去从全局的角度进行把握,从全局到局部,从粗线条,到细节,鄙人觉得这样方可更快的熟悉相关的内部原理;从全局来看的话,可以先梳理 FreeRTOS 关于任务相关的 APIs,支持的 Feature,以及相关的特性,这样一来,在深入到源码级分析的话,知道使用场景,便知道为何这样设计;分析基于 FreeRTOS V 10.3.1首先,Fr

2020-06-29 21:59:05 126

原创 Cortex-M3 处理器窥探

...

2020-06-28 20:50:06 209 1

原创 FreeRTOS --(6)内存管理 heap5

FreeRTOS 中的 heap 5 内存管理,相对于 heap 4《FreeRTOS --(5)内存管理 heap4》 只增加了对非连续内存区域的管理,什么叫非连续区域内存呢?比如一款芯片,它即支持了内部的 RAM,也支持了外挂 RAM,那么这两个内存就可能在地址上不是连续的,比如 RAM1、RAM2、RAM3,如下所示:针对这种情况,就可以使用 heap 5 来管理;不同于之前的 heap 管理,heap 5 引入了一个结构体来管理这些非连续的区域:typedef struct Hea

2020-06-14 22:26:49 286

原创 FreeRTOS --(5)内存管理 heap4

FreeRTOS 中的 heap 4 内存管理,可以算是 heap 2 的增强版本,在 《FreeRTOS --(3)内存管理 heap2》中,我们可以看到,每次内存分配后都会产生一个内存块,多次分配后,会产生很多内存碎片,在较为复杂的场景(需要经常动态分配和释放场景)下,几乎是无法胜任;所以就有了 heap 4,它相比 heap 2 来说,提供了相邻空闲的内存块合并的功能,一定程度上减少了内存碎片,使得释放了的内存能够再度合并称为较为大的内存块,以供有大内存块的分配场景使用;1、内存大小.

2020-06-14 14:06:52 159

原创 FreeRTOS --(4)内存管理 heap3

heap3 来说,是直接使用了 malloc 和 free 来直接替代自己的策略:

2020-06-11 00:19:20 80

原创 FreeRTOS --(3)内存管理 heap2

在《FreeRTOS --(2)内存管理 heap1》知道 heap 1 的内存管理其实只是简单的实现了内存对齐的分配策略,heap 2 的实现策略相比 heap 1 稍微复杂一点,不仅仅是提供了分配内存的接口,同时也提供了释放内存的接口;但是 heap 2 的内存分配策略中,并没有提供空闲内存的合并策略,对内存碎片没有处理;换句话来说,如果有多次的,大小各异的内存申请和释放的场景下,很可能导致很多内存碎片;1、内存大小和 heap 1 一样,用于内存管理的内存大小来自于一个大数组,数组的下标就

2020-06-11 00:17:22 127

原创 FreeRTOS --(2)内存管理 heap1

FreeRTOS 提供了5种内存堆管理方案,分别对应heap1/heap2/heap3/heap4/heap5,提供内存管理是作为 OS 的一项基本功能,FreeRTOS 根据具体的使用场景,将内存管理按需切分成为了 5 部分,以供不同的场景来针对性使用;其实库函数的 malloc 和 free 已经是提供了内存的动态管理功能,但是呢介于一下几个原因:在嵌入式系统中,它们并不总是可以使用的; 它们会占用更多宝贵的代码空间; 它们没有线程保护; 它们不具有确定性(每次调用执行的时间可...

2020-06-09 00:37:09 165

原创 FreeRTOS --(1)链表

Based On FreeRTOS KernelV10.3.11、相关文件链表结构是 OS 内部经常使用到的,FreeRTOS 自然也不例外,在深入分析各个模块的工作原理之前,首先来分析 FreeRTOS 的链表结构,和链表相关的代码被定义在:list.hlist.c2、数据结构...

2020-06-06 01:02:08 169

原创 FreeRTOS --(0)简介

FreeRTOS 是一个嵌入式实时操作系统,具有相对(相对 Linux、Windows等)较小的体积,使用精简的代码实现了简单的进程调度,内存管理,消息发送,等,常常用在一些需要支持多任务的 MCU 上;在没有 RTOS 的嵌入式小系统中,代码都跑在 while 1 中,我们称之为 “裸机”,也没有任务的概念;而 RTOS 的出现,使得可以支持多任务执行(宏观并行,微观串行),任务与任务,中断与任务,之间可以通过消息传递数据;RTOS(Real Time Operation System)实时操作系

2020-06-04 23:25:46 191

原创 ZYNQ 中断子系统

ZYNQ-7000 带双核 Cortex-A9 处理器的 7020 芯片,PS 端集成的是 GIC 中断控制器;

2020-05-13 21:24:33 133

原创 ZYNQ 时钟子系统

ZYNQ 时钟子系统...

2020-04-29 19:30:00 415 2

原创 ZYNQ 复位子系统

ZYNQ 复位子系统

2020-04-27 00:38:28 613

原创 ZYNQ 启动分析

1、简述ZYNQ 的详细介绍参考 XILINX 官方文档UG585,在了解了 ZYNQ 的基本架构组成和丰富的资源后,下一步便是分析他的启动流程,以便更好的认识 ZYNQ;关于 ZYNQ 启动方面的描述,这里我觉得涉及到几个大的方面:1、系统上电启动执行过程;2、系统复位相关流程;3、系统时钟树;上面 3 点在 UG585 Datasheet 中都分别是一个大的...

2020-04-26 19:28:48 479

原创 XILINX BMG (Block Memory Generator)

XILINX 系列的 FPGA ,如果想要做一个 RAM,有两种方式:1、使用逻辑资源组成分布式 RAM,即Distributed RAM2、使用 XILINX 专用的 Block RAM,即 BRAM前者是由 CLB 的SLICEM 的 LUT 组合而成,构成 RAM 后,可能分布在不同的地方,具有一定的延迟;后者是 Block RAM 是内嵌专用的 RAM,是 XILI...

2020-04-02 20:34:32 736

原创 Vivado 在线调试之 ILA 核

对于已经通过了功能仿真的 Verilog HDL 电路,Download 到板端后,可以通过 Vivado 的 ILA 核进行在线调试,观察波形。ILA 核相当于在线的逻辑分析仪,ISE 上叫做 Chipscope,Vivado 下叫 ILA;添加 ILA 核的方式比较简单,首先在 Vivado 集成环境中添加 ILA IP Core:1、点击 IP Catalog,搜索 ila 核,双击...

2020-03-08 23:16:50 1143 2

原创 ZYNQ 资源介绍

目录1、简述2、PS 资源2.1、应用处理器单元 APU (Application Processing Unit)2.2、存储器接口2.2.1、DDR控制器2.2.2、Q-SPI 控制器2.2.3、静态存储器控制器(Static Memory Controller, SMC)2.3、I/O 外设2.3.1、GPIO2.3.2、ETH X 22.3.3、...

2020-02-24 23:12:19 2068

原创 ZYNQ 简介

传统的嵌入式集成电路应用级芯片常见的 DSP,ARM,PowerPC,MIPS,FPGA 等,FPGA 有灵活性好,资源丰富,可反复编程(Programmable)速度快(并行)的优势。在以往的应用中,常有场景需要使用 ARM 作为主控,通过 ARM 的外设并行 RAM 类总线外挂 FPGA ,使用 FPGA 来做高速的数据采集或者运算的架构,在通信,医疗电子等等行业,这都屡见不鲜;XILI...

2020-02-19 22:24:56 2210 1

原创 Ubuntu 拓展分区,开机出现 A start job is running for dev-disk-by x2duui错误解决方案

在上一篇文章中 《VM 上扩展 Ubuntu 系统磁盘空间》提到了可以增加分区扩容,虽然这样尝试了的确是增加了,但是出现一个问题,正在工作的 Ubuntu 系统,如果你点击挂起,会非常非常的慢,等到怀疑人生,然而恢复挂起也很慢长。尝试了重启系统,启动过程异常漫长,仔细看了一下启动输出发现有一个异常:A startjob is running for dev-disk-by x2duui...

2020-02-13 19:53:33 449 1

转载 VM 上扩展 Ubuntu 系统磁盘空间

前言一般我们在安装虚拟机时都会选择默认的20G磁盘空间,但是一旦需要搭建一两个交叉编译环境后,20G的空间就无法满足了,我就是出现了这样的情况,所以也在这里建议大家,如果需要在虚拟机上搭建比较复杂的环境的话,一般给虚拟机50G的内存空间较合适。这里是我的Ubuntu系统下现在的空间大小:一旦达到97%左右,系统会警告磁盘空间不足,在我的台式机上我已经扩展过了,今天扩展我的笔记本上的虚...

2020-02-11 20:14:13 269

原创 XILINX FPGA 7系之 Carry Chains

目录0、绪论0.1、半加器0.2、全加器1、XILINX CARRY40、绪论在聊进位逻辑之前,先准备一些预备知识关于加法器(半加器和全加器)电路;0.1、半加器半加器(half adder)的功能是将两个一位二进制数相加。它具有两个输入和两个输出,两个输入分别为 A、B,代表着等待相加的两个数,输出为 Sum、Carry;Sum代表加的结果,Carry 代...

2020-01-14 23:41:38 601

转载 XILINX FPGA 7系之 Shift Register

目录一、移位寄存器二、 移位寄存器的功能与应用三、XILINX FPGA 中 LUT 中移位寄存器的复用情况一、移位寄存器SLICEM 函数发生器也可以配置为32位移位寄存器,而无需使用 slice 中可用的触发器。 以这种方式使用,每个LUT可以将串行数据延迟1到32个时钟周期。 移入D(DI1 LUT引脚)和移出Q31(MC31 LUT引脚)线路将LUT级联,以形成...

2020-01-14 19:31:28 407

原创 XILINX FPGA 7系之 Distribute RAM

XILINX FPGA 7系之 CLB/LUT可以知道 CLB 是基本的组成单元,SLICE 也是 CLB 的基本组成单元,为了更好的使用 XILINX FPGA ,有必要在深挖一下 Distribute RAM(分布式内存);XILINX 的 “ ug474_7Series_CLB.pdf” 文档的 “Ch.2 中的 Distribute RAM ”章节有对此的详细描述值得注意的是 ...

2020-01-14 17:21:14 325

原创 XILINX FPGA 7系之 CLB/LUT/FF/Multiplexers

目录1、CLB2、Slice2.1、SLICEM2.2、SLICEL2.3、SLICEL Vs SLICEM3、LUT4、FF5、Multiplexers5.1、MUX(4:1 )5.2、MUX(8:1 )5.3、MUX(16:1 )6、SummaryXilinx FPGA 的内部结构中最基本的构成便是 CLB 了,在更好的利用 Xilin...

2020-01-13 15:45:15 1152

转载 AXI4 / AXI4-Lite / AXI4-Stream

AXI 总线协议根据不同的场景,又更加的细分为了三种类型:AXIAXI-LiteAXI-Stream (也叫AXIS)完整的 AXI 总线协议涉及的内容较多,适合高速内部互联(通过 AXI Interconnet),独立的读写数据总线和独立的读写地址总线,加上 burst based 传输,使得其吞吐可以达到很高水准;之所以将 AXI 总线协议标准分为了 3 类,主要是为了针对...

2020-01-10 15:36:04 307

转载 用Gvim建立IDE编程环境 (Windows篇)-转载

转载自:LeeMonCC说明:本文是作者在完全按照著名的《手把手教你把Vim改装成一个IDE编程环境》一文,在Windows XP上用gvim建立IDE环境时所作...

2020-01-10 10:18:49 64

原创 Xilinx AXI Interconnect

目录0、绪论1、AXI Crossbar1.1、几种可以选择的Crossbar 互联结构1.1.1、Crossbar mode (Performance Optimized)1.1.2、Shared Access mode (Area optimized)2、AXI Data Width Converter3、AXI Clock Converter4、AXI Pr...

2020-01-09 15:00:17 2702 2

转载 AMBA 系列之 AHB/APB/AXI 对比

随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用。在基于IP复用的SoC设计中,片上总线设计是最关键的问题。为此,业界出现了很多片上总线标准。其中,由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。AMBA 协议的演进A...

2020-01-02 17:50:06 715

转载 AMBA 系列之 AXI 总线协议初探

目录0.绪论1.简介1.1 AXI协议特点1.2 AXI 读写架构1.3 接口和互联1.4 复位2. 信号描述2.1 全局信号2.2 写地址通道信号2.3 写数据通道信号2.4 写响应通道信号2.5 读地址通道信号2.6 读数据通道信号2.7 低功耗接口信号3. 读写传输3.1 握手过程3.2 通道信号要求3.3 通道之间握手...

2020-01-02 17:42:32 1275

原创 AMBA 系列之 APB 协议

目录1、简介2、端口说明(Ports)3、状态机(FSM)4、传输时序(Timing)4.1、Write4.1.1、Write transfer with no wait states4.1.2、Write transfer with wait states4.2、Read4.2.1、Read transfer with no wait states4.2....

2019-12-27 15:07:59 1802

USB 2.0 协议规范

USB官方的 USB 2.0 specification 协议规范,包含了协议规范,电器特性等等内容。

2019-12-02

QT 实现的串口收发 exe 文件

QT 实现的串口收发 exe 文件,实现了基本的配置和串口的收发 exe 文件

2019-09-24

用 QT 实现的串口收发程序

用 QT 实现的串口收发程序,基本功能实现,能够通过设置基本属性,打开串口并进行数据收发

2019-09-24

QT 实现的64bit十六进制与十进制相互转换工具,带 bitmap 配置显示

QT 实现的 64 bit 十六进制与十进制实时相互转换工具,带 bitmap 配置显示,方便进行寄存器位的配置

2019-05-07

Linux4.0的设备驱动开发详解(宋老师)

本书是 Linux 4.0 版本的设备驱动开发详解的书籍,宋老师出品,必是精品

2019-05-07

奔跑吧Linux

讲解 Linux Kernel 的较为新的版本的机制,其中包含了比较新的进程调度相关内容

2019-02-16

Linux设备驱动开发详解

Linux设备驱动开发详解的 pdf 文件,主要描述Linux下常用驱动原理

2019-01-30

深入理解Linux虚拟内存管理

深入理解Linux虚拟内存管理的 pdf 文件。主要讲述内存相关内容

2019-01-30

深入Linux设备驱动程序内核机制.pdf

深入Linux设备驱动程序内核机制.pdf,带目录结构的高清版本

2019-01-27

Linux内核设计与实现_第三版_中文版pdf

Linux内核设计与实现_第三版_中文版的 pdf,带目录结构

2019-01-27

USB_HID_Spec_V1.11

USB 官方的 HID 说明文档,文档中详细说明了 HID 相关的特性和描述 HID 的描述符合 Report 描述符

2018-09-06

STM32F103 的 SDIO 对应 SDCard V2.00 版本 Spec

STM32F103 的 SDIO 对应 SDCard V2.00 版本 Spec 说明

2018-09-06

STM32中文参考手册_V10

STM32中文参考手册,中文描述,详细讲解了 STM32F103xxx的基本构成以及访问接口

2018-06-07

空空如也

空空如也

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

TA关注的人 TA的粉丝

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