硬汉嵌入式论坛

 找回密码
 立即注册
查看: 479|回复: 12
收起左侧

[μCOS-III] 怎么关闭ucos iii 系统所有的中断

[复制链接]

28

主题

130

回帖

214

积分

高级会员

积分
214
发表于 2023-8-30 23:16:55 | 显示全部楼层 |阅读模式
运行中的任务不想被其他任务或者中断打断可以用临界代码。但是经过我实测发现这样操作以后好像依然还存在systick中断。

1、我的疑问是我可不可以人为用程序代码把systick直接暂停或者关闭了,任务执行完以后我再使能systick。这样操作不知道是否可行。(我会写直接操作关闭systick的程序,但是不知道这样操作是否科学合理,不知道会不会产生意外问题)

2、另外ucos iii系统本身后台默认本身都有什么中断。除了systick心跳中断以外还有其他什么中断吗。
3、总之我最终的目的是想实现在运行关键任务或者关键代码行的时候不被其他任何任务或者中断打断,不知道怎么操作才好。
4、除了下面的程序我还需要做什么吗。



[C] 纯文本查看 复制代码
CPU_CRITICAL_ENTER();
……
CPU_CRITICAL_EXIT();


[C] 纯文本查看 复制代码
OSIntEnter();
……
OSIntExit(); 

回复

使用道具 举报

7

主题

108

回帖

129

积分

初级会员

积分
129
发表于 2023-8-31 00:47:37 | 显示全部楼层
系统时钟不管有没有RTOS 都会存在的 单片机各个内核和外设都是依靠系统时钟运行的  肯定是不能暂停或者关闭的
回复

使用道具 举报

7

主题

108

回帖

129

积分

初级会员

积分
129
发表于 2023-8-31 00:47:41 | 显示全部楼层
系统时钟不管有没有RTOS 都会存在的 单片机各个内核和外设都是依靠系统时钟运行的  肯定是不能暂停或者关闭的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2023-8-31 01:48:50 | 显示全部楼层
看下你的这个CPU_CRITICAL_ENTER();源码是BASEPRI还是PRIMASK实现的。

没有关闭Systick仅存在于源码时用的BASEPRI关闭的,且Systick中断不受BasePri管理。

如果是PRIMASK,不存在无法关闭的Systick的情况。
回复

使用道具 举报

28

主题

130

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2023-8-31 11:41:52 | 显示全部楼层
jiangyou233 发表于 2023-8-31 00:47
系统时钟不管有没有RTOS 都会存在的 单片机各个内核和外设都是依靠系统时钟运行的  肯定是不能暂停或者关闭 ...

你没有理解我意思,我的意思是我知道systick肯定是存在的,我只是需要有时候临时禁用关闭下,避免中断到了以后打断关键程序。
回复

使用道具 举报

28

主题

130

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2023-8-31 11:44:25 | 显示全部楼层
jiangyou233 发表于 2023-8-31 00:47
系统时钟不管有没有RTOS 都会存在的 单片机各个内核和外设都是依靠系统时钟运行的  肯定是不能暂停或者关闭 ...

简单来讲我的关键程序一旦开始运行,我希望既不被系统调度其他任务打断,也不希望希望系统本身中断(比如systick中断)打断。
回复

使用道具 举报

28

主题

130

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2023-9-2 00:04:32 | 显示全部楼层
eric2013 发表于 2023-8-31 01:48
看下你的这个CPU_CRITICAL_ENTER();源码是BASEPRI还是PRIMASK实现的。

没有关闭Systick仅存在于源码时用 ...

目前测试发现使用下面的方式把关键代码保护起来,实测连systick中断也会被暂停。当然实际我的关键代码并不是中断程序,但是也可以用下面的方法。
[C] 纯文本查看 复制代码
OSIntEnter();
……
OSIntExit();

回复

使用道具 举报

24

主题

119

回帖

191

积分

初级会员

积分
191
发表于 2023-9-2 09:29:34 | 显示全部楼层
关闭arm总中断,执行完再开启。
比如flash即做XIP,又作数据存储器时,就是这么处理的
回复

使用道具 举报

28

主题

130

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2023-9-2 10:33:11 来自手机 | 显示全部楼层
yxydoctor 发表于 2023-9-2 09:29
关闭arm总中断,执行完再开启。
比如flash即做XIP,又作数据存储器时,就是这么处理的

直接_irqdisable?我之前裸机程序就是这么搞,上了ucos不知道这样搞会不会影响系统运行不正常
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2023-9-2 10:57:38 | 显示全部楼层
logo 发表于 2023-9-2 00:04
目前测试发现使用下面的方式把关键代码保护起来,实测连systick中断也会被暂停。当然实际我的关键代码并 ...

OSIntEnter是进出中断用的,不能随便在其他地方用。看一下源码
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2023-9-2 11:05:05 | 显示全部楼层
logo 发表于 2023-9-2 10:33
直接_irqdisable?我之前裸机程序就是这么搞,上了ucos不知道这样搞会不会影响系统运行不正常

临界段代码不管是关闭中断还是给调度器上锁一把都不会影响系统运行,反而是必须做的操作。前提是你临界段代码没问题
回复

使用道具 举报

24

主题

119

回帖

191

积分

初级会员

积分
191
发表于 2023-9-2 11:59:14 | 显示全部楼层
能加锁解决问题的就加锁。加锁也不解决问题的,关全局中断也是个招。
但等于说OS暂停,中断暂停。会有一些损失,比如要人工喂狗,通讯可能会丢包等等。
回复

使用道具 举报

28

主题

130

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2023-9-3 08:21:16 | 显示全部楼层
yxydoctor 发表于 2023-9-2 11:59
能加锁解决问题的就加锁。加锁也不解决问题的,关全局中断也是个招。
但等于说OS暂停,中断暂停。会有一些 ...

如果我的工程不用看门狗,在执行关键代码的时候,我明确知道这个期间不涉及到通信,即使通信也是关键代码执行完毕以后才会通信,这样暂停OS、中断应该没问题吧。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 10:38 , Processed in 0.216782 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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