自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 FreeRTOS队列详解(下)

前言:本文分析一下FreeRTOS队列相关知识(下),本文分3部分讲解队列:给队列发消息、队列上锁和解锁、从队列读消息。一、向队列发送消息FreeRTOS入队函数分为任务级入队函数和中断级入队函数,任务级入队函数比中断级入队函数多了对任务阻塞时间的处理。入队由前向入队、后向入队、覆盖写入队方式,具体API如下:任务级入队函数最终调用的是:BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemT

2021-01-12 21:59:35 1441

原创 FreeRTOS队列详解(上)

前言:本文分析一下FreeRTOS任务的删除、挂起以及恢复。分别对应的API为:vTaskDelete( TaskHandle_t xTaskToDelete ) 任务删除vTaskSuspend( TaskHandle_t xTaskToSuspend ) 任务挂起vTaskResume( TaskHandle_t xTaskToResume ) 任务恢复一、vTaskDelete()源码分析1.1 vTaskDelete()中主要做了哪些事把任务从系统中删除,需要考虑内存释放、任务调度等问

2021-01-12 21:59:05 1755 1

原创 FreeRTOS任务切换——PendSV

前言:本文分析一下FreeRTOS任务切换相关内容,队列可以存储有限个数、大小固定的数据,用于任务与任务之间、任务与中断之间传消息,也称消息队列。FreeRTOS中信号量也是由队列实现的。所以熟悉队列是非常有必要的。本文分5部分讲解队列:队列简介、队列创建、队列上锁和解锁、给队列发消息、从队列读消息。一、队列简介1.1 FreeRTOS队列基本特点数据入队出队方式:队列通常采用“先进先出”(FIFO)的数据存储缓冲机制,即先入队的数据会先从队 列中被读取,FreeRTOS中也可以配置为“后进先

2021-01-12 21:58:42 4514

原创 FreeRTOS动态创建任务过程分析

前言:这一节来分析一下FreeRTOS动态创建任务,FreeRTOS创建任务常用的有两种方式,一种是静态方式,一种是动态方式,静态创建方式需要用户自己提供任务堆栈,动态创建用户只需提供堆栈大小,堆栈由内核来分配,大多数应用使用动态的方式来创建,动态创建的函数API为 xTaskCreate()。一、xTaskCreate()源码分析1.1 xTaskCreate()中主要做了哪些事xTaskCreate()源码注释如下:BaseType_t xTaskCreate( TaskFunction_t

2021-01-12 21:57:39 489

原创 FreeRTOS列表、列表项、任务控制块

前言:列表、列表项以及任务控制块是FreeRTOS内核核心的数据结构,任务控制块包含了任务的各种属性,内核任务调度则是通过操作各种列表来完成的,调度时,根据不同的状态和事件,任务控制块插入到不同的列表中,任务控制块即任务句柄。一、FreeRTOS列表和列表项1.1 双向循环链表结构列表和列表项类似于数据结构中的链表和链表节点,与双向循环链表类似。双向循环链表的节点包括数据域、前向指针、后向指针,前后指针分别指向前节点和后节点。双向循环链表初始化的时候,有一个头结点,该节点不存储实际的数据,用来标记链

2021-01-12 21:56:49 1564

原创 FreeRTOS任务相关基础知识

一、单任务系统和多任务系统单任务系统一般为裸机系统,while(1)做一个大循环,也包含一些中断,完成所有的程序逻辑处理。如果应用程序需求繁多,程序设计复杂,应考虑多任务系统。多任务系统在操作系统基础上实现,可将繁杂的应用程序“分而治之”,将大问题划分为多个小问题,由不同的任务去解决,可以认为它们是并发运行的(其实是多个任务轮转运行,每个任务执行时间很短),RTOS中有一个任务调度器决定哪个任务先运行,哪个后运行。二、FreeRTOS任务特点:在程序设计中,一个应用业务可以单独作为一个.

2021-01-12 21:56:22 538

原创 IP基础知识

IP基础知识IP相当于OSI参考模型中的第3层网络层,数据链路负责两个直连设备之间的通信,IP负责在没有直连的两个网络之间进行网络通信,解决跨越不同链路两主机之间的通信。一、IP层简介主机与节点的区别: 主机配置有IP地址,但是不具有路由功能;既配有IP 又有路由功能的设备叫“路由器”,节点是主机和路由器的统称。IP大致分为三个模块: IP寻址,路由,IP分包与组包。IP地址与MAC地址类似,标识网络中的计算机。发送端一个数据包要想成功到达最终的地址,全靠路由控制。路由控制是指将分组数据发送到最终

2021-01-11 14:20:52 818

原创 TCP/IP通信数据传输流向

TCP/IP通信数据传输流向网络中传输的数据由两部分组成:一部分是该层协议需要用到的首部,一部分是上一层传过来的数据。 首部的结构由协议具体规范详细定义。首部明确标明了协议该如何读取数据,从首部中可以了解该协议的必要信息以及所要处理的内容,例如识别上一层协议的域应该从包的哪一位开始取多少个比特等等。比如一个TCP包的数据,其在传输过程中 以太网层的数据、IP网络层的数据以及TCP传输层的数据结构分别如下图:数据传输时的单位描述有包/帧/数据包/段/消息 5种, 包是全能性术语,帧是数据链路层中包的单位

2021-01-11 14:10:25 1079

原创 TCP/IP传输层相关基础知识

TCP/IP传输层相关基础知识数据链路中MAC地址用来识别同一个链路中不同的计算机,网络层IP中的IP地址用来识别TCP/IP网络中的互联的主机和路由器。在传输层中,使用端口号识别同一台计算机中不同的应用程序。通信过程中,通过IP地址,端口号,协议号进行通信识别,缺一不可。包括源IP地址/目标IP地址/协议号(TCP or UDP ```)/源端口号/目标端口号。若有一项不同,则被认为是其他通信。以TCP通信示例,如下图所示 :端口号确定方法有两种:1.标准既定的端口号:每个应用程序都有指

2021-01-11 14:09:54 210

原创 IP协议DNS/ARP/ICMP/DHCP辅助技术

IP协议相关技术在网络通信中仅仅依靠IP是无法通信的,需要用到一些辅助技术,包括DNS/ARP/ICMP/DHCP等等技术。1. DSN:通常访问某个网络时,直接是用域名访问,如“www.baidu.com”,由于IP地址难以记忆,DNS的作用是将字符串自动转化为IP地址。DNS调查IP地址时,向域名服务器进行查询,域名服务器首先会在自己的数据库进行查找,若有该域名对应的IP地址就返回,若没有向上一层根域名服务器进行查询,直到找到指定的域名服务器,并由这个域名服务器返回想要的数据。2. ARP:

2021-01-11 14:08:56 307

原创 OSI参考模型各分层的作用

**OSI参考模型跟分层的作用**网络OSI(开放式系统和互联)参考模型包括7层:物理层:以“0”,“1”代表典雅的高低/灯光的闪灭。界定连接器和网线的规格数据链路层:互连设备之间传送和识别数据帧,如何一个以太网相连的两个节点之间的通信;网络层:将数据传送到目标地址(发包处理),主要负责寻址和路由选择(经过哪个路由传递到目标地址);传输层:起可靠传输的作用(是否有数据丢失?等)会话...

2021-01-11 14:06:44 1020

原创 FreeRTOS调度器开启分析

一. ## 标题void vTaskStartScheduler( void ){BaseType_t xReturn; /* Add the idle task at the lowest priority. */ #if( configSUPPORT_STATIC_ALLOCATION == 1 ) { StaticTask_t *pxIdleTaskTCBBuffer = NULL; StackType_t *pxIdleTaskStackBuffer = NULL; uin

2020-09-06 23:14:22 397

转载 SPI

1、 SPI简介SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PC...

2018-05-01 20:14:24 181

原创 简单的驱动程序分析

应用程序APP调用open() read() write()等函数进入到内核,这些函数是在C库中实现的,内核跟据相关属性调用系统调用sys_open(),sys_read()等,系统调用根据你打开文件的属性去找到对应的更底层的驱动程序,录入字符设备,块设备等。例如app调用open()打开LED灯,open()会一直调用到底层的LED驱动程序led_open,这中间是怎么实现的?下面以一个简单的驱...

2018-04-28 17:45:09 900

原创 Linux系统概述

在学习Linux驱动前,先了解一下Linux的整个系统结构,上层应用程序对底层硬件的操作,在中间会经历哪些过程?一、Linux系统结构图以及代码关系:用户空间占用3G,内核空间占用1G,用户空间可以有多个app(应用程序),它们可以同时调用一个内核。代码关系:Application--调用-->system call interface--调用-->kernel subsystem--...

2018-04-26 21:24:56 373

原创 Linux 内核配置及Makefile介绍

一、Linux内核源码结构Linux内核文件数目很多,除去其他CPU架构的代码,支持S3C2440、S3C2410这两款芯片的完整内核文件就有1万多个,这些文件的组织结构并不复杂,都是位于顶层目录下的17个子目录。个子目录功能如下图,最后两个目录不包含内核代码:我们常需要用到的是 arch 目录,driver目录,kernel目录。二、Linux的Makefile分析在编译内核时,内核中的哪些文件...

2018-04-23 21:21:16 452

原创 u-boot分析4:u-boot启动内核

之前分析过,在main_loop函数中,u-boot启动内核是两条语句:s = getenv("bootcmd");run_command(s, 0);查看u-boot环境变量可知:bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0即run_command(s, 0) 要执行的命令为:nand read.jffs2 0x30007...

2018-04-17 22:36:56 225

原创 u-boot分析3:第二阶段代码分析2--命令解析过程及自定义命令

上一节说到,u-boot中最重要的就是命令,那么这些命令是怎么被识别并去执行相应的动作的,这里详细分析一下。首先可以想象一下,u-boot需要完成对很多命令的响应,当用户输入一个命令时,它需要去解析识别该命令,然后调用与该命令相对应的函数(即执行相应的动作),由于命令有很多,命令与执行动作需要对应起来,所以这里应该是一个命令对应一个结构体,结构体里面至少包括两个变量:命令的名字name、命令对应函...

2018-04-15 07:13:23 216

原创 u-boot分析3:第二阶段代码分析(1)

u-boot的最终目的就是启动内核,我们围绕这个重点来分析相关代码,弄清u-boot的主要启动流程,其他的代码可以暂时先不看。下面试start_armboot函数的流程图:CPU进行一些初始化后,会调用flash_init()、nand_init()来初始化Norflash和Nandflash,这样就有能力读写Norflash和Nandflash。接着初始化环境变量:环境变量分两种1是默认的代码里...

2018-04-11 18:56:47 258

原创 u-boot分析2:u-boot启动第一阶段

u-boot第一阶段主要功能:分析cpu/arm920t/start.S跳转到reset:a.设置cpu为SVC管理模式b.关闭看门狗,不关看门狗会引起板子重启c.屏蔽所有中断d.初始化内存SDRAM,首先需要判断是从flash启动,还是通过仿真器直接从RAM启动e.设置栈、初始化时钟,设置好栈,为运行C代码做准备此时栈空间示意图如下:f.从flash拷贝代码到SDRAM,即u-boot第二阶段的...

2018-04-11 14:33:05 231

转载 u-boot分析1:Nandflash、Norflash启动

了解u-boot之前首先了解下Bootloader,简单说Bootloader就是一段小程序,它在系统上电时开始运行,初始化硬件设备,准备好软件环境,最后调用操作系统内核。u-boot全称:Universal Boot Loader,即通用Bootloader,遵循GPL条款,开放源码。支持多种嵌入式操作系统内核:Linux、NetBSD、VxWorks等支持多个处理器系列:如PowerPC、AR...

2018-04-11 14:32:22 1008

原创 使用TFTP和NFS烧写内核与根文件系统

首先U-boot已经通过JTAG下载在NAND flash了,JZ2440开发板设置成NAND flash启动,下面介绍使用TFTP和NFS烧写内核与根文件系统把整个系统跑起来。一、TFTP烧写kernel与文件系统:windows上打开TFTP32,并设置好文件目录和服务器IP通过串口在开发板上使用命令:OpenJTAG> print 查看配置信息OpenJTAG> set serv...

2018-04-04 20:31:37 1382

原创 UART,I2C通信协议分析

一 、UARTUART:通用异步收发器,用它来传输串行数据。最精简3根线连接,全双工传输数据。如图1,TxD用于发送数据,RxD用于接收数据,Gnd给双方提供参考电平。                                                                                                   图1  UART连线图数据线上以b...

2018-04-01 16:30:33 580

原创 GPIO、上拉电阻、下拉电阻

     从今天开始,跟着韦东山老师学习Linux驱动开发,努力吧!    上拉电阻、下拉电阻一般是给一个电平不确定的信号确定一个电平。    上拉电阻如图1:                                                                                                                        ...

2018-04-01 16:29:20 4638

原创 C语言按值传递、按址传递

按值传递:是把实参的值赋值给行参,相当于copy。那么对行参的修改,不会影响实参的值 。按址传递: 是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都                     指向同一个对象,因此对形参的修改会影响到实参。#include #include void malloc_memory (char *ptr , int s

2017-06-16 16:26:34 1460

原创 C语言编译过程

C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。

2015-12-06 23:50:12 206

空空如也

空空如也

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

TA关注的人

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