自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 提高程序的健壮性和效率(const、static、try{}catch(){})

提高程序的健壮性和效率(const、static、try{}catch(){})

2023-06-08 15:00:02 832

原创 树莓派——linux内核与驱动

树莓派——linux内核与驱动

2022-11-15 10:51:07 1404

原创 Linux 网络编程——socket 网络编程

Linux 网络编程——socket 网络编程

2022-11-11 16:26:58 2205

原创 Linux系统编程——线程

Linux系统编程——线程

2022-11-11 11:05:15 284

原创 Linux系统编程——进程间的通信

Linux系统编程——进程间的通信

2022-11-10 15:52:39 907

原创 Linux系统编程——进程

Linux系统编程——进程

2022-11-09 20:28:17 383

原创 Linux系统编程——文件

Linux系统编程——文件

2022-11-09 16:31:45 305

原创 ARM Cortex-M内核中系统堆栈

Cortex-M0中采用了两个堆栈指针:主堆栈指针(MSP)和进程堆栈指针(PSP),R13在任何时刻只能是其中一个,默认情况为MSP,可以通过控制寄存器(CONTORL)来改变。进入被调用函数时:将新的栈帧的起始位置指定为上一个栈帧的底部,这个位置需要根据前一个栈帧的大小确定,即 SP 指针移动到新的栈帧的底部位置。接着,将栈指针 SP(stack pointer)移动到新的栈帧的栈顶位置(一般是上一个栈帧的底部位置),然后继续执行被调用的函数。裸机操作时,使用的就是MSP指针。

2023-09-24 16:42:18 569

原创 FreeRTOS移植以及核心功能

信号量也是队列的一种【因为队列创建的时候,需要传入队列的长度以及队列的大小,而我们的信号量其实就是一种特殊的队列,只不过它的大小是0,毕竟我们的信号量是不需要传递数据,只需要传递信号,然后长度是N,当N=1的时候就是二值信号量,他就只有0和1两个状态,这里的0和1两个状态是指被填入和被拿走这两个状态,当N>1时,就是我们的计数信号量,他也不传递数据,只是传递一个数量值,一般是记录我们设备的资源数量】如果项目对实时性要求较高,或需要丰富的功能和工具支持,而且有购买授权的预算,那么 uC/OS 可能更适合。

2023-09-20 15:13:58 716

原创 可重入函数与不可重入函数介绍

这个安全的函数又叫可重入函数,所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。可重入函数可以在任意时刻被中断, 稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时 保护自己的数据。可重入函数可以允许有该函数的多个副本在运行,由于不同任务使用的是分离的栈,所以不会互相干扰。它除了使用自己栈上的变量以外不依赖于任何环境(包括 static)

2023-09-15 21:11:40 957

原创 FreeRTOS的信号量和互斥量之间的区别和联系

队列(queue)可以用于传输数据:在任务之间、任务和中断之间,消息队列用于传输多个数据,占用时间按也相对较长,但是有时候我们只需要传递状态,这个状态值需要用一个数值表示,一般是用作同步的效果所有的信号量的本质的都是特殊的队列(特殊:信号量只有队列头部,并没有后面的环形存储区,也就是说信号量只负责消息传递,并不传递数据)信号量用来进行共享资源的管理和任务同步【ps:信号量里面的二值信号量用于同步】

2023-09-01 16:15:23 256

原创 mq与mqtt的关系

传统的消息中间件,例如消息队列 RocketMQ、消息队列 RabbitMQ kafka 等都是面向微服务大数据等领域,负责消息的存储和转发,消息的生产者和消费者都是服务端应用。而移动互联网和 IoT 领域则有所不同,这类场景更侧重于多语言多平台的海量设备接入,消息的生产和消费过程的业务属性很突出,传统的消息中间件并不适合这些领域。在分布式服务器和服务器通信时,RPC可以解决问题。MQTT是在TCP之上的应用层协议,对物联网应用环境做了非常多的优化,TCP是传输层协议,是更通用层的协议。

2023-08-25 17:07:10 1123

原创 Linux指令

大部分内置命令都是内置在shell中的,也有一些内置命令有自己单独的文件。系统启动,会把shell中的内置命令,其他其他不在shell中的内置命令加载到内存中用户输入命令会首先提交给shell,判断是否为内置命令。注意:一个文件(文件夹)改名、删除的权限是由它所在目录的权限控制的,而不是自身的权限控制。用户权限(文件对用户来说的权限,用户操作文件或者文件夹的权限).开头的文件都是隐藏文件,隐藏文件是配置文件,是为了防止修改。文件的所属者和所属组发生改变,用户对文件的权限也发生改变。

2023-08-19 17:09:51 185

原创 STM32——RTC实时时钟

BKP(Backup Registers)备份寄存器【需要VBAT引脚供电才能维持,掉电会清零,即使主电源掉电、系统复位也不会清零】【本质是RAM存储器,掉电丢失】BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位【VBAT和VDD共地即可】TAMPER引脚产生的侵入事件【电平检测】将所有备份寄存器BKP内容清除,会申请中断【VDD断电也会工作】RTC引脚。

2023-08-19 16:25:36 1960

原创 STM32——SPI外设总线

SPI通信外设硬件I2C读写MPU6050电路设计关键代码

2023-08-18 22:28:26 2253

原创 STM32MP157驱动开发——按键驱动(线程化处理)

发生中断时,系统会立刻调用 handler 函数,然后唤醒某个内核线程,内核线程再来执行 thread_fn 函数。编译好的文件在路径由DTC指定,移植设备树到开发板的共享文件夹中,先保存源文件,然后覆盖源文件,重启后会挂载新的设备树,进入该目录查看是否有新添加的设备节点。注意,如果其他设备树文件也用到该节点,需要设置属性为disabled状态,在arch/arm/boot/dts目录下执行如下指令查找哪些设备树用到该节点。上半部用来处理紧急的事情,下半部用一个内核线程来处理,这个内核线程专用于这个中断。

2023-07-25 20:00:58 1525

原创 STM32MP157驱动开发——按键驱动(工作队列)

structstruct0第 1 个宏是用来定义一个结构体,要指定它的函数。第 2 个宏用来定义一个 delayed_work 结构体,也要指定它的函数。所以“delayed”,意思就是说要让它运行时,可以指定:某段时间之后你再执行。

2023-07-25 16:38:53 952

原创 STM32MP157驱动开发——按键驱动(tasklet)

阅读Linux 系统中异常与中断可知,Linux 系统对中断处理的演进过程中,实现了中断的扩展:硬件中断、软件中断硬件中断有:GPIO,网络中断(net),系统滴答中断(tick)等定时器,tasklet等内核中的软中断:该数组里面有个action成员,该成员是个函数,函数会调用链表里面每个tasklet结构体的软件中断处理函数,即下面链表的每个成员都是tasklet结构体,有对应的处理函数和flag标志位如何触发软中断?

2023-07-25 16:10:12 1017

原创 STM32MP157驱动开发——按键驱动(定时器)

定时器涉及函数参考内核源码:include\linux\timer.h:主要是初始化 timer_list 结构体,设置其中的函数、参数。

2023-07-25 15:06:43 895

原创 STM32MP157驱动开发——按键驱动(阻塞与非阻塞)

非阻塞如何让 read 函数既能工作于阻塞方式,也可以工作于非阻塞方式?APP 调用 open 函数时,传入 O_NONBLOCK,就表示要使用非阻塞方式;默认是阻塞方式。在 open 之后,也可以通过 fcntl 函数修改为阻塞或非阻塞。对于字符设备文件,O_NONBLOCK 起作用的注意:在应用程序中设置标记位后,在驱动程序中可以知道该标记位,因为当 APP 打开某个驱动时,在内核中会有一个结构体对应这个驱动【该结构体是虚拟文件系统创建的】,这个结构体中有f_flags,保存所打开文件时的标记位;

2023-07-25 09:21:38 1061

原创 STM32MP157驱动开发——按键驱动(异步通知)

Linux 系统中也有很多信号,在 Linux 内核源文件。

2023-07-24 19:43:38 1340

原创 STM32MP157驱动开发——按键驱动(POLL 机制)

相比于休眠唤醒的程序,只需要调用在file_operations 结构体里面添加poll函数,使用 poll 机制时,驱动程序的核心就是提供对应的 drv_poll 函数。编译驱动程序,在Makefile文件目录下执行make指令,此时,目录下有编译好的内核模块gpio_key_drv.ko和可执行文件button_test文件移植到开发板上。编译好的文件在路径由DTC指定,移植设备树到开发板的共享文件夹中,先保存源文件,然后覆盖源文件,重启后会挂载新的设备树,进入该目录查看是否有新添加的设备节点。

2023-07-24 16:58:16 1308

原创 STM32MP157驱动开发——按键驱动(休眠与唤醒)

内核调度器负责维护该链表,链表里面保存的是线程,如果线程的状态为RUNNING,则会找到合适的时间就会让它运行,如果是非RUNNING,内核的调度器就不会让它运行。编译好的文件在路径由DTC指定,移植设备树到开发板的共享文件夹中,先保存源文件,然后覆盖源文件,重启后会挂载新的设备树,进入该目录查看是否有新添加的设备节点。注意,如果其他设备树文件也用到该节点,需要设置属性为disabled状态,在arch/arm/boot/dts目录下执行如下指令查找哪些设备树用到该节点。对于一个引脚要用作中断时,

2023-07-24 16:58:08 1149

原创 STM32MP157驱动开发——按键驱动(中断)

编译好的文件在路径由DTC指定,移植设备树到开发板的共享文件夹中,先保存源文件,然后覆盖源文件,重启后会挂载新的设备树,进入该目录查看是否有新添加的设备节点。注意,如果其他设备树文件也用到该节点,需要设置属性为disabled状态,在arch/arm/boot/dts目录下执行如下指令查找哪些设备树用到该节点。,然后将共享文件夹里面的设备树文件拷贝到boot目录下,这样的话设备树文件就在boot目录下。查看原理图确定按键使用的引脚,再在设备树中添加节点,在节点里指定中断信息。对于一个引脚要用作中断时,

2023-07-24 14:33:32 787

原创 Linux 系统中异常与中断

本节内容,可以从函数(头文件:include/linux/interrupt.h)一路分析得到。注意:如果内核配置了CONFIG_SPARSE_IRQ,那么它就会用基数树(radixtree)来代替irq_desc数组。SPARSE的意思是“稀疏”,假设大小为1000的数组中只用到2个数组项,那不是浪费嘛?所以在中断比较“稀疏”的情况下可以用基数树来代替数组。

2023-07-23 20:24:26 654

原创 STM32MP157驱动开发——LED 驱动( GPIO 子系统)

视频,可以使用stm32cubemx去生成设备树文件,指定引脚的功能。编译好的文件在路径由DTC指定,移植设备树到开发板的共享文件夹中,先保存源文件,然后覆盖源文件,重启后会挂载新的设备树,进入该目录查看是否有新添加的设备节点。注意,如果其他设备树文件也用到该节点,需要设置属性为disabled状态,在arch/arm/boot/dts目录下执行如下指令查找哪些设备树用到该节点。,需要在Pinctrl里面设置,所以不用用到STM32CubeMX去生成设备Pinctrl,只需要修改设备树文件,添加设备节点。

2023-07-22 15:47:07 791

原创 STM32MP157驱动开发——GPIO 和 和 Pinctrl 子系统的概念

无论是哪种芯片,都有类似图的结构, IOMUX 认为是引脚功能选择器,有时候还需要配置引脚,比如上拉、下拉、开漏等等。前面提到的这些操作都可以交给Pinctrl 子系统完成。即把引脚的复用、配置抽出来,做成 Pinctrl 子系统,给 GPIO、I2C 等模块使用ps:大多数的芯片,没有单独的 IOMUX 模块,即没有pinctl子系统去管理引脚的复用、配置等等,这些功能都在GPIO 模块内部实现的,所以在硬件上 GPIO 和 Pinctrl 是密切相关,在软件上它们的关系也非常密切。

2023-07-22 15:17:30 642

原创 STM32MP157驱动开发——按键驱动(查询方式)

APP 访问硬件的 4 种方式,可以知道这 4 种方法并不仅仅用于 GPIO 按键,在所有的APP 调用驱动程序过程中,都是使用这些方法。所以:APP 开发的基本技能:阻塞 、非阻塞、休眠、poll、异步通知相应的驱动的基本技能:中断、休眠、唤醒、poll 等机制【这些基本技能是驱动开发的基础,其他大型驱动复杂的地方是它的框架及设计思想】

2023-07-19 17:19:01 854

原创 STM32MP157驱动开发——LED驱动(设备树)

阅读可知,利用设备总线写的驱动代码,虽然利用platform_device结构体去定义设备资源可以避免创建太多的结构体,但是由于这些资源文件写在linux内核中,导致linux冗余,所以利用设备树管理这些资源,通过配置文件的形式在启动内核时会把设备树在内存中的地址告诉内核。

2023-07-19 11:49:29 509

原创 STM32MP157驱动开发——设备树知识

为什么要引入总线设备架构?为了更好扩展和减少内核的臃肿使用总线设备架构会导致linux内核臃肿,在linux内核之外,利用设备树dtb(配置文件)去定义不同单板平台的引脚资源信息,可以保持linux内核的干净,且替换设备树可以不用去编译内核文件,便于开发。

2023-07-19 10:41:11 940

原创 STM32MP157驱动开发——LED驱动(总线设备架构)

为什么要引入总线设备架构?为了更好扩展和减少内核的臃肿LED驱动(原始架构优化:分层/分离)——STM32MP157,我们可以利用分离的思想去写出比较通用的硬件操作代码,但是如果去写按键的驱动,需要定义按键资源的结构体,写lcd的驱动,也需要定义新的lcd资源的结构体,这样会导致内核定义了多个重复功能的结构体,能否用统一的结构体去定义GPIO、按键、lcd的资源呢?——利用总线设备架构,即只有一个结构体:platform_device 来定义所以设备的资源。

2023-07-18 15:15:33 522

原创 STM32MP157驱动开发——LED驱动(原始架构优化:分层/分离)

LED驱动(原始架构优化:分层/分离)——STM32MP157

2023-07-16 15:04:08 537

原创 Linux系统编程——文件(ioctl 函数)

ioctl 方法第二个参数 cmd 为用户与驱动的 “协议”,理论上可以为任意 int 型数据,可以为 0、1、2、3……,但是为了确保该 “协议” 的唯一性,ioctl 命令应该使用更科学严谨的方法赋值,在linux中,提供了一种 ioctl 命令的统一格式,将 32 位 int 型数据划分为四个位段,如下图所示:。怎么实现这些操作,这是每一个程序员自己的事情,因为设备都是特定的。用户空间和内核空间共用的头文件,包含 ioctl 命令及相关宏定义,可以理解为一份 “协议” 文件,代码如下:。

2023-07-16 11:11:47 576

原创 STM32MP157驱动开发——LED驱动(原始架构)

对于 STM32MP157 来说,每一个 GPIO 端口有四个 32 位的配置寄存器(GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR 和 GPIOx_PUPDR),两个32 位的数据寄存器(GPIOx_IDR 和 GPIOx_ODR),一个 32 位的设置/复位寄存器(GPIOx_BSRR)。GPIO 外设的时钟来源各自不同,具体的可以从手册当中可以看到,其中 GPIOA-K 的时钟来源为 hclk4,GPIOZ 的时钟来源为 hclk5。

2023-07-16 09:55:45 1598

原创 驱动程序——字符设备驱动框架

驱动程序——字符设备驱动框架

2023-07-14 16:07:43 208

原创 LinuxI2C应用编程——访问EEPROM

LinuxI2C应用编程——访问EEPROM

2023-07-09 10:52:12 704

原创 LinuxI2C应用编程——I2C-Tools的使用

LinuxI2C应用编程——I2C-Tools的使用

2023-07-09 09:46:24 1866

原创 Linux串口应用编程——STM32MP157

Linux串口应用编程——STM32MP157

2023-07-05 10:39:51 471

原创 输入系统框架及应用访问输入设备的4种方式

输入系统框架及应用访问输入设备的4种方式

2023-07-04 09:22:39 236

原创 TTY体系框架中设备节点

TTY体系框架中设备节点

2023-07-04 09:20:14 209

网络通信过程分析软件,网络通信过程分析软件

网络通信过程分析软件,网络通信过程分析软件

2023-04-26

TFTP服务器模拟器!!

TFTP服务器模拟器!!

2023-04-26

这是一个好用的网络调试助手

这是一个好用的网络调试助手

2023-04-26

平衡车代码,平衡车代码,平衡车代码

平衡车代码

2023-02-08

MPU6050参考代码

MPU6050参考代码

2023-01-10

stm32工程模板(stm32工程模板)

stm32工程模板

2022-12-31

BT-05资料,BT-05资料,BT-05资料

BT-05资料

2022-12-20

空空如也

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

TA关注的人

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