FreeRTOS-启动第一个任务

FreeRTOS开始第一个任务源码分析 vTaskStartScheduler:
1.创建一个空任务:优先级为0
2.是否使用软件定时器,是的话 创建软件定时器
3.关闭中断(关中断操作的寄存器是BASEPRI,开中断在SVC中断服务函数中开启)
4.初始化静态全局变量(xNextTaskUnblockTime\xSchedulerRunning\xTickCount)
5.初始化跟内核有关的硬件:xPortStartScheduler
    xPortStartScheduler:
    1.设置PENDSV 和 SYSTICK的中断为最低优先级==》怎样设置:(优先级分组)
        portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
        portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;

    2.配置systick=》怎样配置的?中断周期、使能【看systick寄存器】
        portNVIC_SYSTICK_LOAD_REG = ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
        portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE;
    3.如果MCU有FPU,使能FPU=》【权威指南 13.2】
    4.开启惰性压栈,跟FPU有关【权威指南13.2.6】
    5.开启第一个任务
        prvStartFirstTask
        1.获取MSP的初始值
        2.关中断操
        3.调用SVC 0,【引起SVC中断,进入SVC中断服务函数】【只有开启第一个任务才会引起SVC异常,其他不会】
        4.进入线程模式,使用PSP。PSP=>进程栈,MSP=》主堆栈【权威指南】
        5.跳转PC指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值