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.
|
|
#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; }
|