枚举内存状况

 #define SALFDELETE(pValue) /
 if (pValue) /
  delete[] pValue; /
 pValue = NULL;

struct stuMemInfo
{
 void    *pAllocAddr;
 wchar_t *pPageInitProtect;
 DWORD    dwReginSize;
 DWORD    dwState;
 wchar_t  *pStateInfo;
 wchar_t  *pPageProect;
 wchar_t  *pPageType;

};

void PageProtectToString(DWORD dwProtect, wchar_t *pContent)
{
 if (!pContent)
 {
  return;
 }

  switch (dwProtect)
  {
   case PAGE_EXECUTE:
    {
     wsprintfW(pContent, L"E---");

     break;
    }
   case PAGE_EXECUTE_READ:
    {
     wsprintfW(pContent, L"ER--");

     break;
    }
   case PAGE_EXECUTE_READWRITE:
    {
     wsprintfW(pContent, L"ERW-");

     break;
    }
   case PAGE_EXECUTE_WRITECOPY:
    {
     wsprintfW(pContent, L"ERWC");

     break;
    }
   case PAGE_NOACCESS:
    {
     wsprintfW(pContent, L"----");

     break;
    }
   case PAGE_READONLY:
    {
     wsprintfW(pContent, L"-R--");

     break;
    }
   case PAGE_READWRITE:
    {
     wsprintfW(pContent, L"-RW-");

     break;
    }
   case PAGE_WRITECOPY:
    {
     wsprintfW(pContent, L"---C");

     break;
    }
   case PAGE_GUARD:
    {
     wsprintfW(pContent, L"page guard");

     break;
    }
   case PAGE_NOCACHE:
    {
     wsprintfW(pContent, L"page no catch");

     break;
    }
  }
}

int _tmain(int argc, _TCHAR* argv[])
{
 SYSTEM_INFO mySysInfo;
 memset(&mySysInfo, 0, sizeof(SYSTEM_INFO));
 GetSystemInfo(&mySysInfo);
 DWORD pageSize = mySysInfo.dwAllocationGranularity;

 BYTE *pBasicAddr = NULL;
 MEMORY_BASIC_INFORMATION memBasicInfo;

 setlocale(LC_CTYPE, "");
 wchar_t *pMemInfo = new wchar_t[512];
 memset(pMemInfo, 0, sizeof(512));
 stuMemInfo memInfo;
 memset(&memInfo, 0, sizeof(stuMemInfo));

 memInfo.pStateInfo = new wchar_t[50];
 memInfo.pPageInitProtect = new wchar_t[20];
 memInfo.pPageProect = new wchar_t[50];
 memInfo.pPageType = new wchar_t[50];

 do
 {
  memset(&memBasicInfo, 0, sizeof(memBasicInfo));
  if ( VirtualQuery(pBasicAddr, &memBasicInfo, sizeof(MEMORY_BASIC_INFORMATION)) == NULL)
  {
   break;
  }
  

  if (memBasicInfo.State == MEM_FREE)
  {
   wprintf(L"the addr %p is MEM_FREE /r/n", pBasicAddr);
   pBasicAddr += memBasicInfo.RegionSize;
   continue;   
  }

  memInfo.dwState = memBasicInfo.State;

  switch (memBasicInfo.State)
  {
  case MEM_COMMIT:
   {
    wsprintfW(memInfo.pStateInfo, L"memory state is MEM_COMMIT");

    break;
   }
  case MEM_RESERVE:
   {
    wsprintfW(memInfo.pStateInfo, L"memory state is MEM_RESERVE");

    break;
   }
  }


  PageProtectToString(memBasicInfo.AllocationProtect, memInfo.pPageInitProtect);

  memInfo.dwReginSize = (DWORD) memBasicInfo.RegionSize;

  if (memBasicInfo.State != MEM_RESERVE)
  {
   PageProtectToString(memBasicInfo.Protect, memInfo.pPageProect);
  }
  else
  {
   wcscpy(memInfo.pPageProect, L"MEM_RESERVE");
  }

  switch (memBasicInfo.Type)
  {
  case MEM_IMAGE:
   {
    wsprintfW(memInfo.pPageType, L"MEM_IMAGE");

    break;
   }
  case MEM_MAPPED:
   {
    wsprintfW(memInfo.pPageType, L"MEM_MAPPED");

    break;
   }
  case MEM_PRIVATE:
   {
    wsprintfW(memInfo.pPageType, L"MEM_PRIVATE");

    break;
   }

  }

  memInfo.pAllocAddr = memBasicInfo.AllocationBase;

  wprintf(L"the BaseAddress is %p, AllocationBase is %p, PageState is %s,/
    InitProtect is %s, current Protect is %s, type is %s, /
    page number is %d /r/n",
    pBasicAddr, memInfo.pAllocAddr, memInfo.pStateInfo,
    memInfo.pPageInitProtect, memInfo.pPageProect,
    memInfo.pPageType, memInfo.dwReginSize);

  pBasicAddr += memInfo.dwReginSize;

 } while (1);

 SALFDELETE(memInfo.pPageType);
 SALFDELETE(memInfo.pPageProect);
 SALFDELETE(memInfo.pPageInitProtect);
 SALFDELETE(memInfo.pStateInfo);
 
 getchar();

 return 0;
}

内容概要:本文详细介绍了基于FPGA的144输出通道可切换电压源系统的设计与实现,涵盖系统总体架构、FPGA硬件设计、上位机软件设计以及系统集成方案。系统由上位机控制软件(PC端)、FPGA控制核心和高压输出模块(144通道)三部分组成。FPGA硬件设计部分详细描述了Verilog代码实现,包括PWM生成模块、UART通信模块和温度监控模块。硬件设计说明中提及了FPGA选型、PWM生成方式、通信接口、高压输出模块和保护电路的设计要点。上位机软件采用Python编写,实现了设备连接、命令发送、序列控制等功能,并提供了一个图形用户界面(GUI)用于方便的操作和配置。 适合人群:具备一定硬件设计和编程基础的电子工程师、FPGA开发者及科研人员。 使用场景及目标:①适用于需要精确控制多通道电压输出的实验环境或工业应用场景;②帮助用户理解和掌握FPGA在复杂控制系统中的应用,包括PWM控制、UART通信及多通道信号处理;③为研究人员提供一个可扩展的平台,用于测试和验证不同的电压源控制算法和策略。 阅读建议:由于涉及硬件和软件两方面的内容,建议读者先熟悉FPGA基础知识和Verilog语言,同时具备一定的Python编程经验。在阅读过程中,应结合硬件电路图和代码注释,逐步理解系统的各个组成部分及其相互关系。此外,实际动手搭建和调试该系统将有助于加深对整个设计的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值