• OSStartHighRdy()一去不复返【worldsing笔记】


    有关于uCos的启动过程讲解有很多文章,这里主要记录已下OSStartHighRdy()在stm32下是怎么写和运行的:

    stm32上电

    运行SystemInit(): 配置时钟,这个不要也可以,不要就是8MHz时钟

    运行main() : 调用OSInit(), OSTaskCreate()一个任务,OSSart()

                      OSInit():至少做3件事1、初始化零散的uCos全变量;2、把任务控制块、事件控制块链表化;3、创建已空闲任务IDLE(系统的);

                      OSTaskCreate():建立一个属于用户的任务(非系统的),这个是必须有的。

                      OSSart():上面几步其实都是填充数据,建立任务也是填充数据(写入任务的函数指针),OSSart()功能是找一个优先级最高填到变量里。其实他幕后是执行着

                                      是OSStartHighRdy();

    OSStartHighRdy():这个功能很明确:配置系统软件中断优先级、PSP栈指针清零、OSRunning = TRUE、触发软件中断、使能全局中断 目的:触发软件中断进行一次调度

                                这个模块就运行一次而且不返回。

    image

    进入软件中断服务程序:OSCtxSw() 也是uCos移植必改的模块;

    1、把正在运行的任务的cpu寄存器及变量存到PSP指向的内存(任务控制块OSTCBStkPrt)。

    2、把PSP栈指针也存进去;

    3、调用Hook;

    4、把新的任务(最高优先级)的任务控制块指针OSTCBHighRdy给当前B任务控制块指针(将要运行)OSTCBCur

    5、当前B任务控制块指针的栈指针OSTCBStkPrt取出CPU寄存器值

  • 相关阅读:
    count(*) 和 count(1)和count(列名)区别
    网页横向滚动条
    发送公众号模板消息
    tp中S与session()
    php 判断sql执行时间
    thinkphp联查
    php 获取当前时间
    微信分享
    测试用手机奇怪问题
    翻译|多少植物才能净化室内空气?
  • 原文地址:https://www.cnblogs.com/worldsing/p/3398553.html
Copyright © 2020-2023  润新知