找回密码
 立即注册
楼主: tzz***

关于"访问"的表达是否准确?

[复制链接]

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
发表于 2023-9-22 10:46:34 来自手机 | 显示全部楼层
后面的else就是没嵌套中断方式。你仿真看看吧

点评

一级临界区中, if (cpu_sr==0) 已经符合条件了呀, 一定要去访真才知道吗  发表于 2023-9-22 10:53
回复 支持 反对 送花

使用道具 举报

该用户从未签到

20

主题

575

回帖

1191

积分

荣誉版主

积分
1191
 楼主| 发表于 2023-9-22 10:49:51 | 显示全部楼层
熊仔 发表于 2023-9-22 10:46
后面的else就是没嵌套中断方式。你仿真看看吧

if (cpu_sr==0) 已经符合条件了呀

点评

cpu_sr==1呢?去哪里了?  详情 回复 发表于 2023-9-22 10:58
回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
发表于 2023-9-22 10:58:51 | 显示全部楼层
本帖最后由 熊仔 于 2023-9-22 11:00 编辑
tzz1983 发表于 2023-9-22 10:49
if (cpu_sr==0) 已经符合条件了呀

cpu_sr==0x80呢?去哪里了?

第一层嵌套难道不是cpu_sr=0x80?不然怎么开中断

点评

在哪?  发表于 2023-9-22 11:01
回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
发表于 2023-9-22 11:03:25 | 显示全部楼层
您再好好分析吧。或者仿真看看。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
发表于 2023-9-22 11:05:08 | 显示全部楼层
第一级cpu_sr=0x80
第二级 cpu_sr=0x00
所以只要cpu_sr==0x00,就是在嵌套里面,
这么好理解,咋看不懂呢?我也想不明白你为啥看不懂。

点评

行吧,看歪了  发表于 2023-9-22 11:07
回复 支持 反对 送花

使用道具 举报

该用户从未签到

20

主题

575

回帖

1191

积分

荣誉版主

积分
1191
 楼主| 发表于 2023-9-22 11:30:27 | 显示全部楼层
熊仔 发表于 2023-9-22 11:05
第一级cpu_sr=0x80
第二级 cpu_sr=0x00
所以只要cpu_sr==0x00,就是在嵌套里面,

耐心挺好的, 为我解答了, 谢谢. 你会一直这么有耐心吗?

还有一个问题:
假设: <嵌套临界区中切换任务, 并非是为了等待一个事件,或其它任何原因进入阻塞, 在嵌套临界区中切换任务,本身就是为了切换而切换, 或者说只是为了好玩.>  那么无可厚非了.

如果这个假设不成立(表示嵌套临界区可以进入阻塞): 那么我可以在嵌套临界区中等待一个事件. 那么看下面的分析.
现在我在任务A嵌套临界区中等待一个事件, 此时OS会切换任务, 并且此时没有其它任务就绪, 那么进入了空闲任务.
注意, 因为是在临界区用代码切换到空闲任务的, 所以中断此时是没开的.
请问在空闲任务中, 没开任何中断的前提下, (时钟现在失灵了,其它任何中断都失灵了), 如何离开空闲任务, 是不是陷里面了?



点评

中断没有开,肯定不能阻塞的  详情 回复 发表于 2023-9-22 11:38
回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
发表于 2023-9-22 11:38:48 | 显示全部楼层
本帖最后由 熊仔 于 2023-9-22 11:43 编辑
tzz1983 发表于 2023-9-22 11:30
耐心挺好的, 为我解答了, 谢谢. 你会一直这么有耐心吗?

还有一个问题:

中断没有开,肯定不能阻塞的
带阻塞服务的都是需要滴答定时器调度的吧。默莫非我理解错了?
回复 支持 反对 送花

使用道具 举报

该用户从未签到

20

主题

575

回帖

1191

积分

荣誉版主

积分
1191
 楼主| 发表于 2023-9-22 11:51:41 | 显示全部楼层
本帖最后由 tzz1983 于 2023-9-22 11:53 编辑
熊仔 发表于 2023-9-22 11:38
中断没有开,肯定不能阻塞的
带阻塞服务的都是需要滴答定时器调度的吧。默莫非我理解错了?
...

我知道你会这么回答, 我也知道不能. 我想表达的意思, 你为何要切换?


2. 此时你是要切换到的目标任务, 是高于自身的呢,  还是低的? (UCOS不存在同等优先级) , 如果说要切到高的, 那么"不劳你费心", 高优先级就绪时OS已经提前切换过去了. 如果你硬要说在临界区OS无法使高优先级就绪, 那么结果是, 你最终切换到的任务, 是你自己.

3. 如果切换到低的, 你怎么切换?         //OSPrioCur = OSPrioHighRdy;      //OSTCBCur  = OSTCBHighRdy; 这两句话是假的吗?  你不是又切回自己了吗, 何必呢

回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
发表于 2023-9-22 12:00:42 | 显示全部楼层
除了阻塞的不能用,还有很多其他服务能用吧。OS_Sched();会获取就绪的更高优先级。不应该又切回自己。
当然一般人不会在临界区切换任务,我也同意这个说法。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

20

主题

575

回帖

1191

积分

荣誉版主

积分
1191
 楼主| 发表于 2023-9-22 12:17:26 | 显示全部楼层
熊仔 发表于 2023-9-22 12:00
除了阻塞的不能用,还有很多其他服务能用吧。OS_Sched();会获取就绪的更高优先级。不应该又切回自己。
当然 ...

OS_Sched()会获取更高级任务? OS_Sched()是不是OS自身的代码?  在这之前高级任务就绪的时候会不会发生OS主导的任务切换?
你能不能演示出一个例子: 高优先级任务就绪时,(任务非锁状态),OS不切换, 然后等着你来进入临界欧嵌套, 然后再切换. 能吗, 如果能, 那证明你找到了UCOS的BUG
回复 支持 反对 送花

使用道具 举报

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-17 23:26 , Processed in 0.076747 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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