Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 564
  • Last Modified:

Serial Communications

Hi

I am re-jigging some code I have used for some time now and have hit a small
problem.

I have two apps using the same serial comm code. On a call to

OnSerialMsg in the new app I am building

The debugger keeps bringing up the file

C\...\SRC\Intel\CHKSTK.ASM

File Header....

        page    ,132
        title   chkstk - C stack checking routine
;***
;chkstk.asm - C stack checking routine
;
;       Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
;
;Purpose:
;       Provides support for automatic stack checking in C procedures
;       when stack checking is enabled.

End File Header


Then as soon as it hits any one of the if statements the debugger jumps to
return 0 and exits the function. I have debugged this code many times
and have never had this happen

LRESULT CSerialDlg::OnSerialMsg(WPARAM wParam, LPARAM /*lParam*/)
{
      CSerialAPI::EEvent eEvent = CSerialAPI::EEvent(LOWORD(wParam));
      CSerialAPI::EError eError = CSerialAPI::EError(HIWORD(wParam));

      if (eError)
            // what a do?

      if (eEvent & CSerialAPI::EEventBreak)
            

      if (eEvent & CSerialAPI::EEventError)
            
      
      if (eEvent & CSerialAPI::EEventRcvEv)
                 
                 ....................


        return 0;
}


Any help much appreciated

LittlePerson
0
LittlePerson
Asked:
LittlePerson
  • 3
  • 2
1 Solution
 
SteHCommented:
An error during stack checking normally means that calling conventions don't match. Possible ones are __cdecl, __stdcall or PASCAL. The difference is how they treat arguments to functions: Putting them from left to right or the other way on the stack and who has to cleanup when the function finishes. If the stack is not cleaned up by the called function as the calles expected you will get this error. But writing out of bounds of an array might modify the stack in a way that a check fails on return.

Standard for C/C++ is __cdecl which means right to left pushing of arguments. Callee must clean the stack.
0
 
LittlePersonAuthor Commented:
I am not understanding !!!
0
 
SteHCommented:
To assure that the stack is not altered when returning from a call to a function a value is pushed onto the stack before calling the function and stored into a register. After returning these two values are compared and need to be identical. If not the above mentioned code is called. To get into this situation there are mainly two options:
1) Writing to a memory location using a pointer can modify the stored value. In that case you need to check whether all array indices you use are within bounds reserved for that array.

2) Calling conventions don't match. To find this type of error can be much more tricky since there are several possibilities. Values can be assumed to be put on the stack by value or by address. If their sizes don't match the cleaning up after calling will fail since the amount of data on the stack is different from the amount removed. Check all function declarations and that all header files agree.

Can you post more code?
0
 
LittlePersonAuthor Commented:
Thanks for the replies.

I will post more code later as time is tight at the moment. The only change I made
is that instead of writing CString* over the serial communication I am now sending
an unsigned char.

Till later...


Thanks
0
 
LittlePersonAuthor Commented:
Thanks again for the reply and sorry for the delay in getting
back to the question. Fortunately the code is performing OK now
(well I have a new problem now - new question to be posted)

Hopefully you can help with this new problem.

Regards
LittlePerson
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now