- 博客(141)
- 收藏
- 关注
原创 (Linux 系统)进程控制
在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:自进程中返回0,父进程返回子进程id,出错返回-1。
2024-11-29 11:16:15
979
原创 (Linux 入门) 基础工具
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且 还有一些新的特性在里面。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编 译,极大的提高了软件开发的效率。剪切 (n dd)剪切n行。
2024-11-20 14:54:43
679
原创 (C++进阶)C++20
C++20 引入了新的空指针常量 nullptr 与整数类型的比较操作,明确禁止了这种比较,以防止潜在的逻辑错误。以前,比较 nullptr 和整数在某些实现下是允许的,但现在这样的比较会引发编译错误,确保了代码的清晰和安全。是 C++20 引入的标准库函数,它为字符串格式化提供了统一且强大的接口,类似于 Python 中的 str.format 或 C 的 printf 函数,但更加安全和灵活。C++20作为C++语言的一个重要更新,引入了许多提升编程效率和代码质量的新特性。
2024-10-09 09:42:02
1315
原创 (C++进阶)C++17
C++17是C++编程语言的一个重要更新版本,发布于2017年。这个版本引入了许多新特性,旨在提高代码的清晰度、效率和安全性。
2024-10-08 13:58:38
502
原创 STM32CubeIDE(CAN)
这意味着节点可以发送一个数据帧,并立即在同一节点上接收该帧,而不将其发送到总线上。这种模式主要用于测试CAN硬件和软件的正确性,因为它允许开发者检查发送的数据是否与接收的数据一致,而无需其他网络节点的参与。: 这是最常见的模式,在这种模式下,CAN节点可以发送和接收数据。所有的CAN功能都是可用的,节点可以参与总线上的数据交换,包括数据帧和远程帧的发送与接收。:它结合了静默模式和环回模式的特点,即节点既不会向总线发送数据,同时也会将发送的数据在内部进行环回,用于更细致的测试和调试目的。
2024-07-22 16:53:20
1319
原创 STM32CubeIDE(低功耗模式)
在SLEEP模式下,CPU停止执行指令,但内部和外部的SRAM、寄存器和大部分外设(除了被显式禁用的)仍然保持活跃。系统时钟继续运行,因此定时器和中断可以触发唤醒事件。这种模式适用于需要快速响应中断的情况,因为它提供了较快的唤醒时间。然而,由于许多组件仍然运行,功耗比其他两种模式高。
2024-07-19 16:05:11
602
原创 STM32CubeIDE(看门狗)
独立看门狗(IWDG)独立看门狗是一个独立于系统时钟的硬件定时器,通常由一个低频的RC振荡器提供时钟源,这使得即使在系统时钟失效的情况下,看门狗依然可以工作。独立看门狗的功能相对简单,它持续地递减一个计数器,直到计数器达到0时触发系统复位。在正常的系统运行中,软件必须定期地“喂狗”(即重置计数器),以避免看门狗计数器溢出而触发复位。
2024-07-18 17:31:25
631
原创 STM32CubeIDE(STM32CubeMonitor)
STM32CubeMonitor 是意法半导体(STMicroelectronics)推出的一款强大的开发辅助工具,旨在帮助用户在运行时监控和调试STM32微控制器的应用程序。它是STM32Cube软件生态系统的一部分,用于替代早前的STM Studio工具。STM32CubeMonitor通过实时读取并显示STM32微控制器上的变量,使得开发者能够快速识别和诊断应用程序中的问题,进而优化性能。
2024-07-18 16:07:30
363
原创 STM32CubeIDE(STM32L432KC片上ADC)
该ADC拥有多个输入通道,允许连接至不同的外部引脚以及一些内部源(如温度传感器、VREFINT等),能够测量16个外部信号源加上2个内部信号源,共计18个通道,这些通道分为规则通道组和注入通道组。通过STM32CubeMX软件或直接编程,用户可以灵活配置ADC的工作模式,包括但不限于连续转换、扫描模式(多通道连续转换)、单次转换或由事件触发的注入转换等。其精度通常优于±0.25%。STM32L432KC的ADC支持硬件过采样功能,可以通过增加采样次数提高有效分辨率,这对于需要高精度测量的应用非常有用。
2024-07-18 09:51:49
1046
原创 STM32CubeIDE(RTC实时时钟)
RTC通常被设计成一个独立的定时器,它能够持续地追踪时间,即使在主电源关闭的情况下也能继续运行,这是因为RTC通常由一个小电池(如CR2032纽扣电池)供电,确保时间的连续性。例如,在电源电压下降到某个阈值以下时,RTC可以记录这个事件发生的时间点,从而帮助诊断问题或保护数据的完整性。例如,当系统检测到一个错误或异常,它可以记录下当前RTC的时间,这样维护人员就可以知道这个事件发生在什么具体时间,有助于后续的故障排查和系统维护。这些寄存器通常由一个独立的电池或备用电源供电,以确保数据的持久性。
2024-07-17 13:31:31
1179
原创 (C++进阶)boost库笔记
boost::function 是 Boost 库中提供的一个通用函数对象包装器,它可以存储指向任何可调用对象的指针,并且可以在任何时候通过 operator() 调用。这个功能类似于C++11及以后版本中的 std::function。使用 boost::function 的主要好处是可以创建类型安全的函数指针容器,可以接受不同类型的函数、成员函数、lambda 表达式或仿函数(functor)作为参数,方便在算法和数据结构中传递可调用实体。
2024-03-14 11:23:47
759
原创 STM32CubeIDE(ADC)
12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
2023-11-28 16:57:43
2739
原创 MIPI I3C协议
它提供了比传统的I2C更高的性能、更低的功耗,并且兼容性更好。I3C结合了I2C和SPI的优点,支持更快的数据传输速度和更高的设备连接性能。: I3C比I2C有更高的数据传输速率,因为它支持更高的频率和更有效的数据传输机制。该联盟致力于制定针对移动和嵌入式系统的通信接口和互联技术标准,包括传感器、显示器、摄像头等设备的通信接口标准,以提高设备之间的互操作性、降低成本并推动技术创新。联盟是一个由行业领先的移动设备制造商和半导体公司组成的非营利性组织,旨在制定和推广用于移动设备的开放标准接口。
2023-11-22 15:08:08
703
原创 (C++进阶)使用Eigen库进行多项式曲线拟合
Eigen是一个C++模板库,专门用于线性代数运算。它提供了矩阵、向量操作和线性代数算法所需的功能,且采用头文件形式,易于集成到C++项目中。
2023-11-09 10:48:24
4198
1
原创 (C++进阶)正则表达式
正则表达式(Regular Expression),通常简写为RegExp或Regex是一种用于匹配字符串模式的强大工具。它由一系列字符和特殊符号组成,用于定义匹配模式。正则表达式在文本处理、数据验证、搜索和替换等领域有广泛的应用。
2023-10-24 10:31:13
2324
原创 STM32CubeIDE(Timer)
16位递增计数器,有DMA请求生成,捕获比较通道数0,所在总线:APB1,只具有定时功能,有连续定时模式和单次定时模式基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。两定时器相互独立,不共享任何资源通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(
2023-08-25 16:28:17
2271
原创 STM32CubeIDE(SPI 读写)
/ 当前页面剩余可写字节数// 计算当前页剩余可写字节数// 如果要写入的数据长度小于等于当前页剩余可写字节数,直接写入当前页} else// 如果要写入的数据长度超过当前页剩余可写字节数,需要进行分页写入while (1)// 写入当前页数据break;// 数据已全部写入} else// 更新缓冲区指针、写入地址和剩余长度// 根据剩余长度判断下一页要写入的字节数} else// 发送指令// 接收指令// 写使能// 写使能指令// 写页数据。
2023-08-22 13:51:06
2896
原创 STM32CubeIDE常见问题
2、回车缩进过多回车换行字符缩进4个字符与系统生成代码不匹配解决办法:更改设置项目->属性->C/C++常规 -> 格式化程序 ->编辑选项。
2023-08-18 09:19:30
2599
原创 FreeRTOS(独立看门狗监测任务执行与低功耗Tickless模式)
① 监测系统死机② 监测任务执行Tickless 低功耗机制是当前小型 RTOS 所采用的通用低功耗方法,比如FreeRTOS,RTX 和 uCOS-III等。仅从字母上看,Tick 是滴答时钟的意思,less 是 Tick 的后缀,表示较少的,整体看就是表示减少滴答时钟节拍运行。在FreeRTOS系统中,当用户任务都被挂起或者阻塞时,最低优先级的空闲任务会得到执行。那么 STM32 支持的低功耗模式就可以放在空闲任务里面实现。为了实现低功耗最优设计,我们还不能直接把睡眠模式放在空闲任务就可以了。
2023-08-15 16:17:04
2594
3
原创 FreeRTOS(动态内存管理)
资料来源于硬件家园:资料汇总 - FreeRTOS实时操作系统课程(多任务管理)目录一、动态内存管理介绍1、heap_12、heap_23、heap_34、heap_45、heap_5二、动态内存总结与应用1、heap_12、heap_43、heap_5三、内存管理编程测试1、heap_42、heap_13、heap_5一、动态内存管理介绍动态内存管理是 FreeRTOS 非常重要的一项功能,前面章节讲解的任务创建、信号量、消息队列、事
2023-08-15 11:45:03
783
原创 FreeRTOS(任务通知)
我们知道在使用队列、信号量前,必须先创建队列和信号量,目的是创建队列数据结构,比如使用xQueueCreate() 函数创建队列,用xSemaphoreCreateBinary()函数创建二值信号量等。如果任务在等待的通知暂时无效,任务会根据用户指定的阻塞超时时间进入阻塞状态,我们可以将等待通知的任务看作。,当其他任务或者中断向这个任务发送任务通知,且任务获得通知以后,该任务就会从阻塞态中解除,这与 FreeRTOS 中内核的其他通信机制一致。任务通知是任务控制块的资源,属于任务控制块中的成员变量。
2023-08-14 23:02:23
1498
原创 FreeRTOS(事件组)
① 事件相互独立,一个32位的事件集合(EventBitst类型的变量,实际可用于表示事件的只有低24位)用于标识该任务发生的事件类型,其中每一位表示一种事件类型(0表示该事件类型未发生,1表示该事件类型已经发生),一共有 24种事件类型。4. 由于函数 xEventGroupSetBitsFromISR 对事件标志的置位操作是在守护任务里面执行的,如果想让置位操作立即生效,即让等此事件标志的任务能够得到及时执行,需要设置守护任务的优先级高于使用此事件标志组的所有其它任务。那样岂不是更有效率?
2023-08-14 13:50:19
1044
原创 FreeRTOS(互斥信号量)
前面学过,取值只有0与1两种状态的信号量称之为二值信号量。而互斥信号量是一种特殊的二值信号量,具有防止优先级翻转的特性。
2023-08-13 19:29:44
1818
原创 FreeRTOS(计数信号量)
①取值只有0与1两种状态的信号量称之为二值信号量;取值大于1的信号量称之为计数信号量②计数信号量是一种长度大于1,消息大小为0的特殊消息队列。③计数信号量的取值也可以为1,但通常大于1,如果取值为1,相当于只有0与1两种状态,用二值信号量即可。
2023-08-13 15:54:43
947
原创 FreeRTOS(二值信号量)
当信号量被获取了,信号量值变为0;当信号量被释放了,信号量值变为1。把这种取值只有0与1两种状态的信号量称之为二值信号量。创建二值信号量时,系统会为创建的二值信号量分配内存二值信号量是一种长度为1,消息大小为0的特殊消息队列。因为这个队列只有空或满两种状态,而且消息大小为0,因此在运用时,只需要知道队列中是否有消息即可,而无需关注消息是什么。
2023-08-12 23:59:48
3020
原创 FreeRTOS(消息队列)
当有多个消息发送到消息队列时,通常是将先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入消息队列的消息,即先进先出原则(FIFO),FreeRTOS的队列也支持后进先出原则(LIFO)。3. 消息队列还有两个函数 xQueueSendToBackFromISR 和 xQueueSendToFrontFromISR,函数xQueueSendToBackFromISR 实现的是 FIFO 方式的存取,函数 xQueueSendToFrontFromISR 实现的是 LIFO 方式的读写。
2023-08-11 14:25:48
3396
原创 FreeRTOS(调度锁,中断锁,任务锁,时间管理)
调度锁就是 RTOS 提供的调度器开关函数,如果某个任务调用了调度锁开关函数,处于调度锁开和调度锁关之间的代码在执行期间是不会被高优先级的任务抢占的,即任务调度被禁止。这一点要跟临界段的作用区分开,任务2本应该间隔100ms连续快闪,由于低优先级的任务一调用了调度锁开关函数,而且延时了5s,延时期间关闭了任务切换,在此期间,任务2不运行,结果就是任务2的指示灯间隔5s快闪10次。任务1:优先级低,启用调度锁,调度锁开关之间使用HAL_Delay延时5s,退出调度锁后,使用HAL_Delay继续延时2s。
2023-08-11 08:39:15
1895
原创 FreeRTOS( 任务与中断优先级,临界保护)
目录一、中断优先级1、NVIC基础知识2、FreeRTOS配置NVIC3、SVC、PendSV、Systick中断4、不受FreeRTOS管理的中断5、STM32CubeMX配置二、任务优先级1、任务优先级说明2、任务优先级分配方案3、中断优先级与任务优先级区别4、任务优先级修改与获取三、开关中断与临界段函数1、临界段概念2、开关中断函数3、任务代码临界段处理函数4、中断代码临界段处理函数四、优先级与临界代码编程测试①不受操作系统管理的中断设置。如下:0-4不受操作系统控制 ②获取与设置任务优先级使能 ③N
2023-08-10 17:17:02
2692
原创 FreeRTOS(任务调度)
资料来源于硬件家园:资料汇总 - FreeRTOS实时操作系统课程(多任务管理)单片机资源越来越丰富,加上合作式调度器的系统实时性不够好,合作式调度已经很少用了,FreeRTOS在新的版本中已不再更新抢占式调度器提供了一种多任务的的系统结构,高优先级任务可以抢占低优先级任务的CPU使用权,使得系统实时性非常好。使用抢占式调度器时,根据任务重要程度合理分配优先级,CPU会优先执行就绪列表中优先级最高的任务。时间片调度针对同优先级的任务,调度算法给同优先级的任务分配一个专门的列表,用于记录当前就绪的任务,并为每
2023-08-09 22:47:43
370
原创 FreeRTOS(任务管理的创建、删除、挂起、恢复)
函数原型:void vTaskStartScheduler( void );函数描述:函数 vTaskStartScheduler 用于启动 FreeRTOS 调度器,即启动 FreeRTOS 的多任务执行。使用这个函数要注意以下几个问题:①空闲任务和可选的定时器任务是在调用这个函数后自动创建的。②正常情况下这个函数是不会返回的。如果有返回,极有可能是用于定时器任务或者空闲任务的内存空间不足造成创建失败,此时需要加大FreeRTOS可管理的内存空间。
2023-08-09 16:24:41
1615
原创 FreeRTOS(系统配置)
因此,它特定于应用程序,而不是 FreeRTOS,并且应该位于应用程序目录中,而不是位于 FreeRTOS 内核源代码目录中。大部分配置选项在FreeRTOS.h文件中都有默认的配置,在应用时,把需要的配置选项放在FreeRTOSConfig.h文件即可。以“INCLUDE”开头的宏允许您的应用程序将未使用的实时内核组件从您的工程中移除, 这可节约嵌入式应用程序所需的任何 ROM 或 RAM。要包含 API 函数,请将宏设置为 1,要排除该函数,请将宏设置为 0。"Config"开始的宏为其他相关的。
2023-08-08 22:31:13
533
原创 FreeRTOS(vTaskList与vTaskGetRunTimeStats)
【代码】FreeRTOS(vTaskList与vTaskGetRunTimeStats)
2023-08-07 19:07:28
1481
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人