自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 5。STM32裸机开发(6)

嵌入式软件开发学习过程记录,本部分结合本人的学习经验撰写,系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维,为RTOS做铺垫(本部分基于库函数版实现),如有不足之处,敬请批评指正。(6)中主要对前面内容进行两个补充,也是两个公共层的功能,即低功耗和实时RTC

2023-05-23 16:32:28 1105

原创 5。STM32裸机开发(5)

嵌入式软件开发学习过程记录,本部分结合本人的学习经验撰写,系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维,为RTOS做铺垫(本部分基于库函数版实现),如有不足之处,敬请批评指正。(5)中主要讲解外部数据的获取,首先介绍模数、数模转换、随后介绍除串口外的常用四种通信协议:IIC、SPI、485、CAN

2023-05-23 13:49:26 1333

原创 5。STM32裸机开发(4)

嵌入式软件开发学习过程记录,本部分结合本人的学习经验撰写,系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维,为RTOS做铺垫(本部分基于库函数版实现),如有不足之处,敬请批评指正。(4)中主要讲解串口配置,看门狗配置(独立看门狗、窗口看门狗)

2023-05-21 16:30:07 1079

原创 5。STM32裸机开发(3)

嵌入式软件开发学习过程记录,本部分结合本人的学习经验撰写,系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维,为RTOS做铺垫(本部分基于库函数版实现),如有不足之处,敬请批评指正。(3)中主要讲解中断系统,包括按键中断与定时器中断,并扩展了基于定时器的PWM波输出

2023-05-14 21:13:05 691

原创 5。STM32裸机开发(2)

嵌入式软件开发学习过程记录,本部分结合本人的学习经验撰写,系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维,为RTOS做铺垫(本部分基于库函数版实现),如有不足之处,敬请批评指正。(2)中还是IO的一些基本操作和扩展,包括系统定时器、蜂鸣器、数码管、按键嵌入式软件开发学习过程记录,本部分结合本人的学习经验撰写,系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维,为RTOS做铺垫(本部分基于库函数版实现),如有不足之处,敬请批评指正。(2)中还是IO的一些基本操作和扩展,包括系统定时器、蜂鸣

2023-05-12 19:28:36 973

原创 5。STM32裸机开发(1)

嵌入式软件开发学习过程记录,本部分结合本人的学习经验撰写,系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维,为RTOS做铺垫(本部分基于库函数版实现),如有不足之处,敬请批评指正。(1)中包括led点灯、stm32的各类时钟和简化程序的位带操作

2023-05-11 21:27:20 1317

原创 4。计算机组成原理(5)总线和I/O

嵌入式软件开发,非科班专业必须掌握的基本计算机知识核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统

2023-05-10 20:46:49 1765

原创 4。计算机组成原理(4)CPU

嵌入式软件开发,非科班专业必须掌握的基本计算机知识核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统CPU(中央处理器)是计算机的核心部件,它主要负责执行计算机指令,控制和协调计算机各部件的工作,是计算机的大脑。CPU通常由运算器、控制器和寄存器组成。

2023-05-09 22:45:54 2701

原创 4。计算机组成原理(3)指令系统

嵌入式软件开发,非科班专业必须掌握的基本计算机知识核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统指令系统(Instruction Set)是计算机体系结构的关键组成部分之一,它定义了处理器支持的操作指令集合及其执行方式。指令系统决定了计算机能够执行的任务类型和处理速度,并且影响着软件的编程难度和运行效率。

2023-05-06 17:01:31 807

原创 4。计算机组成原理(2)存储系统

嵌入式软件开发,非科班专业必须掌握的基本计算机知识核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统这一部分主要讲解了CPU的组成和扩容、CPU与存储器(主存、辅存、缓存)的连接

2023-05-05 22:16:14 1117

原创 4。计算机组成原理(1)数据表示和运算

嵌入式软件开发,非科班专业必须掌握的基本计算机知识核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统

2023-05-04 22:39:18 789

原创 3。数据结构(3)

嵌入式软件开发第三部分,各类常用的数据结构及扩展,良好的数据结构选择是保证程序稳定运行的关键,(1)部分包括数组,链表,栈,队列。(2)部分包括树,堆。(3)部分包括散列表,图。

2023-05-03 21:07:51 810

原创 3。数据结构(2)

嵌入式软件开发第三部分,各类常用的数据结构及扩展,良好的数据结构选择是保证程序稳定运行的关键,(1)部分包括数组,链表,栈,队列。(2)部分包括树,堆。(3)部分包括散列表,图。

2023-05-03 18:02:03 648

原创 3。数据结构(1)

嵌入式软件开发第三部分,各类常用的数据结构及扩展,良好的数据结构选择是保证程序稳定运行的关键,(1)部分包括数组,链表,栈,队列。(2)部分包括树,堆,散列表,图。

2023-05-02 21:36:18 430

原创 2。硬件基础知识

介绍嵌入式软件开发所需要了解的硬件基础知识,与软件相结合学习,构建完善知识体系

2023-05-01 22:15:38 2683

原创 1。C语言基础知识回顾

学习嵌入式的C基础知识,主要包括几个核心知识点:三大语法结构、常用的数据类型、函数、结构体、指针、文件操作。

2023-04-28 16:04:58 2155

原创 Linux CMake 入门与进阶

示例程序中都只有一个.c 源文件,非常简单。所以,编译这些示例代码其实都非常简单,直接使用 GCC 编译器编译即可,连 Makefile 都不需要。但是,在实际的项目中,并非如此简单,一个工程中可能包含几十、成百甚至上千个源文件,这些源文件按照其类型、功能、模块分别放置在不同的目录中;面对这样的一个工程,通常会使用 make 工具进行管理、编译,make 工具依赖于 Makefile 文件,通过 Makefile 文件来定义整个工程的编译规则,使用 make 工具来解析 Makefile 所定义的编译规则

2022-11-11 20:22:55 709

原创 Linux应用层例程7 CAN 应用编程基础

CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。经过几十年的发展,现在,CAN的高性能、高可靠性以及高实时性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。以汽车电子为例,汽车上有空调、车门、发动机、大量传感器等,这些部件、模块都是通过 CAN总线连在一起形成一个网络,车载网络构想图如下所示:CAN 总线使用两根线来连接各个单元:CAN_H和CAN_L,CAN。

2022-11-11 16:18:06 4258 2

原创 Linux应用层例程6 网络基础知识+socket编程基础

UDP 虽然有很多缺点,但也有自己的优点,所以它也有很多的应用场合,因为在如今的网络环境下, UDP 协议传输出现错误的概率是很小的,并且它的实时性是非常好,常用于实时视频的传输,比如直播、网络电话等,因为即使是出现了数据丢失的情况,导致视频卡帧,这也不是什么大不了的事情,所以,UDP 协议还是会被应用与对传输速度有要求,并且可以容忍出现差错的数据传输中。TCP 协议在建立连接、断开连接以及数据传输过程中都会呈现出现不同的状态,不同的状态采取的动作也是不同的,需要处理各个状态之间的关系。

2022-11-11 12:21:33 373

原创 Linux应用层例程5 看门狗应用编程

前面已经说到,看门狗其实就是一个可以在一定时间内被复位/重置的计数器,一般叫做看门狗计时器 (或看门狗定时器);如果在规定时间内没有复位看门狗计时器,计数器溢出则会对 CPU产生一个复位信号使系统重启,当然有些看门狗也可以只产生中断信号而不会使系统复位。I.MX6UL/I.MX6ULL SoC 集成了两个看门狗定时器(WDOG):WDOG1和WDOG2;WDOG2用于安全目的,而 WDOG1则是一个普通的看门狗,支持产生中断信号以及复位CPU。

2022-11-10 17:29:38 1350 2

原创 Linux应用层例程4 串口应用编程

在串口终端的原始模式下,使用串口进行数据传输,包括通过串口发送数据、以及读取串口接收到的数据,并将其打印出来。循环,这是对用户传参进行了解析,我们这个应用程序设计的时候,允许用户传入相应的参数,譬如用户可以指定串口终端的设备节点、串口波特率、数据位个数、停止位个数、奇偶校验等,具体的使用方法,大家可以看一看 show_help()同理,串口也作为系统的标准输入设备,用户通过串口与 Linux。

2022-11-10 12:45:16 4296 4

原创 Linux应用层例程3 输入设备应用编程

首先要知道什么是输入设备?输入设备其实就是能够产生输入事件的设备就称为输入设备,,它们都能够产生输入事件,产生输入数据给计算机系统。对于输入设备的应用编程其主要是等,譬如获取触摸屏当前触摸点的 X、Y轴位置信息以及触摸屏当前处于按下还是松开状态。

2022-11-09 12:11:06 632

原创 Linux应用层例程2 GPIO 应用编程

引脚是否已经导出,若未导出,则通过 "/sys/class/gpio/export"文件将其导出;引脚是否已经导出,若未导出,则通过 "/sys/class/gpio/export"文件将其导出。gpioX 目录是否存在,如果不存在则表示未导出,则通过"/sys/class/gpio/export"引脚之后,我们需要将导出的引脚删除,同样该文件也是只写文件、不可读。导出成功之后会发现在/sys/class/gpio。上述代码中首先使用 access()文件是只写文件,不能读取,将一个指定的编号写入到。

2022-11-08 17:39:23 1192

原创 Linux应用层例程1 点亮LED灯

⚫应用层控制外设的两种不同的方式;⚫应用层控制外设的两种不同的方式;在Linux系统下,一切皆文件!方法一:驱动层设备文件控制外设包括字符设备文件和块设备文件,,应用层通过对设备文件的 I/O 操作来操控硬件设备,譬如 LCD显示屏、串口、按键、摄像头等等,所以设备文件其实是与硬件设备相互对应的。目录下,我们也把/dev目录下的文件称为设备节点。

2022-11-08 15:55:39 1852

原创 Linux应用开发7 线程、线程同步

线程是参与系统调度的最小单位。它被包含在进程之中,是进程中的实际运行单位。一个线程指的是进程中一个单一顺序的控制流(或者说是执行路线、执行流),一个进程中可以创建多个线程,多个线程实现并发运行,每个线程执行不同的任务。譬如某应用程序设计了两个需要并发运行的任务 task1 和 task2,可将两个不同的任务分别放置在两个线程中。

2022-11-07 17:19:03 319

原创 Linux应用开发6 进程,进程间的通讯

​一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程进程其实就是一个可执行程序的实例程序如何结束?程序结束其实就是进程终止,进程终止的方式通常有多种,大体上分为正常终止和异常终止,正常终止 包括:⚫ main()函数中通过 return 语句返回来终止进程;⚫ 应用程序中调用 exit()函数终止进程;⚫ 应用程序中调用_exit()或_Exit()终止进程;

2022-11-04 17:09:34 223

原创 Linux应用开发5 信号(软中断,处理异步请求,进程间通讯)

信号是事件发生时对进程的通知机制,也可以把它称为软件中断。信号与硬件中断的相似之处在于能够 打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号达到的准确时间,所以,信号提供了一种处理异步事件的方法。

2022-10-31 12:20:52 720

原创 Linux应用开发4 如何获取系统参数信息(监测终端信息)

通过这一节的学习,你可以在UI界面做监测终端信息,如CPU 时间等各类系统参数,狂拽酷炫吊炸天

2022-10-08 19:25:17 1417

原创 Linux应用开发3 字符串处理,字符串与其他数字类型的转换,向应用程序传参

常用的字符串输出函数有 putchar()、puts()、fputc()、fputs(),前面我们经常使用 printf()函数来输出字符串信息,而并没有使用到 putchar()、puts()、fputc()、fputs()这些函数,原因在于 printf()可以按照自己规定的格式输出字符串信息,一般称为格式化输出;而 putchar()、puts()、fputc()、fputs()这些函数只能输出字符串,不能进行格式转换。与 printf()一样,putchar()、puts()、fputc()、fpu

2022-09-16 18:07:10 912

原创 Linux应用开发2 标准C库和文件操作(linux下一切皆文件)

标准 I/O库则是标准C库中用于文件I/O 操作(譬如读文件、写文件等)相关的一系列库函数的集合,头文件,应用于标准IO库中的文件描述符参数path指向文件路径,可以是绝对路径、也可以是相对路径。参数mode指定了对该文件的读写权限,是一个字符串,稍后介绍。调用成功返回一个指向FILE类型对象的指针(FILE *),该指针与打开或创建的文件相关联,后续的标准I/O操作将围绕FILE指针进行。如果失败则返回NULL,并设置errno以指示错误原因。

2022-09-15 16:37:32 441

原创 Linux应用开发1 文件I/O 入门看这一份就够了

每一个被打开的文件在同一个进程中都有 一个唯一的文件描述符,不会重复,如果文件被关闭后,它对应的文件描述符将会被释放,那么这个文件描述符将可以再次分配给其它打开的文件、与对应的文件绑定起来。当我们对动态文件进行读写操作后,此时内存中的动态文件和磁盘设备中的静态文件就不同步了,数据的同步工作由内核完成,内核会在之后将内存这份动态文件更新(同步)到磁盘设中。可以进行复制,复制成功之后可以得到一个新的文件描述符,使用新的文件描述符和旧的文件描述符都可以对文件进行 IO 操作,如果复制失败将返回-1。

2022-09-14 18:13:57 468

原创 Linux驱动开发16 网络设备驱动框架

1)中断的好处就是响应快,数据量小的时候处理及时,速度快,但是一旦当数据量大,而且都是短帧的时候会导致中断频繁发生,消耗大量的 CPU 处理时间在中断自身处理上。函数,当第一次注册网络设备的时候此函数会执行,设备可以在此函数中做一些需要退后初始化的内容,不过一般驱动中不使用此函数,虚拟网络设备可能会使用。网络是分层的,对于应用层而言不用关系具体的底层是如何工作的,只需要按照协议将要发送或接收的数据打包好即可。函数,当需要发送数据的时候此函数就会执行,此函数有一个参数为 sk_buff。

2022-09-13 18:24:08 815

原创 Linux驱动开发 15 块设备驱动框架

I.MX6ULL 带有两个CAN控制器:FlexCAN1和FlexCAN2,NXP官方的EVK 开发板这两个CAN接口都用到了,因此NXP官方的设备树将这两个CAN接口都使能了。

2022-09-13 16:35:16 365

原创 Linux驱动开发14 串口/485/232/GPS

什么都不需要你写,只需要配置串口设备树,驱动自带,然后配置minicom(串口通讯助手)进行串口通讯即可。这一章单纯是因为原子的板子上485/232/GPS走的是板子上的串口通道。且串口驱动部分NXP已经写好了,我们要做的就是修改,配置设备树,使能我们要使用的串口。下通常通过串口和其他设备或传感器进行通信,根据电平的不同,串口分为 TTL。不管是什么样的接口电平,其驱动程序都是一样的,通过外接 RS485。也提供了串口驱动框架,我们只需要按照相应的串口框架编写驱动程序即可。对应的设备节点即可。

2022-09-13 11:12:17 2341

原创 Linux驱动开发13 SPI驱动

SPI 驱动框架和I2C很类似,都分为主机控制器驱动和设备驱动,主机控制器也就是SOC的 SPI控制器接口。比如在裸机篇中的《第二十七章SPI实验》,我们编写了bsp_spi.c和bsp_spi.h这两个文件,这两个文件是I.MX6U的SPI控制器驱动,我们编写好SPI控制器驱动以后就可以直接使用了,不管是什么 SPI设备,SPI控制器部分的驱动都是一样,我们的重点就落在了种类繁多的 SPI设备驱动。spi 设备驱动也和i2c设备驱动也很类似,Linux。

2022-09-09 16:20:33 1766

原创 Linux驱动开发12 IIC驱动

IIC总线驱动+IIC设备驱动(驱动分割分离分层思想)IIC总线驱动+IIC设备驱动(驱动分割分离分层思想)我们不需要写适配器,只需要写设备驱动I2C 是很常用的一个串行通信接口,用于连接各种外设、传感器等器件,在裸机篇已经对I.MX6U的I2C接口做了详细的讲解。本章我们来学习一下如何在Linux下开发I2C接口器件驱动,重点是学习 Linux下的I2C驱动框架,按照指定的框架去编写I2C设备驱动。I2C 总线驱动重点是 I2C适配器(也就是SOC的I2C。

2022-09-07 18:16:18 2875

原创 Linux驱动开发11 LCD / RTC驱动学习

在 Linux中应用程序最终也是通过操作RGB LCD的显存来实现在LCD上显示字符、图片等信息。在裸机中我们可以随意的分配显存,但是在 Linux系统中内存的管理很严格,。而且因为虚拟内存的存在,驱动程序设置的显存和应用程序访问的显存要是同一片物理内存。为了解决上述问题,Framebuffer诞生了,翻译过来就是帧缓冲fb 是一种机制,将系统中所有跟显示有关的硬件以及软件集合起来,虚拟出一个,当我们编写好LCD驱动以后会生成一个名为的设备,应用程序通过访问/dev/fbX。

2022-09-05 18:06:44 743

原创 Linux驱动开发10 Input子系统

按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux内核为此专门做了一个叫做input 子系统的框架来处理输入事件。,用户只需要负责上报输入事件,比如按键值、坐标等信息,input核心层负责处理这些事件。input 就是输入的意思,因此input子系统就是管理输入的子系统,和pinctrl、gpio子系统一样,都是 Linux内核针对某一类设备而创建的框架。

2022-09-03 15:48:43 1720

原创 Linux驱动开发9 LinuxMISC 驱动(杂项驱动)

内核自带的驱动,都是通过图形化界面配置,选择使能或者不使用。

2022-09-02 15:56:18 246

原创 Linux驱动开发8 platform驱动分隔、分离与分层

我们在前面几章编写的设备驱动都非常的简单,都是对IO进行最简单的读写操作。像I2C、SPI、LCD等这些复杂外设的驱动就不能这么去写了,Linux系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的软件思路,在这个思路下诞生了我们将来最常打交道的platform 设备驱动,也叫做平台设备驱动。

2022-09-01 19:26:00 334

空空如也

空空如也

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

TA关注的人

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