
跟着野火学FreeRTOS
文章平均质量分 76
pQAQqa
为什么不能改用户id。。。
展开
-
跟着野火从零开始手搓FreeRTOS(6)多优先级的配置
首先需要定义空闲任务的优先级,还要定义一个表示创建任务的最高优先级的静态变量uxTopReadyPriority,默认这个变量的值为0,即空闲任务的优先级。/* 空闲任务的优先级,task.h定义 *//* uxTopReadyPriority,定义task.c定义 */原创 2024-04-23 18:00:00 · 1146 阅读 · 0 评论 -
跟着野火从一开始手搓FreeRTOS(2)创建任务
任务就是无限执行的函数,在main.c中定义任务:让LED1以500ms的频率闪烁。/* 延时500个tick */LED1_OFF;/* 延时500个tick */这里的延时函数必须使用 FreeRTOS 提供的延时函数,不要使用我们裸机编程中的软件延时。vTaskDelay()会让当前任务被阻塞转而去执行其他任务;而裸机的延时会让CPU陷入死循环,一直在执行当前任务无法跳出,无法实现多任务系统。原创 2024-04-11 18:00:00 · 1156 阅读 · 0 评论 -
跟着野火从零开始手搓FreeRTOS(5)空闲任务与阻塞延时
栈和TCB的内存空间均在main.c中定义。任务栈是一个定义好的数组,大小由中定义的宏 控制,默认为 128, 单位为字(byte),即 512 个字节(bit)。/* 定义空闲任务的栈 *//* 在FreeRTOSConfig.h中定义 *//* 获取空闲任务的内存 *//* 在main.c中定义 *///定义空闲任务发任务控制块。原创 2024-04-09 18:00:00 · 782 阅读 · 1 评论 -
跟着野火从一开始手搓FreeRTOS(外)错误集锦
PS:本篇负责记录在移植过程中碰到的问题,会不定时更新。原创 2024-04-07 18:00:00 · 308 阅读 · 0 评论 -
跟着野火从一开始手搓FreeRTOS(1)FreeRTOS移植
MemMang 文件夹下存放的是跟内存管理相关的,也是直接复制即可。这五个 heap 文件在移植的时候必须使用一个,因为 FreeRTOS 在创建内核对象的时候使用的是动态分配内存,而这些动态内存分配的函数则在这几个文件里面实现,不同的分配算法会导致不同的效率与结果,这里先选用。进行了中文注释,所以我以野火采用的9.0.0版本,这个版本的源码已经在野火的资料中包含了,所以我就直接拿来用了。我是通过官网下载的。首先是source,这些源文件和两个文件夹里的文件负责操作系统与硬件间的连接,是通用的。原创 2024-04-06 18:00:00 · 1623 阅读 · 1 评论 -
跟着野火从零开始手搓FreeRTOS(4)临界段的概念及应用
在FreeRTOS中,系统调度也就是 PendSV 中断,所以对临界段的保护还是在于对中断的开和关的控制。带中断保护的开中断函数, 将上一次关中断时保存的 BASEPRI 的值作为形参 ,与 portSET_INTERRUPT_MASK_FROM_ISR()成对使用。不带中断保护的开中断函数, 直接将 BASEPRI 的值设置为 0,与portDISABLE_INTERRUPTS()成对使用。在 FreeRTOS 中,对临界段的保护出现在两种场合,一种是在中断场合一种是在非中断场合。下面是不带返回值的。原创 2024-04-05 20:45:00 · 1005 阅读 · 1 评论 -
跟着野火从零开始手搓FreeRTOS(3.2)就绪列表与调度器的实现
任务创建好之后,我们需要把任务添加到就绪列表里面, 表示任务已经就绪,系统随时可以调度。就绪列表在。原创 2024-04-03 18:00:00 · 1017 阅读 · 1 评论 -
跟着野火从零开始手搓FreeRTOS(3.1)任务的了解与创建
我们要实现两个变量按照一定的频率轮流的翻转,每个变量对应一个任务,所以需要定义两个任务栈。任务栈其实就是一个预先定义好的全局数据,我们可以直接在main.c中定义,也可以放在FreeROS.h中。我这里是放在了main.c中。任务栈(TaskxStack)数据类型为StackType_t,大小由 TASK1_STACK_SIZE 这个宏来定义,默认为 128,单位为字,即 512字节,这也是 FreeRTOS 推荐的最小的任务栈。原创 2024-04-01 18:00:00 · 990 阅读 · 1 评论 -
跟着野火从零开始手搓FreeRTOS(2.3)实验演示
PS:这两天要对之前的项目进行修改,最近这几天应该不会更新下一部分的任务了。至于debug不会的兄弟,我之后会在补课专栏里稍微讲一下。这部分没什么说的,基本上就是新建上节点,插入链表中。然后在魔术棒里选择软件仿真,这点在新建工程的时候就提过了。这个实验主要是验证链表的使用,因此只要查看运行结果即可。由上图所示,我们可以发现结果和我们所设置的完全符合。原创 2024-03-25 23:02:25 · 406 阅读 · 1 评论 -
跟着野火从零开始手搓FreeRTOS(2.2)链表的初始化和插入
* 节点结构体定义 *//* 辅助值,用于帮助节点做顺序排列 */ (1)/* 指向链表下一个节点 */ (2)/* 指向链表前一个节点 */ (3)/* 指向拥有该节点的内核对象,通常是TCB */ (4)/* 指向该节点所在的链表 */ (5)/* 节点数据类型重定义 */ (6)(1)xItemValue是一个辅助值,用于帮助节点做顺序排列。该辅助值的数据类型为TickType_t。因为我们已经移植好了头文件,所以TickType_t并不会报错。原创 2024-03-22 22:55:16 · 847 阅读 · 1 评论 -
跟着野火从零开始手搓FreeRTOS(2.1)列表与列表项简介
链表首尾相连的,成一个环形,仿佛圆形的晾衣架。链表上的每个节点就像衣架上面的钩子,钩子本身没什么东西,但是可以挂很多不一样的东西,比如衣服、袜子、毛巾之类的。正如节点一样,节点指针将节点连接起来,并携带不同类型的数据挂载在链表上,数据类型可以为int、float、char等。链表常规的操作就是节点的插入和删除,为了顺利的插入,通常一条链表我们会人为地规定一个根节点,通常根节点还会有一个节点计数器,用于统计整条链表的节点个数。链表由几个节点相连而成,节点由节点指针和携带的数据组成,节点指针指向下一个节点。原创 2024-03-21 19:39:20 · 439 阅读 · 1 评论 -
跟着野火从零开始手搓FreeRTOS(1)新建工程
在MDK中新建工程,选择使用的芯片型号,我这里选的是ARM-CM3,然后在弹出来的表格中选择CMSIS下的CORE和Device下的Startup,点击OK。需要注意的是,portable内的文件是需要从野火的例程拷贝的,在第一部分的7到12的工程里都有这个文件夹,因为我对“freertos”文件夹重命名了,所以和我的名字不同。首先新建文件夹,我新建文件夹 “mine” 存放我所有的工程。在user文件夹下新建“main.c”文件并添加到user下,编写main函数并编译。至此,工程新建完成。原创 2024-03-20 21:39:39 · 313 阅读 · 0 评论 -
跟着野火从零开始手搓FreeRTOS(序)操作系统简介
这样的好处是不会丢失事件和中断,但解决任务仍是通过轮询的方式。多任务系统,是由操作系统的调度器判断执行哪个任务,每个任务都是无限循环,任务间按优先级执行,高优先级任务就绪,则放弃低优先级去执行高优先级。在本系列文章中,很多地方我会按照自己的喜好新建文件夹或者变量名之类的,看不习惯的各位可以按照原视频或者自己的喜好修改。因此,很多地方都是按照我自己的感觉来的,不习惯的朋友可以去看书和视频。PS:本人的本系列文章只是自己的感悟整理,如有问题,敬请及时提醒整改,之后可能会对本系列文章进行部分优化,欢迎大家指正。原创 2024-03-20 21:29:08 · 547 阅读 · 0 评论