- 博客(103)
- 收藏
- 关注
原创 keil MDK 中使用虚拟串口调试串口
在弹出的option菜单中,选择debug菜单,按下图所示,选择2处为使用仿真模式。2 parameter需要改成 -pSTM32F103C8 (这个参数是根据不同的芯片改写的)1 dialog dll 要改成DARMSTM.DLL,
2025-02-13 15:29:01
381
原创 第12章 支持时间片
FreeRTOS与隔壁的RT-Thread和μC/OS一样,都支持时间片的功能。所谓时间片就是同一个优先级下可以有多个任务,每个任务轮流地享有相同的CPU时间,享有CPU的时间我们叫时间片。在RTOS中,最小的时间单位为一个tick,即SysTick的中断周期,RT-Thread和μC/OS可以指定时间片的大小为多个tick,但是FreeRTOS不一样,时间片只能是一个tick。与其说FreeRTOS支持时间片,倒不如说它的时间片就是正常的任务调度。
2025-02-07 11:12:37
569
原创 第11章 任务延时列表的实现
/任务延时列表//任务延时列表//任务延时列表指针//任务延时列表指针是一个在task.c中定义的静态变量,用于表示下一个任务的解锁时刻。的值等于系统时基计数器的值xTickCount加上任务需要延时值。当系统时基计数器xTickCount的值与相等时,就表示有任务延时到期了,需要将该任务就绪。
2025-02-06 16:48:10
742
原创 第9章 空闲任务与阻塞延时的实现--总结
* 定义空闲任务的栈 *//* 定义空闲任务的栈 */ # define configMINIMAL_STACK_SIZE((unsigned short) 128) StackType_t IdleTaskStack [ configMINIMAL_STACK_SIZE ];
2025-01-22 18:21:17
834
原创 第7章 任务的定义与任务切换的实现--总结
本章是我们真正从从 0 到 1 写 FreeRTOS 的第一章,属于基础中的基础,必须要学会创建任务,并重点掌握任务是如何切换的。因为任务的切换是由汇编代码来完成的,所以代码看起来比较难懂,但是我会尽力把代码讲得透彻。如果本章内容学不会,后面的内容根本无从下手。在裸机系统中,系统的主体就是 main 函数里面顺序执行的无限循环,这个无限循环里面 CPU 按照顺序完成各种事情。在多任务系统中,我们根据功能的不同,把整个系统分割成一个个独立的且无法返回的函数,这个函数我们称为任务。
2025-01-22 14:13:59
1257
原创 第6章 数据结构—列表与列表项讲解--总结
列表和列表项是直接从 FreeRTOS 源码的注释中的 list 和 list item 翻译过来的,其实就是对应我们 C 语言当中的链表和节点,在后续的讲解中,我们说的链表就是列表,节点就是列表项。链表作为 C 语言中一种基础的数据结构,在平时写程序的时候用的并不多,但在操作系统里面使用的非常多。链表就好比一个圆形的晾衣架,具体见图 6-1,晾衣架上面有很多钩子,钩子首尾相连。链表也是,链表由节点组成,节点与节点之间首尾相连。图 6-1 圆形晾衣架/* 节点结构体定义 */
2025-01-21 16:41:24
1301
转载 RTOS 实时系统 - 信号量如何确保一次只有一个任务可以访问某个资源
信号量(Semaphore)是一种同步机制,用于控制对共享资源的访问。信号量可以确保一次只有一个任务可以访问某个资源,从而避免多个任务同时访问同一资源导致的竞争条件。下面是信号量如何控制对共享资源的访问的具体步骤和示例: 二值信号量是最简单的信号量形式,其计数值只能是 0 或 1。它类似于互斥锁(Mutex),但有一些细微的区别,如不支持递归锁定和优先级继承等特性。[示例代码] 以下是一个使用 CMSIS-RTOS v2 API 的示例,展示了如何使用信号量来控制对共享资源的访问:三、解释
2025-01-07 09:17:46
78
转载 实时操作系统(RTOS)中 Event、 Semaphore、 Mutex 、 MessageQueue 相关函数汇总及功能介绍
事件:用于简单的状态通知和条件检查。信号量:用于控制对共享资源的访问,确保一次只有一个任务可以访问某个资源。互斥锁:用于保护共享资源,确保同一时间只有一个任务可以访问该资源。消息队列:用于在任务之间传递结构化的数据,实现任务间的通信。选择哪种机制取决于你的具体需求。如果你只需要简单的状态通知,事件可能就足够了;如果你需要控制对共享资源的访问,信号量是一个很好的选择;如果你需要保护共享资源并避免竞争条件,互斥锁会更合适;如果你需要在任务之间传递数据,那么消息队列会更合适。
2025-01-06 18:59:23
138
原创 常用命令git merge
git merge是 Git 中用于合并两个或多个分支的更改到一个分支的命令。这个操作常用于将特性分支的更改合并到主分支(通常是main或master),或者是合并来自其他开发者的更改。
2024-07-29 19:50:53
437
原创 常用git commit 命令详解
提交信息大多数人都是使用一行,有时改动内容会比较多,三言两语很难表示清楚,可以使用换行更好的描述改动内容。将所有已被 git 跟踪的文件提交到版本库 (包含工作区和暂存区),进入 vi 命令页面输入提交信息。最常见的用法如下所示,如果没有 -m 参数,会进入 vi 编辑模式,然后写入提交信息。将某些文件提交到版本库,可以跳过 git add,但必须是已被跟踪的文件。将所有暂存区文件提交到版本库,进入 vi 命令页面输入提交信息。在日常开发中,难免会出现提交时备注信息打错了,想要修改它。
2024-07-29 19:06:52
533
原创 git stash
是一个在 Git 中用来临时存储当前工作目录中未提交的更改的命令。当你需要切换到另一个分支或者进行其他操作,但又不想提交当前的更改时,可以使用这个命令。这会将最近的 stash 应用到当前工作目录中。如果有多个 stash,你可以指定 stash 的索引来应用特定的 stash。这不仅会应用最近的 stash,还会将其从 stash 列表中删除。这会保存当前工作目录中的更改,并重置工作目录到上次提交的状态。这会显示所有已保存的 stash 列表。这会删除所有保存的 stash。这会删除最近的 stash。
2024-07-01 13:26:18
822
1
转载 simpread-计算机英语 2000 带英标
superimpose [.su:p.rim.p.uz, .sju:-] vt. 重叠,叠加。inexperienced [.iniks.pi.ri.nst] a. 不熟练的,外行的。acknowledgment [.k.n.lid.m.nt] n. 接收 (收妥),承认。reorganization [.ri:.:g.nai.zei…second [.sek.nd, si.k.nd] n. & a. 秒,第二 (的)compatibility [k.m.p.t.'biliti] n. 兼容性,适应性。
2024-04-19 16:12:57
261
原创 Keil MDK 5.37 及之后版本 安装 AC5(ARMCC) 编译器详细步骤
百度网盘下载:https://pan.baidu.com/s/1JExRnPuJsW_GnTQ6G8QJag?—— 我们只需手动安装 AC5 编译器即可!
2024-04-01 11:43:53
4171
2
转载 FreeRTOS 实时操作系统第二十二讲 - 综合应用 3(完结)
1、间隔 1s 获取 SHT30 传感器数据,通过 TFT 屏幕显示2、上位机通过 RS-485 接口与实战板通讯3、USB 串口打印收到的上位机数据4、按键 2 与 3 控制计数信号量,并通过数码管显示5、按键 4 控制继电器,与上位机联动6、开启低功耗 Tickless 模式。
2024-01-09 17:28:46
192
转载 FreeRTOS 实时操作系统第二十一讲 - 综合应用 2
1、间隔 1s 获取 SHT30 传感器数据,通过 TFT 屏幕显示2、上位机通过 RS-485 接口与实战板通讯3、USB 串口打印收到的上位机数据4、按键 2 与 3 控制计数信号量,并通过数码管显示5、按键 4 控制继电器,与上位机联动6、开启低功耗 Tickless 模式。
2024-01-09 17:25:10
186
转载 FreeRTOS 实时操作系统第二十讲 - 低功耗 Tickless 模式
Tickless 低功耗机制是当前小型 RTOS 所采用的通用低功耗方法,比如 FreeRTOS,RTX 和 uCOS-III 等。Tickless 是怎样一种模式呢?仅从字母上看,Tick 是滴答时钟的意思,less 是 Tick 的后缀,表示较少的,整体看就是表示减少滴答时钟节拍运行。在 FreeRTOS 系统中,当用户任务都被挂起或者阻塞时,最低优先级的空闲任务会得到执行。那么 STM32 支持的低功耗模式就可以放在空闲任务里面实现。
2024-01-09 17:21:26
427
1
转载 FreeRTOS 实时操作系统第十八讲 - 动态内存管理
动态内存管理是 FreeRTOS 非常重要的一项功能,前面章节讲解的任务创建、信号量、消息队列、事件标志组、互斥信号量、软件定时器组等需要的 RAM 空间都是通过动态内存管理从 FreeRTOSConfig.h 文件定义的 heap 空间中申请的。 FreeRTOS 支持 5 种动态内存管理方案,分别通过文件 heap_1,heap_2,heap_3,heap_4 和 heap_5 实现。 heap_1 动态内存管理方式是五种动态内存管理方式中最简单的,这种方式的动态内存管理一旦申请了相应内存后,是
2024-01-09 17:11:20
250
转载 FreeRTOS 实时操作系统第十七讲 - 综合应用 1
1、间隔 1s 获取传感器数据,通过数码管显示2、按键 2,3,4 触发蜂鸣器状态改变3、上位机通过 RS-485 接口与实战板通讯4、USB 串口打印收到的上位机数据。
2024-01-09 17:02:25
168
转载 FreeRTOS 实时操作系统第十六讲 - 任务通知
FreeRTOS 从 V8.2.0 版本开始提供任务通知功能,每个任务都有一个 32 位的通知值,在多数情况下,任务通可以替代二值信号量、计数信号量、事件组,也可以替代长度为 1 的队列 (可以保存一个 32 位整数或指针值)。相对于以前使用 FreeRTOS 内核通信的资源时必须创建队列、二进制信号量、计数信号量或事件组的情况,使用任务通知显然更灵活。
2024-01-09 16:58:33
149
转载 FreeRTOS 实时操作系统第十五讲 - 软件定时器
FreeRTOS 软件定时器的时基是基于系统时钟节拍实现的,之所以叫软件定时器是因为它的实现不需要额外使用硬件定时器,而且可以创建很多个,综合这些因素,这个功能就被称之为软件定时器组。既然是定时器,那么它实现的功能与硬件定时器也是类似的。在硬件定时器中,我们是在定时器中断中实现需要的功能,而使用软件定时器时,我们是在创建软件定时器时指定软件定时器的回调函数,在回调函数中实现相应的功能。
2024-01-09 16:43:10
279
转载 FreeRTOS 实时操作系统第十四讲 - 事件
是实现任务与任务或任务与中断间通信的机制,用于同步,无数据传输。在 FreeRTOS 事件中,获取每个事件时,用户可以选择感兴趣的事件,并且选择读取事件信息标记。它有 3 个属性,分别是逻辑与、逻辑或以及是否清除标记。当任务等待事件同步时,可以通过任务感兴趣的事件位和事件信息标记来判断当前接收的事件是否满足要求,如果满足,则说明任务等到对应的事件,系统将唤醒等待的任务;否则,任务会根据用户指定的阻塞超时时间继续等待下去。
2024-01-06 20:29:29
615
转载 FreeRTOS 实时操作系统第十三讲 - 互斥信号量
前面学过,取值只有 0 与 1 两种状态的信号量称之为二值信号量。而互斥信号量是一种特殊的二值信号量,具有防止优先级翻转的特性。创建互斥信号量时,系统会为创建的互斥信号量分配内存,互斥信号量创建完成后的示意图如下:从上图可以看出,互斥信号量是一种长度为 1,消息大小为 0 的特殊消息队列。因为这个队列只有空或满两种状态,而且消息大小为 0,因此在运用时,只需要知道队列中是否有消息即可,而无需关注消息是什么。
2024-01-06 19:54:49
317
转载 FreeRTOS 实时操作系统第十二讲 - 计数信号量
取值只有 0 与 1 两种状态的信号量称之为二值信号量取值大于 1 的信号量称之为计数信号量Note:计数信号量的取值也可以为 1,但通常大于 1,如果取值为 1,相当于只有 0 与 1 两种状态,用二值信号量即可。创建计数信号量时,系统会为创建的计数信号量分配内存,计数信号量创建完成后的示意图如下:从上图可以看出,计数信号量是一种长度大于 1,消息大小为 0 的特殊消息队列。因为这个队列的消息大小为 0,因此在运用时,只需要知道队列中是否有消息即可,而无需关注消息是什么。
2024-01-06 16:03:33
611
转载 FreeRTOS 实时操作系统第十一讲 - 二值信号量
当信号量被获取了,信号量值变为 0;当信号量被释放了,信号量值变为 1。把这种取值只有 0 与 1 两种状态的信号量称之为二值信号量。创建二值信号量时,系统会为创建的二值信号量分配内存,二值信号量创建完成后的示意图如下:从上图可以看出,二值信号量是一种长度为 1,消息大小为 0 的特殊消息队列。因为这个队列只有空或满两种状态,而且消息大小为 0,因此在运用时,只需要知道队列中是否有消息即可,而无需关注消息是什么。
2024-01-06 15:12:54
1074
转载 FreeRTOS 实时操作系统第十讲 - 消息队列
消息队列简称队列,是一种常用于任务间通信的数据结构。如下图:消息队列可以在任务与任务间、中断与任务间传递消息,实现任务接收来自其它任务或中断的不固定长度的消息。< 队列用于任务与任务间 >< 队列用于任务与中断间 >
2024-01-06 13:54:49
850
转载 FreeRTOS 实时操作系统第九讲 - 链表 (数据结构)
**/用于检测列表数据是否完整辅助值 (比如用于任务的优先级),用于帮助节点进行顺序排列指向下一个节点的指针指向上一个节点的指针指向拥有该节点的内核对象,通常是 TCB(任务控制块 / 任务句柄)指向该节点所在的链表用于检测列表数据是否完整/**/} List_t;用于检测列表数据是否完整链表节点计数器,用于记录该链表下有多少个节点,根节点除外链表节点索引指针,用于遍历节点链表最后一个节点。链表是一个圈,首尾相连的,首就是尾,尾也是首。
2024-01-06 12:23:59
1362
转载 FreeRTOS 实时操作系统第八讲 - 时间管理 (系统节拍,延时函数)
FreeRTOS 实时操作系统需要一个时钟节拍,以供系统处理诸如延时、超时、软件定时器等与时间相关的事件。时钟节拍是周期性定时中断,这个中断可以看做是系统心跳。中断时间间隔取决于不同的应用,一般是 1ms – 100ms。时钟的节拍中断使得内核可以将任务延迟若干个时钟节拍,以及当任务等待事件发生时,提供等待超时等依据。时钟节拍率越快,系统响应越快,系统的额外开销也越大。对于 Cortex-M3 内核的 STM32F103 ,教程配套的例子都是用滴答定时器来实现系统时钟节拍的。
2023-12-27 17:01:55
2341
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人