自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (8)
  • 收藏
  • 关注

原创 freeRTOS内部机制——创建任务的内部细节

freeRTOS中定义了一个很大的全局数据作为一块空闲的内存,栈就是从这里面划分出一部分空间给任务使用。上图中的1000指的是1000*4字节。栈的大小取决于怎么使用局部变量和函数调用的深度,在实际的开发中栈的大小只能去估计,没有好的计算方法。任务被切换过后,在切换的瞬间,哪些寄存器的值保存在哪里?将pc指针指向vTask1()的地址。存在任务的栈中,如下图所示。函数运行过程中的局部变量保存在哪里?在任务创建函数中,会malloc动态分配一块内存。创建任务的栈从哪里分配?保存在TCB结构体的。

2023-10-26 21:54:15 166

原创 freeRTOS内部机制——栈的作用

上图中*pa 和*pb分别为R0,R1,调用C函数时,第一个参数保存在R0中第二个参数保存在R1中。这是约定。指令保存在哪里?指令保存在flash上面LR等于什么?LR是返回地址,函数执行完了过后LR等于下一条指令的地址运行流程中断随时可能发生,发生中断时我们如何保存现场?什么叫做现场?现场暂时认为是就是CPU中的16个通用寄存器R0-R15中的值在被打断瞬间,寄存器的值怎么保存?保存在栈中任务中函数会调用其他的函数,在执行过程中可能会被打断?在打断的时候要保存现场到栈中。

2023-10-25 22:24:02 317

原创 ubuntu添加新用户

期间需要输入两次密码。第一次用于设置密码,第二次用于确认密码。

2023-07-20 22:18:17 122

原创 STM32HAL库串口中断同时收发卡死

使用HAL库的过程中发现在串口中断的回显功能(将串口接收到的数据再发送出来),总是执行几次后程序卡死,无法正常回显。

2023-05-01 21:37:40 2178 2

原创 CUBEMX建立freeRTOS工程编译报错

CUBEMX建立freeRTOS工程编译报错

2023-04-21 11:23:59 1372 9

原创 环形缓冲区-----适合在通信中接收数据(例如uart)

当有大量数据的时候,我们不能存储所有的数据,那么计算机处理数据的时候,只能先处理先来的,处理之后就会把数据释放掉,再处理下一个。那么已经处理的数据的内存就会被浪费掉。因为后来的数据只能往后排队,如果要将剩余的数据都往前移动一次,那么效率就会低下了,肯定不现实,所以,环形队列就出现了。环形缓冲区是一项很好的技术,不用频繁的分配内存,而且在大多数情况下,内存的反复使用也使得我们能用更少的内存块做更多的事。

2022-11-12 15:06:04 1631

原创 STM32CubeMX在freeRTOS中使用printf函数

在usart.h中添加#inlcude "stdio.h"以上三部完成后就可以使用printf函数了。在usart.c中添加入下代码。

2022-08-09 15:46:44 699 3

原创 阿里云上安装MQTT服务器

在云服务器上安装EMQX,MQTTX通信

2022-07-28 21:12:57 1529

原创 八、FreeRTOS 软件定时器

软件定时器类似于单片机的定时中断,但是精度和优先级不如硬件定时器。支持单次模式(只执行一次)和周期模式。精度为x个tick注意事项xTimerCreate() 软件定时器创建函数xTimerStart()软件定时器启动函数软件定时器在创建完成的时候是处于休眠状态的,需要用 FreeRTOS 的相关函数将软件定时器活动起来,而 xTimerStart()函数就是可以让处于休眠的定时器开始工作。xTimerStop()软件定时器停止函数xTimerStop() 用于停止一个已经启动的软件定时器, 该函数的

2022-06-19 13:35:29 2376

原创 七、FreeRTOS事件和常用函数接口

事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。与信号量不同的是,它可以实现一对多,多对多的同步。即一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒任务进行事件处理。同样,也可以是多个任务同步多个事件。每一个事件组只需要很少的 RAM 空间来保存事件组的状态。 事件组存储在一个EventBits_t 类 型 的 变 量 中 , 该 变 量 在 事 件 组 结 构 体 中 定 义 。 如 果

2022-06-19 10:53:59 676

原创 六、FreeRTOS互斥信号量和函数接口讲解

互斥信号量是一种特殊的二值信号量,它和信号量不同的是,它支持互斥量所有权、递归访问以及防止优先级翻转的特性。任意时刻互斥量的状态只有两种,开锁或闭锁。当互斥量被任务持有时,该互斥量处于闭锁状态,这个任务获得互斥量的所有权。当该任务释放这个互斥量时,该互斥量处于开锁状态, 任务失去该互斥量的所有权。当一个任务持有互斥量时,其他任务将不能再对该互斥量进行开锁或持有。 持有该互斥量的任务也能够再次获得这个锁而不被挂起,这就是递归访问,也就是递归互斥量的特性,这个特性与一般的信号量有很大的不同,在信号量中,由于已经

2022-06-08 15:37:28 707

原创 五、FreeRTOS信号量和常用信号量接口

信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥访问, 常用于协助一组相互竞争的任务来访问临界资源。在多任务系统中,各任务之间需要同步或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。抽象的来讲,信号量是一个非负整数,所有获取它的任务都会将该整数减一( 获取它当然是为了使用资源),当该整数值为零时,所有试图获取它的任务都将处于阻塞状态。通常一个信号量的计数值用于对应有效的资源数,表示剩下的可被占用的互斥资源数。其值的含义分两种情况: 0: 表示没

2022-06-08 12:56:28 664

原创 四、FreeRTOS消息队列和常用函数

队列又称消息队列,是一种常用于任务间通信的数据结构。队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消息是空时,读取消息的任务将被阻塞,用户还可以指定阻塞的任务时间 xTicksToWait,在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效。 当队列中有新消息时, 被阻塞的任务会被唤醒并处理新消息;当等待的时间超过了指定的阻塞时间,即使队列中尚无有效数据,任务也会自动从阻塞态转为就绪态。 消息队列是一种

2022-06-07 14:20:08 1321

原创 三、FreeRTOS任务管理--常用函数

FreeRTOS 的任务可认为是一系列独立任务的集合。每个任务在自己的环境中运行。在任何时刻,只有一个任务得到运行, FreeRTOS 调度器决定运行哪个任务。调度器会不断的启动、停止每一个任务,宏观看上去所有的任务都在同时在执行。作为任务,不需要对调度器的活动有所了解,在任务切入切出时保存上下文环境(寄存器值、堆栈内容)是调度器主要的职责。为了实现这点,每个 FreeRTOS 任务都需要有自己的栈空间。当任务切出时,它的执行环境会被保存在该任务的栈空间中,这样当任务再次运行时,就能从堆栈中正确的恢复上次的

2022-06-06 17:23:31 572

原创 二、FreeRTOS动态创建任务

FreeRTOS常用动态任务创建。FreeRTOS 做法是在 SRAM 里面定义一个大数组,也就是堆内存,供 FreeRTOS 的动态内存分配函数使用,在第一次使用的时候,系统会将定义的堆内存进行初始化,这些代码在 FreeRTOS 提供的内存管理方案中实现(heap_1.c、heap_2.c、 heap_4.c 等)在使用动态创建任务时必须关闭宏定义 configSUPPORT_STATIC_ALLOCATION同时打开宏定义 configSUPPORT_DYNAMIC_ALLOCATION动态任务

2022-06-06 15:25:02 614

原创 一、FreeRTOS v9移植stm32f103zet6(野火霸道)

一下载FreeRTOS源码 https://sourceforge.net/projects/freertos/files/FreeRTOS/在裸机工程模板的根目录下建立文件夹FreeRTOS 在FreeRTOS文件下下建立src port文件夹将FreeRTOSv9.0.0\FreeRTOS\Source中的所有.c文件复制到src文件夹 打开 FreeRTOS V9.0.0 源码,在“FreeRTOSv9.0.0\FreeRTOS\Source\portable”目录下找到“ MemMang”文件夹与

2022-06-06 13:23:04 799

原创 4.存储持续性

1.自动存储持续性(经典情况,不同作用域同名参数的“覆盖”)在默认情况下,在函数中声明的函数参数和变量的存储持续性为自动,作用域为局部,没有链接性。在程序执行其所属代码时被创建,在执行完函数或者代码块时,它们使用的内存被释放。#include <iostream>using namespace std;int main(){ int value = 1;//作用域为...

2019-02-01 15:08:10 211 1

原创 3.引用

通过程序的运行来了解一下引用。 #include <iostream>using namespace std;int main(){ int a = 99; int &b = a;//引用声明时必须初始化 int c = 88; //输出ab的地址 cout << "&a=" << &a << "\

2019-01-27 16:07:21 104

原创 2.函数指针做形参带的参数无效

函数指针做形参带的形参不能使用例如:#include <iostream>using namespace std;int sum(int a, int b){ return a + b;}//形参只是声明了有一个int(*pf1)(int, int)类型的函数函数指针,这里的abcd可以省略,//没有实际意义,两个int就说明了这是指向一个带有两个int参数和返回一...

2019-01-27 15:05:39 736

原创 1.C++中const的用法

C++ Priemr Plus推荐使用const1.这样可以避免由于无意间修改数据而导致编程错误;2.使用const使得函数能够处理const参数和非const参数,否则只能接受非const参数;3.如果条件允许,则因该将指针形参声明为指向const的指针;#include <iostream>using namespace std;int main(){ i...

2019-01-20 14:30:20 150

转载 蓝牙HC05模块探究-设置AT指令

蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发送数据到通道中,另外一个设备便可以接收通道中的数据。当然,对于建立这种通道连接是有一定条件,那就是对蓝牙设置好能进行配对连接的AT模式。 一般的蓝牙串口模块引脚:  RXD:接收端  TXD:发送...

2018-12-29 20:58:07 7522

原创 C语言顺序表的插入删除

首先声明一个顺序表的结构 (数组的第一个元素是0,但是顺序表的第一个一般 从1(人为设定)开始)#include <stdio.h>#include <stdlib.h>#define MAXSIZE 10#define OK 1#define FALSE 0 typedef int Elemtype;typedef bool Status;t...

2018-09-13 22:08:41 39236 18

原创 C语言循环链表创建,遍历,插入,删除,查找

在开始程序之前说一个困扰的几天的东西,在链表做形参的时候什么时候用(**p)什么时候用(*p)答案:只要是要修改head指针必须传递head的地址(用**p),否则传递head值即可(*p)。这与普通变量类似,当需要修改普通变量的值,需传递其地址,否则传递普通变量的值即可(引用)详细的解释可以在csdn查到,附上链接:https://bbs.csdn.net/topics/36008449...

2018-09-08 22:26:53 40772 13

原创 创建一个最简单的链表,插入和删除

原创文章欢迎转载创建一个链表一、头插法创建链表: #include <stdio.h>struct list{ int num; struct list *next;};typedef struct list list_single; list_single *creat_list_tail(int n)//尾插法创建一个链表,并返回一个头指针{...

2018-09-04 21:38:43 39702 5

原创 二级指针作为形参简单实例分析

 指针是什么?指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。 举例int c=2,d=3;int *pc=&c;pc是指针变量的存储内容,也就是c的地址*pc就是对指针的解引用,取出这个c这个地址里面的值实例#include <stdio.h>int c=2,d=3;int *pc=&c; //...

2018-08-20 16:36:27 6345

西部赛区,摄像头双车圆环超车程序

西部赛区,双车圆环超车程序,新手可做参考,摄像头双车圆环超车程序

2018-08-17

30多份摄像头技术报告

智能车竞赛摄像头组技术报告,智能车竞赛摄像头组技术报告,智能车竞赛摄像头组技术报告,

2018-08-17

温控电机程序及其电路

主要功能:通过按键控制温度阀值并由公式y=25x+20计算出电机正占空比 带电路图 带程序

2018-08-13

51单片机100个例程加仿真图

51单片机100个例程加仿真图 第 01 篇 基础部分 第 02 篇 硬件应用 第 03 篇 综合设计

2018-08-13

JLINK驱动程序

jlink驱动安装文件jlink驱动安装文件jlink驱动安装文件jlink驱动安装文件

2018-08-13

毕业设计——单片机类

绝大多数是代码,有的带有电路原理图,带有实验报告,毕业设计可参考

2018-08-13

恩智浦智能车原件库封装库大部分3D封装

恩智浦智能车竞赛主要元件元件库,封装库,大多数为3D封装。

2018-08-13

智能车摄像头图像处理

恩智浦智能车摄像头组图像处理以及寻线程序..智能车摄像头图像处理

2018-08-11

空空如也

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

TA关注的人

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