andrewjfox Posted December 8, 2011 Share Posted December 8, 2011 It's always the way, everything works fine at the office, then out in the field, crash. My program runs ok for awhile, varies anywhere from 1min to 30min, then get a windows error, and have to close the program. Following details are from windows System log, Error 26, Application Popup Application popup: DAQFactory - application.ctl:DAQFactory.exe - Application Error: The instruction at 0x71daa354 referenced memory at 0x000000a0. The memory could not be read. Click on OK to terminate program Log Name: System Source: Application Popup Event ID: 26 Level: Information Details: Provider - Application Popup EventID - 26, Qualifiers 16384 Level 4 Keywords 0x80000000000000 Channel - System OS is Windows Embedded Standard 7, running on an Atom machine (FitPC2i), 1G ram, 30GB SSD. I have liberal error handling within the program, which I have included, but have not been able to find the source of the error. I am onsite for a few more days and would appreciate any help, suggestions you can give. Regards Andrew application.ctl Link to comment Share on other sites More sharing options...
AzeoTech Posted December 9, 2011 Share Posted December 9, 2011 A few general comments first that I'm mentioning as I'm looking through your program: 1) you should have your two input channels on the same timing/offset since they are on the same comm port. Having them separated doesn't achieve much that wouldn't be handled better in a sequence 2) you use the CommPort array to hold your ports. Consider using a multidimensional array instead of a single dimensional array, where column 0 is your radio port and 1 is your comm_port. I'd still use the constants in the array, its just clearer to use a multidimensional array. Actually that's about it, and they are pretty minor. You have some nice clean code. So, possible crash points: 1) what release of DF are you running? Older versions had an issue with running out of system handles if you constantly re-initialized an Ethernet port. 2) if you tested in the office on a regular version of Windows, but Windows Embedded is causing a crash, there is probably an issue with the OS, probably a missing driver or similar 3) how long does it take before it crashes? Is it completely random? Try disabling features and see if you can isolate what code is causing the crash. Also consider adding logging code in your loops so you can trace what is causing the crash Link to comment Share on other sites More sharing options...
andrewjfox Posted December 12, 2011 Author Share Posted December 12, 2011 Hi, Thanks for the positive comments. I tried to let go of ego a long time ago, so any (constructive) feedback is always greatly appreciated, but must admit i sat up a little straighter after reading your reply. I'm using latest version, and have tried to verify if it's a Windows difference. Unfortunately it's completely random so haven't been able to track it down. Only clue so far is that when the remote TCP devices are not connected the fault dissappears. This doesn't realy help since the program continues to poll the devices, and I'm not using any 3rd party dll's that might behave differently with devices connected or not. Will keep trying to reliably replicate Andrew Link to comment Share on other sites More sharing options...
andrewjfox Posted January 16, 2012 Author Share Posted January 16, 2012 Have found something, I have data from TCP devices coming into a string buffer that is processed and messages removed as they are processed. For this I use Delete(strBuffer,Index, NumChars). Since the messages come in async, and a valid message might be anywhere in the buffer, I have to delete only the message that has been processed and leave the rest of the buffer. During testing I found that if the num chars is > buffer then Delete crashes the system and causes Windows popup error. To confirm I created new doc with only following while (1) strBuffer += "Test" + DoubleToStr(loopcnt) Delay(1) strBuffer = Delete(strBuffer,0,20) loopcnt += 1 endwhile Is Delete supposed to be safe from this? Regardless it's not good practice and I will have to look at preventing the occurence. Andrew Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.