自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式MCU开发成长计划

单片机工程师的2年成长计划

2022-07-07 13:50:00 3913 3

原创 I.MX6U裸机-主频和时钟配置实验

本教程需要修改寄存器CCM_CBCDR 的 AHB_PODF 位来设置AHB_ROOT_CLK 的时钟,所以在修改之前必须先关闭AHB_ROOT_CLK 的输出。从 图 16.1.6.3 可 以 看 出 , PERCLK_CLK_ROOT 来 源 有 两 种 : OSC(24MHz) 和IPG_CLK_ROOT,由寄存器 CCM_CSCMR1 的 PERCLK_CLK_SEL 位来决定,如果为 0 的话PERCLK_CLK_ROOT 的时钟源就是 IPG_CLK_ROOT=66MHz。

2024-09-19 07:35:56 106

原创 I.MX6U裸机-C语言版LED灯实验

delay_short()和 delay()这两个函数是延时函数,delay_short()函数是靠空循环来实现延时的,delay()是对 delay_short() 的简单封装, 在 I.MX6U 工作在 396MHz(Boot ROM 设置 的 396MHz) 的主频的时候delay_short(0x7ff)基本能够实现大约 1ms 的延时,所以 delay()函数我们可以用来完成 ms 延时。第 5 行跟第 3 行一样,定义了一个名为“.data”的段,然后所有文件的“.data”段都放到这里面。

2024-09-19 07:32:37 255

原创 I.MX6U裸机-汇编LED灯实验

本文主要参考正点原子《》第八章。

2024-09-11 22:55:35 1029

原创 用网卡的ap模式抓嵌入式设备的网络包

嵌入式设备不像pc上,有一些专门的工具比如wareshark来抓包,嵌入式设备中,有的可能集成了tcpdump,可以用来进行简单的抓包,但是不方便分析,况且有的嵌入式设备不一定就集成了tcpdump工具。因为之后嵌入式设备的联网操作都会经过该网卡,所以,直接用wareshark就能抓到设备的包。如果嵌入式设备是通过网线连接到电脑上,我们就可以直接在电脑上通过wareshark抓对应网口的包。如果嵌入式设备用的是wifi联网,此时,我们就需要借助网卡来抓包,具体怎么操作呢?然后,将嵌入式设备连上该热点。

2024-09-11 13:51:44 537

原创 在windows下抓空包(monitor网卡+Omnipeek,主流方案?)

另外,还有一种包,叫做空包,也就是空中包,即air bag,而不是空白的包blank bag,其实也就是空中的无线包。只要有无线经过的地方,就有数据包。我们的无线包其实也是通过无线网卡来传输的,我们借助无线网卡+wareshark,也可以抓到无线网卡上发送和接收的包,其中包括接收广播包。但是,跟有线一样,也只能抓到该无线网卡发送和接收的包。当我们的电脑是通过网线联网时,我们可以通过wareshark来抓取通过网口发送和接收到的包,其中包括单播包、多播包以及广播包等等,只要这个包是通过目标网口的。

2024-09-10 22:42:56 274

原创 在windows下抓空包(monitor网卡+wareshark+MNM)

另外,还有一种包,叫做空包,也就是空中包,即air bag,而不是空白的包blank bag,其实也就是空中的无线包。只要有无线经过的地方,就有数据包。我们的无线包其实也是通过无线网卡来传输的,我们借助无线网卡+wareshark,也可以抓到无线网卡上发送和接收的包,其中包括接收广播包。但是,跟有线一样,也只能抓到该无线网卡发送和接收的包。当我们的电脑是通过网线联网时,我们可以通过wareshark来抓取通过网口发送和接收到的包,其中包括单播包、多播包以及广播包等等,只要这个包是通过目标网口的。

2024-09-10 22:41:59 310

原创 通过FTP服务实现windows和linux(ubuntu)的文件互传

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP协议组中的协议之一,用于从服务器上传(放置)文件或从服务器下载(获取)文件的系统。。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

2024-09-10 22:37:03 641

原创 通过SSH服务远程操作Linux(ubuntu)主机

首先SSH是什么?SSH(Secure SHell)是Linux、Unix、Mac及其他网络设备最常用的远程CLI管理协议,SSH使用秘钥对数据进行加密,保证了远程管理数据的安全性。Secure Shell (SSH) 是一种网络协议,允许用户通过加密的通道安全地访问另一台计算机。SSH广泛用于远程登录系统、管理服务器和进行安全数据传输。SSH2是现在广泛使用的ssh版本;SSH协议使用TCP协议,端口号为22;

2024-09-09 19:32:53 631

原创 尝试解决ubuntu中安装应用时出现依赖不满足的问题

在ubuntu或者其他linux环境中安装应用时,我们有时候会遇到以来不满足的问题,这时候就会导致目标应用无法被安装,比如:怎么办呢?

2024-09-09 18:54:55 419

原创 Python虚拟环境创建和使用总结

我们知道,python程序的开发和运行,需要基于python环境。不过,实际开发中我们常常会使用虚拟环境。那这个虚拟环境是什么呢?在进行Python开发时,你可能遇到这样的问题:一个项目需要Python库A的1.0版本,而另一个项目则依赖于A的2.0版本。如果直接在全局环境中安装这些包,就可能出现版本冲突,影响项目的正常运行。这时,Python虚拟环境就能发挥它的作用,为每个项目提供一个“干净”的Python运行环境。

2024-09-01 08:39:00 1650

原创 Python的VSCode配置

这篇文章主要记录在vscode中编写、运行Python程序的方法,以便于后面的学习。这里我是在win10里完成的,在Ubuntu中的配置方法与之类似。如果你也在Win10下完成,需要提前安装Python。如果是在Ubuntu下完成,应该不需要安装Python。

2024-09-01 07:33:09 986

原创 python运行机制总结

它是一个PVM的增强工具,这个工具收集并使用信息,在程序运行时,可以将部分程序的字节码转换成底层的真正的二进制机器代码,从而实现更快的执行速度。每个文件(模块)都可以任意写一些没有缩进的代码,并且在载入时自动执行,为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'。从技术上,Python把载入的模块储存在一个名为sys.modules的表中,并在第一次导入操作时,检查该表。

2024-08-31 12:03:16 1266

原创 Python2.x 与 3.x 版本区别

Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下相容。许多针对早期 Python 版本设计的程式都无法在 Python 3.0 上正常执行。为了照顾现有程式,Python 2.6 作为一个过渡版本,基本使用了 Python 2.x 的语法和库,同时考虑了向 Python 3.0 的迁移,允许使用部分 Python 3.0 的语法与函数。

2024-08-31 11:50:48 1047

原创 Python面向对象

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。接下来我们先来简单的了解下面向对象的一些基本特征。面向对象技术简介用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

2024-08-31 11:35:52 1528

原创 Python模块内容总结

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。就是不同的功能分一个文件来写。

2024-08-31 11:23:28 1131

原创 Python函数使用总结

你可以定义一个由自己想要功能的函数,以下是简单的规则:函数代码块以def关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。函数内容以冒号起始,并且缩进。return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。语法"函数_文档字符串"默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。实例。

2024-08-31 11:11:45 1237

原创 Python结构语句总结

由于 python 并不支持 switch 语句,所以多个条件判断,只能用 elif 来实现,如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功;else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while …else 也是一样。Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。

2024-08-31 10:59:33 926

原创 Python变量类型

Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。列表是有序的对象集合,字典是无序的对象集合。,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。来截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

2024-08-31 10:44:07 1335

原创 python基本语法总结

Python 语言与 Perl,C 和 Java 等语言有许多相似之处。但是,也存在一些差异。在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程。

2024-08-31 10:26:32 2755 1

原创 python简介及开发环境配置总结

Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。官方宣布,2020 年 1 月 1 日, 停止 Python 2 的更新。Python 2.7 被确定为最后一个 Python 2.x 版本。

2024-08-31 09:36:50 1486

原创 Linux内核多线程

在linux系统中, 我们接触最多的莫过于用户空间的任务,像用户线程或用户进程,因为他们太活跃了,也太耀眼了以至于我们感受不到内核线程的存在,但是内核线程却在背后默默地付出着,如内存回收,脏页回写,处理大量的软中断等,如果没有内核线程那么linux世界是那么的可怕!本文力求与完整介绍完内核线程的整个生命周期,如内核线程的创建、调度等等,当然本文还是主要从内存管理和进程调度两个维度来解析,且不会涉及到具体的内核线程如kswapd的实现,最后我们会以一个简单的内核模块来说明如何在驱动代码中来创建使用内核线程。

2024-08-28 20:24:59 759

原创 Linux WPA/WPA2/WPA3/IEEE 802.1X Supplicant

wpa_supplicant是Linux BSD, Mac OSX和Windows的WPA的服务,支持WPA和WPA2(IEEE 802.11i/RSN),它适用于台式机/笔记本和嵌入式系统,Supplicant是在客户端站中使用的IEEE 802.1X/WPA组件,它使用WPA身份验证器实现秘钥协商,并控制漫游和IEEEE802.11认证/关联的WLAN驱动程序。

2024-08-26 19:29:56 897

原创 NNG简介和使用总结

ZeroMQ(简称ZMQ)是一个基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZMQ不是单独的服务,而是一个嵌入式库,(按照TCP/IP划分),它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信。

2024-08-22 19:17:24 823

原创 Linux进程间通信方式对比

Linux操作系统提供了多种进程间通信(IPC)的方式,每种方式都有其独特的应用场景和优缺点。下面将对Linux下的进程间通信方式进行总结和比较。

2024-08-18 22:41:26 1025

原创 算法之递归和迭代

斐波那契数列(Fibonacci sequence),又称黄金分割数列,这个数列最早是由印度数学家提出来的。如果是用迭代,那么就是用循环从前往后计算,前两个数是固定的,先根据前两个数可以计算出第三个数,然后把第三个数和第二个数再赋值给之前的变量,再相加即可。使用递归时,如果要计算第100个数,那么要先直到第99和第98个,要知道第99个和第98个,就要分别进行递归,直到最后一层,再返回递归回来进行计算。这个序列的前几项是这样的:0,1,1,2,3,5,8,13,21,34,⋯。自然,用递归函数最容易实现。

2024-08-16 10:27:08 409

原创 排序算法(C语言版)总结

排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。这些算法并没有哪个好哪个不好,一个算法,要么是牺牲时间换取空间,要么是牺牲空间换取时间,根据实际需要来选择合适的算法即可。

2024-08-16 10:24:49 640

原创 数据结构之队列的实现

队列的基本操作InitQueue(&Q):初始化队列,构造一个空队列Q。QueueEmpty(Q):判队列空,若队列Q为空返回true,否则返回false。EnQueue(&Qx):入队,若队列Q未满,则将x加入使之成为新的队尾。DeQueue(&Q&x):出队,若队列Q非空,则删除队头元素,并用x返回。GetHead(Q&x):读队头元素,若队列Q非空则用x返回队头元素。ClearQueue(&Q):销毁队列,并释放队列Q占用的内存空间。常用的FIFO缓存其实就是队列。

2024-08-10 08:46:20 728

原创 数据结构之栈的实现

根据栈的存储结构可以分为顺序栈和链栈初始化只需把栈顶指针指向-1就可以了。1.判断是否为空栈,空栈无法进行出栈操作。2.先赋值给x再移动栈顶指针,并且是向下移动。1.判断是否为栈满,栈满无法进行入栈操作。2.栈顶指针先向上移动,再把输入的数据放进去。只需要判断栈顶指针指向的是不是-1,因为一开始空栈的时候栈顶指针指向的是-1。由于栈顶指针指向的是-1,所以一开始放入的位置是0,栈满的时候就会是MaxSize-1,只需判断栈顶指针指向的是不是MaxSize-1就好了。

2024-08-10 08:31:37 196

原创 数据结构之链表的实现

链表分为单链表、双链表、循环链表先看最简单的单链表。

2024-08-10 08:20:55 912

原创 数据结构之顺序表的实现

把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。删除表L中第i个位置的元素,并用e返回删除元素的值。平均时间复杂度 = O(n)3. 拓展容量不方便(即使使用动态分配的方式实现,拓展长度的时间复杂度也比较高,因为需要把数据复制到新的区域)。在表L中查找具有给定关键字值的元素 平均时间复杂度 =O(n)按位查找的应用之一就是作为哈希表,通过key计算出哈希值,然后直接就能获取哈希值所在处的元素了,效率很高。获取表L中第i个位置的元素的值 平均时间复杂度O(1)

2024-08-10 08:07:05 494

原创 数据结构总体概述

线性表是描述一种逻辑结构,也就是线性结构。线性表的定义线性表是具有相同数据类型的n(n>0)个数据元素的有限序列。(其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,则其一般表示为)1. 存在惟一的第一个元素。2. 存在惟一的最后一个元素。3. 除第一个元素之外,每个元素均只有一个直接前驱。4. 除最后一个元素之外,每个元素均只有一个直接后继1. ai是线性表中的“第i个”元素线性表中的位序。2. a1是表头元素;an是表尾元素。

2024-08-09 22:54:42 872

原创 Linux的platform设备驱动框架

前面我们讲了设备驱动的分离,并且引出了总线(bus)、驱动(driver)和设备(device)模型,比如 I2C、SPI、USB 等总线。但是在 SOC 中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题,Linux 提出了 platform 这个虚拟总线,相应的就有 platform_driver 和 platform_device。这里的设备和驱动要怎么理解呢?设备是硬件设备的抽象表示。每个设备都有一个设备名称和一组功能。

2024-08-09 22:30:31 1007

原创 C语言malloc动态分配内存和free释放使用总结

在某些场景,我们可以把这个指针传递给其他函数,比如通过传参传递给其他函数,或者通过返回值返回给调用者(这里注意和普通局部变量的区别,普通局部变量在返回时就没法使用了,所以不能返回一个局部变量的指针,但是,我们可以返回由malloc申请出来的局部变量的指针),其实就是因为堆内存的特点,只要指向堆内存的指针不丢失,就能被访问被操作,比如A函数调用B函数,然后B函数里malloc了一块堆内存,可以返回堆内存的指针给B函数,然后在B函数里free.如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针。

2024-08-09 10:08:46 921

原创 C++ 标准库和标准模板库

标准库和STL

2024-08-02 22:03:06 733

原创 C++ 命名空间、异常处理和动态内存

命名空间 异常处理 动态内存

2024-08-02 22:02:47 983

原创 C++封装、继承和多态

封装继承多态

2024-08-02 22:02:21 658

原创 C++面向对象

面向对象

2024-08-02 22:02:02 1048

原创 C++(区别于C的)基础内容总结

C++ 中创建引用 试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二个标签。在这些声明中,& 读作引用。因此,第一个声明可以读作 "r 是一个初始化为 i 的整型引用",第二个声明可以读作 "s 是一个初始化为 d 的 double 型引用"。通过这些小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。调用函数时,如果未传递参数的值,则会使用默认值,如果指定了值,则会忽略默认值,使用传递的值。

2024-08-02 22:01:40 999

原创 Linux基于设备树的字符设备驱动框架

基于设备树的字符设备框架

2024-08-02 22:01:17 802

空空如也

空空如也

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

TA关注的人

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