本文介绍: 第一个task是怎么起来的呢?分析vTaskStartScheduler,就会有答案了。那vTaskStartScheduler()干了啥呢?

第一个task是怎么起来的呢?分析vTaskStartScheduler,就会有答案了。

vTaskStartScheduler()干了啥呢?

一、创建prvIdleTask task

二、xTimerCreateTimerTask创建prvTimerTask task

三、初始化一些全局变量

3.1

 xNextTaskUnblockTime是下一个task运行tick

xSchedulerRunning 是否开始调度

xTickCount 当前系统tick

四、重点的重点是xPortStartScheduler函数

4.1 设置PendSV和SysTick中断优先级

 portNVIC_SYSPRI3_REG的定义

0xe000ed20在M7里对应寄存器叫做 System Handler Priority Register 3,是控制PendSV和SysTick中断优先级的寄存器

4.2vPortSetupTimerInterrupt 中设置中断频率和使能中断

两个存器定义

 0xe000e014 在M7里是SysTick Reload Value Register寄存器

 

0xe000e010 在M7里面SysTick Control and Status Register 寄存器

 

4.3 配置FPU

4.4 prvPortStartFirstTask 开启第一个tas

下面是一个多核启动第一个task的例程

这里只分析了多核中的一个核,其余一样,不同的核里0x40198004中的内容不一样,debug如下

芯片手册里也有讲到:

 

4.5 pendsv中断 vPortSVCHandler 

prvPortStartFirstTask里面出发svc中断后,会跳转到vPortSVCHandler

此时r14里是什么呢,在任务创建章节里有提到:FreeRtos任务创建分析-CSDN博客 

此时r14的值是

 0xfffffffd是啥意思呢?

表示回归thread 模式,并使用任务栈 

原文地址:https://blog.csdn.net/weixin_40204595/article/details/134690324

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_26040.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注