Windows下的mmap——Windows环境下模拟嵌入式Flash一法

嵌入式系统下,Flash数据往往可以拿着地址直接访问,就好象用内存指针一样。同时我们常常在windows下搭建模拟环境开发嵌入式产品,这就需要模拟这种特征。
       Linux可以用mmap把一个文件映射到一段内存上,让文件也差不多跟Flash一样可以拿地址直接指访问。
       以下是在Windows下执行相同目地的参考代码,用的是进行进程通讯的内存共享的函数,但Google出来的结果以用于内存共享的居多,此法甚少,虽然差别不大,但权且记下,以作日后参考,更详细的用法msdn,Google都多多很,不再复述。

#include <windows.h>
#include <stdio.h>

#define FLASH_SIZE        1024*1024*4
#define COPY_DATA        "Hello"

int main(int argc,char* argv[])
{
    //以读写方式打开,保证flash能读能写
    HANDLE fileHandle = CreateFile("Flash.bin",GENERIC_READ | GENERIC_WRITE ,
        0,0,OPEN_ALWAYS,0,0);
    if(fileHandle != NULL)
    {
        //以只读方式映射,整个文件,因为Flash只能当内存读,不能当内存写
        HANDLE hMapping = CreateFileMapping(fileHandle,0,PAGE_READONLY,0,
            FLASH_SIZE,"CSFlash");
        if(hMapping)
        {
            //以只读方式映射其中的FLASH_SIZE大小
            LPSTR lpData = (LPS TR)MapViewOfFile(hMapping,FILE_MAP_READ,0,0,FLASH_SIZE);
           
            //此后,我们可以拿文件句柄操作文件,用以实现Flash读写接口等
            unsigned long size = 0;
            WriteFile(fileHandle,COPY_DATA,sizeof(COPY_DATA),&size,0);

            //也可以拿指针进行操作

            //不能拷贝,因为Flash也不支持这么用
            //memcpy(lpData,COPY_DATA,sizeof(COPY_DATA));
           
            //但可以读
            printf(lpData);

            //关闭映射,进程退出时,会自动进行
            //UnmapViewOfFile(lpData);
            //CloseHandle(hMapping);
            //CloseHandle(fileHandle);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值