UCOS_STM32的任务切换

本文详细解析了UCOS_STM32操作系统中任务切换的过程,从启动第一个任务的步骤开始,包括OSInit、OSTaskCreate、OSTaskStkInit、OSStart和OSStartHighRdy。重点介绍了OSTaskStkInit函数如何构造任务伪现场,以及在中断返回时如何进行堆栈操作。此外,还概述了普通任务切换的流程,涉及到OSTaskResume、OSSched和NVIC_PENDSVSET的使用,以及在任务切换中断处理中对寄存器和堆栈的操作。
摘要由CSDN通过智能技术生成

1、启动第一个任务

os_start

   |--》OSInit

   |--》OSTaskCreate

              |--》OSTaskStkInit

   |--》OSStart

             |--》OSStartHighRdy


2、OSTaskStkInit,这个函数用于构造一个伪现场,用于调度中断的出栈处理

CPU_STK  *OSTaskStkInit (OS_TASK_PTR    p_task,
                         void          *p_arg,
                         CPU_STK       *p_stk_base,
                         CPU_STK       *p_stk_limit,
                         CPU_STK_SIZE   stk_size,
                         OS_OPT         opt)
{
    CPU_STK  *p_stk;


    (void)opt;                                              /* Prevent compiler warning                               */

    p_stk = &p_stk_base[stk_size];                          /* Load stack pointer                                     */
                                                            /* Registers stacked as if auto-saved on exception        */
    *--p_stk = (CPU_STK)0x01000000u;                        /* xPSR                                                   */
    *--p_stk = (CPU_STK)p_task;                             /* Entry Point                                            */
    *--p_stk = (CPU_STK)OS_TaskReturn;                      /* R14 (LR)                                               */
    *--p_stk = (CPU_STK)0x12121212u;                        /* R12                                                    */
    *--p_stk = (CPU_STK)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值