自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

a只如初见的博客

无他,惟手熟尔

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

原创 J-Link RTT 移植和运行机制详解

*RTT全称是Real Time Transmit(实时传输)**是Segger公司推出的调试手段之一。它是一种用于嵌入式中与用户进行交互的技术。使用RTT可以从MCU快速输出调试信息和数据,且不影响MCU的实时性。只要支持J-Link的MCU就可使用RTT功能,兼容性非常强。RTT支持两个方向的多个通道,上到主机,下到目标,它可以用于不同的目的,为用户提供尽可能多的自由。默认实现每个方向使用一个通道,用户可在在调试终端输入和输出。

2024-01-08 18:28:36 1207

原创 FreeRTOS 查找最高优先级的就绪任务源码分析

就绪列表是一个数组, 数组里面存的是就绪任务的 TCB(准确来说是 TCB 里面的 xStateListItem 节点) ,数组的下标对应任务的优先级,优先级越低对应的数组下标越小(即数字优先级越小,逻辑优先级也越小)。空闲任务的优先级最低,对应的是下标为 0 的链表。configMAX_PRIORITIES 该宏定义在FreeRTOSConfig.h中,代表支持的最大优先级。我们看到configMAX_PRIORITIES 即为就绪任务列表的数组元素个数。

2023-08-24 17:31:35 439

原创 KEIL自带的Jlink怎么升级更换版本

V4.20以上的keil安装包中都自带Jlink驱动包,即当你安装了KEIL后,Debug或Download就是用的安装KEIL时附带安装的Jlink版本。那如果存在这种情况,你正在开发的芯片比较新,只有比较新的Jlink驱动软件才能支持,当你试图用Jlink调试或烧录时会弹出类似错误提示:也许你找到了需要的新版本Jlink的安装包,安装后。

2023-08-10 20:26:02 3728 2

原创 关于函数和变量命名

标识符是指用来识别某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。C语言的标识符一般应遵循如下的命名规则:1、标识符必须以字母a~z、A~Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中。2、标识符区分大小写字母。3、标识符的长度,c89规定31个字符以内,c99规定63个字符以内。

2023-06-28 17:18:59 566

原创 QT Creator上位机画波形之Qcharts使用学习

Qcharts是QT自带的组件,不需要另外添加文件。打开QT Creator,新建一个工程,命名可以参考下图:基类选择QWidget:.pro文件中添加charts模块运行效果:上面是一个折线图的示例。QLineSeries类以折线图的形式显示数据。折线图用于将信息显示为由直线连接的一系列数据点。先new一个QLineSeries,再逐一添加数据点,最后把实例化的QLineSeries与chart关联起来。

2023-06-27 19:23:16 2747

原创 QT Creator写一个简单的电压电流显示器

本文主要涉及上位机对接收的串口数据处理,LCD Number控件的使用。之前的一篇写一个简单的LED控制主要是串口发出数据,这里再看一下怎么接收数据处理数据,这样基本就对串口上位机有简单的认识了。

2023-06-16 16:30:13 1663

原创 QT C++入门学习(2) QT Creator写一个简单的上位机控制LED

上位机:指的是可以直接发送操作指令的计算机或者单片机,一般提供用户操作交互界面并向用户展示反馈数据。典型设备:电脑、平板、手机、面板、触摸屏下位机:指的是与机器相连接的计算机或者单片机,一般用于接收和反馈上位机的指令,并根据指令控制机器执行动作以及从机器传感器读取数据。典型设备:PLC、stm32、51、FPGA、ARM等各类可编程芯片。上位机软件:用于完成上位机操作交互的软件为了实现以上过程,上位机和下位机都需要独立进行编程,都需要专门的开发人员在各自的平台上编写代码。

2023-06-14 15:26:47 4197

原创 C语言#if,#ifdef,#ifndef条件编译用法汇总

条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。最常见的条件编译是防止重复包含头文件的宏,

2023-05-29 14:30:12 9682

原创 六轴传感器基础知识学习:MPU6050特性,四元数,姿态解算,卡尔曼滤波

实际上,只要说到多少轴的传感器一般是就是指加速度传感器(即加速计)、角速度传感器(即陀螺仪)、磁感应传感器(即电子罗盘)。这三类传感器测量的数据在空间坐标系中都可以被分解为X,Y,Z三个方向轴的力,因此也常常被称为3轴加速度计、3轴陀螺仪、3轴磁力计。上面3类传感器有其各自的功能特点及应用,比如加速度计可以测量设备的测斜情况,陀螺仪可以测量设备自身的旋转运动,还有磁力计可以定位设备的方位。

2023-05-18 16:48:18 19004 10

原创 QT如何打包生成独立可执行.exe文件

Enigma Virtual Box是软件虚拟化工具,它可以将多个文件封装到应用程序主文件,从而制作成为单执行文件的绿色软件。它支持所有类型的文件格式,虚拟化后的软件不释放任何临时文件到您的硬盘,文件模拟过程仅在内存运行。一般来说,打开命令行终端后默认是在QT的安装路径下,这样需要先把路径切过去到exe文件的路径下再使用 windeployqt 命令 + .exe文件名操作。下载后点击安装,安装过程一直next就行,注意勾选创建桌面快捷方式,默认是不创建的。(6) 最后点击执行封包,等待结束即可。

2023-05-11 10:22:06 14025 10

原创 QT初体验:手把手带你写一个自己的串口助手

本文记录一下用QT Creator 写一个基本功能齐全的串口助手的过程,整个工程只有几百行代码,跟着做下来对新手来说可以更快了解整个QT项目的开发过程和一些常用控件的使用方法。对新手学习QT能增强信心,话不多说,正文开始。

2023-05-09 19:36:14 6785 31

原创 QT C++入门学习(1) QT Creator安装和使用

进入链接后,是一个文件目录,依次进入这个路径:archive/qt/5.12/5.12.9/qt-opensource-windows-x86-5.12.9.exe点击下载qt-opensource-windows-x86-5.12.9.exe,官网直接下载很慢,建议用下面的国内镜像网站下载,下载来的文件都是一样的。

2023-04-29 14:11:09 3462

原创 Visual Studio C# WinForm开发入门(6):TreeView 控件使用

3、添加一个Button控件,Text属性改为:“确定”,Name属性改为enterButton。例如:顶级目录是根(C:),C盘下的每个子目录都是子节点,而每个子目录又都有自己的子节点。2、添加一个TextBox控件,适当拉长,Name属性改为inputTextBox。输入一个本机文件目录,用TreeView显示该目录的所有文件夹。1、添加一个Label控件,Text属性改为:“文件路径:”。AfterSelect:当所选节点发生变化时产生。TreeView控件用树显示节点层次。

2023-04-27 13:56:56 2288

原创 卡耐基《人性的弱点》精华总结

《人性的弱点》

2023-04-27 11:09:19 1108

原创 Visual Studio C# WinForm开发入门(5):TabControl 控件使用

默认情况下,TabControl控件包含两个TabPage控件,可以使用TabPage属性的Add方法和Remove方法实现选项卡的添加和删除。第一,当鼠标单击TabControl控件右上角带三角形的小按钮时就会打开一个小窗口,该窗口可以方便地在设计期间添加和删除TabPages集合。TabContrl选项卡控件可创建标签化窗口,在实际 编程中经常用到,该控件的作用是将相关的组件组合到一系列选项卡页面上。从工具箱添加一个TabControl控件,添加两个Button控件,更改Text为“添加”和“删除”。

2023-04-27 09:49:31 7724

原创 Visual Studio C# WinForm开发入门(4):概述

(3)本质:每次拖拽添加一个布局控件,就会在窗口相应的Designer.cs设计布局代码文件中的InitializeComponent()方法中自动生成布局代码(比如Location、Size等),来实现布局。(4)存在的问题:自动布局虽然方便灵活,但是当窗口大小拉伸改变时,布局控件不能实现自动适应,仍会保持原大小,因此自动布局只适用于窗口大小不变的情况。2.窗体GUI中,左上角为原点(0,0),竖直向下为y轴,水平向右为x轴(宽度表示x轴上长度,高度表示y轴上长度),单位为像素。

2023-04-26 10:43:23 3335

原创 Visual Studio C# WinForm开发入门(3):各种控件介绍

除了可以使用Windows自带的标准对话框外,用户还可以把自己设计的窗体定义成对话框。使用自定义对话框有以下几个要点。(1)将窗体的FormBorderStyle属性值设置为FixedDialog。(2)根据需要向窗体上添加控件。(3)使用窗体的ShowDialog方法显示窗体,即显示出对话框。

2023-04-25 11:16:54 14433

原创 Visual Studio 2019 C# 上位机入门(2):写一个简单的串口助手

本文记录一下用Visual Studio 2019 C# 写一个简单的串口助手的过程,由于没有先从小处学习,而是直接找相关资料就开始做,免不了很多奇怪的问题花了一些时间,基于此情况,我将尽可能整理出更多细节,尤其是我遇到的坑,以便和我一样的新手小白上手。后续我还准备单独分析Visual Studio上提供的一些控件的使用方法,以加深理解。话不多说,正文开始。

2023-04-21 17:09:25 8482 28

原创 Visual Studio 2019 C# 上位机入门(1):如何创建工程编写一个简单应用

如果找不到Windows 窗体应用,就参考这篇文章:https://blog.csdn.net/weixin_44084713/article/details/110850989。原因是在安装Visual Studio 2019的时候没有选择安装.Net的相关组件,如果安装的时候没点,那么就再单独安装一下也可以,具体参考文章里有。然后选择生成中的生成解决方案,在项目路径下的Release文件夹下可以找到生成的可执行文件。4、等待进入项目界面之后会看到一个空白窗体,如果要往里面加控件就选择工具箱的公共控件。

2023-04-20 17:14:14 6239

转载 FreeRTOS的内存管理方案

heap_1.c1)适用于项目不需要删除任务、信号量、消息队列等已经创建的资源。2)所申请的动态内存的时间是固定的,并且不会产生内存碎片。3)是一种静态内存分配方案,因为申请的内存是不会被释放掉。heap_2.c1)在不考虑内存碎片的情况下,这种方式支持重复的任务、信号量、事件标志组、软件定时器等内部资源的创建和删除。因为不使用的资源是支持释放的,所以可以让内存资源得到反复的使用!2)如果申请和释放的动态内存大小是随机的,不建议采用这种动态内存管理方式。

2023-04-14 15:53:12 453

原创 C语言常见面试题汇总

为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。一个整型数 int a;一个指向整型数的指针 int *a;一个指向指针的指针,它指向的指针是指向一个整型数 int **a;一个有10个整型数的数组 int a[10];一个有10指针的数组,该指针是指向一个整型数 int *a[10];

2023-04-03 20:38:03 8116 2

原创 1-Wire总线上挂载多个DS18B20温度传感器驱动程序

DS18B20 是一款温度传感器,单片机可以通过 1-Wire 协议与 DS18B20 进行通信,最终将温度读出。1-Wire 总线的硬件接口很简单,只需要把 DS18B20 的数据引脚和单片机的一个 IO 口接上就可以了。硬件的简单,随之而来的,就是软件时序的复杂。在每个 DS18B20 内部都有一个唯一的 64 位长的序列号,这个序列号值就存在 DS18B20内部的 ROM 中。

2023-03-29 16:43:24 2434

原创 MQTT协议史上最全解析(纯干货分享)

是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,并且该协议构建于TCP/IP协议之上,我们知道TCP协议本身就具有高可靠性的特点,因此基于其上的MQTT协议同样也是具有高可靠、低开销的特点,之所以低开销,是以为MQTT协议传输的最小的报文也只有两个字节。在这里需要注意的是:用户二(客户端)发布的消息并不是直接发布给了用户一,而是发布到了抖音平台(服务器),由于用户一订阅了用户二的消息(相当于点了关注),所以抖音平台(服务器)就会向用户一推送这个消息(注意发布和推送的区别)。

2023-03-23 16:26:59 8616

原创 DS18B20温度传感器简介和1-Wire驱动程序

DS18B20数字温度计提供9位到12位摄氏温度测量,并具有非易失性用户可编程上、下触发点报警功能。DS18B20通过一根单线总线与中央微处理器通信,根据定义,该总线只需要一条数据线(和地)。它的工作温度范围为-55°C到+125°C,在范围- 10°C到+85°C上精确到±0.5°C。此外,DS18B20可以直接从数据线获得电源(“寄生电源”),消除了外部电源的需求。每个DS18B20都有一个独特的64位串行代码,它允许多个DS18B20在同一根单线总线上工作。

2023-03-18 19:15:34 2337 2

原创 C语言不踩坑: 自动类型转换规则

首先我们要知道加法的计算机底层逻辑其实是按位相加,得到的结果数同样的内存数据,翻译成有符号数和无符号数都可以,a+b的结果-5从内存里看,与一个很大的无符号数的内存数据是一样的,前面判断(a+b)>0时,是按-5的内存数据无符号状态去和0比,后面打印结果时,用的是%d打印的是按有符号数据输出,即使a+b的结果是一个很大的无符号数,但按有符号看待的话结果就出来-5。这时因为有个自动转换的规则:有符号整型和无符号整型混合运算时,有符号型自动转换成无符号型,运算的结果是无符号的。

2023-03-04 17:13:27 1028 2

原创 C语言又一活久见操作: 初始化结构体数组时对结构体元素的成员赋初值

最近在某项目代码中看到一段代码,是在定义结构体数组时对数组中的元素进行赋值。根据前面定义结构体数组赋初值的例子,我又想到会不会普通数组也可以这样?

2023-02-19 23:57:37 453

原创 C语言运算符优先级和结合性一览表

目”就是“眼睛”的意思,一个运算符需要几个数就叫“几目”。6、此外要记住,对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符()和逗号运算符。3、另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是所有单目运算符,一个是三目运算符。> 算术运算符 > 关系运算符 > && > || > 赋值运算符。2、所有双目运算符中只有赋值运算符的结合方向是从右往左。

2023-02-19 17:09:27 933

原创 PID控制算法进阶

本文主要从PID算法代码实现,代码解析,理论进阶,PID调参等方向进行阐述。

2023-02-15 15:00:09 1668

原创 PID控制算法基础介绍

生活中的一些小电器,比如恒温热水器、平衡车,无人机的飞行姿态和飞行速度控制,自动驾驶等等,都有应用到 PID——PID 控制在自动控制原理中是一套比较经典的算法。为什么需要 PID 控制器呢?你一定用过恒温热水壶,想让热水壶的水保持在一个恒定的温度,这时候就需要一种算法先将水温加热到目标位置附近,能够“预见”这个水温的变化趋势自动控制加热功率,然后还能根据各种环境影响因素去调节以维持设定目标。

2023-02-13 20:43:27 3648

原创 C语言 常用标准库函数代码实现

memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);拷贝多少个?有一个size变量控制拷贝的字节数;dest表示拷贝到哪个目标,src表示拷贝源,加const修饰,防止被修改,n表示拷贝多少个字节返回void* 类型的原因,是为了使用链式表达,即strlen((char*)(memcpy(dest,src,n)),这样可以直接计算dest的长度,使程序代码更简洁。

2022-12-16 17:43:52 1409 1

原创 FreeRTOS任务切换过程深层解析

为了解决这种问题,早期的 OS 在上下文切换的时候,检查是否有中断需要响应,没有的话,采取切换上下文,然而这种方法的问题在于,可能会将任务切换的动作拖延很久(如果此次的 SYSTICK 无法切换上下文,那么要等到下一次 SYSTICK 再来切换),严重的情况下,如果某 IRQ 来的频率和 SYSTICK 来的频率比较接近的时候,会导致上下文切换迟迟得不到进行;可以看出,是一致的。C语言表达是*(–R0)={R4-R11},R0中值先自减1,然后将R4-R11的值保存到该值所指向的地址中,即PSP中。

2022-12-09 17:19:13 4472 2

原创 I2C通信时序解析

中文应该叫集成电路总线,它是一种通信总线,使用多主从架构,是由Philips公司在1980年代初设计的,主要用于近距离、低速的芯片之间的通信。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。

2022-11-25 18:01:31 3145

原创 C++ vector用法详解

学习vector,首先得需要清晰得知道其本质是什么,是一个关键字?是一种数据类型?是一个类?vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

2022-11-17 14:46:59 3109

原创 Makdown 文字处理方法汇总

汇总markdown的文字编辑处理方法

2022-11-14 17:21:35 167

原创 Keil MDK的sct分散加载文件详解

MDK 生成一个以工程名命名的后缀为 *.sct 的分散加载文件 (Linker Control File,scatter loading),链接器根据该文件的配置分配各个节区地址,生成分散加载代码,因此我们通过修改该文件可以定制具体节区的存储位置。工程构建时, MDK 会根据我们选择的芯片型号,获知芯片的内部 FLASH 及内部SRAM 存储器概况。这里我选择的是STM32F103VET6型号, 这款单片机有 64 KB 的 SRAM,512 KB的 ROM 内存,可以通过规格书查到。

2022-11-02 18:32:10 10375 3

原创 hex文件合并

打开我们的hex文件,就以BOOT和APP代码为例,用记事本或者其他的软件(notepad++等)打开hex文件最后一行是代表文件的结束,那么我们只需要删除boot文件的最后一行代码,然后把APP的代码的全部内容直接拷贝过来,接到boot文件的最后一行。

2022-10-26 17:17:55 4635

原创 Notepad++官网下载

官网好像一直进不去(应该是国内将其封禁了),所以如果点击进不去官网就请尝试下面的方法。该页面还能找到各种历史版本,点击Assets找到exe文件点击下载即可。亲测可以下载(这个网站有不少弹窗广告)notepad++ 官网地址。

2022-10-25 15:37:06 29781 1

原创 hex文件格式详解

hex文件格式详细解读,以及对比了bin文件有何区别,hex文件的存在价值。

2022-10-23 17:12:06 36443 7

原创 Source Insight 使用教程(4)——常用快捷键

快捷键常用快捷键F8 :高亮/取消高亮选中的字“Ctrl + G” 或 “F5” :跳到指定行“Ctrl+=” 或 Ctrl+鼠标点击标识 :直接跳转至标识定义处调用处Ctrl+F :本文件内查找,找出来的结果用F4,F3前进后退查找F3 :本文件查找结果的上一个F4 :本文件查找结果的下一个F7 :打开Browse Project Symbols窗口,快速浏览工程内标识定义Ctrl+M :创建或查找书签,方便下次找回此位置...

2022-08-16 15:22:53 4963 2

原创 Source Insight使用教程(3)——常用功能扩展篇

本文继续更新Source Insight的常用功能,某些功能的使用会大幅提高工作效率,避免把时间浪费在无意义的重复工作上。

2022-08-16 15:21:20 1765

空空如也

空空如也

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

TA关注的人

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