我正在编写一个在FreeRTOS上运行的应用程序,其中我有不同的线程,所有线程都必须访问(读和写)相同的数据结构。 因此,我认为我可以实现一个全局数据存储,以某些分组的结构保存所有数据。我还考虑过使用SQLite之类的东西,但是我认为这对我的应用程序来说是一个过大的杀伤力。
尽管如此,仍有一些悬而未决的问题
global store
更好的方法? Google没有给出太多提示。答案 0 :(得分:4)
让我与您分享处理这种情况的最常见的C方法。
为了避免暴露大量全局数据,请使用opaque pointer
并使用以不透明指针作为参数的API列表。这样,您就可以拥有一组干净的API来访问所有结构,而将实现细节保留在 .c 文件中。使用 opaque指针的好处是,除了将不透明指针作为参数的API之外,没人知道如何处理指向数据的类型。这样可以为您的结构提供保护和封装,以便您使用提供的API对其进行访问或修改。
在由不透明指针标识的每个结构定义中,都有一个mutex
( FreeRTOS在信号量的术语中实现了互斥体)以在线程安全的情况下访问结构成员方式。创建互斥锁时必须使用xSemaphoreCreateMutex
。当您要访问可能由多个任务访问的成员数据时,在所有API中都使用xSemaphoreGive
和xSemaphoreTake
。