- 博客(137)
- 资源 (11)
- 收藏
- 关注
原创 ARMv8-A 那些事 - 使能MMU之后的一些怪事
前几年自己写的一个OS一直是运行在STM32等Cortex-M系列处理器上的,由于我对Cortex-A系列处理器不是很了解也没有将OS移植到Cortex-A系列处理器上。后面自己学习了ARMv7A指令集的一些知识,于是就将自己写的OS移植到了ZYNQ7020芯片上,算是熟悉了OS在ARMv7A架构处理器的移植过程,后面将lwip和fatfs移植到了OS中,丰富了OS的功能。最近自己看了些ARMv8A指令集的一些知识,就考虑将OS移植到ARMv8A架构的处理器上,目前系统能够正常的运行到第一个任务
2024-12-05 22:44:43 714
原创 Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式
在设备识别模式下,Host会复位eMMC设备,验证工作电压范围和访问模式,识别eMMC设备并为总线上的eMMC设备分配相对设备地址(RCA)。在设备识别模式下,所有数据通讯都只使用命令线(CMD)。下图显示了总线模式,操作模式和设备状态之间的关系。每个eMMC设备状态都与一个总线模式和一个操作模式相关联的...
2023-11-26 17:46:36 936
原创 Linux MMC子系统 - 5.eMMC 5.1工作模式-引导模式
Host和eMMC设备之间的所有通信都由Host控制。总线上的所有通信都是以Host发送一个Command给eMMC开始的,eMMC对于收到的不同Command会做出不同的response,当然了eMMC对于收到的部分Command可以不做response。eMMC总线协议定义了5种操作工作模式,包括:引导模式(Boot mode),设备识别模式(Device identification mode),数据传输模式(Data transfer mode),中断模式(Interrupt mode)...
2023-11-19 11:08:21 1278
原创 Linux MMC子系统 - 4.eMMC 5.1常用命令说明(2)
本文对eMMC 5.1协议定义的命令做一个简单的说明,以便在使用具体的命令时有个参考。eMMC 5.1协议定义的命令可以分为11类,具体分类描述如下:Basic commands (class 0 and class 1),基本命令;Block-oriented read commands (class 2),面向块的读命令;Class 3 commands,Class 3命令;Block-oriented write commands (class 4)
2023-11-12 21:51:42 2273
原创 Linux MMC子系统 - 3.eMMC 5.1常用命令说明(1)
本文对eMMC 5.1协议定义的命令做一个简单的说明,以便在使用具体的命令时有个参考。Basic commands (class 0 and class 1),基本命令;Block-oriented read commands (class 2),面向块的读命令;Class 3 commands,Class 3命令;Block-oriented write commands (class 4),面向块的写命令...
2023-11-05 20:14:57 1872
原创 Linux MMC子系统 - 2.eMMC 5.1总线协议浅析
在eMMC总线中,可以有一个Host,多个eMMC设备。总线上的所有通信都是以Host发送一个Command给eMMC开始的,eMMC对于收到的不同Command会做出不同的response,当然了eMMC对于收到的部分Command可以不做response。Host一次只能与一个eMMC设备通信。在上电启动后,Host会为所有eMMC设备依次分配相对地址(RCA,Relative card Address)。当Host需要和某一个eMMC设备通信时,会先通过RCA选中该eMMC设备,只有...
2023-10-27 23:00:30 1694
原创 Linux MMC子系统 - 1.eMMC简介
下面首先简单的介绍了MMC,SD和SDIO,对这些名词有个概念即可。从本文开始会重点讲讲eMMC相关的内容(Linux MMC子系统eMMC 5.1协议),对eMMC相关的知识有了一定的了解之后,后续文章也会对Linux的MMC子系统做一个介绍,包括MMC子系统的初始化过程,MMC host驱动与host设备是如何匹配的,MMC host驱动的基本框架,MMC驱动和MMC卡设备是如何关联起来的,MMC子系统是如何实现块设备驱动的等等。对于MMC卡,SD卡或者SDIO接口的设备,Linux MMC子系统。
2023-10-21 11:27:22 769
原创 ARMv7-A 那些事 - 7.栈回溯浅析
在嵌入式开发过程中,经常需要对代码进行调试来解决各种各样的问题,常用的调试手段有:(1)、开发环境搭配硬件仿真器进行在线调试。优点:调试过程中能够清楚的知道各个寄存器的值以及各个变量的值,程序的执行流程也能够一目了然。缺点:板卡需要引出硬件仿真器的连接口,并且需要购买硬件仿真器。(2)、通过调试串口打印信息梳理程序的执行流程,结合代码分析问题产生的原因。
2023-10-14 11:52:01 503
原创 ARMv7-A 那些事 - 6.常用汇编指令
对于搞嵌入式驱动或者操作系统的人来说,掌握汇编语言的使用还是比较重要的,毕竟有时候在分析定位问题的时候,多多少少都会有汇编的身影。本文主要讲讲ARM指令集格式以及常用的ARM汇编指令(主要包括LDR和STR指令,LDM和STM指令,push和pop指令,MOV指令,CPS指令,MRS和MSR指令,MRC和MCR指令,其余指令暂时没列出来,用到时可以查看ARM手册进行了解)...
2023-10-07 15:08:12 576
原创 ARMv7-A 那些事 - 5.CP15协处理器
ARM架构通过支持协处理器来扩展处理器的功能。ARM架构的处理器支持最多16个协处理器,通常称为CP0~CP15。CP15:提供系统控制功能,主要用于配置MMU、TLB和Cache等功能。CP14:主要用于控制系统Debug功能。CP10、CP11:两个协处理器一起提供了对浮点运算和向量操作的支持,这两个协处理器主要用于控制和配置浮点功能和高级SIMD指令扩展。其他协处理器被ARM保留用于将来使用。本文主要说说CP15协处理器...
2023-10-01 16:16:44 473
原创 ARMv7-A 那些事 - 4.处理器模式与特权等级
对于现代操作系统,通常情况下用户的应用程序运行在用户态,操作系统内核运行在内核态。用户态的应用对于系统硬件资源的访问是受限的,内核态则能够访问所有的系统硬件资源。操作系统的用户态和内核态是根据处理器的特权等级和运行模式进行硬件隔离的,这也极大的提高了操作系统的安全性...
2023-09-23 18:17:16 273
原创 ARMv7-A 那些事 - 3.程序状态寄存器
程序状态寄存器的作用就是反映处理器的状态信息。在程序运行期间我们可以通过查看程序状态寄存器的状态位来进行程序的分支跳转处理,或者我们可以设置程序状态寄存器的模式位来改变处理器的运行模式,或者我们可以设置程序状态寄存器的中断屏蔽位来屏蔽中断。在任何时刻,我们可以访问处理器的16个寄存器(R0~R15)和当前程序状态寄存器(Current Program Status Register,CPSR)。
2023-09-16 18:11:39 537
原创 ARMv7-A 那些事 - 2.通用寄存器与流水线
世界上有很多种体系结构的处理器,比较知名的处理器体系结构有:ARM、x86、RISC-V、mips、LoongArch、PowerPC等。不论是哪一种架构的处理器,其处理器核心都会自带一定数量的寄存器,这些寄存器在处理器核心的运行过程中发挥着基础而又重要的作用。ARM体系结构是一种基于指令加载和存储的体系结构。在这种体系结构下,所有的数据处理都需要在通用寄存器中完成,而不能直接在内存中完成。
2023-09-10 19:15:11 210
原创 ARMv7-A 那些事 - 1.概述
ARM公司是一家知识产权(IP)供应商,它与一般的半导体公司最大的不同就是它不制造芯片并且不向终端用户出售芯片,而是通过转让设计方案,由合作伙伴生产出各具特色的芯片。ARM公司利用这种双赢的伙伴关系迅速成为了全球性RISC微处理器标准的缔造者。这种模式也给用户带来了巨大的好处,因为用户只需要掌握一种ARM内核结构及其开发手段,就能够使用多家公司相同ARM内核的芯片。
2023-09-03 20:39:54 152
原创 Ubuntu释放VMware虚拟磁盘未使用空间
在Windows 11中通过VMware安装Ubuntu 22.04做一些Linux相关的学习,刚安装的时候VMware虚拟磁盘空间也就6~7GB,但是没用几天,VMware虚拟磁盘空间就飙升到了20GB左右,着实吓人,下面讲讲如何释放VMware虚拟磁盘未使用空间,达到减小VMware虚拟磁盘占用空间的目的。
2023-08-26 22:54:01 682
原创 Linux-在Ubuntu搭建ftp服务器
本文将在Ubuntu 22.04上搭建ftp服务器,对于其他版本Ubuntu系统或者其他系列的Linux发行版,配置都差不多。下述内容配置好了匿名用户和Ubuntu本地用户登录ftp服务器,并能上传和删除文件。
2023-08-20 09:02:52 331
原创 C语言-const char*,char const*,char *const理解
表示的是指向常量的指针,不能通过该指针去修改指针所指向地址中的内容,但是可以修改该指针的指向。 可以通过其他普通指针对同样地址中的数据进行修改,测试例子如下:编译测试程序:gcc编译报错,提示对指向常量的指
2022-12-04 17:45:03 5459 1
原创 Fedora-14源配置
系统:Fedora-14-x86_64我这里的环境是在虚拟机中安装Fedora-14。由于Fedora-14比较老了,因此配置源以及其他一些操作就有些不一样,这里简单记录下我的配置,方便以后查找。
2022-11-26 12:18:38 1663
原创 文件传输-FTP使用简介
FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念“下载”(Download)和"上传"(Upload)。......
2022-07-30 17:31:57 6328
原创 VSCode使用 - Remote-SSH 配置说明
Remote-SSH是一个VSCode的插件,Remote-SSH可以让你使用任何带有SSH服务的远端机器作为你的开发环境。这可以大大简化各种情况下的开发和故障排除。使用了Remote-SSH插件之后...
2022-06-17 22:38:09 15455
原创 嵌入式开发利器 - 寄存器查看器(RegisterMaster)
对于搞嵌入式底层开发的工程师来说,经常会涉及到查看芯片手册,比如某个芯片的串口控制器的寄存器值,需要知道这个值对应寄存器的哪些位,微软计算器的程序员模式虽然可以查看,但是对每一位并没有直观的展示。因此就需要一个软件直观的查看寄存器值与位的关系。
2022-05-29 20:21:05 2033 6
原创 Windows - ARP 项添加失败 拒绝访问
By: Ailson JackDate: 2022.04.09个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/145.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。在Windows 10下执行命令:arp -s 192.168.1.100 00-0a-35-00-01-23会提示:ARP 项添加失败: 拒绝访问,如下图所示:这里我们可以通过下面的操作来添加ARP项。
2022-04-09 11:52:19 12382 6
原创 CPU大小端模式
By: Ailson JackDate: 2022.02.27个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/144.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。不同体系结构的CPU对于数据在内存中存放的排列顺序规定不同。数据在内存中的存储是以字节(byte)为单位的,因此对于半字(Half-Word)和字(Word)在内存中就有两种存储顺序,分别称为:大端模式(Big
2022-02-27 18:57:40 2165 1
原创 JLink V9掉固件修复(灯不亮)
JLink使用的芯片:STM32F205RC文章所需资源,请关注我的公众号,阅读公众号相应文章进行获取。1.问题描述在使用JLink v9的时候,不知道怎么回事,突然JLink v9的灯不亮了,将坏了的JL
2022-01-24 21:12:28 7717 5
原创 JLink JTAG和SWD模式引脚定义
By: Ailson JackDate: 2021.12.26个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/142.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。在平时使用JLink仿真器进行调试或者下载程序的时候,经常忘记JLink的引脚定义,索性我在这里记录一下,以便于以后忘记时进行参考。使用JLink的时候,有JTAG模式和SWD模式两种连接方式,自然的,这两种模
2021-12-26 14:05:58 4614
原创 FIFO溢出-FIFO上溢和FIFO下溢区别
By: Ailson JackDate: 2021.11.28个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/141.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。在调试芯片的某个外设的时候,如果该外设带有FIFO,那么一般情况下都有FIFO上溢和FIFO下溢的错误标志位,用于表示驱动对外设的FIFO操作是否正确,下面就是FIFO上溢和FIFO下溢对应的概念:FIFO上
2021-11-28 19:28:25 3075
原创 C语言-调试程序的可变参数宏
By: Ailson JackDate: 2021.10.29个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/140.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。在程序的开发和调试过程中,可以使用一个宏定义来代替printf输出调试信息,等程序开发完成之后,如果不需要调试信息,直接将宏定义为空就行,这样便于随时打开和关闭调试信息。这样的调试程序的宏一般是可变参数宏,因为打
2021-10-29 19:11:45 286
原创 C语言-书写长字符串时的换行方法
By: Ailson JackDate: 2021.09.26个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/139.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。在编写C程序时,如果想要打印某个字符串,而字符串的内容比较多,这就涉及到对这个长字符串进行书写换行,这里的换行并不会对最终的显示结果进行换行,只是为了阅读代码能够更加的清晰,不至于字符串的内容过长影响代码的阅读体
2021-09-26 21:13:40 11236
原创 Linux内核与驱动学习记录-字符设备驱动程序框架实验
By: Ailson JackDate: 2021.08.28个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/138.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。根据上一章《Linux内核与驱动学习记录-字符设备驱动程序框架》的内容,这一章编写了一个例程,作为实验进行说明,加深对字符设备驱动程序开发步骤的理解。实验代码如下:/** * @file chrdev_fr
2021-08-28 00:54:51 155
原创 Linux内核与驱动学习记录-字符设备驱动程序框架
By: Ailson JackDate: 2021.07.31个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/137.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。字符设备的驱动程序开发步骤大致都是差不多的,这里绘制了一张图来形象的反应字符设备驱动程序的关键步骤:我们创建一个字符设备的时候,首先要得到一个设备号,分配设备号的途径有静态分配和动态分配;拿到设备的唯一 ID
2021-07-31 21:45:44 148
原创 Linux内核与驱动学习记录-字符设备基础知识
By: Ailson JackDate: 2021.06.30个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/136.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。1.Linux设备分类按照读写存储数据方式,我们可以把Linux设备分为以下几种:字符设备、块设备和网络设备。字符设备: 指应用程序按字节/字符来读写数据的设备。它通常不支持随机存取数据。字符设备在实现时,大
2021-06-30 20:26:24 307 1
原创 Linux内核与驱动学习记录-内核模块传参和符号共享
By: Ailson JackDate: 2021.05.23个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/135.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。1.内核模块传参内核模块作为一个可拓展的动态模块,为 Linux 内核提供了灵活性,但是有时我们需要根据不同的应用场景给内核模块传递不同的参数,例如在程序中开启调试模式、设置详细输出模式以及制定与具体模块相关的
2021-05-23 20:38:26 333
原创 Linux内核与驱动学习记录-最简单的内核模块-Hello内核模块
By: Ailson JackDate: 2021.05.09个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/134.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。1.内核模块的概念因为Linux 操作系统采用了宏内核结构,宏内核的优点是执行效率非常高,但缺点也是十分明显的,一旦我们想要修改、增加内核某个功能时(如增加设备驱动程序)都需要重新编译一遍内核。为了解决这一缺点
2021-05-09 16:46:13 309
原创 程序运行时,如何输入EOF
By: Ailson JackDate: 2021.04.23个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/133.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。1.终端中如何输入EOF在C语言运行过程中,有时需要在终端手动输入EOF,其输入方法与操作系统有关。windows系统:实际上输入是在dos下面执行的,也就是运行时的那个黑底窗口。在windows下输入
2021-04-23 19:42:56 4889
原创 C语言-解决Windows cmd utf8中文乱码
By: Ailson JackDate: 2021.04.03个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/132.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。C语言向Console输出UTF-8编码的中文内容时,cmd通常会乱码而Linux的终端却不会。原因就是cmd的默认编码方式不是utf8,而Linux是。让cmd不乱码的方式只需要引入stdlib.h头文件
2021-04-03 16:05:48 2555
原创 C语言-inline关键字
By: Ailson JackDate: 2021.03.14个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/131.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。1.基本概念C语言中的inline关键字是C99标准的关键字,它的作用是将函数展开,把函数的代码复制到每一个调用该函数的地方。这样调用该函数的地方就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。
2021-03-14 12:05:09 2233
原创 C语言-宏定义中使用do {...} while(0)到底图个啥
By: Ailson JackDate: 2021.03.07个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/130.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。这篇文章摘抄自: <<Linux设备驱动开发详解(第二版)>>,在这里记录下来方便自己和其他小伙伴查阅。在 Linux 内核中,经常会看到do{} while(0)这样的语句,许多人
2021-03-07 12:06:18 298
原创 C语言-带参数宏定义易出现的隐藏bug和定义方式归纳
By: Ailson JackDate: 2021.02.26个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/129.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。宏定义尤其是带参数的宏定义,特别容易出现一些隐藏问题,因为宏定义在预处理阶段是按照定义原封不动的进行展开,此时如果展开之后涉及到运算符优先级的问题,那么隐藏bug就此出现。这里我先列举一个简单的例子,然后归
2021-02-26 20:19:13 1034 1
原创 Makefile学习与使用-一篇文章带你了解
By: Ailson JackDate: 2021.01.08个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/128.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。1.Makefile简介Makefile是和make工具一起配合使用的,用于组织管理项目源代码的编译和链接。make工具用于找出修改过的文件,根据依赖关系,找出受影响的相关文件,最后按照规则单独编译这些文件。
2021-01-08 23:50:32 209
原创 ARM Cortex-M 异常-HardFault(UsageFault) INVPC置1解决过程
By: Ailson JackDate: 2020.12.19个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/127.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。CPU:STM32F429IGT6对于其他的stm32芯片或者其他ARM Cortex-M芯片,其实解决方法都相通。建议先完整阅读了本文之后,再对照着你所遇到问题的现象进行调试。1.基础知识在ARM
2020-12-19 15:21:58 6901 2
定制UCGUI使用的汉字库
2013-09-15
AD6.9破解文件
2013-08-15
uC/OS-II V2.52版源码
2013-08-08
BORLAND C++ 3.1精简版
2013-08-07
BORLAND 3.1精简版
2013-08-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人