自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 问答 (1)
  • 收藏
  • 关注

原创 Windows下安装pip

官网地址:https://pypi.org/project/pip/#files。

2024-03-09 19:42:59 483

原创 windows下安装python3.8

注意:从python3.8.10版本开始,3.8版本分支只接受安全补丁,并且在2024年10月之前,这些补丁将以纯源码的形式发布。也就是说对于python3.8版本这个分支,我们只能在官网上下载到3.8.10以及它之前的版本。在下载页面根据自己的需求选择对应的系统版本,我的电脑是win10 64位,因此这里选择的是Windows installer(64-bit)

2024-03-09 15:10:26 842

原创 IIC接口

IIC总线是由飞利浦公司推出的一种串行、同步、半双工通信协议。它由两条线组成,时钟线(SCL)和数据线(SDA)。主机产生通信用的时钟,可以产生起始信号和结束信号来开始或者结束一次通信。

2023-05-29 20:55:58 1435

原创 SPI接口协议详解

SPI分为主机和从机,主机提供通信所需的时钟信号。

2023-05-18 11:36:52 2279

原创 STM32F1定时器(TIM1~TIM8)

STM32共11个定时器,2个高级控制定时器TIM1和TIM8,4个通用定时器TIM2~TIM5,两个基本定时器TIM6和TIM7,两个看门狗定时器和一个系统滴答定时器Systick.高级定时器TIM1和TIM8的时钟由APB1产生,其它六个通用定时器的时钟由APB2产生。它们的最大频率都可以配置成系统时钟的频率。

2023-05-17 15:41:52 2493 1

原创 Systick定时器

【代码】Systick定时器。

2023-05-15 16:17:12 1010

原创 STM32f103时钟树详解

①、HSI 是高速内部时钟,RC 振荡器,频率为 8MHz;②、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~16MHz。我们的开发板接的是 8M 的晶振。③、LSI 是低速内部时钟,RC 振荡器,频率为 40kHz。独立看门狗的时钟源只能是 LSI,同时 LSI 还可以作为 RTC 的时钟源。④、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。

2023-05-13 13:25:08 1114

原创 2.4G-WiFi连接路由器过程

WiFi的数据通信基于802.11协议进行,无线AP在工作时会定时向空中发送beacon数据包,基站(STA)从beacon中解析出AP的名称、加密方式等信息,从而发起连接。

2023-02-13 16:56:59 3111

原创 ubuntu切换python版本

在ubuntu环境下进行嵌入式开发,我们在进行不同的项目开发时,可能会遇到python环境不统一的情况。这时,我们可以通过update-alternatives来方便更新ubuntu下的python环境,来适应不同的项目工程。

2023-01-12 15:34:37 10493 1

原创 ubuntu下arm-none-eabi-gcc安装

ubuntu下arm-none-eabi-gcc安装

2023-01-12 13:47:41 1758

原创 C语言指针数组和数组指针

c语言指针数组和数组指针

2023-01-03 10:45:55 118

原创 linux下查找命令(find、grep)总结

linux下grep命令使用总结

2022-11-03 09:24:14 2935

原创 ble蓝牙技术

一、前言低功耗蓝牙技术(Bluetooth low energy)简称ble,是蓝牙技术联盟设计和销售的一种个人局域网技术,旨在用于医疗保健、运动健身、信标、安防、家庭娱乐等领域的新兴应用。相较经典蓝牙,低功耗蓝牙旨在保持同等通信范围的同时显著降低功耗和成本。它的主要特点就是low power低功耗,让那些在功耗方面有比较高要求的可穿戴设备能够长时间保持在电状态。二、ble的技术特点ble蓝牙工作在2.4G频段(2.4GHz-2.4835GHz),一共40个信道,每个信道带宽为2MHz。蓝牙4.2

2022-05-25 14:19:15 9801

原创 linux文件和目录函数

一、文件描述符linux系统会为每一个打开的文件分配一个文件描述符(一个非负整数),我们可以使用文件描述符对文件进行一系列的操作。二、文件操作2.1、openopen函数既可以打开已经存在的文件,也可以创建一个新的文件并打开。函数原型:int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);头文件:#include <sys/type

2022-03-31 09:28:50 318

原创 ubuntu开机没有ens33解决方法

最近重新安装了VMware,使用之前的ubuntu镜像,发现只有一个lo网卡,没有ens33,虚拟机无法获取ip地址,samba服务器也无法正常使用。root@ubuntu:/var/lib/NetworkManager# ifconfiglo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid

2022-03-13 20:01:52 5207 6

原创 linux环境变量设置方法

一、概述linux系统的用户权限分为超级用户(root)和普通用户,环境变量对应系统级环境变量和用户级环境变量。二、系统级环境变量2.1、/etc/profile此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。这个文件中的环境变量对所有用户有效,包括普通用户和超级用户,但是这个文件通常在重启后并不自动加载,而是需要使用source命令启动。因为我们第一次登录时,通常是以普通用户登录的,并非超级用户。so

2022-02-28 14:03:33 1308

原创 linux磁盘和文件空间查看命令

一、df命令1.1、显示文件系统的磁盘情况统计ubuntu@ubuntu:~/Desktop$ df Filesystem 1K-blocks Used Available Use% Mounted onudev 960376 0 960376 0% /devtmpfs 198772 3144 195628 2% /run/dev/sda5 102562776 36965972

2022-02-24 15:50:46 1529

原创 linux下常用压缩命令

一、tar命令tar命令用来打包一个目录,它支持三种格式:".tar"、".bz2"和".gz"1.1、压缩tar -cvf [文件名].tar [文件目录] //打包成.tar文件tar -jcvf [文件名].tar.bz2 [文件目录] //打包成.bz2文件tar -zcvf [文件名].tar.gz [文件目录] //打包成.gz文件1.2、解压缩tar -xvf [文件名].tar //解压到当前文件tar -xvf [文件名].tar -C [文件目录] //将.tar文件解

2022-02-16 10:44:41 112910

原创 linux安装和使用gdb调试工具

一、安装gdb工具sudo apt-get updatesudo apt-get install gdb 查看gdb版本gdb -vshell终端打印版本信息如下:GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1二、gdb工具的使用方法2.1、编译生成可执行文件 gcc HttpClient.c -o out -g -I ./上面一段命令表示将HttpClient.c编译后生成一个名为out的可执行文件,-I表示头文件路径2.2、开始gdb调试使用g

2021-08-11 14:28:36 1204

原创 linux网络编程(getaddrinfo和gethostbyname函数详解)

一、getaddrinfo函数原型: int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);函数功能:根据hints指定的参数要求,获取服务器node的信息,并将获取的结果存储到res中函数参数:node 服务器的域名或者IP地址 service 服务的十进制端口字符串或者协议类型,如“8099”、“http”

2021-08-06 16:35:16 1584

原创 树莓派3B+安装wiringpi和bcm库

如果想要使用树莓派的gpio、iic、spi等外设资源,我们就需要用到树莓派一、wringpiwringpi在raspbian系统中都有预装,如果想要重新安装和更新可以执行以下命令:sudo apt-get install wringpisudo apt-get upgrade wiringpi安装完成后查看wiringpi的版本:gpio -v如果安装成功,会打印版本相关的信息:root@raspberrypi:/share/raspberry/soft# gpio -vgpio v

2021-06-05 15:29:00 1609

原创 树莓派安装和配置samba服务器

安装samba服务器sudo apt-get updatesudo apt-get install samba samba-common-bin创建共享文件夹,更改文件夹权限sudo mkdir /sharesudo chmod -R 777 /share修改samba配置文件,添加共享文件夹的路径和属性sudo vim /etc/samba/smb.conf在文件最后面添加(将后面的注释去掉):# ======================[share] .

2021-06-05 14:26:47 1053

原创 树莓派3B+配置WiFi(基于raspbian系统)

以下操作基于Raspberry Pi OS 32位系统Raspberry Pi OS with desktop进行使用ifconfig检查wlan0是否开启,如果没有开启执行以下命令sudo iwconfig wlan0 power onsudo ifconfig wlan0 up修改WiFi的名称和密码sudo nano /etc/wpa_supplicant/wpa_supplicant.conf 在配置文件中添加如下内容:ctrl_interface=DIR=/var/run

2021-05-30 14:48:43 1087

原创 树莓派3B+安装Raspberry Pi OS

Raspberry Pi OS是树莓派官方提供的操作系统,它基于debian系统开发,所以又称为raspbian。官方提供了三个版本:Raspberry Pi OS with desktop and recommended softwareRaspberry Pi OS with desktopRaspberry Pi OS Lite第一种版本除了桌面外包含很多预装的软件;第二个版本只含桌面,没有多余的其它软件;第三个版本不包含桌面系统,只能用shell访问和操作。这里我们选择第二个版本进行安装

2021-05-30 14:02:23 1077

原创 树莓派3B+ubunt server配置WiFi

基于树莓派的ubuntu server系统默认是没有开启WiFi的,如果想要在ubuntu下使用树莓派的WiFi功能就必须要手动配置。安装iwconfig工具和net-toolssudo apt install wireless-toolssudo apt-get install net-tools启动树莓派的无线网卡,网卡名称默认为wlan0sudo iwconfig wlan0 power onsudo ifconfig wlan0 up配置树莓派需要连接的路由器名称和密码

2021-05-28 16:59:41 1354

原创 树莓派3B+安装ubuntu20镜像以及远程访问

树莓派的ubuntu版本主要有ubuntu MATE、ubuntu core、ubuntu server三个版本。ubuntu MATE版本的功能最全,它预装了大部分常用的桌面软件,体积也比较大;ubuntu server不包含图形界面,但是我们可以后续自己根据需求来安装;ubuntu core具有更小的体积,通常用于嵌入式设备。第一步:下载ubuntu镜像和镜像烧录工具镜像地址:ubuntu MATE ubuntu core ubuntu server工具地址:Win32DiskImager更多镜

2021-05-28 16:16:51 1032

原创 使用cjson解析json数据格式

一、Json数据格式json是一种轻量级的数据传输格式,表示方法为:“名称”:“值”;json通常的格式有两种,对象和数组。对象由花括号括起来的逗号分割的成员构成,对象的成员可以是字符串、数值、数组、对象;对象中包含字符串、数值、对象:{"name": "张三", "age": 18, "address": {"country" : "china", "province": "广东"}}数组是由方括号括起来的一组值构成,其内容也可以是字符串、数值、对象、数组。数组元素是单纯的字符串:

2021-05-24 10:06:36 3014

原创 c++类的派生和继承

一、什么是派生类和继承   假设有定义了类A,我们希望定义一个新的类B,B包含A的全部特征,并且希望扩展一些A中没有的内容,这时我们不需要从头写类B,而可以把类A作为基类(父类),派生出B类,这时派生出的B类称为派生类(子类),B类会继承A类的所有内容。二、派生类的声明声明格式:   class 【派生类名】:【继承方式】【基类类名】{};公有继承声明:class B:public A{};私有继承声明:class B:private A{};保护继承声明:class B:protected

2021-05-10 10:20:57 511 1

原创 c++友元类和友元函数

一、友元函数友元函数和普通函数最大的区别在于友元函数可以直接访问类的私有成员和保护成员;友元函数不属于类的成员函数,但是友元函数必须在类内部定义;友元函数使用friend关键词声明;友元函数能够实现类之间的数据共享,较少系统开销,提高效率,但是会破坏类的封装机制;class FriendFunc{public: FriendFunc(); ~FriendFunc(); friend void friend_function(FriendFunc f1);priva

2021-05-06 16:10:39 708

原创 c++拷贝构造函数

一、默认的拷贝构造函数每一个类在创建时,系统都会为其创建一个默认的拷贝构造函数,这个拷贝构造函数对用户不可见。假设有如下类:class Person{ public: int age; void show(); private: int weight; protected: int hight;};其默认的拷贝构造函数等价于Person::Person(const Person &per){

2021-05-06 13:24:44 718

原创 c++构造函数和析构函数

一、构造函数和析构函数的特点构造函数和析构函数是一种特殊的公有成员函数,每一个类都有一个默认的构造函数和析构函数;构造函数在类定义时由系统自动调用,析构函数在类被销毁时由系统自动调用;构造函数的名称和类名相同,一个类可以有多个构造函数,只能有一个析构函数。不同的构造函数之间通过参数个数和参数类型来区分;我们可以在构造函数中给类分配资源,在类的析构函数中释放对应的资源。二、不带参数的构造函数C++类在创建时,系统会默认创建一个不带参数的构造函数,我们可以重新定义这个构造函数。默认构造函数在类被

2021-04-30 16:35:15 9600 3

原创 URL格式

一、URL基本格式一个完整的url包含方案、用户名、密码、主机名、端口、路径、参数、查询和片段,格式如下:< scheme >://< user >:< password >@< host >:< port >/< path >;< params >?< query >#< frag >例如:http://admin:[email protected]/html/index.html?te

2021-04-21 10:40:09 10497

原创 FreeRtos源码分析之消息队列工作原理(九)

一、消息队列API函数xQueueCreate( uxQueueLength, uxItemSize );xQueueSend( xQueue, pvItemToQueue, xTicksToWait );BaseType_t xQueueReceive( QueueHandle_t xQueue,void * const pvBuffer,TickType_t xTicksToWait );xQueueCreate 创建一个消息队列,队列中有uxQueueLength个元素,每个元素大小为ux

2021-03-04 20:57:39 856 1

原创 FreeRtos源码分析之任务挂起和恢复(八)

一、概述任务的挂起和进入临界区的功能类似,进入临界区通过直接操作硬件寄存器屏蔽中断来禁止任务切换,任务的挂起则是通过纯软件的方式来实现禁止任务切换的功能。二、任务挂起和恢复的原理FreeRtos使用uxSchedulerSuspended变量来表示内核调度器的打开和关闭,当这个值大于0时,内核调度器打开,等于0时内核调度器关闭。我们可以在FreeRtos的Systick中断xTaskIncrementTick中比较清晰的理解这个变量的含义。xTaskIncrementTick函数的部分代码如下:Ba

2021-02-23 16:36:20 681 1

原创 FreeRtos源码分析之临界区(七)

一、概述FreeRtos临界区的作用是保证位于临界区内的代码在执行过程中不被其它中断或者任务打断。临界区的作用类似于互斥锁,不同的是临界区是通过直接操作寄存器来屏蔽中断,而互斥锁只是通过软件来实现对共享资源的保护。二、BASEPRI寄存器FreeRtos通过直接操作CortexM4或者CortexM3的BASEPRI寄存器来屏蔽中断。BASEPRI的作用是屏蔽优先级不高于某个具体数值的中断。当它被设置为某个值时,所有优先级值大于等于这个数值的中断都会被关闭(优先级号越大,优先级越低)。若被设置为0,则

2021-02-19 18:15:14 2691

原创 FreeRtos源码分析之任务通知xTaskNotify(六)

一、概述任务通知功能是FreeRtosV8.2.0版本推出的全新功能。任务通知在某些场景下可以代替二值信号量、计数信号量、事件组甚至是消息队列。任务通知功能和信号量、消息队列相比速度更快,占用的RAM也更少。但是任务通知功能也有它的局限性:任务通知消息能从中断发给任务或者从任务发给任务,但是不能从任务发给中断;任务通知消息只能发送给某个特定的任务,无法发送给多个任务;任务通知的消息一次只能保持一个值,无法向队列那样存储多个消息;消息对列或者信号量的发送可以阻塞等待,直到上一条消息被接收端处理,

2021-02-02 17:51:40 4540

原创 FreeRtos源码分析之vTaskList和vTaskGetRunTimeStats等调试函数(五)

一、概述在使用FreeRtos进行开发的过程中,我们通常需要了解系统的运行状态、内存、CPU使用情况等信息,来确保系统能够长期稳定的运行。FreeRtos提供了许多这样的接口,我们也可以通过阅读FreeRtos相关的源代码自己编写需要的Debug接口。通常我们需要用到的一些系统信息为:当前任务的剩余内存;当前任务历史最小内存;系统总的剩余内存;系统运行的总时间;单个任务的运行时间;每个任务占用的CPU时间;二、获取系统信息的相关函数2.1、vTaskList函数原型:void vT

2021-02-01 22:53:29 2020

原创 FreeRtos源码分析之任务切换原理(四)

一、CortexM3中断优先级CortexM3支持多达240个外部中断和16个内部中断,每一个中断都对应一个中断都对应一个优先级寄存器。每一个优先级寄存器占用8位,STM32采用其中的高四位来表示优先级,低四位不可用。FreeRtos一共会使用到三种中断:SysTick、SVC、PendSV。SVC在启动任务调度的时候使用;SysTIck定时器用于周期性的中断,为系统提供心跳;PendSV用于任务切换;对于实时操作系统而言,我们一般外部中断优先得到响应,所以SysTick和PendSV的

2021-01-26 19:05:02 875 1

原创 FreeRtos源码分析之任务状态管理(三)

一、概述FreeRtos的每一个任务都有一个对应的优先级,较高优先级的任务具有优先运行的权利,当高优先级的任务调用系统的延时函数或者需要阻塞等待某些信号时,会让出CPU的使用权,从而使低优先级的任务得以运行。FreeRtos支持抢占式调度,当低优先级的任务正在运行时,如果有高优先级的任务处于就绪状态,系统优先运行高优先级的任务。如果两个或者多个任务具有相同的优先级,这些任务会轮换运行,并且它们会占用相同的时间片。FreeRtos有两种切换任务的方式,一种是让内核自己按照约定好的规则进行切换,一种是调

2021-01-23 11:20:22 443 1

原创 FreeRtos源码分析之启动任务调度vTaskStartScheduler(二)

一、概述FreeRtos在创建任务之后,需要启动任务调度器才能使任务正常有序的运行。任务调度器的开启依赖于底层硬件,对于CortexM3内核而言,任务调度器需要用到中断和滴答定时器。FreeRtos在对中断优先级、空闲任务等进行初始化之后,会开启滴答定时器的中断,这样每隔1毫秒系统就会进入滴答定时器中断,FreeRtos会在这个中断中进行诸如记录系统运行时间、查找下一个就绪态任务等操作。换句话说,滴答定时器就是FreeRtos的心脏。FreeRtos任务调度需要用到CortexM3和汇编知识,可以结合C

2021-01-20 10:47:23 1891

arm-none-eabi-gcc 9.2.1 windows+linux版本

arm-none-eabi-gcc 9.2.1 windows+linux版本

2023-01-13

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

TA关注的人

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