作者:没志青年

FreeRTOS 任务间通信

互斥:同一时刻,共享资源只能被一个任务所使用。 同步:控制不同任务访问共享资源的顺序。 其实,就可以把通知理解为同步,它们的作用都是控制任务的执行顺序。 任务之间的通信,称为 IPC(Inner-Process Communication) FreeRTOS中提供了队列、信号量、事件组、任务通知用于

没志青年 没志青年 发布于 2025-06-16

FreeRTOS 系统调试

断言机制 断言:条件为假,执行代码(通常让程序停止执行)。 FreeRTOS 默认的断言: #define configASSERT(x) if (!x) while(1); 改进的断言: #define configASSERT(x) if(!x) { printf("%s %s %d\r\n"

没志青年 没志青年 发布于 2025-06-16

FreeRTOS 软件定时器

使能软件定时器功能: 添加 timer.c 和 timer.h 文件 添加配置 #define configUSE_TIMERS 1 创建定时器 // 动态创建定时器 TimerHandle_t xTimerCreate(const char * const pcTimerName,

没志青年 没志青年 发布于 2025-06-16

FreeRTOS 中断管理

中断配置 FreeRTOS 屏蔽的是 NVIC 配置的中断优先级,而不是芯片中固定的中断号。 使用 FreeRTOS 的时候,单片机优先级组通常必须设置为 NVIC_PriorityGroup_4,以适应 FreeRTOS,因为 FreeRTOS 只关注抢占优先级。 对于 Cortex-M,数字越小

没志青年 没志青年 发布于 2025-06-16

FreeRTOS 概述

FreeRTOS 使用的C语言版本C90 FreeRTOS 组成文件 FreeRTOS 源文件

没志青年 没志青年 发布于 2025-06-16

FreeRTOS 任务管理

FreeRTOS中叫任务,RT-Thread中叫线程,一个东西。 FreeRTOS 是抢占式调度系统,高优先级任务一旦就绪(如被信号量唤醒、延迟到期等),会立即抢占 CPU。 任务状态 四种任务状态:运行态、就绪态、阻塞态和挂起态 运行态:任务得到了CPU的使用权,正在执行中。单核处理器的同一时刻,

没志青年 没志青年 发布于 2025-06-15

FreeRTOS 配置

从官方示例中得到的配置文件,是不能直接使用的,需要修改,以符合单片机硬件。 FreeRTOS 支持: 时间片调度:任务按时间片执行,时间片通常为1ms。 抢占式调度:高优先级任务抢占低优先级,高优先级任务需让出内存。 抢占式+时间片调度 默认只开启抢占式调度。 系统相关配置

没志青年 没志青年 发布于 2025-06-15

[4] Linux 进程间通信

System V IPC POSIX IPC 管道

没志青年 没志青年 发布于 2025-06-14

[3] Linux 进程控制

启动进程 system 用于在代码中执行 shell 命令。 #include <stdlib.h> int system(const char *command); 类型:库函数 线程安全:是 参数: 返回值: 成功: 失败:-1 并设置 errno

没志青年 没志青年 发布于 2025-06-14

[1] Linux 文件 IO 编程

errno 很多函数失败返回-1 并设置 errno,errno是啥 errno = “最近一次系统调用失败的原因编号(整数)” 每个线程私有。 这个编号只有在出错的时候才会更新,平时读的都是上一次的。 查询errno: man 3 errno errno -l 使用方法1:只打印编号 int fd

没志青年 没志青年 发布于 2025-06-14

[7] Linux Framebuffer 屏幕显示

RGB888 RGB565 RGB555 RGB888转RGB565 LCD 驱动程序提供两个参数,只需要关心这个可变参数就行了。 应用编程 </

没志青年 没志青年 发布于 2025-06-14

15 Linux 总线驱动 - SPI

功能架构 和 I2C 差不多,匹配方式差不多。 设备树语法 i.MX6ULL </

没志青年 没志青年 发布于 2025-06-14

14 Linux 总线驱动 - I2C & SPI

I2C 和 SPI 很相似,放在一起讲。 I2C 和 SPI 都是 SOC 上的外设,厂商已经实现好了主机控制器驱动,所以无论换什么芯片,驱动的写法都是一样的。 总线架构 I2C 功能架构: S

没志青年 没志青年 发布于 2025-06-14

13 Linux input 子系统

设备文件:/dev/input/ 按键驱动

没志青年 没志青年 发布于 2025-06-14

4 Linux gpio 和 pinctrl 子系统

GPIO 和 Pinctrl 子系统是为了更方便的初始化和使用引脚。 GPIO 子系统提供操作引脚的函数。 Pinctrl 子系统用于设置引脚复用和电气属性。 pinctrl 子系统 参考文档: pinctrl 子系统源码目录为 drivers/pinctrl 内核\Documentation\de

没志青年 没志青年 发布于 2025-06-14

11 Linux 内核内存

Linux 内存组织: 函数使用参考: 申请内存

没志青年 没志青年 发布于 2025-06-14

12 Linux 内核数据结构

IDR Bitmap kfifo 链表 红黑树

没志青年 没志青年 发布于 2025-06-14

9 Linux proc 文件系统

proc 是伪文件系统,不在磁盘中,只存在于内存中。 挂载在 /proc 目录下,内核运行时动态生成里面的内容,为用户空间程序提供了一个动态查看和修改内核运行时信息的窗口。 如何使用 proc 手动浏览:使用 ls和 cat是最直接的方式。 编程读取:应用程序可以像打开普通文件一样 open()、r

没志青年 没志青年 发布于 2025-06-14

10 Linux sysfs 文件系统

好的,我们来深入讲解 sysfs 文件系统。它与 proc文件系统密切相关,但在设计目的和使用方式上有显著区别。 简单来说,sysfs是一个基于内存的虚拟文件系统,它在用户空间和内核空间之间提供了一个结构化的、清晰的接口,主要用于导出内核设备模型的各个部分——即系统中的总线、设备、驱动以及它们的相互

没志青年 没志青年 发布于 2025-06-14

8 Linux platform 设备驱动

设备和驱动匹配方式: 设备树匹配(现代使用) id 匹配(老,淘汰) name 匹配(远古,淘汰) ACPI 匹配(x86 使用) 匹配优先级:设备树匹配 > id 匹配 > name 匹配 Linux 设备驱动模型 驱动和设备写在一起的缺点: 设

没志青年 没志青年 发布于 2025-06-14

5 Linux 设备树

设备树简介 早期 Linux 内核源码包含大量的与特定硬件平台相关的代码,代码重复度高且杂乱无章,内核维护工作量大。 后来引入设备树,这是一个描述硬件信息的数据结构,将硬件配置从 Linux 内核源码中提取出来,提高了移植性,更方便维护。 小故事:Linux 之父 Linus Torvalds 闲来

没志青年 没志青年 发布于 2025-06-14

6 Linux 字符设备驱动

设备文件位于 /dev 下。 设备文件和普通文件的区别: 设备号 设备号共 32 位: 主设备号:占高12位,标识一个类型的设备,全局唯一。 次设备号:占低20位,标识一个类型下的不同设备,每个主设备号下的次设备号互不干扰,不会冲突。 // 拼接成设备号 dev_t devno = MKDEV(

没志青年 没志青年 发布于 2025-06-14

3 Linux 内核模块

Linux 是单内核操作系统,所有的内核功能被整体编译在一起,形成一个单独的内核镜像文件。 优点是执行效率非常高,缺点是要增加、删除、修改内核的某个功能,需要重新编译和重启整个系统。 后来 Linux 引入内核模块来弥补这一缺点。 内核模块是单独编译的一段代码,在 Linux 运行时可动态的加载和卸

没志青年 没志青年 发布于 2025-06-14

1 Linux 驱动基础概念

学习驱动必知: 学习驱动的目的不是为了开发驱动,而是能看懂并移植驱动,使硬件能正常工作。 现在很少有机会自己从零开始实现一个复杂的驱动。 现在驱动的需求很少了,不可能单独作为一个岗位的,都是搞 Linux 应用开发的顺带的工作,想找驱动的工作就是在做梦。 新人基本上是搞不了驱动的,投简历也是没人搭理

没志青年 没志青年 发布于 2025-06-14

根文件系统移植

通过 NFS 挂载 通过以太网有线连接,开发板使用虚拟机上的根文件系统。 好处: Linux 内核支持 NFS 服务 进行驱动、应用程序开发时,直接在虚拟机上开发,不用传来传去,开发效率比较高。等功能完全开发好了,再把根文件系统烧录进去。 BusyBox 下载地址:Index of /downloa

没志青年 没志青年 发布于 2025-06-14

Linux 系统移植

内核配置 (1)需要先设置CPU的架构,和交叉编译工具: 在顶层 Makefile 文件,将: ARCH ?= $(SUBARCH) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) 改为: ARCH ?= arm CROSS_COMPILE ?= a

没志青年 没志青年 发布于 2025-06-14

uboot 移植

I.MX6ULL 启动方式: IMX6ULL使用靠近串口的那个网口,不是靠近3个USB的那个网口。 uboot 源码下载: http://www.denx.de/wiki/u-boot/ https:

没志青年 没志青年 发布于 2025-06-14

RK3506 Linux开发学习 环境准备

开发板:TL3506-MiniEVM_S(256MB DDR+256MB NAND FLASH) ¥299 SDK 位置:\4-软件资料\Linux\LinuxSDK\LinuxSDK-v1.2.tar.gz 内核:\4-软件资料\Linux\Kernel\src\linux-6.1.99-v1.2

没志青年 没志青年 发布于 2025-06-14

01 系统基础概念和环境搭建

基础概念 各种 config 名称 作用

没志青年 没志青年 发布于 2025-06-14
上一页 下一页