源码解析下载pdf食用效果更佳。补充Freertos启动流程

本文详细介绍了FreeRTOS中的链表操作(如list_t和listItem)、任务结构(tcb_t)以及内存管理,涵盖了初始化、插入、删除、任务创建与调度、内核和应用程序内存管理,以及启动流程中的关键步骤。特别关注了list_cvlist_initialise可能导致的崩溃问题和空闲任务的作用。
摘要由CSDN通过智能技术生成

FreeRTOS解析:List_freertos list.c vlistinitialise 崩溃-CSDN博客

写的很好!

内容有:

1.链表list_t/链表项listItem结构体分析,包括演示图解析,一目了然。还有一些细节补充。

 链表初始化,插入,删除,遍历

2.任务tcb_t

  任务tcb_t结构体(状态链表),任务创建,任务删除,任务切换,任务调度器的启动与结束

3.应用程序内存管理(heap_x.c)

 内存管理包括:内核内存管理,应用程序内存管理

内核内存管理:每次在创建任务、队列或其他 RTOS 对象时,RTOS 内核都需要 RAM

应用程序内存管理:当应用程序需要内存时,可以从 FreeRTOS 堆进行分配

Freertos启动流程:

1.初始化中断向量表,初始化C语言环境(初始化堆栈),进main函数。

                初始化堆栈指针 SP=_initial_sp,初始化 PC 指针=Reset_Handler

                初始化中断向量表

                配置系统时钟

                初始化C语言环境(初始化堆栈)

                调用 C 库函数__main

2.main()中初始化硬件设备和系统。创建所有任务。

   我们自己在 main()函数中直接初始化我们的硬件外设,然后进行任务的创建即xTaskCreate(),在任务创建中,FreeRTOS 会帮我们进行一系列的系统初始化,在创建任务的时候,会帮我们初始化堆内存

3.开启任务调度器vTaskStartScheduler()函数

创建空闲任务,创建定时器服务任务,关闭中断,设置调度器运行为pdTRUE,表示调度器正在运行

  1. vTaskStartScheduler()?在创建完任务的时候,我们需要开启调度器,因为创建仅仅是把任务添加到系统中,还没真正调度,并且空闲任务也没实现,定时器任务也没实现,这些都是在开启调度函vTaskStartScheduler()中实现的。
  2. 为什么要空闲任务?因为 FreeRTOS 一旦启动,就必须要保证系统中每时每刻都有一个任务处于运行态(Runing),并且空闲任务不可以被挂起与删除。空闲任务的优先级是最低的,以便系统中其他任务能随时抢占空闲任务的 CPU 使用权。空闲任务还具有删除任务资源的功能。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值