Tag: 中断处理

由main()修改并由ISR()访问的全局变量

这是我的c代码 char global_variable = 0; ISR(){ PORTA = global_variable; toggle_led;//to make sure that the interrupt is triggered } int main(){ while(1){ _delay_ms(500); gobal_variable++; PORTB = global_variable; } return 0; } 底线是我有一个由main函数修改的全局变量,并由main和ISR – 中断处理程序读取。 当main读取全局变量时,我得到期望的值,但在ISR中,我得到第一次分配给全局变量的值。 我知道这是一个优化问题,但我不明白是什么让编译器看到主要的正确值和ISR中的初始值 注意:当我在ISR中修改变量时,我在ISR中读取它,但在主要中我得到了初始值。

中断处理程序中的C printf()?

我听说C中的printf()不应该用在ISR中。 是因为它是阻止呼叫,还是因为它不是可重入的? 如果printf()不是可重入的,那么它不会意味着它也不能用于multithreading程序,除非它以某种方式“同步”吗? 谢谢,

中断处理程序是否必须是可重入的?

我在中断处理程序中使用静态变量,使中断处理程序不可重入。 拥有一个不可重入的中断处理程序是否可以? 当引发硬件中断时,事件是否进入某种队列并等待当前中断处理程序调用完成或是否立即调用中断处理程序? 谢谢 PS。 我正在使用Linux。 我正在使用的编程语言是C,如果它有所作为。

poll()返回POLLPRI和POLLERR

我开始使用Linux和嵌入式系统(路由器硬件和openwrt)进行C编程。 我已经启用了GPIO的中断,使用民意调查工作……差不多。 我可以使用poll(),如果我按下按钮来触发中断,poll()返回值> 0.到目前为止一切都很好。 现在我尝试在几个GPIO上同时使用poll(),因此想要分析每个潜在中断源的revents。 虽然中断似乎有效,但我得到了POLLPRI&POLLERR,我不明白为什么。 将pollfd结构减少到1个条目不会改变任何东西。 char value; int fd_btn1 = open(“/sys/class/gpio/gpio14/value”, O_RDONLY); int fd_left = open(“/sys/class/gpio/gpio12/value”, O_RDONLY); int fd_right = open(“/sys/class/gpio/gpio13/value”, O_RDONLY); struct pollfd fds[3]; fds[0].fd = fd_btn1; fds[1].fd = fd_left; fds[2].fd = fd_right; fds[0].events = POLLPRI; fds[1].events = POLLPRI; fds[2].events = POLLPRI; read(fd_btn1, &value, 1); read(fd_left, &value, 1); read(fd_right, &value, 1); ret […]

printk在一个中断处理程序中,它真的那么糟糕吗?

大家都知道中断处理程序应该尽可能短。 并且在中断处理程序中添加用于调试的函数如printk是不应该做的事情。 实际上,我之前在为我编写的中断驱动的char设备调试linux内核时尝试过它,它破坏了驱动程序的时序。 我的问题是,为什么会发生这种情况? printk函数被缓冲! 这意味着,据我所知,数据被插入到队列中,并且稍后处理,很可能是在中断处理程序完成之后。 那为什么不起作用呢?

Windows(或Linux)中的不间断进程?

有没有办法让程序无法中断(一个不间断的程序)? 通过这种方式,我的意思a process that can’t be terminated by any signal, kill command, or any other key combinations任何系统中a process that can’t be terminated by any signal, kill command, or any other key combinations :Linux,Windows等。 首先,我有兴趣知道它是否可能。 如果是,那么可能的范围是什么? 我主要用C,C ++和python编写代码; 但我不知道这些编程语言中有任何这样的命令。 是否可以使用汇编语言,以及如何使用? 或者使用嵌入式汇编代码(内联汇编)的高级语言c? 我知道有些信号可以捕获,有些信号不像SIGKILL和SIGSTOP。 我记得,当我习惯使用Windows-XP时, some viruses couldn’t be terminated even from Task Manager. 所以我想在低级语言中可能有一些解决方案。 也许通过重写中断向量表。 我们可以使用TSR(挂钩)编写一个不间断的程序吗? 因为TSR只能在重新启动计算机时或者从内存中明确删除TSR时删除。 […]