自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言知识点3

一,为什么变量不可以在switch语句中声明定义?switch语句是一种常见的控制流结构,用于基于某个表达式的值来选择性地执行不同的代码块switch语句内部不允许声明新的变量。1.1 switch语句的基本用法。

2024-08-30 14:15:00 603

原创 嵌入式知识点

二,嵌入式代码常见的命名规范。

2024-08-29 20:07:38 843

原创 C语言知识点2

1.1 C/C++结构体(1)结构体的概述结构体是一种自定义的数据类型,它可以包含多个不同的数据类型的成员。结构体由一个或多个成员变量组成,每个成员变量都可以有不同的数据类型和名字。结构体也可以嵌套定义在其他结构体中,以实现更复杂的数据模型。int num;char sex;int age;(2)结构体类型的定义在 C++ 语言中,可以使用struct关键字来定义一个结构体类型。struct 结构体名称 {数据类型 成员变量1;数据类型 成员变量2;...int id;

2024-08-29 18:04:08 305

原创 C语言扩展知识点

一,关于sizeof的总结1.1 sizeof是什么sizeof是cyuyandeyizhong单目操作符,如++,--等。sizeof操作符以字节形式给出其操作数的存储大小操作数可以是一个表达式或者包括在括号里类型名操作数的存储大小有操作数的类型决定1.2 sizeof与其它操作符的关系操作数的优先级为2级,比 /,%等三级运算符优先级高。它可以与其他操作符一起组成表达式,如://其中int为类型变量。1.3 sizeof的主要用途。

2024-08-29 00:03:22 818

原创 愉快的一天——随记

没关系,不就洗碗吗,小事情,收拾好桌子后帮胖墩弄了它的晚饭,就坐在凳子上休息了,玩了一下才想起今天要洗头,居然给我忘记了,然后我就马上去洗头了,今天晚上准备写一篇博客,嘿嘿,待我洗完头洗完澡后,把剩菜放到冰箱就上楼了,开启了我的博客之路,资料难看懂用了点时间,写完后发现是凌晨了,非常好,新的一天又开始了,0:15晚安世界,先睡了 ~太喜欢这种感觉了,回到家已经6点20了,中午的碗还没洗,饭还没煮,爸爸去除草还没回来,我就开始洗碗,弟弟就开始煮饭,一切准备就绪后就等爸爸回来煮菜了。8.26日,天气晴。

2024-08-27 11:59:55 729

原创 STM32系列:定时/计数器——通用,高级定时器

如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较。通用定时器:TIM2/TIM3/TIM4/TIM5在STM32F1系列中具有广泛的应用。计数器的时钟由内部时钟(CK_INT)提供。外部时钟模式1:外部输入引脚(TIx)外部时钟模式2:外部触发输入(ETR)参考stm32F10xxx参考手册。内部时钟(CK_INT)内部触发输入(ITRx)

2024-08-27 00:08:28 617

原创 STM32系列:定时/计数器——基本定时器

一,STM32定时/计数器概述1.1STM32定时器分类STM32f1共有8个定时器。2个基本定时器:用于产生简单的延时【TMI6,TMI7】4个通用定时器:用于复杂的定时任务,有多种工作模式和功能【TMI2~TMI5】2个高级定时器:用于高性能和高准确度的定时任务【TMI1,TMI8】定时器性能:高级>通用>基本1.2 STM32基本,通用,高级定时器的功能整体区别定时器类型主要功能基本定时器没有输入输出通道,常用作时基,即定时功能通用定时器。

2024-08-26 18:46:28 356

原创 ARM处理器

当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份.在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值(即子程序的返回地址)复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。在特权模式中,除了系统模式外(系统模式不属于异常模式,不能通过异常中断进入),其他的5种又称为异常模式,它们可以通过异常中断切换到相应的处理模式中。用户模式是最基本的处理器模式,大多数用户程序都是在用户模式下进行;

2024-06-30 15:19:04 903

原创 8051时序总结

需要说明的是,单片机内核在访问片内资源(片内存储器,片内外设)时,相关的信号(包括地址信号,数据信号,控制信号)都是在内部总线上流动的,内部的存储器和外设在芯片内部连接好的,用户是看不见也不用关心的,只有在单片机外部扩展存储器芯片和外设是由用户连接的。8051是一种指令周期变长的计算机,其不同指令的指令周期有所不同,8051共有3种指令周期的指令:1MC指令,2MC指令(访问外部RAM的指令都是2MC指令),4MC指令(只有乘法和除法指令)绝大多数的嵌入式处理器的指令周期是1MC的(即单片周期指令)

2024-06-15 20:17:11 443

原创 以何为定义

事实上每个人的一生都有属于自己的定义,我们都是自己人生的主角,不要接受任何对自己不利的设定,我比别人慢半拍是因为我对待任何事情都是仔仔细细的不漏细节所以我才会比别人慢,我努力了结果不如意,或许是我的学习方式不对,没关系我还有很大的上升空间,找到自己正确的学习方式再努把力,我就不信我做不好这件事,拿出自己的干劲。我们可以有自己的主见不依赖他人,发现问题时勇敢解决,在任何时候做自己的靠山,性格是多样性的,都有属于自己的闪光点,所以勇敢的人们大胆前进吧,没有什么是可以阻碍自己的。以何定义我,以何诟病我!

2024-06-07 18:48:45 399

原创 8051指令系统及汇编语言设计(1-3)

在8051单片机中,没有专门的通用硬件寄存器,而是把内部数据RAM区中的通用寄存器R0~R7作为工作寄存器使用,共有32的单元,分为4组,每组8个工作寄存器,每次只使用其中之一,当以R0~R7来表示操作数时,就属于是寄存器寻址方式。(5)变址寻址:变址殉职是以DPTR或PC的内容为基本地址,然后加上基址上A的内容作为地址偏移量,是专门针对或用于程序存储器的寻址方式ROM都是1byte指令。(4)立即数寻址方式:若指令的操作数是一个8位或16位二进制数,就称是立即寻址,指令中的操作数称为立即操作数。

2024-06-01 13:36:49 622

原创 8051指令系统及汇编语言设计(1-2)

001BH(定时计数器1);栈是在RAM空间中开辟的一个数据缓冲区,8051的栈单元是8bit(1byte的),它只能通过栈指针寄存器sp来操作,且只能从开口端向缓冲区写入数据或读取数据(按后进先出顺序)(1)寄存器区(00H~1FH):这32个单元是作为通用寄存器使用的,分为4组,每组8个寄存器,每个寄存器按R7~R0编号;(2)位寻址区(20H~2FH):这16个单元既可以作为一般的RAM(存放程序中的位变量)使用也可以进行字节操作或对每一位进行操作,是8051位处理器的位数据存储区。

2024-05-23 22:21:33 494 1

原创 8051指令系统及汇编语言设计(1-1)

标识符 EQU 数值(8bit或16bit)------将数值的值赋给标识符。不可位寻址是指程序员不可以对寄存器的某个位进行操作,如果要修改必须要将寄存器的整个进行修改。用来在ROM空间中定义一个16bit(每一位占用2个字节)的数据表格(与DB相似)8051中多字节数据是按大端格式存储的(低地址存放高字节,高地址存放低字节)LED的引脚为P1.0。指令中参与运算的数据称为源操作数,运算的结果称为目标操作数(用来指定开头的起始地址(开始执行的地址)程序段或者数据段。

2024-05-17 12:43:52 996

原创 内存管理单元——MMU(1-4章节(完结))

MMU除了具有虚拟地址到物理地址变换功能外,还具备存储器访问权限检查功能(即内存保护功能)MMU把内存空间分为16块,CP15的C3寄存器每两位控制一个域(MMU内存保护功能指的是可以设置的一块内存的读/写权限,是由协处理器cp15的域访问控制寄存器c3第一级页表中的描述符的域Domain位段,Ap位段以及协处理器cp15寄存器c1中的R,S,A位共同完成的)4,使用DMA(直接访问寄存器,DMA的方式是不经过cpu)操作可以被cache的内存时,将内存的数据发送出去时,要清空cache;

2024-05-12 13:53:45 503

原创 内存管理单元——MMU (1-3章节)

大页描述符和小页描述符所在的第2级页表,既可以在粗页也可以在细页表;当虚拟地址是以也为单位映射到物理内存空间时,需要使用2级页表才能实现虚拟地址到物理地址的转换,当虚拟地址是以也的方式映射到物理地址的时候,该虚拟地址所在的段在第一及页表中的描述符一定是粗页描述符或者是细页描述符,在这个粗/细页描述符中包含了第2级页表,且这个虚拟地址所在的段虚拟空间中的第2级页表的地址。如果大页描述符是保存在粗页描述符中的,粗页表中的每个描述符表达的是4KB的物理页,则粗页表中连续的16个描述符都保存同一个大页描述符;

2024-05-10 23:51:30 960

原创 内存管理单元——MMU(详细版 接1-2)

使用进程标识(PID)来区分,PID是一个整数,也称进程号,每创建一个进程Linux内核就会为该进程分配一个PID,进程结束退出后PID又被系统收回,可分配给其他进程,而在Linux中是多个进程并发的:这个并发的进程cpu发出的虚拟地址VA都是从0x0地址开始的,地址范围:0~32MB即0x00000000~0x01ffffff。1,以段的的方式进行地址变换时,是将虚拟地址的内存空间(4GB)划分成2的32次方=2的20次方乘以2的12次方等于4096=4K个段(1MB大小的内存块称为段Section)

2024-04-27 21:14:45 554

原创 内存管理单元——MMU(第一章节 1-2)

启动mmu之后,cpu发出的都是虚拟地址(VA),虚拟地址VA由硬件变换成MVA供cache,mmu使用,通过mmu转换成物理地址(PA),最后使用PA来读写内存和外设。ARM目标系统实际配置的存储器(包括外设)地址范围空间称为物理地址空间,其中的某个地址称为物理地址PA,它们对应的实际内存单元,3,通过页表项中的物理地址基址(Page Base Address)和页内偏移,可以计算出物理地址(MVA)。cache,mmu看到的是(输出的是)mva,它们将mva转换成PA(物理地址)

2024-04-22 10:29:34 398 1

原创 内存管理单元——MMU(第一章节基本介绍1-1)

虚拟地址VA :在计算机技术中,把cpu的寻址空间简称为逻辑空间或者是虚拟空间,对应的地址成为虚拟地址也称为逻辑地址记为(Virtual chengxudoushiADDress:VA)从软件角度上看,程序都是在虚拟地址空间运行的,cpu发出的都是虚拟地址。虚拟内存管理技术是基于程序可分段的,基本思想是将系统中的虚拟内存空间和物理内存空间划分成若干个大小相同的内存块,将虚拟内存空间中的内存块的地址映射成物理块的地址,这个地址映射可以在程序运行之前进行初始化阶段运行,也可以在程序运行时进行。

2024-04-17 22:40:14 401

原创 51单片实验LED1~LED8(同时闪烁3次,再顺序点亮)

新建文件夹Common(common.h common.c)该目录存放公用文件,如数据定义,软件延时等。3,流水灯点亮每个LED点亮250ms后熄灭轮到下一个LED点亮,可以用移位来实现。2,闪烁3次后再顺序点亮LED1~LED8实现流水灯功能,点亮时间为700ms。模块化编程完成后,新建工程,在里面进行编译,编译正确后就可以在实验板上实现了。4,用代码实现后新建编程,编译正确后在实验板上实现以上内容。1,整体闪烁LED3次 ,亮和熄的时间为500ms。2,闪烁3次,加循环,循环3次。

2024-03-29 12:42:17 626 1

原创 51单片机点亮LED1~LED8(采用软件延时数组方式)

这些在原理图中都是可以看出来的,我们要定义它的引脚才能让它实现我们想要的功能,51单片机中有3种延时方式,分别是软件延时,硬件定时器延时,外部中断延时。而我们今天要采用的是软件延时,软件延时是怎么实现的呢?新建文件夹Bsp(LED.c LED.h ) ( timer.c timer.h) 该目录存放用户编写的外设驱动模块。2,采用模块化编程:包括使用软件延时来产生延时,采用数组控制LED进行编程。我们将我们的代码打好后就可以新建工程了。3,程序编码要求规范。

2024-03-22 13:40:23 583 1

原创 51单片点亮LED1-4(LED1~LED8)

模块化程序已经打完了接下来我们就要新建工程咯还是老样子,忘记建工程的朋友可以去看看我前面几篇,有写到,建好工程后我们就把我们的程序放进去开始进行编译。3.编写我们所需要实现的功能 首先我们来新建App(app.c app.h)其实点亮LED灯也并不需要一定采用固定的方法 可以根据自己的思想去构造。我这个稍微有点太乱了,如果有自己的方法可以按照自己的方法来哦。下面就是我们的延时函数(common.h是固定在里面的哦。接下来我们就可以来写我们需要实现的功能了。1,采用模块化编程,程序编码要求规范。

2024-03-17 10:20:53 423

原创 51单片机点亮LED1-3(采用数组方式点亮~)

使用模块化,前两篇已经有了一些了解,不懂的可以去看我前两篇的文章,如果还是看不懂,可以去搜索一下模块化编程是个什么,反正了解大概就可以了,那么话不多说我们直接上代码!我们把我们所需要的App,Bsp.Common添加进去,就可以开始进行编译了,编译正确就可以连接STC在实验板上实现我们要的功能了(采用数组的方式点亮LED)看起来好像是挺麻烦的但我们用多了就会发现c语言灵活方便,执行效率高,反正好处很多就不一一说明了,总之c语言是基础,我们要把它列为。为了区分于其他数字的区别,开头都是以0x开始。

2024-03-07 16:58:51 649

原创 51单片机点亮LED 1-2(采用数据移位方式)

Bsp文件内包含LED.c LED.h 以及timer.c timer.h。如上在模块中完成后就可以进行新建工程了 然后在进行编译,编译成功后就可以在板子上实现我们想要的内容了。Common文件内包含common.c common,h。新建文件夹LED 在此文件夹内再新建App,Bsp,Common。App文件夹内包含app.c app.h。注意:common.h中的代码是工程模块中已经包含的。2.采用模块化编程,程序编码要求规范。

2024-03-05 17:51:58 401

原创 51单片机点亮LED1-1(采用软件延时方式)

5、发现错误 :未定义标识符、缺少功能原形。要求采用模块化编程,程序编码要求规范。每个led点亮时间为700ms。6、在板子上实现功能。

2024-03-04 16:38:49 442

空空如也

空空如也

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

TA关注的人

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