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

📄 udi2mtip.c

📁 gdb for adsp develop
💻 C
📖 第 1 页 / 共 5 页
字号:
     RemoteTarget = 1;	/* remote target */     SendACKFirst = 1; /* safe to send always */   }   if (RemoteTarget == 0) {	/* shared memory */      MsgCode = Wait_For_Ack();      if (MsgCode == ABORT_FAILURE) 	 return (UDIErrorAborted);      else if (MsgCode == FAILURE) 	return((-1) * MONErrNoSynch);    }    if (SendACKFirst)	 SendACK();    /* send a config msg to sync with target */    do {       MsgCode = SendConfigWait();    } while (MsgCode == HALT);    if (MsgCode == ABORT_FAILURE)       return (UDIErrorAborted);    else if (MsgCode == FAILURE)	return ((-1) * MONErrNoSynch);    else if (MsgCode != CONFIG)	return ((-1) * MONErrCantRecvMsg);    Mini_unpack_config_msg(&tip_target_config);    /* Reallocate message buffers to the smallest, if necessary */    if ((MaxMsgBufSize != (unsigned int) 0) && 	    (MaxMsgBufSize < (unsigned int) tip_target_config.max_msg_size))       tip_target_config.max_msg_size = (INT32) MaxMsgBufSize;    if (Mini_alloc_msgbuf((int) tip_target_config.max_msg_size) != SUCCESS)      return ((-1) * MONErrCantAllocBufs);     ProcessorState = (UDIUInt32) UDINotExecuting;     PreviousProcessorState = (UDIUInt32) UDINotExecuting;    return (UDINoError);  }}UDIError UDIDisconnect(Session, Terminate)  UDISessionId    Session;  UDIBool	Terminate;{  if (Session != (UDISessionId) MONUDISession)    return (UDIErrorNoSuchConnection);  if (Terminate == (UDIBool) UDITerminateSession) {    if (CoreFile)      (void) free((char *) CoreFile);    if (TargetType)      (void) free((char *) TargetType);    Mini_msg_exit();	/* clean up message buffers */    if (Msg_Logfile)      (void) fclose(MsgFile);    ProcessorState = (UDIUInt32) UDINotExecuting;    PreviousProcessorState = (UDIUInt32) UDINotExecuting;  } else {    ContinuingSession=1;  };  if ((int) (ProcessorState & 0xFF) == UDINotExecuting) {/* none active */     CurrentPID = (UDIPId) UDIProcessProcessor;     NumberOfProcesses=0;  }  TipAlive = 0;  return (UDINoError);}UDIError UDISetCurrentConnection(Session)  UDISessionId    Session;{  if (Session != (UDISessionId) MONUDISession)    return (UDIErrorNoSuchConnection);  return (UDINoError);}UDIError UDICapabilities ( TIPId, TargetId, DFEId, DFE, TIP, DFEIPCId, TIPIPCId, TIPString)   UDIUInt32	*TIPId;			/* Out */  UDIUInt32	*TargetId;		/* Out */  UDIUInt32	DFEId;			/* In */  UDIUInt32	DFE;			/* In */  UDIUInt32	*TIP;			/* Out */  UDIUInt32	*DFEIPCId;		/* Out */  UDIUInt32	*TIPIPCId;		/* Out */  char		*TIPString;		/* Out */{  *TIPId = (UDIUInt32) UDIID (UDIProductCode_Montip, MONTIPRev, MONTIPSubRev, MONTIPSubSubRev);  *TargetId = (UDIUInt32) UDIID (UDIProductCode_Montip, MONTIPRev, MONTIPSubRev, MONTIPSubSubRev);  if ((int) (DFE & 0x00000FFF) > (int) (MONTIPUDIVers)) {     *TIP = (UDIUInt32) 0;  } else if ((int) (DFE & 0x00000FFF) == (int) MONTIPUDIVers) {     *TIP = (UDIUInt32) DFE;  } else {     *TIP = (UDIUInt32) MONTIPUDIVers;  }  *DFEIPCId = (UDIUInt32) 0;  *TIPIPCId = (UDIUInt32) 0;  (void) strcpy (TIPString, "UDI 1.2 Conformant Montip for 29K targets\0");  return (UDINoError);}UDIError UDIGetErrorMsg (ErrorCode, MsgSize, Msg, CountDone)  UDIError	ErrorCode;		/* In */  UDISizeT	MsgSize;		/* In */  char		*Msg;			/* Out */  UDISizeT	*CountDone;		/* Out */{  int		index;  /* Continue Previous Error Message */  if (ErrCntRemaining != (UDISizeT) 0) {    index = (int) (strlen(monerr_tip[-ErrorCode]) + 1 - ErrCntRemaining);    if (MsgSize < (UDISizeT) ErrCntRemaining) {      (void) strncpy((char *) Msg, (char *) (monerr_tip[-ErrorCode]+index), MsgSize);      *CountDone = MsgSize;      ErrCntRemaining = ErrCntRemaining - MsgSize;    } else {      (void) strcpy((char *) Msg, (char *) (monerr_tip[-ErrorCode]+index));      *CountDone = (UDISizeT) strlen(Msg) + 1;      ErrCntRemaining = (UDISizeT) 0;    }    return (UDINoError);  };  /* A New ErrorCode */  if ((ErrorCode <= 0) && (ErrorCode > (-1) * MAX_MONERR)) {    if (MsgSize < (UDISizeT) MAX_MONERR_SIZE) {      (void) strncpy((char *) Msg, monerr_tip[-ErrorCode], MsgSize);      *CountDone = MsgSize;      ErrCntRemaining = (UDISizeT) (strlen(monerr_tip[-ErrorCode])+1) - MsgSize;    } else {      (void) strcpy((char *) Msg, monerr_tip[-ErrorCode]);      *CountDone = (UDISizeT) strlen(Msg) + 1;      ErrCntRemaining = (UDISizeT) 0;    }    return (UDINoError);  } else {    return (UDIErrorUnknownError);  };}UDIError UDIGetTargetConfig(KnownMemory, NumberOfRanges, ChipVersions, NumberOfChips)   UDIMemoryRange KnownMemory[];		/* Out */  UDIInt	*NumberOfRanges;	/* In/Out */  UDIUInt32	ChipVersions[];		/* Out */  UDIInt	*NumberOfChips;		/* In/Out */{  UDIInt	InRanges, InChips;  int		Incomplete;  Incomplete = 0;  InRanges = *NumberOfRanges;  InChips = *NumberOfChips;  if ((InRanges < (UDIInt) MONMaxMemRanges) || (InChips < (UDIInt) MONMaxChips))     Incomplete = 1;     *NumberOfRanges = (UDIInt) 0;  switch ((int) InRanges) {    default:    case	3 /* MONMaxMemRanges */:     if (*NumberOfRanges == (UDIInt) 0)	 *NumberOfRanges = (UDIInt) 3;     KnownMemory[2].Space = (CPUSpace) UDI29KIRAMSpace;     KnownMemory[2].Offset = (CPUOffset) tip_target_config.I_mem_start;     KnownMemory[2].Size = (CPUSizeT) tip_target_config.I_mem_size;    case	2:     if (*NumberOfRanges == (UDIInt) 0)	 *NumberOfRanges = (UDIInt) 2;     KnownMemory[1].Space = (CPUSpace) UDI29KDRAMSpace;     KnownMemory[1].Offset = (CPUOffset) tip_target_config.D_mem_start;     KnownMemory[1].Size = (CPUSizeT) tip_target_config.D_mem_size;    case	1:     if (*NumberOfRanges == (UDIInt) 0)	 *NumberOfRanges = (UDIInt) 1;     KnownMemory[0].Space = (CPUSpace) UDI29KIROMSpace;     KnownMemory[0].Offset = (CPUOffset) tip_target_config.ROM_start;     KnownMemory[0].Size = (CPUSizeT) tip_target_config.ROM_size;	break;    case	0:        *NumberOfRanges = (UDIInt) 0;	break;  }  *NumberOfChips = (UDIInt) 0;  switch ((int) InChips) {     default:     case	2: /* MONMaxChips */       if (*NumberOfChips == (UDIInt) 0) 	   *NumberOfChips = (UDIInt) 2;       if (tip_target_config.coprocessor == (UINT32) -1)          ChipVersions[1] = (UDIUInt32) UDI29KChipNotPresent;       else          ChipVersions[1] = (UDIUInt32) tip_target_config.coprocessor;     case	1:       if (*NumberOfChips == (UDIInt) 0) 	   *NumberOfChips = (UDIInt) 1;        ChipVersions[0] = (UDIUInt32) tip_target_config.processor_id;	break;     case	0:	*NumberOfChips = (UDIInt) 0;	break;  }  if (Incomplete)     return (UDIErrorIncomplete);  else     return (UDINoError);}UDIError UDICreateProcess(pid)  UDIPId         *pid;{  if (CurrentPID == (UDIPId) (UDIProcessProcessor + 1))    return (UDIErrorCantCreateProcess);  CurrentPID = (UDIPId) (UDIProcessProcessor + 1);  NumberOfProcesses=1;  *pid = (UDIPId) CurrentPID;  return (UDINoError);}UDIError UDISetCurrentProcess(pid)  UDIPId          pid;{  if ((pid > (UDIPId) (UDIProcessProcessor + 1)) ||	 (pid < (UDIPId) (UDIProcessProcessor)))    return (UDIErrorNoSuchProcess);  if ((NumberOfProcesses == (int) 0) && (pid != (UDIPId) UDIProcessProcessor))    return (UDIErrorNoSuchProcess);  CurrentPID = pid;  return (UDINoError);}UDIError UDIDestroyProcess(pid)  UDIPId          pid;{  if ((pid > (UDIPId) (UDIProcessProcessor + 1)) ||	 (pid < (UDIPId) (UDIProcessProcessor)))    return (UDIErrorNoSuchProcess);  CurrentPID = (UDIPId) UDIProcessProcessor;  ProcessorState = (UDIUInt32) UDINotExecuting;  PreviousProcessorState = (UDIUInt32) UDINotExecuting;  NumberOfProcesses=0;  return (UDINoError);}UDIError UDIInitializeProcess (ProcessMemory, NumberOfRanges, EntryPoint, StackSizes, NumberOfStacks, ArgString)  UDIMemoryRange ProcessMemory[];	/* In */  UDIInt	NumberOfRanges;		/* In */  UDIResource	EntryPoint;		/* In */  CPUSizeT	StackSizes[];		/* In */  UDIInt	NumberOfStacks;		/* In */  char		*ArgString;		/* In */{  UDIError        ErrCode;  UDIRange	  text_addr, data_addr;  CPUSizeT	  mem_stack_size, reg_stack_size;  ADDR32          arg_start;  ADDR32          data_high;  ADDR32          highmem;  INT32           os_control;  INT32		MsgCode;  UDIInt	i;  exitstat = 0;	/* reset */  PgmStdinMode=TIP_COOKED;	/* revert to default mode */  CLEAR_PENDING_STOP  if (CurrentPID == (UDIPId) UDIProcessProcessor) {    if ((MsgCode = Reset_Processor()) != SUCCESS)       return ((UDIError) MsgCode);    do {       MsgCode = SendConfigWait();    } while (MsgCode == HALT);    if (MsgCode == ABORT_FAILURE)       return (UDIErrorAborted);    else if (MsgCode == FAILURE)	return ((-1) * MONErrNoSynch);    else if (MsgCode != CONFIG)	return ((-1) * MONErrCantRecvMsg);    Mini_unpack_config_msg(&tip_target_config);    /* Reallocate message buffers */    if (Mini_alloc_msgbuf((int) tip_target_config.max_msg_size) != SUCCESS)      return ((-1) * MONErrCantAllocBufs);    ProcessorState = (UDIUInt32) UDINotExecuting;    Channel0_count = 0;    Channel1_count = 0;    Channel2_count = 0;    Channel0Busy = 0;    PreviousProcessorState = (UDIUInt32) UDINotExecuting;    return (UDINoError);  };  /* For other processes */  /* Set Default Values */  mem_stack_size = (CPUSizeT) MONDefaultMemStackSize;  reg_stack_size = (CPUSizeT) MONDefaultRegStackSize;  text_addr.Low = (CPUOffset) tip_target_config.I_mem_start;  text_addr.High = (CPUOffset) tip_target_config.I_mem_start +		   (CPUOffset) tip_target_config.I_mem_size - 1;  data_addr.Low = (CPUOffset) tip_target_config.D_mem_start;  data_addr.High = (CPUOffset) tip_target_config.D_mem_start +		   (CPUOffset) tip_target_config.D_mem_size -		   (CPUOffset) (mem_stack_size + reg_stack_size + 16) - 1;  /* Get Memory Ranges */  if (NumberOfRanges != (UDIInt) 0) {     for (;NumberOfRanges--;) {       switch ((int) ProcessMemory[NumberOfRanges].Space) {	  case	UDI29KIRAMSpace:		text_addr.Low = ProcessMemory[NumberOfRanges].Offset;		text_addr.High = ProcessMemory[NumberOfRanges].Offset +			(CPUOffset) ProcessMemory[NumberOfRanges].Size;		break;	  case	UDI29KDRAMSpace:		data_addr.Low = ProcessMemory[NumberOfRanges].Offset;		data_addr.High = ProcessMemory[NumberOfRanges].Offset +			(CPUOffset) ProcessMemory[NumberOfRanges].Size;		break;	  default: /* don't care */		break;       } /* switch */     } /* for */  }  /* Get Stack Sizes */  for (i = (UDIInt) 0; i < NumberOfStacks; i=i+(UDIInt)1) {     switch ((int) i) {	case	0:  /* register stack size */		if (StackSizes[0] != (CPUSizeT) 0)		  reg_stack_size = StackSizes[0];		break;	case	1: /* memory stack size */		if (StackSizes[1] != (CPUSizeT) 0)		  mem_stack_size = StackSizes[1];		break;	default: /* don't care */		break;     }  }  if ((CPUOffset) text_addr.High > (CPUOffset) data_addr.High)     data_addr.High = text_addr.High;  /* when no data sections */  arg_start = (data_addr.High + 7) & ~0x7;	/* word boundary */  if ((ErrCode = write_args(ArgString, 			    arg_start, &data_high)) != UDINoError)    return (ErrCode);  data_addr.High = (data_high + 7) & ~0x7;	/* double word bdry */  highmem = (ADDR32) 0;  /* User programs run mode */  if (SupervisorMode)    os_control = (INT32) 0x10000000;	/* set bit 28 only */  else if (VirtualMode || ProtectedMode)    os_control = (INT32) 0;  else    os_control = (INT32) 0x80000000;  Mini_build_init_msg((ADDR32) text_addr.Low, (ADDR32) text_addr.High,		      (ADDR32) data_addr.Low, (ADDR32) data_addr.High,		      (ADDR32) EntryPoint.Offset,		      (INT32) mem_stack_size, (INT32) reg_stack_size,		      (ADDR32) highmem,		      (ADDR32) arg_start,		      (INT32) os_control);  SEND_AND_WAIT_ACK(INIT_ACK);  if (ReturnedError == (int) 1) {    ReturnedError = 0;    return ((-1) * MONErrErrorInit);  }  Mini_unpack_init_ack_msg();  ProcessorState = (UDIUInt32) UDINotExecuting;  PreviousProcessorState = (UDIUInt32) UDINotExecuting;  return (UDINoError);}UDIError UDIRead(from, to, count, size, count_done, host_endian)  UDIResource     from;  UDIHostMemPtr   to;  UDICount        count;  UDISizeT          size;  UDICount       *count_done;  UDIBool         host_endian;{  INT32           space = SpaceMap_udi2mm(from.Space);  INT32           done;  INT32           ttl_count;  INT32           msg_count;  INT32           overhead;  ADDR32          ack_addr;  INT32		  ack_space;  BYTE           *output;  UDIError        UDIretval;  UDICount        i;  INT32          *Version;  int             Gr1_val;

⌨️ 快捷键说明

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