- 博客(45)
- 收藏
- 关注
原创 linux系统线程池
本文简单介绍了线程池的概念和特点,对线程池的结构体和相关操作接口进行了设计,并提供了接口的具体实现,最后通过示例程序演示了线程池的运行过程。
2022-05-31 20:26:37
1114
原创 stm32串口发送接口
简介本文记录一下stm32标准库实现串口发送功能的接口函数。轮询方式发送串口数据1、标准库实现/*=============================通过发送函数==============================*//** * 功能:串口写字节函数 * 参数1:USARTx :串口号 * 参数2:Data :需写入的字节 * 返回值:None */void USART_Send_Byte(USART_TypeDef* USARTx, uint16_t Data){
2022-05-27 02:17:56
1926
原创 freertos的可视化追踪和运行时间统计功能
简介很多时候,我们想要知道rtos任务目前的运行情况,比如任务的状态、优先级、cpu的占用率等等,或者我们想要知道当前正系统在运行的是哪一个任务,又或者我们想要知道某一个任务运行了多长时间。这个时候,我们可以使用freertos的可视化追踪功能和运行时间统计功能来帮助我们监控系统的以上信息。运行时间统计功能我们可以通过一个基准定时器来统计rtos各个任务的运行时间,怎么统计呢?首先我们要弄清楚什么是任务运行,简单来说,任务切入到任务切出之间的时间就是这个任务这一次的运行时间;当然一个任务经常会多次切
2022-05-25 00:09:02
2602
1
原创 linux系统进程间通信方式(三):管道
本文详细介绍了匿名管道和有名管道的基本概念、特点和适用场景,并通过示例演示了两个进程如何通过管道进行通信。
2022-05-24 03:03:46
681
原创 二叉树搜索性能比较
二叉树搜索性能分析我想测试一下不同类型的二叉树搜索数据的性能是什么样的。众所周知,二叉树有以下几种类型:BSTAVL红黑树对于搜索数据,具体来讲,当树保持平衡时,其搜索时间复杂度是O(log2n),当树退化成链表时,其搜索时间复杂度变成O(n),其他情况下树的平均搜索时间复杂度就介于这两者之间。事实上红黑树的插入、删除、查找、旋转等操作都被控制在O(log2n)之中,对数级别的时间复杂度,使得红黑树尤其适用于数据无序程序高、数据量庞大且需要快速定位节点的场合。测试环境测试主机频率是4G
2022-05-22 03:54:50
767
原创 stm32通用定时器pwm输入模式
简介stm32通用定时器有多种输入模式,其他包括了pwm输入模式。原理pwm输入模式是在输入捕获的基础上使用两组输入捕获通道对同一个TIM引脚进行捕获。如下图所示:TIMx_CH1引脚输入一个pwm信号,经过输入滤波和边沿检测之后一路(TI1FP1)给到了IC1,一路(TI1FP2)给到了IC2,从而实现两个捕获通道捕获同一个pwm信号。IC1负责测量pwm信号的周期,而IC2负责测量pwm信号的脉宽。总的来说是基于输入捕获功能实现了对输入pwm信号的测量。功能实现以STM32F103RC
2022-05-14 03:03:39
4591
原创 stm32高级定时器实现pwm互补输出
简介stm32设备一般都有很多类型的定时器,常见的有systick timer、基本定时器、通用定时器、高级定时器、看门狗定时器、RTC等等,本文简单介绍高级定时器是如何实现pwm互补输出。详细我这里使用的device是stm32f103rc,他有两个高级定时器TIM1、TIM8;下面选择TIM1来实现上述功能。高级定时器的使用主要涉及以下几个结构体:timebase,用于配置计数器typedef struct{ uint16_t TIM_Prescaler; //定时器时钟
2022-05-14 02:03:20
13315
1
原创 STM32通用定时器实现pwm输出、输入捕获
简介以stm32f103rct6为例,下面说明如何使用通用定时器实现pwm输出详细stm32的定时器有多种类型,有RTC、基本定时器、通用定时器、高级定时器。下面我们选择通用定时器来实现pwm输出功能。这里我选择TIM2定时器。第一步:选择哪几个引脚输出pwm信号,这里我选择PA1、PA2,如下图:第二步:使能外设时钟;使能GPIO的时钟,使能TIM2的时钟。RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//时钟使能RCC_APB2P
2022-05-12 03:46:43
5426
原创 mdk arm debug配置
简述本文简要讲述启动调试之前如何配置debug。点击魔术棒,进入debug选项界面,如下图:我们可以选择软件仿真,也可以选择硬件仿真。(软件仿真不需要接开发板和仿真器)具体配置说明如下:左侧settings:配置特定于设备的模拟器选项,例如启动功能和 BUS 特性(仅适用于某些设备)。右侧settings:配置目标驱动程序选项,例如跟踪选项。还可以使用调试配置文件 (dbgconf) 管理目标选项,如下图:选择你的debug配置(你也可以编辑调试配置文件)Limit Spe
2022-05-11 01:27:20
2290
1
原创 MDK debug时出现*** error 65: access violation at
本文提供了解决mdk debug时遇到*** error 65: access violation at 0xE0042004 : no 'write' permission问题的方法。
2022-05-09 19:16:07
2719
原创 printf重定向的相关总结
本文详细介绍了linux环境下和MCU环境下(以STM32为例)printf函数重定向的几种方法,以及实际可能遇到的一些问题和解决方法。
2022-05-09 05:35:04
7212
1
原创 C语言的memcpy和memmove
浅谈memcpy和memmovePOSIX和C标准明确表示,使用重叠区域的mem‐cpy()会产生未定义的行为。他们两个唯一的区别是:当内存发生局部重叠时memmove函数能够保证拷贝结果的正确性,而memcpy则不能保证拷贝结果的正确性;当内存没有发生重叠的时候两个函数的结果是一样的。为什么说memcpy不能保证拷贝结果的正确性,可以看看下面这个例子。当src和dst重合(即内存重叠),如下图所示:...
2022-05-05 00:20:31
1239
原创 linux系统如何开启和关闭core dump
本文简单讲解了core dump的开启和关闭方法,也说明了指定core dump输出路径和命令格式的方法。
2022-04-26 03:55:22
7930
原创 比较冒泡排序、选择排序和快速排序的时间(C语言实现)
本文比较了冒泡排序、选择排序和快速排序的时间,并且对冒泡做了改良;还测试了各算法的用时稳定性。
2022-04-24 19:31:26
3354
2
转载 【freeRTOS内存管理策略详解】
内存管理对应用程序和操作系统来说都非常重要。现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关。 FreeRTOS操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。这样做大有好处,可以增加系统的灵活性:不同的应用场合可以使用不同的内存分配实现,选择对自己更有利的内存管理策略。比如对于安全型的嵌入式系统,通常不允许动态内存分配,那么可以采用非常简单的内存管理策略,一经申请的内存,甚至不允许被释放。在满足设计要求...
2022-04-24 04:44:02
2525
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人