4#ifndef UNITREGISTRY_HPP
5#define UNITREGISTRY_HPP
9#include <unordered_map>
13#if defined(CONFIG_UNIT_THREAD_ANALYZER)
14#include <zephyr/debug/thread_analyzer.h>
17#define OF_CONCAT_INTERNAL(x, y) x##y
18#define OF_CONCAT(x, y) OF_CONCAT_INTERNAL(x, y)
52 template <
typename UnitType>
55 g_unitFactories.push_back([]() -> std::unique_ptr<Unit> {
return std::make_unique<UnitType>(); });
64 static std::unordered_map<std::string_view, std::unique_ptr<Unit>>&
initialize();
72 static std::optional<Unit*>
findUnit(std::string_view name);
86 static std::vector<UnitFactoryFunction> g_unitFactories;
87 static std::vector<UnitRegistrationFunction> g_registrationFunctions;
88 static std::unordered_map<std::string_view, std::unique_ptr<Unit>> g_units;
90#if defined(CONFIG_UNIT_THREAD_ANALYZER)
98 static void threadStatCallback(thread_analyzer_info* info);
109#define DEFINE_UNIT_TYPE(TypeId) \
110 static constexpr uint32_t TYPE_ID = TypeId; \
111 uint32_t getTypeId() const override { return TYPE_ID; }
123 uint32_t hash = 5381;
124 for (
size_t i = 0; str[i]; ++i)
126 hash = ((hash << 5) + hash) ^ str[i];
138#define AUTO_UNIT_TYPE(TypeName) \
139 static constexpr uint32_t TYPE_ID = typeNameHash(#TypeName); \
140 uint32_t getTypeId() const override { return TYPE_ID; }
150#define REGISTER_UNIT(UnitClass) \
152 OF::UnitRegistry::UnitFactoryFunction \
153 _unit_factory_##UnitClass __attribute__((section(".unit_registry"),used)) = \
154 []() -> std::unique_ptr<OF::Unit> { return std::make_unique<UnitClass>(); }; \
单元注册类
定义 UnitRegistry.hpp:30
static std::optional< Unit * > findUnit(std::string_view name)
通过名称查找单元信息
定义 UnitRegistry.cpp:85
static void tryRestartUnit(std::string_view name)
定义 UnitRegistry.cpp:110
static void updateAllUnitStats()
更新所有单元的资源使用统计
定义 UnitRegistry.cpp:136
static void tryStartUnit(std::string_view name)
定义 UnitRegistry.cpp:94
static std::unordered_map< std::string_view, std::unique_ptr< Unit > > & initialize()
初始化所有注册的单元
定义 UnitRegistry.cpp:44
static void tryStopUnit(std::string_view name)
定义 UnitRegistry.cpp:102
std::unique_ptr< Unit >(*)() UnitFactoryFunction
单元工厂函数类型
定义 UnitRegistry.hpp:42
static void registerUnit()
注册单个单元类型
定义 UnitRegistry.hpp:53
void(*)() UnitRegistrationFunction
单元注册函数类型
定义 UnitRegistry.hpp:36
constexpr uint32_t typeNameHash(const char *str)
计算类型名称的哈希值
定义 UnitRegistry.hpp:121