【发布时间】:2017-06-11 01:42:13
【问题描述】:
我正在使用 A13 处理器的 Linux(A13-OLinuXino-MICRO) 上用 c 编写一个简单的代码。如果这很重要,我正在使用 gcc 编译器。假设我有一个简单的循环,它只是从 1 数到 100,我希望在这个循环中尽可能少地中断。我认为我能做的最好的事情就是禁用中断(如果可能的话,甚至是定时器中断)并在循环后启用它。我的程序中有多个地方需要执行此操作。任何人都可以帮助我编写一个简单的 C 代码来保护循环免受中断...我可以在我的平台上编译和运行的东西吗?
编辑:内核线程可能是一个答案。我怎样才能运行具有内核权限的东西?我看到人们谈论 disable_local_interrupt() 但我不知道如何使用它。
编辑:这是我要解决的实际问题。我需要在无中断环境中运行我的应用程序。
编辑:是的,我确信 Linux 是我需要使用的,而且我知道中断对操作系统很重要,这就是我不想永远禁用它们的原因。当我运行它时,我只想在操作系统上强制执行几分之一秒的无中断。另外,没有我需要解决的主要问题,这是我需要解决的“问题”,所以不要问我为什么要这样做。
【问题讨论】:
-
希望没有办法做到这一点!您甚至不应该考虑从用户代码进行如此低级别的修改(并且在内核代码中要非常小心)。这是一个 XY 问题。您尝试通过此解决的实际问题是什么?
-
如果这是一项普遍可用的功能,那么任何人都可以编写一个具有永无止境的循环的程序,该循环会阻塞整个系统,直到有人物理地拔掉插头,因为任务调度依赖于时钟生成的中断.
-
禁用中断就像处理器指令一样简单。通常助记符类似于
cli。但是,它是特权指令,只能在特权上下文中执行。 -
使用实时操作系统。
-
“我需要在无中断环境中运行我的应用程序”——那么您就不想在 Linux 上运行它。在 Windows、OS X 或任何其他多任务操作系统上也不行。如果您需要确定您的程序不会被中断,那么您可能需要在裸机上将其作为独立程序运行。
标签: c linux linux-kernel interrupt