搜索
bottom↓
回复: 10

ucos保存现场和裸机中断是否一样?

[复制链接]

出0入4汤圆

发表于 2020-8-10 09:21:56 | 显示全部楼层 |阅读模式
最近学习ucos的内容,其中的核心就是任务切换过程中的上下文现场的保存,当发生任务切换时保存和当前任务有关的寄存器,
有点不理解的是如果不跑操作系统,正常裸机程序,设计了串口或定时器等中断,在发生中断时保存的现场寄存器种类和数量是否和ucos中发生任务切换时的一样?

出0入20汤圆

发表于 2020-8-10 10:47:18 | 显示全部楼层
本帖最后由 JIANGJIAYU 于 2020-8-10 11:11 编辑

关注此问题,我也想知道
我还想知道,保护/恢复现场是怎么做到的,就那十几个寄存器吗?  如果 局部和全局有好几十个变量怎么办?它是怎么记录与恢复的

出0入42汤圆

发表于 2020-8-10 10:59:53 | 显示全部楼层
有很多相似之处,不过裸机中断是单片机自带机制进行压栈上下文切换(这个可以理解为与生俱来),而ucos是在C代码中模拟中断上下文切换的行为(这个可以理解为人为的),工作类似但是执行效率不一样(类比生物这块就是反射弧的长度和路径及所用时间不一样)

出0入4汤圆

 楼主| 发表于 2020-8-10 11:00:35 | 显示全部楼层
JIANGJIAYU 发表于 2020-8-10 10:47
关注此问题,我也想知道
我还想知道,保护/恢复现场是怎么做大的,就那十几个寄存器吗?我局部和全局有好几 ...

我理解局部变量或者函数参数等都是存到Rx寄存器里的,所以保存的时候都包含了,不知道对不对。

出0入442汤圆

发表于 2020-8-10 11:46:47 来自手机 | 显示全部楼层
liyang121316 发表于 2020-8-10 10:59
有很多相似之处,不过裸机中断是单片机自带机制进行压栈上下文切换(这个可以理解为与生俱来),而ucos是在 ...

区分cpu。另外,根据架构不同,果机进中断是不需要压完的,比如riscv,arm之类只要把约定的caller saved保存一下就ok了,任务切换还需要把其余的也保存一遍。即,任务切换根据架构一般需要多保存十几个寄存器。

出0入442汤圆

发表于 2020-8-10 11:47:59 来自手机 | 显示全部楼层
JIANGJIAYU 发表于 2020-8-10 10:47
关注此问题,我也想知道
我还想知道,保护/恢复现场是怎么做到的,就那十几个寄存器吗?  如果 局部和全局 ...

局部和全局变量是程序自己管理的。cpu和任务调度只负责任务相关的寄存器,不负责程序自己的全局变量。

出105入79汤圆

发表于 2020-8-10 12:25:21 | 显示全部楼层
1. 全局变量是专用的RAM区域存储, 任务切换不影响.
2 . 任务函数内的局部变量存放在任务堆栈, 切换任务要进行切换保存,设定任务堆栈大小时,需要考虑:所有可能被堆栈调用的函数及其函数的嵌套层数,相关局部变量的大小,堆栈还需存入CPU寄存器,如果处理器有浮点数单元FPU寄存器的话还需存入FPU寄存器。

出0入10汤圆

发表于 2020-8-10 16:56:09 | 显示全部楼层
JIANGJIAYU 发表于 2020-8-10 10:47
关注此问题,我也想知道
我还想知道,保护/恢复现场是怎么做到的,就那十几个寄存器吗?  如果 局部和全局 ...

对的,就那十几个寄存器。
如果寄存器太多的话,其实是存放在堆栈里面。

出0入10汤圆

发表于 2020-8-10 17:00:50 | 显示全部楼层
对于STM32来说是一样的,上下文切换是通过触发异常来实现的,跟触发中断是一样的。这个过程CPU会在硬件层面主动入栈几个寄存器,对于中断,编译器会检测中断中是否需要更多的寄存器,如果需要会在中断服务函数之前再将其他寄存器入栈,上下文切换,OS软件将剩下的寄存器全部入栈。

出0入20汤圆

发表于 2020-8-11 10:55:50 | 显示全部楼层
10xjzheng 发表于 2020-8-10 16:56
对的,就那十几个寄存器。
如果寄存器太多的话,其实是存放在堆栈里面。 ...

每个任务都要设置一个私有的堆栈,把寄存器的数据都放在里面,,,,那么任务里面的临时变量也都会放到里面吗?这就挺神奇了的

出0入0汤圆

发表于 2020-8-12 10:39:23 | 显示全部楼层
任务专用的数据结构
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-21 00:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表