当前位置:   article > 正文

FreeRTOS启动流程_freertos双核启动

freertos双核启动

Reset_Handler:芯片上电默认进Reset_Handler

SystemInit:初始化时钟及中断向量映射
__main :main函数入口

__main

xTaskCreate(): pvPortMalloc()分配任务控制块内存,prvHeapInit() 初始化堆栈
vTaskStartScheduler():启动系统节拍定时器器(一般都是使用 SysTick)并启动第一个任务

FreeRTOS 为了任务启动和任务切换使用了三个异常:SVC、PendSV 和 SysTick:

SVC(系统服务调用,亦简称系统调用)用于任务启动,有些操作系统不允许应用程
序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函
数的呼叫请求,以这种方法调用它们来间接访问硬件,它就会产生一个 SVC 异常。

PendSV(可挂起系统调用)用于完成任务切换,它是可以像普通的中断一样被挂起的,
它的最大特性是如果当前有优先级比它高的中断在运行,PendSV 会延迟执行,直到高优先
级中断执行完毕,这样子产生的 PendSV 中断就不会打断其他中断的运行。

SysTick 用于产生系统节拍时钟,提供一个时间片,如果多个任务共享同一个优先级,
则每次 SysTick 中断,下一个任务将获得一个时间片。

注意:PendSV和SysTick异常优先级设置最低,避免任务切换时打断某个中断服务程序。
SysTick是硬件定时器,响应中断延迟与其无关。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/677274
推荐阅读
  

闽ICP备14008679号