内存映射函数mmap

内存映射:把系统空间里面的内容与用户空间共享,提高用户操作设备的效率。
头文件:
    #include <sys/mmap.h>
映射函数原型:
  void *mmap(     void *addr,   ---》要映射到内存的那一个地址上  填写为NULL让系统自动分配
           size_t length,  ---》要映射的空间大小
           int prot,   ---》映射空间的权限
  PROT_EXEC  Pages may be executed.可执行
        PROT_READ  Pages may be read.    可读
         PROT_WRITE Pages may be written. 可写
                 PROT_NONE  Pages may not be accessed.没有权限

            int flags,     ---》其他进程对改空间的访问权限
   MAP_SHARED  -》其他进程可访问改内存
           MAP_PRIVATE  -》该空间为私有的,其他进程不可访问
                             int fd,      ---》需要映射的设备描述符
             off_t offset );->映射空间的偏移量  0不偏移
返回值:成功返回映射空间的首地址,失败返回NULL
----------------------------------------------------------------------------
解除映射空间
函数原型:
    int munmap(void *addr,,size_t length);
参数一:需要解除映射的首地址
参数二:需要解除的长度
返回值:成功返回0,失败返回-1

--------------------------------------------------------------------------------------------
mmap函数在嵌入式开发板中的使用
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
int main()
{ 
    //打开LCD设备
     int fd=open("/dev/fb0",O_RDWR);
if(fd<0)
{
perror("lcd:");
}
//获取LCD屏幕属性
    struct fb_var_screeninfo  lcdmsg;
int ret=ioctl(fd,FBIOGET_VSCREENINFO,&lcdmsg);
if(ret==0)
{
printf("lcd x=%d,y=%d,bit=%d\n",lcdmsg.xres,lcdmsg.yres,lcdmsg.bits_per_pixel);
}
//获取字节的大小
int c=  lcdmsg.bits_per_pixel/8;
//对LCD设备空间进行映射
unsigned int *lcd=mmap(NULL,lcdmsg.xres*lcdmsg.yres*c,PROT_READ|PROT_WRITE, MAP_SHARED,fd,0);
 if(*(int *)lcd==-1)
{
perror("mmap lcd fail:");
}
//对LCD屏幕进行操作
int i=0,j=0;
for(i=0;i<480;i++)
{
  for(j=0;j<800;j++)
{
     *(lcd+i*800+j) = 0x00ff00;
}
}
    close(fd);
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值