Позвольте мне поделиться с вами наиболее распространенным C-способом для обработки сценариев такого типа.
Чтобы избежать предоставления большого количества глобальных данных, используйте opaque pointer
s и получите список API, которые принимают непрозрачный указатель в качестве параметра. Таким образом, вы можете иметь чистый набор API для доступа ко всем вашим структурам, оставляя специфику реализации только в файле .c . Преимущество использования непрозрачного указателя s состоит в том, что никто не знает, как обращаться с типом, указывающим на данные, за исключением API, который принимает непрозрачный указатель в качестве параметра. Это обеспечивает защиту и инкапсуляцию ваших структур, так что они когда-либо получают доступ или изменяются с помощью предоставляемых вами API.
В каждом из определений структуры, определенных непрозрачными указателями, есть mutex
( FreeRTOS имеет мьютекс, реализованный в терминах семафоров ) для доступа к элементам структуры потокобезопасным способом. Вы должны использовать xSemaphoreCreateMutex
при создании мьютекса. Во всех ваших API используйте xSemaphoreGive
& xSemaphoreTake
, когда вы хотите получить доступ к данным члена, которые потенциально доступны для нескольких задач.