gpt4 book ai didi

c - 嵌入式Linux。以原子方式执行代码块

转载 作者:行者123 更新时间:2023-11-30 17:48:53 24 4
gpt4 key购买 nike

目前,我在嵌入式 Linux 设备(版本 2.6.28.10)上有一个用户空间应用程序,它切换 GPIO 引脚来控制一些自定义硬件。对 GPIO 寄存器的写入是从单独的 pthreads 进行的,所有这些都需要访问设备。大多数情况下,这工作正常,因为有一个信号量阻止多个线程同时访问进行 GPIO 写入的部分。

问题是,在写入这些 GPIO 寄存器的过程中(大约 24 个 8 位写入),另一个线程将中断当前线程,尽管中断线程无法修改寄存器,因为信号量时,控制权在几毫秒内不会返回到正在写入 GPIO 的线程,这当然会使发送到外部设备的数据无效。

linux中有没有一种方法可以保证这组GPIO写入(总共大约需要50usecs)不被另一个线程中断?

最佳答案

从你的问题中并不清楚这个线程如何中断工作线程,以及它是什么类型的线程(用户空间,或内核空间,或实际的中断)。

如果中断线程是用户空间线程,您可以让它尊重互斥信号量。另一种选择是暂时提高工作线程的优先级,这样 CPU 就不会被夺走(如果这样的设施可用)。

如果中断线程是内核空间线程,您可以尝试使用也可以从内核调用的信号量实现(System V 信号量)。不过这些更重。

如果中断线程实际上是一个中断,那么您需要构建一个由用户空间线程调用的内核组件,这反过来会禁用关键部分中的中断。这会对性能产生负面影响。

关于c - 嵌入式Linux。以原子方式执行代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com