25 lines
965 B
C
25 lines
965 B
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#include <fcntl.h>
|
|||
|
|
#include <sys/mman.h>
|
|||
|
|
|
|||
|
|
class MemMapping
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
/*
|
|||
|
|
* memOpenFlags - параметры доступа к /dev/mem, например O_RDWR, O_SYNC
|
|||
|
|
* addr - физический адрес в памяти, м.б. не кратен размеру страницы
|
|||
|
|
* mmapProt - параметры mmap, например PROT_READ | PROT_WRITE
|
|||
|
|
* mmapFlags - параметры mmap, например MAP_SHARED
|
|||
|
|
*/
|
|||
|
|
MemMapping(int memOpenFlags, size_t addr, size_t size, int mmapProt, int mmapFlags);
|
|||
|
|
~MemMapping();
|
|||
|
|
void * get() { return m_mapAddr + m_pageOffset; };
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
void * m_mapAddr; //замапированный виртуальный адрес, кратный размеру страницы
|
|||
|
|
size_t m_size; //замапированный размер
|
|||
|
|
|
|||
|
|
size_t m_pageOffset; //отступ исходного addr от начала страницы
|
|||
|
|
};
|