野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18|回复: 0

[ucos] 关于uCOSIII中断延迟发布的一些疑问

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式
本帖最后由 玮-QKYtpK 于 2020-9-16 00:26 编辑

野火的《uCOS-III内核实现与应用开发实战指南—基于STM32》电子版的28.6.1(第453~454页)
1.书中说到系统中有些变量不能在中断中被访问,我想知道哪些系统变量是中断不能访问的,为什么不能访问
野火论坛202009152337096156..png
野火论坛202009152337561808..png


2.在中断中进入临界段和在普通任务中进入临界段有什么区别?为什么在中断中要尽量少地进入临界段(底层那些汇编我不是很懂,我是照着移植教程移植的,中断时进行的那些操作我不是很明白,我大概就只知道发生中断时会保存任务上下文,然后判断中断源,找到ISR入口地址,然后开始执行,不知道有没有理解错)
野火论坛202009152344485097..png


3.书里说在延迟提交方式中,uCOS访问临界段时采用的是锁调度器的方式,而直接发布则是采用关中断方式。我去看了下uCOSIII源码,貌似不是这样的(也可能是我哪里理解错了)

以在中断中发布信号量举例,中断调用OSSemPost():
野火论坛202009152350532989..png
(1)直接发布方式
直接发布方式时直接调用OS_SemPost(),该函数有一段关中断时间。记为T1
野火论坛202009152352321481..png
则直接发布方式中,总的关中断时间是T1,并且都是在中断中进行的
(2)延迟发布方式
延迟发布方式调用OS_IntQPost(),该函数也有一段关中断时间,记为T2
野火论坛202009152354501107..png
T2为在中断中关中断的时间
退出中断后,OS_IntQTask()任务开始运行,其也有一段关中断时间,记为T3
野火论坛202009152358384598..png
OS_IntQTask()调用OS_IntQRePost()函数,因为是发布信号量,所以OS_IntQRePost()最后又调用了OS_SemPost(),这里面关中断的时间是T1

现在来对比一下:
直接发布方式中,总的关中断时间是T1,且全是在中断中进行的
延迟发布方式中,总的关中断时间是T2+T3+T1,其中T2是在中断中进行的,T3、T1是在任务中进行的,虽然在中断中关中断的时间减少了,但是总的关中断时间是增加了的。按照书里的说法,延迟发布就是把中断中的临界段放到任务中来实现,这个时候进入临界段就可以用锁住调度器的方式代替了关中断,但是我看源码那里好像并没有用锁调度器的方式代替关中断。
野火论坛202009160013143836..png

老师当时讲的是uCOSII,而且就一节课就带过了(我根本就没学会),然后课程设计要求要用uCOS
然后我看了下野火的视频有uCOSIII的所以就来学uCOSIII了,学了刚十来天,这两天在中断管理这卡住了,来个大佬救救我吧


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|站点地图|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 ) 大学生ARM嵌入式2群

GMT+8, 2020-9-22 11:37 , Processed in 0.245803 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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