Nav*_*een 3 c can-bus spi i2c embedded-linux
我是一名嵌入式工程师,经验不多。我在接受采访时被问到了一个问题,我想这并不新鲜,并且已经有了答案:
您有一个不断接收来自外部世界的输入的外设,该外设有一个缓冲区。输入的速率时不时地发生变化。外设需要读取输入缓冲区并对其进行处理。它检查输入消息并查看其是否与配置的过滤器匹配。如果匹配则转发,否则丢弃。
问题如下:
感谢你的帮助。谢谢。
基本上,他们会检查您是否曾经为某些串行外设编写过程序,因此这是一个很好的面试问题,可以检查某人是否是一个完全的初学者。
以“老派”方式执行此操作的正常方法是设置接收中断。如果数据可以不规则地到达并且我们不允许丢失数据,那么中断几乎是唯一明智的方法。特别是如果计划也支持不同的波特率。
然后可以将过滤器检查置于 ISR 内部(CAN 中除外,此类检查实际上由硬件完成)。从那时起,有效数据被传递到软件环形缓冲区。这最大限度地减少了 ISR 内的执行时间,同时解决了硬件缓冲区有限的问题。数据重入保护优选地需要通过环形缓冲区代码来执行。
现代方法宁愿避免中断,而是使用 DMA(如果微控制器支持)。这减轻了 CPU 处理频繁接收中断的负担。然后我们可以在每次缓冲区满时交换 DMA 缓冲区目标地址,并从那里使用原始缓冲区。或者,如果我们由于某种原因无法交换 DMA 缓冲区地址,则可以将整个 DMA 缓冲区粗略地硬复制到其他地方。
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |