- 博客(64)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux使用单总线驱动DS18b20
单总线:串行模式,一条线,包括,根据设备地址,像IIC一样可实现。常见引脚:三根线,信号线,vcc,GND。:9到12bit分辨率,对应数据后小数点的后1到4位,即最高精确到后四位小数。分辨率越高,采集数据所需要的时间越长。
2024-05-05 13:25:09
298
原创 03嵌入式Linux
GPIO即通用输入输出端口,作用是采集外部器件信息,控制器件活动。特点:有8种输入输出模型,其中推挽输出可以输出高电平低电平,开漏输出输出低电平;可以快速翻转;每个IO都可用作中断。引脚复用功能,将GPIO引脚用作其他外设的输入输出端口,如ADC SPI IIC TIM USART等。
2024-05-06 21:51:48
244
原创 02嵌入式Linux
封装是将数据和操作数据的方法(即函数)封装在一起,形成一个完整的、相互依赖的单元。通过封装,对象的内部细节被隐藏起来,外部只能通过对象所提供的接口来访问和操作对象的状态。封装提供了良好的抽象屏障,使得对象的内部实现细节对外部是透明的,从而降低了系统的耦合度,提高了代码的可维护性和可重用性。继承是一种机制,通过它一个类(称为子类或派生类)可以从另一个类(称为父类或基类)继承属性和方法。子类可以直接访问父类中的非私有成员(即公有成员和受保护成员),并且可以扩展或修改父类的行为。
2024-05-06 21:49:05
606
原创 01嵌入式Linux
缓存存储了最近访问过的数据或指令的副本,当需要再次访问这些数据或指令时,可以直接从缓存中获取,而无需再次访问慢速的主存或磁盘。检查程序代码中的I2C通信部分,确保使用正确的I2C库函数、正确的寄存器配置和正确的通信协议。通过减少CPU等待主存或I/O设备的时间,缓存可以提高CPU的利用率,使CPU能够更有效地执行指令,从而提高系统的性能。缓存还可以提高系统的响应速度,因为它可以存储一些预先计算好的结果或常用的数据,使系统能够更快地响应用户的请求或操作。逐个排查连接的I2C设备,确认每个设备的工作状态。
2024-05-06 21:46:40
711
原创 C语言中的goto语句
C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。根据设备的注册情况,在不同错误下,跳转到不同的。标签的用法和变量定义一样,常用字母开头,加上。使其往下依次释放掉注册的设备或驱动。
2024-05-04 21:00:48
693
原创 00嵌入式Linux
内存泄露一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定)内存块,使用完后必须显式释放的内存。应用程序般使用malloc,、realloc、 new等函数从堆中分配到块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。简单地说就是申请了一块内存空间,使用完毕后没有释放掉。 它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的
2024-05-03 19:41:41
695
原创 QT的TcpServer
newConnection_Slot: 当有客户端的socket建立连接时,tcpserver会发送newConnection()信号,触发连接槽函数,用于创建一个新的socket与客户端对接。
2024-05-03 19:27:21
950
2
原创 STM32F103(Cubemx)驱动ST7789
中景园电子的标准库使用SPI驱动ST7789的TFT_LCD彩屏,将标准库修改为HAL库使用。
2024-04-30 19:11:25
370
原创 RTT-线程通信:邮箱
创建邮箱对象时会先从对象管理器中分配一个邮箱对象,然后给邮箱动态分配一块内存空间用来存放邮件,这块内存的大小等于邮件大小(4 字节)与邮箱容量的乘积,接着初始化接收邮件数目和发送邮件在邮箱中的偏移量。接收邮件时,接收者需指定接收邮件的邮箱句柄,并指定接收到的邮件存放位置以及最多能够等待的超时时间。删除邮箱时,如果有线程被挂起在该邮箱对象上,内核先唤醒挂起在该邮箱上的所有线程(线程返回值是 -RT_ERROR),然后再释放邮箱使用的内存,最后删除邮箱对象。多个线程能够向同一个邮箱发送邮件和从中接收邮件。
2024-04-22 21:12:24
499
1
原创 STM32定时器编码器模式
short的表示范围(-32768-32767),也就是说当读出来的值为(32767, 32768, 32769,…把寄存器的值读出来了之后,转换成了short型(2字节,32位系统下),范围为(-32768-32767),此时当我们把计数器的初始值设置为0之后,如果出现反转,它就会从0开始向下计数(0,65535,65534,…0x0000-1=0xFFFF,同样是0xFFFF,对于32位来说,最高位为0,表示为正数,对于16位来说最高位为1,表示为负数,且刚好为-1。做强制类型转换:正反转问题。
2024-04-22 16:50:51
347
原创 STM32的定时器中断Cubemx
16位向上、向下、向上/下自动装载计数器16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值触发DAC的同步电路 注:此项是TIM6/7独有功能.位于APB1总线上16位向上、向下、向上/下自动装载计数器16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值4 个独立通道(TIMx_CH1~4)可以用作:测量输入信号的脉冲长度( 输入捕获)输出比较单脉冲模式输出PWM输出(边缘或中间对齐模式)
2024-04-03 10:33:50
1009
原创 strlen与sizeof区别
大部分编译程序 在编译的时候就把sizeof计算过了是类型或是变量的长度。当适用了于一个结构类型时或变量, sizeof 返回实际的大小,当适用一静态地空间数组, sizeof 归还全部数组的尺寸。sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'\0'结尾的。strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址。
2024-04-02 16:50:06
155
原创 Cubemx外部引脚按键中断
对函数void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)重写成用户自己的业务代码即可。
2024-03-22 11:48:22
221
1
原创 RTT——stm32f103的can总线通信
注意:drv_can.c和drv_can.h在“D:\RT-ThreadStudio\repo\Extract\RT-Thread_Source_Code\RT-Thread\4.0.3\bsp\stm32\libraries\HAL_Drivers”目录下。将void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)函数复制至broad.c文件中。将drv_can.c和drv_can.h到工程的drives目录下。在broad.h中添加以下代码。
2024-03-16 10:22:53
309
原创 嵌入式视频播放器(mplayer)
但是arm编译时要调用arm-linux-strip才有正确处理。./configure 对MPlayer-1.0rc4 进行剪裁(将一些不需要的文件关闭),其中 --prefix表示后面运行的文件生成的路径我将其放入 目标目录下(生成的文件有:bin、etc、lib、share)(2)vim打开config.mak文件,并修改,编译libmad库生成文件夹lib下的库函数是需要使用的,但是在配置这一点并没有被修改,所以要将该路径指出来。进入libmad的源码目录里,进行裁剪配置:(注意目录的修改)
2024-01-01 14:39:42
1294
原创 嵌入式MP3播放器(madplay)
可网络自行下载,下载地址:https://sourceforge.net/projects/mad/files/libid3tag.so.0.3.0和libmad.so.0.2.1在 target-arm/lib/里。交叉编译库文件形成可执行文件后,将编译好的动态库和可执行文件移植到开发板上即可“食用”libid3tag.so.0和libmad.so.0放到/lib目录下。设置音量:-a -175 ~ +18(播放是按+/-调节)再次上一步的./configure后开始编译和安装。上一首/下一首:b/f。
2024-01-01 14:00:57
914
1
原创 VScode优化
设置里搜索:cursorSmoothCaretAnimation,打开(on)找到"管理"(设置)->"命令面板",或者直接按F1。设置里搜索:Brackoet Pairs,打开(active)设置里直接搜索关键字:Mouse Wheel zoom,勾选。根据提示点击:“开发人员:切换屏幕模式”
2023-12-23 19:40:41
451
原创 等待队列的使用
等待队列是一种实现阻塞和唤醒的内核机制,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制。可以实现线程的软等待,当符合条件时从另一个线程实现软唤醒。wait_event_interruptible(wq,w_flag )函数会根据w_flag条件的真假判断,若是假,则当前的线程会进入休眠状态。4.在另一个线程(或当前线程的中断函数),先w_flag=1;再wake_up_interruptible(&wq)函数,即可唤醒。2.定义唤醒标志(注意:标志要用作全局变量,以供不同函数的统一使用)
2023-12-21 13:25:09
361
原创 管道(|)和重定向(< >)的区别
左边的命令应该有标准输出 | 右边的命令应该接受标准输入。左边的命令应该需要标准输入 < 右边只能是文件。左边的命令应该有标准输出 > 右边只能是文件。右边是命令 (< >) 左边是文件。左边文件里的内容会作为命令的标准输入参数传递给右边的命令。管道(|)两边都是程序(命令)左边的命令的输出信息,覆盖(追加到)文件里。
2023-12-11 19:47:12
368
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人