当前位置: 首页 > news >正文

UCOS移植

移植Ucos应该满足的条件:

  • 处理器的C编译器可以产生可重入码
    可重入码可以被一个以上的任务调用,而不必担心数据的破坏。或者说可重入码在任何时刻都可以被中断,一段时间后又可以运行,而相应数据不会丢失。
  • 在程序中可以打开和关闭中断
    在Ucos中,打开和关闭中断主要通过OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏来进行的
  • 处理器支持中断,并且能够产生定时中断(通常在10~1000Hz之间)
    Ucos通过定时器的中断实现多任务的调度
  • 处理器支持能够容纳一定量数据的硬件堆栈
    对于一些只有10根地址线的8位控制器,芯片最多可访问1KB的存储单元,在这样的条件下移植是由困难的。
  • 处理器有将堆栈指针和其他CPU寄存器存储和读出到堆栈的指令

    OSCtxSw()的工作

  • 把终止任务的断电指针保存到任务堆栈中,即PC
  • 把CPU通用寄存器的内容保存到任务堆栈中
  • 把终止任务的任务堆栈指针保存到该任务的任务控制块的OSTCBStkPtr中
  • 获得待运行任务的任务控制块
  • 使CPU通过任务控制块获得待运行任务的任务堆栈指针
  • 把待运行任务的堆栈中的通用寄存器的内容恢复到CPU的通用寄存器中
  • CPU获得待运行任务的断电指针

    在以上步骤中,第一项和最后一项有些麻烦,对于终止任务,应把任务的断点指针压入任务堆栈,对于待运行任务而言,应把任务堆栈的上次任务被终止时存放在堆栈中的中断指针推入PC寄存器。但是目前的处理器一般没有对PC的出栈和入栈指令。这时可以采用其他改变PC值的方法变通。即想办法引发一次中断。

    Cotex_M3 移植

  • Cotex-M3相关处理器采用“向下生长“的栈模式,堆栈指针SP总是指向最后一个被压入堆栈的32位整数。
  • 函数OSPendSV()是Cortex_M3处理器进入异常服务例程时,通过一次PendSV异常中断完成在上下文切换时的用户线程模式到特权模式的切换,自动压栈了R0~R3,R12,LR(连接寄存器R14),PSR(程序状态寄存器)和PC(R15),并且在返回时自动弹出。

转载于:https://www.cnblogs.com/rogerjin/p/7122897.html

相关文章:

  • Cloud Native Application理论备忘录之(一)——Microservice architectural style
  • JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解
  • The difference between ArrayList and Vector
  • Android 系统名字、版本、API level的对应关系
  • 高通与TDK投入30亿美元组建合资公司
  • Dreamweaver 网页制作 11月30日
  • mysql generic版本安装配置
  • oracle恢复删除的数据
  • ActionBar第一课简单介绍
  • 让电脑拒绝访问特定网站
  • js继承的实现方法
  • dart系列(四) 动态生成”按钮”元素
  • 中国已超德国 成世界最大光伏发电国家
  • 把数据保存到数据库附加表dede_addon时出错,原因是字段名不合法
  • git的入门摸索和入门研究
  • Android优雅地处理按钮重复点击
  • Android组件 - 收藏集 - 掘金
  • centos安装java运行环境jdk+tomcat
  • ES6简单总结(搭配简单的讲解和小案例)
  • HTTP中的ETag在移动客户端的应用
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • k8s 面向应用开发者的基础命令
  • SQLServer之创建显式事务
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue.js源码(2):初探List Rendering
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Yeoman_Bower_Grunt
  • 第2章 网络文档
  • 多线程事务回滚
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 构造函数(constructor)与原型链(prototype)关系
  • 好的网址,关于.net 4.0 ,vs 2010
  • 机器学习 vs. 深度学习
  • 简析gRPC client 连接管理
  • 深入浅出webpack学习(1)--核心概念
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 学习HTTP相关知识笔记
  • 译自由幺半群
  • 自制字幕遮挡器
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​如何防止网络攻击?
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #DBA杂记1
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (007)XHTML文档之标题——h1~h6
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C#)一个最简单的链表类
  • (rabbitmq的高级特性)消息可靠性
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (一) storm的集群安装与配置
  • (转)VC++中ondraw在什么时候调用的