自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ARM编译器常用的预定义宏

ARM编译器预定义了许多宏。这些宏提供有关工具链版本号和编译器选项的信息。编译器版本宏为:__ARMCC_VERSION;数字形式呈现;使用方法如下:rt_kprintf("Compiler Version: %u\r\n", __ARMCC_VERSION);优化等级宏为:__OPTIMISE_LEVEL;数字形式呈现;使用方法如下:rt_kprintf("Compiler optimization level: %u\r\n", __OPTIMISE_LEVEL);软件编译日.

2022-04-20 20:33:32 4314

原创 RT-Thread内核启动流程

一般了解一份代码大多从启动部分开始,同样这里也采用这种方式,先寻找启动的源头。RT-Thread 支持多种平台和多种编译器,而 rtthread_startup() 函数是 RT-Thread 规定的统一启动入口。一般执行顺序是:系统先从启动文件开始运行,例如,STM32平台的汇编语言编写的启动文件,然后进入 RT-Thread 的启动 rtthread_startup() ,最后进入用户入口 main()。如下图(此图是使用RT-Thread官网的图片)所示。下面我们就以开发工具使用MDK为.

2021-05-05 20:15:29 1214 1

原创 RT-Thread内核中链表介绍

不管是学习分析FreeRTOS内核,还是学习分析RT-Thread内核源码;对内核中链表的相关定义的熟悉,以及API的使用是必不可少的。因为,在内核中很多其它组件的相关API函数,都要用到进行对象的管理。本文简要介绍RT-Thread Nano内核中双向循环链表和单向链表的定义,以及API相关源码分析。1.双向循环链表介绍双向循环链表结构体定义:/** * Double List structure * 双向循环链表结构体定义 */struct rt_list_node{ s

2021-04-24 21:24:59 694

原创 RT-Thread系统内核对象介绍

RT-Thread内核采用面向对象的设计思想进行设计,系统级的基础设施都是一种内核对象,例如线程,信号量,互斥量,定时器等。内核对象分为两类:静态内核对象和动态内核对象,静态内核对象通常放在RW段和ZI段中,在系统启动后在程序中初始化;动态内核对象则是从内存堆中创建的,而后手工做初始化。静态对象会占用RAM空间,不依赖于内存堆管理器,内存分配时间确定。动态对象则依赖于内存堆管理器,运行时申请RAM空间,当对象被删除后,占用的RAM空间被释放。这两种方式各有利弊,可以根据实际环境需求选择具体使用方式。

2021-01-12 19:16:15 960

原创 STM32CubeIDE开发工具使用ulog组件无法输出float类型数据问题解决

问题现象:STM32CubeIDE开发工具,合入RT-Thread Nano系统代码;添加ulog组件,打印输出float类型数据。无法正常打印,打印字符串和整形数据均正常。原因分析:STM32CubeIDE工具为了节省资源,默认使用精简版本的libc库;而精简版本的C库,无法支持输出float类型数据。解决方案:进入“Project→Properties”;显示界面如下。按照图片中的设置完成即可!完毕!...

2021-01-11 14:48:06 624 1

原创 FreeRTOS任务基础知识

FreeRTOS实时操作系统基础知识点介绍。

2020-02-21 17:25:51 527

原创 STM32F407ZGT6芯片SysTick定时器模块介绍

本文参考资料《ARM Cortex™-M4F技术参考手册》-4.5章节SysTick Timer(STK),和4.48章节SHPRx,其中STK这个章节有SysTick的简介和寄存器的详细描述。因为SysTick是属于CM4内核的外设,有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现。所以学习SysTick的时候可以参考这两个资料,一个是文档,一个是源码。SysTick简...

2019-11-03 19:27:38 779

原创 STM32F407ZGT6芯片时钟系统模块介绍

STM32F4时钟系统的知识在《STM32F4中文参考手册》第六章复位和时钟控制章节有非常详细的讲解,网上关于时钟系统的讲解也有很多,讲不出啥特色,时钟模块是芯片非常重要的组成部分,我们必然要提到时钟系统的知识。这些知识也不是什么原创,纯粹根据官方提供的中文参考手册和自己的应用心得来总结的,如有不合理之处望大家谅解。STM32F4时钟树概述众所周知,时钟系统是CPU的脉搏,就像人的心跳一样...

2019-11-03 14:50:12 3760 1

原创 STM32F407ZGT6芯片启动模式介绍

存储器采用固定的存储器映射,代码区域起始地址为0x0000_0000(通过ICode/DCode总线访问),而数据区域起始地址为0x2000_0000(通过系统总线访问)。Cortex™-M4F CPU始终通过ICode总线获取复位向量,这意味着只有代码区域(通常为 Flash)可以提供启动空间。STM32F4xx微控制器实施一种特殊机制,可以从其它存储器(如内部SRAM)进行启动。在STM3...

2019-11-03 14:21:49 1981

转载 Linux MMC framework(2)_host controller driver

1.前言本文是Linux MMC framework的第二篇,将从驱动工程师的角度,介绍MMC host controller driver有关的知识,学习并掌握如何在MMC framework的框架下,编写MMC控制器的驱动程序。同时,通过本篇文章,我们会进一步的理解MMC、SD、SDIO等有关的基础知识。2.MMC host驱动介绍MMC的host driver,是用于驱动MMC ...

2019-01-13 15:28:19 618

转载 Linux MMC framework(1)_软件架构

1.前言由[1]中MMC、SD、SDIO的介绍可知,这三种技术都是起源于MMC技术,有很多共性,因此Linux kernel统一使用MMC framework管理所有和这三种技术有关的设备。本文将基于[1]对MMC技术的介绍,学习Linux kernel MMC framework的软件架构。2.软件架构Linux kernel的驱动框架有两个要点(尽管本站前面的文章已经多次强调,...

2019-01-13 14:58:13 674

转载 eMMC命令详解

本文主要对eMMC的command进行详细介绍,主要包含如下内容:command类型 command格式命令类型:命令类型 说明 bc 不带response的广播命令 bcr 带有response的广播命令 ac 点对点无数据传输 adtc 点对点数据传输 命令格式:如上图所示,eMMC Command由48Bits组成,各个B...

2019-01-13 13:58:07 16419

转载 eMMC工作模式

eMMC在Power On、HW Reset或者SW Reset时,Host可以触发eMMC Boot,让eMMC进入Boot Mode。在此模式下,eMMC Device会将Boot Data发送给Host,这部分内容通常为系统的启动代码,如BootLoader。如果Host没有触发Boot流程或者Boot流程完成后,eMMC Device会进入Device Identification M...

2019-01-13 12:32:57 1526

转载 eMMC总线协议

1.eMMC总线接口eMMC总线接口定义如下图所示:各个信号的描述如下:CLK:CLK信号用于从Host端输出时钟信号,进行数据传输的同步和设备运作的驱动。在一个时钟周期内,CMD和DAT0-7信号上都可以支持传输1个比特,即SDR(Single Data Rate)模式。此外,DAT0-7信号还支持配置为DDR(Double Data Rate)模式,在一个时钟周期内,可以传...

2019-01-06 19:33:14 898 2

转载 eMMC分区管理

1.分区概述eMMC标准中,将内部的Flash Memory划分为4类区域,最多可以支持8个硬件分区,如下图所示:1.1.概述一般情况下,Boot Area Partitions和RPMB Partition的容量大小通常都为4MB,部分芯片厂家也会提供配置的机会。General Purpose Partitions (GPP)则在出厂时默认不被支持,即不存在这些分区,需要用户主动...

2019-01-06 18:18:52 2419 3

转载 eMMC简介

eMMC是embedded MultiMediaCard的简称。MultiMediaCard,即MMC,是一种闪存卡(Flash Memory Card)标准,它定义了MMC的架构以及访问Flash Memory的接口和协议。而eMMC则是对MMC的一个拓展,以满足更高标准的性能、成本、体积、稳定、易用等的需求。eMMC的整体架构如下图片所示:图. eMMC整体框架eMMC内部主要...

2019-01-02 20:06:55 19267

转载 MMC/SD/SDIO介绍

1.前言熟悉Linux kernel的人都知道,kernel使用MMC subsystem统一管理MMC、SD、SDIO等设备,为什么呢?到底什么是MMC?SD和SDIO又是什么?为什么可以用MMC统称呢?在分析Linux kernel的MMC subsystem之前,有必要先介绍一些概念,以便对MMC/SD/SDIO有一个大致的了解,这就是本文的目的。2.基本概念MMC是Mult...

2019-01-02 19:31:09 965

转载 eMMC协议分析

在进行电路设计之前,必须要明白具体实现的原理,因此本文首先要研究eMMC5.0的协议,这个协议是经过电子设备工程联合委员会JEDEC制定的全球统一标准,对eMMC的具体电路的功能实现和规范进行了统一的制定。本章会对这个协议中与设计相关的协议进行研究总结,而且对该课题用到相关重要部分进行深入研究,是之后硬件电路设计的基础。eMMC设备和系统:eMMC系统有三个模块,分别是主机、eMMC设备和...

2018-12-27 19:42:05 11649 2

原创 ARM处理器的未定义指令异常处理过程分析

在前面的两篇文章中已经介绍了ARM处理器的工作模式和ARM异常中断处理流程。这篇文章我们通过代码来详细介绍ARM处理器未定义指令的异常中断处理;当发生未定义指令异常中断时,CPU进入未定义指令模式。可以通过读取CPSR寄存器的值来判定是否真的进入了未定义指令模式。开发板:tiny4412;工具链版本:gcc version 4.5.1 (ctng-1.8.1-FA)主要设置以下几个文件...

2018-12-10 20:57:18 4074

原创 ARM架构异常中断处理流程

在ARM体系中通常有以下3种方式控制程序的执行流程:在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器(PC)的值加4个字节;每执行一条Thumb指令,程序计数器寄存器(PC)的值加两个字节。整个过程是顺序执行。 通过跳转指令,程序可以跳转到特定的地址标志处执行,或者跳转到特定的子程序处执行。其中,B指令用于执行跳转操作;BL指令在执行跳转动作的同时,保存子程序的返回地址;BX指令...

2018-12-05 21:02:51 9664

原创 ARM处理器工作模式介绍

从今天开始学习ARM异常中断处理相关的知识点;首先学习ARM的工作模式。ARM处理器共有7种运行模式,如下表所示。ARM处理器的7种运行模式 处理器模式 描述 用户模式(User) 正常程序执行模式 快速中断模式(FIQ) 用于高速数据传输和通道处理 外部中断模式(IRQ) 用于通常的中断处理 特权模式(Supervisor) 供操作系统使用...

2018-12-02 20:27:59 1096

原创 ARM指令adr和ldr的区别

很多人在写简单的裸机代码或分析uboot时,常常遇到adr和ldr指令。却分不清这2者的区别,现在谈谈adr与ldr指令。先写启动代码start.S。.text.globl _start_start: ldr r0, test adr r0, test ldr r0, =test noptest: nopMakefile文件内容如下:a...

2018-12-01 15:30:01 1830

原创 tiny4412裸机程序之位置无关码

在上篇文章中,将代码的.text、.data、.rodata段重定位到了0x02026400位置处去执行点亮LED的操作。但是,在链接脚本里指定的链接地址是0x02026400,那么为什么在重定位之前的代码能够在0x02023400地址处可以开始执行?就是因为前面使用的是位置无关码。写介绍介个概念:链接地址:链接脚本里指定的,理论上程序运行时所处的地址。在编译时,编译器会根据链接地址来翻译位置...

2018-12-01 14:53:03 234

原创 tiny4412裸机程序——代码重定位

在前面介绍exynos4412芯片启动过程时,我们知道:一上电,exynos4412首先执行固化在iROM中的代码,iROM首先设置程序运行环境(比如关看门狗、关中断、关MMU、设置栈、设置栈、启动PLL等),然后根据OM引脚确定启动设备(NAND Flash/SD卡/其他),把BL1从里面读出存入iRAM的0x02021400地址处,然后开始启动BL1;BL1从SD卡适当的位置读入14K字节的数...

2018-12-01 13:14:24 262

原创 tiny4412开发板的串口介绍与操作

UART原理说明:通用异步收发器简称UART,即"Universal Asynchronous Receiver Transmitter",它用来传输串行数据:发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线上的信号,将串行收集放在缓冲区中,CPU即可读取UART获得这些数据。UART之间以全双工方式传输数据,最精简的连线...

2018-11-26 20:20:35 1927 2

原创 tiny4412开发板icache操作程序

首先,来介绍关于cache的概念。cache的作用:基于程序访问的局限性,在主存和CPU通用寄存器之间设置了一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用,这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓存存储器(Cache)。启用Cache后,CPU读取数据时,如果Ca...

2018-11-25 15:59:50 264

原创 tiny4412开发板时钟操作示例

在上一节总我们介绍了《Exynos4412芯片的时钟管理单元》,有了上一节的基础知识我们就可以写程序操作CPU的时钟了。通过操作led来感受时钟速率的变化。本文总共有三个示例,第一个是写一个LED循环点亮的程序;第二个是将iROM中设置的时钟禁止掉,观察LED变化速率;第三个就是设置CPU的时钟速率为1.4GHz,观察LED的变化速率。第一个程序很简单,有两个文件start.S和main.c。...

2018-11-24 22:10:50 765

原创 Exynos4412芯片的时钟管理单元

本章介绍Exynos4412芯片的时钟管理单元(CMU)。CMU控制锁相环(PLL)并为Exynos4412芯片中的各个IP、总线和模块产生时钟。它们还与电源管理单元(PMU)通信,以便在进入某个低功耗模式之前停止时钟,以通过时钟切换来降低功耗。1.Exynos4412芯片的时钟体系介绍对于PC机来说,CPU、内存、主板、声卡、显卡等等,这些功能部件由不同的芯片组成,在实体上是相互独立的。...

2018-11-24 09:10:55 1255

原创 Exynos4412的启动过程

做实验时我们是把bin文件烧入SD卡。是谁把这些指令从SD卡读出来执行?是固化在芯片内部ROM上的代码──它被称为iROM,iROM是厂家事先烧写在芯片上的,无源码。iROM把启动设备上特定位置处的程序读入片内内存(iRAM),并执行它。这个程序被称为BL1(Bootloader 1),BL1是三星公司提供的,无源码。BL1又把启动设备上另一个特定位置处的程序读入片内内存,并执行它。这个程...

2018-11-18 21:03:46 967

原创 tiny4412开发板GPIO试验

GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平、或者通过它们读入引脚的状态——是高电平还是低电平。三星Exynos4412,它有304个 GPIO,分为GPA0、GPA1、GPB、GPC0、GPC1等共37组。可以通过设置寄存器来确定某个引脚用于输入、输出还是其它特殊功能。比如可以设置GPC0、GPC1作...

2018-11-18 18:14:31 1601

原创 常用ARM汇编指令及ATPCS规则

在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时的初始化,进出中断时的环境保存、恢复,对性能要求非常苛刻的函数等。只在必要情况下使用汇编指令,只涉及几条汇编指令。1.相对跳转指令:b、bl这两条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存在lr寄存器中。这两条指令的可跳转范围是当前指令的前后32M:-32M~+32M。它们是位置无...

2018-11-18 10:59:45 3260 1

原创 常用的汇编指令介绍

注意:此文档会根据学习过程中遇到的ARM汇编指令,持续更新。LDR汇编指令:LDR指令的格式为:LDR{条件}  目的寄存器,<存储器地址>LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序...

2018-11-17 20:36:26 636

原创 汇编代码、机器码和存储器的关系以及数据的表示

即使使用C/C++或者其他高级语言编程,最后也会被编译工具转换为汇编代码,并最终作为机器码存储在内存、硬盘或者其他存储器上。在调试程序时,经常需要阅读它的汇编代码,以下面的汇编代码为例:2023404: e5901000 ldr r1, [r0]2023408: e3c110ff bic r1, r1, #255 ;...

2018-11-17 19:59:48 2476

原创 交叉编译工具的使用说明

写在前面的话,由于已经学习了JZ2440V3开发板的裸机程序。想检验下学习成果,所以从今天开始把以前学的知识点在tiny4412开发板上面做个检验。裸机部分学习到把uboot移植完成就结束;然后,学习内核的驱动和其他子系统框架。言归正传,现在开始学习交叉编译工具链的使用。源文件需要经过编译才能生成可执行文件。在Windows下进行开发时,只需要点几个按钮即可编译,集成开发环境(比如 Visua...

2018-11-17 11:11:06 10902 2

原创 设备树规范翻译

1.介绍为了初始化和引导计算机系统,需要各种软件组件进行交互。在将控制权交给软件(如操作系统,引导加载程序或虚拟机监控程序)之前,固件可能会执行系统硬件的低级初始化。bootloader程序或管理程序可以加载和转移控制全给操作系统。而一致的接口和约定有助于这些软件组件之间的交互。在该文档中,引导加载程序一般是指初始化系统状态并将程序执行控制器交给操作系统的软件。引导程序的示例包括:固件,boo...

2018-11-11 18:30:20 1972

原创 Linux设备树使用

本页面介绍了如何为新machine编写设备树文件。它旨在提供设备树概念的概述以及它们如何用于描述machine。有关设备树数据格式的完整技术说明,请参阅ePAPR v1.1规范。ePAPR规范比本页面介绍的基本主题包含更多详细信息,请参阅此页面以获取本页未涵盖的更高级用法。ePAPR目前正在使用Devicetree规范文档的新名称进行更新。1.基本数据格式设备树是由节点和属性组成的树型...

2018-11-05 20:14:36 542

原创 Linux和设备树

设备树数据的Linux使用模型作者:Grant Likely <[email protected]>本文介绍Linux如何使用设备树。可以在下面的网址设备树使用页面上找到设备树数据格式的概述。https://elinux.org/Device_Tree_Usage"Open Firmware Device Tree"或简称设备树(DT)是用于描述硬件的...

2018-11-04 16:18:09 546

原创 ARM Linux设备树

1.ARM设备树起源在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,很多代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data。读者若有兴趣,可以统计一下常见的s3...

2018-09-24 09:32:25 1173

原创 启动ARM架构的Linux内核条件说明

为了启动ARM Linux内核,您需要使用bootloader,它是一个在Linux内核之前运行的一小段程序。bootloader代码需要做的就是初始化CPU的各种控制器和外设,将必要的信息传递给内核,并最终调用Linux内核代码执行。事实上,bootloader的代码要完成以下基本的工作:1.设置并初始化RAM(内存);2.初始化一个串口(方便打印调试信息);3.检测机器类型(Mach...

2018-09-22 18:41:09 605

转载 Device Tree(二):基本概念

一、前言一些背景知识(例如:为何要引入Device Tree,这个机制是用来解决什么问题的)请参考引入Device Tree的原因,本文主要是介绍Device Tree的基础概念。简单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compiler),可...

2018-09-21 22:27:28 178

Keil.S32_SDK_DFP.1.2.0.pack

S32K14X系列Pack包,使用Keil时可以按照成功,方便项目开发。

2019-08-25

DDR3 SDRAM Standard_JESD79-3D

官员DDR3的详细介绍,里面有关于DDR的详细资料,时序和命令等等

2018-03-27

空空如也

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

TA关注的人

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