Details zur Messdatenaufnahme

Die Scanner Task besteht aus zwei Teilen: einer in klassischem C geschriebenen Interrupt Routine und der auswertenden C++ Task.

int ScanSrvC(void * s_pData, SRegs tStack)
{
	int nRet = E_NOTME;
	int nIncr = 0;
	SCounterVal tCVal;
 
	// check if this is really my timer interrupt
	if ((GetDISLong(DIS_TC03_IRCA) & DIS_TC1IREN) == DIS_TC1IREN)
	{
		// reset timer cause register
		DisableDISLong(DIS_TC03_IRCA, DIS_TC1IREN);
 
		// reset counters if requested
		if (g_pHwSMod->bZeroIncr == TRUE)
		{
			g_pHwSMod->bZeroIncr = FALSE;
			ZeroInc2();
		}
		// read all incremental counter values
		{
			tCVal.nTick = g_pCVMod->tBuffer.nNextWriteVal;
			tCVal.nCVal[0] = RadialIn2((UI08*)INCR_B131, 1);
			tCVal.nCVal[1] = RadialIn2((UI08*)INCR_B131, 2);
			tCVal.nCVal[2] = RadialIn2((UI08*)INCR_B132, 2);
			tCVal.nCVal[3] = RadialIn2((UI08*)INCR_B132, 1);
			tCVal.nCVal[4] = RadialIn2((UI08*)INCR_B133, 1);
			tCVal.nCVal[5] = RadialIn2((UI08*)INCR_B133, 2);
			tCVal.nCVal[6] = RadialIn2((UI08*)INCR_B134, 2);
			tCVal.nCVal[7] = RadialIn2((UI08*)INCR_B134, 1);
			tCVal.nCVal[8] = RadialIn2((UI08*)INCR_B141, 1);
			tCVal.nCVal[9] = RadialIn2((UI08*)INCR_B141, 2);
			tCVal.nCVal[10] = RadialIn2((UI08*)INCR_B142, 2);
			tCVal.nCVal[11] = RadialIn2((UI08*)INCR_B142, 1);
			tCVal.nCVal[12] = RadialIn2((UI08*)INCR_B143, 1);
			tCVal.nCVal[13] = RadialIn2((UI08*)INCR_B143, 2);
			tCVal.nCVal[14] = RadialIn2((UI08*)INCR_B144, 2);
			tCVal.nCVal[15] = RadialIn2((UI08*)INCR_B144, 1);
		}
		// write the values into hardwarestate data module
		for (nIncr = 0; nIncr < INCRCOUNTER; ++nIncr)
		{
			g_pHwSMod->uIO.aIO[INC_MOD0 + nIncr] = tCVal.nCVal[nIncr];
		}
 
		// if scanner active is set, write values into countervals data module
		if (g_pCVMod->bScanActive == TRUE)
		{
			// increment the buffer index and start from beginning when reaching the end
			g_pCVMod->aCVals[g_pCVMod->tBuffer.nNextWriteVal % g_pCVMod->tBuffer.nValCount] = tCVal;
			++g_pCVMod->tBuffer.nNextWriteVal;
		}
		nRet = 0;
	}
	return nRet;
}