基质喷涂
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

66 lines
1.4 KiB

#include "can_config.h"
// 初始化静态成员变量
CanConfig* CanConfig::instance = nullptr;
osMutexId_t CanConfig::mutex = nullptr;
class CanConfigHelper
{
public:
CanConfigHelper()
{
osMutexAttr_t attr;
attr.name = "CanConfigMutex";
attr.attr_bits = 0U;
attr.cb_mem = nullptr;
attr.cb_size = 0U;
// attr.stack_mem = nullptr;
// attr.stack_size = 0U;
// attr.priority = osPriorityNormal;
CanConfig::mutex = osMutexNew(&attr);
if (CanConfig::mutex == nullptr) {
// 处理互斥锁创建失败的情况
}
}
~CanConfigHelper()
{
if (CanConfig::mutex != nullptr) {
// 释放互斥锁
osMutexDelete(CanConfig::mutex);
CanConfig::mutex = nullptr;
}
}
};
CanConfigHelper can_config_helper;
// 私有构造函数实现
CanConfig::CanConfig() : can_frame_id(0) {
}
// 静态方法,获取单例实例
CanConfig* CanConfig::getInstance() {
// 双重检查锁定,提高性能
if (instance == nullptr) {
// 获取互斥锁
osMutexAcquire(mutex, osWaitForever);
if (instance == nullptr) {
instance = new CanConfig();
}
// 释放互斥锁
osMutexRelease(mutex);
}
return instance;
}
// 设置 CAN 帧 ID
void CanConfig::setCanFrameId(uint32_t id) {
can_frame_id = id;
}
// 获取 CAN 帧 ID
uint32_t CanConfig::getCanFrameId() const {
return can_frame_id * CAN_FRAME_RANGE;
}