greg@425: /** greg@425: * Yagarto specific code greg@425: **/ greg@425: edouard@518: #include greg@425: greg@425: /* provided by POUS.C */ edouard@518: extern unsigned long long common_ticktime__; edouard@518: void LPC_GetTime(IEC_TIME*); edouard@518: void LPC_SetTimer(unsigned long long next, unsigned long long period); greg@425: greg@425: long AtomicCompareExchange(long* atomicvar,long compared, long exchange) greg@425: { edouard@518: /* No need for real atomic op on LPC, edouard@518: * no possible preemption between debug and PLC */ edouard@518: long res = *atomicvar; edouard@518: if(res == compared){ edouard@518: *atomicvar = exchange; edouard@518: } edouard@518: return res; greg@425: } greg@425: greg@425: void PLC_GetTime(IEC_TIME *CURRENT_TIME) greg@425: { greg@425: /* Call target GetTime function */ edouard@518: LPC_GetTime(CURRENT_TIME); greg@425: } greg@425: edouard@518: void PLC_SetTimer(unsigned long long next, unsigned long long period) greg@425: { edouard@518: LPC_SetTimer(next, period); greg@425: } greg@425: greg@425: int startPLC(int argc,char **argv) greg@425: { edouard@518: if(__init(argc,argv) == 0){ edouard@518: PLC_SetTimer(0, common_ticktime__); greg@425: return 0; edouard@518: }else{ greg@425: return 1; edouard@518: } greg@425: } greg@425: greg@425: int TryEnterDebugSection(void) greg@425: { edouard@502: return __DEBUG; greg@425: } greg@425: greg@425: void LeaveDebugSection(void) greg@425: { greg@425: } greg@425: greg@425: int stopPLC(void) greg@425: { greg@425: __cleanup(); greg@425: return 0; greg@425: } greg@425: greg@425: extern unsigned long __tick; edouard@502: int _DebugDataAvailable = 0; greg@425: /* from plc_debugger.c */ edouard@452: int WaitDebugData(unsigned long *tick) greg@425: { edouard@452: *tick = __tick; edouard@502: return _DebugDataAvailable; greg@425: } greg@425: greg@425: /* Called by PLC thread when debug_publish finished greg@425: * This is supposed to unlock debugger thread in WaitDebugData*/ greg@425: void InitiateDebugTransfer(void) greg@425: { edouard@502: _DebugDataAvailable = 1; greg@425: } greg@425: edouard@502: void suspendDebug(int disable) greg@425: { edouard@502: __DEBUG = !disable; greg@425: } greg@425: greg@425: void resumeDebug(void) greg@425: { edouard@502: __DEBUG = 1; greg@425: } edouard@483: edouard@521: int CheckRetainBuffer(void) edouard@521: { edouard@521: /* TODO : compare RETAIN buffer start with MD5 */ edouard@521: return 0; edouard@521: } edouard@521: edouard@483: void Retain(unsigned int offset, unsigned int count, void *p) edouard@497: { edouard@521: /* TODO : write in RETAIN buffer at offset*/ edouard@483: } edouard@483: edouard@483: void Remind(unsigned int offset, unsigned int count, void *p) edouard@483: { edouard@521: /* TODO : read at offset in RETAIN buffer */ edouard@483: }