
嵌入式
文章平均质量分 92
NormalConfidence_Man
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux内核】内核中的中断管理
Linux内核支持众多处理器架构,它对各种架构都做了相当的适配,Linux内核中的中断管理可以分为以下四层。原创 2025-04-24 17:31:43 · 847 阅读 · 0 评论 -
【Linux内核】Linux内核的同步管理
原子操作是保证指令以原子的方式执行,在执行原子指令的时候不会被打断。比如经典例子,A线程和B线程都尝试对i=1的变量进行+1操作,A进程获取到i=1变量后,被B中断,B获取到i=1后进行+1操作得到i=2然后进行写回,接着A线程从睡眠中恢复,又对i=1进行+1操作,最终得到i=2写回。这很明显和想要的结果不一致针对上述例子,可以使用加锁的方式,例如使用自旋锁来保证i++操作的原子性,但是加锁操作会导致比较大的开销,用在这里有些浪费。Linux内核提供了atomic_t。原创 2025-03-16 02:12:47 · 614 阅读 · 0 评论 -
【Linux内核】万字解析Linux内核内存管理机制
ARM64架构处理器采用48位物理寻址机制,最多可以寻找256TB的物理地址空间。对于目前的应用来说已经足够了,不需要扩展到64位的物理寻址。虚拟地址同样最多支持48位寻址,所以在处理器架构的设计上,把虚拟地址空间划分为两个空间,每个空间最多支持256TB。Linux内核在大多数架构中把虚拟地址空间划分为用户空间和内核空间。原创 2025-03-08 15:20:18 · 822 阅读 · 0 评论 -
【Linux内核】进程管理(下)
站在处理器的角度看进程的行为,你会发现有的进程一直占用处理器,有的进程只需要处理器的一部分计算资源即可。所以进程按照这个标准可以分成两类:一类是CPU消耗型(CPU-Bound),另外一类是IO消耗型(I/O-Bound)CPU消耗型的进程会把大部分时间用在执行代码上,也就是一直占用CPU。一个常见的例子就是执行while循环。实际上,常用的例子就是执行大量数学计算的程序,比如MATLAB等。原创 2025-02-22 22:50:05 · 797 阅读 · 0 评论 -
【Linux内核】进程管理(上)
关于进程相关内容直接看我的操作系统专栏,在这里不再赘述。我们直接快进到Linux中的进程管理部分。原创 2025-02-16 23:35:11 · 817 阅读 · 0 评论 -
【Linux内核】系统调用详解
实际上新增系统调用十分容易,但是并不提倡这样子做,这会影响应用程序的可移植性:毕竟在其他的Linux上不存在自定义的系统调用关于Unix的接口设计有一句格言**“提供机制而非策略”**,换句话说,设计系统调用应该是为了完成某种确定目的,而这些系统调用会怎么样去使用则完全不需要内核去关心。此外,系统调用应该被设计得尽可能简单高效。原创 2025-02-09 02:32:19 · 868 阅读 · 0 评论 -
【嵌入式】STM32中的SPI通信
SPI是由摩托罗拉公司开发的一种通用数据总线,其中由四根通信线,支持总线挂载多设备(一主多从),是一种的协议。主要是实现主控芯片和外挂芯片之间的交流。这样可以使得STM32可以访问并控制各种外部芯片。本文主要是实现STM32连接W25Q64外挂Flash芯片。I2C的优点是,无论外挂多少设备,只需要两根通信线就可以实现连接,但是由于其默认弱上拉的设计,其由低电平变换到高电平的时候会比较慢,这会使得其通讯频率较低,最高位400kHz。SPI传输更快,其通讯频率更高,最高可达80MHz。原创 2024-11-04 17:01:42 · 575 阅读 · 0 评论 -
【嵌入式】MQTT详解
QoS 1 需要在 PUBLISH 报文中设置 Packet ID,而作为响应的 PUBACK 报文,则会使用与 PUBLISH 报文相同的 Packet ID,以便发送方收到后删除正确的 PUBLISH 报文缓存。在这之后,发送方可以再次使用当前的 Packet ID 发送新的消息,而接收方再次收到使用这个 Packet ID 的 PUBLISH 报文时,也会将它视为一个全新的消息。QoS 2 解决了 QoS 0、1 消息可能丢失或者重复的问题,但相应地,它也带来了最复杂的交互流程和最高的开销。原创 2024-10-25 13:33:40 · 1441 阅读 · 0 评论 -
【嵌入式Linux】Linux设备树详解
设备树是是Linux中一种用于描述硬件配置的数据结构,它在系统启动时提供给内核,以便内核能够识别和配置硬件资源。设备树在嵌入式Linux系统中尤其重要,因为这些系统通常不具备标准的硬件配置,需要根据实际的硬件配置来动态配置内核。在Linux中,设备树源文件的扩展名为.dts,其二进制编码文件为.dtb,将.dts编译成.dtb需要使用DTC工具,位于Linux内核的文件夹下。原创 2024-10-23 15:57:23 · 1360 阅读 · 0 评论 -
【ARM】ARM中断系统详解——以Cortex-A7为例
Cortex-A7 也有中断向量表,内核有 8 个异常中断,中断向量表也是在代码的最前面。看起来A7的中断向量表比STM32F103少很多,这是因为STM32F103使用的Cortex-M系列芯片,中断向量表列举出了一款芯片所有的中断向量,包括芯片外设的所有中断。对于 Cotex-A 内核来说并没有这么做 Cortex-A 内核 CPU 的所有外部中断都属于这个 IRQ 中断,当任意一个外部中断发生的时候都会触发 IRQ 中断。原创 2024-10-20 00:30:35 · 1596 阅读 · 0 评论 -
【开发杂谈】ESP32的连续ADC的结果转化 和 C语言中的数据类型对齐
在uint32_t中0值应该是00 00 00 00四个全零的字节, 如果ADC读出的值为2006,那么他的16进制为0x7D6,根据上述规则,0-7位写入第一个字节中,8-11位写入第二个字节的低4位,高四位随机填充为0x6,则实际uint32_t的值是0x00 00 67 D6,在内存中uint32_t的存储形式是。可以看到0xD6被写入在了第一个字节中,0x7则被写入第二个字节的低4位中,而第二个字节的高四位则被填充了0x6。首先,ESP32-S3的ADC最大位宽为12位,也就是范围为0~4095。原创 2024-10-01 15:59:47 · 663 阅读 · 0 评论 -
【嵌入式软件开发】ARM64架构基础知识
ARMv8-A是ARM公司发布的第一代支持64位处理器的指令集架构,他在扩充64位寄存器的同时提供对上一代架构指令集的兼容,因而可以同时运行32位和64位应用程序的执行环境。原创 2024-08-14 15:48:51 · 3061 阅读 · 0 评论 -
【嵌入式】CAN总线详解
CAN总线是一种控制器局域网总线,每一个挂载在CAN局域网的设备,都可以利用CAN去发送信息,也可以接收局域网的各种信息,每个设备都是平等的,共享CAN的资源。广泛应用于汽车、嵌入式和工业控制等领域。CAN总线一共有五种帧。原创 2024-06-16 19:58:53 · 3548 阅读 · 0 评论 -
【嵌入式】STM32和I2C通信
I2C(Inter IC Bus)是有飞利浦公司开发的一种通用数据总线,主要通过两个通信线SCL和SDA进行通信,其中SCL(Serial Clock)是时钟线,用于收发双方同步数据,SDA(Serial Data)是数据线,用于传输数据。是一种同步半双工的数据总线,其有数据应答功能,支持在总线上挂载多个设备。不少的设备,比如说常用的0.42寸的OLED显示器,MPU6050加速度传感器,AT24C02存储器模块,DS3231实时时钟模块等,都是用I2C协议。原创 2024-03-25 20:33:14 · 1108 阅读 · 0 评论