自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(198)
  • 收藏
  • 关注

原创 多任务互斥及队列

一.互斥的引入在FreeRTOS中,互斥(Mutex)是一种用于保护共享资源的机制。互斥锁可以确保同一时间只有一个任务能够访问共享资源,从而避免了竞态条件和数据不一致的问题。需要注意的是,获取互斥锁是一种阻塞操作,即如果互斥锁当前不可用,任务将被阻塞,直到互斥锁可用。互斥锁的获取和释放应该成对出现,确保正确的同步和保护共享资源。互斥锁的应用可确保共享资源的访问是原子性的,避免了多个任务同时访问共享资源导致的数据不一致和竞争问题。

2024-02-21 22:23:06 1521 2

原创 FreeRtos任务调度

TaskHandle_t TCB结构体,保存任务的基本信息。

2024-02-20 20:52:34 1382 1

原创 单片机和RTOS

一段代码+运行位置+运行环境在计算机科学中,任务(Task)指的是一个需要计算机系统执行的工作单元或操作。任务可以是一个指令序列、函数、进程、线程或任何需要计算机执行的可定义的工作。任务是计算机系统中的基本单位,通过将大型任务分解为更小的子任务,可以简化系统的设计和管理。每个任务通常有特定的输入、处理逻辑和输出。任务可以并行执行(在多个处理器或核心上同时执行)或顺序执行(按照特定的顺序依次执行)。在操作系统中,任务通常是指进程或线程,它们是并发执行的实体。每个任务都有自己的代码、数据和运行环境。

2024-02-19 19:31:58 3409 1

原创 STM32的SDIO

SDIO,全称Secure Digital Input/Output,是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能,允许设备通过SD卡槽进行数据输入输出和外围设备连接。SDIO接口通常被用于连接各种外部设备,例如无线网卡、蓝牙模块、GPS接收器、摄像头、声卡等,以扩展移动设备和嵌入式系统的功能。通过SDIO接口,这些外部设备可以直接与主设备进行数据交换和通信。

2024-02-19 18:51:01 1560

原创 FATFA文件系统

文件系统提供了一种结构化的方式来组织文件和目录,使用户可以根据自己的需求创建、修改、复制、移动和删除文件。总体而言,FATFS在嵌入式系统和移动设备中得到广泛应用,因其简单性、兼容性和轻量级的特点,适用于一些对文件系统需求相对简单的场景。不同的操作系统或文件系统可能具有不同的实现方式和特性,但它们都提供了类似的概念和功能,用于管理和操作计算机上的文件和目录。路径:路径是用于指定文件或目录位置的字符串。轻量级:FATFS占用较少的内存和存储空间,适用于资源有限的设备和系统,如嵌入式系统和存储器较小的设备。

2024-02-08 22:50:47 651

原创 STM32内存管理

内存管理是计算机系统中的一个重要组成部分,它负责管理计算机的内存资源。内存管理的主要目标是有效地分配、使用和释放内存,以满足程序的运行需求。内存是计算机用于存储程序和数据的地方,它由一系列内存单元组成,每个内存单元都有唯一的地址。内存管理器负责跟踪内存的分配情况,以便将空闲的内存分配给程序使用,并在程序不再使用内存时将其释放。内存管理的主要功能包括:内存分配:内存管理器跟踪内存的可用和已使用区域,并将适当大小的内存块分配给程序。

2024-02-08 22:48:39 1139

原创 Linux命令·

debian linux: deb 软件包deb软件包分为两种,.deb二进制软件包,.dsc源码包软件包的两种管理工具软件包软件的安装包必须存在不能从镜像点获得安装包不能检测软件之间的依赖关系 共享文件夹在 /mnt/hgfs 目录下sudo apt-get install 软件名sudo agt-get remove 软件名sudo agt-get --pugre remove 软件名sudo agt-get update 软件名sudo agt-get upgradesudo agt-get c

2024-02-04 20:15:53 790

原创 LVGL部件8

在 LVGL(LittlevGL)中,函数用于设置按钮矩阵(Button Matrix)中单个按钮的控制选项。该函数可以用来定制按钮矩阵中按钮的行为、样式和其他属性。以下是btnmatrixbtn_idstatectrl通过调用这个函数,可以针对特定的按钮矩阵中的按钮设置不同的控制选项。这样可以实现诸如隐藏、禁用、重复等特殊行为。注意,在使用这个函数之前,需要先创建一个按钮矩阵对象,并确保按钮矩阵中按钮的数量和索引是正确的。在这个示例中,我们使用函数创建了一个按钮矩阵对象,并进行了基本的设置。

2024-02-03 22:24:57 1480

原创 Linux底层基础知识

汇编,C语言,C++可以通过不同的编译器,编译成机器码。而java只能由Java虚拟机识别。Java虚拟机可以看成一个操作系统,Java虚拟机是由汇编,C,Linux等编写而成的一个操作系统(面向os)不同的芯片,底层的CISC指令集不同,所以其机器码有区别,因此汇编不能跨平台。特定的CPU下只能执行特定的机器码。Java生成字节码,只有Java虚拟机识别,Java虚拟机跨平台,因此Java跨平台。

2024-02-03 20:46:43 6121 2

原创 LVGL部件7

在LVGL(LittlevGL)中,要设置图像对象的旋转中心点,可以使用函数。xy以下是一个示例代码,展示如何使用在这个示例中,我们创建了一个图像对象img,然后使用函数将该图像对象的旋转中心点设置为图像的中心点。在LVGL(LittlevGL)中,可以使用函数来设置图像对象的旋转角度。angle以下是一个示例代码,展示如何使用在这个示例中,我们创建了一个图像对象img,然后使用函数将该图像对象的旋转角度设置为 90 度,表示将图像按顺时针方向旋转 90 度。在LVGL(LittlevGL)中,可以使用。

2024-02-02 22:55:13 2750

原创 LVGL部件6

函数。obj是指向要设置线条样式的对象的指针。part是指定要设置样式的对象部分。可以使用预定义的常量,如表示主要部分,或者使用表示自定义部分。is_rounded是一个布尔值,用于指定是否将线条样式设置为圆角。true表示应用圆角样式,false表示使用直角样式。以下是一个示例代码,展示如何使用// 创建一个对象// 将对象的线条样式设置为圆角在这个示例中,我们创建了一个对象obj,然后使用函数将该对象的线条样式设置为圆角。在LVGL(LittlevGL)中,可以使用。

2024-02-02 22:53:57 1634

原创 LVGL部件5

在 LVGL(LittlevGL)中,函数用于设置滑块(Slider)组件的值。slider是指向滑块对象的指针。value是要设置的滑块的值。anim是布尔值,用于指定是否使用动画效果进行滑块值的更改。以下是一个示例代码,展示如何使用// 创建一个滑块// 设置滑块的取值范围和初始值在这个示例中,我们创建了一个滑块对象slider,使用函数设置了滑块的取值范围为 0 到 100,并使用函数将滑块的初始值设置为 50。在 LVGL(LittlevGL)中,

2024-02-01 20:29:24 1585

原创 LVGL部件4

是LittlevGL(LVGL)图形库中的一个函数,用于向列表(list)对象中添加一个按钮(button)。。这个函数用于在列表对象中添加一个按钮,可以包含一个图像和一个文本。list参数是指向列表对象的指针,即要将按钮添加到的列表。img_src参数是一个指向图像数据的指针,用于指定按钮上显示的图像。如果不需显示图像,可以将此参数设置为NULL。txt参数是一个表示按钮上显示的文本的字符串。函数会在列表对象中创建一个新的按钮,并将其添加到列表的末尾。按钮的图像和文本将根据提供的参数进行显示。

2024-02-01 20:27:51 1522

原创 IMX6LL|打造自己的驱动总线

软件与硬件代码分离,提高程序的复用性。添加设备,关联硬件相关代码。添加驱动,关联软件相关代码。设备驱动模型体现分离思想。

2024-01-31 21:24:40 432

原创 Linux

vim ~/.bashrc 行尾添加或修改 export PATH=$PATH:/home/hq/demo。tar czf test.tar.gz test //gz格式压缩文件。tar xzf test.tar.gz -C 目录名 //解压到某个目录下。ta cvf test.tar.gz test //只归档不压缩。修改etc/environment,在后面添加:/home/hq/demo。find ./ -name hello.c //查找文件名字。

2024-01-31 21:21:15 385 1

原创 LVGL部件3

是 LittlevGL(LVGL)图形库中的一个函数,用于设置对象的圆弧颜色样式。。这个函数的作用是设置指定对象(lv_obj_t类型)的圆弧(arc)颜色样式。圆弧颜色样式是指对象中绘制的圆形或弧线的颜色。通过使用函数,可以更改对象中圆弧的颜色。参数color是一个lv_color_t类型的参数,用于指定要设置的圆弧颜色。可以使用 LVGL提供的颜色宏或自定义颜色来设置圆弧颜色。通过调整圆弧颜色,可以使对象的外观与应用程序的需求和风格相匹配。

2024-01-30 22:19:26 1002

原创 LVGL部件2

是 LittlevGL(LVGL)图形库中的一个函数,用于检查指定对象的状态。状态通过使用位掩码进行表示,其中每个位代表一个具体的状态。使用位操作可以将多个状态进行组合,以便同时检查多个状态。如果对象处于给定的状态,则函数会返回true,否则返回false。此函数的目的是为了在 LVGL 应用程序中检查对象的状态。例如,可以使用它来检查按钮是否处于按下状态,或者检查复选框是否被选中。是 LittlevGL(LVGL)图形库中的一个函数,用于设置复选框控件的文本。。

2024-01-30 21:21:52 1466

原创 LVGL部件

1.如何创建标签部件以及设置文本!

2024-01-28 23:15:03 232

原创 LVGL组件

LVGL (Light and Versatile Graphics Library) 采用了面向对象的编程思想。LVGL 是一个开源的图形库,旨在为嵌入式系统提供高性能的图形显示和用户界面功能。LVGL 的设计思路是基于对象的,它利用抽象的类来实例化不同的对象。LVGL 提供了一系列的类和对象,如窗口、按钮、标签、容器等,开发者可以通过实例化这些类来创建具体的图形界面组件。通过面向对象的编程,开发者可以轻松地创建和管理图形界面的组件。每个对象都有自己的属性和方法,可以根据需要对其进行配置和操作。

2024-01-28 23:10:32 651

原创 LVGL移植准备

显示驱动:实现与目标平台兼容的显示驱动程序,包括初始化显示设备、绘制像素和设置显示区域等功能。确保与LVGL库进行交互的正确性和有效性。输入设备驱动:适配目标平台的输入设备驱动程序,包括触摸屏、按键和鼠标等。实现输入事件的捕获和传递给LVGL库进行处理。系统适配:根据目标平台的特点,适配相关的系统组件,如任务调度、时钟和定时器等。确保在目标平台上正常运行LVGL所需的系统资源。内存管理:实现适配目标平台的内存管理函数,包括内存分配、释放和对齐功能。

2024-01-27 21:28:06 743

原创 LVGL入门

LVGL(Light and Versatile Graphics Library)是一款开源的嵌入式图形库,专门为嵌入式系统设计。它提供了丰富的绘图组件和用户界面控件,可以用于构建直观、美观和交互式的图形用户界面。跨平台支持:LVGL可以在多个硬件平台和操作系统上运行,包括ARM Cortex-M、ARM Cortex-A、ESP32、Raspberry Pi等嵌入式平台。硬件友好:LVGL开发时考虑了嵌入式系统资源受限的情况,因此具有较小的内存占用和较低的处理器要求。

2024-01-27 21:25:49 649

原创 打开文件:内核做了什么

每一个进程或者说线程都由一个结构体维护,结构体有众多成员,其中有一个成员叫做files;files是类型。中含有fdt成员,它是指向文件描述符表数组的指针。文件描述符表数组中仅仅是一个索引,而文件描述符就是文件描述符表的下标。通过索引可以找到文件表项。文件表项是一个数据结构,记录了打开文件的详细信息,包括文件偏移、文件指针、访问权限等。当程序调用open函数时,系统会根据文件地址,通过虚拟文件系统找到inode中的,复制到程序中的文件表项中。这样就不用通过虚拟文件系统操作要打开的文件。同时返回文件描述的符。

2024-01-26 20:06:59 1271

原创 Linux抽象文件系统

Linux采用了抽象文件系统的概念来统一管理不同类型的文件和文件系统。抽象文件系统是对不同文件系统的封装,使得用户和应用程序可以以相同的方式访问和操作不同类型的文件系统。Linux的抽象文件系统通过以下几个组件来实现:VFS(Virtual File System):VFS是一个抽象层,位于内核与各种具体文件系统之间。它定义了一组标准的文件操作接口,并提供了一套通用的数据结构和函数来管理文件和文件系统。

2024-01-26 20:05:44 980

原创 IMX6ULL|libgpiod控制IO

在Linux中,最常见的读写GPIO方式就是用GPIO sysfs interface, 是通过操作 /sys/class/gpio 目录下的 export 、 unexport 、gpio{N}/direction, gpio{N} /value (用实际引脚号替代{N})等文件实现的,经常出现shell脚本里面。在kernel 4.8开始,加入了libgpiod的支持;而原有基于sysfs的访问方式,将被逐渐放弃。

2024-01-24 20:02:52 597

原创 Modbus协议

Modbus由Modicon公司于1979年开发,是一种工业现场总线协议标准。Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTU和Modbus TCP三种。其中Modbus TCP是在施耐德收购Modicon后1997年发布的。

2024-01-24 20:01:36 1417

原创 嵌入式面试题

1.交换机与路由器交换机:用于局域网内的转发路由器:用于连接局域网和外网,也能进行数据转发2.IP地址基本概念1.IP地址是Internet中主机的标识2.Internet中的主机要和其它机器通信,必须要有一个IP地址3.IP地址分为32IPv4和128位IPv64.IP地址的表示方式是点分制。IP地址=网络号+主机号网络号:用来表示是否在一个网段内主机号:标识在本网段内的ID(不能重复,同一网段内)a三只划分:重新划分网络号和主机号,重新组网,从而提高资源利用率。

2024-01-23 21:09:48 633

原创 IMX6ULL|input子系统(按键实验)

input子系统是Linux对输入设备提供的统一驱动框架。如按键、键盘、触摸屏和鼠标等输入设备的驱动方式是类似的,当出现按键、触摸等操作时,硬件产生中断,然后CPU直接读取引脚电平,或通过SPI、I2C等通讯方式从设备的寄存器读取具体的按键值或触摸坐标,然后把这些信息提交给内核。使用input子系统驱动的输入设备可以通过统一的数据结构提交给内核,该数据结构包括输入的时间、类型、代号以及具体的键值或坐标,而内则通过/dev/input目录下的文件接口传递给用户空间。在Linux内核源码的。

2024-01-23 21:08:52 1143

原创 IMX6ULL|GPIO子系统

GPIO是General Purpose I/O的缩写,即通用输入输出端口,简单来说就是MCU/CPU可控制的引脚,这些引脚通常有多种功能,最基本的是高低电平输入检测和输出,部分引脚还会与主控器的片上外设绑定,如作为串口、I2C、网络、电压检测的通讯引脚。与LED子系统类似,Linux提供了GPIO子系统驱动框架,使用该驱动框架可以把CPU的GPIO引脚导出到用户空间,用户通过访问/sys文件系统进行控制,GPIO子系统支持把引脚用于基本的输入输出功能,其中输入功能还支持中断检测。

2024-01-22 08:57:33 1032

原创 IMX6ULL|LED子系统

在Linux系统中,绝大多数硬件设备都有非常成熟的驱动框架,驱动工程师使用这些框架添加与板子相关的硬件支持,建立硬件与Linux内核的联系,内核再通过统一文件系统接口呈现给用户,用户通过对应的设备文件控制硬件。对于LED设备,Linux提供了LED子系统驱动框架,在Linux内核源码中的“Documentation/leds/leds-class.txt”有相关的描述,它实现了一个leds类,用户层通过sysfs文件系统对LED进行控制。

2024-01-22 08:55:14 1030

原创 IMX6LL|class:设备的大管家

parent:新kobject对象的上一层节点,一般为NULL。kobject对象可以通过uevent机制往用户空间发送信息。fmt:变参参数,一般用来设置kobject对象的名字。udev/mdev:用户空间守护进程,监听广播信息。kobject_uevent:内核消息发送接口。NETLINK:特殊的网络通信,本地主机使用。drvdata:私有数据,一般为NULL。dev_t:属性文件记录该设备号。class:新构建的class。

2024-01-21 22:56:39 389

原创 IMX6LL|linux设备驱动模型

linux系统通过sysfs体现出设备驱动模型sysfs是一个虚拟文件系统(类似proc文件系统)目录对应的inode节点会记录基本驱动对象(kobject),从而将系统中的设备组成层次结构用户可以读写目录下的不同文件来配置驱动对象(kobject)的不同属性。

2024-01-21 22:54:54 910

原创 Linux内核|字符设备

owner:设置驱动接口关联的内核模块,防止驱动程序运行时内核模块被卸载release:文件引用数为0时调用。

2024-01-19 19:00:50 946 1

原创 IMX6LL|内核模块

make modules:执行Linux顶层Makefile的伪目标,它实现内核模块的源码读取并编译为.ko文件。printk:内核模块无法使用glibc库函数,内核自身实现的一个类printf函数,但是需要指定打印等级。选项”-C”:让make工具跳转到linux内核目录下读取顶层Makefile。$(MAKE):Makefile的默认变量,值为make。微内核:内核空间只提供关键功能,服务功能在用户空间提供。内核模块的功能需要依赖内核提供的各种底层接口。宏内核:关键功能和服务功能均在内核空间提供。

2024-01-19 18:57:49 643

原创 IMX6LL|串口通信

UART1_UFCR:时钟分频、发送与接收的 fifo大小。官方sdk的设置波特率函数使用了除法,需要提供gcc除法库。UART1_UBIR、UART1_UBMR:波特率。UART1_UCR1:使能uart1、自动波特率。UART1_UCR3:bit2置1,官方要求设置。-lgcc 表示会链接“libgcc.a”库。UART1_UCR2:设置串口的发送帧格式。-static -L 表示静态库所在路径。发送完成标志、数据接受标志。奇偶校验位、软件复位。

2024-01-18 19:08:01 771

原创 IMX6LL|时钟控制

4个层次配置芯片时钟。

2024-01-18 19:06:25 1004

原创 IMX6LL|中断详解

通用中断控制器(General Interrupt Controller,GIC)是一种硬件设备,通常用于处理多核处理器或多处理器系统中的中断。GIC 负责接收来自各个设备和处理器内核的中断信号,并根据优先级和配置规则将这些中断分派给适当的处理器核心进行处理。GIC 的工作原理如下:中断请求:外设或处理器核心会向 GIC 发送中断请求信号,表示产生了一个中断。中断分发:GIC 根据中断请求的类型、优先级和配置规则,决定将中断分派给哪个处理器核心进行处理。

2024-01-17 13:57:49 1207

原创 按键检测|中断检测

当未按下按键时,GPIO_5为低电平,按下按键GPIO_5变为高电平。根据引脚编号找到引脚名称根据引脚名称找到引脚编号。

2024-01-17 13:50:30 1269

原创 Linux应用层调用驱动层

次设备号在Linux系统中有关键的作用,它用于区分同一类型的不同设备实例,提供设备的唯一标识,并帮助驱动程序管理和操作设备。当应用程序打开设备文件时,内核会检查该设备文件的主设备号,并在驱动程序列表中寻找与之相对应的驱动程序。当内核加载一个驱动程序时,它会分配一个唯一的主设备号给该驱动,从而为该驱动所管理的设备创建相应的设备文件。通过使用次设备号,驱动程序能够识别和区分不同的设备,并根据具体的设备实例执行相应的操作。在Linux系统中,设备文件的命名规则是由设备的主设备号和次设备号决定的。

2024-01-16 13:43:02 1707

原创 单片机和Linux嵌入式区别

一般跑单片机的芯片成为MCU,跑Linux的芯片成为MPU。两款芯片很大的区别在于MPU芯片有MMU内存管理模块。CPU可以通过直接访问RAM的地址来读取和写入数据,以实现对内存的管理和操作。CPU可以将数据从RAM中加载到寄存器中进行计算,然后再将计算结果存回RAM中。GPIO是单片机用于与外部电路进行数字输入和输出的接口。CPU可以通过读取和写入GPIO引脚的状态来与外部设备进行通信。例如,CPU可以通过读取GPIO引脚的状态获取传感器数据,或者通过设置GPIO引脚的状态来控制执行器。

2024-01-16 13:41:21 2677

原创 IMX6ULL|libgpiod控制IO

在Linux中,最常见的读写GPIO方式就是用GPIO sysfs interface, 是通过操作 /sys/class/gpio 目录下的 export 、 unexport 、gpio{N}/direction, gpio{N} /value (用实际引脚号替代{N})等文件实现的,经常出现shell脚本里面。在kernel 4.8开始,加入了libgpiod的支持;而原有基于sysfs的访问方式,将被逐渐放弃。

2024-01-15 13:43:28 648

QT上位机+STM32

QT上位机,通过串口控制STM32,实现各种功能。播放音乐,停止播放下一首,上一首,加减音量以及采集各种数据。

2023-05-19

空空如也

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

TA关注的人

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