自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LWIP网络模型及接口简介(DAY 01)

LwIP 提供了三种编程接口,分别为 RAW/Callback API、NETCONN API、SOCKET API。它们的易用性从左到右依次提高,而执行效率从左到右依次降低。将内核代码和应用程序分离为独立线程。socket接口是基于NETCONN接口实现的,所以其效率会更低一些。它在内核程序和应用程序之间存在数据拷贝,这会降低数据的递交效率。相较于回调式API,此方法通过信号量和邮箱完成,需要耗费更多时间与内存,效率相对较低。节省内存开销,程序执行效率最高。实现复杂业务逻辑很麻烦,代码可读性差。

2025-03-11 22:29:05 491

原创 freertos源码分析DAY12 (软件定时器)

软件定时器可在硬件定时器资源不够用时,作为额外的定时器资源来供用户使用。但其计时精度较低,最高精度只有1ms,且在软件定时器的定时过程中是极有可能被其它中断所打断。故它只适用于一些对计时精度要求不苛刻的场景。下面先来介绍软件定时器的结构,了解其基本结构信息后再去看其原理及使用流程。

2025-02-16 22:40:47 703

原创 CAN通讯理论

首先接收方发送一个遥控帧,遥控帧包含报文ID(遥控帧也是广播出来的),若其中某个设备有这个ID数据,它就会再通过数据帧广播出来,这样接受方就会及时获取这个数据。其中0~6的重叠部分,是其他设备检测出存在错误时,发送的错误帧。所谓回读,就是每个CAN设备发出一个数据位后,都会回读总线上当前的电平状态,以确认自己发出的电平是否被发送出去,发出0读回一定为0,发送1则不一定为1(此时就释放总线)。接收方收到大量数据而无法处理时,发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失。

2025-01-18 19:28:01 717

原创 freertos源码分析DAY11 (互斥量)

互斥量和二值信号量一样,其类型都是Queue_t队列类型。只不过二值信号量的对头及对尾指针,现在是分别用来指向 "互斥量持有任务" 及 "队列类型" 了。

2024-10-26 16:18:23 1135

原创 freertos源码分析DAY10(二值/计数信号量)

二值信号量的创建,具体代码如下所示:(此代码定义在semphc.h文件中。

2024-07-14 19:25:48 1287 1

原创 freertos源码分析DAY9 (消息队列 )

这节内容是信号量的基础,因为创建以及发送/等待信号量所调用的底层函数,就是创建/发送/接受消息队列时所用到的通用创建函数,这里先补充一下数据结构中关于队列的知识。目录1. 队列原理1.1 顺序队列操作1.2 循环队列操作2.消息队列原理2.1消息队列的构成2.2 消息队列出入队原则2.3 消息队列发送/接收消息原理2.4 队列锁机制3. 消息队列创建及删除3.1 创建消息队列函数3.1.1 xQueueGenericCreate通用任务创建函数 3.1.1.1 prvInitialiseNewQueue初

2024-06-10 09:30:00 1439 1

原创 freertos源码分析DAY8 (任务管理)

任务挂起函数,任务恢复函数,及任务删除函数。

2024-04-25 09:39:08 1607

原创 卡尔曼滤波公式推导(自用)

自用笔记。(仅适用于线性系统)

2024-03-19 16:27:47 427 1

原创 freertos内核原理Day7(支持时间片)

这是freertos内核实现的最后一节, 如果理解了前面的内容,这节内容理解起来会非常容易,这节内容也比较少; 这里先说明时间片的概念:一个优先级的根节点下,可以挂载多个属于这个优先级的任务节点,且它们都享有相同的CPU运行时间。前面几节可以知道systick被配置为了1ms中断一次,systick中断触发的周期就是一个tick(tick就是Rtos中的任务运行时长的最小时间单位)。首先在main函数中先创建3个任务: 可以看到在创建的任务中task1 和task2都是优先级为2的任务,task3

2024-03-08 05:20:30 2127 4

原创 freertos内核原理Day6(实现任务延时列表)

1、可以看到我们定义了任务延时列表根节点1和2(1是挂载系统时基变量溢出前的延时任务的,2是用来挂载系统时基变量溢出后的延时任务的2、定义了一个任务延时根节点指针pxDelayedTaskList(用来指向时基没有溢出的那条列表3、定义了一个任务延时根节点指针pxOverflowDelayedTaskList(用来指向时基溢出的那条列表6.1.2任务延时列表初始化既然任务延时列表是属于延时列表的一种,则在任务列表初始化时,应该一并初始化任务延时列表;/* 初始化任务相关的列表 */

2024-03-06 10:30:00 1270 1

原创 freertos内核原理Day5(支持多优先级)

这里首先说明一点,configUSE_PORT_OPTIMISED_TASK_SELECTION宏控制是选择“通用方法”还是“优化方法”的宏定义,1选择“优化方法”,反之“通用方法”;

2024-03-03 22:46:35 2031

原创 PCB准则

直角尖端的直角点非常小,故这里的面积也小,这导致这点的电荷密度很大,此时此点就会产生巨大的电场强度,这个电场会击穿空气,从而产生巨大的电磁干扰。若同一组信号用两三根线去传递,要保证这个信号传输到终点的时序不变,由于几个信号的速度是一样的,若还想要保证时序一致,则需要使这几个线等长,差分信号是用过两根线上的差值来确定0与1的,由于两个信号线的距离很近,所有两根信号线上的信号抖动是几乎相同的,所以做差后的信号几乎不变;从顶层到底层的贯穿孔,其在内层也有电气链接属性,内层只要有线碰到他,那么那条线就与它相连;

2024-02-25 14:30:37 1206 1

原创 freertos内核原理DAY4(空闲任务与阻塞延时)

目录4.空闲任务与阻塞延时4.1空闲任务的创建4.1.1定义空闲任务栈4.1.2获取空闲任务内存(main.c中实现)4.1.3创建空闲任务(task.c中实现)4.2实现阻塞延时4.2.1systick滴答时钟寄存器配置4.2.2 vTaskDelay()软件延时函数(task.c中实现)4.3仿真程序能理解这节的前提是看懂了前面的"任务定义及切换""链表"及"临界段"这三个内容;(这节内容请务必先下载后面提供的程序,对照着程序看,不然容易理不清)要知道使用freertos操作系统的目的是为了榨干cpu

2024-01-18 14:54:18 1406 1

原创 freertos内核原理 Day3(临界段的保护)

taskENTER_CRITICAL_FROM_ISR()中断级进入临界段函数,taskEXIT_CRITICAL_FROM_ISR中断级退出临界段函数,这两个函数是成对使用的,且在中断中使用(),若函数是内联函数,则编译器会自动的将函数的代码加载到以后会调用到函数的地方,若此时内联函数中的代码量很小,则效率会比调用函数时高(但当内联函数的代码量很大时,这会导致程序的代码量急剧增大,此时内联的效率反而更低,这时代码量大的函数用普通调用就可以了。3.返回中断进入临界段前的basepri寄存器配置;

2024-01-15 01:05:57 1743

原创 freertos内核原理 Day2(任务定义及切换)

main.c中实现main.c中实现头文件freertos.h中定义定义根节点数组pxReadyTasksLists,里面存放各个链表的根节点,如下图所示。

2024-01-07 20:14:38 2766 7

原创 freertos内核原理 Day1(链表)

头文件list.h中辅助排序值(xitemvalue);节点排序时确定当前节点处于链表的第几位指向下一节点指针(pxnext);指向上一节点指针(pxprevious);指向内核对象指针(pvowner);指向节点所在链表(pvcontainer);根节点代表的就是当前链表/* 辅助值,用于帮助节点做顺序排列 *//* 指向链表下一个节点 *//* 指向链表前一个节点 *//* 指向拥有该节点的内核对象,通常是TCB *//* 指向该节点所在的链表 */

2024-01-03 17:16:24 1945 2

空空如也

空空如也

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

TA关注的人

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