嵌入式系统下,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);
}
}
}
Windows下的mmap——Windows环境下模拟嵌入式Flash一法
最新推荐文章于 2024-04-22 12:49:15 发布