| 
 | 
 
前一节我们已经说道支持库的结构体,这是构建该文件的基本,通过结构体我们可以很方便的加载文件信息到内存,而且不用处理就可以用。 
这部分的处理相当复杂,读取的顺序,结构大小,芯片的数量等等必须非常清楚,不然读出的数据100%错的,而且这里基本肯定要用调试功能,每修改一次必须过一次调试跟踪,切记。 
 
 
这个函数可以说在整个软件设计中花时最多的,十几天的功夫基本都是耗在这上面,光修改和调试都超多10天,可想而知。对于那些说三道四,软件设计怎么怎么不值钱之类的人整改让他折腾下这个,设计软件的艰辛在哪。 
这个函数的主要功能就是解析支持库,然后分类加载到内存中的变量中,因此必须要定义一些全局变量 
- public:
 
 -         void GetUpdate();
 
 -         CString GetMacAddress();
 
 -         CString GetCpuID();
 
 -         CString GetGuid();
 
 -         CString GetOSName();
 
 -         int VerCompare(CString ver1,CString ver2);
 
 -         DWORD m_dDeviceSize;
 
 -         CArray<TypeStruct,TypeStruct> m_arTypeList;
 
 -         CArray<TypeStruct,TypeStruct> m_arOperationList;
 
 -         CArray<TypeStruct,TypeStruct> m_arSizeList;
 
 -         CArray<TypeStruct,TypeStruct> m_arPinList;
 
 -         CArray<TypeStruct,TypeStruct> m_arDataWidthList;
 
 -         CArray<TypeStruct,TypeStruct> m_arPackageList;
 
 -         CArray<TypeStruct1,TypeStruct1> m_arVCCList;
 
 -         CArray<TypeStruct1,TypeStruct1> m_arVPPList;
 
 -         CArray<TypeStruct,TypeStruct> m_arAdapterList;
 
  
-         CArray<DeviceListFileStruct,DeviceListFileStruct>  m_arDeviceList;
 
 -         DeviceListFileStruct m_stDFile;
 
 -         DeviceListFileHeadStruct m_stDFileHead;
 
 -         ProjectFileHeadStruct m_stPFileHead;
 
 -         ProjectFileStruct m_stPFile;
 
 -         BYTE* pProgBuff;
 
 -         CString m_sAppPath;
 
 -         CString m_sAppVer;
 
  
- /*        CString m_sDeviceNote;
 
 -         int m_iDevicePinCount;
 
 -         int m_iDeviceDataWidth;
 
 -         DWORD m_dDeviceID;
 
 -         float m_fDeviceVPP;
 
 -         DWORD m_dDeviceCheckCRC;
 
 -         CString m_sDevicePackage;
 
 -         float m_fDeviceVCC;
 
 -         int m_iDeviceSize;
 
 -         DWORD m_dDeviceManuID;
 
 -         CString m_sDeviceAdapter;
 
 -         CString m_sDeviceName;
 
 - */
 
 -         DWORD        m_dBuffCheckCRC;
 
 -         DWORD        m_dProjectFileCRC;
 
 -         CString m_sFilename;
 
 
  复制代码 而且必须在程序启动时就要初始化 
- CUUProgDlg::CUUProgDlg(CWnd* pParent /*=NULL*/)
 
 -         : CDialog(CUUProgDlg::IDD, pParent)
 
 - {
 
 -         //{{AFX_DATA_INIT(CUUProgDlg)
 
 -         m_AppLog = _T("");
 
 -         m_sDeviceAdapter = _T("");
 
 -         m_sDeviceCheckCRC = _T("");
 
 -         m_sDeviceID = _T("");
 
 -         m_sDeviceManuID = _T("");
 
 -         m_sDeviceName = _T("");
 
 -         m_sDeviceNote = _T("");
 
 -         m_sDevicePackage = _T("");
 
 -         m_sDeviceSize = _T("");
 
 -         m_sDeviceType = _T("");
 
 -         m_sDeviceVCC = _T("");
 
 -         m_sDeviceVPP = _T("");
 
 -         m_sDeviceDatasheet = _T("");
 
 -         m_sLoadFileName = _T("");
 
 -         //}}AFX_DATA_INIT
 
 -         // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 
 -         m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 
 -         m_bProgLink = false;
 
 -         m_bOneKeyMode = true;
 
 -         m_iAppLogLine = 0;
 
 -         m_dBuffCheckCRC = 0;
 
 -         m_dProjectFileCRC = 0;
 
 -         m_dDeviceSize = 0;
 
 -         m_sAppPath = "";
 
 -         m_sUUProgSN = "------";
 
 -         m_sUUProgHWVer = "----";
 
 -         m_sUUProgFWVer = "----";
 
 -         m_sUUProgFWDate = "--------";
 
 -         m_sUUProgType = "------";
 
 -         ZeroMemory(&m_stPFile, sizeof(ProjectFileStruct));
 
 -         ZeroMemory(&m_stPFileHead, sizeof(ProjectFileHeadStruct));
 
 -         ZeroMemory(&m_stDFile, sizeof(DeviceListFileStruct));
 
 -         ZeroMemory(&m_stDFileHead, sizeof(DeviceListFileHeadStruct));
 
 - //        pProgBuff=(BYTE*)GlobalAlloc(GMEM_FIXED,0x10000);//½¨Á¢»º³å1
 
 - //        memset(pProgBuff,0xff,0x10000);
 
 - }
 
  复制代码 然后就是指定函数什么时候加载了,这里我们用到了定时器,其实这个的处理比较蛋疼的,想要实现加载信息实时显示,用多线程该是最好的方案,但是我们这里只用到了定时器延时启动,避免程序启动时就一闪而过,看不到加载的效果。 
- void CUUProgDlg::OnTimer(UINT nIDEvent) 
 
 - {
 
 -     // TODO: Add your message handler code here and/or call default
 
 -     SetAppLog("欢迎使用UUProg编程器应用程序");
 
 -     SetAppLog("设计开发:Liyf");
 
 -     SetAppLog("支持网站:http://www.diybcq.com");
 
 - //    SetAppLog("          http://kitebee.gnway.net");
 
 -     SetAppLog("QQ群:41210778");
 
 -     SetAppLog("<----------------------------------------------");
 
 -     SetAppLog("");
 
 -     //初始化程序
 
 -     SetAppLog("程序初始化...");
 
 -     GetAppVer();
 
 -     GetAppPath();
 
 -     SetAppLog("加载配置...");
 
 -     LoadConfig();
 
 -     SetAppLog("设置计数器...");
 
 -     SetCount();
 
 -     SetAppLog("加载芯片列表...");
 
 -     LoadDeviceList();
 
 -     SetAppLog("加载最近编程芯片...");
 
 -     if(!m_sDeviceName.IsEmpty())//加载最近编程芯片
 
 -     {
 
 -                         CString temp;
 
 -                     for (int i=0; i<m_arDeviceList.GetSize(); i++)
 
 -                     {
 
 -                         temp = m_arDeviceList.GetAt(i).DeviceName;
 
 -                         if(m_sDeviceName == temp) 
 
 -                         {
 
 -                             SetDeviceInfo(i);
 
 -                             break;
 
 -                             
 
 -                         }
 
 -                     }
 
 -     }
 
 -        SetAppLog("初始化完成!");
 
 -     SetAppLog("<----------------------------------------------");
 
 -     SetAppLog("");
 
 -        SetAppLog("操作系统:"+GetOSName());
 
 -        SetAppLog("CID:"+GetCpuID()+"-"+GetMacAddress());
 
 -        SetAppLog("UID:"+GetGuid());
 
 -     SetAppLog("<----------------------------------------------");
 
 -     SetAppLog("");
 
 -     m_bProgLink = FindUUProg();
 
 -     SetAppLog("<----------------------------------------------");
 
 -     SetAppLog("");
 
 -     SetAppLog("检测是否有软件更新...");
 
 -     GetUpdate();
 
 -     SetAppLog("<----------------------------------------------");
 
  
-     KillTimer(1);    
 
 -     
 
 -     CDialog::OnTimer(nIDEvent);
 
 - }
 
  
  复制代码 下面就是LoadDeviceList()函数了,非常复杂的,慢慢看 
- void CUUProgDlg::LoadDeviceList()
 
 - {
 
 -         CFile ldfile;
 
 -         if(ldfile.Open(m_sAppPath+"device.pdl",CFile::shareCompat|CFile::modeRead,NULL))
 
 -         {
 
 -                 int        BufSize=ldfile.GetLength();
 
 -                 int StartAddr;
 
 -                 BYTE* fileBuf=new BYTE[BufSize];
 
 -                 ldfile.Read(fileBuf,BufSize);
 
 -                 memcpy(&m_stDFileHead,fileBuf,sizeof(DeviceListFileHeadStruct));
 
 -                 int result = VerCompare(m_sAppVer,m_stDFileHead.DeviceListFileVer);
 
 -                 if(result != 0)
 
 -                 {
 
 -                 AfxMessageBox("芯片支持库版本不匹配,请从新安装软件!");
 
 -                 GlobalFree(fileBuf);
 
 -                 ldfile.Close();
 
 -                 }
 
 -                 //Type List
 
 -                 StartAddr = sizeof(DeviceListFileHeadStruct);
 
 -                 TypeStruct* pType=(TypeStruct*)&fileBuf[StartAddr];
 
 -                 for(int n=0;n<=m_stDFileHead.TypeListCount-1;n++)
 
 -                 {
 
 -                         m_arTypeList.Add(pType[n]);
 
 -                 }
 
 -                 //Operation List
 
 -                 StartAddr += m_stDFileHead.TypeListCount*sizeof(TypeStruct);
 
 -                 pType=(TypeStruct*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.OperationListCount-1;n++)
 
 -                 {
 
 -                         m_arOperationList.Add(pType[n]);
 
 -                 }
 
 -                 //Size List
 
 -                 StartAddr += m_stDFileHead.OperationListCount*sizeof(TypeStruct);
 
 -                 pType=(TypeStruct*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.SizeListCount-1;n++)
 
 -                 {
 
 -                         m_arSizeList.Add(pType[n]);
 
 -                 }
 
 -                 //Pin List
 
 -                 StartAddr += m_stDFileHead.SizeListCount*sizeof(TypeStruct);
 
 -                 pType=(TypeStruct*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.PinListCount-1;n++)
 
 -                 {
 
 -                         m_arPinList.Add(pType[n]);
 
 -                 }
 
 -                 //DataWidth List
 
 -                 StartAddr += m_stDFileHead.PinListCount*sizeof(TypeStruct);
 
 -                 pType=(TypeStruct*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.DataWidthListCount-1;n++)
 
 -                 {
 
 -                         m_arDataWidthList.Add(pType[n]);
 
 -                 }
 
 -                 //Package List
 
 -                 StartAddr += m_stDFileHead.DataWidthListCount*sizeof(TypeStruct);
 
 -                 pType=(TypeStruct*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.PackageListCount-1;n++)
 
 -                 {
 
 -                         m_arPackageList.Add(pType[n]);
 
 -                 }
 
 -                 //VCC List
 
 -                 StartAddr += m_stDFileHead.PackageListCount*sizeof(TypeStruct);
 
 -                 TypeStruct1* pType1=(TypeStruct1*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.VCCListCount-1;n++)
 
 -                 {
 
 -                         m_arVCCList.Add(pType1[n]);
 
 -                 }
 
 -                 //VPP List
 
 -                 StartAddr += m_stDFileHead.VCCListCount*sizeof(TypeStruct1);
 
 -                 pType1=(TypeStruct1*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.VPPListCount-1;n++)
 
 -                 {
 
 -                         m_arVPPList.Add(pType1[n]);
 
 -                 }
 
 -                 //Adapter List
 
 -                 StartAddr += m_stDFileHead.VPPListCount*sizeof(TypeStruct1);
 
 -                 pType=(TypeStruct*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.AdapterListCount-1;n++)
 
 -                 {
 
 -                         m_arAdapterList.Add(pType[n]);
 
 -                 }
 
  
-                 //Device List
 
 - //                memcpy(&m_stDFileHead,fileBuf,sizeof(DeviceListFileHeadStruct));
 
 -                 StartAddr += m_stDFileHead.AdapterListCount*sizeof(TypeStruct);
 
 -                 DeviceListFileStruct* pDevice=(DeviceListFileStruct*)&fileBuf[StartAddr];
 
 -                 for(n=0;n<=m_stDFileHead.DeviceCount-1;n++)
 
 -                 {
 
 -                         m_arDeviceList.Add(pDevice[n]);
 
 -                 }
 
 -                 GlobalFree(fileBuf);
 
 -                 ldfile.Close();
 
 -         }
 
 -         else
 
 -         {
 
 -         TypeStruct stType;
 
 -         TypeStruct1 stType1;
 
  
-         ZeroMemory(&stType, sizeof(TypeStruct));
 
 -         ZeroMemory(&stType1, sizeof(TypeStruct1));
 
 -         strcpy(stType.TypeName,"EPROM");
 
 -         stType.TypeVal = 1;
 
 -         m_arTypeList.Add(stType);
 
 -         strcpy(stType.TypeName,"MPU");
 
 -         stType.TypeVal = 2;
 
 -         m_arTypeList.Add(stType);
 
 -         strcpy(stType.TypeName,"PLD");
 
 -         stType.TypeVal = 3;
 
 -         m_arTypeList.Add(stType);
 
 -         strcpy(stType.TypeName,"PROM");
 
 -         stType.TypeVal = 4;
 
 -         m_arTypeList.Add(stType);
 
  
-         strcpy(stType.TypeName,"AT24(AT24xxx)");
 
 -         stType.TypeVal = 1;
 
 -         m_arOperationList.Add(stType);
 
 -         strcpy(stType.TypeName,"AT51(AT89x5x)");
 
 -         stType.TypeVal = 2;
 
 -         m_arOperationList.Add(stType);
 
 -         strcpy(stType.TypeName,"AT93(AT93xxx)");
 
 -         stType.TypeVal = 3;
 
 -         m_arOperationList.Add(stType);
 
 -         strcpy(stType.TypeName,"EN25(EN25xxx)");
 
 -         stType.TypeVal = 4;
 
 -         m_arOperationList.Add(stType);
 
  
-         strcpy(stType.TypeName,"1k");
 
 -         stType.TypeVal = 1024;
 
 -         m_arSizeList.Add(stType);
 
 -         strcpy(stType.TypeName,"2k");
 
 -         stType.TypeVal = 2048;
 
 -         m_arSizeList.Add(stType);
 
 -         strcpy(stType.TypeName,"4k");
 
 -         stType.TypeVal = 4096;
 
 -         m_arSizeList.Add(stType);
 
 -         strcpy(stType.TypeName,"8k");
 
 -         stType.TypeVal = 8192;
 
 -         m_arSizeList.Add(stType);
 
  
-         strcpy(stType.TypeName,"8 Pin");
 
 -         stType.TypeVal = 8;
 
 -         m_arPinList.Add(stType);
 
 -         strcpy(stType.TypeName,"16 Pin");
 
 -         stType.TypeVal = 16;
 
 -         m_arPinList.Add(stType);
 
 -         strcpy(stType.TypeName,"28 Pin");
 
 -         stType.TypeVal = 28;
 
 -         m_arPinList.Add(stType);
 
 -         strcpy(stType.TypeName,"32 Pin");
 
 -         stType.TypeVal = 32;
 
 -         m_arPinList.Add(stType);
 
 -         strcpy(stType.TypeName,"40 Pin");
 
 -         stType.TypeVal = 40;
 
 -         m_arPinList.Add(stType);
 
  
-         strcpy(stType.TypeName,"8 bit");
 
 -         stType.TypeVal = 8;
 
 -         m_arDataWidthList.Add(stType);
 
 -         strcpy(stType.TypeName,"16 bit");
 
 -         stType.TypeVal = 16;
 
 -         m_arDataWidthList.Add(stType);
 
 -         strcpy(stType.TypeName,"32 bit");
 
 -         stType.TypeVal = 32;
 
 -         m_arDataWidthList.Add(stType);
 
  
-         strcpy(stType.TypeName,"DIP");
 
 -         stType.TypeVal = 1;
 
 -         m_arPackageList.Add(stType);
 
 -         strcpy(stType.TypeName,"SOP");
 
 -         stType.TypeVal = 2;
 
 -         m_arPackageList.Add(stType);
 
 -         strcpy(stType.TypeName,"SSOP");
 
 -         stType.TypeVal = 3;
 
 -         m_arPackageList.Add(stType);
 
 -         strcpy(stType.TypeName,"TSSOP");
 
 -         stType.TypeVal = 4;
 
 -         m_arPackageList.Add(stType);
 
  
-         strcpy(stType1.TypeName,"5.00V");
 
 -         stType1.TypeVal = 5.00;
 
 -         m_arVCCList.Add(stType1);
 
 -         strcpy(stType1.TypeName,"3.30V");
 
 -         stType1.TypeVal = 3.30;
 
 -         m_arVCCList.Add(stType1);
 
  
-         strcpy(stType1.TypeName,"0.00V");
 
 -         stType1.TypeVal = 0.00;
 
 -         m_arVPPList.Add(stType1);
 
 -         strcpy(stType1.TypeName,"12.00V");
 
 -         stType1.TypeVal = 12.00;
 
 -         m_arVPPList.Add(stType1);
 
 -         strcpy(stType1.TypeName,"14.00V");
 
 -         stType1.TypeVal = 14.00;
 
 -         m_arVPPList.Add(stType1);
 
  
-         strcpy(stType.TypeName,"NONE");
 
 -         stType.TypeVal = 1;
 
 -         m_arAdapterList.Add(stType);
 
 -         strcpy(stType.TypeName,"SOP8toDIP8");
 
 -         stType.TypeVal = 2;
 
 -         m_arAdapterList.Add(stType);
 
 -         strcpy(stType.TypeName,"SOP16toDIP8");
 
 -         stType.TypeVal = 3;
 
 -         m_arAdapterList.Add(stType);
 
 -         strcpy(stType.TypeName,"TSSOP14toDIP8");
 
 -         stType.TypeVal = 4;
 
 -         m_arAdapterList.Add(stType);
 
 -         }
 
  
- }
 
  复制代码 
今天先到这里,又得忙了,欢迎有兴趣的加入,详细的请下载源代码,篇幅有限不一定讲解清楚。下节更精彩。 
 
 
 
 
 |   
 
 
 
 |