void __fastcall TForm1::Button1Click(TObject *Sender)
{
  char TextString[256];
  unsigned int UniqueID = CSpinEdit1->Value;
  int StartPercent, cnt;

  CGauge1->Progress = 0;
    
  //config data pins as output
  OutputPort(nAddress+2, InputPort(nAddress+2)&0xDF);

  //Enable buffers
  SetOE(1);

  //Start programming
  SetMOSI(0);
  SetSCK(0);
  SetReset(0);
  Sleep(1);
  SetReset(1);
  for (cnt=0; cnt<50; cnt++)
  {
    CGauge1->AddProgress(1);
    Sleep(75);
  }

  StartPercent = CGauge1->PercentDone;
  for (cnt=0; cnt<16; cnt++)
  {
    SetMOSI((bool)(UniqueID&(0x8000>>cnt)));
    SetSCK(1);
    Sleep(1);
    SetSCK(0);
    Sleep(1);
    CGauge1->AddProgress(((100-StartPercent)*cnt)/32);
  }
  unsigned int ControlValue = 0xAC5A;
  for (cnt=0; cnt<16; cnt++)
  {
    SetMOSI((bool)(ControlValue&(0x8000>>cnt)));
    SetSCK(1);
    Sleep(1);
    SetSCK(0);
    Sleep(1);
    CGauge1->AddProgress(((100-StartPercent)*cnt)/32);
  }
  Sleep(100);
  
  //Start reset
  SetMOSI(0);
  SetSCK(0);

  SetReset(0);
  Sleep(1);
  SetReset(1);

  //Disable buffers
  SetOE(0);
}
Beispiel #2
0
void CLogManager::ResetLogData(uint16 u2LogLevel)
{
    //重新设置日志等级,加载日志文件
    SetReset(true);

    //这里等待一段时间,等待其他日志全部写入完成,在重载日志模块。
    //这样做少加一个锁
    ACE_Time_Value tvSleep(0, 1000);
    ACE_OS::sleep(tvSleep);

    m_pServerLogger->ReSet(u2LogLevel);
    SetReset(false);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  //config data pins as output
  OutputPort(nAddress+2, InputPort(nAddress+2)&0xDF);

  //Enable buffers
  SetOE(1);

  //Start reset
  SetMOSI(0);
  SetSCK(0);

  SetReset(0);
  Sleep(1);
  SetReset(1);

  //Disable buffers
  SetOE(0);
}
Beispiel #4
0
int CLogManager::Start()
{
    if(m_blRun == true)
    {
        return 0;
    }
    else
    {
        SetReset(false);
        return open();
    }
}
Beispiel #5
0
static Stacklet_t*
Stacklet_Alloc(StackChain_t* stackChain)
{
	int i;
	Stacklet_t *res = NULL;
	/*
		Each stacklet contains the primary and replica.  Each one
		starts with a guard page, a C area, and then an ML area.
	*/
	int size = (GuardStackletSize + MLStackletSize + CStackletSize) * kilobyte;	/* for just one of the two: primary and replica */

	assert(stackletOffset == size);
	for (i=0; i<NumStacklet; i++)
		if (CompareAndSwap(&Stacklets[i].count, 0, 1) == 0) {
			res = &Stacklets[i];
			break;
		}
	if (res == NULL)
		DIE("out of stack space");

	res->parent = stackChain;
	res->state = Inconsistent;
	if (!res->mapped) {
		mem_t start = my_mmap(2 * size, PROT_READ | PROT_WRITE);
		mem_t middle = start + size / (sizeof (val_t));

		res->baseExtendedBottom = start +
			(GuardStackletSize * kilobyte) / (sizeof (val_t));
		res->baseBottom = res->baseExtendedBottom +
			(CStackletSize * kilobyte) / (sizeof (val_t));
		res->baseTop = res->baseBottom +
			(MLStackletSize * kilobyte) / (sizeof (val_t));
		assert(res->baseTop == middle);
		/*
			Get some initial room in multiples of 64 bytes; Sparc
			requires at least 68 byte for the save area.
		*/
		res->baseTop -= (128 / sizeof(val_t));
		my_mprotect(0, (caddr_t) start, GuardStackletSize * kilobyte,
			PROT_NONE);	/* Guard page at bottom of primary */
		my_mprotect(1, (caddr_t) middle, GuardStackletSize * kilobyte,
			PROT_NONE);	/* Guard page at bottom of replica */

		res->callinfoStack = SetCreate(size / (32 * sizeof (val_t)));
		res->mapped = 1;
	}
	res->baseCursor = res->baseTop;
	for (i=0; i<32; i++)
		res->bottomBaseRegs[i] = 0;
	SetReset(res->callinfoStack);
	return res;
}
Beispiel #6
0
int SPIBus::Reset(void)
{
	UserDebug(UserApp2, "SPIBus::Reset() I\n");

	SetDelay();

	clearSCK();		// Dal datasheet AVR
	setMOSI();		// the datasheet don't specify, but we need to provide power from at least one line (MOSI while SCK and RESET are low)

	WaitMsec(20);
	ClearReset();	//One pulse on the reset (datasheet AVR)
	WaitMsec( THEAPP->GetSPIResetPulse() );	//AppNote AVR910 suggest >100 msec
	SetReset();

	WaitMsec( THEAPP->GetSPIDelayAfterReset() );

	UserDebug(UserApp2, "SPIBus::Reset() O\n");

	return OK;
}
Beispiel #7
0
void CModifiedEditBox::SetChanged (bool Changed)
{
	m_Changed = Changed;
	if (m_Changed)
	{
		SetReset(false);
		if (m_BoldFont == NULL)
		{
			m_OriginalFont = (HFONT)SendMessage(WM_GETFONT); 

			LOGFONT lfSystemVariableFont;
			GetObject ( m_OriginalFont, sizeof(LOGFONT), &lfSystemVariableFont );
			lfSystemVariableFont.lfWeight = FW_BOLD;

			m_BoldFont = CreateFontIndirect ( &lfSystemVariableFont );
		}
		SendMessage(WM_SETFONT,(WPARAM)m_BoldFont);
		InvalidateRect(NULL);
		if (m_TextField)
		{
			::SendMessage(m_TextField,WM_SETFONT,(WPARAM)m_BoldFont,0);
			::InvalidateRect(m_TextField, NULL, true);
				
		}
	} else {
		if (m_OriginalFont)
		{
			SendMessage(WM_SETFONT,(WPARAM)m_OriginalFont);
			InvalidateRect(NULL);
			if (m_TextField)
			{
				::SendMessage(m_TextField,WM_SETFONT,(WPARAM)m_OriginalFont,0);
				::InvalidateRect(m_TextField, NULL, true);
			}
		}
	}
}
Beispiel #8
0
/* Copy primary into replica */
int
Stacklet_Copy(Stacklet_t* stacklet)
{
	StackletState_t state;

	state = CompareAndSwap((int*) &stacklet->state, Pending, Copying);
	if (state == Pending) {
		int i;
		int activeSize = (stacklet->baseTop - stacklet->baseCursor) *
			sizeof(val_t);
		mem_t primaryCursor = stacklet->baseCursor +
			(primaryStackletOffset / sizeof(val_t));
		mem_t replicaCursor = stacklet->baseCursor +
			(replicaStackletOffset / sizeof(val_t));
		volatile reg_t* primaryRegs = &stacklet->bottomBaseRegs
			[primaryStackletOffset == 0 ? 0 : 32];
		volatile reg_t* replicaRegs = &stacklet->bottomBaseRegs
			[primaryStackletOffset == 0 ? 32 : 0];
		assert(stacklet->count > 0);
		assert(stacklet->baseExtendedBottom <= stacklet->baseCursor);
		assert(stacklet->baseCursor <= stacklet->baseTop);
		SetReset(stacklet->callinfoStack);
		stacklet->replicaCursor = stacklet->baseCursor;
		stacklet->replicaRetadd = stacklet->retadd;
		memcpy(replicaCursor, primaryCursor, activeSize);
		for (i=0; i<32; i++)
			replicaRegs[i] = primaryRegs[i];
		stacklet->state = InactiveCopied;
		return 1;
	}
	while (stacklet->state == Copying)
		;
	assert(stacklet->state != Inconsistent);
	assert(stacklet->state != Pending);
	return 0;
}
Beispiel #9
0
void
SetTransfer(Set_t* from, Set_t* to)	/* destructive operation on from */
{
	SetCopy(from,to);
	SetReset(from);
}
static void do_work(Proc_t *proc, int additionalWork)
{
  Heap_t *srcRange = (GCType == Minor) ? nursery : fromSpace;
  
  if (additionalWork <= 0)
    return;
  addMaxWork(proc, additionalWork);
  procChangeState(proc, GCWork, 612);
  proc->segmentType |= (GCType == Major) ? MajorWork : MinorWork;

  if (collectDiag >= 2)
    printf("GC %4d/%6d:  Entered do_work(%d)  updateWorkDone = %5d\n",
	   NumGC, proc->segmentNumber, additionalWork, updateGetWorkDone(proc));

  while (!reachMaxWork(proc)) {
    ploc_t rootLoc, globalLoc, backLoc;
    ptr_t backObj, gray;
    int largeStart, largeEnd;
    Stacklet_t *stacklet;

    /* Get shared work */
    popSharedStack(workStack, &proc->work);

    if ((GCStatus == GCPendingOn || GCStatus == GCPendingOff) &&
	isLocalWorkEmpty(&proc->work))
      break;

    /* Do the thread stacklets - we can afford to call updateWorkDone often */
    while (!reachCheckWork(proc) &&
	   ((stacklet = (Stacklet_t *) SetPop(&proc->work.stacklets)) != NULL)) {
      if (!work_root_scan(proc, stacklet))
	SetPush(&proc->work.stacklets, (ptr_t) stacklet);
    }

    /* Do the rootLocs */
    if (GCType == Minor) {
      while (!reachCheckWork(proc) &&
	     ((rootLoc = (ploc_t) SetPop(&proc->work.roots)) != NULL)) {
	locAlloc1_copyCopySync_primarySet(proc,rootLoc,srcRange);
	proc->segUsage.fieldsScanned++;
      }
    }
    else {
      while (!reachCheckWork(proc) && 
	     ((rootLoc = (ploc_t) SetPop(&proc->work.roots)) != NULL)) {
	locAlloc1L_copyCopySync_primarySet(proc,rootLoc,srcRange,largeSpace);
	proc->segUsage.fieldsScanned++;
      }
    }

    /* Do the backObjs and backLocs */
    if (GCType == Minor) {
      while (!updateReachCheckWork(proc) &&
	     ((backObj = (ptr_t) SetPop(&proc->work.backObjs)) != NULL)) {
	selfTransferScanObj_locAlloc1_copyCopySync_primarySet(proc,backObj,srcRange);
      }
      while (!reachCheckWork(proc) &&
	     ((backLoc = (ploc_t) SetPop(&proc->work.backLocs)) != NULL)) {
	ploc_t mirrorBackLoc = backLoc + ((primaryArrayOffset == 0) ? 1 : -1);
	*mirrorBackLoc = *backLoc;
	locAlloc1_copyCopySync_primarySet(proc,mirrorBackLoc,srcRange);
	proc->segUsage.fieldsScanned += 2;
      }
    }
    else {
      SetReset(&proc->work.backObjs);
      SetReset(&proc->work.backLocs);
    }

    /* Do the globalLocs */
    if (GCType == Minor) 
      while (!reachCheckWork(proc) && 
	     ((globalLoc = (ploc_t) SetPop(&proc->work.globals)) != NULL)) {
	ploc_t replicaLoc = (ploc_t) DupGlobal((ptr_t) globalLoc);
	locAlloc1_copyCopySync_primarySet(proc,replicaLoc,srcRange);
	proc->segUsage.globalsProcessed++;
      }
    else       
      while (!reachCheckWork(proc) &&
	     ((globalLoc = (ploc_t) SetPop(&proc->work.globals)) != NULL)) {
	ploc_t replicaLoc = (ploc_t) DupGlobal((ptr_t) globalLoc);
	locAlloc1L_copyCopySync_primarySet(proc,replicaLoc,srcRange,largeSpace);
	proc->segUsage.globalsProcessed++;
      }

    /* Do the large objects - don't need to optimize loop */
    while (!updateReachCheckWork(proc) &&
	   (gray = SetPop3(&proc->work.segments,(ptr_t *)&largeStart,(ptr_t *)&largeEnd))) {
      if (GCType == Minor) {
	int isMirrorPtrArray = (GET_TYPE(gray[-1]) == MIRROR_PTR_ARRAY_TYPE);
	if (isMirrorPtrArray) {
	  fastAssert(inHeap(gray, fromSpace));
	  selfTransferScanSegment_copyWriteSync_locAlloc1_copyCopySync_primarySet(proc,gray,largeStart,largeEnd,srcRange);
	}
	else
	    transferScanSegment_copyWriteSync_locAlloc1_copyCopySync_primarySet(proc,gray,largeStart,largeEnd,srcRange);
      }
      else
	 transferScanSegment_copyWriteSync_locAlloc1L_copyCopySync_primarySet(proc,gray,largeStart,largeEnd,srcRange, largeSpace);
    }

    /* Work on the gray objects */
    if (GCType == Minor)
      while (!reachCheckWork(proc) &&
	     ((gray = SetPop(&proc->work.objs)) != NULL)) 
	transferScanObj_copyWriteSync_locAlloc1_copyCopySync_primarySet(proc,gray,srcRange);
    else
      while (!reachCheckWork(proc) &&
	     ((gray = SetPop(&proc->work.objs)) != NULL))
	transferScanObj_copyWriteSync_locAlloc1L_copyCopySync_primarySet(proc,gray,srcRange,largeSpace);
    /* Put work back on shared stack */
    if (pushSharedStack(0,workStack,&proc->work)) {
      if (GCStatus == GCAgressive)
	GCStatus = GCPendingOn;
      else if (GCStatus == GCOn)
	GCStatus = GCPendingOff;
    }
  }

  assert(isLocalWorkEmpty(&proc->work));
  if (collectDiag >= 2)
    printf("GC %d Seg %d:  Completed do_work(%d)  segWork = %5d    sharedStack(%4ld items %2ld segs)     %ld alloc  %ld copied\n",
	   NumGC, proc->segmentNumber, additionalWork, updateGetWorkDone(proc), 
	   SetLength(&workStack->work.objs), SetLength(&workStack->work.segments),
	   proc->cycleUsage.bytesAllocated + proc->segUsage.bytesAllocated,
	   bytesCopied(&proc->cycleUsage) + bytesCopied(&proc->segUsage));

}
Beispiel #11
0
void
discardNextSharedStack(SharedStack_t* ss)
{
	SetReset(&ss->work.nextBackObjs);
	SetReset(&ss->work.nextBackLocs);
}