- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
平台:ARM9
编程语言 C
要求 - 纯 C 语言,没有外部库,也没有提升。
操作系统 - REX RTOS
我有两个线程在嵌入式平台上运行 -
想法是将应用程序线程与驱动程序线程分离,这样我们就可以更改硬件驱动程序线程中的硬件和实现,但对应用程序线程的影响最小。
我的挑战是从硬件接收到的数据可能是动态的,即我们事先不知道应用程序线程应该为每个进出硬件的请求预留多少内存,因为这是在运行时确定的。
我在想驱动程序线程可以通知应用程序线程有太多数据要读取。应用程序线程然后分配内存并请求驱动程序线程读取数据。然后由应用程序线程相应地处理数据。这样,所有内存管理都在应用程序线程内。
最佳答案
我想到了几个选项:
1) malloc 驱动程序中的内存,在应用程序中释放它。但是......我们倾向于避免在任何接近实时要求的情况下使用 malloc。如果您可以访问 malloc/free,并且没有“实时”问题或内存碎片问题(即您的堆足够大),那么这是一个相当简单的方法。驱动程序只是通过消息队列将分配的指针发送到应用程序线程,应用程序在完成后释放内存。注意内存泄漏。
2) 环形或循环缓冲区。驱动程序完全管理一个固定大小的环形缓冲区,并在缓冲区准备就绪时简单地向应用程序发送消息。有关详细信息,请参见此处:Circular buffer .然后,应用程序通过驱动程序 API 再次将数据标记为“可用”,这有助于对应用程序线程隐藏环形缓冲区的详细信息。我们将这种方法用于我们的一个驱动程序,该驱动程序具有与您描述的非常相似的一组要求。在这种情况下,您需要关注确定环形缓冲区的“最佳”大小、驱动程序中的溢出处理等。
祝你好运!
关于c - 如何在 C 中跨线程进行动态数据传输和内存管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/689514/
我是一名优秀的程序员,十分优秀!