serielle schnittstelle und c++



  • ja



  • hi chris

    frag doch einfach mal im richtigen forum, sprich: bei den mfc könnern (hier im mfc forum).

    außerderm gibts hier eine beispielanwendung, denke ich
    http://www.codeguru.com/Cpp/I-N/network/serialcommunications/article.php/c2503

    zum download.

    so long

    ps: auf mfc komme ich, weil im der zu donwloadenden beispielanwendung
    #include "stdafx.h"
    benötigt wird 😉 also mfc mit einbinden!!



  • habs mal eben durchgetestet: ein projekt anlegen
    win32 konsole, aber MIT mfc unterstützung.

    dann gehts wunderbar mit dem downgeloadeten source.

    so long



  • void CI2c_porgDlg::OnRead()
    {
    	CComboBox * pCB = (CComboBox *) GetDlgItem ( IDC_COM ) ; 
    	int com_no = pCB -> GetCurSel () ;
    	if ( com_no >= 0 )		
    	{
    		pCB -> GetLBText( com_no , iCOM ) ;
    
    CFileDialog sa ( 0,". bin", "i2c", 0, "Bin-Dateien(*.bin)|*.bin||" ) ;
    		if (sa.DoModal() == IDOK)
    		{
    			if (iCOM == "COM1") cport = 1;
    			if (iCOM == "COM2") cport = 2;
    			UpdateData ( TRUE ) ;
    			CString m_sPath = sa.GetPathName( );
    			CFile newbin;
    		    newbin.Open( m_sPath, CFile::modeCreate|CFile::modeWrite);
    			CSerial serial;
    			if (serial.Open(1, 9600))
    				{
    					char* lpBuffer = new char[500];
    					int nBytesRead = serial.ReadData(lpBuffer, 500);
    					char szSampleText[255];
    					strcpy(szSampleText, lpBuffer);
    					newbin.Write (szSampleText,255);
    					delete []lpBuffer;
    				}
    				else
    				AfxMessageBox("Failed to open port!");
    		}
    }	
    	else
    		MessageBox ("Bitte COM-Port wählen!");
    
    }
    

    So sieht mein Programmstück bisher aus, liefert mir aber einen Fehler....

    Debug Assertiation Failed
    Programm:....
    File:filecore.cpp
    Line:237

    😞



  • Hallo,

    in Zeile 237 der filecore.cpp befindet sich das hier:

    ASSERT_VALID(this);
    

    also stimmt irgendetwas mit dem CFile-Objekt newbin nicht, das mußt du prüfen, warum evtl. keine Datei erstellt wurde (dazu z.B. den Rückgabewert von newbin.Open prüfen, oder den Dateinamen ausgeben lassen).

    MfG



  • chris`- schrieb:

    void CI2c_porgDlg::OnRead()
    {
    	CComboBox * pCB = (CComboBox *) GetDlgItem ( IDC_COM ) ; 
    	int com_no = pCB -> GetCurSel () ;
    	if ( com_no >= 0 )		
    	{
    		pCB -> GetLBText( com_no , iCOM ) ;
    		
    
    CFileDialog sa ( 0,". bin", "i2c", 0, "Bin-Dateien(*.bin)|*.bin||" ) ;
    		if (sa.DoModal() == IDOK)
    		{
    			if (iCOM == "COM1") cport = 1;
    			if (iCOM == "COM2") cport = 2;
    			UpdateData ( TRUE ) ;
    			CString m_sPath = sa.GetPathName( );
    			CFile newbin;
    		    newbin.Open( m_sPath, CFile::modeCreate|CFile::modeWrite);
    			CSerial serial;
    			if (serial.Open(1, 9600))
    				{
    					char* lpBuffer = new char[500];
    					int nBytesRead = serial.ReadData(lpBuffer, 500);
    					char szSampleText[255];
    					strcpy(szSampleText, lpBuffer);
    					newbin.Write (szSampleText,255);
    					delete []lpBuffer;
    				}
    				else
    
    				AfxMessageBox("Failed to open port!");
    		}
    }	
    	else
    		MessageBox ("Bitte COM-Port wählen!");
    
    }
    

    So sieht mein Programmstück bisher aus, liefert mir aber einen Fehler....

    Debug Assertiation Failed
    Programm:....
    File:filecore.cpp
    Line:237

    😞

    aber das beispiel, was ich dir da oben zum download angeraten habe, funktioniert doch wohl. hast du dich daran orientiert?
    nochmal: frag doch im richtigen unterforum. ➡ Mfc



  • Danke für die hilfe, problem hat sich gelöst... habe einfach den strcpy befehl rasugenommen und schreibe den puffer direkt in die datei.



  • gibt es eine möglichkeint den buffer der seriellen schnittstelle zu löschen?




Anmelden zum Antworten