自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 FreeRTOS同步与互斥概念

在FreeRTOS中,同步和互斥是两个关键概念,帮助管理多个任务之间的协调和资源共享。理解它们对于编写高效且可靠的并发程序至关重要。

2024-05-24 22:32:07 189 1

原创 FreeRTOS中的两个Delay函数

vTaskDelay是基于相对时间的延时函数。它根据当前时间进行延时,使任务进入阻塞状态,并在指定的Tick数后重新进入就绪态。是基于绝对时间的延时函数。它用于实现精确的周期性任务调度,通过设置绝对的唤醒时间来达到精准的控制。vTaskDelay更加简单,适用于不需要严格周期性的任务。提供了更高的定时精度,是实现周期性任务的理想选择。

2024-05-24 19:08:33 479 1

原创 FreeRTOS任务创建

在 FreeRTOS 中,任务句柄(TaskHandle_t)本质上是一个指向任务控制块(Task Control Block,TCB)的指针。在 FreeRTOS 中,创建任务时可以使用 2 个函数对任务进行创建,一种是动态创建,另一种时静态创建。用户提供 TCB 和堆栈的内存,这能减少动态内存分配的开销和内存碎片,适用于内存受限或对内存管理有更高要求的系统。其他管理信息:如任务的周期性时间、任务的上次唤醒时间、任务的延时时间等。:要传递给任务函数的参数。任务的堆栈:存储任务的局部变量和函数调用信息。

2024-05-23 17:19:35 357 1

原创 C语言逗号表达式

C语言逗号表达式形式(表达式1,表达式2,表达式3......表达式N)逗号表达式的结果是的值,即在上式中为逗号表达式的结果。

2024-05-17 12:11:46 195

原创 理解 typedef int(*funcptr)()

中,funcptr是一个函数指针,该函数指针指向的函数没有参数,返回值为int类型。所以这条语句的含义是将函数指针这个类型取一个funcptr的别名。此时funcptr p就等价于int(*p)()。在C语言中,typedef 是一种预处理指令,用于为现有的一种数据类型起一个新的名字。下面的代码实现的就是将int 类型起一个INT的名字。的含义首先要确定数据类型。

2024-05-16 19:41:44 143

原创 C语言实现输入任意进制整数转换为十进制数

1.输入任意进制(二进制bin 八进制oct 十六进制hex)2.获得键盘输入的数字(本质是字符串)例如键盘键入123 读取 ‘1’ ,‘2’ ,‘3’,如果要获得数字则字符串‘ 1 ’-‘ 0 ’则可以获得数字1;3.将数字转换成相应的进制数如果输入123 (hex)我们使用计算器可知123的十进制值为291123(hex)转换成十进制的过程:故十六进制就是的公式就是result = result*16 +(ch - ‘ 0 ’ )

2024-05-16 16:40:17 540

原创 理解char* const* (*next)()

next 是一个指针,它指向一个函数。这个函数会返回一个char* const类型的常量指针。这个指针指向char。是一个函数,则char* const*是这个函数的返回值类型。这表示我们有一个指向字符(char)的指针。这表示 next 是一个指向函数的指针。这表示 next 是一个指针。这是一个指向字符的常量指针。变量名是 next。

2024-05-11 18:45:26 110 1

原创 数据结构-链表

头插法:将待插入节点插在头节点后面(就是头节点的指针域存放节点新节点node的地址 新节点node存放head->next的地址 此时如果是一个数组,则数组存放在链表里的值则为反序的)如图所示,是一个节点(Node)的组成,在数据域(Date)包含了数据,在指针域(Next)包含了指向下一个节点(Node)的指针。将单链表的首尾相接,将终端节点的指针域由空指针改为指向头节点,构成单循环链表,简称循环链表。头节点:在单链表的第一个元素节点之前附设一个类型相同的节点,以便空表和非空表处理统一。

2023-12-15 13:39:50 721

原创 条件编译指令的作用

后面会跟着一个宏定义的标识符,通常是头文件的宏保护符(通常是头文件名称的大写形式,用下划线替换文件名中的点号)。如果该标识符未定义,表示该头文件还未被包含,可以继续执行后续的定义和代码。指令用于定义一个标识符,表示该头文件已经被包含。这样,在后续的代码中再次包含同一个头文件时,由于该标识符已经被定义,是条件编译指令,用于控制头文件的多次包含和重复定义的问题。指令用于定义一个标识符,通常用于定义宏。条件将不满足,从而避免了重复包含和重复定义的问题。指令用于结束条件编译的代码块。配对使用,表示条件编译的结束。

2023-12-12 18:25:18 67

原创 I2C协议中的应答响应

应答其实就是一个数据位,在I2c协议中规定当发送或者接收一个字节后,下一个数据位即为应答位,当这个位为0时,即表示收到了应答,为1时,即表示为没有接收到应答。在stm32中,当使用硬件I2C时,应答位由硬件自动产生。在实际的使用中,stm32的应答响应初始化后由硬件自动产生,只需要stm32作为接收器时在读取结束的时候配置。当stm32作为主接收器时,stm32从从机读取数据,每读取一个字节由stm32发送一个。主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0。

2023-11-29 16:19:29 850 1

原创 C++ 函数提高

函数名可以相同 提高函数的复用性同一个作用域下函数名称相同函数参数类型不同或者个数不同或者顺序不同cout << "func(void)的调用!" << endl;cout << "func (int a) 的调用!" << endl;cout << "func1(int b) 的调用!" << endl;cout << "func1(int b,int c) 的调用!" << endl;cout << "func2(float d,int e) 的调用!" << endl;

2023-11-17 23:31:14 48 1

原创 C++ 引用

因为引用的本质是一个常量指针,指针常量(也称为常量指针)是指指针本身的值(即它所指向的内存地址)不能改变的指针。因为引用的本质是一个常量指针,在声明的时候不初始化会产生错误,它的值将是未定义的,这可能会导致程序错误。由运行结果可知通过引用参数产生的效果同按地址传递是一样的。在下面的代码中 此时相当于函数test01()作为静态变量a的别名使用。不要返回局部变量引用 局部变量是创建在栈区的 会被自动释放。作用:函数传参时,可以利用引用的技术让形参修饰实参。引用是可以作为函数的返回值存在的。

2023-11-06 00:43:40 50 1

原创 C++之new操作符

​ 堆区开辟的数据是由程序员手动开辟和手动释放的。​ 在C++中利用new操作符在堆区开辟数据。释放堆区数据利用操作符 delete。​ 利用new创建的数据 会返回该数据。创建的对象或对象数组在使用完毕后需要使用。进行释放,以避免内存泄漏。用于释放单个对象的内存,用于释放对象数组的内存。

2023-11-05 20:35:51 37

原创 C++内存分区模型

C++程序在执行时,将内存划分为4个区域内存分区是计算机系统在运行程序时,将可用内存分配给程序的不同部分的过程。代码区域用于存储程序的二进制代码,包括函数、方法和指令等。代码区通常是只读的,因为它的内容在程序运行时不允许被修改。数据区域用于存储静态变量和全局变量等静态数据。这些数据在程序运行期间一直存在,直到程序退出时才被释放。栈区域用于存储函数的局部变量及函数调用时的上下文信息,例如函数参数、返回地址和临时变量等。这些数据在函数调用结束时自动回收,不能手动控制。

2023-11-05 16:54:32 48

原创 使用STM32CubeIDE新建一个STM32工程

3.在弹出的子菜单中,选择"Project Explorer"(项目资源管理器)。在芯片菜单中选择对应的芯片型号 这里我使用的芯片为STM32F103C8T6。给工程命名时需要注意的是不要含有中文字符 不然会在运行的时候出错。下次创建工程时需要该芯片时就可以点击左上角星号直接找到该芯片。2.在下拉菜单中,选择"Show View"(显示视图)。在自己创建的新路径保存工程 路径上也不可以包含中文字符。1.在顶部菜单栏中,选择"Window"(窗口)。

2023-10-29 17:38:09 1040 1

原创 C语言实现二分法查找有序数组中的元素

假设待查找的元素为x,查找范围为左边界left和右边界right,中间位置为mid=( left + right )/2,如果x小于中间位置元素,则在左侧区域查找,即缩小右边界right = mid - 1;以此类推,通过不断缩小查找区间,最终可以找到待查找的元素或者确定待查找元素不存在于数组中。二分法是一种高效的查找算法,其时间复杂度为O(log n),其中n为数组元素的个数。它的前提条件是数组元素必须是有序的,这也是它的局限性,因为如果元素是无序的,就不能通过二分法来进行查找。

2023-05-12 18:46:31 417

原创 C语言实现冒泡排序

所以执行第二趟冒泡排序时我们只需要比较8对相邻的元素 执行完第二趟冒泡排序 此时数组元素顺序变成 7 6 5 4 3 2 1 0。第二个元素和第三个元素进行比较,如果第一个元素比第二个元素大,则进行交换。将第一个元素和第二个元素比较,如果第一个元素比第二个元素大,则进行交换。如果要完成一组10个元素的冒泡排序,我们则需要9趟冒泡排序。当执行完9趟冒泡排序 此时数组元素顺序变成。

2023-05-12 16:57:58 134 2

空空如也

空空如也

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

TA关注的人

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