⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmmprun.c

📁 wince host 和 target PCI驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
  tmmanDSPUnmapSDRAM(DSPHandle);  return Status;}intmain(int argc, char *argv[]){  TMDwnLdr_SharedSectionTab_Handle SharedSections;  TMStatus      Status;  tmmanVersion	Version;  tmmanDSPInfo	DSPCaps;  int		wIdxArg;  DWORD		i;  DWORD		CRTHandle[MAXIMUM_NODES];  DWORD		DSPHandle[MAXIMUM_NODES];  DWORD		ArgumentCountArray[MAXIMUM_NODES];  PVOID		ArgumentVectorArray[MAXIMUM_NODES];  DWORD		MMIOPhysicalAddressArray[MAXIMUM_NODES];  CHAR*		ArgumentVector[MAXIMUM_COMMAND_LINE_ARGS];  DWORD		ArgumentCount;  if (argc < 2) {    goto mainUsage;  }  /*   * check for compatible driver version   */  Version.Major = constTMManDefaultVersionMajor;  Version.Minor = constTMManDefaultVersionMinor;  tmmanNegotiateVersion(constTMManDefault, &Version);  if ((Version.Major != constTMManDefaultVersionMajor) ||      (Version.Minor != constTMManDefaultVersionMinor)) {    fprintf(stderr,	    "TMMPRun : ERROR : tmmprun.exe Version[%d.%d] is INCOMPATIBLE "	    "With TMMan32.dll Version[%d.%d]\n",	    constTMManDefaultVersionMajor,	    constTMManDefaultVersionMinor,	    Version.Major, Version.Minor);    goto mainExit1;  }  /*   * install a control C handler so that we can perform cleanup before exit.   */  if (SetConsoleCtrlHandler(tmrunControlHandler, TRUE) != TRUE) {    fprintf(stderr,	    "TMMPRun : ERROR : Win32 SetConsoleCtrlHandler failed [0x%x]",	    GetLastError());    goto mainExit1;  }  /*   * count the number of DSPs we have to download into   * this corresponds to the number of "-exec" in the command line   */  for (wIdxArg = 1; wIdxArg < argc; wIdxArg++) {    /*     * "-exec" indicates start of target executable name and arguments     */    if (_stricmp(argv[wIdxArg], "-exec") == 0) {      DSPCount++;      if (DSPCount > MAXIMUM_NODES) {	fprintf(stderr,		"TMMPRun : ERROR : Maximum nodes (%d) exceeded",		MAXIMUM_NODES);	goto mainExit1;      }    }  }  /*   * initialize the arrays   */  for (i = 0; i < DSPCount; i++) {    DSPHandle[i] = 0;    CRTHandle[i] = 0;    ArgumentVectorArray[i] = NULL;    EventArray[i] = NULL;  }  /*   * open all the DSPs   */  for (i = 0; i < DSPCount; i++) {    Status = tmmanDSPOpen(i, &DSPHandle[i]);    if (Status != statusSuccess) {      fprintf(stderr,	      "TMMPRun : ERROR : tmmanDSPOpen failed [0x%x](%s)\n",	      Status, tmmanGetErrorString(Status));      goto mainExit2;    }    Status = tmmanDSPGetInfo(DSPHandle[i] , &DSPCaps);    if (Status != statusSuccess) {      fprintf(stderr,	      "TMMPRun : ERROR : tmmanDSPGetInfo failed [0x%x](%s)\n",	      Status, tmmanGetErrorString(Status));      goto mainExit3;    }    MMIOPhysicalAddressArray[i] = DSPCaps.MMIO.PhysicalAddress;  }  /*   * process the generic command line parameters here   */  for (wIdxArg = 1; wIdxArg < argc; wIdxArg++) {    /*     * "-exec" indicates start of target executable name and arguments     */    if (_stricmp(argv[wIdxArg], "-exec") == 0) {      /*       * the next argument should be the name of the executable , point to it.       */      wIdxArg++;      break;    }    switch (toupper(argv[wIdxArg][1])) {    case 'B':	/* interactive off option */      Interactive = FALSE;      break;    case 'W':	/* no of lines in console window */      {	DWORD dwWindowLines;	COORD ConsoleSize;	if (sscanf(&argv[wIdxArg][2], "%d", &dwWindowLines) != 1) {	  goto mainUsage;	}	ConsoleSize.X = 80;	ConsoleSize.Y = (USHORT)dwWindowLines;	SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), ConsoleSize);      }      break;    case '?':	/* add other command line optons here */    default:      goto mainUsage;    }  }  /*   * create an empty shared section table, for use in multiprocessing downloading   */  TMDwnLdr_create_shared_section_table(&SharedSections);  /*   * Initializes the C Run Time server to serve multiple nodes.   */  cruntimeInit();  /*   * initialize the C runtime for each DSP   */  for (i = 0; i < DSPCount; i++) {    CRunTimeParameterBlock CRTParam;    /*     * create an event for this node     */    EventArray[i] = CreateEvent(NULL,  /* default security descriptor in NT, not used in Windows 95 */				FALSE, /* auto reset event */				FALSE, /*initial state is not signalled */				NULL);    if (EventArray[i] == INVALID_HANDLE_VALUE) {      fprintf(stderr,	      "TMMPRun : ERROR : Win32 CreateEvent failed [0x%x]\n",	      GetLastError());      goto mainExit4;    }    CRTParam.OptionBitmap = 0;    CRTParam.StdInHandle  = (DWORD)GetStdHandle(STD_INPUT_HANDLE);    CRTParam.StdOutHandle = (DWORD)GetStdHandle(STD_OUTPUT_HANDLE);    CRTParam.StdErrHandle = (DWORD)GetStdHandle(STD_ERROR_HANDLE);    /*     * process target specific command line arguments here     * this parameter should be the executable filename     */    TargetExecutableName = argv[wIdxArg];    ArgumentCount = 0;    ArgumentVector[ArgumentCount++] = argv[wIdxArg];    for (wIdxArg++; wIdxArg < argc; wIdxArg++) {      /*       * "-exec" indicates start of target executable name and arguments       */      if (_stricmp(argv[wIdxArg], "-exec") == 0) {	wIdxArg++;	break;      }      ArgumentVector[ArgumentCount++] = argv[wIdxArg];    }    ArgumentVector[ArgumentCount] = NULL;    /*     * we have to allocate persistent storage for these values     */    ArgumentCountArray[i] = ArgumentCount;    if ((ArgumentVectorArray[i] =	 malloc(sizeof(PVOID) * (ArgumentCount + 1))) == NULL) {      fprintf(stderr, "TMMPRun : ERROR : malloc(Argument Array) failed\n");      goto mainExit5;    }    memcpy(ArgumentVectorArray[i] ,	   ArgumentVector,	   sizeof(PVOID) * (ArgumentCount + 1));    /*     * PERFORM RELOCATION HERE     */    Status = tmDSPExecutableLoadEx(DSPHandle[i],				   TargetExecutableName,				   DSPCount,				   SharedSections,				   MMIOPhysicalAddressArray);    if (Status != statusSuccess) {      fprintf(stderr,	      "TMMPRun : ERROR : tmDSPExecutableLoadEx(%s) failed [0x%x](%s)\n",	      TargetExecutableName,	      Status,	      tmmanGetErrorString(Status));      goto mainExit6;    }    CRTParam.OptionBitmap |= constCRunTimeFlagsUseSynchObject;    CRTParam.SynchronizationObject = (DWORD)EventArray[i];    CRTParam.VirtualNodeNumber = i;    if (!Interactive) {      CRTParam.OptionBitmap |= constCRunTimeFlagsNonInteractive;    }    /*     * allocate resources for this TriMedia processor.     */    if (cruntimeCreate(i, /* the  physical DSP Number */		       ArgumentCountArray[i],		       ArgumentVectorArray[i],		       &CRTParam,		       &CRTHandle[i]) != True) {      fprintf(stdout,	      "TMMPRun : ERROR : Cannot Initialize C Run Time Server :"	      "CRT I/O calls will not work\n");      goto mainExit6;    }  }  /*   * at this time, code has been copied to the memory of the   * TriMedia boards and C runtime has been created   * start executing the code on each DSP   */  for (i = 0; i < DSPCount; i++) {    Status = tmmanDSPStart(DSPHandle[i]);    if (Status != statusSuccess) {      fprintf(stderr,	      "TMMPRun : ERROR : tmmanDSPStart failed [0x%x](%s)\n",	      Status, tmmanGetErrorString(Status));      goto mainExit7;    }  }  /*   * wait until all objects in the EventArray array are signaled   */  WaitForMultipleObjects(DSPCount, EventArray, TRUE, INFINITE);  for (i = 0; i < DSPCount; i++) {    if (DSPHandle[i])      tmmanDSPStop(DSPHandle[i]);  }mainExit7:  for (i = 0; i < DSPCount; i++) {    if (CRTHandle[i])      cruntimeDestroy(CRTHandle[i], &GlobalExitCode);  }mainExit6:  for (i = 0; i < DSPCount; i++) {    if (ArgumentVectorArray[i])      free(ArgumentVectorArray[i]);  }mainExit5:  for (i = 0; i < DSPCount; i++) {    if (EventArray[i])      CloseHandle(EventArray[i]);  }mainExit4:  cruntimeExit();  TMDwnLdr_unload_shared_section_table(SharedSections);mainExit3:  for (i = 0; i < DSPCount; i++) {    if (DSPHandle[i])      tmmanDSPClose(DSPHandle[i]);  }mainExit2:  SetConsoleCtrlHandler(tmrunControlHandler, FALSE);mainExit1:  if (Interactive) {    fprintf(stdout, "\nTMMPRun:Press [ENTER] to close server >>");    getchar();  }  return GlobalExitCode;mainUsage:  fprintf(stderr,	  "usage: TMMPRun [-wWindowSize] [-b] "	  "-exec ExecutableImageName [Arg1] [Arg2] ... "	  "-exec ExecutableImageName [Arg1] [Arg2] ...\n");  goto mainExit1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -