标签: interrupt

如何实现/设置数据断点?

要求:

当内存位置发生变化或被写入时,我需要生成一个中断.从ISR,我可以触发一个蓝屏,它给我一个很好的堆栈跟踪方法名称.

处理办法:

  • 测试计时器ISR中的值.显然,这并没有给人满意的结果.
  • 我发现了bochs虚拟机.它有一个基本的内置调试器,可以设置数据断点并停止程序.但我似乎无法在那时产生中断.
  • bochs允许一个人连接gdb.我无法使用gdb支持构建它.

其他想法:

  • 一种"预览指令"中断,在执行前触发每条指令.一组使用过的内存写入指令应该是非常容易管理的,但是我认为它仍然是一个提取地址的PITA.而且我认为没有这样的中断.
  • 一种"预览内存访问"中断.再说一遍,我不认为它在那里.
  • 滥用分页.将感兴趣的页面标记为不存在,并在页面错误处理程序中测试该地址.我们仍然需要区分读写操作,我认为,页面错误处理程序无法知道确切的地址,只知道页码.

memory x86 operating-system kernel interrupt

2
推荐指数
1
解决办法
702
查看次数

在java中断一个线程

我发现这个解决方案知道一个线程是否被中断了.

public class OurThread extends Thread(){
    private volatile boolean stop = false;
    public void run(){
        while (!stop) {
             //Do your actions
        }
     }
 }
Run Code Online (Sandbox Code Playgroud)

但是我的run方法只执行一次,所以将insisde放在while循环中是没有意义的.我发现的另一种方法是检查Thread.isInterrupted()标志,然后终止线程.我的run()方法很长,所以我必须检查很多次这种情况使我的代码变脏.

我必须将它应用到四个不同的过程中,所以我试图找到一个更简单,更清洁的方法.我希望是否有类似的东西:

try{//my code}
catch(interrumption)
Run Code Online (Sandbox Code Playgroud)

问题是,由于我的线程是通过使用future.cancel()进行中断的,因此我的run()代码中没有抛出中断,然后我也无法做到这一点.

有什么建议吗?到目前为止,如果线程被取消,我会在代码之间检查很多次.谢谢 :)

java multithreading future interrupt

2
推荐指数
1
解决办法
255
查看次数

检查线程是否中断?

我只是想知道这个线程是否正在中断,如果我做得对吗?如果我错了,请告诉我

public void run(){
  int i;
  while(!Thread.currentThread().isInterrupted()){
    for(i=1;i<=100;i++){

      System.out.println("THREAD VALUE AFTER 1 SECOND IS: "+i);

      if(i==3){
        Thread.currentThread().interrupt();
        gotoInform();
        break;
      }
      try{
        Thread.currentThread().sleep(1000);////to sleep the Thread for 1 Second (1000ms)
      }
      catch(Exception e){            
        System.out.printf("Error"+e);            
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

java multithreading interrupt

2
推荐指数
1
解决办法
1万
查看次数

MSP430使用msp-gcc的中断例程将无法编译

我正在使用最新的CCS和MSP-GCC编译器.以下代码

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{...isr}
Run Code Online (Sandbox Code Playgroud)

这是TI宣布ISR-s的最新官方支持的方法不起作用,我得到以下编译器消息:

warning: ignoring #pragma vector  [-Wunknown-pragmas]
#pragma vector=USCI_A1_VECTOR
^
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
__interrupt void USCI_A1_ISR(void)
Run Code Online (Sandbox Code Playgroud)

我也尝试过不同的方法,比如:

interrupt(USCI_A1_VECTOR) USCI_A1_ISR(void) {  //code goes here}
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

c:/ti/ccsv6/ccs_base/msp430/include_gcc/msp430f5529.h:5328:33: error: expected declaration specifiers or '...' before '(' token
#define USCI_A1_VECTOR          (47)                     /* 0xFFDC USCI A1 Receive/Transmit */
                                ^
../uart_printf.c:40:11: note: in expansion of macro 'USCI_A1_VECTOR'
interrupt(USCI_A1_VECTOR) USCI_A1_ISR(void)
          ^
Run Code Online (Sandbox Code Playgroud)

这似乎工作:

__attribute__((interrupt(USCI_A1_VECTOR)))
void USCI_A1_ISR(void){ //code goes here }
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

gcc interrupt msp430

2
推荐指数
1
解决办法
2470
查看次数

如何在Matlab/GNU Octave中停止使用'run'启动的脚本?

有没有办法停止使用Matlab/GNU Octave中的'run'或'source'启动的脚本?我的意思是与Ctrl-C不同,比如给定的条件(可能由全局变量给出)保持并且向它发送中断信号.

例:

haltable.menvironment变量的值大于0.5 时,将停止脚本.

global environment

while (true)
  environment = rand;
endwhile
Run Code Online (Sandbox Code Playgroud)

它推出了

global environment

run ('haltable.m')
Run Code Online (Sandbox Code Playgroud)

haltable.m当然(在当然之外)可以指定它必须在条件满足后停止吗?

matlab interrupt halt octave runcommand

2
推荐指数
1
解决办法
966
查看次数

Ruby:^ C(ctrl + C)命令行中断的文本很好

我正在Ruby中编写一个小型命令行程序,用于查找特定文件夹中的更改.

该程序每隔几秒重复一次循环,看是否有变化.要停止程序,用户可以使用Ctrl + C(将^ C发送到控制台).

现在,当发生这种情况时,Ruby会发送以下堆栈跟踪:

^C./filename.rb:64:in `sleep': Interrupt
from ./filename.rb:64:in `block in parse'
from ./filename.rb:62:in `loop'
from ./filename.rb:62:in `parse'
from ./filename.rb:124:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我想改变它以显示一条 Exiting now...消息,类似于Rails以这种方式关闭时显示的程序.

如何才能做到这一点?

ruby command-line interrupt

2
推荐指数
1
解决办法
588
查看次数

如何在sw4stm32中启用中断功能

我使用SW4STM32工具链,我想在STM32103RET中溢出时使用timer2来领导LED,这是我打开LED的功能。

void TurnOnLed(){
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET);
}

void TurnOffLed()
{
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET);
}
Run Code Online (Sandbox Code Playgroud)

由stm32多维数据集mx设置了timer2初始化,但是我不知道当timer2溢出时调用哪个函数?

timer interrupt stm32 isr

2
推荐指数
1
解决办法
5925
查看次数

68k汇编:CPU是否在中断时存储状态寄存器?

我无法找到有关MC68000在外部中断期间是否保留其状态寄存器/ CCR的任何信息.我想如果CPU在条件分支之前立即中断并且中断修改CCR将是一个问题.现在我的中断代码如下所示:

            ORG     $110000   ; Location of IPL6 vector
IPL6        MOVE.W  SR, -(SP) ; Is this line necessary?
            MOVE.L  D0, -(SP)
            ; Perform interrupt tasks here
            MOVE.L  (SP)+, D0
            MOVE.W  (SP)+, SR ; Is this line necessary?
            RTE               ; Return
Run Code Online (Sandbox Code Playgroud)

我想知道是否需要从堆栈中推送/弹出SR的指示行,或者CPU是否在中断期间自动保存和恢复SR.

68000 interrupt easy68k

2
推荐指数
1
解决办法
211
查看次数

PIC如何知道键盘是键盘,应该映射到IRQ#1?

我读过OSDev Wiki的一篇文章,而不是IRQ#1匹配键盘.但PIC如何知道键盘是键盘,那么它应该映射到IRQ#1?

hardware assembly operating-system interrupt interrupt-handling

2
推荐指数
1
解决办法
92
查看次数

如何让Web Workers在执行计算时接收新数据?

我想使用Web Workers对数组进行排序.但是这个数组可能会随着时间的推移接收到新值,而worker仍在执行sort函数.

所以我的问题是,如何在收到新项目后"停止"工作者的排序计算,这样它就可以对该项目执行数组排序,同时仍然保留已经进行的排序?

例:

let worker = new Worker('worker.js');
let list = [10,1,5,2,14,3];
worker.postMessage({ list });
setInterval(() => worker.postMessage({ num: SOME_RANDOM_NUM, list }), 100);

worker.onmessage = event => {
  list = event.data.list;
}
Run Code Online (Sandbox Code Playgroud)

让我们说,我已经过了50岁,工人在此之前在排序方面取得了一些进展,现在我有这样的事情: [1, 2, 3, 10, 5, 14, 50].这意味着排序在索引处停止3.所以我将这个new数组传递回worker,因此它可以继续从位置进行排序3.

我怎样才能实现这一点,因为没有办法暂停/恢复网络工作者?

javascript sorting interrupt worker web-worker

2
推荐指数
1
解决办法
165
查看次数