自定义博客皮肤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语言之内存对齐

在计算结构体的大小时,规则起着重要作用。不同的数据类型在内存中可能需要按照特定的地址对齐方式来存储,这样可以提高访问速度。但是,通过指令,可以改变默认的对齐方式。我们分别讨论两种情况下的大小。

2024-09-21 14:25:34 564

原创 信号处理之中值滤波

首先,选择一个窗口大小(通常为奇数),然后将这个窗口在信号或图像上逐个滑动。对于每个窗口,取其中的所有数值,按大小排序,并选择排序后的中间值(即中值)来替代窗口中心的值。窗口滑动后重复此过程,直到处理完所有数据点或像素。这样可以有效去除尖峰噪声,同时保留数据的主要趋势和边缘特征。

2024-09-21 13:02:49 425

原创 stm32中利用TIM+DMA+DAC产生10kHz正弦波

设置定时器定时周期,时间到了定时器就溢出(称为定时器更新事件),就会立马把一个数据传输到DAC,因此传输一个点的时间为Tupdate,而一个正弦波是由50个点组成,输出50个点需要的时间为Tupdate*50,这个时间就等于。定时周期:Tupdate= T1*(ARR+1) //计数计到ARR+1后溢出。//打开DAC的通道1。选择触发源为更新时间触发(定时器溢出),定时时间到了以后就会输出触发信号。实验可知:32个数据点就可以得到一个完整的波形,这里选择50个;

2024-09-08 20:07:51 384

原创 IIC(I2C)通信协议的两根总线为什么配置为开漏而不是推挽输出?

IIC协议中,所有从设备连接到同一根SDA和SCL。如果用推挽输出,当两个设备一个输出低电平一个输出高电平时,相当于电源直接和地连接,会发生短路。而开漏输出只有NMOS管,只能输出低电平,不会短路;需要外加上拉电阻输出高电平,因此默认状态下SDA和SCL都是高电平;

2024-09-02 22:19:39 611

原创 一文搞懂STM32所有GPIO输入、输出模式(推挽输出、开漏输出、上拉输入、浮空输入等)

开漏输出有两种输出状态:低电平高阻态在开漏输出模式下,PMOS一直处于关断状态,只需要关注NMOS管;(1) 当NMOS导通时,IO口接地,对外输出低电平:(2)当NMOS也关断时,IO口什么都没接,即单片机输出高阻态此时外设相当于接了个寂寞,也可以说是开路:这样看来好像开漏输出没什么用,只能输出低电平,不能输出高电平。但在某些场景下开漏输出很有用,例如I2C通信协议中,作为SCL和SDA的GPIO口设置必须设置为开漏模式。

2024-09-02 21:09:47 2378

原创 操作系统中多进程、多线程和多任务三者的区别

进程可以看成一栋栋房子,每栋房子都是铜墙铁壁,相互隔离。房子之间的通信需要管道通信、消息队列、共享内存等进程间通信方式实现;每个房子里面有很多人,每个人看成一个线程,负责不同的任务,例如做饭和洗衣;同一栋房子里的人共享房子里的资源,这对应着同一个进程里面的多个线程可以共享进程的资源;

2024-09-01 20:24:11 518

原创 I2C通信协议详解

I2C是由Philips公司开发的一种通用数据总线;拥有1根SCL时钟线,1根SDA数据线;因此是通信协议;I2C采样主从架构,通常有一个主设备和多个从设备,且每个从设备都有一个唯一的地址(地址一般为7位或10位);

2024-08-30 13:30:17 565

原创 sizeof和strlen

sizeof是关键字也是操作符,但不是函数!!!用于一个对象或者类型占用的sizeof(p)psizeof(p)*ppppchar **pp'a'1. 由于a是一个包含 5 个int元素的数组,而每个int在大多数系统中占用 4 个字节;2. *a表示对数组a的第一个元素进行。对于数组a来说,*a是a[0]。a[0]是一个int类型的元素。因此,sizeof(*a)实际上是,即单个整数的大小。在大多数系统中,也是 4 字节。

2024-08-29 17:03:08 230

原创 volatile关键字 用途

但如果flag是volatile修饰的变量,编译器会知道它的值可能在任何时候被外部改变,所以每次访问flag时,编译器都会重新从内存中读取最新的值(传感器最新状态),而不是使用寄存器中缓存的旧值。如果flag是一个普通的int变量,编译器可能认为flag的值不会变,编译时会把它的值缓存在寄存器中来提高访问速度。这时候传感器的状态即使发生变化,程序读取到了仍是原来的值。告诉编译器某个变量的值可能会在程序的执行过程中发生变化,要求编译器不要优化该变量。

2024-08-29 16:21:08 206

原创 const 用法

【代码】const 用法。

2024-08-29 16:09:54 228

原创 Static 关键字 的定义和用途

static修饰局部变量:改变了局部变量的生命周期,出了作用域不被销毁,继续存在内存中,下次执行还是这个值; static修饰全局变量:使其只在本文件有效,跨文件不可访问,extern也不行; static修饰函数:称为静态函数,使得函数只在本文件有效,其他文件不可见。不用担心对其他文件的同名函数有干扰,是一种函数的保护机制。

2024-08-29 15:51:32 136

原创 进程和线程的区别

则像是住在这座房子里的“居民”。一座房子(进程)里可以有很多个居民(线程)。由于他们生活在一起,沟通(线程间通信)也比较方便,就像在一个屋子里说话一样,不需要额外的工具。但是,因为他们共享资源,如果一个居民(线程)在厨房打翻了油罐,其他人也会受到影响(一个线程的问题可能影响整个进程)。想象成一座“房子”。在操作系统中,进程就像是一座独立的房子,每个房子都有自己的地盘(内存)、自己的物资(资源),例如电力、家具(文件、设备等)。但是,房子(进程)之间要“通信”就会比较麻烦,得用电话(IPC机制)等手段。

2024-08-29 15:39:35 162

原创 C语言 冒泡排序

【代码】C语言 冒泡排序。

2024-08-29 14:24:59 173

原创 STM32微控制器上,上电启动流程和代码烧录位置

MCU首先进入复位状态。

2024-08-29 09:40:05 90

原创 系统存储器(RAM)和flash存储器、ROM什么区别

性质系统存储器(RAM):易失性,断电后数据丢失。FLASH存储器:非易失性,断电后数据不丢失。用途系统存储器(RAM):用于存储运行时的数据和变量。FLASH存储器:用于存储程序代码和长期数据。读写速度系统存储器(RAM):读写速度快。FLASH存储器:读取速度快,但写入速度相对较慢。数据保持系统存储器(RAM):数据在掉电后会丢失。FLASH存储器:数据在掉电后保持不变。擦写限制系统存储器(RAM):无擦写限制。FLASH存储器:有一定的擦写次数限制。

2024-08-29 09:30:39 758

原创 三极管工作原理介绍

三极管(晶体管)的工作原理可以简单理解为,它可以用作或。和。

2024-08-29 09:26:45 163

原创 PN结介绍

是半导体器件中的基本结构,是由和相结合形成的结。它是二极管、三极管等半导体器件的核心部分。要理解PN结的概念,首先需要了解什么是P型和N型半导体。

2024-08-29 09:25:09 343

原创 排查单片机问题

在给已经焊接好的 STM32 板子烧入代码后,如果电源灯正常亮,但其他内部外设(如 GPIO 输出、电机、LED 灯、显示屏等)不正常工作,可能有多种原因导致问题。

2024-08-28 22:48:27 661

原创 freertos不同任务间怎么传输数据

主要包括队列(Queue)、信号量(Semaphore)、互斥量(Mutex)、事件组(Event Groups)、和消息缓冲区(Message Buffer)等。

2024-08-28 22:28:17 251

原创 中断进行的流程

中断机制允许系统在处理不同优先级的任务时更加高效。通过中断,处理器可以及时响应外部设备或异常事件,从而提高系统的实时性和响应速度。中断处理的关键步骤包括检测中断、保存上下文、查找 ISR、执行 ISR、清除中断信号以及恢复上下文。这样,中断处理过程结束后,系统能够无缝恢复原来的任务执行。

2024-08-28 22:19:01 357

原创 C语言 字符串反转

/这里sizeof(str)=60,表示最多读取59个字符,和一个字符串终止符'\0'下面的程序表示最多读取59个字符,和一个字符串终止符'\0',若用户输入字符数超过59,只读取前59个,超过的部分将留在缓冲区;利用fgets代替scanf来获得用户输入,避免缓冲区溢出;利用fgets代替scanf来获得用户输入,避免缓冲区溢出;fgets函数可以指定读取的长度,

2024-08-28 21:33:32 146

原创 strlen和sizeof区别

**`sizeof`** 用于获取数据类型或变量的**内存大小**。- **`strlen`** 用于获取字符串的**实际长度**(不包括终止符 `'\0'`)。- 使用`sizeof`时要注意它返回的是**数组总大小**,而`strlen`返回的是**字符串的长度**。- 在字符串操作中,`strlen`是更常用的,因为它计算的是字符串的有效字符数,而不是整个数组的大小。

2024-08-28 20:43:07 739

原创 野指针介绍

野指针是指向无效内存位置的指针,可能会引发严重的程序错误。通过正确初始化指针、在释放内存后设置指针为`NULL`、避免返回局部变量的指针等措施,可以有效地避免和处理野指针问题。

2024-08-28 20:37:10 913

原创 VMware安装ubuntu小白教程

设置大小,点击下一步。可以设置大一点,并不会占用那么多。点击内存,设置内存为电脑运行内存的一半,或者更低。后面的步骤如图片,没有特别说明的就是直接下一步。我的电脑16g,可以设置8g,也可以设置为4g.3.选择一个版本,随后选择下图的iso文件下载。2.下载ubuntu,用镜像下载,比在官网快。随后回到主界面,打开Ubuntu。另外,可以设置一下免密码登录,参考。1.下载vmware.

2024-08-13 18:53:17 229

Unicom_ShouJiYingYeTing.apk

Unicom_ShouJiYingYeTing.apk

2023-04-19

空空如也

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

TA关注的人

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