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