I don't know that there is such a thing.
However, since you are writing in C, you need to explicitly encourage discipline around modularity. I would urge you to have a lightweight architecture that is composed of layers of abstractions, probably 2 or three layers to start. Each layer exposes concepts, behaviors, and relationships to a useful completeness that the next consuming layer can use without having to reach around to the next lower layer or bare metal.
Within a layer you can have additional modularity, akin to classes in other languages.
I'd then document the layers and how they are arranged relative to each other, next the layer interfaces. And then within a layer, the organization therein.
When you have that lightweight architecture, you'll have a clearer notion of where things should live, and hopefully a better idea of where to look for already existing abstraction and capabilities.
With a lightweight architecture, you'll also have names of layers and other modules that facilitates discussion and speeds communication with your colleagues.