自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

八天一吨水的博客

From ignorance to common sense

  • 博客(64)
  • 收藏
  • 关注

原创 STM32+RTThread配置以太网无法ping通,无法获取动态ip的问题

移植rtthread的以太网驱动的时候出现无法获取动态ip的问题

2023-08-30 18:25:30 1067

原创 STM32启动模式详解

系统存储区实际上存放了一段ST事先写好的BootLoader程序,且不可以被修改,用于ISP下载,也就是串口方式下载,当我们将BOOT0拉高,BOOT1拉低时,也就是系统存储器模式启动,单片机会将0x1FFF 0000~0x1FFF 7A0F这段空间映射到0x0000 0000处,运行系统内置的BootLoader程序,也就是串口下载的程序,使用串口将程序下载到FLASH中,下载完成之后就将BOOT0拉低,重启,使用主FLASH的方式运行使用串口下载的程序了。1)主FLASH = 芯片内置的Flash。

2023-08-28 10:26:31 8002 2

原创 QT6 QML CMake工程添加qml到qrc中

使用qt6.2.4 qml的CMake工程时遇到qrc中的qml文件和图片无法使用的情况,查了好久终于找到解决办法,在此记录一下。

2023-08-07 17:28:18 1519

原创 C++万字自学笔记

C++万字入门级自学笔记

2023-07-10 19:07:37 43357 43

原创 C语言程序生命周期

可能大家都知道一个C语言程序需要经过编译生成可执行文件就可以运行起来,但是这并非是一个完整的C语言程序流程,下面我们就详细了解一下C语言程序的整个生命周期。

2023-06-30 20:50:11 923 1

原创 认识GCC

GNU是Linux系统下的一些工具包,GNU是GNU is Not Unix的缩写,因为当年Unix收费后,理查德·马修·斯托曼打算做一套GNU操作系统,当时GNU的工具包已经写好,就差内核即可组装成一个完整的操作系统,正好Linus写了一个内核,所以两者合并发布了GNU/Linux,后来传着传着就省略了名字前面的一部分,成为Linux。gcc是一个交叉平台编译器,比如交叉编译器gcc-arm 适合在嵌入式领域的开发编译。我的理解:GNU就是Linux系统中的一些工具包。使用wc命令查看两个文件的大小。

2023-06-30 20:19:41 351

原创 ESP32-OTA

OTA(Over-The-Air)是一种通过网络无线传输固件或软件更新的技术。它允许远程更新设备上的固件或软件,而无需物理连接或手动干预。OTA 技术在许多领域得到广泛应用,包括智能家居、物联网设备、嵌入式系统等。远程更新:通过 OTA,可以在设备部署在远程位置时对其进行更新,无需人工干预或物理连接。方便性和灵活性:设备可以通过无线网络自动下载和安装更新,用户不需要手动介入,提供了更大的便利性和灵活性。

2023-05-27 23:04:21 3006

原创 使用Dockerfile搭建rtthread 瑞萨开发环境

本质是根据代码仓库中的Dockerfile文件构建一个ubuntu系统,里面包含各种需要的工具,gcc git什么的,感兴趣的可以打开Dockerfile文件看看。问题说找不到EXEC_PATH,刚开始以为需要把windows上的路径也放到docker容器中,结果试了一下不行。把文件中的O_DIRECTORY全部改成FT_DIRECTORY,与文件系统有关的文件都有这个错误,需要全部改掉。最后修改rt_config.py中的EXEC_PATH,把原先的注释掉,改为系统中gcc的路径后成功。

2023-05-24 14:23:19 567 2

原创 C语言爬取HTML-爬取壁纸 文末附源码

这学期计算机软件课程设计的其中一个题目是使用C语言爬取HTML,本打算使用C语言的CSpidr库来实现,但是因为它的依赖liburi没有找到在哪里安装,所以放弃了这个想法,使用的是curl以及libxml2这两个库,能够提供访问网页以及xpath解析的功能就够用了。项目使用C语言爬取壁纸,爬取的网站是https://wallhaven.cc开发环境使用的是Ubuntu22.04,编译器gcc 11.3,使用makefile管理项目。

2023-05-18 16:04:56 667

原创 【零基础QQ机器人开发三】程序上云篇

基础的程序以及windows下的环境配置我们已经在。

2023-05-12 10:20:39 426

原创 纪念一下自己做的第一款开发板

之前乐鑫搞活动白嫖了10个ESP32-S2模组,想着把它给利用了,然后先从一个开发板做起,等玩明白了再去做一些自己的设计,从网上找了一些资料就开始干,中途也是遇到了一些问题,有的解决了,有的还没解决,如果有懂的大佬,欢迎指点一下。

2023-05-11 22:54:21 643

原创 嵌入式TCP/IP协议栈-LwIP

LWIP是一个轻量级的TCP/IP协议栈,其全称为Lightweight IP,它专门为小型嵌入式系统设计,具有占用资源少、易于移植、可裁剪性高等特点。LWIP的设计目的是为嵌入式设备提供一个高效的TCP/IP协议栈,以便这些设备可以方便地访问Internet或局域网。它支持IPv4和IPv6协议,并实现了TCP、UDP、IP、ICMP、ARP、DNS等协议,可以满足各种嵌入式设备的网络通信需求。LWIP的源代码开放,可以在开源协议下自由使用和修改。它已经被广泛应用于各种嵌入式系统,如ARM、AVR

2023-05-09 23:09:24 3354

转载 Linux网络IO基础

直接丢掉其他客户端的连接肯定不是一个很好的解决方法。如果len小于或者等于s的发送缓冲区的长度,那么send()函数先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么send()函数就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小send()函数就一直等待协议把s的发送缓冲中的数据发送完,如果len小于剩余空间大小send()函数就仅仅把buf中的数据拷贝到s的发送缓冲区的剩余空间里。

2023-05-08 18:17:17 469

原创 ARM知识扫盲-RISC架构-ARM寄存器-ARM指令集

ARM本身使用的是RISC精简指令集架构,除此之外还有开源的RISC指令集架构RISC-V,复杂指令集CISC(Complex Instruction Set Computer)等等RISC(Reduced Instruction Set Computer,精简指令集计算机)是一种计算机体系结构,其设计理念是通过精简指令集和简化指令执行过程来提高计算机的性能和效率。简单指令集:RISC架构采用了一组精简、简单和固定长度的指令集。这些指令通常具有固定的操作数和操作码格式,并且执行时间相对均匀。

2023-05-05 20:33:07 1538

原创 ESP-IDF中的event loop library事件循环库

Event Loop Library是一种信号传递机制,事件循环库允许组件声明事件,其他组件可以向其注册处理程序——当这些事件发生时将执行的代码。这允许松散耦合的组件将所需的行为附加到其他组件的状态更改,而无需应用程序参与。这也通过将代码执行序列化和延迟到另一个上下文来简化事件处理。假设现在有A B C三个线程,A B C中的某个标志位发生变化时分别进行相应的处理,这样每个线程只能处理自己所关注的标志位,并且当多个标志位发生变化需要组合处理时,这种方式不能够满足需求了,需要使用事件循环库。

2023-05-04 12:35:42 878

原创 ESP-IDF开发框架添加自定义组件 ESP32-C3

因为熟悉了STM32的开发方式,同时随着项目文件越来越多,可以将自己写的代码分模块添加到工程中,下面分析如何将自己写的组件添加到工程中使其能够正常编译运行。在ESP-IDF中,构建,编译,以及下载都是通过idf.py脚本来实现的,该脚本使用CMake,配置待构建的项目Ninja,用于构建项目esptool.py,烧录目标硬件设备- Kconfig- src1.c- Kconfig- src1.c- src1.c- src2.c- build/

2023-05-03 21:31:47 2875

原创 Vscode搭建ESP-IDF开发环境指南-Ubuntu ESP32-C3 合宙

本打算用WSL来开发,但是遇到了WSL2无法直接使用Windows的USB串口的问题,微软本身也提供了解决方案,但最重要的是合宙的这个板子用了ch343这款串口芯片,在wsl上无法安装驱动,所以只能用虚拟机或者直接安装ubuntu双系统的方案了。开发板使用的是合宙的ESP32-C3经典版,因为合宙本身推荐使用合宙推出的LuatOS开发环境,所以没有ESP-IDF相关的教程,只能参考乐鑫官方的ESP-IDF教程。最下面的一栏里有构建,烧录,以及串口监视按钮,还有一键编译烧录,非常方便。

2023-05-02 13:33:29 2132 1

原创 GPIO_Strapping管脚

在芯片的系统复位(上电复位、RTC 看门狗复位、欠压复位、模拟超级看门狗 (analog super watchdog) 复位、晶振时钟毛刺检测复位)过程中,Strapping 管脚对自己管脚上的电平采样并存储到锁存器中,锁存值为“0”或“1”,并一直保持到芯片掉电或关闭。Strapping 管脚通常由芯片或器件的制造商在数据手册中进行说明。我的理解是在ESP32中,当系统复位时,Strapping引脚会保存复位时刻的电平值到寄存器中,然后根据这几个管脚的电平组合选择不同的启动模式。

2023-04-28 21:30:18 4658

原创 C语言中的全局、静态、局部变量

BSS段在可执行文件中会占据一定的空间,但在文件被加载到内存时,操作系统会自动将BSS段中的数据初始化为零或空值。需要注意的是,如果局部变量被声明为静态(static)变量或带有 static 限定符,它们的存储位置将不再是栈,而是存储在静态数据段中。在 C 语言中,未初始化的全局变量和局部变量的初始值是不确定的,它们的值取决于所分配的内存区域的内容。对于局部变量,未初始化的局部变量的初始值是未定义的。因此,通常情况下,未初始化的全局变量会放置在BSS段,已初始化的全局变量会放置在数据段。

2023-04-28 15:58:05 2933

原创 【致敬未来的攻城狮计划】认识RA2E1

开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯(http://yyds.recan-li.cn)和 瑞萨MCU (瑞萨电子 (Renesas Electronics Corporation) ) 联合发起的「 致敬未来的攻城狮计划 」的第 1 天,点击查看活动计划详情 (https://bbs.csdn.net/topics/613916237)!

2023-04-17 22:49:47 180

原创 【致敬未来的攻城狮计划】RA2E1环境搭建&点亮发光二极管

开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家和 瑞萨MCU (瑞萨电子 (Renesas Electronics Corporation) ) 联合发起的「 致敬未来的攻城狮计划 」的第 2 天,!

2023-04-17 22:46:54 640

原创 STM32F407移植LVGL基于RT-Thread和无操作系统版本

LVGL移植前言:本次LVGL移植分为有操作系统和无操作系统两种方式。操作系统使用的是硬件使用野火STM32F407霸天虎开发板,屏幕使用nt35510显示IC,触摸使用gt917s芯片。

2023-04-15 00:23:38 2437 1

原创 STM32F4驱动OV7670总结

之前因为贪图便宜买了一个7块钱的ov7670摄像头,然后想用我的stm32开发板驱动起来结合rtthread做个小项目出来,但是一路上遇到了许多问题,最终没能成功,在此记录一下用stm32驱动ov7670失败的过程。

2023-04-05 13:36:26 4443

原创 使用 RT-Thread Studio 和 STM32CubeMx 开发驱动

本文参照官方参考文章,只不过官方的教程有些过时,在此基础上重新实现一遍。使用 RT-Thread Studio 和 STM32CubeMx 开发驱动可分为以下几个步骤使用 RT-Thread Studio 新建 RT-Thread 工程使用 STM32CubeMx 配置外设和系统时钟复制 stm32xxxx_hal_msp.c 函数修改 stm32xxxx_hal_config.h 文件,打开相应外设支持。替换 board.c 文件中时钟配置函数使用外设。

2023-03-28 20:26:59 1962

原创 Linux进程、线程、exec函数族

静态文件。

2023-03-18 17:35:48 592

原创 Linux IO操作

Linux系统下的IO操作分为系统IO和标准IO系统IO为Linux系统内核提供的API、标准IO为C语言在Linux操作系统下的API。

2023-03-18 15:33:17 645

原创 STM32UART三种收发模式基于HAL库

解决办法:可以通过判断空闲中断标志位来确定数据是否收发完毕,进入空闲中断处理数据。发送完成中断与接收完成中断是收发指定数量的字节后进入中断,不能收发随机字节数据。当发送一半或者发送完成可以使用中断回调函数处理中断事件。当接收一半或者接收完毕可以使用中断回调函数处理中断事件。DMA与中断的使用方式相同。发送一个字符进入一次中断。UART中断发送模式。UART中断接收模式。

2023-03-17 11:30:11 644

原创 VSCode+gcc开发STM32教程

最近在使用Keil开发STM32的时候总感觉代码写起来很很费劲,然后打算用vscode试试,刚开始用的是KeilAssitance这个插件,本质还是使用Keil进行配置,vscode写代码,体验了一下感觉还是不方便。后来想到了Linux,毕竟在写代码这方面,Linux的体验还是非常棒的。

2023-03-05 20:49:23 3853 6

原创 STM32学习笔记-SPI

通过写 SPI 的“本成员设置 SPI 的通讯方向,可设置为双线全双工 (SPI_Direction_2Lines_FullDuplex),双线只接(SPI_Direction_2Lines_RxOnly),单线只接收 (SPI_Direction_1Line_Rx)、单线只发送模式(SPI_Direction_1Line_Tx)。这是 SPI 的 CRC 校验中的多项式,若我们使用 CRC 校验时,就使用这个成员的参数 (多项式),来计算 CRC 的值。CHPA:时钟相位,CHPA=0,奇数边沿采样。

2023-03-01 18:21:24 1020

原创 RT-Thread内核学习笔记

在裸机系统中所有代码都运行在一个main函数中,只能按照顺序运行程序,当遇到中断时才会打断当前程序,用以提高系统的实时性。如果遇到软件延时等情况,CPU只能在那空转,大大浪费了CPU的性能。而多线程是多个独立且无法返回的函数,就好比有多个裸机系统的main函数同时运行。如果把裸机系统比做单车道,那么多线程就是多车道。

2023-03-01 13:34:13 397

原创 C语言查漏补缺(进阶)volatile、__attribute__、void*、地址对齐、$$Super$main

最近在学习RT-Thread,在看其源码的时候发现了许多自己不太了解的C语言知识点,在此查漏补缺一下。

2023-03-01 13:33:01 1445 1

原创 STM32学习笔记-DMA

**DMA(Direct Memory Access, 直接存储区访问)**,用于**外设与存储器**之间、**存储器与存储器**之间的高速数据传输。其最主要的特点是**不占用CPU资源**。当我们需要将一个外设的数据转存到存储器中时,我们可以通过CPU读取外设数据并向存储器发送。当程序越来越庞大,功能越来越多的时候,这样直接使用CPU传输数据的方式就不太合适了。

2023-03-01 13:17:05 3351

原创 STM32学习笔记-USART串口通信+与野火STM32F407板载ESP8266进行通信

USART全称,即同步异步收发器。与学习51时的UART不同的是UART名称中少了个S,即没有同步收发功能。

2023-02-28 11:04:42 4746 7

原创 STM32学习笔记-I2C通信协议

两根通信线SCL(时钟线)、SDA(数据线)同步半双工,支持总线挂载多设备。

2023-02-26 19:52:04 4830 1

原创 RT-Thread移植到STM32F407

首先到rtthread官网下载rt-thread nano后解压解压后打开后内容如下各文件夹的作用如下:拷贝一份到Keil工程的工程根目录下,示例工程采用野火STM32F407霸天虎的使用固件库点亮LED灯的代码,示例代码可以去野火官网下载。bsp里面存放了不同板子的示例,我们只需要保留和这两个配置文件即可,其他的均可删除docs存放了移植教程的地址,可以删掉libcpu里存放与处理器相关的接口文件,因为本次是移植到STM32F407,所以我们只需要保留``libcpu/arm/cortex-m4`这一个文

2023-02-23 14:38:30 4033 14

原创 STM32学习-NVIC、EXTI、SysTick

形参 ticks 用来设置重装载寄存器的值,最大不能超过重装载寄存器的值 2 24,当重装载寄存器的值递减到 0 的时候产生中断,然后重装载寄存器的值又重新装载往下递减计数,以此循环往复。计芯片的时候会对 Cortex-M4 内核里面的 NVIC 进行裁剪,把不需要的部分去掉,所以说 STM32的 NVIC 是 Cortex-M4 的 NVIC 的一个子集。NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。4是与门,当中断屏蔽寄存器为0时可以屏蔽中断。

2023-02-23 14:34:48 917

原创 ESP8266小车总结

历时大半个月的时间,第一版WiFi小车终于做好了从前端操作页面到后端的芯片控制,中间历经了太多困难,现在在此总结一下。

2023-01-09 11:25:33 1212

原创 Makefile&CMake

今天本打算学习C++中的内存模型,以便于更加深入地了解程序的运行过程,但是在看书的过程中遇到了变量的链接性问题,本想写个程序试一试变量的链接性问题,结果发现不会写CMake,在网上查找CMake的资料后又发现了CMake和makefile这个是类似的,心想不如一起学了。然后在此总结一下。一个C程序要想从代码变为可执行的文件,需要经过两个过程:、,一般我们在windows开发环境下使用Visual Studio,CLion等IDE(集成开发环境)时,编译器会自动执行这两步命令,无需经过复杂的操作,这也是IDE

2022-11-29 19:04:35 1103

原创 C++Vector和deque容器

动态扩展并不是在原有的空间进行扩展,而是新建一个比原来更大的空间,空间的大小由vector内部的算法确定。如果vector要存放的数据比较多,可以直接预留足够的空间,不用一次次地动态扩展,影响性能。与数组类似,但是数组是固定长度,vector是长度可变的,可以动态扩展的。作用:提前预留空间,减少动态扩展容量时的扩展次数。vector是STL中最常用的一种数据结构。deque是一个双端数组,可对头端进行插入。reserve只预留空间不初始化数据。利用算法实现deque内部数据的排序。

2022-11-23 21:20:52 683

原创 C++String类常用函数总结

string是C++中用于管理字符的一个类本质上字符在string类中是char *类型的变量,只不过被封装成了一个类,这个类中重载了很多运算符,使其像个数组一样。下面总结了一些string类的函数和重载的运算符

2022-11-22 21:21:18 2200

slenium自动化体温上报,含验证码识别

selenium写了一个自动上报体温的脚本,因为之前也没有认真学过selenium,只是简单的听说过,只知道selenium是一个模拟浏览器进行访问的一个利器,不过我觉得selenium学起来挺简单的,不过写脚本这一路也是挺曲折的,因此在这里记录一下,总结经验,方便以后继续使用selenium

2022-09-03

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

TA关注的人

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