完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
是否有一种适当的方法可以使原子部分 100% 确定在此期间不会出现中断?
有没有像 代码:全选ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ... } 我们在 Linux 内核中进行了 avr 或 spin_lock_irqsave/spin_unlock_irqrestore 调用? 博客| 知乎 代码:全选static inline unsigned long arch_local_irq_save(void) { unsigned long flags; asm volatile("rsil %0, 1" : "=a" (flags) :: "memory"); return flags; } static inline void arch_local_irq_restore(unsigned long flags) { asm volatile("wsr %0, ps; rsync" :: "a" (flags) : "memory"); } rsil 指令中的 1 是我们 lx106 内核的最大正常中断级别。 linux mainline 支持 xtensa,因此您可以在那里查找。 |
|
相关推荐
1个回答
|
|
对于不同的操作系统,可能有些许不同。但是我们可以掌握一般的原子操作的技巧。
在 Linux 内核中,我们可以使用 spinlock 来保证原子操作。例如,当我们想要更新一个共享变量时,我们可以使用 spin_lock_irqsave 和 spin_unlock_irqrestore 来保证在这个操作期间没有中断发生。 在 AVR 中,我们可以使用 ATOMIC_BLOCK(ATOMIC_RESTORESTATE) 来保证原子操作。这个宏让编译器自动为我们生成代码,以保证在这个操作期间中断被禁用。对于其他类型的处理器,可能存在不同的实现,但基本思想是相同的。 总之,我们需要在原子操作期间禁止中断,也需要使用合适的机制来保证其中断不会发生。我们需要仔细研究每个平台的文档来确定可用的工具和技术,以保证我们的原子操作是可靠的。 |
|
|
|
只有小组成员才能发言,加入小组>>
968 浏览 1 评论
553浏览 6评论
462浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
447浏览 5评论
448浏览 4评论
418浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 23:03 , Processed in 0.774690 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号