自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (7)
  • 收藏
  • 关注

原创 ARMV7-M 的栈空间

通常,寄存器R4~R8(V1~V5),R10(V7)和R11(V8)被用来保持常规的局部变量。通常,寄存器R4~R8(V1~V5),R10(V7)和R11(V8)被用来存储局部变量。栈的生长方式为:向下生长(即:栈底高地址,栈顶低地址),栈顶地址存放在SP(R13)寄存器中。栈的实现方式为,向下生长,当前栈顶指针存放在SP(R13)寄存器中,通常栈空间由栈底和栈长度决定,但是应用程序不保证SP指针在它俩之间。子程序返回后,必须保证下列寄存器的值,与刚进入该函数时相同:R4~R8,R10,R11和SP。

2024-07-15 22:31:08 181

原创 C程序设计——整数的二进制表示

十进制整数,我们从胎教就开始学,它所有的数字由十个字符:0,1,2,3,4,5,6,7,8,9 再加上 “+”,“-”构成;它的加法法则是逢十进一。这里要强调一下,十进制中只需要0~9 就能表示所有的数,“十”只需要用1和0两个字符来表示,比如十进制数 +654 和 -654,分别可以用如下方式拆开。

2024-07-12 22:18:47 168

原创 ARMV7-M 的例外和启动流程

我个人见过的硬件设计,系统上电 全都伴随着复位,因此 ARMV7-M 上电启动后,会触发复位例外,内核也许会装模作样的现场保护(也可能做了特殊处理,装都不装一下),然后到中断向量里取得 Reset 例外的入口地址,放入程序计数器(PC),然后取指,程序就运行起来了。ARMV7-M 的例外处理流程是:如果例外无法屏蔽(非屏蔽中断)或者没有屏蔽(可屏蔽中断),例外触发后,首先进行现场保护,然后根据例外编号到中断向量里找到相应中断入口地址,放入PC寄存器。修改 VTOR的值,就可以改变中断向量的值。

2024-07-11 22:18:45 185

原创 C程序设计——第一章:数据

为了研究方便,计算机科学把计算机分为若干层,当然分层的方法有很多种,每个人、每个教材都会从不同的角度,划出不同的层次。存储和运算器被抽象为一个整体:“对象”。其余部分,对程序员透明存储抽象为数据。运算器抽象为对数据操作。其他部分(如:通用寄存器、协处理器等)对程序员透明。C语言运算器地址抽象为操作码。剩余部分(如:存储、通用寄存器、协处理器等)抽象为地址和操作数本身就是二进制数据:运算器抽象为地址。剩余部分(如:存储、通用寄存器、协处理器等)抽象为地址和操作数。

2024-07-10 21:41:48 355

原创 ARMV7-M 的两个栈顶寄存器

在“线程模式”下,R13对应的物理寄存器,由 CONTROL.SPSEL 决定,当 CONTROL.SPSEL == 0 时,使用MSP;栈顶指针(SP),分为主要栈寄存器和进程栈寄存器。当前的栈依赖运行模式,在线程模式下由CONTROL.SPSEL 来决定,复位完成后默认使用 PSP。由于ARMV7-M复位后运行在“线程模式”下,且 CONTROL.SPSEL == 0,因此,ARMV7-M复位后R13对应的物理寄存器是 MSP。),因而此时,R13对应的物理寄存器是MSP。

2024-06-30 22:53:47 199

原创 ARMV7-M 的工作模式和特权等级

以上是说:线程模式(Thread mode)是ARMV7-M 的复位后的运行模式。线程模式又分为“用户等级”(直译“无特权级”,unprivileged)和“有特权级”(privileged)。线程模式下可以使用SVC指令,来触发 SVCall 例外,该例外能将运行模式改为“管理者模式”(Hander mode);由上表可以知道,只有当线程模式下且CONTROL.nPRIV == 0时,ARM内核处于“无特权级”。CONTROL.nPRIV 用来配置,线程模式下内核的特权等级。

2024-06-25 22:39:01 315

原创 ARMV7-M 核心寄存器的约定用法

R0~R1:函数返回时,存放函数返回值。当返回值的长度小于32位时,放在R0中,当返回值的长度超过32位不超过64位时,第32位放在R0,高32位放在R1。R9(SB、TR)、R11(FP)、R12(IP),看起来好像也有约定的用法,但是没太看懂要怎么用,如果有这方面的专家,欢迎留言指教。当C去调用一个汇编函数时,也一样,C会把参数放到R0~R3,函数返回后读取R0和R1来获取返回值。R13(SP):栈顶寄存器,指向栈顶元素的地址(此处要注意:是栈顶元素,不是栈顶元素的下一个)剩下的寄存器,没有约定用法。

2024-06-24 21:52:03 226

原创 ARMV7 CortexM 协处理器

ARMV7一共定义了编号0到15,共16个协处理器,分别命名为CP0到CP15。CP8到CP15为ARM保留使用;CP0到CP7为各厂家自定义。协处理器CP10和CP11用于 ARMV7-M的浮点扩展。一个支持浮点的ARMV7-M核心,应能访问CP10和CP11。所以,由于ARMV7-M 没有CP14,因此ARMV7-M 不会有CACHE,也不会有性能监控、MMC等等。的 ARMV7-M 有协处理器 CP10 和CP11。浮点 ARMV7-M 没有协处理器。

2024-06-23 22:13:50 97

原创 ARMV7的通用寄存器(核心寄存器、Core Register)

单就通用寄存器而言,可以分为两类:CortexA和CortexR是一类;CortexM是另一类。ARMV7 分为三类:CortexA、CortexR和CortexM。图1 CortexA和CortexR 的通用寄存器。图2 CortexM的通用寄存器。

2024-06-20 22:22:06 206

原创 我教闺女学编程——冒泡法排序

学习编程,排序肯定是逃不过的,排序中冒泡法排序最好理解,为了让孩子理解冒泡法排序,我用扑克牌给孩子设计了一个排序的小游戏,让孩子感性的理解冒泡法排序。我教闺女学编程——冒泡法排序。

2024-06-20 21:47:18 136

原创 我教闺女学编程——之图形变量到字母变量

很明显,这里用一个空心的三角形来代替未知数,把一个求方程的运算,巧妙的转化成了“填空”,而且孩子的汉语拼音已经很熟练了,让孩子理解用字母表示未知数,就只剩一层窗户纸了。我趁热打铁:“刚才那个题目 △ + 5 = 6里的三角形,我如果换成字母‘s’,用字母s来代替三角形,可不可以呀?突然这么一转折,孩子的第一个反应是,“s”不是空心的,所以不能换。在二年级上学期,一个不经意的早晨,送孩子上学的路上,我问孩子:“△ + 5 = 6,△等于多少呀?我又问,“sān 的第一个字母是什么呀?孩子回答:“sān”

2024-06-09 22:16:23 140

原创 内核入门——4 龙芯架构——4.2 ~ 4.

本文,包括《龙芯架构参考手册》,在介绍中断、例外时,还会用到一个概念,就是“指令的PC值”。唯一能确定的是进入例外、中断后,“指令的PC值”所指向的指令,并没有执行,例外、中断返回后,需要重新取指。由于流水线结构的存在,这个“当前指令”是“当前取指的指令”,还是“当前译码的指令”,或者是“当前执行的指令”。如果是例外,就比较麻烦了,因为例外可以发生在取指阶段,也可以发生在译码阶段,还可以发生在执行阶段,所以发生例外“指令的PC值”,不一定是当前的PC值,由于跳转指令的存在,不能肯定就是PC值减去一个常数。

2023-08-18 18:09:47 290 1

原创 内核入门——4 龙芯架构——4.1 龙芯架构的地址分布

可以看出来,通用寄存器,是其余各部件之间数据转移的中介。除了通用寄存器、浮点寄存器、外部存储三者之间可以互相直接转移数据,其余部件之间要转移数据,必须通过通用寄存器。如图 4‑1,方框表示独立编址的部件,箭头表示数据流。4‑1 龙芯架构的地址分布和数据流。

2023-08-15 21:19:23 120

原创 内核入门——3.4一切至少有一个地址

从汇编语言的角度,所有的部件(或存储),不管内部还是外部,都会有至少一个地址。通常设计时,还会对这些部件(或存储)分成几类,每一类都独立编址。计算机从逻辑上是分层,通常底层给上层提供接口,上层只负责调用底层提供的接口,无需知晓实现细节。独立编址是说,每一类的部件(或存储)的地址都分别从0开始递增,并分别用不同的指令访问。

2023-08-15 21:16:32 49

原创 内核入门——外设不一定在芯片外面

大体而言,CPU从存储器或高速缓存Cache中取出指令,放入指令寄存器,对指令进行译码,执行,再将指令结果(不是每条指令都会有写回)写回存储器或Cache中,运行大致可以分为四个阶段:取指(Fetch Instruction),译码(Decode Instruction),执行(Execute),写回(WriteBack)。在芯片设计过程中,通常会将内核与外设集成在同一个芯片中,此时,虽然内核、外设在同一个芯片上,但是再内核看来,外设依然在外面,所以依然是外设。通常情况下,“内”与“外”都是内核视角的。

2023-08-15 21:15:26 174

原创 内核入门——3.2汇编

(计算机体系结构的发展,指令端出现了微代码,汇编出现了宏代码,大体上仍然是一一映射的,只是不再是单指令的一一对应而已)。据我所知(在哪看的忘了),最早的汇编,跟机器码是严格一一映射的关系。基本就是:把机器码中的操作码,起一个人类好记的名字,通常是一个英语中的动词——助记符。由助记符和寻址方式,确定了一条汇编指令。除了极少量指令指令,绝大多数汇编指令,都有确定的寻址方式,只不过有的寻址方式,是显式的(比如加法指令),有的寻址方式是隐式的(比如中断返回指令),有的寻址方式是显式 + 隐式(比如相对跳转指令)。

2023-08-15 21:14:34 33

原创 内核入门——3.1机器码

比如有孔的地方表示1,没孔的地方表示0,计算机运行的程序,就是这一系列的0和1组成的二进制数串。但是我要说,工业标准摆在那里,也许不是最好的,你非要在工业标准之外圈地自萌,让大家重新习惯你的标准,当然也不是不可能成功,除非你的东西不可替代,否则成功概率很小。因为存在立即寻址方式(指令中包含操作数本身),所以这里的是地址,而不是地址码,再强调一次,操作数的地址,可以是地址码,也可以隐含在操作码里。字节,是计算机单次操作数据的最小单位,计算机单次操作的数据,必然是字节的整数倍。的机器码,是4个字节。

2023-08-15 21:13:03 56

原创 内核入门——名词解释

Virtually Address Length虚拟地址的位宽。Physical Address Length物理地址的位宽。本文中提到的自然数包含0,是0和正整数的并集。2.1 自然数。

2023-08-15 21:09:54 62

原创 内核入门——前言

当然,也没必要吧以上课程都很精通,只要能做到:遇到某个概念,知道在那本书里找,翻开目录后,知道在那一节,就行了。

2023-08-15 21:07:55 74

ARM架构程序调用规则 AAPCS

Procedure Call Standard for the Arm Architecture ARM架构程序调用规则

2024-07-12

VS2010 MSCOMM.zip

使用方法如下: 1.解压缩压缩包内包含四个文件: MSCOMM.SRG MSCOMM32.DEP MSCOMM32.oca mscomm32.ocx 2.复制文件到指定路径: 32位的系统,文件复制到C:\WINDOWS\SYSTEM32目录下; 64位的系统,文件复制到C:\Windows\SysWOW64目录下。 3.win+r输入cmd打开cmd窗口,在cmd中输入: 32位:regsvr32 C:\Windows\System32\mscomm32.ocx 64位:regsvr32 C:\Windows\SysWOW64\mscomm32.ocx 按enter之后会提示注册成功。

2021-01-05

Keil.STM32F4xx_DFP.2.14.0.part2.rar

Keil.STM32F4xx_DFP.2.14.0.part2.rar keil ARM开发配套工具.

2019-10-23

Keil.STM32F4xx_DFP.2.14.0.part1.rar

由于SCDN 上传限制, 该资源为其中一部分, 另一部分链接: https://download.csdn.net/download/tianshigexing/11904352 需都下载下来, 才能正常解压. Keil.STM32F4xx_DFP.2.14.0.part1, keil5 STM32 开发配套工具. 否则STM32F4D代码无法正常使用.

2019-10-23

vbscript做的计算分压电阻的小工具

分压电阻计算 两点电阻串联, 两电阻并联, 三电阻混联 贴片两点电阻串联,贴片 两电阻并联, 贴片三电阻混联 如果有兴趣可以下载看看

2017-09-15

Cadence高速电路板设计与仿真

很不错的资料,适合初学者使用。找了很久才找到的资料。欢迎下载。

2010-09-24

linux下用C编写的贪吃蛇游戏,编着玩的

编译的时候要加 -lcurses参数 如下 gcc snake.c -lcurses

2009-02-28

空空如也

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

TA关注的人

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