- 博客(39)
- 收藏
- 关注
原创 C语言结构体对齐
恢复到先前的对齐方式。这样可以在一段代码中改变结构体的对齐方式,而不会影响其他部分的代码。将当前的结构体对齐方式设为字节对齐,并保存先前的对齐方式。然后定义了一个结构体。是用于保存当前的结构体对齐方式,以便稍后通过。恢复到先前的对齐方式,以确保后续代码不受影响。例如,下面是一个示例代码片段,展示了如何使用。
2024-07-16 20:32:20
175
原创 详解linux虚拟文件系统下(VFS)常用的文件系统
虚拟文件系统(Virtual File System,简称VFS)是Linux内核的子系统之一,它为用户程序提供文件和文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节。借助VFS可以直接使用open()、read()、write()这样的系统调用操作文件,而无须考虑具体的文件系统和实际的存储介质。通过VFS系统,Linux提供了通用的系统调用,可以跨越不同文件系统和介质之间执行,极大简化了用户访问不同文件系统的过程。
2024-01-22 15:26:47
1119
原创 STM32 DMA
搬运数据的方式:1. cpu 2. dmaDMA独立于AHB外设总线,直接连接在系统总线上CPU搬运数据方式:CPU–系统总线–AHB总线–APB总线–UART–APB总线–系统总线–CPU–SRAMDMA:DMA–系统总线–APB总线–UART–APB总线–系统总线–SRAM小圆点表示连接H7有三个DMA域DMA跨域访问H7系列如果使能了cache功能需要注意数据一致性问题DMA 内部实现DMA FIFO 2个16位数据组成32数据包一次搬运。
2024-01-05 18:03:46
357
原创 解决freertos运行后,DMA中断运行不了的问题
自己在使用stm32H743XIH6调试UART的DMA中断时发现,只要freertos一运行,DMA就接收不到数据,不使能freertos,DMA就能接收到中断,接收到数据。
2023-12-25 17:05:06
460
原创 解决KEIL编译慢问题
两种方案使用v6版本的ARM Compiler如果v6版本编译不过,必须使用v5版本的,则可以勾选掉Browse Information选项,提升很明显,1分多钟能优化到几秒(看代码量),但是这个有个弊端,在KEIL中会影响函数跳转,建议用宇宙级IDE vscode吧,仿真什么的再用KEIL
2023-12-19 10:56:41
431
原创 基于野火STM32H743XIH6搭建freertos工程
从原理图我们可以看出,LED灯使用的是三色灯,由三个GPIO控制,分别是PB0/PB1/PA3,我们在cubemx中将其配置成GPIO模式,并打上用户标签方便代码编写。给项目命名,指定编译器为MDK-ARM,这样生成的就是KEIL工程。现在MCU玩单片机的很少了,我们直接上freertos。使能一路uart来当做log口,方便系统信息打印。一些非常有用的配置项。
2023-12-18 18:57:27
472
原创 使用virtualbox配置虚拟机双网卡,一个网卡用来上网,一个网卡用来本地ssh登录服务
在工作开发环境搭建时,会遇到虚拟机net模式才能上网ping通百度,桥接模式不行,但是ssh服务又需要静态ip搭建在桥接网卡的基础上。
2023-12-04 14:08:58
408
原创 什么是100BASE-T1
100BASE-T1是IEEE专门针对100Mb/s汽车以太网的规范,也可以将其称为IEEE802.3bw,这两个名称指的是相同的规范。100BASE-T1规范可与OPEN Alliance BroadR-Reach互操作,它们几乎相同(名称通常可互换使用),但有两个的小的差异,第一在物理层电气(物理介质附件PMA)测试规范中,100BASE-T1规范定义了发送端最大峰值差分输出的测试,BroadR-Reach规范中未明确定义此参数。它仅支持全双工,同时在两个方向上传输;没有定义特定的连接器;
2023-11-30 15:15:45
839
原创 基于野火STM32F103ZET6开发板 I2C读写EEPROM学习
本文主要记录自己在使用野火STM32F103ZET6开发板学习I2c读写EEPROM的学习过程EEPROM(Electrically Erasable Programmable ROM)是电可擦除存储器。EEPROM可以重复擦写,它的擦除和写入都是直接使用电路控制,不需要再使用外部设备来擦写。而且可以按字节为单位修改数据,无需整个芯片擦除。现在主要使用的ROM芯片都是EEPROM。开发板上使用的EEPROM IC芯片型号为AT24C02,存储容量为2K bit,内容被分成32页,每页8Bytes,共。
2023-11-29 17:15:02
353
原创 CAN和CANFD的区别
表示位速率转换,该位为隐性时,速率可变(即BSR到CRC使用转换速率传输),该位为显性时,以正常的CANFD总线速率传输(恒定速率)。:速率可变,仲裁比特率最高1Mbps(与CAN相同),数据比特率最高8Mbps,据调研目前应用的都是5Mbps。CANFD标准帧ID长度可扩展到12bit。CANFD新增了FDF、BRS、ESI位。:表示是CAN报文还是CANFD报文。CAN标准帧ID长度最长11bit。:最大传输速率1Mbps。:一帧数据最长64字节。:一帧数据最长8字节。
2023-11-28 15:14:53
626
原创 0xFFu u为后缀的解释
其中,1024和0xff都为有符号数,这就意味着每个赋值操作包含了一个隐式的由有符号数到无符号数的类型转换,而1024u和0xffu都视为无符号数。在C语言中,数字常量如果没有后缀‘U’或’u’,则默认为是有符号数。
2023-11-27 19:38:24
350
原创 stm32中各寄存器含义
寄存器说明如下:寄存器说明_DR数据寄存器(Data Register)_IDR独立数据寄存器(Independent Data Register)_CR控制寄存器(Control Register)_SR状态寄存器(Status Register)_CSR控制/状态寄存器(Control Status Register)_CIR时钟中断寄存器(Clock Interrupt Register)_RSTR外设复位寄存器(Reset Re
2023-11-22 13:46:52
165
原创 STM32使用定时器实现微妙级延时函数
freertos占用了systick,HAL库函数HAL_Delay为ms级延时,采用内部一个定时器实现us级延时。
2023-11-21 19:50:55
130
原创 STM32标准库SPI_I2S_ReceiveData和HAL库HAL_SPI_Receive
可以通过检测SPI_SR中的RXNE位,当数据寄存器里有数据时,RXNE位是0,当数据全部从数据寄存器的接收缓冲区传输到移位寄存器时RXNE位被置1,这时候可以从数据寄存器里读出数据。,可以通过检测SPI_SR中的TXE位,当数据寄存器里有数据时,TXE位是0,当数据全部从数据寄存器的发送缓冲区传输到移位寄存器时TXE位被置1,这时候可以再往数据寄存器里写入数据。在使用HAL库时,不必这么麻烦,HAL库都帮我们封装好了,直接使用下面两个SPI的发送和接收函数接口。
2023-11-21 16:26:57
670
原创 使用STM32cube创建freertos定时器任务,定时器回调函数运行不了
使用STM32cubemx创建freertos定时器任务,定时器回调函数运行不了cubemx会默认创建一个默认任务,这个任务不能删除,尽量把这个任务的优先级设置为最低cubemx生成代码后,defaultTask里面是一个没有阻塞的死循环,这在freertos中是不被允许的,不然的话freertos无法切换任务
2023-11-20 19:05:06
298
原创 stm32 adc变量定义使用__IO
什么是_IO变量:_IO为volatile变量,volatile 影响编译器编译的结果, 指出:volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错。volatile(即__IO) 告诉编译器变量是随时可能发生变化的,每次使用它的时候必须从变量的地址中读取,因而编译器生成的可执行码会重新变量的地址读取数据。
2023-11-17 16:49:15
127
1
原创 vscode上搭建stm32 keil开发环境
因为使用vscode习惯了,keil界面又比较丑,想在vscode上搭建stm32 的keil开发编译烧录环境。
2023-11-13 14:39:15
130
转载 ubuntu开机在logo界面卡死
参考:安装Ubuntu16.04卡在Ubuntu的logo界面解决方法_51CTO博客_ubuntu16.04开机卡在logo界面
2023-07-26 14:57:24
1104
1
原创 virtual box安装ubuntu,以及遇到的显示问题
3.2 虚拟机设置中调整下显存大小并配置下显卡。3.3 更改下ubuntu内部的显示分辨率。3.1 安装增强工具。
2023-07-26 11:14:29
165
1
原创 container_of的使用说明
container_of的用途说明container_of的主要作用是:通过已知的一个数据结构成员指针ptr,数据结构类型type,以及这个成员指针在这个数据结构中的成员名member,来获取指向这个数据结构的指针type *。
2023-06-04 22:37:42
101
原创 内核模块常用操作命令
4. depend modprobe是怎么知道一个给定模块所依赖的其他的模块呢?在这个过程中,depend起到了决定性作用,当执行modprobe时, 它会在模块的安装目录下搜索module.dep文件,这是depmod创建的模块依赖关系的文件。3. modprobe 与insmod类似,除此以外modprobe还能检查模块之间的依赖关系, 并且按照顺序加载这些依赖,可以理解为按照顺序多次执行insmod。rmmod不会卸载一个模块所依赖的模块,需要依次卸载,当然是用modprobe -r 可以一键卸载。
2023-06-04 16:05:38
256
转载 Linux 串口编程
这篇文章写的很好,转载,记录Linux下串口编程入门 - 冷烟花 - 博客园1. 串口简介串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIAhttps://www.cnblogs.com/jason-lu/articles/3173988.html...
2022-03-23 17:22:15
58
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人