自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【RTOS】快速体验FreeRTOS所有常用API(3)同步与互斥

队列(queue)、信号量(semaphoe)、互斥量(mutex)、事件组(event group)、任务通知(task notification),都能实现同步、互斥。总结括它们的联系、区别以及在使用时的如何选择。

2024-01-17 15:08:33 428

原创 【RTOS】快速体验FreeRTOS所有常用API(11)打印空闲栈、CPU占用比

是一个 FreeRTOS 函数,用于获取系统中每个任务的运行时间统计信息。这个函数允许你了解每个任务在系统中的运行时间百分比,以及每个任务实际运行的时钟滴答数。此外,FreeRTOS 还提供了与空闲任务关联的钩子函数,空闲任务的循环每执行一次,就会调用一次钩子函数。在FreeRTOS中,要打印任务的空闲栈(空余空间),可以使用任务状态查询函数。要打印所有任务的栈信息,你可以使用FreeRTOS的任务列表查询函数。FreeRTOS 中的空闲任务是一个特殊的任务,优先级为0。

2024-01-16 21:11:18 1247

原创 【RTOS】快速体验FreeRTOS所有常用API(10)资源管理

函数来暂停和恢复调度器。这对于禁止任务切换非常有用,可以确保在关键部分的代码中不会发生任务切换。宏来屏蔽和恢复中断。适用于需要禁止中断的关键代码段。任务调度器的运行依赖于时钟中断(SysTick),用 队列、信号量/互斥量、事件组、任务通知 都可以实现互斥操作。(任务抢资源,就关任务调度器。中断抢资源,就关中断)该代码尽量做到最简,不添加多余的、不规范的代码。资源管理涉及到任务之间对共享资源的。在FreeRTOS中,可以使用。在FreeRTOS中,可以使用。他们实现互斥的本质,其实就是。

2024-01-16 21:08:50 466

原创 【RTOS】快速体验FreeRTOS所有常用API(9)中断管理

FreeRTOS中很多API函数都有两套:一套在任务中使用,另一套在ISR中使用。:很多API函数会导致任务进入阻塞状态,但中断函数不能进入阻塞状态,所以设置了一套中断专用函数。中断服务例程是由中断触发执行的函数。在FreeRTOS中,通常会使用。等宏来实现从中断服务例程中让出CPU,以确保在中断处理完成后能够。FreeRTOS中的中断管理主要涉及:两套API、中断服务编写。

2024-01-16 17:19:35 371

原创 【RTOS】快速体验FreeRTOS所有常用API(8)软件定时器

FreeRTOS中的软件定时器是一种在任务中运行的定时器,通过 FreeRTOS 内核提供的软件定时器服务实现。软件定时器允许你在任务中创建、启动、停止和删除定时器,以执行一些任务或回调函数。注意,这些函数的 xTicksToWait 表示的是,把命令写入命令队列的超时时间。xTicksToWait 不是定时器本身的超时时间,不是定时器本身的"周期"。中被调用的,守护任务不是专为某个定时器服务的,它还要处理其他定时器。该代码尽量做到最简,不添加多余的、不规范的代码。函数启动软件定时器。

2024-01-16 17:18:02 419

原创 【RTOS】快速体验FreeRTOS所有常用API(7)任务通知

用于在任务之间进行通信和同步。任务通知是由二进制信号量和事件组实现的,提供了更简单和更高效的方式来实现任务间的同步。该代码尽量做到最简,不添加多余的、不规范的代码。任务1发出通知,任务2等待通知。这将向指定任务发送一个通知。函数等待接收任务通知。函数向任务发送通知。

2024-01-16 17:16:20 413

原创 【RTOS】快速体验FreeRTOS所有常用API(6)事件组

时,FreeRTOS的事件组(Event Group)就变得非常有用。事件组允许任务等待多个事件中的任何组合,从而实现复杂的同步和通信操作。该代码尽量做到最简,不添加多余的、不规范的代码。函数等待指定的事件位被设置为1。函数将指定的事件位设置为1。这将设置事件组中对应的事件位。当你在一个多任务系统中需要。函数来创建一个事件组。

2024-01-16 17:15:01 376

原创 【RTOS】快速体验FreeRTOS所有常用API(5)信号量、互斥量

因为任务创建顺序,1、3先执行,先获得信号量,等任务1或3 释放信号量后,任务2才能执行。比如OLED,任务1正在用,任务2也来用,就会出错,之前用的是全局变量的方式来实现的OLED这个共享资源的保护。比如对于串口,任务A正使用它来打印,在打印过程中任务B也来打印,客户看到的结果就是A、B的信息混杂在一起。在多任务系统中,任务A正在使用某个资源,还没用完的情况下任务B也来使用的话,就可能导致问题。:使用互斥量,对OLED这个共享资源进行互斥保护,替换之前用全局变量做的简陋互斥。互斥量是一种特殊的信号量。

2024-01-16 11:02:26 959

原创 【RTOS】快速体验FreeRTOS所有常用API(4)队列

代码设置的是任务1 写队列较快,所以现象是任务1 的cnt很快的加到20(20为我们创建的队列最大长度),然后阻塞,等任务2 去读队列,任务2每次读一个数据,队列就变为非空,任务1就被唤醒,cnt就++。队列提供了一种安全且高效的方式,允许一个任务将数据发送到队列,而另一个任务则从队列中接收数据。该代码尽量做到最简,不添加多余的、不规范的代码。(1)队列的概念、创建、写队列、读队列。(1)任务1写队列,任务2读队列。函数来创建一个队列。任务1写队列,如果满了就阻塞。任务2读队列,如果空了就阻塞。

2024-01-15 21:05:12 449

原创 【RTOS】快速体验FreeRTOS所有常用API(2)任务管理

通过三种任务创建方式,创建三个任务task1、task2、task3,每个任务在OLED上显示各自的字符串,运行几秒后删除任务。在三个任务中添加用户代码,让OLED分别显示各任务的cnt++。动态内存分配方式创建任务、静态内存分配方式创建任务、带有任务参数方式创建任务。这行代码,每次执行的时间间隔是**确定的,这行代码在周期执行,每500。这行代码,每次执行的时间间隔是**不确定的,总会有个10。两种函数的使用感受是很明显的,OLED显示有明显区别。该代码尽量做到最简,不添加多余的、不规范的代码。

2024-01-15 21:02:14 461

原创 【RTOS】快速体验FreeRTOS所有常用API(1)工程创建

使用STM32CubeMX,可以手工添加任务、队列、信号量、互斥锁、定时器等等。FreeRTOS的参数包括时基频率、任务堆栈大小、是否使能互斥锁等等,需要开发者根据自己对FreeRTOS的了解以及项目开发的需求,来定制参数。添加MCU-F103等用户自己的代码,包含LED、UART、OLED驱动等。修改 默认任务 的代码为下图,用于测试LED、UART、OLED程序。选择下载器类型,我用的是DAP。该代码尽量做到最简,不添加多余的、不规范的代码。这次用的外设有:LED、串口调试、OLED显示。

2024-01-15 20:58:27 1858 1

原创 【C】struct 、struct 指针

结构体的定义使用structint x;int y;在这个例子中,定义了一个名为Point的结构体,它有两个成员变量x和y,均为整型。int x;int y;// 定义并初始化结构体指针。

2024-01-12 16:38:46 390

原创 【C】预处理指令 #define, #include, #if...#elif...#else...#endif

宏虽然有其用处,但在实际编程中应慎重使用,确保宏的使用不会导致代码可读性下降或产生难以维护的问题。在实际编程中,尽量使用函数代替宏,以提高代码的可读性和维护性。

2024-01-12 16:12:40 1207 1

原创 【C】volatile 关键字

volatile的使用需要谨慎,特别是在多线程编程中,建议使用专门设计用于同步的机制来保障正确性。volatile不能替代更强大的同步手段,如互斥锁、原子操作等。

2024-01-12 10:48:24 499

原创 【C】const 关键字 xTaskCreate(const char * const pcName)

当你将函数的形参改为指针时,实际上是传递了变量的地址而不是变量的值,这样可以避免在内存中复制一份新的副本,从而减少内存的使用。这个时候,如果传入指针参数的同时,不想修改实参,就可以用const修饰输入的指针参数,表明在函数内部不能修改这个参数的值。:const修饰的是指向的值,指针指向可以改,指针指向的值不可以更改。:const修饰的是指针,指针指向不可以改,指针指向的值可以更改。还可以将变量声明为只读,即不能在后续的代码中修改它的值。传递给函数的形参,通过这个地址可以访问和修改实际参数的值。

2024-01-12 09:43:34 782 1

原创 【C】extern 关键字

经常与头文件一起使用,以便在多个源文件中共享声明。这有助于避免在多个文件中重复定义相同的变量或函数。当我们在一个源文件中定义了一个全局变量,并且想在其他源文件中使用它时,可以在其他文件中使用。用于声明在其他源文件中定义的变量或函数,以便在当前文件中使用。可以用于声明一个在其他源文件中定义的函数。是C语言的一个关键字。,而不需要重新定义它。,而不需要重新定义它。

2024-01-11 21:09:38 442

原创 【C 】static 关键字

这些是static在C语言中的一些常见用法。static的使用可以提高程序的模块性和封装性,防止命名冲突,并在一定程度上控制变量和函数的可见性。一般,不希望其他文件调用本文件的XXX函数,就用static修饰它。一般,不希望其他文件调用本文件的YYY变量,就用static修饰它。

2024-01-11 20:39:30 397

原创 【C】typedef 关键字 typedef int (*Operation)(int, int);

通过使用typedef,可以增强代码的可读性,使得数据类型的含义更加清晰。特别是在处理复杂的数据结构、函数指针等场景时,typedef能够简化代码,使其更易理解。总体来说,typedef是一个在C语言中用于创建类型别名的强大工具,通过它,你可以提高代码的可维护性和可读性,使代码更容易理解。

2024-01-11 19:46:01 533

原创 【C】函数指针 int (*addPtr)(int, int);

在C语言中,函数指针是指向函数的指针变量。就像普通指针指向变量一样,函数指针指向函数。是函数返回类型,是指针变量的名称,是函数参数的类型。

2024-01-11 19:39:14 693

原创 【C】void指针(通用指针)

当谈到C语言中的void指针时,我们首先要理解指针的基本概念。指针是一种变量类型,它存储了一个内存地址,这个地址指向计算机内存中的某个特定位置。C语言中的指针可以指向不同类型的数据,例如整数、浮点数、字符等。而void指针(void *)是一种特殊类型的指针,它可以指向任何类型的数据。换句话说,void指针是一种泛型指针,因为它不关心所指向数据的具体类型。这种特性使得void指针在某些情况下非常有用。

2024-01-11 15:51:41 548

原创 【软著写作】软著写作过程记录

这两天填报了一篇软著,正好将以前第一次填报时,踩的一些坑和过程记录了一下,给实验室学弟学妹参考,仅作参考。以前是需要邮寄纸质材料,今年改版了,全线上,全部上传电子文档就行。注意!注意!注意!下面仅代表个人经历经验,可能会有错误,自行甄别。

2023-11-03 21:48:24 719 2

原创 【QT+CUDA】QT中使用cuda,QT+VS+cuda下载安装配置

(要翻墙):https://developer.nvidia.com/cuda-toolkit-archive一路next,自定义安装。组件只选CUDA。如果安装cuda前没安装vs,取消勾选Visual Studio Integration。参考教程:https://blog.csdn.net/chen565884393/article/details/1279054282.4 卸载用geek卸载,卸载NVIDIA相关的,仅下面3项不卸载官网下载,从版本开始,官方不再提供离线版安装包,除非你充

2023-09-27 17:13:25 907

原创 【编译】gcc make cmake Makefile CMakeList.txt 关系、使用

makefile在一些简单的工程完全可以用人工手写,但是当工程非常大的时候,手写makefile也是非常麻烦的,并且如果换了个平台makefile又要重新修改。当你的程序只有一个源文件时,直接就可以用gcc命令编译它。但当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大,所以出现了make工具。make 工具通过读取 makefile 中的规则来确定需要重新编译哪些文件,以及执行哪些命令来完成编译过程。3 -l -L 指定库文件 | 指定库文件路径。将源代码转为可执行文件。

2023-07-31 17:07:50 923

原创 【C++】C++学习笔记

所谓数组,就是一个集合,里面存放了相同类型的数据元素特点1:数组中的每个==数据元素都是相同的数据类型==**特点2:**数组是由==连续的内存==位置组成的数据类型 数组名[ 数组长度 ];数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};数据类型 数组名[ ] = { 值1,值2 ...};示例//定义方式1//数据类型 数组名[元素个数];//利用下标赋值//利用下标输出//第二种定义方式。

2023-07-03 14:11:07 2709

原创 【SPI】STM32 SPI 双机通信,SPI从机模式使用

主机中断模式发送,从机中断模式接收,不停的收发清空标志,数据就会乱,可能是传的太快了?主机DMA发,从机DMA收,直接死机,DMA中断被刷爆,while里的程序没机会执行,可以屏蔽掉DMA中断,程序不会在死机,但是,数据会乱。基础的工程配置,这边就不贴图了,可以看这个有详细的步骤:http://t.csdn.cn/Wpcpk。最近要用到STM32的SPI从机模式,从其他板子读SPI数据过来,踩了2天坑,记录一下过程。这个我就不演示了,就正常流程,注意就行,在main里启动中断,在中断函数里再次启动中断。

2023-06-28 11:04:57 13395 15

原创 【硬件】嵌入式板卡硬件电路设计、焊接

RS485是在RS232的基础上进一步提升,将单端信号变成了差分信号,两条线来表示1个信号量。RS232就是在UART的基础上,把电平范围拉到了正负15伏,用于抵抗干扰。MAX490/MAX3490(更完善了,增加了输入信号上拉,TVS加了两个)一般CPU和MAC集成在一起,网络变压器和RJ45接头集成在一起。3 V3引脚,3.3供电时接3.3,5V供电时接0.1uf电容。**主要包括四种元器件:**MOS、电感、输入电容、输出电容。2 VCC可输入3.3和5,对应输出TTL电平也是3.3和5。

2023-04-09 10:11:45 1944 1

原创 【HAL库】BMP180气压传感器+STM32,hal库移植

采用模拟IIC,任意选两个io口设置为推挽输出模式。我这边选B7 B6。将BMP180从标准库移植到HAL库。外设:模拟IIC B6 B7,串口1调试用。在keil工程中导入之前写好的.c.h文件。只需要修改下面2行代码即可任意改变引脚。配置串口1,重映射printf。板子:c8t6最小系统板。

2023-04-09 09:32:34 1020 1

原创 【HAL库】STM32+ESP8266+Onenet+MQTT,极简工程,hal库移植。

从标准库移到了HAL库,过程有点麻烦,整了一天。做完后整理了一下,这个极简的工程,方便以后开发,也希望能帮助大家,节约时间。接收部分:用串口中断接收esp8266发来的消息。随便在哪个文件夹填加串口回调函数,我个人是之前专门建了个uart.c文件放串口相关的所有代码。发送部分:在esp8266.c里,将huart3全部替换为要修改的串口号,比如串口2。串口1用于调试,串口3用于ESP8266通信,打开中断。外设:串口1用作调试,串口3用作esp8266。基础的我就不配置了,可以看前面的详细讲解。

2023-04-08 22:20:33 3308 29

原创 【HAL库】HAL库STM32cubemx快速使用

stm32cubemx快速使用,各类模块汇众。OLED、BH1750、MQ2、MQ4、DHT11、SGM SIM900A、BMP180、ESP8266 Onenet MQTT、HTTP

2023-04-04 20:05:11 3718 8

原创 AD使用教程 图文并茂 AD2020四层板

AD20。功能原理图快捷键PCB快捷键放线1alt+1放网络标签 / 放过孔2alt+2删除3alt+3线选44框选alt+4alt+4矩形摆放无5左对齐66垂直分布alt+6alt+6顶对齐77水平分布alt+7alt+7铺铜无8移动M+MM+M精准移动Alt+MAlt+M自定义快捷键快捷键冲突,更改已有快捷键。

2023-02-20 09:46:09 22226 10

原创 【四旋翼】pixhawk2.4.8-地面站配置-APM固件-四旋翼从装机到试飞

因为MP版本和APM版本的适配问题,真的真的是很大一个坑。最好先走别人走过的路,走通了再去自由发挥,不然白白浪费时间。下面提供我试飞成功过的版本。下面提供任意版本固件和地面站的下载方法。

2023-02-10 21:19:41 17078 6

原创 【linux】Linux基础知识学习笔记

命令:即Linux操作指令,是系统内置的程序。本体就是一个个的二进制可执行程序,和windows里的.exe是一个意思。通过which可以查具体位置。例如which cd。命令行:即Linux中断,提供命令执行页面。环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。env命令即可查看当前系统中记录的环境变量环境变量是一种KeyValue型结构,即名称和值envLinux环境变量可以用户自行设置,其中分为:export 变量名=变量值。

2023-01-11 15:14:54 1914

原创 【远程桌面】nomachine下载安装使用教程、zerotier下载安装使用教程超详细

NoMachine是一款远程桌面软件。适用于Linux、windows、ARM、Android等几乎全系统。常见的远程桌面软件还有向日葵、ToDesk等。选择NoMachine是因为它支持ARM32位、ARM64位处理器。ZeroTier是一款内网穿透软件,通过建立虚拟局域网,能够实现设备之间的远程访问。比如在家里用手机访问实验室中的电脑。(1)仅安装NoMachine,只能在局域网中实现远程桌面控制。适用于同一局域网设备。(2)NoMachine+ZeroTier,可以实现非局域网远程桌面控制。

2023-01-04 22:24:39 29300 11

原创 【华为重启门】华为/荣耀手机一直自动重启原因&解决方案(荣耀V10)

荣耀V10,莫名其妙的、无规律的死机重启。一开始是重启后进入紧急备份,无法正常开机。之后莫名其妙可以正常开机了,但是总是会重启。

2023-01-03 17:52:08 30595 15

原创 【台式机DIY】我的第一台台式机&电脑配置清单

【台式机DIY】我的第一台台式机&电脑配置清单

2023-01-03 08:56:06 2415

原创 【FOC无刷电机控制】六步换向、FOC,STM32cubemx从零开始搭建BLDC六步换相代码、FOC代码(基于霍尔传感器)

FOC、六步换相,无刷电机控制

2022-11-23 20:28:03 16733 21

原创 【深度学习环境配置】windows版(anaconda、vscode)

深度学习环境配置,windows版

2022-09-28 21:54:45 847

原创 【嵌入式基础&常识】单片机

常识记录

2022-09-08 11:32:29 2625 1

原创 【PCB设计】

一、原理图二、PCB2.1 走线宽度电流:(主要考虑发热和压降问题,走线相当于电阻,越粗电阻越小,发热越小)过1A电流,至少10mil,推荐15mil过2A电流,至少30mil,推荐50mil过3A电流,至少60mil,推荐100mil大于3A电流,推荐采用铺铜或开窗式?信号:.........

2022-08-12 15:37:16 524

原创 【mavros安装】GeographicLib踩坑及解决

mavros安装

2022-08-08 14:57:17 4020 1

空空如也

空空如也

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

TA关注的人

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