Итак, у меня есть следующее:
Код: Выделить всё
int shmem_fd = shm_open(shmem_fname.c_str(), O_RDWR|O_CREAT|O_EXCL, 0666);
if (shmem_fd != -1) {
/*
* This is the first access so size the shared memory, mmap it and initialize the data
*/
int result = ftruncate(shmem_fd, sizeof(Lps22DeviceData));
device_data_ = static_cast(mmap(NULL, sizeof(Lps22DeviceData), PROT_READ | PROT_WRITE, MAP_SHARED, shmem_fd, 0));
Это класс только для данных.
Код: Выделить всё
class Lps22DeviceData {
public:
std::recursive_mutex lock_ = {};
uint64_t read_total_ = 0;
bool initialized = false;
int16_t temperature_measurement_ = 0;
time_point temperature_measurement_system_time_;
time_point temperature_measurement_steady_time_;
milliseconds temperature_response_time;
int32_t pressure_measurement_ = 0;
time_point pressure_measurement_system_time_;
time_point pressure_measurement_steady_time_;
milliseconds pressure_response_time;
};
Код: Выделить всё
device_data_->read_total_ = 0;
device_data_->initialized = false;
device_data_->temperature_measurement_ = 0;
device_data_->temperature_measurement_system_time_ = system_clock::now();
device_data_->temperature_measurement_steady_time_ = steady_clock::now();
device_data_->temperature_response_time = milliseconds(0);
device_data_->pressure_measurement_ = 0;
device_data_->pressure_measurement_system_time_ = system_clock::now();
device_data_->pressure_measurement_steady_time_ = steady_clock::now();
device_data_->pressure_response_time = milliseconds(0);
device_data_->initialized = true;
Код: Выделить всё
device_data_->lock_ = {};
Код: Выделить всё
[build] /home/chrisk/Projects/RaspberryPi/WS/src/lib/devices/i2c/lps22.cpp: In constructor ‘Lps22::Lps22(I2cBus, uint8_t)’:
[build] /home/chrisk/Projects/RaspberryPi/WS/src/lib/devices/i2c/lps22.cpp:49:28: error: use of deleted function ‘std::recursive_mutex& std::recursive_mutex::operator=(const std::recursive_mutex&)’
[build] 49 | device_data_->lock_ = {};
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/792 ... red-memory
Мобильная версия